Compare commits
2 commits
d202b89480
...
8d2a064542
| Author | SHA1 | Date | |
|---|---|---|---|
| 8d2a064542 | |||
| 4c8fb9e03b |
4 changed files with 120 additions and 95 deletions
|
|
@ -30,8 +30,8 @@ _Last reviewed: 2026-06-14._
|
|||
| `roles/dev_env/` — interactive developer environment | **Built + applied.** zsh + oh-my-zsh + oh-my-posh, tmux + TPM plugins, neovim; dotfiles deployed via GNU stow (re-derived from V4/fisi per ADR-013). Node.js from a pinned upstream tarball (not Debian's npm). Lint + Molecule (idempotent) green. **Applied to `ubongo`** for users `sjat` + `claude` (verified: zsh login shells, stow-symlinked `.zshrc`/`.tmux.conf` + nvim config, oh-my-zsh, tmux plugins; nvim v0.12.2, oh-my-posh 29.0.1). Run via `playbooks/workstation.yml` against the `control` group (no dedicated `workstations` group yet). |
|
||||
| `make check` / `make deploy PLAYBOOK=<name>` | **Works.** First end-to-end run (applying `dev_env`) surfaced + fixed latent bugs: Makefile `PLAYBOOK` var collision (binary path vs playbook-name arg) meant the targets never ran; `ansible.cfg` referenced uninstalled community.general callbacks (now built-in `default` + `ansible.posix.profile_tasks`); `acl` package added so Ansible can `become_user` an unprivileged user. The make targets now function — though `site`/`base`/`docker_host` content is still incomplete (see below). |
|
||||
| `roles/public_dns/` + `playbooks/dns.yml` | **Built + applied.** Manages wingu.me at Gandi LiveDNS as code (`community.general.gandi_livedns`, PAT from `vault.gandi.pat`); record data, anti-spoof baseline (SPF `-all` + DMARC reject), and the Gandi-defaults purge are defined + unit-tested (`tests/test_public_dns.py`). **Applied to wingu.me (2026-06-14):** purged Gandi's 13 seeded defaults; zone now holds only the SPF + DMARC TXT records; idempotent re-run clean. No null-MX (Gandi rejects `0 .`) — the MX is removed, so no MX + no apex A = no mail. M1 of the roadmap. |
|
||||
| `ubongo` — physical control / AI-worker host (ADR-015) | **Built (partial).** Debian 13.5 on a Lenovo M70q (i3-10100T, 16 GB, 256 GB SSD; no disk encryption — accepted risk). Full toolchain installed + pinned to `fisi` (Docker 29.5.3, rbw 1.15.0, Claude Code 2.1.173, ansible-core 2.17.14 + molecule via `make setup`/`make collections`). Repo cloned under a dedicated `claude` user (docker group, no sudo). Vault works via rbw (offline-cache decryption verified). SSH key-only (password + root login disabled). In the production inventory `control` group at 10.20.10.151. **`dev_env` now applied here** (zsh/tmux/nvim for `sjat` + `claude`, via `playbooks/workstation.yml`). Managed as the operator account `sjat` (`group_vars/control` sets `ansible_user: sjat`), not the `ansible` service user `group_vars/all` assumes — ubongo has no bootstrapped `ansible` user. **Pending:** NetBird mesh enrollment (so SSH is LAN-only); full `base` hardening (only the `firewall` concern exists, and it is NOT applied here — applying default-deny with no mesh would lock out inbound SSH on the physical NIC); proper `ansible`-user bootstrap (currently managed as `sjat`); OPNsense DHCP reservation for 10.20.10.151 (MAC `88:a4:c2:e0:ee:da`); Terraform state backup (now relevant — the offsite tfstate exists). |
|
||||
| `askari` — off-site Hetzner VPS (ADR-007/016, M2) | **Built + applied.** Provisioned by Terraform (`environments/offsite`, `hetznercloud/hcloud`) as **cx23 / hel1 / Debian 13.5** (CAX11/ARM was out of stock EU-wide on 2026-06-14 → cx23 is same-spec x86, cheaper). cloud-init created the `ansible` user + passwordless sudo; a TF-managed Hetzner Cloud Firewall allows SSH only from ubongo's WAN (`91.226.145.80`). Reachable from ubongo (`ansible offsite_hosts -m ping` ✓), in the `offsite_hosts` inventory (generated `offsite.yml`), published at `askari.wingu.me` → `77.42.120.136`. **SSH-hardened + fail2ban (M3).** **Docker + Caddy reverse proxy (M4a):** `docker_host` + `reverse_proxy` (vanilla Caddy, HTTP-01) applied; `https://test.askari.wingu.me` serves a valid Let's Encrypt cert ✓ (firewall opens 80/443/3478). **NetBird coordinator (M4b):** `netbird_coordinator` deployed — dashboard live at `https://netbird.askari.wingu.me` (valid LE cert), management API behind embedded Dex (401 unauth), STUN on 3478/udp. **Pending:** host firewall + mesh enrollment (M5 — incl. first-boot `/setup` admin + peer setup keys), offsite tfstate backup (ADR-022). |
|
||||
| `ubongo` — physical control / AI-worker host (ADR-015) | **Built (partial).** Debian 13.5 on a Lenovo M70q (i3-10100T, 16 GB, 256 GB SSD; no disk encryption — accepted risk). Full toolchain installed + pinned to `fisi` (Docker 29.5.3, rbw 1.15.0, Claude Code 2.1.173, ansible-core 2.17.14 + molecule via `make setup`/`make collections`). Repo cloned under a dedicated `claude` user (docker group, no sudo). Vault works via rbw (offline-cache decryption verified). SSH key-only (password + root login disabled). In the production inventory `control` group at 10.20.10.151. **`dev_env` now applied here** (zsh/tmux/nvim for `sjat` + `claude`, via `playbooks/workstation.yml`). Managed as the operator account `sjat` (`group_vars/control` sets `ansible_user: sjat`), not the `ansible` service user `group_vars/all` assumes — ubongo has no bootstrapped `ansible` user. **NetBird mesh-enrolled (M5, 2026-06-17):** `wt0` up at `100.99.146.14` via the `base` `mesh` concern; agent management now works because `claude`'s SSH key was added to `sjat`'s `authorized_keys` and `sjat` was granted `NOPASSWD` sudo (`/etc/sudoers.d/sjat-ansible`) — the interim until the proper `ansible`-user bootstrap. **Pending:** full `base` hardening (only `firewall` exists, NOT applied here — default-deny is the deferred mesh-hardening step now that `wt0` exists); proper `ansible`-user bootstrap (currently managed as `sjat`); OPNsense DHCP reservation for 10.20.10.151 (MAC `88:a4:c2:e0:ee:da`); Terraform state backup (now relevant — the offsite tfstate exists). |
|
||||
| `askari` — off-site Hetzner VPS (ADR-007/016, M2) | **Built + applied.** Provisioned by Terraform (`environments/offsite`, `hetznercloud/hcloud`) as **cx23 / hel1 / Debian 13.5** (CAX11/ARM was out of stock EU-wide on 2026-06-14 → cx23 is same-spec x86, cheaper). cloud-init created the `ansible` user + passwordless sudo; a TF-managed Hetzner Cloud Firewall allows SSH only from ubongo's WAN (`91.226.145.80`). Reachable from ubongo (`ansible offsite_hosts -m ping` ✓), in the `offsite_hosts` inventory (generated `offsite.yml`), published at `askari.wingu.me` → `77.42.120.136`. **SSH-hardened + fail2ban (M3).** **Docker + Caddy reverse proxy (M4a):** `docker_host` + `reverse_proxy` (vanilla Caddy, HTTP-01) applied; `https://test.askari.wingu.me` serves a valid Let's Encrypt cert ✓ (firewall opens 80/443/3478). **NetBird coordinator (M4b):** `netbird_coordinator` deployed — dashboard live at `https://netbird.askari.wingu.me` (valid LE cert), management API behind embedded Dex (401 unauth), STUN on 3478/udp. **NetBird peer (M5, 2026-06-17):** also enrolled as a mesh agent (`base` `mesh` concern) — `wt0` at `100.99.226.39`, Management+Signal Connected; the agent coexists with the coordinator. **Pending:** host firewall + moving askari's SSH onto `wt0` (deferred mesh-hardening; the Hetzner Cloud Firewall is its perimeter until then), offsite tfstate backup (ADR-022). |
|
||||
| `roles/docker_host/` (Docker engine) + `roles/reverse_proxy/` (Caddy, ADR-024) | **Built + applied** (askari, M4a). `docker_host` installs Docker CE + compose; `reverse_proxy` is boma's standard Caddy proxy (HTTP-01 for public hosts; routes from `reverse_proxy__routes`). **DNS-01 for mesh/LAN-only services is now built + proven (2026-06-15):** custom `caddy-gandi` image (`.docker/caddy-gandi/`, `make caddy-image`, pinned caddy-dns/gandi v1.1.0 → Bearer PAT), enabled per-instance via `reverse_proxy__acme_dns_provider: gandi` + `reverse_proxy__image`. Verified end-to-end — a real wildcard cert issued via LE **staging** + Gandi DNS-01 with `vault.gandi.pat`. M4a's deferral (version skew + Hetzner-IP build) is closed; image **pending registry push** (`make caddy-image-push` needs `docker login`). The `reverse_proxy` Caddyfile is bind-mounted as a **directory** (`./caddy` → `/etc/caddy`) so atomic re-renders are visible in-container and `caddy reload` actually applies new routes (a single-file mount pinned the stale inode). |
|
||||
| `roles/netbird_coordinator/` — NetBird control plane (ADR-016, M4b) | **Built + applied (askari, 2026-06-16). boma's FIRST real service role.** Self-hosted NetBird **v0.72.4**: a single combined `netbird-server` container (management + signal + relay + STUN + **embedded Dex IdP** at `/oauth2`) + `dashboard:v2.39.0`, on the shared `boma` network behind the M4a Caddy via gRPC-h2c + WebSocket + path routing (`reverse_proxy__routes` gained a raw-`caddy` route type). Secrets `vault.netbird.{auth_secret,datastore_key}` (self-generated). Carries the full service-role file set (SECURITY/VERIFY/ACCESS/BACKUP) — **first stateful role** (`backup__state: true`; encrypted SQLite at `/var/lib/netbird`, off-site backup pending `fisi`/ADR-022). **Verified live:** dashboard 200 + valid LE cert, `/api` 401 (auth-gated, routes OK), STUN up. **Not yet configured:** first-boot `/setup` admin + peer enrolment = M5. |
|
||||
|
||||
|
|
@ -70,7 +70,7 @@ askari.)
|
|||
| CIS hardening (Debian L1+L2 + Docker) | ADR-002 / TODO 15 | Implemented by the (unbuilt) `base`/`docker_host` roles; brings AppArmor + AIDE as baseline. L2 partitions affect VM provisioning (ADR-006) |
|
||||
| Network IDS + security alerting | ADR-002 / TODO 15 | Suricata on OPNsense + AIDE/`auditd`/`fail2ban` alerting into the monitoring stack; not built |
|
||||
| NetBird mesh — coordinator on `askari` | ADR-016 | **BUILT + applied (M4b, 2026-06-16)** — moved up to "Real and working today" (`roles/netbird_coordinator/`). Self-hosted control plane on askari; replaces ADR-007 WireGuard. Mesh **peer enrolment = M5** (next row). |
|
||||
| NetBird agent enrollment in `base` | ADR-016 | **Design RESOLVED** (ADR-016). Every Linux host joins the mesh via the base role (setup keys in vault); SSH allowed only on `wt0`. **Build pending:** base role not built. |
|
||||
| NetBird agent enrollment in `base` | ADR-016 | **BUILT + applied (M5, 2026-06-17).** The `base` `mesh` concern (opt-in `base__mesh_enabled`) installs the pinned NetBird agent + runs `netbird up` with the reusable scoped key from `vault.netbird.setup_key`. Applied to **askari (`100.99.226.39`) + ubongo (`100.99.146.14`)** — both Management+Signal Connected; ubongo↔askari mesh ping verified. Enrollment is **additive** — the "SSH only on `wt0`" firewall lockdown is the deferred mesh-hardening follow-on, NOT applied. Road-warrior clients (laptops) are operator-enrolled. |
|
||||
| Service-UI verification (Level 4) | ADR-017 / ADR-008 | **Design RESOLVED** (ADR-017 + spec + plan); resolves ADR-015 deferred #2. `/verify-service` skill + `VERIFY.md` template + standards are authorable and present. **Build pending:** running needs ubongo + `playwright` plugin + Authentik + a staging deploy. |
|
||||
| Logging pipeline (Loki + Alloy + off-site subset) | ADR-018 | **Design RESOLVED** (ADR-018 + spec). All logs → on-cluster Loki; security subset write-only off-site to askari. **Build pending:** Alloy in `base`, `loki`/`grafana` service roles, OPNsense syslog — none built. |
|
||||
| Security alerting (AIDE/auditd/fail2ban/Suricata + log-silence) | ADR-002 / ADR-018 | Wired into Grafana on the Loki stack. Designed; depends on the logging pipeline + metrics stack (TODO 3.6). |
|
||||
|
|
|
|||
|
|
@ -69,6 +69,26 @@ _(append new raw signals here; the next kaizen review consumes them)_
|
|||
push-vs-not / subagent-vs-inline, since prose reminders have already failed this many
|
||||
times. Default behaviour: **push as backup and proceed subagent-driven without asking.**
|
||||
|
||||
- `[friction]` **A docs-only commit still tripped the `rbw`-locked pre-commit guard**
|
||||
(2026-06-17): committing only `docs/superpowers/specs/*.md` (no ansible content) was
|
||||
blocked needing the vault password, although the 2026-06-10 kaizen fix scoped the
|
||||
pre-commit `ansible-lint` hook (`always_run: false` + `files:` ansible content) so
|
||||
docs-/config-only commits skip it and need no vault. So either the hook's `files:`
|
||||
pattern still matches `docs/**` (or `.md`), or a blanket pre-commit step needs the
|
||||
vault regardless. → check `.pre-commit-config.yaml`'s `files:`/`exclude:` against the
|
||||
spec/plan paths; docs-only commits should not require `rbw`.
|
||||
|
||||
- `[friction]` **The agent can't manage `ubongo` (the control node it runs ON) without
|
||||
the operator granting access** (2026-06-17): enrolling `ubongo` in the mesh needed two
|
||||
manual operator grants because the agent runs as `claude` (no sudo) but the inventory
|
||||
manages `ubongo` as `sjat`: (1) `claude`'s SSH key added to `sjat`'s `authorized_keys`
|
||||
(`Permission denied (publickey)` otherwise), then (2) `NOPASSWD` sudo for `sjat`
|
||||
(`Missing sudo password` otherwise). So the "AI-worker control node" (ADR-015) can drive
|
||||
the whole fleet but not itself, unattended. This is the **pending `ansible`-user
|
||||
bootstrap** gap (STATUS) biting in practice. → the proper fix is ubongo's bootstrap to a
|
||||
key-trusted, NOPASSWD `ansible` (or `sjat`) management identity as part of `base`/its
|
||||
control-node recipe, so control-node self-management doesn't need ad-hoc operator grants.
|
||||
|
||||
- `[recurring]` **ADRs claim cross-doc reconciliation they didn't actually perform**
|
||||
(2026-06-14): ADR-024's Status + Consequences asserted "ADR-017 prose that mentioned
|
||||
Traefik is updated to read Caddy" — but ADR-008/017/019 + CAPABILITIES still said
|
||||
|
|
|
|||
|
|
@ -134,16 +134,20 @@ Dashboard live at `https://netbird.askari.wingu.me` (valid LE cert); `/api` auth
|
|||
- **Maps to:** ADR-016 (mesh), ADR-004 (one service = one role), ADR-021 (access),
|
||||
ADR-022 (backup), ADR-008/017 (VERIFY), accepted-risk R3 (askari public surface).
|
||||
|
||||
### M5 · Enroll peers → goal reached
|
||||
### M5 · Enroll peers → goal reached — ✅ infra done (2026-06-17); laptops = operator step
|
||||
|
||||
NetBird agent on `ubongo` (the `wt0` path appears), then NetBird **clients on `mamba` +
|
||||
the work laptop** → `ubongo` is reachable from anywhere. **← the mobile-access goal lands
|
||||
here.**
|
||||
The `base` `mesh` concern enrolled **`ubongo` (`100.99.146.14`) + `askari`
|
||||
(`100.99.226.39`)** as NetBird peers — both Management+Signal Connected, the ubongo↔askari
|
||||
mesh link ping-verified. NetBird ships a default **Allow-All** peer policy, so any enrolled
|
||||
peer can already reach `ubongo` over `wt0`. **Remaining (operator):** install the NetBird
|
||||
client on `mamba` + the work laptop and log in → `ubongo` reachable from anywhere. **← the
|
||||
mobile-access goal lands when the laptops join.**
|
||||
|
||||
- **Critical ordering:** NetBird-on-`ubongo` **before** applying `base` default-deny to
|
||||
`ubongo`. Hardening first would lock out SSH (no mesh path yet). Once the mesh `wt0`
|
||||
path exists, apply default-deny and set `base__firewall_control_addr` for the LAN
|
||||
fallback (ADR-021's `ssh-from-control`, already built/dormant).
|
||||
- **Deferred to a "mesh-hardening" follow-on** (was folded into M5; split out as the
|
||||
lockout-risky part): apply `base` nftables **default-deny** to `ubongo` + set
|
||||
`base__firewall_control_addr` (ADR-021 `ssh-from-control`, built/dormant); tighten the
|
||||
NetBird ACL off Allow-All to scoped policies; move `askari`'s SSH onto `wt0` (retiring
|
||||
the Hetzner-firewall WAN allow). Safe to do now that the `wt0` path exists.
|
||||
- **Maps to:** ADR-016, ADR-021 (SSH ladder: `wt0` + ssh-from-control), ADR-020.
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -1,85 +1,86 @@
|
|||
$ANSIBLE_VAULT;1.1;AES256
|
||||
35346130316664643165636265383537313465363866373430373635613732376235663864313565
|
||||
6338396266333865303534643331653531343233343630620a356438386537373663393936626537
|
||||
39366363623561383463613262323135643533656132376661636430623530653233316538326435
|
||||
6534373734656566310a376533303434616437303339623635633761373136396132303461636665
|
||||
63643332653663646532313239656232353461393739393230613934313238363561663431613339
|
||||
30343833366661323161323832313537353930623534326230303634303938396330643339376534
|
||||
61353038346664396434323765313465343431633337643836636137386137366138653762356233
|
||||
37383836386562356236653831363939396132376338623866383139303638616331303563643033
|
||||
65643439336264646635313139326663626232363930363764626234306563663435626566386336
|
||||
36623535343962656365343638616461623135663663303939336162623035646165653833393639
|
||||
38663232306238626136376361343363383866633065356266633439366234373737396136363132
|
||||
37316561353739373733373239623466313062386163393836326662386161616538373138393037
|
||||
34643363346432666661646637646664326236356130653935343462653731633630613739313662
|
||||
66303830336334353665643134396462643862326263316266396239636430303133376335383839
|
||||
38336131656333333431646433313232626338656632323162663564383665643939663939333438
|
||||
37323764383737343439383764623064633037306131366330323463643162396230353431653262
|
||||
33393233353034383761326335366263373232323332306437303634353937323165376665366366
|
||||
31613530336161393138376139663839326135316563346263373231633465333430303733333464
|
||||
31626630353035356334666631656435383437353235616336353930633330313233363563376238
|
||||
35393330353430643965336661356334613062336563333138333634323037333539386365396234
|
||||
34303335323863653230393361633764633730643332313233306565373134316236313836313363
|
||||
63313362383635376461613665356362666264663634343565343235356436343536316536633231
|
||||
35333838633738383639376237386261356637643263633838336635376631626337386634643034
|
||||
32613435343061616662613061313065363733613639616161356464636162323131666261346538
|
||||
38363630386163333162343263323835313633643531613131393666393037626561666132326235
|
||||
33646532393763393633373836623839383466346535346330353462666132333164623238393464
|
||||
33343133663838303239333365326464326433393961623233303939333534376232333838663434
|
||||
39643330616139373862323062373462393061376461663061366363623637376139353465653130
|
||||
36373364626333633964346436653565646466646265623533343235393432366531346435313262
|
||||
39316164313537663561313032633330366265316162303536303663333930343763623537663166
|
||||
66633866326365636633313233396439393131336462613537323162653135386231633335353236
|
||||
38346463663764363365396236383535326562373862353362353637613064393335373433333365
|
||||
31643830386262633035343062616665646166386434386538373963643835653762393466386339
|
||||
30386531656163616533303361333162666366323139636130303865623530636130306331666261
|
||||
31323238353633313436366663373061393564616262653164663736646237336537326139363432
|
||||
39343835396538303936613438346239623866643135623761376565393530336136316361636236
|
||||
34376439386665653434333131656637343838316533333731343966356237643161383334323765
|
||||
35366237363662303666333539666562616439323463383962376337633239326439643131656133
|
||||
66643561643630393837313839376434643163393135656630376166333932343739386464323734
|
||||
35356565323037633635643430326333316135666666303433616134613135323063366135646435
|
||||
38373532313432336637303262373736363062653136663166666139643363343033653065656539
|
||||
66646265613361373563613433616362626333376663666432636339653738653530613239386561
|
||||
31306261363562343039646564373163623032376561383563663534393162353262646333653534
|
||||
62313161316633376530656465323365363730356339643437313463343038623366643162376234
|
||||
32363936613564386261626637333562653834623238396465303931356633663664313163643738
|
||||
38623864353963663864303665366566396363366532343465666234306164626136373133666435
|
||||
39376133343034613430356235666562353737306536376239386562663934633735653165393664
|
||||
36353333656439653763366165373636343139336436656531326438363336396161376539623666
|
||||
62343235663537366530613163663666303464376538383666326563643763343635303538353762
|
||||
35616334653863323462353833343337393961356664363466346530626664303535646331366263
|
||||
63333564636163323239663238663663333532356637646331333463343337383830346365386430
|
||||
63363730306238323730356562656439636239653133396631623565363762383061613639626537
|
||||
63333561383061663632326162373466303761363866653232356137356261663330316333333132
|
||||
63373066323265373163643961383666633065316233383235386365636630313735306264623937
|
||||
30633762633335353663306263653538313537346532616363653832313563626231346162663333
|
||||
37663062613963393366666437393736656231613631663939373365396462303632666332616165
|
||||
33383334626634393838623264616662666337386561386465663632623131376163613334653439
|
||||
62323262393134636631663338326437663933383330666533316430643039666233366663626236
|
||||
63623734653337323335656162643733306239653730613163646639366532363564666532386534
|
||||
62343231616163623439303533633461626433303737646437333533356539313662353239313061
|
||||
64396537656165393562336261346338383966366661353163656331393837653530646162376565
|
||||
37373235323837643430306537633038626363316437303637326666653262383630646332303162
|
||||
63316430393861356566393035373864363262653636383233303336366635306362336634373739
|
||||
34616234633037393966303134633731656336643837666537333862663038323335633931303234
|
||||
37336565643165333762323763323634376533633464633064323363363765653532353637336239
|
||||
64303134373535336633356332333033336638616237613037623233643436383062643062613162
|
||||
30326133366436636330623565356463653636353665626635636130343365316538663336646266
|
||||
33323236643364363561363132373566353638356264353937336336326162363565613035346630
|
||||
62353231633262393663663134663830396463313166303563313538376264333934323839633133
|
||||
37346535653539613139326131656531333139333930643730616264623330336436306632343639
|
||||
33626235316264303561613566383439643665323937383232323239626638303939323732656636
|
||||
32633932626239373730336336666132626636303734343766336638643361613633323063663331
|
||||
33393135353865313639323332386464626262366131633762633438663832333931346232616630
|
||||
34326265306466303063626335396431636366656361326461666562313439613639306365636633
|
||||
33343735343666626662363461623135313835323130656262303364366236383562613037363734
|
||||
36653962306365343935366534303933643031356463646462663832373738303035366538333061
|
||||
39326135396136626437396261363934623464353035363034383961656236386432623238623564
|
||||
32613330613535326663383330346631306230363265663164636338313730316639366335313030
|
||||
31646163303031356130366330396136313036376239353331303132363766366637363737303861
|
||||
65633933613231623664653664646436656261653332613631613033386331663833663230633463
|
||||
37653865366466386661323938383262656662666639343464306163663534363062633663663063
|
||||
32653131333330393266383165363735323333313339383730633438623861363631323035366534
|
||||
65633235636662396166666261353137363163313034383930363330386665656435376139383233
|
||||
38386332663263663030
|
||||
32313030663934353361336234373562303537356334346238663836373238366136356331363761
|
||||
6337323031666565663430303562646565303533653531640a636662373939363632383838613431
|
||||
38313365626365373539653266326661393765333737386161666165666534636562353165386537
|
||||
3934633033383966360a323965333139643764326236396635383863353437313966326665373537
|
||||
65396564393130303030643861663964383436396561643666623837306366346333306430306238
|
||||
66656136626566626262373037623531623633313664376166376161363336353930636538323339
|
||||
38386564333432353363353663643539343765373662643836646666626339353539323033386230
|
||||
31613165373035363533383862366638353035653836303737656534623361313064616365643131
|
||||
64386165653835366137353339396364313661656333333635616338346561363765353934343162
|
||||
64346462656566376539643030656461363161393936623332373632653731303031393437316636
|
||||
36626165306161336262356161666531323336343663643661626365396437383230613636356530
|
||||
62326363383138643162316464396666623332366434336462363531363836313833366237396464
|
||||
38323635353238653432626361383434646538326531356333393337643066373262663462656466
|
||||
65373036653265616137666533373930333239303732623832353337343434636434616562336135
|
||||
38666137353266353130303235616362323633353735373163336138633838633738393637633964
|
||||
66623866353265316336336566663034306664656365643832616232313732626464316563636335
|
||||
63653930626565636630326661626561366539303964373933653437356537343361626438313439
|
||||
35643165636662643463616337323063343633306536346538623331333365366533653634343538
|
||||
63623261636366303261373338633939363338316463303065613436396163616537666265623439
|
||||
31383361646531633863623230616635646138653630383537366335633030343530383735616435
|
||||
35656464393432313563303030626133383761303763653530653837313930303034353136353237
|
||||
37376366623836646236363062633938666135326631376235323061666465373865396235643937
|
||||
32633736656539356332336237646137303534343337353139383637623165353338623566666535
|
||||
30643134303235633362383064376234366235363262396362613731373364306362303634613138
|
||||
39366230366262363237656631646361356464393266656166386337303663313136666261633836
|
||||
32306132323239343539396232316564326361626462366561313561393635393233653633646431
|
||||
39313039313139616262396334613035333633326135346365333537373138396535633137353832
|
||||
63636335613237623234646234653435616635356637343964656463383864366534363438343938
|
||||
39626364653832373062323434316134653831336534383934346231656533643435306465393065
|
||||
31653731653438646361363732303664626438663533393837356562376633643933376132616236
|
||||
65393432633831313433323930383736316630626230373963653536396637363436643136363962
|
||||
37326534343237363961326438376137663034356532376433376461363337333562646136616462
|
||||
61636131376264393236376532356539376536643632623864656331656630353362623133303830
|
||||
34633461633539643262353263376363613566343261373930623139626364653232363538353330
|
||||
33633634363232653439656236303262373265613762373165646131383537623438383835383962
|
||||
33383931626136313036366562363732396561633631643561646536653665333733383261363833
|
||||
66356461663965373234393237323037356331333339643931313936313234323432613563306630
|
||||
33306638663839363565636661653830316265393639313065313062666534303039326465373636
|
||||
64363033323837313030353132383562343337326366626635663439396231393537313932643337
|
||||
30663031323231313938366436343735326165326433656633336465316630383961626664303536
|
||||
38633964326431643362626631656131303539613033323039393630353766386339346363663362
|
||||
33323034396136356362313163376438393739373738366363623636623634316537313461373066
|
||||
38613062656231363532663133333438663535666566356336316266383763623765346237663838
|
||||
64336435353437373264346561363265643339306532383539306363653564356362313430333066
|
||||
65633733633938343830303537383231303036326132376263363531626565633664343038356661
|
||||
31336139663061656437633138373438663966616338343565396562306638346437353730643664
|
||||
30373133373863626137313062643062393035653463653231653465333166633063353137633538
|
||||
62383331303164343236343539396461623738396234653333356632313664616263623061363563
|
||||
34323165306533323362376161346364316135333535626261353730666131643938306366326263
|
||||
31313934633137623638316534383234376333396131303034633636323037363732383263326335
|
||||
32393766343161386537333062643434333333363538323366363231336666383161373432383563
|
||||
65613537366139643032336230303133623431376231646662643666373532636565393639373930
|
||||
65336630616462353837666431616662636635333532393331326539306233363539396266653239
|
||||
31303031303330396632386131623134313536313433623064356636333230373962643339363736
|
||||
30396130353466373136643935646436613636376636323530643031653334303863376432646534
|
||||
39343165356232346539366233373135326338343663356164616265336235623332646365633466
|
||||
35393533373663393762376332396136336236616635616535313336613034346436363665356565
|
||||
32636536336634613531393434613435613962653862343737373237623261373836386663343831
|
||||
66656135323838636638353963646638326531343635653937306230323237343933626135356533
|
||||
66356263636438633164386535333762616438626439343462393833393731643037396662653737
|
||||
31666361656530383437396230393663616133383764316437623939663631396561343266383766
|
||||
62373636663631393637393763613337356337633264366434346561343263373931323335643135
|
||||
31366661623137353336666630633365663764646234343035313130663562636361623532643461
|
||||
63333961333338623966396662656262323830396439633337663431663235663962666238356630
|
||||
30353331313462653061373638666235653938623931366466666164343566623238333237353265
|
||||
30373064353132366634623966306632303832306630383637623465323134633133656333303964
|
||||
35646637316236303364393363323137616132326437623238336631313530663230333362623633
|
||||
34383032376538366464363032343262656164376166386237383563613630336666633965653730
|
||||
64373236396564363164643637623736626532396630313131356563333238643665356166323837
|
||||
31626338623665623165643763623661666439626435643237336433646132666366623661393832
|
||||
37306533613966663936373061613331633934623462343236626234306130383738343631303231
|
||||
32326339323738323537333363313538373266623363363636633462356234363466393263316235
|
||||
39663033303165656366396334306535643361646663373935303230376466366632373563303231
|
||||
64323264653036333039663965646630653934376239653236323063656137373830623563336463
|
||||
37343461373737313539316361623763373733653930626532393565333938333761323631303332
|
||||
39663530303439616561356561666532653762343339323435636164376664373731343132666539
|
||||
63626637346563393765303065646564643661636130396439323736343764333633373331653333
|
||||
66633465343433303038623638323965636533666639643266353163353436393036336639336133
|
||||
32646664363565326539643763653832313336663262313634343635616333613434373333323036
|
||||
61366435376265336638326132333439613431353633653762653836386235643965366436363866
|
||||
35626664393139386337353335343930306130356335623131646261656434303966656431623231
|
||||
66643730393430363838626434663933613536343533316262373564666665373663336363623166
|
||||
63363037373634383961373035633239646235316137363036333765313864643365396165643432
|
||||
36623465313036376261393566383539336638363836633232656136656533396663323366313062
|
||||
64616632373333313466356362336234346564373832316433373963623263316635
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue