Compare commits

..

No commits in common. "main" and "pre-moonshot" have entirely different histories.

11 changed files with 191 additions and 748 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View file

@ -1,62 +0,0 @@
name: Maxwell's Demon
on:
issues:
types: [opened]
concurrency:
group: demon-state
cancel-in-progress: false
permissions:
contents: write
issues: write
jobs:
sort:
if: "startsWith(github.event.issue.title, 'demon: sort 12 bits')"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Sort 12 bits into the lattice
run: |
python3 - <<'EOF'
import datetime
import json
path = "state/demon.json"
with open(path) as fh:
state = json.load(fh)
state["bits_sorted"] += 12
state["generation"] += 1
state["demons"] += 1
state["last_sorted_at"] = datetime.datetime.now(
datetime.timezone.utc
).isoformat(timespec="seconds")
with open(path, "w") as fh:
json.dump(state, fh, indent=2)
fh.write("\n")
EOF
python3 engine/generate_entropy_svg.py
- name: Commit lowered entropy
env:
AUTHOR: ${{ github.event.issue.user.login }}
run: |
git config user.name "github-actions[bot]"
git config user.email "41898470+github-actions[bot]@users.noreply.github.com"
git add state/demon.json assets/entropy.svg
git commit -m "chore: demon sorted 12 bits (S lowered by @${AUTHOR})"
git pull --rebase origin "${GITHUB_REF_NAME}"
git push
- name: Thank the demon and close the gate
env:
GH_TOKEN: ${{ github.token }}
ISSUE: ${{ github.event.issue.number }}
run: |
gh issue comment "$ISSUE" --repo "$GITHUB_REPOSITORY" --body \
"12 bits sorted. Entropy of this README decreased by 34.4 zJ (12 × kT ln 2 at 300 K). The second law remains statistical. Thank you, demon."
gh issue edit "$ISSUE" --repo "$GITHUB_REPOSITORY" --add-label demon
gh issue close "$ISSUE" --repo "$GITHUB_REPOSITORY"

View file

@ -1,37 +0,0 @@
name: Nightly Telemetry
on:
schedule:
- cron: "17 6 * * *"
workflow_dispatch:
concurrency:
group: demon-state
cancel-in-progress: false
permissions:
contents: write
jobs:
refresh:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Refresh feed, stats, featured cards, entropy field
env:
GITHUB_TOKEN: ${{ github.token }}
run: python3 engine/nightly.py
- name: Commit if changed
run: |
if git diff --quiet; then
echo "no changes"
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898470+github-actions[bot]@users.noreply.github.com"
git add README.md state/demon.json assets/entropy.svg
git commit -m "chore: nightly telemetry refresh"
git pull --rebase origin "${GITHUB_REF_NAME}"
git push

View file

@ -4,15 +4,19 @@ on:
schedule:
# Runs every 12 hours
- cron: "0 */12 * * *"
workflow_dispatch:
push:
branches:
- main
jobs:
generate:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Generate Snake
uses: Platane/snk/svg-only@v3
@ -21,11 +25,11 @@ jobs:
outputs: |
dist/github-contribution-grid-snake.svg
dist/github-contribution-grid-snake-dark.svg?palette=github-dark
- name: Push to output branch
uses: crazy-max/ghaction-github-pages@v4
with:
target_branch: output
build_dir: dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

3
.gitignore vendored
View file

@ -1,3 +0,0 @@
.DS_Store
__pycache__/
*.pyc

View file

@ -4,33 +4,23 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Repository Overview
This is the GitHub profile repository for @developtheweb. Its README renders on the profile page and is a live system, not a static page: an animated entropy-reversal SVG whose state is lowered by visitors ("Maxwell's demon"), plus nightly-refreshed telemetry. Do not reintroduce third-party rendering services (capsule-render, readme-typing-svg, komarev, vercel stats/quotes apps) — everything renders from this repo, GitHub, or stevenmilanese.com assets.
This is a GitHub profile repository containing only a README.md file that displays on the @developtheweb GitHub profile page. There is no source code, build configuration, or tests in this repository.
## Architecture
## Repository Structure
```
README.md profile page; contains marker-fenced generated sections
engine/generate_entropy_svg.py SMIL-animated assets/entropy.svg from state/demon.json (stdlib only)
engine/nightly.py refreshes README marker sections + bumps entropy generation (stdlib only)
state/demon.json bits_sorted / generation / demons / last_sorted_at
assets/entropy.svg generated — never hand-edit; regenerate via the engine
.github/workflows/demon.yml issues:opened, title "demon: sort 12 bits" → +12 bits, regen SVG, commit, comment, close
.github/workflows/nightly.yml cron 17 6 * * * → engine/nightly.py, commit if changed
.github/workflows/snake.yml cron every 12h → contribution snake SVGs on the `output` branch
/home/aurelius/git/developtheweb/
└── README.md
```
## README marker sections (machine-written — edit the generators, not the sections)
## Working with this Repository
- `<!-- FEED:START/END -->` — 4 newest Strange Quarks articles (RSS `/feed.xml` if populated, else parsed from https://stevenmilanese.com/blog HTML)
- `<!-- STATS:START/END -->` — telemetry row with live star/repo totals
- `<!-- FEATURED:START/END -->` — featured cards (anthropic-certs, slTrain, meowchi-releases, mpl) with live star counts
Since this is a profile repository with only a README.md file:
`engine/nightly.py` is fail-safe per section: on fetch/parse failure it leaves that section untouched and exits 0.
- Any changes should maintain the professional formatting and structure of the profile README
- The README uses GitHub-flavored markdown with centered content, badges, and images
- External image assets are referenced from `https://github.com/developtheweb/stevenmilanese-com/blob/main/public/`
## Conventions
## Note
- Conventional commit messages (`feat:`, `fix:`, `chore:`, `ci:`). No attribution footers of any kind.
- Contact is `rev@moonfactory.dev` only — the old Telegram link and the old level-host email address are retired and must not reappear.
- Entropy formula: `S = max(12.7, 100 0.0002·bits_sorted)`; 12 bits per demon click = 34.4 zJ (12 × kT ln 2 at 300 K).
- SVG regeneration is deterministic for a given `generation` — diffs stay reviewable.
- Test locally with `python3 engine/generate_entropy_svg.py` and `GITHUB_TOKEN=$(gh auth token) python3 engine/nightly.py` (both stdlib-only; no pip installs).
This is not a development project - it's a GitHub profile repository used for personal branding and showcasing work. There are no build commands, tests, or development workflows associated with this repository.

277
README.md
View file

@ -1,120 +1,191 @@
<div align="center">
# Reversing the irreversible
<!-- Animated Wave -->
<img src="https://capsule-render.vercel.app/api?type=waving&color=gradient&customColorList=14,15,16,17,18,19&height=100&section=header&fontSize=0" width="100%" />
*Rev. Steven Milanese — the second law is statistical, not sacred. The demon pays its bills in bits.*
<!-- Logo with Animation -->
<img src="https://stevenmilanese.com/StevenMilanese-full-logo.png" alt="Steven Milanese" width="400"/>
<!-- Animated Typing Header -->
[![Typing SVG](https://readme-typing-svg.demolab.com?font=Fira+Code&size=32&duration=2800&pause=2000&color=06B6D4&center=true&vCenter=true&width=600&lines=Steven+Milanese;Autodidactic+Polymath;Systems+Alchemist;Physicist+%26+Reverend;Arch+Linux+User+BTW)](https://git.io/typing-svg)
<!-- Profile Views Counter -->
<br>
<img src="https://komarev.com/ghpvc/?username=developtheweb&color=0891b2&style=for-the-badge&label=PROFILE+VIEWS" alt="Profile Views"/>
<!-- Social Badges with Custom Colors -->
<br><br>
[![Website](https://img.shields.io/badge/Website-stevenmilanese.com-1F2937?style=for-the-badge&logo=googlechrome&logoColor=white&labelColor=374151&color=06B6D4)](https://stevenmilanese.com)
[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white&labelColor=084C91&color=0A66C2)](https://www.linkedin.com/in/stevenmilanese/)
[![Blog](https://img.shields.io/badge/Blog-Strange_Quarks-14B8A6?style=for-the-badge&logo=hashnode&logoColor=white&labelColor=047857&color=14B8A6)](https://stevenmilanese.com/strange-quarks)
<br>
[![X](https://img.shields.io/badge/X-@developtheweb-000000?style=for-the-badge&logo=x&logoColor=white&labelColor=171717&color=000000)](https://x.com/developtheweb)
[![Telegram](https://img.shields.io/badge/Telegram-@CodeAndVerse-26A5E4?style=for-the-badge&logo=telegram&logoColor=white&labelColor=0088CC&color=26A5E4)](https://t.me/CodeAndVerse)
[![Email](https://img.shields.io/badge/Email-Contact_Me-EA4335?style=for-the-badge&logo=gmail&logoColor=white&labelColor=C23B2C&color=EA4335)](mailto:dev@level.host)
<br>
[![ORCID](https://img.shields.io/badge/ORCID-Research_Profile-A6CE39?style=for-the-badge&logo=orcid&logoColor=white&labelColor=87A330&color=A6CE39)](https://orcid.org/0009-0008-0442-208X)
[![OSF](https://img.shields.io/badge/OSF-Open_Science-2077B4?style=for-the-badge&logo=osf&logoColor=white&labelColor=1A5F8F&color=2077B4)](https://osf.io/3tsd4/)
</div>
<!-- Animated Banner -->
<div align="center">
<img src="assets/entropy.svg" width="100%" alt="Entropy-reversal field: particles converging from chaos into a (2,5) torus-knot lattice"/>
[⚡ Be the demon — sort 12 bits](https://github.com/developtheweb/developtheweb/issues/new?title=demon%3A+sort+12+bits&body=One+tap.+Submit+to+sort.)
<sub>Each click opens a one-tap issue; an Action sorts the field, recommits the SVG, closes the issue. This README's state is community-lowered entropy.</sub>
<img src="https://stevenmilanese.com/StevenMilanese-hero-stars.webp" alt="Hero Banner" width="100%"/>
</div>
## About the Reverend
<!-- Quote Section -->
<div align="center">
<br>
<img src="https://quotes-github-readme.vercel.app/api?type=horizontal&theme=tokyonight&quote=Transforming%20complexity%20into%20elegance%2C%20one%20algorithm%20at%20a%20time.&author=Steven%20Milanese" alt="Quote"/>
<br>
</div>
```
Reverend ≔ Physicist ⊗ Minister ⊗ Systems_Alchemist
domain : ℝ³·¹ ⊗ CY₃(χ = ±6)
axiom : complexity ⟼ elegance
method : ∀ p ∈ Inconceivable — solve(p) pose(better_p)
runtime : Arch Linux, btw
## 🎯 About Me
```python
class StevenMilanese:
def __init__(self):
self.title = "Autodidactic Polymath | Systems Alchemist"
self.location = "🌍 Earth"
self.os = "Arch Linux BTW 🐧"
self.current_focus = ["AI Architecture", "Quantum Computing", "WebGL", "Spiritual Tech"]
self.philosophy = "Bridge technical excellence with human experience"
def transform_challenges(self, problem):
return f"✨ Inspired solution for {problem}"
```
*Written in MPL — the author's own language. Ordained minister, autodidactic polymath, natural philosopher. The ministry and the physics are the same inquiry conducted at different energy scales.*
I transform complex challenges into inspired technological solutions. By seamlessly integrating Artificial Intelligence with cutting-edge development practices, I create systems that push the boundaries of what's possible. My expertise spans multiple domains including theoretical physics, mathematics, AI systems architecture, and spiritual technology.
## The mission — goals inconceivable by design
## 🚀 Tech Arsenal
<table>
<tr>
<td width="50%" valign="top">
**Reverse the irreversible**
Maxwell's demon on GitHub's own infrastructure, funded in Landauer's currency. *(running above)*
</td>
<td width="50%" valign="top">
**Derive the three generations**
CalabiYau compactifications, χ = ±6. [ORCID](https://orcid.org/0009-0008-0442-208X) · [OSF](https://osf.io/3tsd4/) · [companion essays](https://stevenmilanese.com/blog/tag/calabi-yau-manifolds)
</td>
</tr>
<tr>
<td width="50%" valign="top">
**Cognitive universality**
[MPL](https://github.com/developtheweb/mpl): if you can write the equation, you can run it.
</td>
<td width="50%" valign="top">
**Planetary intelligence**
Earth as information processor, argued in full on [Strange Quarks](https://stevenmilanese.com/blog/planetary-intelligence-earth-as-information-processor).
</td>
</tr>
</table>
<!-- STATS:START -->
<div align="center">
`10¹⁰⁶ yr until heat death — the deadline` · `2.9 zJ of order per bit sorted (kT ln 2, 300 K)` · `★ 27 stars across 14 public repos`
### Languages & Frameworks
![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)
![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black)
![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)
![React](https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=react&logoColor=black)
![Next.js](https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white)
![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white)
![Three.js](https://img.shields.io/badge/Three.js-000000?style=for-the-badge&logo=threedotjs&logoColor=white)
### Operating System & Environment
![Arch Linux](https://img.shields.io/badge/Arch_Linux-1793D1?style=for-the-badge&logo=arch-linux&logoColor=white)
![BTW I Use Arch](https://img.shields.io/badge/BTW_I_Use_Arch-1793D1?style=for-the-badge&logo=arch-linux&logoColor=white)
![Neovim](https://img.shields.io/badge/Neovim-57A143?style=for-the-badge&logo=neovim&logoColor=white)
![Terminal](https://img.shields.io/badge/Terminal-4D4D4D?style=for-the-badge&logo=windows-terminal&logoColor=white)
### Tools & Technologies
![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)
![AWS](https://img.shields.io/badge/AWS-232F3E?style=for-the-badge&logo=amazonaws&logoColor=white)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-336791?style=for-the-badge&logo=postgresql&logoColor=white)
![Git](https://img.shields.io/badge/Git-F05032?style=for-the-badge&logo=git&logoColor=white)
![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)
![WebGL](https://img.shields.io/badge/WebGL-990000?style=for-the-badge&logo=webgl&logoColor=white)
![AI/ML](https://img.shields.io/badge/AI/ML-FF6F61?style=for-the-badge&logo=tensorflow&logoColor=white)
</div>
<!-- STATS:END -->
## Beneath the physics — the verified inventory
## 📊 GitHub Analytics
<!-- FEATURED:START -->
<div align="center">
<table>
<tr>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/anthropic-certs">anthropic-certs</a></h3>
<p align="center"><code>★ 11</code></p>
<p align="center">Verified Anthropic certifications — Claude, API, Claude Code CLI, MCP.</p>
</td>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/slTrain">slTrain</a></h3>
<p align="center"><code>★ 4</code></p>
<p align="center">A steam locomotive for your terminal, smoke trail included.</p>
</td>
</tr>
<tr>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/meowchi-releases">meowchi-releases</a></h3>
<p align="center"><code>★ 4</code></p>
<p align="center">A desktop pet that evolves when you actually get work done.</p>
</td>
<td width="50%" valign="top">
<h3 align="center"><a href="https://github.com/developtheweb/mpl">mpl</a></h3>
<p align="center"><code>★ 2</code></p>
<p align="center">Mathematics Programming Language — write the equation, run the equation.</p>
</td>
</tr>
</table>
<img width="49%" height="195px" src="https://github-readme-stats.vercel.app/api?username=developtheweb&show_icons=true&count_private=true&hide_border=true&title_color=06B6D4&icon_color=06B6D4&text_color=c9d1d9&bg_color=0d1117" alt="Steven Milanese github stats" />
<img width="41%" height="195px" src="https://github-readme-stats.vercel.app/api/top-langs/?username=developtheweb&layout=compact&hide_border=true&title_color=06B6D4&text_color=c9d1d9&bg_color=0d1117" />
</div>
<!-- FEATURED:END -->
## Latest from Strange Quarks
<div align="center">
<img src="https://github-readme-activity-graph.vercel.app/graph?username=developtheweb&custom_title=Contribution%20Graph&bg_color=0d1117&color=06B6D4&line=06B6D4&point=06B6D4&area_color=1a1b27&title_color=06B6D4&area=true" alt="Steven Milanese's Activity Graph" width="100%"/>
</div>
<!-- FEED:START -->
| Article | |
|:---|---:|
| [THE MAJORITY THAT VOTED FOR HEMLOCK - Plato's Republic, Exegesis and Judgment](https://stevenmilanese.com/blog/the-majority-that-voted-for-hemlock-platos-republic-exegesis-and-judgment) | Sep 15, 2026 · 204 min read |
| [What Survives the Reset](https://stevenmilanese.com/blog/what-survives-the-reset) | Aug 31, 2026 · 12 min read |
| [The Invisible Hand's Blind Spot: A Demand Externality in Competitive Automation](https://stevenmilanese.com/blog/the-invisible-hands-blind-spot-a-demand-externality-in-competitive-automation) | Aug 19, 2026 · 61 min read |
| [Mathematical Programming Language: A Vision for Cognitive Universality Through Unicode-Based Syntax](https://stevenmilanese.com/blog/mathematical-programming-language-a-vision-for-cognitive-universality-through-unicode-based-syntax) | Jul 28, 2025 · 19 min read |
<!-- FEED:END -->
## 🎨 Featured Projects
<div align="center">
<table>
<tr>
<td width="50%">
<h3 align="center">stevenmilanese.com</h3>
<div align="center">
<a href="https://stevenmilanese.com" target="_blank"><img src="https://stevenmilanese.com/projects/calabi-yau.webp" width="100%" alt="Portfolio"/></a>
<br><br>
<p><strong>Immersive Portfolio Experience</strong></p>
<p>Three.js visualizations • Server-side rendering • Headless CMS</p>
<p>
<a href="https://stevenmilanese.com" target="_blank"><img src="https://img.shields.io/badge/Visit-Live_Site-06B6D4?style=for-the-badge&logo=vercel&logoColor=white" alt="Visit Live Site"/></a>
</p>
</div>
</td>
<td width="50%">
<h3 align="center">Emergence Intelligence</h3>
<div align="center">
<a href="https://stevenmilanese.com/#projects" target="_blank"><img src="https://stevenmilanese.com/projects/emergence-intelligence.webp" width="100%" alt="Emergence Intelligence"/></a>
<br><br>
<p><strong>Advanced AI System</strong></p>
<p>Cognitive architecture • Semantic processing • Episodic memory</p>
<p>
<a href="https://stevenmilanese.com/#projects" target="_blank"><img src="https://img.shields.io/badge/Learn-More-14B8A6?style=for-the-badge&logo=openai&logoColor=white" alt="Learn More"/></a>
</p>
</div>
</td>
</tr>
</table>
</div>
## 📚 Latest Articles
<div align="center">
| 📝 Article | 🏷️ Topics |
|:---|:---|
| [The Intersection of Physics and AI](https://stevenmilanese.com/strange-quarks) | `Quantum Computing` `Machine Learning` `Physics` |
| [Building Resilient Distributed Systems](https://stevenmilanese.com/strange-quarks) | `Architecture` `Scalability` `DevOps` |
| [WebGL Performance Optimization Techniques](https://stevenmilanese.com/strange-quarks) | `WebGL` `Three.js` `Performance` |
| [Quantum Computing: Practical Applications](https://stevenmilanese.com/strange-quarks) | `Quantum` `Algorithms` `Future Tech` |
</div>
## 🔭 Current Focus
<div align="center">
```mermaid
graph LR
A[Advanced 3D Visualizations] --> B{Current Projects}
C[Serverless Architecture] --> B
D[Quantum Computing + AI] --> B
E[Spiritual Technology] --> B
B --> F[🚀 Innovation]
```
</div>
## 🏆 Achievements & Certifications
<div align="center">
<img src="https://img.shields.io/badge/Physics-Research_Publications-FF6B6B?style=for-the-badge"/>
<img src="https://img.shields.io/badge/AI/ML-Advanced_Practitioner-4ECDC4?style=for-the-badge"/>
<img src="https://img.shields.io/badge/Architecture-Systems_Design-95E1D3?style=for-the-badge"/>
<img src="https://img.shields.io/badge/Leadership-Technical_Strategy-F38181?style=for-the-badge"/>
<br>
<img src="https://img.shields.io/badge/🐧_Arch_Linux-Full_Time_BTW-1793D1?style=for-the-badge"/>
<img src="https://img.shields.io/badge/pacman-Package_Manager-1793D1?style=for-the-badge"/>
<img src="https://img.shields.io/badge/AUR-Helper_yay-1793D1?style=for-the-badge"/>
</div>
## 💫 Connect & Collaborate
<div align="center">
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=22&duration=3000&pause=1000&color=06B6D4&center=true&vCenter=true&width=435&lines=Let's+build+something+amazing!;Open+to+collaborations;Reach+out+anytime!" alt="Typing SVG" />
<br><br>
[![🌐 Website](https://img.shields.io/badge/🌐_Website-stevenmilanese.com-06B6D4?style=for-the-badge)](https://stevenmilanese.com)
[![💼 LinkedIn](https://img.shields.io/badge/💼_LinkedIn-Connect-0A66C2?style=for-the-badge)](https://www.linkedin.com/in/stevenmilanese/)
[![📧 Email](https://img.shields.io/badge/📧_Email-Contact-EA4335?style=for-the-badge)](mailto:dev@level.host)
[![📝 Blog](https://img.shields.io/badge/📝_Blog-Read-14B8A6?style=for-the-badge)](https://stevenmilanese.com/strange-quarks)
</div>
<!-- Snake Animation -->
<div align="center">
<br>
<picture>
@ -126,17 +197,13 @@ Earth as information processor, argued in full on [Strange Quarks](https://steve
---
<table width="100%">
<tr>
<td align="left">
<div align="center">
<img src="https://stevenmilanese.com/StevenMilanese-ghost-logo.png" alt="Steven Milanese Logo" width="80"/>
<br>
<img src="https://readme-typing-svg.demolab.com?font=Fira+Code&size=14&duration=3000&pause=1000&color=718096&center=true&vCenter=true&width=435&lines=Systems+Alchemist;Transforming+Complexity+into+Elegance" alt="Typing SVG" />
<br>
<sub>⚡ Powered by curiosity, driven by innovation</sub>
</div>
*Founder, [MoonFactory](https://moonfactory.dev) — development and consulting.*
</td>
<td align="right">
[stevenmilanese.com](https://stevenmilanese.com) · [Strange Quarks](https://stevenmilanese.com/blog) · [X](https://x.com/developtheweb) · [LinkedIn](https://www.linkedin.com/in/stevenmilanese/) · [ORCID](https://orcid.org/0009-0008-0442-208X) · [OSF](https://osf.io/3tsd4/) · [rev@moonfactory.dev](mailto:rev@moonfactory.dev)
</td>
</tr>
</table>
<!-- Wave Footer -->
<img src="https://capsule-render.vercel.app/api?type=waving&color=gradient&customColorList=14,15,16,17,18,19&height=80&section=footer&fontSize=0" width="100%" />

View file

@ -1,126 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="880" height="260" viewBox="0 0 880 260" role="img" aria-label="Entropy-reversal field: S = 100.0 k-bits">
<rect x="0.5" y="0.5" width="879" height="259" rx="8" fill="#010409" stroke="#21262d"/>
<circle r="3" fill="#1d6f7d" cx="691.1" cy="231.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="691.1;612.1;612.1;691.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="231.0;130.0;130.0;231.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="789.6" cy="108.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="789.6;609.3;609.3;789.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="108.5;141.8;141.8;108.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="464.3" cy="124.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="464.3;601.4;601.4;464.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="124.2;152.7;152.7;124.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="731.8" cy="234.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="731.8;588.9;588.9;731.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="234.3;162.2;162.2;234.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="644.6" cy="78.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="644.6;572.9;572.9;644.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="78.1;169.7;169.7;78.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="220.0" cy="111.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="220.0;554.8;554.8;220.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="111.4;175.0;175.0;111.4"/></circle>
<circle r="3" fill="#1d6f7d" cx="358.2" cy="21.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="358.2;535.8;535.8;358.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="21.3;178.1;178.1;21.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="376.1" cy="98.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="376.1;517.3;517.3;376.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="98.2;179.3;179.3;98.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="787.8" cy="225.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="787.8;500.2;500.2;787.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="225.6;179.1;179.1;225.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="269.4" cy="145.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="269.4;485.4;485.4;269.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="145.9;178.1;178.1;145.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="367.4" cy="166.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="367.4;472.9;472.9;367.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="166.9;177.2;177.2;166.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="385.9" cy="183.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="385.9;462.6;462.6;385.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="183.5;176.9;176.9;183.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="145.6" cy="175.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="145.6;454.0;454.0;145.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="175.2;177.8;177.8;175.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="328.5" cy="200.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="328.5;446.2;446.2;328.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="200.5;180.2;180.2;200.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="89.7" cy="26.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="89.7;438.1;438.1;89.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="26.7;184.2;184.2;26.7"/></circle>
<circle r="3" fill="#1d6f7d" cx="686.4" cy="198.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="686.4;429.0;429.0;686.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="198.7;189.5;189.5;198.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="709.8" cy="217.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="709.8;417.8;417.8;709.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="217.3;195.7;195.7;217.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="790.1" cy="189.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="790.1;404.3;404.3;790.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="189.9;202.1;202.1;189.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="569.2" cy="40.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="569.2;388.2;388.2;569.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="40.2;207.9;207.9;40.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="779.1" cy="226.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="779.1;369.9;369.9;779.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="226.0;212.3;212.3;226.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="564.2" cy="57.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="564.2;350.2;350.2;564.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="57.0;214.6;214.6;57.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="356.1" cy="109.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="356.1;330.1;330.1;356.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="109.4;214.4;214.4;109.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="74.9" cy="28.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="74.9;311.0;311.0;74.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="28.5;211.2;211.2;28.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="155.7" cy="149.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="155.7;294.2;294.2;155.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="149.1;205.2;205.2;149.1"/></circle>
<circle r="3" fill="#1d6f7d" cx="737.4" cy="218.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="737.4;280.8;280.8;737.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="218.1;196.7;196.7;218.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="845.7" cy="127.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="845.7;271.9;271.9;845.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="127.9;186.2;186.2;127.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="154.7" cy="137.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="154.7;267.9;267.9;154.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="137.0;174.5;174.5;137.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="511.5" cy="46.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="511.5;269.0;269.0;511.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="46.1;162.2;162.2;46.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="519.7" cy="77.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="519.7;274.8;274.8;519.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="77.6;150.3;150.3;77.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="854.4" cy="188.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="854.4;284.5;284.5;854.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="188.9;139.4;139.4;188.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="240.5" cy="171.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="240.5;296.9;296.9;240.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="171.4;130.0;130.0;171.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="437.8" cy="34.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="437.8;310.8;310.8;437.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="34.6;122.3;122.3;34.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="848.3" cy="83.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="848.3;324.8;324.8;848.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="83.3;116.3;116.3;83.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="637.9" cy="237.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="637.9;337.7;337.7;637.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="237.2;111.6;111.6;237.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="498.6" cy="138.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="498.6;348.7;348.7;498.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="138.4;107.8;107.8;138.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="125.3" cy="90.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="125.3;357.3;357.3;125.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="90.2;104.4;104.4;90.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="696.1" cy="86.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="696.1;363.4;363.4;696.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="86.6;100.5;100.5;86.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="434.6" cy="173.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="434.6;367.5;367.5;434.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="173.6;95.7;95.7;173.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="147.4" cy="184.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="147.4;370.2;370.2;147.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="184.1;89.5;89.5;184.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="479.5" cy="116.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="479.5;372.6;372.6;479.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="116.7;81.9;81.9;116.7"/></circle>
<circle r="3" fill="#1d6f7d" cx="674.4" cy="71.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="674.4;375.7;375.7;674.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="71.8;72.8;72.8;71.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="249.3" cy="230.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="249.3;380.6;380.6;249.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="230.1;62.7;62.7;230.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="113.6" cy="201.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="113.6;388.2;388.2;113.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="201.1;52.1;52.1;201.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="491.6" cy="167.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="491.6;398.8;398.8;491.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="167.8;41.9;41.9;167.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="221.1" cy="172.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="221.1;412.5;412.5;221.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="172.9;32.8;32.8;172.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="552.7" cy="237.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="552.7;429.0;429.0;552.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="237.5;25.7;25.7;237.5"/></circle>
<circle r="3" fill="#1d6f7d" cx="823.9" cy="24.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="823.9;447.4;447.4;823.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="24.3;21.3;21.3;24.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="740.7" cy="139.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="740.7;466.7;466.7;740.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="139.3;20.0;20.0;139.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="854.5" cy="33.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="854.5;485.5;485.5;854.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="33.5;22.0;22.0;33.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="157.3" cy="133.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="157.3;502.7;502.7;157.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="133.2;27.3;27.3;133.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="377.0" cy="122.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="377.0;517.1;517.1;377.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="122.4;35.3;35.3;122.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="90.0" cy="162.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="90.0;527.8;527.8;90.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="162.8;45.6;45.6;162.8"/></circle>
<circle r="3" fill="#1d6f7d" cx="334.0" cy="114.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="334.0;534.4;534.4;334.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="114.0;57.4;57.4;114.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="805.7" cy="180.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="805.7;536.9;536.9;805.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="180.7;69.7;69.7;180.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="784.1" cy="118.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="784.1;535.8;535.8;784.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="118.7;81.9;81.9;118.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="357.5" cy="140.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="357.5;531.9;531.9;357.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="140.2;93.2;93.2;140.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="442.0" cy="158.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="442.0;526.3;526.3;442.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="158.7;103.1;103.1;158.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="472.8" cy="225.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="472.8;520.2;520.2;472.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="225.2;111.6;111.6;225.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="551.2" cy="215.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="551.2;514.9;514.9;551.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="215.0;118.7;118.7;215.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="517.4" cy="138.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="517.4;511.2;511.2;517.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="138.4;124.6;124.6;138.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="71.4" cy="122.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="71.4;510.0;510.0;71.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="122.1;130.0;130.0;122.1"/></circle>
<circle r="3" fill="#1d6f7d" cx="854.9" cy="77.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="854.9;511.2;511.2;854.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="77.1;135.4;135.4;77.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="792.3" cy="201.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="792.3;514.9;514.9;792.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="201.6;141.3;141.3;201.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="111.5" cy="70.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="111.5;520.2;520.2;111.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="70.1;148.4;148.4;70.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="550.8" cy="94.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="550.8;526.3;526.3;550.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="94.3;156.9;156.9;94.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="729.7" cy="88.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="729.7;531.9;531.9;729.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="88.8;166.8;166.8;88.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="375.5" cy="160.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="375.5;535.8;535.8;375.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="160.3;178.1;178.1;160.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="123.8" cy="96.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="123.8;536.9;536.9;123.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="96.4;190.3;190.3;96.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="674.1" cy="144.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="674.1;534.4;534.4;674.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="144.3;202.6;202.6;144.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="748.8" cy="128.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="748.8;527.8;527.8;748.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="128.8;214.4;214.4;128.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="508.4" cy="104.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="508.4;517.1;517.1;508.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="104.9;224.7;224.7;104.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="706.3" cy="63.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="706.3;502.7;502.7;706.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="63.4;232.7;232.7;63.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="796.1" cy="88.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="796.1;485.5;485.5;796.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="88.0;238.0;238.0;88.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="218.8" cy="177.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="218.8;466.7;466.7;218.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="177.0;240.0;240.0;177.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="489.1" cy="109.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="489.1;447.4;447.4;489.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="109.9;238.7;238.7;109.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="343.9" cy="181.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="343.9;429.0;429.0;343.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="181.5;234.3;234.3;181.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="465.7" cy="114.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="465.7;412.5;412.5;465.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="114.9;227.2;227.2;114.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="20.8" cy="120.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="20.8;398.8;398.8;20.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="120.4;218.1;218.1;120.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="241.2" cy="231.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="241.2;388.2;388.2;241.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="231.5;207.9;207.9;231.5"/></circle>
<circle r="3" fill="#1d6f7d" cx="96.5" cy="43.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="96.5;380.6;380.6;96.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="43.4;197.3;197.3;43.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="847.5" cy="208.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="847.5;375.7;375.7;847.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="208.0;187.2;187.2;208.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="658.2" cy="160.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="658.2;372.6;372.6;658.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="160.3;178.1;178.1;160.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="690.1" cy="225.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="690.1;370.2;370.2;690.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="225.5;170.5;170.5;225.5"/></circle>
<circle r="3" fill="#1d6f7d" cx="386.4" cy="45.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="386.4;367.5;367.5;386.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="45.2;164.3;164.3;45.2"/></circle>
<circle r="3" fill="#1d6f7d" cx="251.3" cy="190.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="251.3;363.4;363.4;251.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="190.7;159.5;159.5;190.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="422.4" cy="96.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="422.4;357.3;357.3;422.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="96.1;155.6;155.6;96.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="445.9" cy="60.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="445.9;348.7;348.7;445.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="60.3;152.2;152.2;60.3"/></circle>
<circle r="3" fill="#4dd4e8" cx="635.6" cy="216.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="635.6;337.7;337.7;635.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="216.1;148.4;148.4;216.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="743.3" cy="40.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="743.3;324.8;324.8;743.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="40.1;143.7;143.7;40.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="222.3" cy="158.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="222.3;310.8;310.8;222.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="158.1;137.7;137.7;158.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="849.5" cy="222.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="849.5;296.9;296.9;849.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="222.8;130.0;130.0;222.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="353.8" cy="163.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="353.8;284.5;284.5;353.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="163.5;120.6;120.6;163.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="258.8" cy="238.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="258.8;274.8;274.8;258.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="238.9;109.7;109.7;238.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="399.2" cy="60.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="399.2;269.0;269.0;399.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="60.9;97.8;97.8;60.9"/></circle>
<circle r="3" fill="#1d6f7d" cx="540.7" cy="204.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="540.7;267.9;267.9;540.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="204.7;85.5;85.5;204.7"/></circle>
<circle r="3" fill="#1d6f7d" cx="811.5" cy="44.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="811.5;271.9;271.9;811.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="44.3;73.8;73.8;44.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="451.7" cy="41.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="451.7;280.8;280.8;451.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="41.4;63.3;63.3;41.4"/></circle>
<circle r="3" fill="#1d6f7d" cx="78.6" cy="85.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="78.6;294.2;294.2;78.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="85.2;54.8;54.8;85.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="686.2" cy="214.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="686.2;311.0;311.0;686.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="214.6;48.8;48.8;214.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="337.9" cy="33.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="337.9;330.1;330.1;337.9"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="33.4;45.6;45.6;33.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="402.8" cy="163.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="402.8;350.2;350.2;402.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="163.6;45.4;45.4;163.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="667.8" cy="25.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="667.8;369.9;369.9;667.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="25.6;47.7;47.7;25.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="137.7" cy="207.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="137.7;388.2;388.2;137.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="207.0;52.1;52.1;207.0"/></circle>
<circle r="3" fill="#1d6f7d" cx="400.4" cy="156.5"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="400.4;404.3;404.3;400.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="156.5;57.9;57.9;156.5"/></circle>
<circle r="3" fill="#4dd4e8" cx="712.5" cy="106.9"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="712.5;417.8;417.8;712.5"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="106.9;64.3;64.3;106.9"/></circle>
<circle r="3" fill="#4dd4e8" cx="759.1" cy="54.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="759.1;429.0;429.0;759.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="54.6;70.5;70.5;54.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="103.4" cy="217.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="103.4;438.1;438.1;103.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="217.1;75.8;75.8;217.1"/></circle>
<circle r="3" fill="#1d6f7d" cx="567.0" cy="51.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="567.0;446.2;446.2;567.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="51.6;79.8;79.8;51.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="175.4" cy="141.8"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="175.4;454.0;454.0;175.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="141.8;82.2;82.2;141.8"/></circle>
<circle r="3" fill="#4dd4e8" cx="633.2" cy="84.7"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="633.2;462.6;462.6;633.2"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="84.7;83.1;83.1;84.7"/></circle>
<circle r="3" fill="#4dd4e8" cx="354.3" cy="60.1"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="354.3;472.9;472.9;354.3"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="60.1;82.8;82.8;60.1"/></circle>
<circle r="3" fill="#4dd4e8" cx="611.7" cy="221.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="611.7;485.4;485.4;611.7"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="221.6;81.9;81.9;221.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="402.8" cy="21.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="402.8;500.2;500.2;402.8"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="21.0;80.9;80.9;21.0"/></circle>
<circle r="3" fill="#4dd4e8" cx="641.6" cy="72.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="641.6;517.3;517.3;641.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="72.6;80.7;80.7;72.6"/></circle>
<circle r="3" fill="#1d6f7d" cx="713.0" cy="118.4"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="713.0;535.8;535.8;713.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="118.4;81.9;81.9;118.4"/></circle>
<circle r="3" fill="#4dd4e8" cx="91.0" cy="216.2"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="91.0;554.8;554.8;91.0"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="216.2;85.0;85.0;216.2"/></circle>
<circle r="3" fill="#4dd4e8" cx="629.6" cy="74.6"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="629.6;572.9;572.9;629.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="74.6;90.3;90.3;74.6"/></circle>
<circle r="3" fill="#4dd4e8" cx="732.4" cy="43.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="732.4;588.9;588.9;732.4"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="43.3;97.8;97.8;43.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="610.6" cy="158.3"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="610.6;601.4;601.4;610.6"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="158.3;107.3;107.3;158.3"/></circle>
<circle r="3" fill="#1d6f7d" cx="305.1" cy="169.0"><animate attributeName="cx" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="305.1;609.3;609.3;305.1"/><animate attributeName="cy" dur="11s" repeatCount="indefinite" calcMode="spline" keyTimes="0;0.64;0.82;1" keySplines="0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1" values="169.0;118.2;118.2;169.0"/></circle>
<text x="16" y="26" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="14" fill="#4dd4e8">S = 100.0 k·bits</text>
<text x="864" y="26" text-anchor="end" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="14" fill="#7ee2a8">dS/dt &lt; 0</text>
<text x="864" y="246" text-anchor="end" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="11" fill="#8b949e">bits sorted by visitors: 12</text>
</svg>

Before

Width:  |  Height:  |  Size: 52 KiB

View file

@ -1,120 +0,0 @@
#!/usr/bin/env python3
"""Generate assets/entropy.svg — a SMIL-animated entropy-reversal field.
120 particles loop from a seeded chaos cloud into a (2,5) torus-knot
lattice, hold, and scatter back. State (bits sorted by visitors, chaos
generation) comes from state/demon.json. Stdlib only; deterministic for
a given generation so regenerated output is diffable.
"""
import hashlib
import json
import math
import os
import sys
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATE_PATH = os.path.join(ROOT, "state", "demon.json")
OUT_PATH = os.path.join(ROOT, "assets", "entropy.svg")
WIDTH, HEIGHT = 880, 260
MARGIN = 20
N_PARTICLES = 120
KNOT_R, KNOT_r = 150, 58
DUR = "11s"
KEY_TIMES = "0;0.64;0.82;1"
KEY_SPLINES = "0.25 0.1 0.25 1;0 0 1 1;0.55 0 0.45 1"
BG = "#010409"
BORDER = "#21262d"
CYAN = "#4dd4e8"
DEEP = "#1d6f7d"
GREEN = "#7ee2a8"
MUTED = "#8b949e"
def seeded_unit(index, generation, channel):
"""Deterministic float in [0, 1) from particle index + generation."""
digest = hashlib.sha256(f"{index}:{generation}:{channel}".encode()).digest()
return int.from_bytes(digest[:8], "big") / 2**64
def knot_points(n):
"""(2,5) torus knot sampled at n points, scaled/centered to the canvas."""
raw = []
for i in range(n):
t = 2 * math.pi * i / n
rad = KNOT_R + KNOT_r * math.cos(5 * t)
raw.append((rad * math.cos(2 * t), 0.62 * rad * math.sin(2 * t)))
xs, ys = [p[0] for p in raw], [p[1] for p in raw]
span_x, span_y = max(xs) - min(xs), max(ys) - min(ys)
scale = min((WIDTH - 2 * MARGIN) / span_x, (HEIGHT - 2 * MARGIN) / span_y)
cx, cy = (max(xs) + min(xs)) / 2, (max(ys) + min(ys)) / 2
return [
(WIDTH / 2 + (x - cx) * scale, HEIGHT / 2 + (y - cy) * scale)
for x, y in raw
]
def main():
with open(STATE_PATH) as fh:
state = json.load(fh)
bits = int(state.get("bits_sorted", 0))
generation = int(state.get("generation", 0))
entropy = max(12.7, 100 - 0.0002 * bits)
s_label = f"{entropy:.1f}"
lattice = knot_points(N_PARTICLES)
parts = [
f'<svg xmlns="http://www.w3.org/2000/svg" width="{WIDTH}" height="{HEIGHT}" '
f'viewBox="0 0 {WIDTH} {HEIGHT}" role="img" '
f'aria-label="Entropy-reversal field: S = {s_label} k-bits">',
f'<rect x="0.5" y="0.5" width="{WIDTH - 1}" height="{HEIGHT - 1}" '
f'rx="8" fill="{BG}" stroke="{BORDER}"/>',
]
for i, (lx, ly) in enumerate(lattice):
chaos_x = MARGIN + seeded_unit(i, generation, "x") * (WIDTH - 2 * MARGIN)
chaos_y = MARGIN + seeded_unit(i, generation, "y") * (HEIGHT - 2 * MARGIN)
fill = DEEP if seeded_unit(i, generation, "depth") < 0.3 else CYAN
cxv = f"{chaos_x:.1f};{lx:.1f};{lx:.1f};{chaos_x:.1f}"
cyv = f"{chaos_y:.1f};{ly:.1f};{ly:.1f};{chaos_y:.1f}"
parts.append(
f'<circle r="3" fill="{fill}" cx="{chaos_x:.1f}" cy="{chaos_y:.1f}">'
f'<animate attributeName="cx" dur="{DUR}" repeatCount="indefinite" '
f'calcMode="spline" keyTimes="{KEY_TIMES}" keySplines="{KEY_SPLINES}" '
f'values="{cxv}"/>'
f'<animate attributeName="cy" dur="{DUR}" repeatCount="indefinite" '
f'calcMode="spline" keyTimes="{KEY_TIMES}" keySplines="{KEY_SPLINES}" '
f'values="{cyv}"/>'
f'</circle>'
)
font = 'font-family="ui-monospace,SFMono-Regular,Menlo,monospace"'
parts.append(
f'<text x="16" y="26" {font} font-size="14" fill="{CYAN}">'
f'S = {s_label} k·bits</text>'
)
parts.append(
f'<text x="{WIDTH - 16}" y="26" text-anchor="end" {font} '
f'font-size="14" fill="{GREEN}">dS/dt &lt; 0</text>'
)
parts.append(
f'<text x="{WIDTH - 16}" y="{HEIGHT - 14}" text-anchor="end" {font} '
f'font-size="11" fill="{MUTED}">bits sorted by visitors: {bits}</text>'
)
parts.append("</svg>")
svg = "\n".join(parts) + "\n"
os.makedirs(os.path.dirname(OUT_PATH), exist_ok=True)
with open(OUT_PATH, "w") as fh:
fh.write(svg)
size = os.path.getsize(OUT_PATH)
print(f"wrote {OUT_PATH} ({size} bytes, S={s_label}, bits={bits}, gen={generation})")
if size > 200 * 1024:
print("error: SVG exceeds 200 KB budget", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()

View file

@ -1,264 +0,0 @@
#!/usr/bin/env python3
"""Nightly telemetry refresh for the profile README.
Updates the marker-fenced sections of README.md:
FEED 4 newest Strange Quarks articles (RSS if populated, else the
server-rendered blog HTML)
STATS telemetry row with live star/repo totals
FEATURED star counts on the featured project cards
and bumps the entropy field's chaos generation so the field differs daily.
Every section is fail-safe: if a fetch or parse fails, that section is left
untouched and the script still exits 0. Stdlib only.
"""
import datetime
import html as htmllib
import json
import os
import re
import subprocess
import sys
import urllib.request
import xml.etree.ElementTree as ET
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
README = os.path.join(ROOT, "README.md")
STATE_PATH = os.path.join(ROOT, "state", "demon.json")
SITE = "https://stevenmilanese.com"
# The real feed. /feed.xml was a guess that 404'd for weeks while the HTML
# fallback silently matched nothing, so the FEED table quietly froze; it now
# also 301s here, but point at the canonical URL rather than lean on that.
FEED_URL = f"{SITE}/rss.xml"
BLOG_URL = f"{SITE}/blog"
# The site publishes read-time in its own namespace — valid for strict parsers,
# unambiguous for this one.
MANUSCRIPT_NS = "https://stevenmilanese.com/ns/manuscript"
FEATURED_REPOS = [
("anthropic-certs", "Verified Anthropic certifications — Claude, API, Claude Code CLI, MCP."),
("slTrain", "A steam locomotive for your terminal, smoke trail included."),
("meowchi-releases", "A desktop pet that evolves when you actually get work done."),
("mpl", "Mathematics Programming Language — write the equation, run the equation."),
]
def fetch(url, accept=None):
req = urllib.request.Request(url, headers={"User-Agent": "developtheweb-nightly/1.0"})
if accept:
req.add_header("Accept", accept)
token = os.environ.get("GITHUB_TOKEN")
if token and url.startswith("https://api.github.com"):
req.add_header("Authorization", f"Bearer {token}")
with urllib.request.urlopen(req, timeout=30) as resp:
return resp.read().decode("utf-8", errors="replace")
def gh_api(path):
return json.loads(fetch(f"https://api.github.com{path}", accept="application/vnd.github+json"))
def replace_section(text, marker, body):
start, end = f"<!-- {marker}:START -->", f"<!-- {marker}:END -->"
if start not in text or end not in text:
raise ValueError(f"missing {marker} markers")
pre = text.split(start)[0]
post = text.split(end)[1]
return f"{pre}{start}\n{body}\n{end}{post}"
def articles_from_rss():
"""Primary source: the site's real feed.
The feed carries read-time in the site's own namespace, so the meta column
comes from the publisher rather than being scraped back out of a page.
"""
root = ET.fromstring(fetch(FEED_URL))
items = []
for item in root.iter("item"):
title = (item.findtext("title") or "").strip()
link = (item.findtext("link") or "").strip()
pub = (item.findtext("pubDate") or "").strip()
date = None
try:
date = datetime.datetime.strptime(pub[:16].strip(), "%a, %d %b %Y")
except ValueError:
pass
mins = (item.findtext(f"{{{MANUSCRIPT_NS}}}readingMinutes") or "").strip()
meta = f"{mins} min read" if mins.isdigit() else ""
if title and link:
items.append({"title": title, "url": link, "date": date, "meta": meta})
return items
def articles_from_html():
"""Fallback: parse the blog index.
Written against the Manuscript's markup, which is regular enough not to
need heuristics each entry is a `row` div holding one anchor and one
`meta` span:
<div class="row">
<a href="/blog/<slug>">Title</a>
<span class="meta"> JUL 28, 2025 · 19 MIN </span>
</div>
The previous version looked for a thumbnail `alt=` attribute and a
Title-Case date. The redesign has neither no feature images on the index
and uppercase abbreviated months so it matched nothing and silently
returned an empty list for weeks.
"""
page = fetch(BLOG_URL)
skip = ("/blog/tag/", "/blog/author/")
articles, seen = [], set()
row_re = re.compile(
r'<a[^>]+href="(/blog/[a-z0-9][a-z0-9-]*)"[^>]*>(.*?)</a>'
r'.{0,400}?<span[^>]*class="meta"[^>]*>(.*?)</span>',
re.S,
)
for m in row_re.finditer(page):
slug, raw_title, raw_meta = m.group(1), m.group(2), m.group(3)
if slug.startswith(skip) or slug in seen:
continue
title = htmllib.unescape(re.sub(r"<[^>]+>", "", raw_title)).strip()
meta_text = htmllib.unescape(re.sub(r"<[^>]+>", " ", raw_meta))
meta_text = re.sub(r"\s+", " ", meta_text).strip()
# "JUL 28, 2025" — uppercase, abbreviated month.
date_m = re.search(r"([A-Za-z]{3,}) (\d{1,2}), (\d{4})", meta_text)
if not (title and date_m):
continue
month, day, year = date_m.groups()
date = None
for fmt in ("%b %d %Y", "%B %d %Y"):
try:
date = datetime.datetime.strptime(f"{month.title()} {day} {year}", fmt)
break
except ValueError:
continue
if date is None:
continue
mins_m = re.search(r"(\d+)\s*MIN", meta_text, re.I)
seen.add(slug)
articles.append({
"title": title,
"url": f"{SITE}{slug}",
"date": date,
"meta": f"{mins_m.group(1)} min read" if mins_m else "",
})
return articles
def update_feed(text):
articles = []
try:
articles = articles_from_rss()
except Exception as exc:
print(f"::warning title=nightly FEED rss::rss unusable ({exc}); falling back to html")
if not articles:
print("::warning title=nightly FEED fallback::rss yielded nothing; scraping /blog")
articles = articles_from_html()
dated = [a for a in articles if a["date"]]
dated.sort(key=lambda a: a["date"], reverse=True)
newest = dated[:4]
if len(newest) < 4:
raise ValueError(f"only {len(newest)} parseable articles")
rows = ["| Article | |", "|:---|---:|"]
for a in newest:
title = a["title"].replace("|", "\\|")
when = a["date"].strftime("%b %d, %Y").replace(" 0", " ")
meta = f"{when} · {a['meta']}" if a["meta"] else when
rows.append(f"| [{title}]({a['url']}) | {meta} |")
return replace_section(text, "FEED", "\n".join(rows))
def update_stats(text):
repos = gh_api("/users/developtheweb/repos?per_page=100&type=owner")
public = [r for r in repos if not r["private"]]
stars = sum(r["stargazers_count"] for r in public)
line = (
"<div align=\"center\">\n\n"
"`10¹⁰⁶ yr until heat death — the deadline` · "
"`2.9 zJ of order per bit sorted (kT ln 2, 300 K)` · "
f"`★ {stars} stars across {len(public)} public repos`\n\n"
"</div>"
)
return replace_section(text, "STATS", line)
def update_featured(text):
cards = []
for name, blurb in FEATURED_REPOS:
repo = gh_api(f"/repos/developtheweb/{name}")
cards.append(
f'<td width="50%" valign="top">\n'
f'<h3 align="center"><a href="{repo["html_url"]}">{name}</a></h3>\n'
f'<p align="center"><code>★ {repo["stargazers_count"]}</code></p>\n'
f'<p align="center">{blurb}</p>\n'
f'</td>'
)
table = (
'<div align="center">\n<table>\n'
f'<tr>\n{cards[0]}\n{cards[1]}\n</tr>\n'
f'<tr>\n{cards[2]}\n{cards[3]}\n</tr>\n'
'</table>\n</div>'
)
return replace_section(text, "FEATURED", table)
def bump_entropy():
with open(STATE_PATH) as fh:
state = json.load(fh)
state["generation"] += 1
with open(STATE_PATH, "w") as fh:
json.dump(state, fh, indent=2)
fh.write("\n")
subprocess.run(
[sys.executable, os.path.join(ROOT, "engine", "generate_entropy_svg.py")],
check=True,
)
def warn(label, exc):
"""Fail-safe, but never quiet.
Every section still degrades to 'leave it alone and exit 0' a broken
fetch must not wedge the profile. What changed is visibility: a section
that stops updating now announces itself as a GitHub Actions warning
annotation, which surfaces in the run summary instead of scrolling past in
a log nobody opens. The FEED table sat frozen for 37 days precisely
because a silent skip and a successful run looked identical.
"""
print(f"::warning title=nightly {label} skipped::{label} left untouched — {exc}")
print(f"{label}: left untouched ({exc})", file=sys.stderr)
def main():
with open(README) as fh:
text = fh.read()
failures = 0
for label, fn in (("FEED", update_feed), ("STATS", update_stats), ("FEATURED", update_featured)):
try:
text = fn(text)
print(f"{label}: updated")
except Exception as exc:
failures += 1
warn(label, exc)
with open(README, "w") as fh:
fh.write(text)
try:
bump_entropy()
print("ENTROPY: regenerated")
except Exception as exc:
failures += 1
warn("ENTROPY", exc)
if failures:
print(f"::warning title=nightly incomplete::{failures} of 4 sections did not update")
if __name__ == "__main__":
main()

View file

@ -1,6 +0,0 @@
{
"bits_sorted": 12,
"generation": 52,
"demons": 1,
"last_sorted_at": "2026-07-08T02:02:03+00:00"
}