1
0
mirror of git://f0xx.org/android_cast synced 2026-07-29 04:38:53 +03:00

docs mostly

This commit is contained in:
Anton Afanasyeu
2026-06-05 12:41:11 +02:00
parent 9eca43b9f8
commit c5857e65f6
26 changed files with 5240 additions and 477 deletions

1
.gitignore vendored
View File

@@ -24,3 +24,4 @@ build/
config.php.alpine config.php.alpine
out/ out/
ota-publish/ ota-publish/
tmp/

View File

@@ -1,5 +1,16 @@
# Cursor / agent bootstrap # Cursor / agent bootstrap
## Maintainer
| | |
|---|---|
| **Canonical ID** | `a.afanasieff@gmail.com` |
| **Name** | Anton Afanasyeu |
| **Nick** | foxx (common) |
| **Aliases** | `aafanasyeu`, `a.afanasieff@gmail.com` in commits/footer — not the primary login/email label |
Use **a.afanasieff@gmail.com** when referring to the users identity; **foxx** is fine informally.
After a **reset** or new session on deploy/infra work: After a **reset** or new session on deploy/infra work:
0. **[docs/README.md](docs/README.md)** — documentation index (linked TOCs for all guides in `docs/`). 0. **[docs/README.md](docs/README.md)** — documentation index (linked TOCs for all guides in `docs/`).

View File

@@ -51,6 +51,8 @@ _Date: 2026-06-02 — **merged document**: initial proposal (rev. 1) + infra rev
- [Rev. 3 — Bastion Q&A](#rev-3-bastion-qa) - [Rev. 3 — Bastion Q&A](#rev-3-bastion-qa)
- [Q4 — How easy to implement? Command checklist (FE + BE)](#q4-how-easy-to-implement-command-checklist-fe-be) - [Q4 — How easy to implement? Command checklist (FE + BE)](#q4-how-easy-to-implement-command-checklist-fe-be)
- [Q5 — Bastion: file transfers only, or other operations too?](#q5-bastion-file-transfers-only-or-other-operations-too) - [Q5 — Bastion: file transfers only, or other operations too?](#q5-bastion-file-transfers-only-or-other-operations-too)
- [Appendix 1 — WG test configuration (Linux laptop)](#appendix-1-wg-test-configuration-linux-laptop)
- [Appendix 2 — WG production configuration](#appendix-2-wg-production-configuration)
- [Source linkage](#source-linkage) - [Source linkage](#source-linkage)
<!-- /toc --> <!-- /toc -->
@@ -869,8 +871,170 @@ WG **alone** does not give SFTP; you almost always add **SSH on top** or fall ba
--- ---
## Appendix 1 — WG test configuration (Linux laptop)
_References: [REMOTE_ACCESS_IMPL.md](REMOTE_ACCESS_IMPL.md), [REMOTE_ACCESS_VALIDATION.md](REMOTE_ACCESS_VALIDATION.md)._
**DNS (prod):** `ra.apps.f0xx.org` is a **CNAME** of `apps.f0xx.org` / `f0xx.org` — same public edge IP for HTTPS heartbeats and UDP WireGuard.
### Network topology (v1 WireGuard)
```text
┌─────────────────┐ HTTPS :443 ┌──────────────────┐ HTTP :80 ┌─────────────────┐
│ Android device │ ───────────────────► │ Gentoo FE │ ────────────► │ Alpine BE │
│ or Linux laptop │ apps.f0xx.org │ apps.f0xx.org │ artc0:80 │ PHP heartbeat │
│ (device sim) │ /crashes/api/ │ TLS + nginx │ │ remote_access │
└────────┬────────┘ heartbeat.php └────────┬─────────┘ └────────┬────────┘
│ │ │
│ UDP :51820 │ UDP DNAT :51820 │ wg0 :51820
│ ra.apps.f0xx.org (CNAME) ▼ ▼
└──────────────────────────────► ┌──────────────────┐ ┌─────────────────┐
│ Ephemeral modem │ ── LAN ─────► │ 10.7.16.128 │
│ (RPi NAT/fw) │ │ ListenPort 51820│
└──────────────────┘ └─────────────────┘
Internet / global network ───────► modem ───────► FE ───────► BE
```
**Control plane** = HTTP only (no new nginx `location` for RA). **Data plane** = UDP to `ra.apps.f0xx.org:51820` → FE DNAT → BE `wg0`.
### Prerequisites (laptop)
```bash
# Gentoo / Debian / Fedora — wireguard-tools + jq + curl
sudo emerge -av net-vpn/wireguard-tools # or: apt install wireguard-tools jq curl
```
### A. HTTP E2E (no tunnel yet)
```bash
cd examples/crash_reporter/backend
export CRASHES_BASE=https://apps.f0xx.org/app/androidcast_project/crashes
export ADMIN_USER=admin ADMIN_PASS='…'
./scripts/ra_e2e_cli.sh
# expect: whitelist → open_session → connect (may wait ~45s for min_poll_interval_s)
```
### B. UDP / WireGuard from laptop (after open session)
**Option 1 — device sim with tunnel bring-up:**
```bash
export CRASHES_BASE=https://apps.f0xx.org/app/androidcast_project/crashes
export RA_DEVICE_ID=ra-laptop-$(hostname -s)
# Operator: whitelist device + open session in ?view=remote_access (or re-run E2E)
./scripts/ra_device_sim.sh poll --until connect --apply-wg
```
**Option 2 — manual:**
```bash
source scripts/ra_lib.sh
RESP="$(ra_ra_post enable "$RA_DEVICE_ID" "$(cat /tmp/androidcast-ra-${RA_DEVICE_ID}.random)" cli-sim)"
ra_wg_quick_from_connect "$RESP" | sudo tee /tmp/ra-laptop.conf
sudo wg-quick up /tmp/ra-laptop.conf
sudo wg show
ping -c3 10.66.66.1 # BE wg0 — OK if routed
sudo wg-quick down /tmp/ra-laptop.conf
```
### C. Quick checks before blaming WG
| Check | Command | Expect |
|-------|---------|--------|
| CNAME | `dig +short ra.apps.f0xx.org` | same A/AAAA as `apps.f0xx.org` |
| UDP port | `nc -vzu ra.apps.f0xx.org 51820` | open / reachable (not TCP) |
| HTTP | `curl -sS -o /dev/null -w '%{http_code}\n' https://apps.f0xx.org/app/androidcast_project/crashes/` | 200 or 302 |
| BE wg | on BE: `wg show wg0` | interface up, peers after connect |
If HTTP E2E passes but `wg-quick up` fails → FE DNAT or firewall on modem/FE, not PHP.
---
## Appendix 2 — WG production configuration
_References: [REMOTE_ACCESS_IMPL.md](REMOTE_ACCESS_IMPL.md) § Production deploy, [REMOTE_ACCESS_VALIDATION.md](REMOTE_ACCESS_VALIDATION.md)._
### BE `config.php` (`remote_access`)
```php
'remote_access' => [
'wg_endpoint' => 'ra.apps.f0xx.org:51820',
'wg_server_public_key' => '<output of wg show wg0 public-key on BE>',
'wg_interface' => 'wg0',
'provision_peers' => true,
'require_wg_tools' => true,
'session_ttl_s' => 3600,
'min_poll_interval_s' => 45,
],
```
### BE (Alpine) — WireGuard interface
```bash
apk add wireguard-tools wireguard-tools-wg
# /etc/wireguard/wg0.conf — example skeleton:
# [Interface]
# Address = 10.66.66.1/24
# ListenPort = 51820
# PrivateKey = <server private>
sudo wg-quick up wg0
sudo wg show wg0 public-key # → paste into config.php
```
PHP-FPM user (`nginx` on Alpine) must run `wg set` when `provision_peers=true`:
```bash
sudo -u nginx wg show wg0
```
Cron (hourly purge): `php81 scripts/purge_remote_access.php --hours=24`
### FE (Gentoo) — UDP DNAT (not nginx)
HTTP stays as today: `https://apps.f0xx.org``http://artc0.intra.raptor.org:80`.
WireGuard uses **UDP DNAT** on the FE edge (and/or modem) — **not** an nginx `location`:
```bash
BE_IP=10.7.16.128 # Alpine BE on LAN
WG_PORT=51820
# nftables example (adjust iface names):
# table ip nat {
# chain prerouting {
# type nat hook prerouting priority dstnat;
# udp dport $WG_PORT dnat to $BE_IP:$WG_PORT
# }
# }
```
Ensure **UDP $WG_PORT** is allowed on FE (and modem) toward the BE. `ra.apps.f0xx.org` CNAME ensures devices and laptops target the same edge as `apps.f0xx.org`.
### MariaDB / migrations
Migration **007** (`remote_access_*` tables). See `sql/migrations/007_remote_access.sql`.
### Production verify (on BE or laptop)
```bash
cd examples/crash_reporter/backend
BASE=https://apps.f0xx.org/app/androidcast_project/crashes ./scripts/verify_remote_access_prod.sh
RA_E2E=1 BASE="$BASE" ./scripts/verify_remote_access_prod.sh
```
**Verified 2026-06-04:** HTTP `ra_e2e_cli.sh` on prod returned `connect` with live `peer_public_key` and endpoint `ra.apps.f0xx.org:51820`. UDP handshake is validated separately (Appendix 1 § B).
### Android (field device)
Developer settings → Remote access → **WireGuard**; polls `…/api/heartbeat.php` (`type: ra`). See `REMOTE_ACCESS_IMPL.md` § App.
---
## Source linkage ## Source linkage
- Editable source: `docs/20260602_REVERSE_SSH_proposals_summary.md` - Editable source: `docs/20260602_REVERSE_SSH_proposals_summary.md`
- PDF: `docs/20260602_REVERSE_SSH_proposals_summary.pdf` - PDF: `docs/20260602_REVERSE_SSH_proposals_summary.pdf`
- Regenerate: `bash scripts/build-reverse-ssh-proposals-pdf.sh` - Regenerate: `bash scripts/build-reverse-ssh-proposals-pdf.sh`
- All `docs/*.md` PDFs: `bash scripts/build-all-docs-pdf.sh`

File diff suppressed because it is too large Load Diff

307
docs/ALPHA.pdf Normal file
View File

@@ -0,0 +1,307 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 16 0 R /F4 18 0 R /F5 19 0 R /F6 20 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 716.2874 143.501 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 705.2874 182.629 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 694.2874 179.957 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 683.2874 157.733 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 59.68504 672.8499 182.22 682.8499 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 59.68504 662.8499 138.0375 672.8499 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 59.68504 652.8499 243.495 662.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 59.68504 642.8499 156.795 652.8499 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 59.68504 632.8499 195.15 642.8499 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 45.68504 622.2874 170.181 633.2874 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 45.68504 611.2874 202.645 622.2874 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 600.2874 122.173 611.2874 ] /Subtype /Link /Type /Annot
>>
endobj
16 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
17 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R 15 0 R ] /Contents 40 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 39 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
18 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
19 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
20 0 obj
<<
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
21 0 obj
<<
/Contents 41 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 39 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
22 0 obj
<<
/Contents 42 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 39 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
23 0 obj
<<
/Contents 43 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 39 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
24 0 obj
<<
/Outlines 26 0 R /PageMode /UseNone /Pages 39 0 R /Type /Catalog
>>
endobj
25 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123816+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123816+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha release & QA) /Trapped /False
>>
endobj
26 0 obj
<<
/Count 13 /First 27 0 R /Last 38 0 R /Type /Outlines
>>
endobj
27 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 28 0 R /Parent 26 0 R /Title (Alpha scope \(what we ship\))
>>
endobj
28 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 29 0 R /Parent 26 0 R /Prev 27 0 R /Title (Recommended defaults \(both devices\))
>>
endobj
29 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 30 0 R /Parent 26 0 R /Prev 28 0 R /Title (Feature freeze checklist \(engineering\))
>>
endobj
30 0 obj
<<
/Count 5 /Dest [ 21 0 R /Fit ] /First 31 0 R /Last 35 0 R /Next 36 0 R /Parent 26 0 R
/Prev 29 0 R /Title (Alpha app sign-off \(manual QA\))
>>
endobj
31 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 32 0 R /Parent 30 0 R /Title (A. Smoke \(required \204 all must pass\))
>>
endobj
32 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 33 0 R /Parent 30 0 R /Prev 31 0 R /Title (B. Resilience \(required\))
>>
endobj
33 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 34 0 R /Parent 30 0 R /Prev 32 0 R /Title (C. Settings matrix \(pick one row for official alpha demo\))
>>
endobj
34 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 35 0 R /Parent 30 0 R /Prev 33 0 R /Title (D. Regression guards \(quick\))
>>
endobj
35 0 obj
<<
/Dest [ 22 0 R /Fit ] /Parent 30 0 R /Prev 34 0 R /Title (E. Known limitations \(not alpha blockers\))
>>
endobj
36 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 37 0 R /Parent 26 0 R /Prev 30 0 R /Title (Log capture \(when something fails\))
>>
endobj
37 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 38 0 R /Parent 26 0 R /Prev 36 0 R /Title (Alpha backend \(optional for LAN-only alpha\))
>>
endobj
38 0 obj
<<
/Dest [ 23 0 R /Fit ] /Parent 26 0 R /Prev 37 0 R /Title (Ending feature freeze)
>>
endobj
39 0 obj
<<
/Count 4 /Kids [ 17 0 R 21 0 R 22 0 R 23 0 R ] /Type /Pages
>>
endobj
40 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 871
>>
stream
Gatn%?#Q2d'Sc)R/'c\0:9'6J#\8/D7l4r-['j65`\@_X"`.qCB%sM]:"#u>g58o:.1t5-4FYV'%]0fIMtXou!P$50HpN=<OI&4B&jsBdlhoi&K^NKm$(5Bs&4;n`,`$';Hd</5([5A1'_98G&X+b<,'TXq&;GY1o0ipAnS==2$iM3)B%%mIJ>>arM^dis-?E=',mq.m`km-@VSMJ?bs5cubTM:aS,"Mo^ENUaB?+F#lA`D^_js\g*,nI^d+OZ#bC<e<mj'*6hi$)3m3N):K-a2,=uA!@rq\f+:%8AX:@oeX@@$W7?_7nW_ZYbhVE2bB1t^30qi'oAT&a]f,H)6bOqslO!ruW459<%8&h!"aTmcQYT.Il[Mf:o6Y*jtqJm"$*rcA-2&<-j6Md/+KaoVr!Y[h$VN?_UU]6<q0Jtj2M1nB>1&M9*t:*YuAnK.g>,N%"f]6o49&e\%L=Ufu*53%uRo#9;uN2Yg*.SGQG0\N_b("sdto]%V^L@A>cO^qO"4!F`MNS8XSBRK#sFpZsuJJt!&l.%OF/9fQ_aY!kSU(Oduae.T&@S+RN\TB<p[E^H1)J6DPj+(=L2kVFJ<a-u;G$UaT>e!c$H>%kh)?_"?$[^uhX#(_>P_?&H](!,keDm#a4J1hun*sWrp`\0g67j*aR<;K#7k2+eC/ldu5s<G'@5(_:/l`(F[=+D2bnDB?eY$3[1dfAQ4U`a+NS>ISb_[KK'i%`o[;p`ek$$&[SgdhBh.\d#/=C'ZO^6/)(ZhTn%Nu,"P\0R4:N;POK^L48ihR.!3%<X^:36>V3%XDWR6g7`FS:n;"'_T\+=-lr>/6oKXn*Q8s5>e?gF@'rQppCBB9KH`2WVh@iT*5R.T7,~>endstream
endobj
41 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3456
>>
stream
Gb"/*D/\/u')q<+0u/3WCl'L*0+r]C%uOgT^,i\Ha]ID.TV08hZnYoe/nrr5of#O$'Ldj&=%S8O)Run7mW*JoG%PohRAgB?rb:VHB0O-..9p+nTFmR:5r02WVRLM%4o+,+>L,-"`Tiqm!PNqh0m26dmr0+.e-]AI0k'@"VMa9cP[[u2<7ATq!N3C:O!.Z::/'J:+=aY-WnA]0!Y:ef]OW#;E0g8ULg_>on.)=&O:KCrSBe)I-P;&X7-Rda*aC@=g8WA@][bG]VhB=JhjNd5DKS-UMkD$7kEWUI7$/2kYKWgD$Pj:P*ojGecC:C33ISo^IBr/2't'm>86&]#lD7siZ893:I/#N8.D?1N`9P26$D4NkYmipp6<'^-po0ZH'YUDZob/kq:Z!u=9X'bQWqPa+kXI;#+qmZa+sA3JLj1OFA<7i\T7nd&O/K0S-\b\0I*#EMmqOe"M'LA@YVa&#Y+kWHDX*nY[\`]oT_(oe)]C>M&u;&iOCMK<)R5s9koc5Y$u(U6Hk(%+cQ"5WBL)67rKXKB&k7'*kuq[D?'?6o=19.5ieT^&S9Kd,lAu;D;L_)X]TJ6&\$D4AeY?S[6B_``[NKO8'4e[QX"$LbMPXKH&\h+N#j6n^cD0kZ%<g7,9M_$trVgWH"UA5!KA43_\-s7"TnVM`aqGhQBbephoH$I\GB+eLKH$9SK#ciM=mkjM^'S6e"Z/^InXR&u^7.BDk8["AnS8rjTs*nUa^P94pHH9-kO\1O[(WeE-sog(X6FS9;B.[t?\M@9>2^hW2rBI)9>T[f(b`_%05O,R!=)Xr-g/%RF?VqE$p3qtI2YoOpL3X,)q0%glEOcT"n6JP5YtKWG0u?XYm`UI_-i('*X$?p1)E[M*1XrY@@Nh1004,5O-`_2/=,dW(NnA]qc1Kd-7_^g":)gO3d22i5-Rt,mkoMa,pjH4GSF.r7N!+Mp#K1&kgWKijd_#jo=c/Hd&JX1QZqBJ^0!>W!bIBu^j5LL.h6dJPdtC@M#7\!@*TN&D@[]pH>60?Y=WJZY_p;bc=5RVePbhPJ5ui.S7ebL7RqKjg?ZiQeaVR90`2Z1kWIn)rK4;iKd>[%/6(C3!;B-<oOV*pbV3-.:_?`Bk_`G/id#JD$)^XE[LCR[KejR)DEp/+g[+hD*p>-`>UOj`U2$dV;<I4ei"M$=<(U6>F]S0!)D=NXG1iSLe&]XI!'LANOP&_:N2LsVV/qlJX+Q^FpD3,rN@o1t)LN;hGegLUL6a;K6(:#Z^9VO6F0cNhI<&rGkkTfaAofkO;S@!mo1?,I&uR^G"YdK;JbpmD'#s&\WNkhnn)*p/QP62kHA8Cbolp>W$0%&u,51[g_3oQ?@$2#!jT0Mi[9B#$RSlLD`6RHfI*@@"5VA&S;a,_?EG5EFnc9/I9*=sR%q*1W)Si7u!/'"R!']KHpf&0IIgUr'/UmBc!$QN/IU]4o6b_$qFZ@Un1r[i7HC/9CWa`.Z8;$8;kYbM*G.apNrlX/BoPsBtp!mIH0Y[D^H@0l.h^eI<"pRX6=2P[>;\&Fq][)s1k)Qp-+*\-gd?OhS_r#b40&kC(gj]^9Cta]pm!_+)1_EpR'-r\b>&!3t_BZR9,f%eR[>_mZ*131(mcU8===,jW?-%<>!T+6N<)$13F6L%$NY&`2^;LOBb2"S8IscInLj0@sg)FpZ,2U'Via"'9XeobY>#\;*O/";pfD;OI[2$qOV)j5#\/\?F2;ibK41&U&[3E>mT,]m5Pgah'HN[O-M:nA0d;"dqVMhtaTJ4)=h'3KmkJZmmr73D$H.&=`bE;t\M-LDFT5oK:AHH*XH:^2@OJb9]&Vu6^4h^;JIXiJ:=2<sK8smTDN!!EJcYnR=C+_49ocFM)[/dr.$3!F?+(0gHfW84^o&L$I*&c"!Hdb+ZEXkL?Vca)lK^T#m'i^8PS8=r9nr'=-M?OhRMLnWm\%77iH4)\B*G65j+*FF!%4t<S>3$QGQ@2<+l[atIe0a4;BBB\9*B*Z%1]n2q,nG9>mTM$'FJd4NBp"B,1/M!3U_2FEaI!^2-[c4E2a>^e?\I8n;pU[tm'M#ilr7&glkm]dn^**[%@noYY1?ZW%>=cWKIW)6S#X@$]dT&241/L=NZnTkm/IJ1E/h<pkF"#TGH%lEi;KdSWp8WV%Rtbd:3VT^r/JbHhd!s'3.$DW]BW:3&ddGTB+^3Vq9tVHq*-$/U;MiOMMgsU6_b7sEh2&<F+8UD,oML-JjGae%R?]a'ILX)nTlIDQZKT#?eHW]@&SLmYc[cOMVb[s$'JGEl`Kj_FJX*Qm'/CX8V70S-l!q?;2Zcu=lSBf1B74po,BNk+&[lcT[bCeRuqdZrFo=$c[CYgS\bk+!e>7_@QGLf?0d@"$JeT/oC\Zt_B08_6$[;EBfiM$<7m)fd>o^52XEaO*iAT3(IVF$,-)';.`!penQ.]-?5S_1;U=g]2\ga.Z*n(JngJB]B]?;d^Z(tldE#s7d1otI,_>RH0Me3@Rt?k%q@+C,0:ui>?!43.jfOHNGj"O`\s$T0:X4%'5GH`_+;&leQKJB(iL.F),8%:=f;#R+*/$-2V0HESpkpP5?X*1!aKm)aL,t(5Yk]6>6a;::F*[+/MWbGCY8C.`>gt=1?u'%>j]UJ,)X36Un4T(Lq_>M.VLt,17pi22U4%4(4`C_Z=2PMYI4C`cPR]Ah/XhU9&-f+Y;m]A!Bi]Zpm?K-]HRUSB]gDXR^Aa1.VZ^uX+aq$^^aH":OgJF*^PLGo-61QelE"#TYDDE-Ee;7"i:EU9$'D0tdbhfaEsZiV";(!c&ED@R<m*GIAr`3Z1O&\d\aZ!$Z1WGoH_2s6)Jm_QhHr(sa\tH7"[iYSEjKrS9,O>2NH_Rq(La[ZE0k2l9&OS.Kg#o7^NO#$0\?YZT>_f^=K_n.ds?2.eG<s[p%'uG`J^ic;deU?cba<29g<>[.LN1i9:c-dD-D`eM2=^O[MP'+:g4ffU"6V<.m87:8)*7-G6D3b)7:&sE9S-'8\3"9O#FsMBr[Aa*b]]MPV/d=Ma#)>_3ZuF(hbL9F9dH-biA)4eRmVAWRJZ(.Tp"Ee>!MO_Lg6u-O[6*oArcCrAE>XKhg<,$?oKZ0%c1oe!Dol8\Sq*=qnO6g5D^aS1fKG8f-Q7TGj4k[8nO38+\/!:tbl?,4Vot\?0ANZeM"o)*7Mu0m29\ZPJ6e=[=-XUdgi,aS(b]bt!(&(8rf(U^"&ET]5W'SS$9c?fW-d3qL5p5:jA_:8M1l0t)pXrObG'7BKG\7#jHX,%"V6=qlpkH`j[f0+*Rt&Jr`s3%C'YAim-?(cgqjmr/b3&hdHgOCU:u[!4J(U9SuK4moOcV3U)Jk5+/dXO^$s/DDLt%?%gd>2&)\67,s369ST/>jeoPPnpG0CtsbeR^%JUN<XcD1]^;_Ci7)/&j"g"FM/-Z1Uk`4\\Xs8(2VJZY`Wb<7RA"CD+6mhbp[!d3;FXr6#CW~>endstream
endobj
42 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3319
>>
stream
Gb!l"D/\/g')nJ06/Z]I2VZ<IhNe'#]Nr/$-<WFDIL35dAD5G6/?5M9eG&9I.*8cr8f$Z-M_,EVSPZ,:_\mLWR2H2R'0`r$Ng9sAhkSRV7bC'%F+bRO620iqec!nY,@$6#!lMCMMgW^$?U>!(.sg<409/pIjG1fr6c6d,LJBE/EJim+7n2^1Ic-mmcfuh.ms8]'Y3d8q(Yaq9TM`F6(9<!0eUma/^"-8c[:-c1$Cbtl>&*QHE_@O>miRV(T@!NYkl*u5q@,VmEnL$ndl0YTLARoYgd-*Udi%6qAU-D!,Eg(u7H00;#]t)Q6lr7a'D)q#:RfIe3>F)Ja`5#lfOef)#Q+@u**mnck/o,rLNH:I*)Be1rieM%^SKR,`en'&,e9<YjI*>jQg8-<kA5uCLS1]!:6VjdbOmo^I>gS>.9Ri;,Mk8a&^g@kk]3,qGUcP8:cqD7Y\pfoG-Gj87p@pgY\q6Yr+3I=V>(DbPj/u;KrDBm-'Y4IH<;'=,!&sHg:@QFFeMNO8gBYI:]qQ2YV'aWK+d0Cj<R=D_suC-&cUEQA3o5Ii?ne#Iqq@M$NL,c1'5XC>`@B$-iZ4_>kCqh&/-Wg\!E[94K/48HsSbsDKGQ_=[.WQh;c?G2*.D<kl?drk^_6]!utI="'T7@G3r2RP(U>CcX`MO.9kJ22lc<'>)I9(_[B]_oSS(7LG,Wfc2h6bf)o3s49-7NVJrb"kb3CN4R2)6RSXSD0hil")iE+jX-hAhSh77!+Kjldju(AuZ<\CeFo_T)iO`.SeDL@3SNpQf?smeoN>Xtui@o<B%m_hN4cG29@gFnp6OIdBm/]-_X.1rGH*7.?@.<ig:32j5RtLkLh[q#8K[m>7\/1uaREKY6/095>(%ci^9<.1@$F:1",Ym6Ia+WjMaB4HlBRDTRQF8]D#J7Q4)\\fI_fGI!D2^X2^^H<:&thCNkg'EF/+A(TPbOcA9;JKWNeAV&nVg(?71:"FLiHCE'1K.(/]r^2k%TIeF'BeAEXu4iB0"'_@a^BP.B4(B!$-li<`I5S$/8*98FQ^#!'E[(SofZbh[Lkmg5,1P;$a)d+io\YK']=nWcV)-?^]n`.D2rZ_Y&RNJ"k\e2SdpB=^ffp/HHc<<!oJ93N0%,];_nK<uJa@dP>1-Q;S[Rf55Xm*4&>=M^2t8$[P:7j+s:aN(,T#HMC'-CZ'h#b*OBMBat.aV>mC,aA@nkGhtE#dRu"l#eD5ZL(T#*QVB__fgES@),k>VFpAaV65#hI]C;+g\._,\gAo+J#pB._!9*A8lY^>9'\NmTnD;5qb?fC+Z0C_:/R6UZ>gj10@ggo)o`4C3ikdrZR`j3J5YI:3p^?HR/;F,K;@7'r"jOlsZ8q:4(q)FrZ6t69FNG5K%jqc)N"#n3FuU=c5`^BXd@K&la8_Gtg2@d'F#K*RQs'p7@K6HjJFkuPWQ5qF5Pg[_)4p(5aELCSrQ.mV2]OVq%\WeuZmDFfADk.WVe`_\[85srQ1PHbeqDHS4*LJ\jk[-NoZ>t*W>h/;52A:A0*tu1&MMR236hDCki]^`8Wq.C5[hRrP.n\-OKpcE2'Hb!I5a[#/'oJsoB8b4j:n`LMPG1C)V"__]os)8#?,<4f<k9biYl@#e`_O56O>U9PhI\Dgnmp^[&gK2MsRScFgp`tV0E@q\7sRtq)'Pl%EnIH[L]H&N>pCGs$rYM+jm)]<%ZF<J9uQ9RRuDr>puM:%PmqFB-[r-R>c2u^-aU&Du-nf3Sg[K?W#lN+]5%0o\oSR$B6/.!],:meG_o@Nk_,&mYj'jrH4&b46sIce,m*<eo5G1&($=o/nH&5_5Ru$`N`MW4qeKEHsT+KTb'uONn]qJ^rQbuV%!Bc9#gV=K;%]qr,5H/cmPjU4S7mPb'E?g8^_1`/esn351NH!V$hD>mRFNLO\in,jdbk86kOD_Sq_s#c/3`XYB$W#Ebt^.`.qGGM$2]lP]%aW0JM%"#3gh2p%=,%QNf'J2b,eSE?a>Q.eobbQo),D_=+@..[2"JUR4fI>`^8n">/;#QEK7.=p\?B4tEq/ETINm=h/D^W$pG(boHHgGpVQMU"5kIksuFOo!4LA;ijp$I]Yc)OZ]O(Pu2ApaSZTo/_GVKJRYoFfUlqsOR[O5[VQ7uj-qO7rcE07OA3/(g[IonkXB_S%dO/L#k,o$s%_6?MNW3%Q_c6in5>QRRH$e?8tfMVJU:Tr?qj\H8_9O8Df:n'aZU:O!5Og0jMo3R%j;2U55bYu+5`<#1oF]$@sD`=F;mP+BPJD60$,$V36T[=K,#)6<VW6n:]R"WOGsSpJbp5h+bA[31/=HOqBA^WjUkjkie/(++Q@L:_Mmrr<\.0p6%`^95Q^'PX'a!p9?:<!&:p6#?NKrH=;",>'qRPN[/tYIan'g_H^4/a>i&e8&;:HW4@rFU=V\aG>3'd^5$_NU5(.spr?;9_N%G#s4BRo1Ah7+;jhf/$+N1r^oh``hU<7L]]C5MpMqIMO%q)Vgr5u*"8=-Yq^d'PK1d.m6C/EJ4jdj?$``YJE\&Q'p%lhV61p<p:2oh&&efJ&W>oGM2JDKO%.&V./MgK9j*rL;1@5T8a<t^X0"J1Bq9pgWeH9c+ohQf$@PjP=Nhm5bb"[TU?^g\t<HOYlGp8M.HbB+0)At[0`p2.q;ne,l\?q7O#Cj7iXHM)+S]E80j^6HoiG"4OVK5-n/?0%8?]J/Wk`^iK[c>kWhm.KUUEgj4$6ukXWU$:+PjjiGdl.+kNpcY'N?!P)?:YjmdZ]e&&0Z1]jeJ\p6_lX,V$gj7t8PN9j\^r;DoDEna<JcDm&gO_QF=JcnTMen2K8<Hpb!.tT;D'Q;fa6A;_qBH!:;KH=1\hScj_]\AmCUeUT:OKJ8i>?mp5Sk^BFh,aEt-k^qer`KcSD#0ccO)5=V&kAH)9nk4ob`4]NHEDceuQ6=dlEb'VTOM0m8P\S!1&B-uRd:#o@-3)iQe%m?W;rX,@c'$WgWT7CW$O;%]@;emY4ei4_Wf^.PClHCIYA9WkZ=\-c*cernZ89,O)in*<]"bd6Do9i!3(k$!BDZL1'$5U*8@FL$7Kpm&BBB>7mB80>MIQT\SEe>IZ25Z7pNV6!EF^[J2N>:/Vpfr]-8d4]$u,ufg'^Pnc/dI92^C,`9L[Dh8dQEr`.A,U/b-&%o'Y'.?tH%=6<UWcf(eKt53PO\;4musfagWBEEAH,R"")aFMj+Tl1+"-OSDa1[Gf'8^=UsCl+RJa+Uc#oSZA_Cl'5airQ!<'aD4T9).l35OB+I[;OV%u>Jj15?V#+=>"MJa`9]Ad)?e/J[?f^Q#YmOr^m!$XeBEe`fAIlPjh0`~>endstream
endobj
43 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 604
>>
stream
Gat='D/[lW&H:NnnU/Pg9p;qi`t0?(c@K^28sOs\-<4r(8W=?Ef^?]Qof/WsU+fFf7u;W-]B:L'&:n%opWdO33lN3O&Oo;!KHku"1]^6r?[L`aF#<SD0#td6PKC`RL+c$!c5jO6nB`ZoOk,>_[Wi?Rh7i)J"6^@=PIZc$$K?60$&'`&:1m,4+FVh8I;nLjL_l1<4s9:Jr=83M>3o;.AZ$\b!suWea%Y#X7@%=L.Jp+n@/7AXn?mS8Q]T?1jn'ZN13eiDiYLj^W,`1<8<h!&r":k)_b9Pri&csjEbIsacgF'mQUd1!e=gTVL`:r/kPtkX(m?l,X1>L2GJRRqLP@WlcdPma]`7'Eq'dkMiKO:]p^`NT7oD@-I?L.boZc?QR\VemA)>pr[H97!>euLbehD.`AkEi5oV]gjc#a],BmR7!X*Db=B80J9G\-)@,aZ%D2-.9H3U6D5/kP6,-(D188%)[-GLPl2h>G[9m!\CL;,/M7'F"M$I1'V&T3'9lUX;DB@0N&LBP"^h9(pNU8L0_'SBu5e3T"[1lt0J*,o9QsW?LM8kO+fgR</>Zc\6'_reQLlh/0at[,QAU)r05@*U?&\#L^3h#6~>endstream
endobj
xref
0 44
0000000000 65535 f
0000000061 00000 n
0000000146 00000 n
0000000253 00000 n
0000000365 00000 n
0000000512 00000 n
0000000659 00000 n
0000000806 00000 n
0000000953 00000 n
0000001099 00000 n
0000001247 00000 n
0000001395 00000 n
0000001543 00000 n
0000001690 00000 n
0000001838 00000 n
0000001986 00000 n
0000002134 00000 n
0000002250 00000 n
0000002549 00000 n
0000002627 00000 n
0000002733 00000 n
0000002817 00000 n
0000003023 00000 n
0000003229 00000 n
0000003435 00000 n
0000003522 00000 n
0000003833 00000 n
0000003908 00000 n
0000004018 00000 n
0000004150 00000 n
0000004285 00000 n
0000004451 00000 n
0000004573 00000 n
0000004694 00000 n
0000004848 00000 n
0000004973 00000 n
0000005098 00000 n
0000005229 00000 n
0000005369 00000 n
0000005472 00000 n
0000005554 00000 n
0000006516 00000 n
0000010064 00000 n
0000013475 00000 n
trailer
<<
/ID
[<735e427b950d10110ca3f1f9e20deac2><735e427b950d10110ca3f1f9e20deac2>]
% ReportLab generated PDF document -- digest (opensource)
/Info 25 0 R
/Root 24 0 R
/Size 44
>>
startxref
14170
%%EOF

195
docs/ALPHA_SOAK.pdf Normal file
View File

@@ -0,0 +1,195 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 10 0 R /F4 12 0 R /F5 13 0 R /F6 14 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 716.2874 102.157 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 705.2874 122.829 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 694.2874 137.053 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 683.2874 89.69304 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 672.2874 105.709 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 661.2874 131.061 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
11 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R ] /Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 25 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
12 0 obj
<<
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
13 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/BaseFont /Symbol /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
15 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 25 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Outlines 18 0 R /PageMode /UseNone /Pages 25 0 R /Type /Catalog
>>
endobj
17 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123816+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123816+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Alpha soak checklist \(LAN demo\)) /Trapped /False
>>
endobj
18 0 obj
<<
/Count 6 /First 19 0 R /Last 24 0 R /Type /Outlines
>>
endobj
19 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 20 0 R /Parent 18 0 R /Title (Before you start)
>>
endobj
20 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 21 0 R /Parent 18 0 R /Prev 19 0 R /Title (Happy path \(~15 min\))
>>
endobj
21 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 22 0 R /Parent 18 0 R /Prev 20 0 R /Title (Stress \(optional, ~10 min\))
>>
endobj
22 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 23 0 R /Parent 18 0 R /Prev 21 0 R /Title (Pass criteria)
>>
endobj
23 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 24 0 R /Parent 18 0 R /Prev 22 0 R /Title (If something fails)
>>
endobj
24 0 obj
<<
/Dest [ 15 0 R /Fit ] /Parent 18 0 R /Prev 23 0 R /Title (Not in alpha soak scope)
>>
endobj
25 0 obj
<<
/Count 2 /Kids [ 11 0 R 15 0 R ] /Type /Pages
>>
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 592
>>
stream
Gatn#?Z2Df'ZJu$.F)EaD4^b-L:sG;U/$WX9]7_Sj:\Ap!+r[GW\=>;1Kg3G;**)SZ31fqlgqa?a-V@3`HKS%!A8G@S2)dYHjpjR#l+m9o$Qn<H]3nmP,'gl+Jg>_A5UDU^BmWFL]rUU&h6fk)=oCgYd^C3-elg8j@t`o?u[j9GqZsd+A@N+ML:-JV!^hYB@I,SWJaJV3KN9H2S$h"2eI>TJc$>TGPLYi0l[*tlP+-O8:4g).E`?Yj7b:/+Rq["emjJad/Lokj/FmF-F<NujQGP"j;Vf6:IP4KLaD#Zg``0t&8WFB]Ut/N)p/[#*Tu^behCkRVY.OnD?+'(mapc_V[fQ8%^DT$V-Y+AEGr:)?<KKXS;MBE?`C3?8#L_P4S',#el;%Q1+sjt)*\qS_HZD4O>i`69WRIQGR+O3'I8*b&Pdr%<PU#!jgD5?!+eaJV>PHV/o[S6=gb_@X/[6!^a.4N-%BboWYXkR8R,[b4bQ+_KVe%SCRRY"j?*XZ@?cSC;6hl[>Nel/V[8ZZ9/p5LmQk-d)i$Lb2gn9hcVsb@oUWE#^/Q.kgNCO0jb?\D?A!!NdTB#"MT+d4#fg0M~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2427
>>
stream
Gau0FgL&^F&q9#IR)bGtFY3D)_c+]q\"$>g+`(NV+rl;ME@`3T0'-[Ep+u7kcGd%ufO$&+/U9h^k+Ze6&2<WAo&%7ji8YM8Hm1g(9G]s1_hRCjr%UA1h[(`Eg5b-P*Rb424>n2&\+)Hu`Wo'eM]*(!=$TIXI?dGFCOp*s8KM=4PslPuiVNag"Rfap2bp*dUf$t>@Es@[J?*^dI!h_;Vb7MWXZ64ijeuID<n^$jk#:sO:VqWH,n&$aV<f?n0h_<N0h[l&/CLB=;W,<!Sqn,B;I!IqYXl_g8JT;LT1M"H6(H#\#H<fIOfOnAC3[JQB.lZ5iL.-P+_mE1NNm,Z!u"AGZlH]+Jj$7aCfu<#D$3H='@?ZgBnMIo+VP>=1=Lb!C$U4QXb&Oj\o'm%@?.>K=C>7FCO0JE4GWbk6.%%l5)+8ta#>E?0"`PITVf[WMU\8=MX0Vu@cZNbf`!KFEbM@Ub9%iCkB=td]8*9EYsZ@NSW<+@NWlRe+BOt=.ql;tC&reOZ?JE*7J,5I)<.;X4OYAt3h#Z9<O-34#-j"D5k6K;\G3TZ].#uMB0/kRLE0>cROY48W-0E99DHMUmXN"9L1tQ/k0j/Wrk-MFX2NRn)8U-rb#A]uQ3POc]6:#YP@G39gJ2,38G,ldJ^h)dGW/T?/JmXG=>^!iF"SVtEuoG`cqF;VH9W@u[F(G,qrtRWG,u8NpGCe\NlC.H.iDsQ78U_@ZbukR2+j..rW1qS1Z",l4D8Lg:u%LMWSF)!k8#U:JtWf5V7Q1[*eYE-hB@qA<o2FZ9Z?m>IqIL!F2rn.Xc/>G8sM;24N*WMo,`qe7QC>_s8@@TN2^GO"Lc'`s#`S>p0?!uebW7aWt=^i!OI(/gph4(k;?l<(P<^&0n<?U!:krc!+&Y-a;u6%GZ>42<FZ#YWWAmsN<-[A#)Hb(`mee)0C#rJVH\SRL[0k=pj3sVFC!)Z>d'\r\u:FN'98sO2j`,e]b_*jorJKgVt;?'/UNtJcUPa67?8EVKO0sc'a8%I&a+4!T=sR,O^1T5f%WW$5I3=u.1#ifoFD0%8jin^eQO8NmF<[jS@u^Q[u):4>Xlf$_f/n=bkXX"p`[I-@uA1bk)1ik*[InhXCHS7i:u_Z]2<(MLoO"ufs]#:1/V+Xmag6,e8\]MV\]*_dU+[&:7!.9$C11\U:qQf(WfW-7)8@,8saK(:9U\^VnIK'd<4,=XK<ME$S)*n+g%TU!R(jW,[@$5$5H*RN0b\S@M(`)c]nM4Yd27RFda3;0SXq+9*Z1WS4=-p36`)ma53E:Lohm(hDX:Y7S#I=:p;*VHJf[2?8/2h+8cf]OOV/V<Pa`'T25?cbdE4QU9e1Zc^`@fBFZS_$`W_nD5Kac<95=t_<tKrF4RSYGr86=\hSWAkLd\'G7D'I.8+r?]8Qf?Ni]oN7T%Rk2RPW54W52J)U>r4&7@DV_O!He[&r:Vn-lfmQ"i7=a`om`Fi)jTU%>[k&rn"R.7hjPcV3D;V)/='G!S[R0"MNj>o_i6Ag82Z"gRPUpkP5bO&Og-3fK"tI]J`H"J>V5Ju?XWB'?uU5T&gtj'&>VXb6j7frWDX?@_6M4Lb3>M,<;.]\MdDN`i7M_ZH&.1$aAP.D62rHecRM3k'/VK;T5_'Zt$reD:T)/C??b0P0lZMW_\hffKTQ6rba*BU.#$B%?9B\1!aR(4,2I6ZR2ZC[@0t?g4mCgE&u]DQq]E+;&jM#hD?Voj;LTCPhm)*h!?Q8'oV?"ei!`\?$Q]T</cVs45ff307eD"VlFn</OFW35!mXT+c:TD8)qY9-#r.@D/2W*5<7RSHJE'T.>#s,U^J)&_0R(Wi!oGpXY*J>Fmo5cWr.gaVEF+4VgVaZfb']-44$ADnEXE9c?rLV7h3(q]"6.Eqd&H464,eTkth+FadK4WEcjJ:+^3gGrA(_`KCI%_gB\kZ)nO1%QWk?hTOl4BAp47%IKl-gn4pqAQ3cec9]I_62'_"Mh;5[c>$c4PpHfmpK3li@/6[Ze4GCWX!?joGH&U@Gk"laSF=,XCQ,H(oegW9''C/PriAmRbUut\lSi[BT&+>6+#%=V6`u)T/(U?K-k,@]<p0,9k0#bYU3Rs%*2E6m<B:A9F]Hrjp1$A.nmX'@fd;hJCCh#i"Bc\RUMEH0]9]og`BlC/DHgu8l,Cs&Oc=tp.E_c)GsL?p=IQ%4M<Y[i8:.+]B_Q=1g5"FECGD4MRr(^ep>&2qF=0#!?:'';/to\D8:B*/>'l)?X4)K6rN:58>&'*$(<0"%-SBb_Or`"NpXr:PV;Y1\nbrIX!^=C1rbssLs1,oApcde"D-Ocun$*/A2\*c>k;#7"Tp8t\0#$]Od6J60e:30iEcqnmNHYgK-s2>inrEa-6P5+g"'S3Rd.L4rooS^Ed.fMi+;tECcJh[+3Nbo./b25FQJcIi'l`_n)bM,1~>endstream
endobj
xref
0 28
0000000000 65535 f
0000000061 00000 n
0000000146 00000 n
0000000253 00000 n
0000000365 00000 n
0000000512 00000 n
0000000659 00000 n
0000000806 00000 n
0000000954 00000 n
0000001101 00000 n
0000001248 00000 n
0000001364 00000 n
0000001618 00000 n
0000001702 00000 n
0000001808 00000 n
0000001886 00000 n
0000002092 00000 n
0000002179 00000 n
0000002487 00000 n
0000002561 00000 n
0000002659 00000 n
0000002776 00000 n
0000002899 00000 n
0000003007 00000 n
0000003120 00000 n
0000003225 00000 n
0000003293 00000 n
0000003976 00000 n
trailer
<<
/ID
[<e968e22228343a774971f6b322897513><e968e22228343a774971f6b322897513>]
% ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R
/Root 16 0 R
/Size 28
>>
startxref
6495
%%EOF

View File

@@ -0,0 +1,467 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 26 0 R /F4 28 0 R /F5 29 0 R /F6 31 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 30 0 R /Fit ] /Rect [ 45.68504 716.2874 203.525 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 30 0 R /Fit ] /Rect [ 45.68504 705.2874 205.277 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 30 0 R /Fit ] /Rect [ 45.68504 694.2874 108.373 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 30 0 R /Fit ] /Rect [ 45.68504 683.2874 157.733 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 32 0 R /Fit ] /Rect [ 45.68504 672.2874 157.733 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 32 0 R /Fit ] /Rect [ 45.68504 661.2874 219.509 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 45.68504 650.2874 150.157 661.2874 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 45.68504 639.2874 229.309 650.2874 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 59.68504 628.8499 105.9525 638.8499 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 59.68504 618.8499 100.53 628.8499 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 59.68504 608.8499 183.8925 618.8499 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 45.68504 598.2874 206.181 609.2874 ] /Subtype /Link /Type /Annot
>>
endobj
16 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 59.68504 587.8499 186.81 597.8499 ] /Subtype /Link /Type /Annot
>>
endobj
17 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 33 0 R /Fit ] /Rect [ 59.68504 577.8499 202.8525 587.8499 ] /Subtype /Link /Type /Annot
>>
endobj
18 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 34 0 R /Fit ] /Rect [ 59.68504 567.8499 208.9125 577.8499 ] /Subtype /Link /Type /Annot
>>
endobj
19 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 34 0 R /Fit ] /Rect [ 59.68504 557.8499 173.8875 567.8499 ] /Subtype /Link /Type /Annot
>>
endobj
20 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 34 0 R /Fit ] /Rect [ 45.68504 547.2874 304.461 558.2874 ] /Subtype /Link /Type /Annot
>>
endobj
21 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 34 0 R /Fit ] /Rect [ 45.68504 536.2874 211.085 547.2874 ] /Subtype /Link /Type /Annot
>>
endobj
22 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 34 0 R /Fit ] /Rect [ 45.68504 525.2874 195.533 536.2874 ] /Subtype /Link /Type /Annot
>>
endobj
23 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 35 0 R /Fit ] /Rect [ 45.68504 514.2874 99.04504 525.2874 ] /Subtype /Link /Type /Annot
>>
endobj
24 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 35 0 R /Fit ] /Rect [ 45.68504 503.2874 234.197 514.2874 ] /Subtype /Link /Type /Annot
>>
endobj
25 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 35 0 R /Fit ] /Rect [ 45.68504 492.2874 213.757 503.2874 ] /Subtype /Link /Type /Annot
>>
endobj
26 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
27 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R
24 0 R 25 0 R ] /Contents 62 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 61 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
28 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
29 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
30 0 obj
<<
/Contents 63 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 61 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
31 0 obj
<<
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
32 0 obj
<<
/Contents 64 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 61 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
33 0 obj
<<
/Contents 65 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 61 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
34 0 obj
<<
/Contents 66 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 61 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
35 0 obj
<<
/Contents 67 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 61 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
36 0 obj
<<
/Outlines 38 0 R /PageMode /UseNone /Pages 61 0 R /Type /Catalog
>>
endobj
37 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123816+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123816+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (AV quality enhancement \204 Q&A session notes) /Trapped /False
>>
endobj
38 0 obj
<<
/Count 24 /First 39 0 R /Last 60 0 R /Type /Outlines
>>
endobj
39 0 obj
<<
/Dest [ 30 0 R /Fit ] /Next 40 0 R /Parent 38 0 R /Title (0. Receiver A/V presets \(product, May 2026\))
>>
endobj
40 0 obj
<<
/Dest [ 30 0 R /Fit ] /Next 41 0 R /Parent 38 0 R /Prev 39 0 R /Title (1. User requirements \(preliminary conditions\))
>>
endobj
41 0 obj
<<
/Dest [ 30 0 R /Fit ] /Next 42 0 R /Parent 38 0 R /Prev 40 0 R /Title (2. Mode overview)
>>
endobj
42 0 obj
<<
/Dest [ 30 0 R /Fit ] /Next 43 0 R /Parent 38 0 R /Prev 41 0 R /Title (3. Video \204 method comparison)
>>
endobj
43 0 obj
<<
/Dest [ 32 0 R /Fit ] /Next 44 0 R /Parent 38 0 R /Prev 42 0 R /Title (4. Audio \204 method comparison)
>>
endobj
44 0 obj
<<
/Dest [ 32 0 R /Fit ] /Next 45 0 R /Parent 38 0 R /Prev 43 0 R /Title (5. Single vs 2-frame vs stream \204 decision matrix)
>>
endobj
45 0 obj
<<
/Dest [ 33 0 R /Fit ] /Next 46 0 R /Parent 38 0 R /Prev 44 0 R /Title (6. PTS/DTS reassembly \(2.3\))
>>
endobj
46 0 obj
<<
/Count 3 /Dest [ 33 0 R /Fit ] /First 47 0 R /Last 49 0 R /Next 50 0 R /Parent 38 0 R
/Prev 45 0 R /Title (7. Pipeline placement: sender \(2.1\) vs receiver \(2.2\))
>>
endobj
47 0 obj
<<
/Dest [ 33 0 R /Fit ] /Next 48 0 R /Parent 46 0 R /Title (User question)
>>
endobj
48 0 obj
<<
/Dest [ 33 0 R /Fit ] /Next 49 0 R /Parent 46 0 R /Prev 47 0 R /Title (Assessment)
>>
endobj
49 0 obj
<<
/Dest [ 33 0 R /Fit ] /Parent 46 0 R /Prev 48 0 R /Title (Preference \(consensus from session\))
>>
endobj
50 0 obj
<<
/Count 4 /Dest [ 33 0 R /Fit ] /First 51 0 R /Last 54 0 R /Next 55 0 R /Parent 38 0 R
/Prev 46 0 R /Title (8. Named algorithm pipelines \(best practices\))
>>
endobj
51 0 obj
<<
/Dest [ 33 0 R /Fit ] /Next 52 0 R /Parent 50 0 R /Title (A. Receiver \204 live video cast \(default\))
>>
endobj
52 0 obj
<<
/Dest [ 33 0 R /Fit ] /Next 53 0 R /Parent 50 0 R /Prev 51 0 R /Title (B. Receiver \204 movie cast \(+1 frame delay\))
>>
endobj
53 0 obj
<<
/Dest [ 34 0 R /Fit ] /Next 54 0 R /Parent 50 0 R /Prev 52 0 R /Title (C. Sender \204 optional compression prep only)
>>
endobj
54 0 obj
<<
/Dest [ 34 0 R /Fit ] /Parent 50 0 R /Prev 53 0 R /Title (D. Avoid for realtime in this project)
>>
endobj
55 0 obj
<<
/Dest [ 34 0 R /Fit ] /Next 56 0 R /Parent 38 0 R /Prev 50 0 R /Title (9. Ranked preferences \(quality benefit vs implementation in android cast\))
>>
endobj
56 0 obj
<<
/Dest [ 34 0 R /Fit ] /Next 57 0 R /Parent 38 0 R /Prev 55 0 R /Title (10. Multithreading pipeline \(target architecture\))
>>
endobj
57 0 obj
<<
/Dest [ 34 0 R /Fit ] /Next 58 0 R /Parent 38 0 R /Prev 56 0 R /Title (11. Short answers to numbered conditions)
>>
endobj
58 0 obj
<<
/Dest [ 35 0 R /Fit ] /Next 59 0 R /Parent 38 0 R /Prev 57 0 R /Title (12. Bottom line)
>>
endobj
59 0 obj
<<
/Dest [ 35 0 R /Fit ] /Next 60 0 R /Parent 38 0 R /Prev 58 0 R /Title (13. Other work in same project session \(context only\))
>>
endobj
60 0 obj
<<
/Dest [ 35 0 R /Fit ] /Parent 38 0 R /Prev 59 0 R /Title (14. Open decisions when implementation starts)
>>
endobj
61 0 obj
<<
/Count 6 /Kids [ 27 0 R 30 0 R 32 0 R 33 0 R 34 0 R 35 0 R ] /Type /Pages
>>
endobj
62 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1267
>>
stream
Gatn&gMYb*&;KZF'Q^[$G.3E$*Sieidf9Q7-<[AM$5a%^M2p7[U-_aQrUq8S#:)c:0We`uQ=NSYE=P3G-j9==rHD*@SE=d2:4Y1A(I02X6%/j,ntX5M]"KnW8Wq%Y"DO<f+<3oH*<(p.df$dUaD8ldBc=2YcgqbdF)O*"B0]u$DA$J2N'e`H3!n"A8/egS6p]_JBQ=KA*Nu8EK4pR`.7>a+$T#e#\2f<A4,j0mr(Om3A#*k4;-'(`@fA<6G\J,mDt*AP)A5[%r>J3HcuDD2n5nM^>[Bs1[m9,T[.dMW/mQ3U>cSbi[s'c<-PrEHDg+.(]BQ6Xo^gTL;O9JT?dQ_?@9M=5]RE4=pGX5_RkB)F97m[*gP0haMG_[^PlS4B68]PWCHMSO,Mm?'gc6nNSOInk!J18>+ll7/R%2quX+_/:^hhM8<Ha)p(G>M%(^=u'lp2D?6]k4I?O]nIn^pFhVqqVN<3hf!f5'QS;HcaUj271AfhcLD^niM8C?W*k'MfdiZen?B=,ht<DIk9HV@[NOQ`<GTe1K;#W5aH9%>J>K#Y_g-rW,YS*f;6j0U9mG(=UD+qlnG[mLP<-K%CsY;A?FgWL@$CIsCHOfhd&&Ja7]0EgBKUVn"OVSl]^OBLY=loF99C85^^q/_3cDTWRuYf0?!a2^K60,GMMSk;p;?#'Z&P;6oppdKnJ].4=XTb^7iG!ZjF3>a]r+Vo+sq(q6b1pNY=#L:)H3`Bn6hgFg&ZV%1CQ3Wfc!\S\f[T8:GGA>m/_#^jI_.Y1[q8kZdtU#"jnPNFkp#r`E%=BPn_8WL.OZi)XacZZY/hCC^A<Nh\l8%RBP'FWbter).$QL=C,Y#`&Xm(iUoY`Z"b<.+)PQOM(3*t%44!Z[bG?-Vo>f5nXmn*ltRePp;p]QdPk1YcbH8sZ\XXt/FqQ09gQJ6bd"@-Y?P4N]M#UOh]=Mui%b!u=;:Y>nX0]<6E3)R5CT.B0E'Wg?lVSEd%u;eic[(OiQ$LP%I4fI4W`('.GiqQ[t5F'lsYDn3Ru(:Yu_d\9Ar/\Ll2E315UIab.A#go"eTab*-9ioZg`T=G/cNB%7f(7jii)Ej;lK]GO@65=-jeLK"?.gN)k*+4(/piOUMJ^Z-LTc/rYi:H*/(>q[d<Mlr&8)WcC.5JtYm``Hnamsq%AoK<N"b1:R*^f+3J9h87-O?!hj>;!K:-_Z3aIQ&DiTer9f2'O[gL?0#I=r\p";@80qckB--(OXD<oVO@PkHU:`Q&]T+*e_2]Vc!&S]in~>endstream
endobj
63 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4762
>>
stream
Gau`W=``=W&q801^nW]j.0@0&2-]AlP@MdZ4LUEQWU^Ec64tY.'HV9W&,GVI%A';=.^QPE8o+iB"6f@BDMSoCI]3&!#mbgi,`?l2:e$ad6<-T'bA6\Go#8'S[$[h-P&>$?8drV%AAqI*4W&niBgmq0A/UI:=d#b%ar4DH&LpEldR*4G&spR5]HLq^4Q1JMCl'1D,j%i9"?^ene;M1sXJ;/q,g3s\7@(]5(.<M1'?<kr@\BB=7eTE#mbW#1e2d8-B)>p29R+(T6\iRB.If`fDE567h)Ot1nciDF]/]YF4/kX)7)@"RGs\fia0<m.R2:e5P&ip9q$W\t:3m*Lf\*Nr6pT"'q)gYb[_IZ.0AQiNfg_Qc+74Hf=S;28Jb&q;fKL:IH[?eu^-!4u=F2KBJeuD?S1K]j"Xe?db"fHGXpY=-"+Ih7U`5KJ/L6&P#o\D(D8A?1G+'_l[Q/P=m#gf+4!&`n#29AHJJci=H.\:r>JB9L"B,V#8A/u+Zme0oAe7%F]nkIW\H*c)5iia&L%kTCpBS!^P4ZWQG]M`/#9"4&YQqHV+5Yk<A8;;IP/inf325\d*6H`SJ0F[B[o;]%!?AA@G_QsOZb>*F,Y;1(&ma/e`@n?;cJ(";XSm_uJ+)8&^#8G5CKJTg[t6]:Es:gr\\QJ@jD/\AhgHSkV,I9P1Yhg"o?)6j?9,!o#>6#j=J[>TKpMAD3(_,IAB:d%1@CPQ9;Wl]rWrom2bb<[TLhhCc2J$T;GCij)+?\uXOK"QDQ9*UeM_TYpemO2iu'g$2fmDgEaq<I-8YVjjZ#2@dfaQ1mc;Fo*'*1S.MktG5D/)'X6;AZ57=5c\?Q%9)dP4=A,?R\h64MIcqt3N,FYGfc614U;`'2!MP\LN8L-Z5Q:bT'01'p.@W6Qb@[--<!fT2&AGlmt`1LLr@<G;,"?DaSIhsd&HK-:_?O'k:m@#dsQa&if+ssYO8glb.a9jY9cB_@C/K(=:.fpL#T0%U1VGg3UA4*e#+=oWP04@;X,cXc&"N#B>Nr'B:8K,/5F)-IV)-".q<p?/UJEp@72&^<6=PK6N_ZuqKZLWNF$u*uR4u,hsHmSgj+cFq`pW:]UP&qX5fk*;uLB%"FKi"*jq!q#RY,#=jHVhii.t*5JY65lj,mbgep>HKJ;OBh%roJs9pH$tk#(8$76mmlqjP]H\?eA.4=JO'Wa@eL<<GpeIn9c$\8%dm@\,]=Wi+l^W=[c39/];2CrA@`/c[@!%W$[]=J"Mo6+>KKiHV@oZkS$d&3\DmV)c8?DhB2m-=+XA;FYLnGk_1Gr'*QoBCf[J)JF!t]Y&4@"lPJ8<pAiO[mKI!FO;CIg_8[[a(mbm$`.U@K7ZJ!n!-$m3ajk$6M`plB!1Sm87')&aF%u@M+IZAp.N(/#W:"SBEVU!p%d9/#f,W3EpC\Z-?tlJVk1,!0R+t.j28<b0lYY^dSr"dk0Pa%Mh+Wa%,[#1Rfc[tF'E^r-eGUpR_2;G'n./EL/[o"R7cRaKFKU'Wlp,D17JpA'%nY2cFcrL!#QF\p68Ft&C6Z)ThnOXAd-IZa/O9gKi5m>W@R+g[/g#HlfCKn:]#as7BahdU3<6Rd0`Y#2!2,b"!'HMKlsQlq>_?c`Xr=g(lClp`,3ucrE4C3BLB$IiYF;:[WhT,qFj3a_$,)#u=^e1M=GSq/mj`**Em_q6FR(4sk*6dk!GELG6YqS)+[=$.*O)_tln7h'bRHS")CFlLQ9q15`\miq8Zq&WDmR,BWj'>N$[jt2q`N(GFMh7O'+nj[rXYRBZfbm(hciGlO@8E!^qtV]2A3P(L^d!*%NqU`"s=4$`!S\)08]'"U6pNnlhfPY>ButB&J\CfWtqp7K$%uOW<Y+'9dK;ffFUDdhZjOn2]Q;TEuY!X<j3t\?rjG-ktJCoV)M_SpfK.s,TW<N#$Vg9k3FmKYftMq0+\tPS^0U)QTuYT#536oaDr&m><=F"XsjTPC#8q\$OXED9cfqHl3V#kGdY<4_UJs<c[7<o/f-YRFb`=?ap>plA&u6mH;ibBbG%%]5K0P%Nd;?Dh"<?PIY-M6g.m3aQXE![r(e;6+G@C.<0o1cJmZLB^3KS?385IVm!QlTX]HQNP,BlB$b[eCGH*.E![,f8#&_BOjb,/c@s#C$<P&G!V]KO"8I?n?0a,IYABX>CR:rm'9pf&rTb@1V0"[!e#Y-]dg+em?6Iul>j!dD/eH53f]pJ8`#fUO4\fN"B%W7laW)=^=[/6oRO5T.D*[OS*H+7g0cj1S=<f=aC9"41hK+,Eh$Js$N4+L0>Qp`+NotVT*13/h;(c3T/b%,p@)s7s"g7*NHZ.YWL=Rj[(DhnCtUI7=X[g$\?[Ke/BgHIN87=s/1@F<uK=;Yr&?gN$c?_OLOe`:V-U?j9>*-(5*)Fg2l$ukd##9Z.`#=Z0$NKJ>l)NZMA][2Y0\j/h"@&Vr74-4jd"?HW5s'#\d""7A-3N$kSrrd+Y4XXMLnc0JZ$j([Fg.A\Y:B%PRlL7>P@9\E9&m.T\$@R916NX:s20)mn?<-*)<<OY0lXDf>)0paL!6PmX?T?dkr-HT>'V_r:4rHTs9T0#SL]=qVU'tGe-(l[CA8hH5Z_IOXV]:b$]cM2fL"%>7A!-m"0n:;dXScRa"OM5qkVPk@D?m_apr`E89dPYt/;Bf]GKYc\gZ?>XMZUGl^$f@5,#c\@%/:U"G9C9>5VrL]cuI`cm&W4?5T>r9cLMs6<@[#sJ8c'e$Ju)6fJWbV5!j#`IHPs;Qho%4=Q40amS7/j@[Y,M`=0SY\u^s'#]K"ZSr8T37._l^-uhdLh'3\^GV7Ad'1o"C;qpo-F5_d8#GV%c3P95+M!+9C!Fi$i>i"9;>Mn=d/mFHrCG3oG,=%&NX`hbflmuW"i.\eS^lrC8qkTHniBbde=]*(FKO"kTj.D%d+4'MnJAO[2!UL1XJ2)7OHr)@g@_1"F$W2#BRP6Pe6hn1-VB7jXI0i](3X*aS)f(FT$;>$D;]q]/d9"T?:'&g>kWmMRrJl%.$oYT_IT$<k/tPFBDQ6B?-dWSfpeZ6s.s%SJ$?Q>lOi`PYB8.jLTIhOQ?U!qo!<(\`qMS.(/1K4^SA2jTE$lhM34[G1=``2r"6$c&-W*)V6@ON2Qj7rCaM%SOf]OnS72\jc8W_G1G?b/*H$1JiYP0madO\n"r=Hl(K)>=e("O(eXER%R8Yn-&aer2jY;&q`WfnH+Ki,565CYd#O9dg_W%r;8f-#t7\HjkjYn!;4;C4<S-HbGs'(ha^`Au5b!H2/WjGMQ>J4K9JdK'lD\:Ifk$pLh"jYG:H*'\`alP1k!o+WdFJ%hBX@EN.fFY%f1[bU=aVF%4>=&0l0gnCC/QrA*;dNXI;<ma!Rp[R(;;+6jJr#R`R'mWoq>DgXthjIJZ0V;'=0&.?@ZWH2XVIMd%,=T4)Y#1E)ile7/(V]XOs'Q2%*S!>mHiI?FcC=,+Smed,Xs9$dK;G")j02uNoiuE4oHDO!hPOZDZWY5"YYjbG9Tf/;1ONB0`AJ"hX+qK8_8:Zu:Go9T75qeDn2.+a<R'iI>W'S>#6RFi#[hh^5@rFEWIp3HX#jMW@&pY>_kMk)iC_Wf[0::p6=WDfX8':FA;6BX)b6raC08lC>Z@H^<B_,7]hL.l.$A0+rCnqq(QqrqR,'[rUF<3,Su"H1mA_E<ARAD6i*TLHpocHB*/8J+<]*pKAbK0._7>:1DKUZ#GjWIAg9o\TNXiNJN\Ot+.VnO[a.CGR+_t)tmNP3C_6ZF6SrV]>UY*qpQ5[kA%l28p$rt\Ma<Z9/cImSe-uMt9^'t)Bnn,^ciklSdlH9jI$$TZgS">>=i@8qf?7\.CH0p(]*?Es@R2uPdfddt5QR(9.liS4$^!/G]#ibr#(*F;QUJpTWFP`T,bZSlq<M-?d>)LKQD<P3[RMjgOFj"8U]3>PSON[7aO<>pGQjB([(@5k.GBnOWRq^9AF7X#>:0_J$+GI'op3;W7GpWXMM`WA6qIY5W]UI)hmlV]EJ'1c6\DQ:0:4\@Q$:j`Co0F?nc0N@]%5Qii)[#SOdWLk5@/"f0@^nA&;[`5hR7_C.VksX&5j?%r:,Sf80XI4J80iC5iZ:_-dr"0/qYMb;ThC^k/!&N'<^pkt#&R%2j_9iMBta]\ZYrL_YCR$EoeK$9-(-1^fT!_JH"A/ZJFplOK:j]#$scnu2+^gXG/>]b<]u4X=*MMQY\-hb\dTqSPl?$%9\]bI[@^f^b3&1cROM*KdSj2`#0c+1hL_^B/:'$L6K/;EQH4G\'pd."X4RcH,h4dF"GLO_o/a-2V%Pb_;[fPk+Irq37ddfj?$.HU"B5C!CusX-[4nC.lG?p5rXZbFLXE1=C4=!Ggr-,Xl2YSXXeWk%bl;F5%1=P5If<5(a_u\/FB^o0D;WAe:5q=9?(PCGl0k:qh`$osp<S:^Eb4PaOi8:t$b8?,Dj?/T>2ZV/j\>OlK/Nuc3t'OK=I)G/L\KQ/9!nPRBP#6U\[7=/]f/cI.dd"Ard3Y!jN4pDe'So=8lE;M;4Ha<l`1Q2%qFG<(5L_/gnjtAQ^C?TJR'k;oo_/c`-$nZ5OQ&KYu>JBd"huGh>bIts'`40iQW`sK4ZiG%IJN>1JBGLNSdT<KDVk@+ZVY)l?ANe2ubF-mI-ZVretb0*)o!OV>\qqi<lYD>0$mFhCQn!3n$,,:s&fu(8d#^WeY=0.^Rp=7(uYbeAL,"/u\'>ZC3;SW5Fo3ort=Tasr.hLMF?^]*["AjBP#7`,PNK1Jfu`L]sE.^TD+)Qb<)H@_eDZ~>endstream
endobj
64 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4104
>>
stream
Gau0HgN)%.&q0LUi+8sREC9oAF/JZI\_-F!<ZG8alrLZ3Mj>J)'4)B9ZK$AcDdS#/!RMEEJ1F]9`eKps1qNSBdK_T1OT%W?s-G/7D\h9l$ismk`>TlNEl$`KGeZ67EJ/L2qOn'5j8fc[oU!Xq?`U$i?ZC:Sd>.'"!nW>])qdEB\e#PmXFE=;+s.#_$_IB7^ZFn^<`_'sUD`luDajO[,D;k**2KKXs$/Z'pQ#[4hP?5!*$3W/[X[hU6eu31/sa8(GhD?g/5iLbDH'"t_rR7sG7"6h,inC-H3G(6J]2R"dlFq+]YD1,4.@kuLIka:TH`&&s5`Q`G4V_N;.I>eJ&3>S[@lp^2R#??ZjSd8+ka$;fdB\VP8Wb^mGR'LPFo@i4hhbT^WGi2btbGp:<p&Wp=b7oB0eJL[eZ'6[QUKniYC.DrMi$<JcUg"WK*TgEN`sn"r</&DiEh4*8b*\H_H-iLrO--5W/9cG$ni((Bmbm<%4]+)KPK2AqF*.\3-b[cUs=CNXm`&HgW:8($'qa8[!"J+Ua"OW6tMNQP<D=q321VO_g!beQ?M/7q8"^Ef]79-W"<!cEh:!-e%hAoCLGaCB=<&P$Q;>+Di(pp/>5O@3FN3!D7G#at+6g1flf_2=Pim[2b.fC>\qL^!4%>8ct18Hjjo%'e#:D;$2=14_Wko7/E%1/gq(Id'_aJC/[Y:2I[FR*l5ddY)>99Ms7j3CN._q"Dc[n>\*Uf?@M'F>>lo$A+1<O)ueN-JebQNkgQoG1]B2]?(USh<r$6+0&o@0A<LcX)!mPfSY^MX21AK^LLG!TB>)ZD4$kfqP_\3\`ana/hBI?;1N%$`^XlY3&+==pDEZO@Fm0`o)Ba\%5&_VnZu,D7ZpcdsmfJhd[>bh#mE#\_<QnZ,]8s:0s6p/?OeX\P#odqjfpnW((&5D.6#J$mD*dn,i4*E\*:H_iG1#X]br>BKICeT'X>blV]_XQU3B,k^YuM?cG@(jLk,S(S5Jgr*^`V>L!pbmB.8-+'jL(\s)dJM_4GZh3Gt#XbMJ5@lJ0UtG_hQnHTmBai3jZ^$ip?V#Tj%n==ua.hF?(r%39f>Bn@:g1L<cGEZ3hD;4GbR#T3GP`@OsiJ>M25aJPN.+ac'MV3(,!&;XQ[r]uc0I/eX>(d02G`%)[6V?XL-mI)h'lBcn80N<;&"D!nfZs%M!O\Ljje"48@5;g5Ll$]qUA(*D(4]M[U;A(Q*!$bECam_CS11uN/P?4GdHjfYW!EV_c,\<q@#/7rr0]?N`&:#f,fe`5b3Rr2fMp#C<cA\__nEk@OnjEA.Aj'ik@03>nDf;uBi*kWuR,4_R&=!Jnm_m$6%MCeec&ZpqX,bQ8(Z21/m24!Y[C9oI3^qdnGK(6(]Fhi5M?@EM._W`C#kRRK%nkI!aao'n@0jQ+\2dfNu'rfCZG>2S%fA#@fPOo2``a8UuM^P1,P`@1JJOJ51.1001;nmX`^$\Pg=k'RtX)@T8%HqL[IMtVG\bbW>n)jBeoY8/$XO%G^%tWn.kN>@$#9IYi$%`jJ>[%94kpN!4@KPBtEnD+_O4ba@hdDtE/93$Km#%GI0tp?pYpL8aJBB(iCdhV[,U9lYE"b@@Rh;$T2h^i0g'rM!S2V_(k;3aOj_[B+D<Nl;@WL=ejIXsGU6`7t+a9U:j>E.mL*ZMF-8fRagQ:D$_`G3jdI2O&V-fglTkF1p#@6U"h[0G=&'`+c#9577qW2UN>5=5-;la2FP\eo`m58Pj*_]fHS8MCR#B\&p5`2W>Hj,g]\r#\:W&S@sKX)VOU1Xjg[c9B`Eb`H+=Fk*TY$c%?87GSu:&>d`+;hrY,1dp4F:n.8BF_[@PNdVBohnd>]f!WB.gT`$L8N^gb<!03&VZMYOVc@U.&Y%-Z0phi82giMEQ7]THo[YfV[l+F("*4'1QHZi]dCp>;Y<iT..Abprc)F.SR9fa`(<Cn1OpErmiVPX^X,$Mj[4Ms>ZBdo*C1'"3f#Kmq6Gtn;E]R9Yur=)B%tWp4)R<)+EGM]ibEI]nnrI'^ZNtT3(0MCIS"$DWd>YJkLhBO:g_:/Y.EA9"fCu[`k/\m/!M^%K4FEMM^\3mP+'_^59L;DH%C5ILA]]DWtK5:#F"9J2X<T<#]0=N0f>k:'*Y>YodZ#t*'8q`=(''Rn$TH1-u^pcTN;:LE?WkRbEu"qMK<6bSAVq/qAZFhTlZo95+CZ0PUip*0]&=^KE>V;`AON^$)1WJeQGbB`)_n>Y>]XhPWmE*rtKpa:US\Y%AYu?Th@<a/0dX%m\ck+QA^>`b3CUPUe\mddiJaWq/GVG=rL3mf?EQR)+tYQ9UU*EN$,12fIXpp@5K_^2pE'\;3%Rk,it#Z5WLpuO;a0*>NLnI@=Jo[d1`W](+%Xu'spSP]f94)j!cbWBC3dl^k7+=pN_7rT>S^^#@6thCXu['bggG[1o't&I"e4^L:R.j_u`J.pV0)%Di9Xn3nsbMCV&9\#QRquh@=2-V_ko%"^[=&"kH,6Jg;tf.V0.@CjF0=NU(ioYu%?UMbcJ&c*_>`r@"Frdsa[j4u>*?ng&;48R<lEWC;C6+?n3o$!=L(qdB7Bf(&)J\G<,!.E7;1St1=Jj(p$43)7dWOPqU+[d4IHS2#h*\nco(#Fsio*Dd0KJH$uFbdD5;@[,9XTGZYdB:#\k<oG;IGN>'oA,J#9bX^[C7$Z?3l*0"d@&`jc1S+]DF3q.HnY"F-RY"ufY2f,aiai=CU/9_I)LIgG`IdnfRPVni(Lk*ASR6-%-&`)'H^$3bXQG?7q8$1:?(W0C^!hV=pAH\lB8fsC>UEfkF+>0D3%"1RIZ@!#`2`72Lc2fbofFAOj<E4k5p6Rt=[H>p^iO#eD/j11mLW<?b81=Do[\CegCUe<j>MOhq4P/>aTK.@9J(0%6>kOTPNOeFe2ARt(c:J\bM.c540I>6?-NV^%E\>UeToX56-\l#[$M</"5i\JaQ_f5m(fkma7]<OE"RT8O:h%7ckLc@6O@p[m+AL93Mk\k<d72.P%PnsX+L6hA;TMGArW]Y'DXCXKUf_dNp#kXArn?[L,D&3N+Nb4CM#u*Z/u<$.]+gTfB[d9H9HV.?=u6Bp8HWC6T7]+H,dM7gOb^`<Hi<!Ec8+/#I9g*SWa`mF0Q:GGL<.Oomp)-.T+MM+3&2%BWfX7^[r^c)PUo(CC_H>0roTc"TMG<Q:8a9H_^Ie>UnUcjH23!4`oG5#KU.-gGPtSB'!L^^&@hEanCmJSPeg4=Eu&qWj8,g':2,5kN9A1bO/b*2H[]RXK"u6p[X@#6ioT]GcT1eI:R^?8Z&Hf]9TM..P2Z6N,LMddIY-K!7#Z)D$4Q75>!Z$O;>1uc)X(E-I3(H]QYmo2st7pN9R`F#_oL_M\qh*Ui_lXJ[sd`\@<cOi\aLDLR1gI,%[$MY:HciJi2f=83ol3W#h)c,><"GOhJ0!ZNuW[TMB`cZU<bGs6U8Y]9m-9K*S^!\`uVif(\;iM*dkM*TTL?n"<fl_(cdQIB!a/Go+n/F)V2LTn%BemLK#,P&NB10tY2u',C,1#.>h0=;[f9TD10C^C(4*=&22r1[p?=rhi1RehjVr2[HqNbr^.`B.J9jGRa3K>a5!LFjL%$i__DukPRLsX1BN63<<A!H2f`K*Y.dj(@6I-nhhgo*%O&MY&ST$kh;H_-B(q8r<3>?+;h.C,<t]*n-u>m[^rF+)u&q],O<!5Rgq]R,TtuFRr+uQbj-5L]3+L7T=60Xk3CjDRqbTWqmGjU1LHGZ]+;N'$\@[WoUj.r=_9Y;k*FVKkeY1Koh4U5&^2i[]b\uuM(XC%;ln]=+e;PDpPrkb5VQ<[MB.p\/29$^o1++Y,0TH)mY$i'.u%"S0ce%L0Cq$>fh1pm8OT+[:LUZ^)RX/,TNbEEY+?/C_HoTHnG2n?=MAV/JA/;5RV"sHQ0WZf!67(S)n'C:'7ctFf?jaG9]IkNl0@(HPFd!+$s4I`bM)a&XGoH[g.7*'&R6)s&iJ]1?.MIV/Zc`>M]DOUT.US+,T6s"?*;60U8[[(:aFm,$Gm8Z'QSc^@>B5e*U8_OT$7F6a.&+YJ_b<s/U=#T!(Y9Mq#c#+5J[$g",r9/>Fq#*nJs-!lt0`,EWhF%#6l+J`r~>endstream
endobj
65 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3434
>>
stream
GauHN8U&oK'#+6Ei2C`KM?N\Kota:amMRBlgIb5T5U7VKc)h<#NrJtk\;?-R.K/Dn,r1=ZnC:hk"j-72ZMtpeTpmoCI8Z/Yd<^]b:"%Db*dq:#r,\PG1GrGn/7$hgBpt3dg)@&F@9BI-HRT;*qZp]:GkDAUceE887e$s?$jf(uT2p1%-PTLr3V>>f!Bi*?UcuP?LXpsMol&j>^Yj/qfs'Bs77W)hCBmM<KiMDIP%krABd(UJZ)oHoc:&kAab"&-_?r3J;GlC<[/CI-'VAipA_!XXebKn.gJ:3(mp_DfS6FFp=4>II(Zl1oRkY0n1ZK#6E(<@*SE!MAh;et[N2\_>`VRPr'ZD58p:\6l\fo1mCnJ!,*T^&?U4e4dn+Nbt98]U6B5ISoF=D-F>[K'n\K<<MS9s+b_(tS;6W$5]?:\>Z:A-d[SRDtuPq,NsD1:+NnS+sMQcMm2,%/&Mr/F+##($tBe1FI&'GQP%4R(Ek6<LJ`qX:@,?(Wbd*]Y>joHP8n1+41YKUU;(C@'a('N?.`c!MnoBn[;U`W.I&!j6fVFsqZHaW>!u=6(sMR-e!@]F%d!^c89V&86TOQPhZILaQR4r;h"?FY:87J8<5oJ/'@=Y+-%f)@%,Rg[YDRXUT4`;bhrjj5:hNqT]I.Mn:SAo?]ui9OlG<@SEuSqM]Ql\L)YVOK\Gf8[hnBK7iqc>t/]tl(%i>;))VpE"/[LHQE74XogTmfmk[]<9@B;e7ISA*mBr?s&'cCKpVtW4UV%N#"b:-:)JLD"N_X$/5T%K(2;\,@s2sGZ'g8Dj.qHt$=7Yg(jYK@Ph#R?r;6@XZEU=m$>P&TI_LncoN!u%s6*4sUPGGH+h9cZ2dX\8M7"cq)aWsi)hFo-!!7i-!'HMK&/Nb"i2I[rDdOH6VgLbWeQb!8%Fr@Y#$!R%Yf1k[:lbS+@SITP)29`2VNQ4Wdh;j1`IsOF@Xo:tVo[jZO7B<K<'I0#rD6(KQ&FL)Lk7<H\b+t6GZ>P[TmMCUa<<Z3C#Dk6&cESmb[Cfe!N0qC!nE6+'Z.HaN%poCWE0RFG;1@;*OmWNb41n)X9l-_Ml=YtL^HO$i.F2jJA<YGRE<=/o)'!2Ec=&LKtHI8n::Hu&gb^a6s0]m<_8Q.?I[*n%ToES;DA&:^9p!o[g^ABE>6>c*F:75?9]qO;cFM\k;?K`4_5IPUnBF-![k@KaW%&W0K_s*#^)aU%L>Ks<Y.1+HU*So0!'$-k/S/1XII4$aF<(h(d/Y)Rrf>59gGa`\FkgY35]/CrJ(=?nfa2!(*mT0%<QJ1fX*"G[*E:j;#O!K#adO"+Xs<8m`5br5G0])U,7E/_UZL*8)X92"Tn0K+j@QMP8o_4;-k`&Le4N">>n;RH]"b/6NYB?@)?UBW7Ak7,]hK*B]>uEVl#D!GfJs]n9/KfBF^ucN_XIT_YRb=XCB;5NH7#W6"?6AD9bi$dI:Q#F=Mh9=:":M`p*s'4:ZjSM!mnD\]3q!ETMlanO+4Y`59be.God=kL(oINl*Q-W!3[r3#tVaPkjPG-nYTB$ph@VRiEfe4JTNr?)gpUZM[*Q:-7u."D4cLe"o@O3*gDM$oUq`Xa=C@W>BQ]@/tX@=!UPnQ8f1@,XG\2]&NBZ=C9(fo0D$*EDTf5gP>5dA=3F4BLc1>D`i&e/oKRT#rmO4A9eUeOcSmDlk@],<&Q\hLI%hq0e^o()j-nUVhM\3][K_qD&Y0N[/kNP6InVfMiU.V=KQnbX;1mTgGu4lV!=X5WAdf,/5:_8<UC7Q1deDmbk<-(`^,:tKCAuK,9$'9(PsZ@(AQ,\<Ct^rCF"l6(/l:I!P3PGnPIb+Mitj?>BG4pm<^7Vic.tf^\MBlWD$$1/nIIc`c4q0q!(HR8O]9MG_hb`iWG'OS=Se/+A]d`*BH(n@hV24%=#7H92q;;9B7nT/KN[_$FB#5Xe8ZnSh`[sLTbO80pO&Ykm0F0&t^u9dP*lBMAp."_`67EiP-VAY?i$@`J/Zr>%6Kn^>=@5"Pc9DeapCGOcWVbptuZ*pa'VUi"nu@0D_FJ2E,'m?Y+0QS*=gn&k\9$6SQE]Wp#r>p5i:p.,8^@jSG.P1sAka?h-3h_c`At1nR^k47.*(gOK=+4!X@\N:_i\da.MF`C[a,8%!G1P80kEkGY7)fu8VNDWT0A9#o*8D/l&bZ,dhT'VTpl^@2Z.%L*kqmC^iTQTj\Cm!=8Y.MLQCj6\\jS9EWd+Y0j2gTlSh)fY/&c//?D+JHE[V3=F>'Dc4F&%Q3)/TXfC&`$IKGK@u=QUq,s>_Ce9c-tLG2*20[<KnSnfdWt0'09a'U,ab8Q,9^Jn?0'\U0"V@cFqE$13)&-X@b7.e*kuP2>VSk,-pb&^tMGGV`W]Tf(>l=Ac6$/D4ILMQIE/J'th8SFhM$FhpCQ`O&$jT'%FSjrhl6(o+nip7ijZ!->`PFL9;)PXA^lA:s)^_+ma<QZ4hOPio0T(_:c7>AZOB:EF(!a"6\QhVuo#k;(XQ\>iG6E?p`nqRb`8#BbbPXi-)LOUS=^/80USL0n!@B@T12C.?1f(Sb-Dnmpndp87OKM0mZo2_!"*;/m=,=73=bOQS_sA36YTqK@2o^B[bp40&9I:10V%F_3A9Z/\!L.CH)9*!b1i[N0VR;-&YeOpJ#9'bq.M4NTKn,hM_NZ#psL/T@jsQpWA=b&D;`Ogu$VND+T.jIo@HRD]UjC)l4kX=;*G.]iF+F&_.d?;9_/6=Obste41FLqJ]u+%9##]eaAF`Z"?rKg'1Cpl[+4bnU7+e/n1Q]l'FVq&Gc#mVZB`'MjB&B<\CnM/i:4[F/[pa&KsF:O>D&39OUd1@lt@VMPq@3ItEgU[_+.r69cOX,+1XWi.F<mNB5F<(t<FiQO%B,AD/s0kFA8G'5$rX/I?h/'At(omD>5:HbV$2E)AuqU/_3=5@G&`;nBGqAbOM,Tr031A#W%!H!6Ut:up%VJ]N9Q.?LRhMNjO.C*#iTor^s[q;M3kb@1t%p1LJIEt,MfK(3`U,,'dR-d-*Y>Dd]'ob'`AbIjVda'#6cpDCF559pN#QTR9Q'WprK(q;h5FsUZ7H!qO))Z\o.9&'MXAJ98#Zs]3h\Q?^I7se/]/B@!*eN5G[X/`JU$NbHpFIE)".t/4@<L'bh*0g;1_A+qU4r73*I1`-]#Z$)S5)F[(?VYUdBA&>31*.M[(YF9>SYgNZ5+`pcKZ`$.LGm+5iYQ"Q86rW9h5hpAZAeLip[*78pXanB>RCe.E$\aJC,<7V%l]D]ob<Yp$[O^[8k5Hp^O?pWen))f5+<?QaIL1M=[$0u]6\Xmp"hb+nfI2ODSM,9(H2<](*q3:?\p^q6<h`c4.4Dj;3P>.H\s6MH2$sXj4-d5.rq[MFNRp/"7>F#\!Nr]/+e>.c]=%A$]R6PS$iFB3XqqSC'NHlLs^8_1gG;EG@=*F$.-Zk!4UR0'*~>endstream
endobj
66 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3891
>>
stream
GauHO>BAQ-&q801fU4O.7VQV+"N=S#B;WD]N]X]88nuX=h$8ah/2e3AOH^dcqm.EaX*=Z0oL+NV$K(utposN/$YZ3m8'?@m)h@M`S6fp&&Ql,"Rjq?=gqq+NS$-b;IEeabR'r\`_6Rpsd%)W"LW0%_<luVD!K.D#.fXpd8[Q#n2>b<f0[USZ$]Dd)Lu_!gbFA>,RsjB)6ufie'obShV!aS%WnZ$IB`P1VH@a+n(VPJ.4u;ZtD,tfL'A)5fr,cX^fnt*W-KIFU]8OYY8`6L_>b@LT)5M)TNFM7da25nn%c7U:8a/!<&@3`K$53Go9WL'.7:/,6.iTs;SEL=([l!c_8+)iB+fs[:"(u;tVk*92mr[e!1hF>?mpP/\*pgaS:#i@;W=>n?lB.[#<mT'7Sf_B*Ln[&HI4rt"eGPF7SM.,]&3[?ZT\C.FH0p0/f7)\n4ptL%.mH:?[;,`sJVHh;[T?VnH^9i'pr>sh`f+g5n4C^L](n]Z]aI_f8OF$DBX<\$P!lQ?-T'9'$%(P947<4OLOW1i`!$4)KcXFeOUs%4i_dco\aKM^!WH_i1F.2cmu-Fdq^^)QaCdnioY*I6/K:5s';K'sY@s*-legUV0tO"'N<p]>_TSC%Yk6B]-(a&mO.Vi,gS#o=N8!aH(_'5(c=baApMc#(,EBVgaCZjD%!KKS2tE=[?ntsA0cl]5S#p0IRr92AFub&n"u;3D*7bV["od!I^j<?aq_!*'A?.+jE-?CJU7aM0*hSc+S39BV#M:0qAr774_Z1]h](Qe:./KFDBl>(eDHb9b_l:s\7C@tikb.."WEM2.Q9h%?`dMBRYF,Ugh,/tt9K:FAC_]u8Th,19=#!6I'dXMPL%b!69=co/(JEiN@_Eqq);?9AAR:rJ:^nG(iJ"".-8GTs^.&6$;=(4H9s<N4:)$VaNtIC..uD-/jSJ0^L],rb3-It@hMtNbb\BJG2O-q*>Pn)gS.>?2o+sX(R>o`XVhskkT$Q9,)n/Vjh*LpOFo*_a#hFqu^V\[j%XnG:W*AmsVP`)4<`a8^5I93iFWe-"I;Z2O[T#__f@'K[k4Yr`knbcE[+YZaE%a:jOJ76a#!%`R>e^>)A051m4o=T!485?J=Xl%>K<=Ehc9]kukBHda(]lnI(8itd0s5EA^::bhX]A]YPLO7Dj8eR,U6jH^lViP;Q6OBO+j'Pr]T)et(&7^b#Rmc8RNJm/1Bq+L':+#2J'[*`%D%AkYP@ST2i:>2WM)WTp[%_c/h/N.CYr+:&t]5mB*E&KHaWCO>1K\(kSAg:6EL6[M?<GK[/t_*$Lk#qJ:EIYFQBh2I*)g&EH6^&/sHnD0)XS8"<3B(=I*Rh60P;@.ZQ\hDV.C'$WEM6#EOsU[d`H@X;hCU2#MsD$JEIW`Q3s>JirqrNaheWMBE8Zb"ptV!IqEbfS5)/jWp'DnjnIE^A,<2lpUWY0u[h;kb_l]G0(@5OcIX-15D#+_<$[^?No=Xf[h-FTKb%Y(l,7u<DQ'i#>qVW$BD"M?j<'*B-k,98.BP6*L3^i@jJ,/W+=*9W\PdN(q53:*$P''=d%p7dS'jbh[:,+WNL,4NtQiFNdS<c<RV@e]9__%,PiRVDDh_'QEDGncIWG-YfH`;(0u%sD2S>XLc0^#3gTb'D"JX3Kc\DYF;VQ@CGg-bXpR:@[IRU^fjE.!EW8kB25/dBN>cdDX'*lH=VJT=fgU%(mJ8fYN4BA]A.6dH1d<5jUe(kJh&e#r%t>!IlO'1LC,SUKdGbG.)TI`i+o(nAf<$#cO"H"*rNb=9/&0s0`sG"5?Hl7_MXq!+C\SY8/L^]CbMu(TOi)9s+!YeOAbHX3KuHBY3'Aje8@&cJ*[hL#:.U]r!2g@]]l5)'_>B3,6ri/`r05Zi8VO]aa(A]t<VVa/.`3([:oX0*LOo+C6%JYQ,!g,\VZN76\jE"Wo5@g1J'3F;+V,rrBH(oH$#Khe$Y]QpCP=ooG\F[Yh;uoZZqU&?4C+@R_=4$D9c!K0>%s/_.g,i$Y;HP1N^CUN^O,ek;np!He:gM?(_(aO8,[GU8l45I]2=0Ilu@.)M+JjJjaEdb3#8&;YaL?!.b.DWFEfEO*,b<Sh(d75D>;8_7bit*9cb2NmL!HHOU\IJ1h.M<L*LR7IG-&==gn-5g7RO7`fVOB8./#f4LNlt5!kMY_/ThTKEX8TH=bSV4qbbL:7qH2T#hg>R_6MHd0k`_-3N$_d,^ld\G.5S9r6ktEu]&74"Na4bLbEn&t\-#0Xk0D9h6"E]H*\>R=doCnXO*ga?J:5>V:t5R*S1qS%Mo6<+0#.%-CAr"iB?Z0]c%%HQX>bFO4G&O?*,=[=L$*<HH:G/enAXOG<>A)rCG["PskXH1MMJ\>E]B!ApeHbl[6*^=D!)\BbOWf$&bXBs7n^ckSj;4@BAS-S*C^a.%0s,0uS!B>FF%UTXTHnLGm,2Npf6#LY-qo*]G$'7mhVGoQ9-1Wn0H_rjN>Ur[0.N.Y(LpUnI2JaZ2HnSS)JD?_2:dR@0TmX.l;&Du'BVg7VYQc/XdlUCSNjb?;^3E.;npqD-h#TnsKX-&%?WZ78Nd*nq>V`-Z7)e6u=bM5l@Y&F,4l)P\J4qDm`q,!?#-b$*r>r?[Oo()@F<c4*@7Tk$,:mC]da)p-61t0j!ZX5ag1L8>YcL)%>>#pa/O(kTqft";.NMt+M:Kr=lZ8qM98SS+@;P:;,`jjeuGOa$8?hT8Be$;4<IY`9@G!j`CGn2a/I5BM(11O6:o4'c5Z(/q.(Ndh>7^@Ytg.N-05m#)Ts'N`#CG]CsZ0[c)ppsrs-NDel+7g3XGj?o0S0X/6s0&PGFa8(kEK%ZT'bCNIoJU?(2E*8^r]fI,:Sp>Qd4TuM9Ii=do&`'h8:D((8(hpl>.'Z^:*^E?2,0tXr?BReg!d6S1sq0;N1GLa5(#5R1[I5ae]\nS*kiPTgO1'BPs,)[[%]RNXR9IPo9;EF:^q]dMp)2.&-7((pJK)eK'R=ckJMtuO>WCqjfri%"YL79njrYNh;fO@Vu!7/jFuG\iCT@7_5TI0hFhdp(7nJb9dehO`^@as"@*k#8kZmWG0>E,jK8lCOfS*2E/`+,dF`f>0fqUAC#+R%,`qZf#DW"6GgL's++Lm=0q*JWA0_giZ>aO"$_NoI-HmF5N;P]C]A%`%:`p2k/R)UTaU:7)?:-ZdBT[-EHtS8gEE\A!)aE!c-#S_R"U/]d/X,XVdgI5:"6J,0!"8L[Hd9r$H\"n8)Fci@_Y(VaES+aj;d$:cI&`%f4jNfJT>Tt)A]h`07k4DqhEXK828sSUdMlh4QDTal"mNW#f2:J2&E7!2%W2\kkdU95rs/^gMHn`tmWY;u+e_&o?6*@Yag^6a@WSo&rBn2/meH@M%dkWb8Brtr?'5Ao,&!iW)HcjM:6h1S3)P!U2,0b)n5cCZA]?`N3n79P&)49%@P:QQ3K'MfP?mic8c0iC89&+e!7k#1Ap1`!/V\j):7jrBRV7G0'R([]eM%=].`_h"RKE)''P"Kg-8-oF+H7N!D3ijIm7*f4Vh6qoMND:>GS^dnZ]iu8V$aQSi^Jn9:<*l?&i*R#SGGlkHiE\jP&d]%(12974FH9e/d9fg:fs=c4eD]R5lOUMI!NSm3M*0?0t=X0c`u/om_$'%Z!6k'4NeGMYHWufht?dop]R-5E::[>gs=Lg[IP&]Bof(m5of+ZLS2Yh.51<:^PE*;-saaD]?^QF7fJY&Hqh0Ca`H7j7GA@MdE>5[$H\3u\ndTgdMi$!iFXd3_HW4"#n8/6.]t<Up`s')bLC9g;Xr$0rqtKd:4)<V&A#KlpNErkQr\X?MUMFN&&140eTJ#$^U)F26V2l2p?cDZ$)B@N+It5.C,X/+=cpO7@nV8SmDtIqi?Vs$,s&ppdAaB=Gk4.88:-9~>endstream
endobj
67 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2294
>>
stream
Gat=+gN):5&:Ml+o[=St#%Ph8aLj(1\]n/%@=XboTk[3P!^*_>O(BI#f5Jhk^gM%K-"'A\FgmD-SCTsEO-]ch!eATaBK^+'&K"8.1DBqG0CU[.qL,4%1Te*[lC&#;l/7V_J]lJ=q2)"N+\o=C0[,PD1h&aLdii<W\[bU!Q>3l<W.*of9RC7]+o.ia]=N9=>r8t0Y*qh4;t>J+1g[I$XU\qjMf<`k<b;eB"D\)[\\:?D9d/+BqustWC$cjgeeU-l;H-lf>[k3'M.sbUc<ZL_DP4$N75Hd4ggJ`OC9BC"2unrI"cIdI26#oY@/)\a*eR!m7KY<66Fp[mO^tL2pP_P%StE7^PpQ+[J75"@5YU/,"J0OVJ783]]RW`p/3K8iO@A!^P=84#80b+2nYu7'`h#s\2:QP=kI?W^ImV">QKKsrWppB.03l>d%tEPl;PV+""qUYIGS=J0+pW-]N(\2<!]\LbSEJIkc,99S&UMkXA94+:lRV]4_ef0Ui$AVlK84PlEqJCk3T"Xk3,%+Y#?Z;N&1e[qWtSBPBTijRQ!M+Wc,cdmPF$IPI5&.p17t`-pRKL]-O;_A/RZ:/1(Z6[P&+M8PIY(JI/4*JIU+C>@N20KeaNLdQ"%TcXg0DZ=lK*`J1o'&/)Q[(jfl>pIf8!'Rucp?0n<'=!-5rr!'V,"=R%gLn0o='9KbI,\Pr<#m\HmaQ@Co"530W=.YhT&MUaUb"0\l(fX@)HMOFj_da@C$Xc?G@n#\F"'W"8_Dq5hd..EWP#nK9BD(Vt!g9qQ#j\C]e-G$1/U8OLfMJ\N:Z0(TM5/,jIAEsk#2T\h.HKPp@[uT1][tgiVC4I:#"."@Q`HpOnY<<Vp'?*kO9C.+>+or`2*Y0d`cd4R_=8<ZHPl"'j$_8#uiGS[2;p\*!nB)<#c"c@]%Zfb:P)5ct3=Mrf$mWl&U[&8NU+;CM`JhAZ(5Ltlg#Y<?o^=g5]jq9YH4U?Q9C),8Mp5"X\^5S*iG/8,--`8&\pW2R'\Y:e"k(+5E&nciT-p_a^o.k7Ku\5#%Ye>,H+F%t"P!1H8i$us4J,<qK]jXI/7UUdWM5%(CEKmhQE=k-i9SQ0V-omaRdPcSXsA*rOt&Fje4\^T*TqA4big7i>`O\-rtbH<*Zn32C2-t4FS-ECa<F/W&91[=Gn0h&I6E7:F)+KGlAC+G-cAR$"aiN>H?8)bGnN(/Z!\_]kUIc](.oIsPVTe,!h)BipE%B>EX%qM;hq`@l'>TRZk(?P[2EaQ[9.4p@W&.\PH8n%B1qE0eiLk*dQ(>gJF'^!J5=hu_7i&q.Ht(4OS`(ZE0+]IbNe<!$H?mdjb0XedH11>.V:Vp5^OFOhZ\r.8eV4r.U4#R+60C*Q/i.@!/JTs%hk>'[)ImuR*g2b_I!MMR*dSi-U]\)AemRqTP.u2-ic&8BVUrKpG\aO-m4qOC6fkV<Xg*F94aWEY:8s9!W-h<b-jq0-.kbCY-dl'5M\Q?eB/*\$9haH2fq$6-'-s"$UMkV&B4R69T`^LaK1@>%M'6HOedOK.+W1+FBd/c,>GR._dK%fi_UTO_jF"mi*r#\h&fkA17flO@dbgqN@5PkTD@[cAfZqU*94]bh$NL`eqSMj?D4[(,##$]Co#`B]FDK`@%nsd(jXY.GXBIBd.NgtT,1MSEsk`:`=1^W2)\#TW3Z=RSZnoH1Ws"Np$0rt/Nc7>miVBuK#`G`j["dj>Ne6EEmnO`]Hc&S\nsPs<qXf#NbDi$9&Na@.oKH:r-,n;GlHBGke6YE\Fo:$l5&`=#*I5"/+r+=&T"MRmM,F@7a5-')f8;(0*/e<^lMTRGM2L3`W[o+puk;Q-.&r<+VG\@o`B+"L:+5@aoQqk8t#el)7UuI94#c(j*Do44a0;X=g\D"J7aVHEuqY0*aA%t"r:[g2G7gdY(H41ZZ6RH`3cu)Psb'5nh@Rah-_:"OT0Ob_4&T#5h8L#::::]QI5@3pb5B73@omLap^2?Ot<%.T?>FZP>kd77ok,U16+m/WZ9:5OAokj\@&de+%HGLjF:en/]h##d]QY%GntJ)YnCM+:M,cI@ar1[K$3?#VCW',>BgVkVhC_4HgfPU+RjEnri+ZLE`[Bj?FhNN*=&5f+3;DeK^D#^Na9<sR/?>/gdTK*5R0KhrXgK%/sn5$$kK=P)C'`&Np)48/CemY>`SrG,&nO$U]e*2/p%$qJt8.6^C<>pT::2qbYpQlZB3$SeP0Ko8?sa,UMm,qNBa_PDSa;JfuTG`;'BX7iQ3QYl-BNca53IhFOQBdBfngD'IS?.#og&H#GDeZ8H~>endstream
endobj
xref
0 68
0000000000 65535 f
0000000061 00000 n
0000000146 00000 n
0000000253 00000 n
0000000365 00000 n
0000000512 00000 n
0000000659 00000 n
0000000806 00000 n
0000000953 00000 n
0000001100 00000 n
0000001247 00000 n
0000001395 00000 n
0000001543 00000 n
0000001692 00000 n
0000001839 00000 n
0000001988 00000 n
0000002136 00000 n
0000002283 00000 n
0000002432 00000 n
0000002581 00000 n
0000002730 00000 n
0000002878 00000 n
0000003026 00000 n
0000003174 00000 n
0000003323 00000 n
0000003471 00000 n
0000003619 00000 n
0000003735 00000 n
0000004107 00000 n
0000004213 00000 n
0000004291 00000 n
0000004497 00000 n
0000004581 00000 n
0000004787 00000 n
0000004993 00000 n
0000005199 00000 n
0000005405 00000 n
0000005492 00000 n
0000005812 00000 n
0000005887 00000 n
0000006014 00000 n
0000006156 00000 n
0000006267 00000 n
0000006393 00000 n
0000006519 00000 n
0000006665 00000 n
0000006789 00000 n
0000006980 00000 n
0000007075 00000 n
0000007180 00000 n
0000007299 00000 n
0000007480 00000 n
0000007606 00000 n
0000007747 00000 n
0000007887 00000 n
0000008006 00000 n
0000008176 00000 n
0000008322 00000 n
0000008457 00000 n
0000008567 00000 n
0000008717 00000 n
0000008844 00000 n
0000008940 00000 n
0000010299 00000 n
0000015153 00000 n
0000019349 00000 n
0000022875 00000 n
0000026858 00000 n
trailer
<<
/ID
[<876852817b61089766fa64afae9b20cf><876852817b61089766fa64afae9b20cf>]
% ReportLab generated PDF document -- digest (opensource)
/Info 37 0 R
/Root 36 0 R
/Size 68
>>
startxref
29244
%%EOF

202
docs/BUILD_DEPLOY.pdf Normal file
View File

@@ -0,0 +1,202 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 11 0 R /F4 13 0 R /F5 14 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 716.2874 123.509 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 705.2874 85.70104 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 694.2874 96.81304 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 683.2874 81.24504 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 672.2874 74.12504 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 661.2874 105.717 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 59.68504 650.8499 154.7325 660.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
12 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
13 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
15 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Outlines 18 0 R /PageMode /UseNone /Pages 26 0 R /Type /Catalog
>>
endobj
17 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123816+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123816+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast build ecosystem) /Trapped /False
>>
endobj
18 0 obj
<<
/Count 8 /First 19 0 R /Last 24 0 R /Type /Outlines
>>
endobj
19 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 20 0 R /Parent 18 0 R /Title (Shared authentication)
>>
endobj
20 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 21 0 R /Parent 18 0 R /Prev 19 0 R /Title (Local stack)
>>
endobj
21 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 22 0 R /Parent 18 0 R /Prev 20 0 R /Title (Trigger a build)
>>
endobj
22 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 23 0 R /Parent 18 0 R /Prev 21 0 R /Title (Docker CI)
>>
endobj
23 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 24 0 R /Parent 18 0 R /Prev 22 0 R /Title (CircleCI)
>>
endobj
24 0 obj
<<
/Count 1 /Dest [ 15 0 R /Fit ] /First 25 0 R /Last 25 0 R /Parent 18 0 R /Prev 23 0 R
/Title (Production notes)
>>
endobj
25 0 obj
<<
/Dest [ 15 0 R /Fit ] /Parent 24 0 R /Title (Alpine BE \(config.php paths\))
>>
endobj
26 0 obj
<<
/Count 2 /Kids [ 12 0 R 15 0 R ] /Type /Pages
>>
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 605
>>
stream
Gatn#?#/1K'Sc)J/'_]eR&2*2rn(NJ"bj`Il<Xl+6^<p=Mdq$qZEesE-#(g[A=HeT_$95Hcf8*T6(mbbrEX7?7O<GL+WuDX$(-eWauN/=_=mso<@3<n\Y'7>=[jemOuP*)':L^03"TDl1s:G\Je\TD>7KRNnVG;[gdD8I'KZG-3rgT6Tucda?</bmDC]?o"_6d!4D[_jJQCA%oKdDuT_o#U4*^egS>c3C?KX.D,iV6k:b5Lte*!\W-fQ8+46%.]h7]2nE9?Kk7X$f_ak+XV1&pm"CoV-GIn5BSYWUZ5S1ifF/Ee0&dUSa4--]jI*uYT3$-K\B\&%eMN,/B<5(Cj+he.UhqJ@gTY!?kl*SEp(?u4T8JFZ>NbcR$;p`S,`s4jthQf==VXB+&+4D`^mm//H9I[3.%C)t^^Ri^(<?A^d%:,TU!<"t[N/tB&PC:C7:[6aQ>h.cG+3$uFiCB?mDg;)S']'2nh@5N]8@6A$mZQ`]25po%en#uT_E0=[jIr,E>k6.CahU&Y)8^k8Y>Gq,6e%Q"[N+Lr?+j7m4CCcKWXhhBKR*=KDd?!",#dk*![p<WPLgr`_2P)STWnKL0:4<u`^ApU9E=;~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2887
>>
stream
Gb"/)>Ar9=&UsJXR"lGR!fNE,:%B_?pm/pZdjVZQ;kPTKMHi`3.5&r0Z=4OHn"&R''Ldll-(hi@33bm>D=7#?Cin%n8'cX297X&tW#p-.$&iMiRu.O4Hak)grH>($1JLNI#F8tR1UImkR1?A]qmq-+Tbrfen!TgtQ=63K'<FJ[iO:V=9eXW=FVlc_&4)rbJRm*5CfCL#LYh(.jjXNZPqHa7#+h:g/:%Q]mkB2D)#Ds,U1l)\H"+&7p<c:5`7[IPK1nt-G]=8-b:nT,SV"nVKS;768ai+[aatl&0Fka.Rc9[7<=o"k:YnA]8A&W4aW;QN\coMuXH95k"(G@:.)sWbS,k$u7>@ZlLl?;@D':Q"L$6I0^2<qK0RJjbMP#9R7<VC&ZL(>aJ*)ZJiPBq^jS4.ChS+CoF!T[S@O;Og1uNn]Un7,dL7+2GBpo7R]N+=:+H!;SVel<-2dFba`mrVV@bOs>oa^0LgT2Y,=uA_9Z@;-MIQHk7<qggO-VrC`;h>7^*aesc*)$)bA'Y10fM*0;$1G8"(?)84a/U*SS-?Xi-L"IQflu_XH[%eG4-GA;$0@8EN-CA3Z$UQ@TaY?)cC=V%g#[d3Es:7R-%!<?*h)0YnhiR$h.]D7fHb,8J8<pC4;i>in+NaJ=H5ln7p/+ETX&&b7Xqqk(dk/M%?Ao)nW\':l=/D)Ho9lSHAP-BnKQh0r87&%pG6AG*7N?0rqZ&m1Q9]H,![b>+U=W+Gg$B!l?dC6[C2K)RB_)XN38EHHn#=SJlW*FW>NFKaoMDm"u%#t#4P1o&2KJ:(*o+T3=0'I&tA:@MISa8g"NkhS`^[OL+3jCOlsm*=37ne4G"[W(3pUDJK)9<=n!6C$k,]KW]]P@5lr]W)#,dp]Pc_DDS'Xtk1O1Vo>\_J8>XRFkkHi9V(9b9(^C[U7@8!>'uE7)d".S5=n"d=$j^[m.ckh1+S`f:A0g7SpjbAa."4TiY]Nf^JOrDRBGSgUFqCmO"2F5&&*B%mqO-QWZ6hb9,u3PP6qL$$L#85=[5_B]1;g1akiYg/C&9m4Lj?R'?SOAN%(CB=rq,*oQOe;,2cif4*cE/"=0k(egZOVM+!6"2no3&[1ZN;^?Npjs?>?N%fWI(WD>YK-chGY)6d0EbIQO([CsMkJ#X+)c[.'=V,F?"o4u4a;#1Y!5c3.A817f"\X;@f/'\0+$aBk-B49+ZC8#qEU!_cgeo`pNV?#]GFL\m]pTgpUSZfEL/kUl#'8CR?#<C:3b$^RS)")X^=+\;9M_V&/'lJlUd+We(q/3*k<:P`V"B@F?MltmRmp;W2\B#SVLn_]50RljX_I4(E<SV,,5-^`&6]E@t"_qL(G(JSJ?gI2-5"7ju!$rFQ"Hl6:CbL9k]HE$*iX;<]+=Io+re-$\H,/N/>&H%*N&#!W/,DotBUD5q],1YfhNeSH2!QWOg5+Sk=+:=b%U+"sbYWr==dQkI!"n.gp*"Nu^>AN9\&8W3T?p7(I>Y.hKZgaG_Sol<keeRrmURbb/ZZ"Bk9o*A!9;*>W,VNCL4eL$T<@G6D,%)LZW%:jL,R?r,/f$1YJ\"D!YUU8JOt39B,6lVBOCAutSO4C81^kS0X'u*cP4QoN]nICo2!dO;U1!.`dkm:UW['Nr`t[Q-7D0EUH\20DR^te@2;&rW1DY]OKPV.jL%8<lP:kYTk37n=.WAMp9p(!\.F`qD.[BfW:SGJ:aH&TlhtsJPW0a3mjQ]&GSZ.OdYE6&-Pn%DaIMpAq)g@C#0k_"cLE-)D@4(/VIFmElgY$FFh<VeeV9h:R46m?/mZ`GBFV/>VEcn3`?Rn)1Vf$L<*r7.$`mX]=aiH$SoD)um-O2O\B=A#UoC`ci,cj#c8BMlF,p!S+e?,??fpANeW^!5j?Jk+Hca;R\qaf5bk^@\f).QhVon&])FHV)(@7MF,Zl?E-rDmV>+3OI.XBh>bLIG%jJ'j?;pidc-s3lNmXYl=_EguBFHQhe92.SCgX6)l?6L^sb*1`uNP"](PhCX"YL)h[`L2YV*ll'-dha*F.V@At.0,'NcW&;/p4M%u"=HiL%AD[r@gi2Qh*1AHcI9=<1cMWro[IGH,de;FWc!^f:J8@,aD'm7rS=^ZGKG*'sme]%9(Qc]$KOmU(7&h.nkmAsK?TSEN6<[8TG@c96KkMMq5;!ME\:.d)S[k_9\(5o6eKUr\-*M4FiR`Qj4l\Zb_,@MnKa1n5X"/Um1i<F0frBLaXm2hTNiHQaJM6JV6Z>36Op'Pobk.+lS#:??+I!EHkJ_2iJJ!=WP"@MJjEq@C_]6g2fnPR20G^nnjk+[Gm9XL<Gq\K8n%0Vj)J6Qe7?7\bAr_&ECZ_/6h(m6t,';7=>r/d1b2EQWnCULd-i2Pj!I"+D\+1jspBXPV]b>!"gT?Pt6eo@<#tWU?eR]i4ehl^ERd,gSeb+6j.Z1O<^QuW]&hiSFS<KNmMGd46hKqt,J)/YtGR:oBE_kEh?cpLWDlSd$o7T)m>"lY8Y*+sn*rQ[-7!=Rr1m$>,doR-TqB&2!Rt2cAj0b_17B@TeA^,'BK=F\i[WHDC[0sKaD*D0XTtK?"(0_eEpQi'QN?(i2gX@poa._hH"VXIRG=:iT?ZWXo@uf-B^K/Y7h-[4!K@.0^?ZX?jN3JQJHn,#/>9,^jp9rB>P?Q^S\kWsgQ;M/TKY]p4>=[Kpkt]E%ddl'%3:p\lcF.^Dq,f5R9,I.7C`PhA+U9pYmp^ENdZXE8P2f[;_6t;^JZ\-'r7ZVsDJ^`M%Gj'pAF=&"oOnkJ0nK*!T]qp8B:tbNrr*nM"neGjLo=H=@Yaq6?4QW(4s?D&!1Tgld4i\\5/I#6!@,aRJ\:bJ`"^Q&2/H(#V-+[`*03TtC"g,5i1e95OVc/5bsXQj=X1*VKAl1scRQKN~>endstream
endobj
xref
0 29
0000000000 65535 f
0000000061 00000 n
0000000135 00000 n
0000000242 00000 n
0000000354 00000 n
0000000501 00000 n
0000000649 00000 n
0000000797 00000 n
0000000945 00000 n
0000001093 00000 n
0000001240 00000 n
0000001389 00000 n
0000001505 00000 n
0000001766 00000 n
0000001872 00000 n
0000001950 00000 n
0000002156 00000 n
0000002243 00000 n
0000002546 00000 n
0000002620 00000 n
0000002723 00000 n
0000002829 00000 n
0000002939 00000 n
0000003043 00000 n
0000003146 00000 n
0000003283 00000 n
0000003382 00000 n
0000003450 00000 n
0000004146 00000 n
trailer
<<
/ID
[<0da9c3b30d0111b270b2be75732a529b><0da9c3b30d0111b270b2be75732a529b>]
% ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R
/Root 16 0 R
/Size 29
>>
startxref
7125
%%EOF

147
docs/COMMERCIAL.pdf Normal file
View File

@@ -0,0 +1,147 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 7 0 R /F4 9 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 10 0 R /Fit ] /Rect [ 45.68504 716.2874 110.157 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 10 0 R /Fit ] /Rect [ 45.68504 705.2874 108.829 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 10 0 R /Fit ] /Rect [ 45.68504 694.2874 82.58904 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R ] /Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
9 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
10 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
11 0 obj
<<
/Outlines 13 0 R /PageMode /UseNone /Pages 17 0 R /Type /Catalog
>>
endobj
12 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123816+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123816+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Commercial features \(developer-gated\)) /Trapped /False
>>
endobj
13 0 obj
<<
/Count 3 /First 14 0 R /Last 16 0 R /Type /Outlines
>>
endobj
14 0 obj
<<
/Dest [ 10 0 R /Fit ] /Next 15 0 R /Parent 13 0 R /Title (Developer toggles)
>>
endobj
15 0 obj
<<
/Dest [ 10 0 R /Fit ] /Next 16 0 R /Parent 13 0 R /Prev 14 0 R /Title (Before production)
>>
endobj
16 0 obj
<<
/Dest [ 10 0 R /Fit ] /Parent 13 0 R /Prev 15 0 R /Title (Code map)
>>
endobj
17 0 obj
<<
/Count 2 /Kids [ 8 0 R 10 0 R ] /Type /Pages
>>
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 500
>>
stream
Gatn"?#Q2d'Sc)J/)JHk;EZ*@CtRR42U\C#qsn<9(cWrp?tPr&n'A3b<MQ_AVTKNBS7A.Gf*;A<Ml(:C!Z)(0QNRpT)c4BaQkcdJm+71;3g5f-/EI2Fer7d7M>LbMnP%#'K#q8;SUp$)j9`Y@BCVO7^hB)n+p9;7&OMEV+u/e(Z#2&8(TqVW0C,@K`YN"Gm==lBZ?N`s^%LRC,1pXYFp@OOjrMa>DND55j*K!Q&PF4*;bjkI*8cg:,tn7tdjQ;:iT#P*k"G/H/3[EJ?[Z.+qRC!O[5WCt+k97sH;]"%6.2IcoMgYh@MOs/c;!i(Z#CYHXp_ZG_[1qbd/TXipBbD068[(CpBQH2[bJfn6KdpAkSJF&]LD9p[4=W3]%?0r(N2`L\B:Ntq@fNi@Yur;lU3/'(d0_Ra4/8,WVu7.^9euR%PH=!BFK%k$;K@4%_-`^(3PBcQV6,ap>5WHiMHktG(&h,Lp^W=(Osl-.rUq"f[7`Kp)AD^![.~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1465
>>
stream
Gatm:D,]IS%0#*jToWbF9]E^m\"?9<RGJr?>q"SkZXXWWor\tkS<UniqNI*iUnOK9gBeE2bEDcoH6aF\I-fj2(^"$ei;D:5S&/tB[S'kmr<$--hS24#/*VAu+*a(Z5qjFI1N`.,DW=$pen$osMnuiXB9!pb"/F0l*kd7+.*DMhOdr[5KljH7(!ARc@7^T#a^3mh=.7$abEV<$)#f!dZQH-&QC@Z4aOm9K&M00$7-U(1=D'%pQ.oL/':>nE!r7_oTG%0b05.hsm?0\RWR)Dk4O6I%Co`-38k9FPccg:33VrmV==$'G^K<*f6E75Fei/!M,3BJP\Ud&J6\#dsYj?6.In2]BF1VUGTGD2G`AU#UZj[6mf$0SpJrm%p;Y$p\6G<c=m=F^f%:d<p:rdX-3()R1#!`6N%UC#rpC]S(=Qnk.:n.<#L'`Gd?$nr'k1PW:5skbq/O`4(c@tt=HcYaN*SSo!f%r2gj?/-h89t%Yi>qEBjUE`AG&a>_eloo:SF>@%C".t^FXZc3s"g[Y((22G/^;Q#->U6^iqc.^[!)p*VUDJZAPmYXe@0IMcMSV^N"G>fh]rfE?rHp^=]M#1.>(j"1`]"pV0!sqL=B%$B.3iPIO\LA=%YrL^(6F20T'bu,8*?R;C"JP<0uqZcfZ[H2fO;Yrst`jbmpM%(%b@f`[XP6qAJ':KdBocjb8e@alQT;JoLba6fl-7P/sh1M'un;r]Sdo(@1`Y-pEJUK>C!>o;+)7nLu"+[Ps@ID).&h_9.J:,_shu'Uh5m^4F[RZH)ZGq"pgV"uL9^)qsbmRi_:+9gr=W.t?JL_L8\oo6pA>od\RTfWPK^YH`YZC'0m+Z%8rj""C=VJZEgDdU<HXYuEBbQG.K!-/Z0<on2\0jEhXK[K<RAV5D)DgZZ[.Q7PaLfX@hGaJ=2^iaW_D>_biMf::r<bql*i!ai!DXl:f/cS\KbT$@/el><p'_i<9W#@1Cje.jY3_Ba0%<O<7nc/Vl@Q<PU1@DH[\@uV=E0IcpC<,!+3Z9b?5DpKnFMIKF^1K*I`"u4<=Q&3IDI[tA%X22(E3TU)0mcnudE;OY!]qP&n[%RU?4DNce+SGGFd<Cs_@Wo/_2(H`9Q6g!kEuTCbjZ]Is050qZ9kSg_agN.NY>>lBTe(dQ[^,6:KEb0r:HE0mKW6q7@FfW.9XT+Si<uGR$@JD5h@'u,,qBiL_uaT2UA1IXr5%Xhdh-X-h!nK0EPR-Q,pJA@[,srDc'h:c=U'q&+jo%i?_tbB"KmIYKb;*'?\g#=]Xi?tBu@\j1EF_9Nk(M28RR=RJ#r,`0h[Q]6N-jOO&O\>o]A''C`s@iQn6bY1MLrJ'%THBhK%`j?J=7b-pI$0(O<C*25`:0-5@@j@6/NrSr[jDnpWC!LJ,6u2Ts^5LY[$,mVbSE:jXo[9j5G5gVMIOR-C5*s7?0$/UU`FMb.r$\FQeiMHUgKhLD8$mj.~>endstream
endobj
xref
0 20
0000000000 65535 f
0000000061 00000 n
0000000122 00000 n
0000000229 00000 n
0000000341 00000 n
0000000488 00000 n
0000000635 00000 n
0000000783 00000 n
0000000898 00000 n
0000001133 00000 n
0000001238 00000 n
0000001444 00000 n
0000001531 00000 n
0000001845 00000 n
0000001919 00000 n
0000002018 00000 n
0000002130 00000 n
0000002220 00000 n
0000002287 00000 n
0000002878 00000 n
trailer
<<
/ID
[<bb21d75fe21ec421f3c0f308926be035><bb21d75fe21ec421f3c0f308926be035>]
% ReportLab generated PDF document -- digest (opensource)
/Info 12 0 R
/Root 11 0 R
/Size 20
>>
startxref
4435
%%EOF

153
docs/CRASH_REPORTER.pdf Normal file
View File

@@ -0,0 +1,153 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 7 0 R /F4 9 0 R /F5 10 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 716.2874 73.25304 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 705.2874 76.81304 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 11 0 R /Fit ] /Rect [ 45.68504 694.2874 86.14104 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R ] /Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
9 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
10 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
11 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 18 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/Outlines 14 0 R /PageMode /UseNone /Pages 18 0 R /Type /Catalog
>>
endobj
13 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123816+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123816+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Anonymous crash reporter) /Trapped /False
>>
endobj
14 0 obj
<<
/Count 3 /First 15 0 R /Last 17 0 R /Type /Outlines
>>
endobj
15 0 obj
<<
/Dest [ 11 0 R /Fit ] /Next 16 0 R /Parent 14 0 R /Title (Android)
>>
endobj
16 0 obj
<<
/Dest [ 11 0 R /Fit ] /Next 17 0 R /Parent 14 0 R /Prev 15 0 R /Title (Backend)
>>
endobj
17 0 obj
<<
/Dest [ 11 0 R /Fit ] /Parent 14 0 R /Prev 16 0 R /Title (Report files)
>>
endobj
18 0 obj
<<
/Count 2 /Kids [ 8 0 R 11 0 R ] /Type /Pages
>>
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 479
>>
stream
Gatn!6#Y4+*6%CF'^o.c0`Kh3Sa=pe<ZEG@1*;WT86q[lZ%nMuna1>5eql.YQmPIdAA@p<r;6g_%3"E@"jS^VXp?:\2kZ+@Ya8JGfs_jT.l5.dY':.\%-+Y7dXPu#nQ\U2_.97Mah`oK77N)?BB`)Ng)/I#=U:*-/;+iK8.C?34RLl\jpN:/O#@t=e?S;IM!d1>hSiR#2mBLUk')6jqj>B%Lmj]W6r]Z`9fW*C,"e_]6./#f@c5/@-0D6F>$R;Mlh@$pjjf.7/kacu+/o0iTaVUF))7]u83.*T7nNWGV0L4)DQ>F;LTj&bI.)I?9`Rj?rVulf+f0Q[M+75n?cUMe$&-QhniX,@Sb!LWFWk)6ZQ)&`9s]$W!nOnoRWA7?"16I7mKLpMW]Y"\FZ@=nSc)\lHkO;hF*6@CO+$&4*UZ8LU%,X=\&.mZh7;13hc;nO_sM]j-M8e`C6-NhgCQGiEad1@!nRDIXT~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1939
>>
stream
Gatm<gMYb8&:N/3$k*i3;hlPuUi(TY)Q-.<-]4^m0*6qe\WZ0>94gc\d\?cu=Y;!n]SNjj4,H;lls.i+SXG`D3rU&N^J4duD@W3J"rIL*9/'&aK_ZFoT=99XN*Of<[,/UH:$<+7)UZenmV@6S(?fMh^2@0eco%k>RIpX4i$e*$Kt\EpG7=Z:!>$IRl[0i.o.jP#6*-_Bk,ntQpD2me0Rk<7pg.H_F>^bS#%E*UQ8E+8o(,KYc/@C&_W^_;ZQd*((>BALit.'o@<"EPfCFpgK.IqdSpqP5?;F]<MM);\j)ID6J'hTX(ABBdkl^$o8@_+:eN/9-F@1WH*#9i,aC3J>BUh=9^iOo.5<^Z:&&p/sj:Fe-6*/qRrkf@8p$CG]o3'jgUkcD">`:`Vj0$F(q:e(34?U-VrUFA/`3K"MLV2\m4/N#\$nR3b`^Kl:":<nnhc+H!ghJNd&oYZ1$SE6]b*!U?@'K:PGg27oDK!4!>r8hW_aj"4RU?h(N8Q%(rheoCG0N"n..TNV55IsbJic#mjc7`:"`pOi:HSd'$$jC28VoQG_o*Tq0#6M-T=V+WW)-+Q>Y-ptb>>F.#ZL-mQ/Hu1riX14KNfTa6`aEVaW:.3*A9u1E+AuIP4E+g:3J[W;rNFA?OJ2+$gcYD;0Z#+!g@?]BU"A(SDN,<pj^ci-V^*g'/-?pq48H;)p]sfJK-(U)J/!dWa1lY"HS+<E=A$6cZSmmIW65SKp"Gr,#K9SU%BWa.QObD9`+#+\$,9<])1O(?N'7[Dk/S<"<tnA`U+ZM^LApTF.-*b3(Y28X'+'8[]`cA(0U?<<V=+=?8UbCe]i4RrhVVd[\nN=iMla_\BFQElP?g`LM89O":Ka=4GG,_2KgM)$DpQabAWJ`72?mp01i#h`]!pPN<(dJfAP?2leCX(nGEln:J&'"q.3B83Es<7FGjV3-g8D#N6,hU6bX)J1klE!nAA8]=H^[$1_FQG"QOa*[29Y37n'jY6%u$pE7pDO5'Cak>r=BmFi.$3_!`-^[65caQfi2F;;(0i7`*nfEA,a0p&0d`!Ll,#m:/4onP*4(\"i(f/K>cAZ2Prp%7NOGKXhaGB^65\3=$6=M1YAt-i^fC(,=?b]-"jRa'o*hK+/'T]Sit3&s9Jh]@02KR-[fIEdaK(;*=,cQMPKsKjrRuloJ)TQruenHN(jQ6k)R%5E3=9;P?PFkZi7`%>ib[M;t20A1kIO@1O.nRe^@qk99r_fm2i#jXrQrrHj9<-,,+'HN!]nh6Mc*JJV)<n#5goj&\q2Q>(+4C)bENSp['LJea&#l=)76?3'$-Vbo#t:WjmpSO_dTYop%n.Hs"/+2<<8^Z&p1?1S3$C3l$F4,]A;,!n52Z4W\34ML-_6YpK^q"46sFK>Z62>6R7nnKGJ8@*h9=2QrpL8^%YkZIqr.i^F/G;YC=d7W5W<.D)/e/Md/1+Y-(_201,+-<YU"g'lQl2:WrI>\M.6`,\"[dF\I7(O>5#B+UbPIHE.W)EWW,.LMoU1NU`.":<J;!sM'm&EbofENe\Zb&I,(\slZPUdS#.`iSXGV)%R9=1;IH]@<;`J0!0e,>F8otb$6ROoFj_;mtWC;k3%Bo_L//*<fG7;ei`So,.r2QX'ACd%Ko.Vf=I94OB\h-9EHNcQc.?LqD#j]&oMU;JQ6)ap8",<GhR"nii65..`ul'mt>`R!cj/Z^#J_dNkCBoPnPbd%ENoY#_I>(;i"Of2<5:F?PFkHKIAk[X^de,gd\Kp,J\I)m%OYH:0hS.OtST1LTYW[^k?GJ<FpZLjOQ`hd^U->FJIm#&Djl2%N^XmHj=Cn74MMbTor`gOV^&'*/;`bj#T%a%^aamI6?H.e7:?TQt.R!hOprOVG+CA*q-.X7[,>3sn4U/lEeC%Bqg'j'[`'FoIa,*/_d2eHeR7hgM!2_RX'Cn/lK%u4J1f`~>endstream
endobj
xref
0 21
0000000000 65535 f
0000000061 00000 n
0000000133 00000 n
0000000240 00000 n
0000000352 00000 n
0000000500 00000 n
0000000648 00000 n
0000000796 00000 n
0000000911 00000 n
0000001146 00000 n
0000001251 00000 n
0000001329 00000 n
0000001535 00000 n
0000001622 00000 n
0000001921 00000 n
0000001995 00000 n
0000002084 00000 n
0000002186 00000 n
0000002280 00000 n
0000002347 00000 n
0000002917 00000 n
trailer
<<
/ID
[<791687390028bc46a9df797aa4d2bb7c><791687390028bc46a9df797aa4d2bb7c>]
% ReportLab generated PDF document -- digest (opensource)
/Info 13 0 R
/Root 12 0 R
/Size 21
>>
startxref
4948
%%EOF

File diff suppressed because one or more lines are too long

View File

@@ -2,7 +2,7 @@
%“Œ‹ž ReportLab Generated PDF document (opensource) %“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj 1 0 obj
<< <<
/F1 2 0 R /F2 3 0 R /F1 2 0 R /F2 3 0 R /F3 15 0 R /F4 17 0 R /F5 19 0 R
>> >>
endobj endobj
2 0 obj 2 0 obj
@@ -17,17 +17,83 @@ endobj
endobj endobj
4 0 obj 4 0 obj
<< <<
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << /Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 716.2874 129.725 727.2874 ] /Subtype /Link /Type /Annot
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
5 0 obj 5 0 obj
<< <<
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << /Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 705.2874 115.477 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 694.2874 112.821 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 683.2874 176.853 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 672.8499 100.53 682.8499 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 662.8499 122.2125 672.8499 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 652.8499 135.1275 662.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 642.2874 130.157 653.2874 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 631.2874 189.741 642.2874 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 45.68504 620.2874 159.501 631.2874 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 45.68504 609.2874 98.59704 620.2874 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
16 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R ] /Contents 36 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 35 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
17 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
18 0 obj
<<
/Contents 37 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 35 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans << >> /Rotate 0 /Trans <<
@@ -35,59 +101,170 @@ endobj
/Type /Page /Type /Page
>> >>
endobj endobj
6 0 obj 19 0 obj
<< <<
/PageMode /UseNone /Pages 8 0 R /Type /Catalog /BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>> >>
endobj endobj
7 0 obj 20 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260602144833+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260602144833+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Contents 38 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 35 0 R /Resources <<
/Subject (\(unspecified\)) /Title (Grafana vs Others GraphVis Pivot) /Trapped /False /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>> >>
endobj endobj
8 0 obj 21 0 obj
<< <<
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages /Outlines 23 0 R /PageMode /UseNone /Pages 35 0 R /Type /Catalog
>> >>
endobj endobj
9 0 obj 22 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2776 /Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 Graph Visualization Pivot) /Trapped /False
>>
endobj
23 0 obj
<<
/Count 12 /First 24 0 R /Last 34 0 R /Type /Outlines
>>
endobj
24 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 25 0 R /Parent 23 0 R /Title (Context and constraints)
>>
endobj
25 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 26 0 R /Parent 23 0 R /Prev 24 0 R /Title (Executive summary)
>>
endobj
26 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 27 0 R /Parent 23 0 R /Prev 25 0 R /Title (Option comparison)
>>
endobj
27 0 obj
<<
/Count 3 /Dest [ 18 0 R /Fit ] /First 28 0 R /Last 30 0 R /Next 31 0 R /Parent 23 0 R
/Prev 26 0 R /Title (Role-based graph packs \(suggested\))
>>
endobj
28 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 29 0 R /Parent 27 0 R /Title (User graphs)
>>
endobj
29 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 30 0 R /Parent 27 0 R /Prev 28 0 R /Title (Slug admin graphs)
>>
endobj
30 0 obj
<<
/Dest [ 18 0 R /Fit ] /Parent 27 0 R /Prev 29 0 R /Title (Platform admin graphs)
>>
endobj
31 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 32 0 R /Parent 23 0 R /Prev 27 0 R /Title (Estimates \(engineering\))
>>
endobj
32 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 33 0 R /Parent 23 0 R /Prev 31 0 R /Title (Recommendation under your constraints)
>>
endobj
33 0 obj
<<
/Dest [ 20 0 R /Fit ] /Next 34 0 R /Parent 23 0 R /Prev 32 0 R /Title (Implementation slice \(proposed\))
>>
endobj
34 0 obj
<<
/Dest [ 20 0 R /Fit ] /Parent 23 0 R /Prev 33 0 R /Title (Source linkage)
>>
endobj
35 0 obj
<<
/Count 3 /Kids [ 16 0 R 18 0 R 20 0 R ] /Type /Pages
>>
endobj
36 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 737
>> >>
stream stream
Gat=-gNV@2'7\>80opEDN%JCNSnO:1p\WYi:$A0sa>lE#(8-Yl?-=R's8!bXp]>6#b970(,L;>2qAWjnN\<cuoiD-cVD.j_J3dR(#K+t@R!sb$l,Bh6A%U3524^*E!S?iugU&P[%`t1-&^rX(1WPODHD%f,)-[<@M[ST[<+:sJ$:PL[4=Pjn.DRYpgN<rAl-fV:P:/t3*l&4")8$O?_O$K69DF^/S;-q`Rdi@h8%t"i%l!r$VSBst/dp2(420FU[]H@W[Vh$E"8:XH[C-IF%2]n)O\-.UrA\4-iToRZ,@!RBi6aX1W;k#7?jKU<!R3"qGnP/4coBtj$[K[FON&HURSgm&TFhVl)>AhcSu"r&e($"mo;(s%%?@Qag7A``0rkbs5)J?AGRhp%1s[ttE.u%UKDBH,<5,ef`cg)P:%>Pts*ad+lQ"u$]4^Uj]n:_&e%RC`]ZJ`_j?Kp:^j'+O:04(SLB/iV[pWUB0_ijp(j,W"+L\0%[W)f?5A?Lk4jM<ml[We5MPhO>d+AqT9='%l/LNQ21!ti!V;i*NAFEn@31950*+eJ"408#k]P3N7D6CXgCN6r$"TNQKP;'iFKpP)fm$EebPH/u7_Z.?tPgeA_0->KMBT[?G.'f*.k_M$d_>ZV&5K1ce2uPd8jU+Z7AlR>1>cj0N^%6'hF"1Xj/G:75P5L+LS\b/gq-;!M]4.i9UMLokXK\oEi9);B=7H"^,?AE]SAd;o7%^q`QAmWg)T6P+LcA3/,;SM*&OGcAd?gcQkK3\`k?@eBZR&8`c\:_HCG(&_Z70Oh[X.R1r;HLZo8%1Ukl(7R0A$]lX_J9F\rOpE#g\C(2[T?+a*M6*@nR%OCb-#&Y"AaRNs5Vd,lq4>K7L"cJ8LuG^f<tA<E&a=9/)<E@=G1\[4%=;hUQuo_piLS$LK_.C4ko6Wsr?0od]`HeaR3ZBQ3^kr&j"T"sREVB\K"sPs!6*b%lf!hQF^u"]/'H:7's4SRCqr\8IQO>elfW=i__G_@>upn-j[__69B*S$KCe^f0B.\D_!1Vt(.MW7(J:qc<rEMQhU+!,ju(!nJskBCPP-E`8Q@Yem-WUBQ7@!1of)7Y1r3XL",r=Afq=##\ZjL4@FV;?>ld!mQi\ej>,]Xq9-B@>SHf/6'O\,R92\+H52[$7Qdp9)9Ng\3YNneO5/=XjHtfQGt=bSl24I^ni<]YM#,(]L&QP&2'[0nft(Bb-fCCKB5RoCAV`0JO+j"B/pJ)C#V*=E#:&4XuUhBGfUV`L6H8-Yk$i%j2blbBMP".Kmpua/'[0a'=qR\#]V&RV'.l+26Ru>@UI0^ZWp&]$bB5"3s'A)(t+H4R%5sM=a%43[$W3Z4=G'3o.\*N*-G?C'&XDHk$$UbJEsY<f3Q1*2o2LgN^KOqDRDX8$ZSc,Q@i#`E/qb;]83_rBVu`gVWPFT:<qktR)[tLOr-.eNmU,TE0_UO7du)Afe($^FNlXbpFHWs._.RZRD07oNX+'gfdk]/gDY7'JhMbNOB#H<M\U"t)?"&teL'moS=BI'edG1G+XD'K`KF5g@'E[Q1mSLfZL+6oKR)2NW]^ZJ=Eoe>Fg"S,dr&+R\L@>"fc,,"3Le@T1qToKEgU@M6;T/tedBSA<d\9eDXnb0iC0[(9O(X&)iL_(l'hJXZFJVF"+/`\j4$A<Nisf2p6sFg>NrQZ89N3+Q=(Yi_64j=+m>I5gg8I<lYoc]^ro?Y)HRCRS)"HXg0Ju25QL0:W]QOf]b2od%X,$m(WRCCN#19QaOKtS!MhO<:b*T,O`;Hu(=@Hf)9dA^<"+>qiTReLVouPOQKD/,P#3n?fG`W+oG'($p+g6L8_6CK_2l@ROK9[(_@T*=)=,!KW+,*5pYrt(Yr>5F.-%@3DSQkk73WgpTPmfqF`=t2heO((^^kau69`FhYhg7qUHC)Q!cqM_'\nhU*5uj6\i-BYAf%Lg/`(2g!sNnO&N?s%9Hi2ja<e&O*)5VKl^fi4!Wa*$:Xfr8eOa/]2!S)?<(Jr!4WGj4B^lO1Bn[/Bd8L'aPe7%:DR=):OqS$fG@u5cbMrfFC1G;7fO,tU=d*CJPFt<N9p/hDQ&)c86R(1r4Eha(;I$W.`=[_:*gcM6;:A7o.XWE(eY8j`Nf4*b9%;RKSdEe;qJ"m@eDR=?6<;Q"NW9?)?3VT\TR4$Eel'BLZ-lE4I#"oL:@uGC=uR@HY_aEF@GH6$$N)Pe;fC]C!h.\ec.n0pV279NkRmJNJpA-p)qf7l\:qe&;)<<'SL*@bS]Z+TFK9g-a2;5e\,<Vi;Z..iFfdFS)2oZujVhSpS949cCt4?G7#<pa0VdB<`V*2U48D`G6H$NCi7O'\.EDn<>'tudE=J`_UO[7IAgMI$EBrO/Tu'B:QE!RgJc2:S#rr7K=K?kA-!mGL!ia*"5D/n[%$gYS0<O.FQAgROo!%N+rnG_!BK#B,\f<"1/W9QKTk'$UR*d=,j+4jQP))gMhZu\h0Z7QR1)bnTp!o<A,[B3[5@VMN4\R5uiWA6'_[u76O5&DmA53q7h@2>m67Pj5neGFTrp7O'`\@e2HTKY(6^5,Bemi?K\A=kE>Uc9s_K^fki"CZ"jE/DZ^2*\iCV<L/(dV%NCeOiS=t3]F7J;\9pP+d+kVJTCR].ue^AWPP0o29)"\rob!VXYkpu>D6\.H3p^FW,Vs$aLn29BKkNaZXb[XUef!iR9S=G5m.JspFa#H2>jP3m5o\JY"QpC>0E$0D^VZXi2ZgSg4pC/G?``$daH+AKBpl(*pTZS^8gh<e:fE:GT(>fAu~>endstream Gatn$?Z2Df'ZJu$.IL\,WLdu+mk*joC/VHN/_a4"a9@?D!LqahD>3:-TM;mDgIR$[5_<dsO2JNB"L'sYGKq[gpF3bG'-J";2%Ul*OC#h93r(KR:R-BZ_Do=p6rAWAQhYHhH]2o;]taa2,pA:X5Z'c[T7AO@m[[lA'1#e^#mqqk,q*U6#c=c]Xi?Ib0V-<j/!7^Q1DZ:@7W>2,]n(+=1oqBUR2&?26L9q"KCh7$DrCQ>=#f1mmPmZV&equT#FHb[J]$ds[>0@*S$X9qSAFTPCREDTWo3/S2P5DdX`e<Qm"T;^.U(]"0WVd=6rj61q%'\P68X]`Yi>m.fbY(kS)D!=oYp<6b3hk3C(6SoQ:kut!4k.[Y4"ON(3dKT:Apn%IB^Lth?"OpR2Eqo]s/D,+*c@=Z/]5\Wabhps6=#Za&;qBG8\\*<AQ4cOos4ofDPZDl8Pa(kBG/>*4hq4c*FI&jjZ+U_2[RPnn\;&F?1!'Jc=4n.-S:BU\\`8mWf!^+UlC+^FboV=C):o*$H.8@8Sel<k:=,_oJPFKX%7\QFB`LZ4N1?/S$Ra$oAhRS_UVA`F[opo8Ut"/fn#f:YRBd&s#KRZ)UIbLhojt8s+++;6<j#beRi,d9&67c3gIV$Fs^O+!OF@1P>UJZ31J"jJh&P1XS:OM*9b.+_.dLmY5AFYO*,D\6!ta0)ph?F4^eJmhUN20^JGs\lROrB9m>T8iJr>NRA"O=9+Ol^LS5"~>endstream
endobj endobj
10 0 obj 37 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1790 /Filter [ /ASCII85Decode /FlateDecode ] /Length 2911
>> >>
stream stream
Gatm<>Bed\&:Vs/R)cS5NFhpS53:40GIMpfVEF!0Ym""j$S0Drm'#</N/aN]_7PI)*&7"CUMiWM2\9rt7EfD-"5HX[nf%Vh_K6"#ZTX\)L(Dak^G!ZSVB=NP9*6!I+L6F\Hh\SL*FkE,$Uc*XBEZd(!F:B,J?Gs3/j1.;b\!\N^krhhZ;SIg-$#kB4C.Me/dfn#.-=<DhSAbF9],+H^>`oA7c<#H%O*!Hd-lZs4-<0a$9!kG-]GhNI5gkU%]n%IK]!$**CV4X$f@,bln)]3f6U%#m@.Q(3"L2If+3/s+>.e_;fJrs`=VK)Cj:/R@6K.f4[ug5'&<O!_t-j5jMsOjM&Tn\EARmqpHg:E1.Z[;Q<^R&3l,@ZJJ6Bb:-LD#ncI"m+?K1o9jMtm&uMMB"giE]j._U0pVYss@''lb-<m'+8iC/_K2bC5.(I#4:=0>#SeY^\QB8CP24U6M%X]cFG0jf6KS.o$rih.XI@Lap=')EGiSi5fJlaVO-'m7n(L7qKGk/!3N&6K45crt'1lQAbSX>/,aFru6rj7!;,)*uDX11Sl3n+Nj=sr]4),:T0Gj_j=M`>?[AqYq[TgW&A+`h5gi^rq`iJ'<-3P*c@_"[R24*!^7-a<LHq!l5piO-??o?Ak@UC=jSK@BkVg%sCTbj3O+%tf(Ac[_eAJG3^&J>:[\\"IF#R^f.b]JatdcBIS6:"H\^)g#[a_hN#FmKRIuf:CE5H7/4!^<l?ie/q6AcM&uG+)g>d#cc(;WiC,=*n<.;T)rr)@LdlB.G4SN<65No)8$=L!f=keBqe#dK<%S_WsYI"`L\kl]`VDL*4)dbYU'sNrq/Fk-!?f0$?GjRP\[L@9BBV8R<EBg/B5qlOd^fFk&0!>_4f\<o-BuI_]qt"4Qf.J_L]9h\V*sc92pR5V'H_.3kSt6(jqD:@d(?lIpSe=2k1gilf\o638sFbKH]-;:m;=6Rk3#LiTTV!,cqlN8/e5\:X0bQ(*"f_%O[Js:pO+Tf3QD!5jKQfp@U3m"b3WmEXh!Ia7&gJj1&,h]T@1\78fPq)-c'oMt.U*YBb)]`<]pbiZFaYKpaHUT"Gc]4AZgHl5`'=*%ci8Th<G!hX(*NX[RueHI"/J$T?&ZQjJVL)`9V!CF7F87kf[5l>#YmWiVe%q4Jt6c(pS-XV>I)FnWm.^1:BKja4%FfF4+o/JSqVq*_>`@H@j0[d$#['G!a@+:tl=(dc9([l8M5]aNk&i8Y\fVpqbCYnUY+5$5!p*-N"@X4P.A#?`\%$>D!b:FqhjUJ:D^==q-/E_j#._gVRfbmH0?I(ZM9r=RjX(_#F#HQ/d^>e7Ceg;5/V)l:A'-pF*3]gDagierGWnJp:,Icugn^2KG^IHhlffJ2?L7\^%b0YJ@[Q:0$o3b"JP&ZGGOL>@6$&u6^+U.DG+T6J>P3JcsXbDAE(-7mD1@87km6o)0oN`iCD%]NUDb0NM!LC"rOHBY5q_O4BLS>eB,f77.BG9%i.a;shSW'u&.RkomQnGq+;DiNql4FtWeiAn?-arSSdeet"+SaUYX_d&3e]ou].;VQ'G[Ac:[=-TjOX/WhqRPYY9Um"X4`>S5MSjMJ)oih>k7Cj`C!uPWi"KJWGL*VU'TXiG"$6"&,[3\pP'brr.+DaFWY!r@h6b:$85G@Af#5uuYJZUhVpi6Tc?6$I@o:BPVTs"AjQ;6lU[1;FY@=!/r?auN6^G5'WToSA?E7>e&X7Qf[C(:/CYNg%p9Y/bbdS5os[[Kn<2OW'!Vq,sBm9gSI%7rq%Z+#A:hR&2[nLpgIF2e~>endstream Gatm>97,F'%c-;L@$sc)=k)3j.W*XKkI-qgFa)Lm&oFu&X!HfVs8IV7,qFutP!*/aR`M92&AS;V?k]d7LR<SO%,gLe`ZGHt#Gs:"T&mf\1Yb_YIUA30:=$D$aL=;<UWE#^M21Q;A]qR),Ts>i>Kebi9[\f</K^i-$?74G12Qp+B=N=b'tX[jG(Pj9s#I8jq?s0MC#Rt=B;YgF("uum("fk/Z(fSl#<(5#mJ>]=%:7P%q#1+7K]mbBN`LW,_(j7lZYJNsiUU9:/+uI6bnGnk>Ui$bY%3T/\S.a=Aoh?]3-rVZbX`k&B#]01L@@RXq!f7XT(@o<>Ugf4kF4,KnANiYni>%r^_N)lE\o:&r9F_*SA'Jgoh`qRG8k(f;klscgVtR0\M%WON^^+e8C]%D].`aW&um?*<LNEF.UM2r><K+M,tiO/f%\f3?c'L*7kBOFoKX]qnCBo?K'.2'"I)m41hA+,<<sr??hLrSER&^B=,)Tg,%[MQB7c"cJN$.T(219GB?4ke,SSGI^$R$a5BqY#FpV\_c%.5*g/Hj6VGteIOjtiOYXO'JnP98&m2m*FMD#jg.a+bmooKplk=4'(0`<Te%':"E_NNB'oL8EA)/oa6c/Elc`2\@i,[@QUV(71*QD;i:#)_M!=(CW"GUTRS_9GZ*Ube=>qH25@G?a\"qn9$aYVWfdG__rSMhcnA6in+I-m\jLJDuB8eb6]H69m'/(eZ2%64="7O>OF8@.IFMOXB+_6n%`=)uauWn%Q-<a>0&/#Td08U7h&97=&(;*X#9IY1#m*f/jf!n(A-@%o=9!7;`\8j4e4fQo:>]3=Sn*>->qVejgt*lWEM\7).Y+`,uL$^$UQiN!lW]-pc.]2E+2/%F-ZB@+5oO!XFifK*W#`=7H1UbrZ>(`TG%uF:H>OA[G5Knfr0i(AbKs_D&3u'Q@49H_gnWe.Wq:B.;04,KKI_YhVfXLCmX^mn>j]CN=gW,Xa43Q:%/B7`7_0_<`g;;ZEi-6saMa9@d;uF.<Ki^XmBjM*'Sdls.3pAd^e=D)"`0=d(E""c[RH$MO?::TkeQ5%%j4?/'D'!=9(7#YfQ\a`jK3c\rjqYl[!H7:RTO'#sF3bK'SE]3]/r2A4^%k8U-!*+LL">N^2@dD4H(LsYN4Q?:)(BY2#q&U+3>\6jgi-uY3S-0YMs$H`E1j8tNc]V%U5f>st4Q8\:d0l+st<%NA*1hB!^]f>FQh`l@"H\X44\m2p>,A`+29YE1BW`<cQ;p7Ut""%9m][XS+!V3ihF!Y`Y5I#BI<p4#7`00Ef?U.I4@8lN;[%(Mub`oD-Q(lD9cWJG!Ol3Yd20p<_.:rftB[Ck"_H#Co*01s"i#R#fkprkr+,1+l9Nn*^L1@l&(PMLZ=L,:a"k$k=WeB?'\n<br9$OctXnn^cGZYD6b89RGT:a+M[S_f+98aESLg!="nN[pDo4n@eHYOcJ@AP;6H&Q;)JBJ6:.d*Sc8f1uG_lW\[MLu^+O=)m^0si@F:2QupoG,S"<J_1?Ah!Vp+*brYrdLO5k&<J*j!C2QgEpO7&t>\9gq1J+rhXMEYq0E:iL!7<M9"Wd8cR`K^FlV/#sForp@%I"?QdO<C1p)FWV6+?bgS,qh:M%,0ADtESK5>'6/p9p^o(cFGt;QKT:,p/*1[7\WYYs2l4DC,g4r^lj%O46lK.`5?$8B72S*44+4eWmp9?t<N%?=^pWnCQ05*9QUlXDU%q!WtYi(`R/:I&`6q#.35%e!i%cM,sJE,up+Bl6D;5:rq^X-!>Vk+S>iB;ocSfLsB/*S<?s"iij$L:BA'i>$u6gQ=(-AfsW*noh`/'%<DI!X[gW8^RHNX8JH1R<+K]J.YWe[kH=XL)a&-cR5)W"=[Gg.&,n\WiKh<u3_S</WFmf+:0H(d0+[=@(!e\qQJCQa!;Ch+l*dE;%[-#gTkO=T[`4UICo0KKiGi6[bbW:.P.GD#DpZ_tkRq`N4-XrGQgm;[Z;QB*'NIRH:963?SEqcOhOloFi5]R[!NN!BD+,2mK&^kkpTQ1uP!0Ws5H,NtV/9Jl%>un3HU+M'm%HJhp3BLmdB'.jTI,P&Zl)'@2m%WK1**jD<1laq5J)$F6W&&?k0])X^L<Apo`a!9W2'NPUUJaF1FQc3Egjl.oIJ^X65e9%#^H'kAW8B*L\DAV4d0`)r4=51<$8^cfBfgc_,=pVrKY:!Rn22Qf*ImPVRb;+N]&Y:hn_l=11qCq.4n'YE86&o,g09T9MJ$e-'$+8b9]S.0P7$RgS!deST?o'R?4njF25pM]I`iR85&a@(kjE1].`6dA09d;>\:&bZ2C=3.QeF\KgZp,TGXm"nAlgd8@;8"DGU8$=1GT:H+^70usHYV4Cr!Z4/1a\d*ubh+f!lW#]3kjL$*7m@d*mP[FH=t8!<3&?2E"#R;$9G5"c7d,uNA3c.b-G=*EQ6V#Rf0=TL\V!K2*]f%Fl?GAHedaq>;uQ5XgX#S\CCQU"OUCIR%h6e;?M"BD'Nk3,SkQ^#&9i@Sg!1n)HY'\uD\VL17'l;&;rcj"qkNBMq5mSMT0F2:RZ@h92LRYLj4eqsFS;)?Vhl`&>VQ)'G8(I)_=7&k^+L6bJQgCTaorQE&M^Fb$^O.g5!7MKZ%:&;mgPgR"X@IeE6iJ(='Z)@+_r]SBOlPf5`OD@EY.d>#AI9U4(Bdgl8;+Jp['#tFcO;,g0)4hAc_40B*"W")Pjd(Fq<$TjkYQrp%$s*)R4F/Y]#CWM>j8gHJK\KbY5gnCM^Pcc,iu_]o-!VaDoHIa.'o"W+%nZY.r[UQ^"D:`k?r9J;jIWOI4&rQ;Q]]:P,WRT=tQ.N!#P0H9HbXncW+^$6-K`?h*]DjmS:[r+cq`K)[Q+DLX$#,(%\4[dGE!)%u:./REhT-#]p@I--)sQ`KhL<A1=)>l5[cBqs)~>endstream
endobj
38 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 860
>>
stream
GatUqh/;4+&;BTM'QZjT,2b]lh)jiXY#Mg9bp<uXZ'0F%`*(iGo(G.gJ6%JDdoMc"(ruVfc8cAc4q?R9irWU,61:6BnKCMT%)!fP[r<(Qr&l4XQ,CBVNJ%3A_XZ7d#3S@$%faNRaaPo#$QppLo^2CTgMq$gm(8rhkkH2mCQUD4L$0%"n='TPVh\J)\5=I$YS)>cHa,,]U9W,#Q.rE%O9h\Bk@UJ2QLP!r1!Xb)otSX0nDJLfjh0NJ3Fn+bD.E[R?Sc(hB1kf24&-*=<05[1dF*!ZJCZ%L=u%eE`$pM=;EQi`f=F[BU[V"<GH=:bgOnibljQ%E0EsIn-FBS1;o9?k1>dUQJ-h,7QW#kra6DXd$<gH(9L5<i1`$R%1KY$KakBYIcFaFhJQ0b!akEs0K(hr+LaDcn7L@uNIOiBD#ASoC60BHS0^ht5<`3us5AbDO:Yo44PFWp>>k1:IHuDh.@Z*S'#5_u&lPp;U%4IWcd'9Z'+mJi:OH#j([V:gdmi/7;H9k=]a>d13af08pm@5+\kZhgi_&$;+.cuM84bL@[[PO`F1L6[V1`DeF9Og)-I$`K;g==[@J%arrh(;K>FQjZX?Dh)O$;nMa%P!ofh3:K504^`$NpKYHfKhH0httgrr*.!P==_T0k.Q9L<:O5?V9!LI)IS==.kI?+7/Y7<jJ%%1[!m5g$/4nHl^\JI\?DEJoDMrK]>"=nGepjar[cGNI.*s2.,7VDN33a@B8`MhrWc?[/*u*Wk9RtgA9b-i<'<%J0%&OC=I_&_#L8!r9:Ojo$J#(-!m11t=8tn`TBJ>3K:"D3le]nHjEbi*=fh6^,+R)><7*1"$,*:U8fFmBaT3BOqu]DT!Ik~>endstream
endobj endobj
xref xref
0 11 0 39
0000000000 65535 f 0000000000 65535 f
0000000061 00000 n 0000000061 00000 n
0000000102 00000 n 0000000135 00000 n
0000000209 00000 n 0000000242 00000 n
0000000321 00000 n 0000000354 00000 n
0000000524 00000 n 0000000501 00000 n
0000000728 00000 n 0000000648 00000 n
0000000796 00000 n 0000000795 00000 n
0000001102 00000 n 0000000942 00000 n
0000001167 00000 n 0000001088 00000 n
0000004034 00000 n 0000001236 00000 n
0000001385 00000 n
0000001533 00000 n
0000001681 00000 n
0000001829 00000 n
0000001978 00000 n
0000002094 00000 n
0000002386 00000 n
0000002464 00000 n
0000002670 00000 n
0000002776 00000 n
0000002982 00000 n
0000003069 00000 n
0000003387 00000 n
0000003462 00000 n
0000003567 00000 n
0000003679 00000 n
0000003791 00000 n
0000003961 00000 n
0000004054 00000 n
0000004166 00000 n
0000004269 00000 n
0000004389 00000 n
0000004521 00000 n
0000004649 00000 n
0000004745 00000 n
0000004820 00000 n
0000005648 00000 n
0000008651 00000 n
trailer trailer
<< <<
/ID /ID
[<a4799bc865b1d3f8e1198486b0b00e10><a4799bc865b1d3f8e1198486b0b00e10>] [<b885b64a468bda1dd9ec9c5a881415e5><b885b64a468bda1dd9ec9c5a881415e5>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 7 0 R /Info 22 0 R
/Root 6 0 R /Root 21 0 R
/Size 11 /Size 39
>> >>
startxref startxref
5916 9602
%%EOF %%EOF

331
docs/INFRA.pdf Normal file
View File

@@ -0,0 +1,331 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 18 0 R /F4 20 0 R /F5 21 0 R /F6 22 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 716.2874 87.48504 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 705.2874 191.101 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 694.2874 98.58904 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 683.2874 111.925 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 672.2874 165.293 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 59.68504 661.8499 153.06 671.8499 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 59.68504 651.8499 131.37 661.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 59.68504 641.8499 165.9825 651.8499 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 631.2874 172.845 642.2874 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 620.2874 161.725 631.2874 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 609.2874 75.02904 620.2874 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 25 0 R /Fit ] /Rect [ 45.68504 598.2874 166.181 609.2874 ] /Subtype /Link /Type /Annot
>>
endobj
16 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 25 0 R /Fit ] /Rect [ 45.68504 587.2874 117.277 598.2874 ] /Subtype /Link /Type /Annot
>>
endobj
17 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 25 0 R /Fit ] /Rect [ 45.68504 576.2874 135.949 587.2874 ] /Subtype /Link /Type /Annot
>>
endobj
18 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
19 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R 15 0 R 16 0 R 17 0 R ] /Contents 44 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 43 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
20 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
21 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
22 0 obj
<<
/BaseFont /Symbol /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
23 0 obj
<<
/Contents 45 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 43 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
24 0 obj
<<
/Contents 46 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 43 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
25 0 obj
<<
/Contents 47 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 43 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
26 0 obj
<<
/Outlines 28 0 R /PageMode /UseNone /Pages 43 0 R /Type /Catalog
>>
endobj
27 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 production infrastructure) /Trapped /False
>>
endobj
28 0 obj
<<
/Count 15 /First 29 0 R /Last 42 0 R /Type /Outlines
>>
endobj
29 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 30 0 R /Parent 28 0 R /Title (1. Topology)
>>
endobj
30 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 31 0 R /Parent 28 0 R /Prev 29 0 R /Title (2. Port 8089 \204 not the androidcast vhost)
>>
endobj
31 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 32 0 R /Parent 28 0 R /Prev 30 0 R /Title (3. Public URLs)
>>
endobj
32 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 33 0 R /Parent 28 0 R /Prev 31 0 R /Title (4. Disk layout \(BE\))
>>
endobj
33 0 obj
<<
/Count 3 /Dest [ 24 0 R /Fit ] /First 34 0 R /Last 36 0 R /Next 37 0 R /Parent 28 0 R
/Prev 32 0 R /Title (5. Nginx \204 source of truth in repo)
>>
endobj
34 0 obj
<<
/Dest [ 24 0 R /Fit ] /Next 35 0 R /Parent 33 0 R /Title (BE apps.conf today \(typical\))
>>
endobj
35 0 obj
<<
/Dest [ 24 0 R /Fit ] /Next 36 0 R /Parent 33 0 R /Prev 34 0 R /Title (Hub location \(correct\))
>>
endobj
36 0 obj
<<
/Dest [ 24 0 R /Fit ] /Parent 33 0 R /Prev 35 0 R /Title (Reload \(BE only for hub deploy\))
>>
endobj
37 0 obj
<<
/Dest [ 24 0 R /Fit ] /Next 38 0 R /Parent 28 0 R /Prev 33 0 R /Title (6. Local sshfs workspace \(not in git\))
>>
endobj
38 0 obj
<<
/Dest [ 24 0 R /Fit ] /Next 39 0 R /Parent 28 0 R /Prev 37 0 R /Title (7. FE nginx \204 two server names)
>>
endobj
39 0 obj
<<
/Dest [ 24 0 R /Fit ] /Next 40 0 R /Parent 28 0 R /Prev 38 0 R /Title (8. Verify)
>>
endobj
40 0 obj
<<
/Dest [ 25 0 R /Fit ] /Next 41 0 R /Parent 28 0 R /Prev 39 0 R /Title (9. Backend app \(crashes / tickets\))
>>
endobj
41 0 obj
<<
/Dest [ 25 0 R /Fit ] /Next 42 0 R /Parent 28 0 R /Prev 40 0 R /Title (10. Rules for agents)
>>
endobj
42 0 obj
<<
/Dest [ 25 0 R /Fit ] /Parent 28 0 R /Prev 41 0 R /Title (11. Changelog \(infra doc\))
>>
endobj
43 0 obj
<<
/Count 4 /Kids [ 19 0 R 23 0 R 24 0 R 25 0 R ] /Type /Pages
>>
endobj
44 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 874
>>
stream
Gatn%9lldX&;KZQ'mk$`Xb$QCd9E-ne'<2!WCqU/702(<@u3f%WW.A_E8oH4[Ru9_Cl]mY5-3UB]+dB?B`FXl!G33S/gsO<Z450BKTIcoSkXZ-k](1T8<be]KK,!K(Si52LXX17r."r9Ji*&X"A$c71o-eR'7;-T$55e8`t1F2eqNVl/cbPG6;oPQq5f,2Pq9;B$Fo6<_V4`oBXB8Cgf@$6,rZa_2?%I#\:Ep-A8gD^T8u7scZhTC*Ds[KeBF\%7,e(<S2qd/i25<<?tR&h?jY<:':;dZWn$es&230a@>:CDBknb=s+/-ui[8`,p&'Dl4tUa"2YEZim@Vfic1kQr5]%WFdL,4ALgkUSr89;F8Y7lo8#HKqA$-g2ikCEef-bNq])dbTUr+NNA\jZ6p`R)Ze(];MN;YtBPknm0"j#6NeQ!)d=%e=NLm$@\iRuR$JXagKT]QL0U=Z9Kq>.sZ+SNf!?j&Z1/,=8=&>NF"pW>mVgCha@=u=BQ.!dlc%Di(hf7XUYm]gAFi([\e)?a2B_9ph4HYBFLf1m2mj77S2n"<]Amn]DF1fmk=gcCRNj-$K3Xa&5d"dH)!YYc<2`%+5SX+M(KT8k4iLqjYP;M-^c`k[5T44A/5d!FE6)tgP>gsSTSZ']!PVa&7dWpPE?,P8[r+Sf?R=PShTU.GW<'=umWS@'o-`ep2tR.5POAC:4O;_/^O;AcnH>N*(L/t9]j2HnMu#cu_u#s,cjX]s=cnT\%EbMIB`jVIg$`J!l3$kt188jnmT<%.]\Hb``Mk]+Ehg7$s$XngD;_scREVo@qYm#0og/;?otY2jKi>%b(oRg%SKi^%71`KXR\D:<Vj3+mr2kY3]$;JAMDh@h6N!:sT81&~>endstream
endobj
45 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3271
>>
stream
Gb!l"=`<%c&q9SY-t'<1B#`e(;:I_]YoP4P9Jj1iJcuQ"'\/A6:i%aU3VLYqp8r3R+t4R-BbDu$<c!WXAl[I5oi3lEJq>Y@s)kdNQZJ7,<)>H>Y<Xrj"6OfH4[8i<R@;AW9PHUD'a(PZ6o&o>_#&'fDc@*JRUj9_$`_)#muX7J'1PgWY@nB?Hf?S"fm#6Q]I6O(K)$5.QqnZPZV!ak%_+>da@cRHM+M^t$aQK=!I*Q,CG/clqtkCD9+q*n'ga;$`90B1q"+J;Q8m.bcYW9(i+k!^GTnTJC;SW38chQ+7+4jN,i'Llec[8Ae8.LkeXcqhS'<4f,u)q0n4(rJ7BlV+8[;DU"`J.C,&qW-eDIU%`b$l0;`fT6DYMSuOl:D%?5Ho858mYZIC'+>d:&cFlHW\/juCS%$3E,tIrn-8<`<bE-B4;\0k<Le85Q'c^6puk]+eaJJ=TkU\"mmmhd9_qICtlSbC5"_%Yo`)4J]&n8>2Vu>7r2Vim@b=?qF[^Yd2]]HIOeLo][r8(kL`EYhjXu'">#5#LaNif6J:a53\D2Lj2@HEuIrKY$]L`6fS<%4er[:MrW%hhjcRH&(/\kPR2tg+C"ErCdTHt4(7okfe)9cle1*lIgHuJkLOB=[;O(?h#_sO=L&s-#6$,8N\7LYZ_`f;deDaS"R,S;)aF>O+h9Kk>&lQBiltCiR)2E?0-'^:$'mq@H8tNLmHbfV3g&T1?(OFC+\QE`e-jAr7^JJl[iZ9Sn(uB_DXK]:(6U$-+`>lSa9gW25lk_t$o#TLXEY3UKr#Rt2o-KDh0MX$$*E*pFjLAf/pe\:L\^hV^Ko/-T'eh:D(fL1`Z6&@\M`8i$#qY@rG^e)-MPWNDdX#*5N)!s1MNRdL8dN<rVkUjU5a):ZJP#u'OLV)^^$+ppIaO_AO!@TUR;O&qU,@MjTCmp9*9F(%q#l#%H(5MJ9e^_J62OH?Bk`a?Ts!3[krV:l%#YaW@?JoMi2E!J(3gcJ@Mk$8t)UIACE;"P75-7I)7jW7`U1eA<!]D$G'd6]%T?a</V'jJ5]J1>+1bT7!;jr3E:YnA[M;Q_8fOLI/Z-a(tRJ'8OA_!-ZWBq>=CuMWI*YlfuFiFYit$6&\1@38O/$BMr/UD,J]p&N6UVs5nVr7YIj6pg?pts0(pMbYAkmAp#\;h)=K6o;[U!`I>!?IJLV4D5MIc;c^hp"8]#^%Z]#nt/*5k]U?E0GQhUFG!RU%70Ap'eH!6g_7"-I[9H];XbNm9o:UB*F"?YPT>_K$%M.<\rVV`eA(!-iHaH7Yo9PD?Y4j@rfko:d89<rS]IKD]U;eR]M0od+@s1p+obbF18&&!Jn"pl'gQDBNe'lhZGNtUlJ;ijT1b5AT)Q1dgRVW#BUJ%kusS\;S%I=tna]g,7/$M\&!6\ZnbJET%ghU4gmou)tEM>o3bVg/j"://8j_)+53&(5:Nb:j@")"6j'r4hnEL)7,h[%i(Mc*='HML>W`>M<)eTT)qRZ.O$,^XM8:j;%,q#Sk8mIQ,mWg)45lVNBc05,tFJIdIU-Hf8nj0"`?Z]Dtm`C?<#%1<*nA+#S+EXjtkg@:,^@MAhb#i3B,'7H^!=3mXc8Oe!km]#ktuHGAm/i/\4pB$D=b]k?,S]g/sR_4+P_2D]EFg(1.GqSR1i_Sa9.^W(Wt!(L8RglnY)VU\*RjDrMBRq>V]m504@s,j-;hJek?Xm=0mp8be:?eq2?q`ZL\25o0hSX0>94@C_%Yol<e-kfs7#m/i94E?/gSet!0nGJu?cg&DjPTnfbD[j,JKoU#&[!!ZTgE=JJju19kD/-#HSf3eETsuM:TI]&%qeWdPaG*oG*ep@30XA^#%0o8@U402QO"46p5-Q-&8MHo:Jt(H3:()T&-BN%7)3Lfn@=Q$Y[o"6,bNM0?]:t7*rR`]]mN(:;gfg&tGlh=o(4KUm1NKg+YVD0+g%6,4'$u7oHccJm;ePtb5P"Dt35K.KID>fL:=i*Ip)mR4ksr0_BaS$9%,%(D2c](5$rZJdRj%AKJO>a>F<='Gm()e;HN9QU&*;GpPR9GCV?=([hV(`ChDtZH4P0,hq<B*TQj^6`I)Ps[(W]7dD]8g##VgMm*aP+_8^WWudmlnU0;7jFhEb>8*o`Pm(afo8[bXG4K51P+d#U</W+bkn*93JH\fOA?PpItfZ&%9MVPT`Wqd*-*@"(@b%RaJnrE-hE03,_'1oaD)RXkmu:/NaO,Y<#gjgt,rbqRq\Z].fBpdG%apChGe;-gB8X1DZc0P/5ce]7tCfGtg'VC)*HRrkTi1fMp1QIA>k=J`.G[S/$.@B9h2YS8f#;p9$s0I8KA%a#X.g1-KWGgajsc<i>%X]S!C'ZmZ*G-%BI'%aDqI9BmYBDKjc%G!'e6["J%"m?m;g!XL7h?m1BM-5-hbhd(,G7]IlbT3P^cpZ9=<=9nFZlGmkHHpM3ds5E/%]3KKmq'R/rY=?5E-ZHB@0gcB'd4Ja:aAKq5`+1t;.;GWF[sMab-[MiC@mf]r,=UU`teO"V0l\QlI?Fbm9*MuW)nE,TTEqO(hqN(*Q&TqC/peH7U-sKa:&N7o6Bg8>CGtF`+^2[*laT.)64=Wj+4S#?1F,\g$Lu$lc"O.V2$[7B4Ll(\6d[e)WMI.*nWX?`kLi]]E`U=A+^17]s3p[6W__tl1SS/CG6/^SbJn0iFLioD+Fca`K(5h6KLM09le/V,#k4k[n\!s1N"hK73>%-:cru%Ma%IpD3AbL$L#ERHKPBZBrml$QOJ6W#FPXN&ur"t%o?i6qCh[);gHc>C8l3)k_l"p0*UDO>/u3,(UN"LF!-U$X?YF_:?]g3d&5/e$9+YDJN!:3`@Jg*pWW%S.h%Vl!Z&$q-DEuE(C0#b$N-IY@Xu+Yf*o_nA6K$6E29X:qNIB!M:AjXZm'YC0I0"A[FX-7@W&W\$%nB:*EbJl.rV3gcM!p1hh&gUlX9OZGj3$ZE?]RR_N(j8\&Tac]O2aQ?Xar'C#hA<YH5jTgpu+u_sA763HcW#`(^>LKb_Uk:pHUT'gOj\Y"FSRZm0DAB&dKMMkV6Z(_U)!nQ54N=1V'"'=8eWIDKo48EQN(5YV3G/0LZDiS*j/"E;"bPQbl8VsheQX27V\Fs?b:[r4#hQp1*]H'@_&314',-fj8aJk:5b4iji&4TB>:N"/(cS$?^cGP&fm@,f])8P"ns>D!H_=JMn<N9/M;O^'q(Mqm[OIh2#]80UASIaW>$4na<L2jp'$,+$4qk*+@@Tepa'?Sj-jgAH^'1T4TCO\:l<SGa8D@;lJ~>endstream
endobj
46 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3237
>>
stream
Gb!#^>Ar99&q9SY(`9q7mEpg74.W;3^ogle#Hm+\8Us*j.u=R$Z:i?G&ELTufqh70.T19hZpnP(]A/hQG'<#;),X6"LWY+[28Hg/R,(T3.Qf84l9pD_pMg(Mnb34CcSTL5B[d%*eF=&>a4KCNpu0DS#Ua<jk_;H(WgYW<)K5n=T.Yq0.[I2(oCr51<NWoe&,AkUP_rE5MHNh1[AB,ml<]\>)mnB@^9PZ]oR$[0]K[QmbhU;&ESu1]RQVu[rkuHc(.:?5+ffE"^4D&8nF2VQo`tI9`2T1t9Z9+bD$uO_8r87&0OZX&3XJqMF-G[)[<ZME.sF")q8A2T*Q/rGh)Yt=cgs*/)PJY$p.spm!$2:FZVi`C]BSUCZR"ZNj0L,bqog76Q>E-b9I><L)o`-E%\F*1.Wor^#Cc#Veh"soa)M:k"@+HTdLLiCj8Y`(Lojjl6)",OrmqNe^fFX+!peW$6hlHZPh%0F0-A>FV>e#'IZ-(okG-F*#4O&`:fSm`6EF6Pm,.]8!M"$=dl%n&-Bf(cU6^>5H\+P?\t@?V5MS!q9,7!/dg3WH=p.K]XHM#om+gaschfXJ:N";r'/s,QkH-[W##>ZSA@sJK?1jZ'6"+%JGLU7:>-<-"^Y$Ckgm67/g2@g&nX;ldm0K;@;2kP2Fa$eBa&82K<A4j`s'#]T$d;W$Ji)>'O$UF/N,Q!:";-H:e>m!9:CZ&>a<ukIC5)p\P>2aHAZ1Vq3`o#I/e;0-_Gm47%X#Pp>>EdC[=o(UN-/nZTmL)#`j%\K!2(A>!*%?8p_pR*CMn`cNUUAS07:7f8Xq]j*ZrVmUMdEeR1K,]8=1gACQqT5LolaBG=uS_'^g,]$:bs>GA>UUgp88J4k:$Yn#i.O->!+CEVKTDOCg$F>BpSnT\sT9.Z.GbJJ3JbU&t>eZjB)!88pDUD[EA,c8["O!pVCnd5:4k1hdWJG='Y5Nkuf!KsCA47?6;\BoHB<$TC9@+cZ]6\urkji&3;*b!$l2h<T=$p*d]&NdC+p5e(3#Tbpo\0/"S75e&(R'I3u(@@+QN.ZuaB_M3s;;#k0.[@aLS=U-AT]SYo'bEApZbiP7j>hM`=`?h$Gl\7XmIldulL4O8UV*kH7H0X].i_c%k'XOqcFO(_]ZO"HVBr,L*e!L@g&<51tf>?F@kO[@Z5!KO7kHtG%`3rItp!"fliNEcrfAfk9<CHThR1t\aZnuF)LPajZ[^qQ.#h:)G/;B5j<(?AV(r5':)8N.9<fE0R.RZA@M@9*'BsD+,?`'UkdPq>SF"sBI&*uG2[YmuDL_"7g[2"tLMmNGrHt`Xbm(5?dlti!kSf8`Ujb%Tb9k]l68-2tjI8@6]g<HU.2>&JPAWrb0-lF\V@&\H9`7@MgCJCGBTX&)?j+5gH17sJ(iOd*&o/?o`C"M!`c#_HkRbER^&d=/;DCB6uX\G#`+c(J-[2"e;9;I8-$@"75^jIm=F<pjV(@bST7?C6mYS6giRYDc%k5%13G#@C2)GoTJo8+Q.b[BB&iSj2L=qeK-q3s,9;6=^\l:ChVgUZRWn9sM+[d[''Z*ANS1U!,ck(IFUe]:74.,ur=DN_tDXEE&O8s.4S<h"6KLQ&*=-N^q)kKGrHY_omJrs,8X")5u(5%EMMZp$I)*QB[GKb;VT!n9f+CUc@P0s3dNSN]7qI#<ENXGK_j9JLJAm,i;CJX^gl2I`Db;A[b(>)&E7@Ic6!mFR?8p&"`K1UM_@Rir0LF1L$A?&_2l^s"O"B.td>m]?`0Q]g,(r[2mjZY,WN[bL1C]H=<91n1U&5PAV"0'us1D/C_)Vh7@EmP+LFL-d6l#140#p-pW>UZI/mNUWNnZ0S1\iMDWj0<U_Q00\N)nSXRKW_+^illjcJ1J6+2_O^lBS)R`P1#;UZ8EpB-%"@sPj9OJ0$;)9\7Eif^gr,8+85bD>Rca5e8I_CTNnQQ\ZaFhjM1m"7^jBKTkk/#8'XfarS0jWY,4sjrTo37^UFs;ng;N:-@JKD#qa#s.18Y_1'edP9(p>)e0g+r<N',r(Z'X_43lV/g@MHe/:KF0XQTSJ"9aBI'V2Is27a6ha"/RJ7*NW4S:=k`(G(DYY!IJBD8KUmCY*FE!#eWZ<X!]QJcdm)ZIQ:!-:X,_h@GG*P+s5%gGfDKlc^mU*r("l/j\<K^+b8'1auDIImb>dolc7d&<V@SW@=M=UpW'=b@q=3bonsM6W/;,gcQ_fTPPK*EDoY3b+oPC(r/;H$[Ui6rEV?t[f;Nge%!>gX>L)P0FXtXK[<,G2UpKhqD:t<>AZ^;N]h,7oF^f$p!Hh17o\?jG'+Z-<b@n/i%`]&sg*D[+<aZqe*qL0!bDH!Hnn*/`(:79K)&*m=0JIH#^#Zs_*i1*;[\ckf*O@tPX/8fj3&*0mUi[]hhUsfAI76/:f44YEWhC*4>Pdh,8B3@k>KQ<5lR]VpBjQk#'Gh,?qnXgM0X[F.Z3)9&)Xb9UePN6mf6$B"a&hlnNdZANO5`QS+emI12M-%jnqZR@7.#HIlEqI8aY8a^ZhNDA(@lGMZdUP!OPbf,NXP!F`O_<k]._2bRoAMua/aB[iTU+%Sb2\J:&c:dhk0G0&*6p&iIe(6Pg24SM^_$"<H(8@!]?Jt7%r+"T<rHO-S>(flWP2'CH[M26W<`:bpm1^M'$X\iTZDgjU8sg",,E$^Lc:=O;4>2Ti!kbW?Qs.A'MnR0M%V"2g\38/Z"S:=fE@KXFH5=lpAS(cE^5HD"=/L?#OpfqlI:4W1!%30Xr8rphb.hg0S85`rte?e`C*X>k(3cr*)_%k`*E?0-&</X]jc()Z9G0cCM)thh%jZA(6mMTacG+M'CW<<\>.=+3Fc!)0@m?l$@g6@^pfi#/2WW/Mn*jTtSs=RO3%J'8FT!g*CmW#j)=T>I^.V]5#m'K9mpeDRYaSgGFh=V\t'cY2!^4"G`6G]^6%RUK^,J8^U2N>SLLm(:&n8QH.CY.C!K^G%l>S2T^7&UVi(d<e7aI[Dl%i$Ds2t3-p'T6d`"M'2IW[2M&U[%i2cc20(9jkEODk@J/,&]aYK\RXTp($o=M=cQ^ccSSmEWq_,gU5'jK[^<Yoh,tr79neSR)X86,9K_`8Y2SM<-,3`ZMQc0SXR=C,qqqun:G&8NN;lOLm$qXf?fVI^P9rn:5IKh*%1#_c)lUrFjFcCaG.db7AjNus;VJ5GCjr'`=JicO?&M.<+DZJ)nSJ1-:DMTBT[dPZ&n'-l--L*M:*L6'il#?0B8K\_4~>endstream
endobj
47 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1515
>>
stream
GatU3>BALZ&:WeDlm#)ZZ%Ocl9HQkug9dYI$D"mbP>R8=27DU;,+!e/<ot#=TQP:0gW8*6^>8b]!WaBMV#3tCJF3u;B*8Koi<2^0"Yf;\l*,><,>6-$oV-Nm#8"q\kI3JQlJXWNP4_t2^b>j_X`F#lQKq,Ql[tWm^#MDF-$MHn""O]qeJ#poN,**Y&bt/FdD5hls1n-N?@Im;>lZ)6Kt@=-HJGb:Li7e?V+p@/(e,d2iTf_DZorF4B3,llF81t8,3L=m_3A?@0&X@[d6,>4XF?`%@jT)R@G9Kf;(j5]2q5MJa@!PnFk)U]LoFiQ+D(kOn$d2#:A"1,l@8u6<sj'Fki-l,h$57&EFm)lI[u+'cPd5(9fZ`NCQVCI?oDhBbnVKTc_Z2!Y<P(H@X16<Dp02JHOR/6c&[o#^RknQLC<-t(@e?;,gqEIfj#JX"jc/-G6ta++r,;4*IPQu%Dtutroq3u+4VauM2ss`TQhW\=\\k.<g-Q!UX/N\8(]kdGC5Z#a"HXd<e*r0.#`&$;W3A,`JiW;C26kCfEuZ4d?q!,j33lW+#fZ+<UENYV^G9?WEhA?l!>e6LF8t08c-8l9k#dLK@lX+;ZOSa!cKV5kV2cl:U+M>r.%LeDCQcd@cGek(]KnP`,el?qtXWh+-acA-pGK.E5Z>5?0Uc+,Vt1[6=)\"9SGAqd^JW09GEt.B^b-bj9+7ZFp^b5THf\<G@3Jp>'!u#Q;Q`3F8s"g6+=MsK-M9NC`u5b@"Up&S):@s"Cmj5@)b@ofG_&,2TFFoKZ;6bL8AT!"%3+eiGNKMfTVD8=%Orq>>6:Vb\[_qUame_0n8b+-JMOs),(1!gk(q3EoU2?G)'X20p1/sXAa3`[`d!L6)=o&[6!aeF\pI!M9I_`>UrNL1gN\TB+o%ikPBf]J*<_Ll6q#[%0!#$GIh/g00Q(=T&[:dZlu=8.P[N<hG8ssD/S!dGD>bIb)iJFPk1fT'?AbV&sGL4MTZLH9fOqM`LDXck&MIoegoeG,8s%T7Ftb*EJ<Lf)uVBsU\^>KiQYO*nolr,P4ncU(jYVoL,rhjfX3I1O$$,k"`u49/_i'6;Rpns<'5+Y=F)=EN`[%BNP`[=n5CGKm51#!9JJENDl'O).h[0qfI)"b?.a%s"l@tsYjHfj>6Lf,3aC`Js)$`mbD7.GEP*P?KL)h^Xlm0-.r9dgl9p*V"qSc$:-e<7>)m@"&Fj4U&/mh:V\5MW-AQiAI4[l!jbjBs*0Kg<"'s9-d&hd-/YL8nBP!`%!UGR7!M,C538O,<B$qIf,!UD"\Nf0+\XUa-+oBM,Ur%7bo/c0cW8WL@8h([aQR&,%B#Ll%dZ_f.%KnbVG#'&4a$P>Of)D9jORb@GS1H">O78.jEt)10`/Y:EgVWK!SKNh\n?ALa2WU)oHrj,\WA$E8qhC_-26Ta7+=,nErqo[3KR[5=0RMapY#6+$)ueu@s4(WZ7;bJ%pG#4kN=B,E2CS9Pdd^@V]iaQ*mn<I1Yi/asn%&_2rrAb4Z1J~>endstream
endobj
xref
0 48
0000000000 65535 f
0000000061 00000 n
0000000146 00000 n
0000000253 00000 n
0000000365 00000 n
0000000513 00000 n
0000000660 00000 n
0000000808 00000 n
0000000955 00000 n
0000001102 00000 n
0000001248 00000 n
0000001395 00000 n
0000001544 00000 n
0000001692 00000 n
0000001840 00000 n
0000001989 00000 n
0000002137 00000 n
0000002285 00000 n
0000002433 00000 n
0000002549 00000 n
0000002862 00000 n
0000002968 00000 n
0000003052 00000 n
0000003130 00000 n
0000003336 00000 n
0000003542 00000 n
0000003748 00000 n
0000003835 00000 n
0000004153 00000 n
0000004228 00000 n
0000004321 00000 n
0000004459 00000 n
0000004568 00000 n
0000004684 00000 n
0000004855 00000 n
0000004967 00000 n
0000005086 00000 n
0000005201 00000 n
0000005335 00000 n
0000005463 00000 n
0000005567 00000 n
0000005698 00000 n
0000005813 00000 n
0000005922 00000 n
0000006004 00000 n
0000006969 00000 n
0000010332 00000 n
0000013661 00000 n
trailer
<<
/ID
[<12469c2730c47a48460adf663f7f8cb3><12469c2730c47a48460adf663f7f8cb3>]
% ReportLab generated PDF document -- digest (opensource)
/Info 27 0 R
/Root 26 0 R
/Size 48
>>
startxref
15268
%%EOF

244
docs/OPEN_API.pdf Normal file
View File

@@ -0,0 +1,244 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 13 0 R /F4 15 0 R /F5 16 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 716.2874 79.46904 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 705.2874 139.949 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 694.2874 180.413 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 683.2874 140.389 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 672.2874 181.269 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 661.2874 74.58104 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 650.2874 73.25304 661.2874 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 639.2874 149.717 650.2874 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 628.2874 121.269 639.2874 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
15 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
16 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
17 0 obj
<<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
18 0 obj
<<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Outlines 21 0 R /PageMode /UseNone /Pages 31 0 R /Type /Catalog
>>
endobj
20 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Crash console \204 open ingest API \(design\)) /Trapped /False
>>
endobj
21 0 obj
<<
/Count 9 /First 22 0 R /Last 30 0 R /Type /Outlines
>>
endobj
22 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 23 0 R /Parent 21 0 R /Title (Problems)
>>
endobj
23 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 24 0 R /Parent 21 0 R /Prev 22 0 R /Title (Payload extension \(ingest\))
>>
endobj
24 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 25 0 R /Parent 21 0 R /Prev 23 0 R /Title (Upload API \(POST \203/api/upload.php\))
>>
endobj
25 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 26 0 R /Parent 21 0 R /Prev 24 0 R /Title (Console / query API \(read\))
>>
endobj
26 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 27 0 R /Parent 21 0 R /Prev 25 0 R /Title (Classifying synthetic traffic \(heuristics\))
>>
endobj
27 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 28 0 R /Parent 21 0 R /Prev 26 0 R /Title (Security)
>>
endobj
28 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 29 0 R /Parent 21 0 R /Prev 27 0 R /Title (Android)
>>
endobj
29 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 30 0 R /Parent 21 0 R /Prev 28 0 R /Title (Triage tags \(implemented v1\))
>>
endobj
30 0 obj
<<
/Dest [ 18 0 R /Fit ] /Parent 21 0 R /Prev 29 0 R /Title (Implementation order)
>>
endobj
31 0 obj
<<
/Count 3 /Kids [ 14 0 R 17 0 R 18 0 R ] /Type /Pages
>>
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 680
>>
stream
Gatn$?#Q2d'Sc)J/'_]eBoYCX_sY+=OXa@HVU2qGP6Xij%@GjE]DVOHaO_3('<@3@/GU-tO'`tN1SEB&pWY1<cRDPb$lFbA#qR2"V"\htNh/aW5;NR:'SeLF.4(Z3$1L.f',kp($6UOLW/Q;KO=(&2],KXslmO)%X\aTO$X3q_>6.2BM'NfQ:NIB1=QKn29^U&-_h)q9VU78coh%:Vf<[P@N-"C/<P>oRK(LFd+5l2:M]hUMCmVXV7`#g_86HQ[3:G2("UTD6XPEr(6ed0=(f.95i*gg+ofI2V.R3G#"!Eh]a0GfW4@-43K`97PHF0!1X<"5(#F]=lXe/qOhXpleKE$FLEUY@Dr*c/mbSl_LqM8$(R&J`ANQOQe_@=-*e<hl#gc;4SgE9A1LB;a;3f[L_c5u*s-8Q)YW[T<b/ju/&l,=@O-R16!h<_>q"J.R+DYJ*NX1T7)Uk=6"Q#l&-M^JUE>Pgba1';IFEf'a(>j./!*KI[:?stf)fN`'fm'f,GK6SfllT2MPlqoni+c"K>D5gPS]NVl>L/\W=<3-WlLDSObEukdEEd&'r^:g_ik1]M0^lm#Qp1>V1YY;D%KQkplEE;DgAn*Xql-FCbH_-bQ3pq,n5<3sGp'DfkR!kC>9;u:+Fl3Yh_/5X\=H>2?D6;B^lDu\jOgD1,kVqrb_T2~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3312
>>
stream
Gb!#^gN)%.&q/)-o[B*g4/-s3FbqWVANQJTAgW?^f$s,?Wa$)A8W65m!D(u!Xo8!2!#/.+U]eebfQ%Tp!f0KnU\gP`3ah!/U](]8JBJf=IW</C@C?;OBFSDD#@,U3I"11@4bpa/ReZRf`oDneHda-%LX#Ue;iTm`0MB3d/RL[o#Frm*D"Y\Id$sQ]X=0UTll.jp]",j1M'8Z*;*Z;_7'*@9H^"X)i'B1A&t:^bdl[tF!/i&8LRa5AE__qD-tkgD\>C_%Vi6H\>sXUlN.eu+HnQo*^r=Pg!=QJIBa?[F>biNU;$\Gj/@[7*3#'/+pj.4*V$<Oi"MK)aS-'4pk+GKqa^Q_(C'SsQArPo;%i-G#VeJ-cH@>>_e$YHoNO@$WXR2Zomm$??e`OU-g;C2&Gt/+ko#A,eh-i.JI*WmXGOWUPLSe8rkuQEd:3G+M\lWf0>Jr?1#5`@&N1K>]gC`_W@0F.sI$/+UD<%TSGK+.f6b6%h=o^j<?%%BZCuFI!m0s#YDEpT]'GCtkh1#/.MjQ)raRPb;\c1fh1TDe;!-h1WXAt.O)5Sf6ZqCS@OiU7Ek.!:$T![,&3oXR4,<XlA,'(9S,`c%W+JgmtOV9Q5O<S$^;_4[\"&?XAPcn5P6\%<;G)4fYG7ZHO+&QIPE8.KTWHGn$Njr9fX`d$alX"R3AFe64(sdK;JO306);1rE\AT0*1QK'\kB^?lF.RCF5Z<gM[!ATkL.=:\Mibf(.c%KZ4JbA\PCUJM7q9/ZWs1jsmXRL_1_o3hR.oZR6p<gkR+V-D"GbeR)]'YEY=qCe#%u5eIS:hsN4,NnVCE87]I/oh,N0el5KPU&0OEmSD`a:EP*t.r@:X_meQMUaom@9$D`Y2E'<oKj3upA&]dZ/-]==uBjZ;f8qH*bXL#l)iV#2[RGgj)RQ5XWHc/7VMf_<b&q!GdJWi3Hh5<J:.7DjnO^%U(/0*djoe,LV/ghB!n+'J<iSt7Y*Cm38lEBSY`3C@G,_RQ3d8MMb86e@rsn^VJ#G@E8dYWegG"I<F!&%]5LREB1EV`o[Qq<j8HN3s[OGJL1AeE+!.ca:\7<M%Tl*KO&gQ_]H-@/gXpWm<GhhN9@(4L<Ki37n=k=$bj6?(o54oL'6\1sPJ5K=Ee-j!87W5Otp/Dhu:dasBN0Hb,?4%86[Z[b,(=pI%C=+uQZhanVc&m'-Y"1!XK,&.S_,'[.-iZXj;>QCK7'%]G-%\@\%Ar.]^9]s/pPGj%69r;H<?2ct,B[s:/_::L!IL0N29f>"e%Hu2+BX7^-J#)bmO!C(E?n5HFis(iW.j4>4=PAY>e:]!`/<.1]Wo'DLI[VW*1Pg+]$(2Va1gsNVNJbrC#)ODJ53ThMuW\Fuk8VFfF^a\Jgl4FZr1bqNF>?,bH5*S#tcs.Pa=='@2Ha@5L0KaP8J5lNdXpfG0ZFS3teo4$Xmk;:Mb4ATRBj+5K%TKW6>U8RZhXpoTFC)JXQ*Qjt,hrdl'+O,;:!Cb)Za4*cLqqS^F,ejF/:@1dY]PZ1,*n!!9dq99.UeiNXuu70`#%u\m.J=`$?F&K'%:bZnIj<SUd#UGOM'Te!e'Y=;Pr\(&jd0EJWANQXO&!><d5;Ys%@uL=Vu>'\>"UsfCfFdl2qKNX_aP.IaWlA9VAtXFJru3L\-TW<I0@nW.LmTe+HcN=^@KjYLA#U(i=2"p$X;E%0E8mq@^kj4PUb^Rc-#t<:c\(#mCpBBgQ>7Qm#bK]S7,Whp[l#1o?:9TZCYb14e48%OFd&RcaF6<KZ8Z@/$@cm%Jd_jbRZ*b\D-nB,e2\q)R5X\,d3F1db2Q0u5)dE@//1&4+45;bI0^k*qht5rNJ>C5*D".gQVt)TQS>#W48?T];-DDAcU%SeoNdP$;t$rN+,s\NFCh*l&%AB1S(S-0LO7+=Q3"9LOb"mo5*Kr*ESE\jgEa-@QiIU)pld(;&A0</D"7P_>F%)LM9]s%9;2rJN5ls%YMtLJJJ9&sBZQ@`>P"c#1Kg(JES'IWc2VKk'hpnu`NUY1ggQ,Q%,Ko/b*?[:@4[oG\6[/Vt*8dQBkKW)V5odIF@I9kZPeP'52e3T_Z>j0*"k"S[Whg<cC\=rsihBHK?p]]]_P6('"sU#V]8<G$#/-L0)ib0QI)[Ub8mW]!HgQU,C2`H]9lD'9.[R#ukp120g*%S/>AqTXq<gXV_pj1\R/3M<"Pa<B036TXW&HEK-28#M;o;t,a&VW;/<[2=`^06lfdf/TWq3$hu2`s]]ZY!rurDUiF[(VK@QAgNQ)qj`Ft547Ik7r(Zm2g1NG1=+h5*A9*pOHm3fP77X4F+%b8>=olb=3HhC]&)?:Y9Za/!`l,m]?c8AH+^q5.<!JJ6=VeY+jI7pPgne"#qO70&,m5rs#"cKnaW!1.)mN*T<PQ@gBOo0)/[Xjk)'D@e!e"$T8XJFWaEBt;&cB2;>FWuM!IgD7HG/^&*4Eb[17+7ZM[Ik_t->FJW[]2^+F%D"R@I7(DU/N.VC;=&<<""*B,.bH^2Q\pNQqY%@WhPC/Cr\Cr]iN!-5A[_OBaJq09`nZVS+q\r$g2J`TA?C3>eI/f=b:9a`R@3=mNV`LT])enfHT.nJOc9/fCPEeJ-`4@IP35bHj%oG&RpOT]5c%Hp'VqaC:_R+@3L"LcPmOXY@Q('7Bg^n.lc8YmahJ[[8+]NqueEQot9J%Ki,jZDPfF]>MY$^AVBQ(LFXjqRVUdXO*KK/k/KMqmOAf_'GA>Klj30r2lM!YVsME@i-O3*f!L;Gk>ZP%pgt?NMa[)r'q8;j2nGa![K!H"$<QU=G5o\VcM]f8hgm*R%hK3dN'dPjcOIqd[JOFeQtiFd['knQRqr-op,3TTGN7"uFoW/,W`E+9<\%1E%=PX3^=G6,8m"rER&XOINtMiCn*(%obS<Lu-R=-mntM(8?4[Q1Q,`qJ*$0gE)#i@JJUl'!Yas_F'OIj@noA]cpCgj0Za<_1Nm&b7Z*Z;K!raIA##'Co'fSEY@0NqBJXM,V-4B0X.Mh(en$nCqFOI'PQUALV`JOGN(@UN+'"=R.P>jhi!;#Qq;Ka3#6np^-eUdoXFB+1jN`.CkVN!s6`rQC0.jO;lZA4<_LG!=K%S,9[%-2-_8cXKfVm[;IYIC)e]Ph'fYsHQiMo`BaVmF)8BOulk(hYTWt"J5rokU-%(g.QHn5L96;:`4]t1P;L_CDO)5jWO?3AJ,mbg)q*I!l'E6$lfH9tHa!kpGoF_&'pcd.($FY9(&h<@U,6<iBII`>+4cHt;S.k*9_?Oc7NFUT>$UU*qTk!EHk'XP"(2Di3IF1eP)uX"9l]5J@jZJu;_OLQ+FUQX'~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1541
>>
stream
GatU3D,]IQ&H88.Z,;>Tgg(UuIS8lYSK+GiQ9m4"e'=1Q`n3mmE%KVH&"$,fm9SD*Yt\Ppg]Ro2Y'-FCXnIlV;"16WJ"7n$k6Z6[;F.-5R=V@O*@=iAS@&90WO\nZ,Dr?:?th\$e(8SB.[?W>h?m*$1dF"rKW<OTNiGC`@.p9_qPI`pFJs]PM[[17;8o]h5JSo:m]qbWCK-NT?rY6h@\kNImh2@GOXHj867ih./!aj6cOBI-qKBduQkM:M(a]bIq&g,q_9\TJW_m4TAjb<fg%HLMpcaEdiXQW2UB:p-h&!KB"1B.g,J+]/B0I-UKe<dPY$f6oL_lW_:P`Pf3t5kA?i0qc3t]BS\;B8%q[I"KjJ*WO*M=?R\_._u*hi`<YWMU$HoLUc`[f,ccXC"@E6f<n=-"`V[cHm_4%\X_NZC&MqS(%s=13\+^r@WO=<r*@8+@L9^YnQJMtEsE)_0@P`tp=:^f/r''Neu'b_KDm.!gQ:0*[,4WQm$51hs,Da-Kd>i+OFP7TU5\BI1Gk8Us#U!HtT.!(WH-dXIK\$*>'*&AHXP5W=MP1DJV&9dQ+%>&k_9.o;MX>[cY^@2dUsU<lOpV]mL-[g&VNNA[pa(K7e8%Z&Q.R\9c0daeoH12(#Jg:*pIm-plu!-@A;h2HF]e'Tr"iLjdAV&R""DK#i)*tVU9g4:2`03EE:C1hI7gS6#$Z$k4tmm3Pf^9-I*Lc4YIlc/XGMT=TIq4*+rYQ:.MnPpg_k],bV-fe2Q==iAT0\;5FUI6l01D+srfLE1#p+s!+\u^HW0h<I_qpBI\YBPcSaC-C5#s&&-i"+St1lK)_pJkjJF1XW/#"4P7Hg`1:?,WuL"7=FiI=]meJYN,3OlmdV>^netNfQs7,)#mm?`oS3BYtjeQAj\0*<o7_@_MuE^RG9Ti)I+;:9UG1X^0UqQSO_@07#^NH-c;WYl.l$-"j:.=cuIFgh!C,d,5hAmX6OrnjEmBc]=2]n(NE[F)]gV:Ajl#gl-f>ZLVl4meE7g(0c!>[W&U+8i&pho[Yg=aUInA1A.Z$!.0&aJ>7^B.qGcqOYs8&25OLp2M\N!@86Yq_:R.*L,JLDA`O3k"-=,\MGN?Bor<.X]B#"]@dHi;ou"S:m:GK;d<-X;/>cPNZD`+g4-(q3]>BE;0G[s)3'F6>XA^;Y)_:7aYsLAmc;"P>)-iVjbBPZdUa6CX>8@tCaCUk0SqTP,f.1mOo+IeK/g2]qf@Qb-b<W>=qeme\qMI]ph`GT]]T0q98tk^1KG$9-:*RSGhop;`%hRHW@!IlX!?2VW&%hn??@6Y&Lha<$;)l?_aZk!iU]Ea0.]$n+C=3BPHU4d,1)*Z<c\;;%;j_5kgbnbE>&a&9O=^6+?h"_W^BA3.Kh\9sbeqb_:&lrAnAno=DEg;hd<,oaT:Ic`832CMlhno^6,cI8`f,8m"KH>\?E49]MhiaSI$uA\,I%)(QTgZBE^9?plER66?o6m_H4.X-oEC#Vn_j-(l$,2!),GusZ?4QAD:iaG2hU_Z"s[AQbA&%][/L<]jANY~>endstream
endobj
xref
0 35
0000000000 65535 f
0000000061 00000 n
0000000135 00000 n
0000000242 00000 n
0000000354 00000 n
0000000502 00000 n
0000000649 00000 n
0000000796 00000 n
0000000943 00000 n
0000001090 00000 n
0000001238 00000 n
0000001387 00000 n
0000001535 00000 n
0000001683 00000 n
0000001799 00000 n
0000002074 00000 n
0000002180 00000 n
0000002258 00000 n
0000002464 00000 n
0000002670 00000 n
0000002757 00000 n
0000003077 00000 n
0000003151 00000 n
0000003241 00000 n
0000003364 00000 n
0000003498 00000 n
0000003621 00000 n
0000003760 00000 n
0000003863 00000 n
0000003965 00000 n
0000004090 00000 n
0000004192 00000 n
0000004267 00000 n
0000005038 00000 n
0000008442 00000 n
trailer
<<
/ID
[<02d61126cd7bac88ae3ba3f80797fee3><02d61126cd7bac88ae3ba3f80797fee3>]
% ReportLab generated PDF document -- digest (opensource)
/Info 20 0 R
/Root 19 0 R
/Size 35
>>
startxref
10075
%%EOF

245
docs/OTA.pdf Normal file
View File

@@ -0,0 +1,245 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 13 0 R /F4 15 0 R /F5 16 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 716.2874 85.25304 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 705.2874 83.47704 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 694.2874 83.46904 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 683.2874 182.189 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 672.2874 102.141 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 661.2874 143.501 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 59.68504 650.8499 162.4425 660.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 640.2874 107.941 651.2874 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 629.2874 78.13304 640.2874 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
15 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
16 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
17 0 obj
<<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
18 0 obj
<<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Outlines 21 0 R /PageMode /UseNone /Pages 31 0 R /Type /Catalog
>>
endobj
20 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Over-the-air \(OTA\) updates \204 deployment schema **v0**) /Trapped /False
>>
endobj
21 0 obj
<<
/Count 10 /First 22 0 R /Last 30 0 R /Type /Outlines
>>
endobj
22 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 23 0 R /Parent 21 0 R /Title (URL layout)
>>
endobj
23 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 24 0 R /Parent 21 0 R /Prev 22 0 R /Title (Versioning)
>>
endobj
24 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 25 0 R /Parent 21 0 R /Prev 23 0 R /Title (JSON files)
>>
endobj
25 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 26 0 R /Parent 21 0 R /Prev 24 0 R /Title (Optional HTTP bundle \(.otabundle.zip\))
>>
endobj
26 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 27 0 R /Parent 21 0 R /Prev 25 0 R /Title (MQTT transport)
>>
endobj
27 0 obj
<<
/Count 1 /Dest [ 18 0 R /Fit ] /First 28 0 R /Last 28 0 R /Next 29 0 R /Parent 21 0 R
/Prev 26 0 R /Title (Publish from a release APK)
>>
endobj
28 0 obj
<<
/Dest [ 18 0 R /Fit ] /Parent 27 0 R /Title (Docker build + staging channel)
>>
endobj
29 0 obj
<<
/Dest [ 18 0 R /Fit ] /Next 30 0 R /Parent 21 0 R /Prev 27 0 R /Title (App configuration)
>>
endobj
30 0 obj
<<
/Dest [ 18 0 R /Fit ] /Parent 21 0 R /Prev 29 0 R /Title (Checklist)
>>
endobj
31 0 obj
<<
/Count 3 /Kids [ 14 0 R 17 0 R 18 0 R ] /Type /Pages
>>
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 696
>>
stream
Gatm9?#SFN'Rf.GS4D42f64n&`n$ht@th)BSp2uH+W:*EP>HD:ISQPL+M+BaMNl3P[ElDH?6:t"o<@X'B#&bElNm[R&1]H(fFUu/'SB`p[Z@d9iqa.miHZK<<a_D>B%eeHLV5g+$n`cJ5e1[M+p-rp:=g-hk-TIKl>t.R5chbtSe'g@4Ko^q)T16/l)QjG=#/0*$tj%^(niB'=fVl;c94Rq9T-qbjYa%l<ggmlNZ`d;]YW,QYT\L/SoY4*5j+4/E@;3"L=<>4+6R5JVp2AEam2?hm>i]N'4#-&>Y,\o;>CI*it:^+*VT:/M]Dj-\S'GR-HG>1)rF_9Vts62AZAS.&/KP.7&tVF1rXr)^@`b2hat^Ho^C\78EF@/e3.3=FXbrb8lnTH-i*W=Y\q60"oJ+EG)K@`WZE@rrbIC=(3Wa0-<ZbrP7VddRliG@?OTM'bM@^H:<LPS#:GR=MUU0=+])sB=(S(P']4%b90pmnAXZRQ<pcTFcmi&$;Ad`poUoX-S-H=9s"Xf<m&Zo@E`7W1V+j[I1r<Hr[9T2u6l=*0=(r1/Q@C>d`b!hL^a`JG>.+mh".ae*6N7UtE+@&=V\M090([c&roc+,fKS4.k&$ZVpO1HQ:qbW\p[43D<7jfr1s%Zk*X]SHP%/qs_)>.$`a)E]dTf%3fs\AXX-IQuTZk<`ckSR_&q`Dt&$s"~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2966
>>
stream
GauGcBlD`cp3V8-6\#?19L;D%@B5<8kd906c?,O4EV>TIK!oAtNNS.<125/9^5pcP=\#R#60g@a`5d(oA5"]HA*WO+&E*:#N;mC>8R]%3dj?ushS\+$d?c)aJ@$?V:*%6,a^e!PbHl110&oF-_IZn)$c+ZUUUD\+;h`QET6(11fp2_5&m0&Inl>aC':=2;5ahe8KOg!kj"cN:*l-%NqZ<G+1cg83*!GfF!+1>:&OXFao0qdH.gT;=YITa-+LaIb<I>kl0j=tW#[+HBOq[U4:PBl\Y`-JQV7s`P1Vnbl1HS#t.%mFOZHmM_69i?U)LmAQR#_lg]]C[5,@ok8Zq=hX<=2]7\]`+.N`Wm(T1R-"Q@?p<-Nr;q,`!Nbij_SOQUrg$J8k#YW4*KjAO5p9`(u^+S]OZqE#JF5P)s:<W(\)2C)ZiA-JoW&h.RI,oCU=8[[<\J(ngPs'as#W2g9Ia3eJiH^r$=_XgB*Vab1Y3I*$f56]pgM9"FCn(+m!!\#"gK4Sk62N5L(6hC:HUq7eF/ZsU1GF<.9,PK"K_/,DYJE0"J7l\B0,!1][s]e?k;LXUL3EZpZ0rn:^7M'a9Q8'?>9NopU$CsQ&kpQ$3b^E7)En-,o"+F!mK,tXV!<%/.^(UI0ci[dMeU.Y>s""BS\O)S7AM8+^s4lfX^#p+PXo#5iI#\iR;gpF9e'qMSOHHPJiY21<Ne/.[);pH),/.ZXt%pR2HRo3sTP'DY2.C+Y0VZ)/Xd\fO4@8E+OHN4I`9an?MJ51o13Hd'+lT#\Fdq#=2)5Xm'W.(lg$*tcXllj[8@7a_EXN:>*1?E2jO@`F),tlogM0#:Q$L]AQPYk]YlWRHL4cHgI-H\7$(o-EB(rqf!M\J>"1H,&fM6r/?/pP:L0ChhMeaKnQnY]!aho@9DTV#0hIql0ND`V$M-\s=ah>@mhT7jt9I[t/Eao_9P[CO(PL)0^P-[Ta]j]&ZYW&s5S&(d858HH'Ygt5]TgpnIt6?<fa2TqZ=b-$t(@&6M-W/?\PPTDS.l6>A`'jn9uOC])Vl!lugctOfZo.Y'h(h[W@25pVRN7fYRb.:#NKfjT7mG@YB7TD=Mf\IE4,Vpf4CQd<%MI9/=,Z_gI2s]F(T#Tq"dhN_K/VTJ)nYKn+L&@t3SMpmk5N!+]Gt5tA?StMd3:.o/=B9)"FN\ti[h`g(<jr*?->'`n(]uVkY14Cu5<RNE82_p788PaK0fjODYB4Q-kHcLe+C;@(?k7gjYk33>p%+@`"(\\bPtXR2"aX3n]g/JB3o@S,W[t%)WSI*ngj>qFhneu^*liGMZ]8PK`6""dbpY1>/6#N9B69P#n7dW7SW>bJ"qcUl#mQ-WlZpB)8)9^3@(#Z@Xk)1C9@3Nf;re\n_/GuhQTsNZDBO3uB@J9XU/o%g9T)ROJ1!GLgOE=m"T1\=nIZJ>l,1KHe'S,b3po1F[If-_Vid(b<q7)h3p`j!Vi!j@j0.d,%m$JB!G'tWAWf5qX`\'94d@#T]H/543>LMHN_5i`:]4<_0Yh[7IudsPnXXZI<aR<1R@?$0bPcjJ@?/O<heHEgg\oF]\0CMB:^G\h-(\na]cgc^9'cW;aWYVLg2PKhNYZNqL'@@IG-[&I5D'W,g"3_E2AG9l>VPm/Wf2RKc+USIoAEhcmqiZ-+0_Um!]gSQe%hjZkP_&erqA.J-N+feXQoJJfY@"7+!_YYhkiFR)\%M"pA#S:_dE,Kn`(*7f3<tY;c/u^_s)j,kLXG<)lb\0)5duNY\&IEH`JS+3"u3WS7=O-6EF<<JEaUNDlh?c8)+1(3FZiT3dY&#;.iesnuM>TfJhZ+bu2S*2YHoB*N3fgY5igQB$3!`r!]KsjdbLG`EfB]fRiIp#2H8s=ER57k!k.o*"^U#mX4Zlno*/9Z,QN(pt5?i\D32IgR\<G_>5n%';ktJdQV4_.eOU73gaCXr&L6PQ@-,1R#[kdLCAGjbbF>r.t\qLB0g[\jG$/eAWiZ1)s91*MJ^fd>jK.IZ?\UF\9co$5-d_M7B>H?^7(YoM?G-SL/Q%_oq<\WVWTp_#O5-g^Lq`?`I[9(BtH7mLbY`l@f`hsf9f6_9H<?NV@('D[lG/qiXrPd$g4C@P[Jos.+P3qZ+M\#U=%Z@r)mi&fL'oRm:.:8c@cs-)JrcIi+DT.W?fe9"ThJ4P.-QI+3I]!T#fD]M7jmK%JNA+]T+4n_gDQ/ID7Oe^Jo;9J>->IfQjXM02bB7NRo[Z=Ms7(Z0tM%_#rDr0$4rsO3`k-1:<,HqrK8h5D)(RWM96\.Z1gW@N/&rTaid%!:4;<qc2KMk[^qpNCaA7^[V9d,;Q)/gG,DtoBMA]9Qp/A2@+LmM,+.WlNO'_hUm0lm,2Uih.SL-e/%PQ>em8k!e-CBQksKFplmF.lK&@OPcBLjd`:4_O+lA2c2R#2e$=d6!$&!IZruX#X37^E%V7g2r68:!F7m4/kGY6Uncndm#'UZb+;b`KHWB2eLs+d=\C&3/UsDZ.\?*Z]]=UW16%8>SGcEO!7'=IYp;"W?TLZoE]?uprhj!10*NM)l6b33-.:Y5'Zp7he5`HTiW,W&5o+Y#.MX*HEG>#"5.P*>flL<S9qsDShqU!X,QUNBDM#Q5T]M`Ut>qaqdAX,OjB5s]Mn!fRZKfOENi8'T=aVFqNhjNamf?,1CJNTrBCV^[]R\of;ltm!)f'R$'K=:Ve/o_e+Vq`a$P5/g3UT/39#IUS'WEkYcLbC5%/^M&j4DD6Pl45:F.fD5/asR&c9lJVmmit\X2KV?#!VU^2n0Z`RAs+_I+/]<c?X:UaEbDLWA2;)8'g3)Wn.(#Qg>/43X,.)7M:4YlmkAB3aljV'QbBS_o$R-7.giK;U'HD`/XoF:,h1rRJ0R9KQ]`t!LPN_cOj@K'FX$[8Zb276!):u#70kL>)/=Y6%bqZIqNfRI8hXrEZS7TO>iB(2b9RRT(cLjpB5)MQ0:GfC*;pu:&80_~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1577
>>
stream
GauHLgJ6d"&:N^l8m8>2Qq@1<fM7N1M;*u42]>d(>-/JFFmMk4Yhbo=G"D>mVqSBX3&W`YTHI_1lH;21:3@E^9`/#gDa+Fc)h[\*!m?>g%'2YW_fu<Nj+Es/<Y=#/Lc]S"5'V\\EI,MdNl/msY`-B62K<+EK4X?:;*O),cY2G_0o+&mniSmbnH1tn\b*d7r)9S)_cUlWNig-jB.Qc0.r+heRNsF>UnZ=oOU'!l@Uq31#J0_jc6"0rU1(n?8Ei1p1k8D'Q[*'ZT-oLB._e,1d_Pn!:E=[u5g3")DjgkRj?BG43+GkRO1lS?J)+H0BS"D#4t3T;1)\B$rDDfVD%SebVre>id`;/iBEWa8e*Fc.btse1'pC5"p"fIDR4WCV]3n2F(G8LJaJ<:]$%B31#+>ZKc,(mdF24[+r$t;a6=5;Y@/cqF@O"YW94hH(/4M;Sn5r([L_t&^>#5BcBD@k0%>u'gCbr$n)ElKU%ZcaG@V4&?#:rg`4BRoH_6u9Jf_ODX=h)bS;(*57'0HK!2k'1?F7K78mdPMThld2NF>6e:h),r>TNpOMIYO?)BZaV/3RcK<T]7\7*l+*W87.%LP/a"<9Mi^>R$6sd,]Zb"W'cO++J<F`jD5_s;e^tPW$nFVL"C%J\0cGB(.tD9Q+Y+aFE9I?>UU^uLu#Gr#4(A59]iMaWMRKZ[V'lSNqrb%g'1O*e9a]fhf+2Td><-LMFoI&WF*7KBQ6jJANL8E"pp8,9KKRo6"Rj`RM02S^`-\g>H+0\M/>;;6NVIGDY@AVPs"@V;VenCTMkqgC^Pc8D4E?jcZAFuYq/CIMlIEt-@)t/ZA#@7^=SUP5uCnlV6,Ik/O/FaK):U&'ZK').3Wr(TXPa+on^(_]\Z;)l(nGe.A+m;@rQVckNLq)ipqD;ocK$Citb:V_sNV(m;.%WIV,Y986=j#qm4c+bPSo@d7K`R1nc0NF1!2sb\LH(jP4m!m^0=d]cSpBe2hf&_6142^i)JN$E9@c.8@A0_M3gBn`e<mbON2.2A$XpQ]41P4D,V;B=U0";r(s._KglY.kK!D2q-cr(,>,VgH"=%7m*skEM#]G'g-%oKuKJV_@Dc)Ju8*a*/?T(PJ\.sEU;Y-6Z$sT3t46ukq,Rp1(g'6HF^![etUNT`:SV='D(n10Yr+eX*_CWT&Z8-i7K[PHEQ'T!m;m5&[6KJEL"^'YM]R:5_D=f"=W%t9tt(/(?ta^MVe'u:;uo?gMpR2hECum]IXN]XH])ooYfgpU4j?td4q1D.=5PGYrVL/FWK)B[7:6s"Y*Lh7I\77,BcTP"$n=P[ThL`?Lp(M;)G-K@g`QjYL`p94n#!.%M')M(2l]kBD?Id=9QpT33?g#7:)h3W/]<TD\\ZZ@^dstVts]G!#p]Dc"IkAM2-<`jScp8-":ZNqS:TD1q(R\]$]?ZA]]VD!d`.ESMiWLc:,7].;5S<<i6MP@'jg,TJuXjmX!O6B03:3%D?T>`?M@"OG`UQFL7O30_(nhct?TpN.(ku@PP\[q1"c4#.>bmp-,(f5(Rd'`eer$s#d)>9GACm;\]u><#p>Xk.^nrR,Hm=Pnoh$~>endstream
endobj
xref
0 35
0000000000 65535 f
0000000061 00000 n
0000000135 00000 n
0000000242 00000 n
0000000354 00000 n
0000000502 00000 n
0000000650 00000 n
0000000798 00000 n
0000000945 00000 n
0000001092 00000 n
0000001239 00000 n
0000001388 00000 n
0000001536 00000 n
0000001685 00000 n
0000001801 00000 n
0000002076 00000 n
0000002182 00000 n
0000002260 00000 n
0000002466 00000 n
0000002672 00000 n
0000002759 00000 n
0000003092 00000 n
0000003167 00000 n
0000003259 00000 n
0000003364 00000 n
0000003469 00000 n
0000003603 00000 n
0000003712 00000 n
0000003872 00000 n
0000003971 00000 n
0000004083 00000 n
0000004174 00000 n
0000004249 00000 n
0000005036 00000 n
0000008094 00000 n
trailer
<<
/ID
[<fb1766001c59f41c7bc88a0fec7828d9><fb1766001c59f41c7bc88a0fec7828d9>]
% ReportLab generated PDF document -- digest (opensource)
/Info 20 0 R
/Root 19 0 R
/Size 35
>>
startxref
9763
%%EOF

214
docs/PRO_AAR.pdf Normal file
View File

@@ -0,0 +1,214 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 11 0 R /F4 13 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 716.2874 66.58104 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 705.2874 136.381 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 694.2874 127.045 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 683.2874 101.253 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 671.6874 99.48504 681.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 661.2874 165.285 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 650.2874 162.629 661.2874 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
12 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
13 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 26 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Outlines 18 0 R /PageMode /UseNone /Pages 26 0 R /Type /Catalog
>>
endobj
17 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Pro / OSS split \(cast-core + cast-pro AAR\)) /Trapped /False
>>
endobj
18 0 obj
<<
/Count 7 /First 19 0 R /Last 25 0 R /Type /Outlines
>>
endobj
19 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 20 0 R /Parent 18 0 R /Title (Goals)
>>
endobj
20 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 21 0 R /Parent 18 0 R /Prev 19 0 R /Title (Entitlements API \(in core\))
>>
endobj
21 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 22 0 R /Parent 18 0 R /Prev 20 0 R /Title (Module layout \(Gradle\))
>>
endobj
22 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 23 0 R /Parent 18 0 R /Prev 21 0 R /Title (Play Billing flow)
>>
endobj
23 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 24 0 R /Parent 18 0 R /Prev 22 0 R /Title (Build & release)
>>
endobj
24 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 25 0 R /Parent 18 0 R /Prev 23 0 R /Title (Migration steps \(suggested order\))
>>
endobj
25 0 obj
<<
/Dest [ 14 0 R /Fit ] /Parent 18 0 R /Prev 24 0 R /Title (Relation to sender resolution test)
>>
endobj
26 0 obj
<<
/Count 3 /Kids [ 12 0 R 14 0 R 15 0 R ] /Type /Pages
>>
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 640
>>
stream
Gatn#?#SFN'Sc)P(%9[@2q<nYn(iOqW_&aR+dY_uQ5H(@`6<C*mGI@X[*UOpZ3j%CLOJO`nU""@LIW0Lm_p(]B=OCLE.Mg3*j>Xt/ZuFrNra`j$pk^UTbei3A*3T$5jN*PH&;#X+3[M*02B=B:o",I=Uf%?^6=D9X[tj0LTQ4@XT8(u91)nE+Y,:;)N?9&c0);M<B2Ub7;gpmToHtqFRL.U)3&6dM[O(QOhJfsT6h.?4^H+4,L4.hG3JHQi])<,@f%_3K(J[=A<#1NggW5tHB%1UmOQ\hFnpX\&,e1o,)JD[irM@$"n_PSHTP`VhUl8&Io?u+M*ffhf$<shUpU0:^AhY<db2N"oc'I&5)Pq]0#d/1<DLYYHW5s$T;d"6)K"U&9BA!$P_sO5I*lLmcE$l0DV>H30mTbp5pUBjs&"S$a^\R)<RiTNQ%&"l*db*?s-D=*]G!>cLZ,bB</GfQ;T[_:*nk%K2Z'P?a^(`Y==6%n&n%3Z9%$39D+\MgAKj[j`A<]mMrQXqX9jDnZ!'$>5m$A),?VktI^4#_^0pk!i!lg55A4nTh3^NXI+@&W&0`J#U8+TcHF.qFjq76H9g;AAZ]\,4=La.A_)@dB2NHpi1j,s_f>WA#Q5uJ0KAXiRJm8~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3259
>>
stream
Gatm>=``?/'n4K4^eCYcEb!SXVT!h$A1-Ca^372s0:M,j,U=NV#o4Ys9W.p(+1R0%8;VL&:Z>25!7(G3"Z"125A'Vm(D?<7St(0_M.r+L,r$FX+nsm9`VmFK]JBpfa#-="GNb.YG[_*KWIo><NJ1uPQYDZ\OI/DQe][W?'><9WqiNBa3+n,P+qf`c.C'YN:u[<cACBKp+H)Hh5'c/0>,7"(rKB`%P,oPkW(KT373Xi+(ute0s+0R>I/CaP+sB(-!uA0j@6SsF8O63-0HbG[)XF.*,"6+q='$3IZcf]D7d-'3^h8_K.uMm1b54EEi$P*Mj>.;JbsWOJO0(k/1TBLYN04Gbq?MIQ[H&7Wcl$UNFV%Z04W^'J"J_sTg9/n!@#lgiVBJWM#g:B8?tIZ,4+%c":d'IcXnEFd-O4KO2ojsUV69:TT^1T)m%8^)NI1!uaVr+h&$8k`h;F)OSDTjlcYc8tBr#2]P9V9>a7pmC7msTf`Zcs;nVA1t:K"U?CJBPE]n"!01f]^S^5@T\BCN!lF:iK"VMft9`7bSLO%<dg2l)S.q53H9"f&'mHPJLJKOTCc%\]9p3B915m8,%Gk=H6p7jR"6M\H50c+KZ=7)TBJ&OJ7=/ECN$d.*O%:*)$KaAuQIJs7/6S?#'K7B2"/O]/@@O,,*&73>Z#C)Y=IT#EG[S45\A%'?H&2'2f1LknU'eaMVcHA1$c4T)l"^4TDCkj7G9;eoc:Z[YRcWi'jl,kY:Kmo+PS!FN$rHu,Y7=L99J8VU^p9I;l4T?*AZF"+Up:5Fq5*(*X.I-l9fLk:s%Fbr`=7:iO2KClF%4aAOr?.;W$jtG[(4<g6E_KY_rCcTR,jh^&]gDj>L#JuJIV,If:0btu?-#4LAOZ_\;3)>F\M*h,5`\R!1&Hf3"49G^`>>]?cQq;KaWgN_MNFW$NO=#dM)_,P,duIRO%3bCoQ^W1R>suehh\f,"V8WC7<[@IH&0bKr!id1gk(B);_IpAUniZsABo<U.P)qlb(+?3FK-j$t(C^H9Ui)S56)q0kgOb9o!`"a"$R5=`EL03c6SOf[0Ai^'s1^/9[OTid`hRNtSon>>,5<_qER'k,%2(WLibe\RZl)VuYknJ,C>,R+OH#O!Pn2G(=j3Wq5r#_Z)JfM,J!du[)?cSPOJGahPQKW&&cm$pI:ToB(UK;icXu'j=>&plX",/1l9/V0FY(GqcrgrQY>cG,HUq!V3M\%@,naCa/pIg:<gT"@3bA.Kal>-OV73<_SP^Xh>nnWaN"fFdeJ^.^n<!C]1tOX$^@Os1RDHYST<<;!K9/Sc6p=msW@M,O<9ZD[%#f:^D7X+c>W^g[:+Y/-M.'1M_srBsA(R/1VWK;DZEXN.WF;4GL`F==JR?SbYbh=J84I21M32Z<OQQ"@OY]#-YO0&4?fZja,!7^UbrQIfpC5U*Bh)tbS@rOVNDaRHbq*l>TBXk9AR!/f3-rc^?W$,Gp8p"!Y0ehU4)E$+fdYB4^5D^<`0ZLIq_S?u>\(fj'd\,F+UG+%=!t/g&sk09Q.W'/]Slc91:9jCr=N#K:[NZ_+=o`0E=`F9MNAkhMpgpe/Q%u$DN>XcrYhP#N'+X^/PD\kaM[+J+aT^.@ZRrs\jmahI'#Bk."MF3_]Wu`h]FJWk,Gt`grS#K)c"RUdW"lci/,1H]M\aR5HWU67K$@*]I7K[HtAgTI"(kE$jRrF9@/4Q&r]Bb#ZFHDjN/la/d&\"'C>2_qr=5%Z,Vf>P325fYO@PTSk;rl2`QSjJD=]hL@rlJ>9=A7F>\sLD#ih.(O.E:!4HYrn5R+%=P$m;WI+^TY._VLrkbt<\bS&ieO.0i5Isajj1<T'=&J*>DB%ju98d*>X+j&M(e%244!fJN[)4`#&&7\i7'+blmB"H";8,*%4M*Vq.L=-;3ICVPg^&I9Dk)%:'1HFMl*a9@]UsM,jp-n8;Mq^DR6Ts\VFU=<R._JfWN3\.L(JZe2BR=3'V0E>7`q=4YA$eVECY@R24>ngqXYLd2Ta\&J1i1501U;kYLWtpeBq:7Q#1GVD<kX[@`_c94]JaPRK4&Xr;Zh\lW]V&H2un1+oNmLFi.PC]f[L!;+5(Y*9oQN$!I\jZ9-ms*i"0:#[ZoYR_>e\2cc@2)G\kYfsF7]`S[kamj2GOCNr$fIp*`eI4lCXc$%)(0$`=#+uGVFq:R0$7e:h-3n<KM)S5B]]!$ZqBLikiUa9.`&09*c>:+0=X>u>Tcq>n7n5o"">n63>g^Afc/JE",ncJY9jN]UJ'p``tOEO)qSZV@0D:lb__.,?fEQ@,bHGT'%l2hgR$u*YH$p@YtYW2>j6CYV8Jh20-2jln_Mf($Pb2iQibUoI:>sgd"o`3[<W!V)*lSVDFVNWXW*6JUm6e`oeW?.s3luoRKZ,;T#RKe%6YeVGO2ST(^J;@$\2:Zacku+Tren5ntGsi;h%BT@!c0`L#jhk(cDnW$bf%BEX69D8Q#!iQd%3!S,n0LR,?O[\^nWQC3q-6599*#Y2%qY#6"@Z<>?Xc/+O'uRq]eECbpH3`g'X5,JB%`0^mT:=?&W*DNO+$lH5-j$_2VWIn(dLDe@8Orkh$Br:g(6E5'&HF*^Zc@F]$dmRlfIDL4bLIho&:MIHF\],)*nW&:lN5N6Jn5B1U]%.;'Q//IGq$APp)3gM@I'9p0uG7`2Q,OR.W#kDa`0LH2h#7pK'/h5G<>9\WA3ig<Nn'\q.dOg6O5qTP&H,!EB=WT6)AJ@LeST7'bC4D7EPOesrD!;oW=mPqisa#*"%XfYF#g^KOFW/l/g3P947r?_6o)3;H\4]q!o+qc)Btl(.HOZ@/LV/"Oa7>s[r/8+)44o7sdDfI1,d4u0[pKt`9h/6p]eVi#b_,t]*c3mf/55SsR:4Fpam(LjXCPt/0m^'l+TU7(YD/XpW*4rnHV3*[gm9-l.?@o\es<_2Xd"hB9-5/ih%G:(^DC$jn?!N%-G`QA+udIt4W#EukC/[%b]\s,U4_kC-e0WjjG5M6.68;.$&&f=76%%AT_4;"<@gXE_/@):F*K[LYKF3Cj(#=[MD14;k'b?1'/1uJ6K7sFc@.j9hq,h(p8FFMp]b!fg.?S-rjEG'"(Os_E&Shq3([DhnnO]kZi-`t+"0HUEsY4Pd(QLH1DqrqWNH@'6o:-A,lMVQZ58BS)f?[kB5Z)TMpP+uLN+k:\1%;ehrjJ&f>QW>o<&.r`U/g#-gp0L9@J8MkIg\Sc_^[DptFj=<I<9Ul5TL*]s%-)+:;hS(jPYL$5+5YPCAc~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 344
>>
stream
Gar?-:J\hm&B4*cMK^Vke1MHOX,;aj#QH=]#;3D)@*Ed0]3?K:hP!t:1m@97k5F.`aVn\NVL-K)\@&hm0JFa(2,'V(YYUY@_<8W+b']@YcR)eTl#`5'j-s:64Y(2@?=jUM_dr#mL`[(=8&)-pAqT09p>l.3)@U%=<&+5H,]=rnDArr>[?8.1nVGn#eE_FY"KS?UBTY+Ao`QoB&$d+*"4k3&@L;nZE3;cAJ/<E#n_Eo>/\B)H6\NP7,A_eo.YPmgJOJI[:_pYCQHn>nS5m'L6F<l!D!&$3q:Bo<KpkDiNk4:ELlZdF@*=g%#WigL<4t._!JU,3l#2U]_M\m.hb/BFNW~>endstream
endobj
xref
0 30
0000000000 65535 f
0000000061 00000 n
0000000124 00000 n
0000000231 00000 n
0000000343 00000 n
0000000491 00000 n
0000000638 00000 n
0000000785 00000 n
0000000932 00000 n
0000001080 00000 n
0000001227 00000 n
0000001375 00000 n
0000001491 00000 n
0000001752 00000 n
0000001858 00000 n
0000002064 00000 n
0000002270 00000 n
0000002357 00000 n
0000002676 00000 n
0000002750 00000 n
0000002837 00000 n
0000002960 00000 n
0000003079 00000 n
0000003191 00000 n
0000003301 00000 n
0000003431 00000 n
0000003547 00000 n
0000003622 00000 n
0000004353 00000 n
0000007704 00000 n
trailer
<<
/ID
[<64e7459a461b61dd1fa8670aa52b9dab><64e7459a461b61dd1fa8670aa52b9dab>]
% ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R
/Root 16 0 R
/Size 30
>>
startxref
8139
%%EOF

245
docs/README.pdf Normal file
View File

@@ -0,0 +1,245 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 13 0 R /F4 15 0 R /F5 16 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 716.2874 95.92504 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 705.2874 74.14104 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 59.68504 694.8499 142.6425 704.8499 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 59.68504 684.8499 132.21 694.8499 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 59.68504 674.8499 106.38 684.8499 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 59.68504 664.8499 107.2125 674.8499 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 59.68504 654.8499 125.97 664.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 17 0 R /Fit ] /Rect [ 45.68504 644.2874 102.165 655.2874 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 18 0 R /Fit ] /Rect [ 45.68504 633.2874 109.701 644.2874 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ] /Contents 32 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
15 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
16 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
17 0 obj
<<
/Contents 33 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
18 0 obj
<<
/Contents 34 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 31 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
19 0 obj
<<
/Outlines 21 0 R /PageMode /UseNone /Pages 31 0 R /Type /Catalog
>>
endobj
20 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 documentation index) /Trapped /False
>>
endobj
21 0 obj
<<
/Count 10 /First 22 0 R /Last 30 0 R /Type /Outlines
>>
endobj
22 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 23 0 R /Parent 21 0 R /Title (All documents)
>>
endobj
23 0 obj
<<
/Count 5 /Dest [ 17 0 R /Fit ] /First 24 0 R /Last 28 0 R /Next 29 0 R /Parent 21 0 R
/Prev 22 0 R /Title (By topic)
>>
endobj
24 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 25 0 R /Parent 23 0 R /Title (Infrastructure and deploy)
>>
endobj
25 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 26 0 R /Parent 23 0 R /Prev 24 0 R /Title (Development process)
>>
endobj
26 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 27 0 R /Parent 23 0 R /Prev 25 0 R /Title (Alpha and QA)
>>
endobj
27 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 28 0 R /Parent 23 0 R /Prev 26 0 R /Title (Backend apps)
>>
endobj
28 0 obj
<<
/Dest [ 17 0 R /Fit ] /Parent 23 0 R /Prev 27 0 R /Title (Product and codecs)
>>
endobj
29 0 obj
<<
/Dest [ 17 0 R /Fit ] /Next 30 0 R /Parent 21 0 R /Prev 23 0 R /Title (Agent bootstrap)
>>
endobj
30 0 obj
<<
/Dest [ 18 0 R /Fit ] /Parent 21 0 R /Prev 29 0 R /Title (Maintaining TOCs)
>>
endobj
31 0 obj
<<
/Count 3 /Kids [ 14 0 R 17 0 R 18 0 R ] /Type /Pages
>>
endobj
32 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 631
>>
stream
Gatn$;/_pX&BE]".IJp[1m^!8_qmqJ8<[5Zm<IEECRg'3fZ]_+rUr%C9suJ+BS@u<_D]1/rU2]j"Faa.PrjM!%Mqb@Ul_b[,8*:k"cId!F+V^g,=^[G"VG_!8J%b]hrgn/OO0)C5f,>fGQNOSRRRR+4n7FJ",91Wo*>]E3Wu9"!0Ir?K@%s-"\^^X=AouS.2iHK.HOACg$Y)J_NdSXW=/Cb"6;Zhrs57rhX%Z,qJf8KN.`5EZ2i>jiUhT!2^E4C(d%!=PG!8B"k0;*41JL*oBQS5'ea>$JS1M"K_P95$UQs,)"&aU#=Ib'ctP-#.g9MgdV.g'CBb(:l$b]YHuUOuh8,\S<Ri7(6c_PQ(4#TVcIA]g5;Z-m%`J_;+8%nO^*7mo(VR,g?>V2uCD@+\5b[Jc4:RC8N%8JB*`Q_9c@)XnOfB:\KU@fN,-1!gk\[iS#12CMkqaKlb-ONB%uHj:9>@a/n9*)J028/$&.K3lmIsh/RD1]#q0EbJ!;=$.cWTtL.".R;FfEuSJ%Zg73;$(7i2_hl7Rllm_)iQZGga+:RFY"'q:N=R7nf[gJ%/IShDXk:m+.dbE&1k<6`D,lD8:"AK;PbdA"B65b%afL*6X>H%64_/-GKRqc`>7~>endstream
endobj
33 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2889
>>
stream
GatU6D0)Go')nJ0d@Y;fcS5QW(Eq[l0j3s"dAXZ]V^b]t"@m$U_"(qmpXe:D&/7(_TU"5*L*!u(l"575ktqI!J!B;LB*E69Ja7Xd'EXIY.%6sJU^u;'`NKY\1K2aK_pi6,g86=`Whn\;:b68=BQ8SAPYrrmFI9-bQ"Hmjjq%<-g$r>1%4HJ(rru$p6-+En/lHo5,T&<bE<AFh`pbciL%+LW9@nr0a^>lDl&,9C]NdY1ak-0m"e@K-K;\t'T><"5'6p>#gFRUD+cP(-Aaf04([2<$I_t/!%d+^Z5)#e*D-:Xq8-^IQa_]/Ci<d)#:A@hKKqe'5&AmsEhihk=LE^VTBmX.m/O&C!@7mi*kb))0NZgtPM5mU!WKn^:9p"'iYr%0t_rk`!8=FEf6m2b>.4R^ok's("r_q$<[Emu+R6hAVIi"_$b&P\3H%KYIdZ8-D9QH#&_`Fr'2bqc%WQ-lsngU#miu(hW;_i#,:LO'ar#*Q(Vk9,8om$&K8\(lt>uhdK['M5Orht](XrjFI''==UUVY*1i8&"Q+'e/#-'BDj-Rg.8WtgUXp2obPSlb"l4@Bo<WU-'!1-ohi1*(MPG=U]]F?KO`%AP$S@d:q]3;5sIble#*[m';bAo,G1J;C=ZKE638(<<pXr-5_@:Til`a1rbi?G8\heDX+&I8K"%51ohm='H*k$-Kr#8R]nXP4Fqq@dJTG"j]*Fm_Z^Gk49A4fUSgF;@?.&g*a_*NX,8B6J,&;0O=r\!e'qPideaoZXh@NkMerp%jFEL$=HRkG=FSEW!-hbo9%A7I@i]QZhqGX^XHfufc?-#K-rCDKs<jZ=SXSa0sn:/Ig>*hWUI'M_)u@"0)q.8Z>Ujtres:MNq"E=R(LAQ6T8OHKNNY#gIbE"\)2N1]BNUFfH:#A#.M,PXDi(`U!mdCSBuuU046K=>O\)m*lmLJIN7:GS?^EK5&(,`AlI`\_;f$LeEPY70mLqpgp&a.OLdn_$_":;crge/d'JKuBbq0G8BNd&0qsei'm8"H%RuZM8.8L>/%-Pp+0-ND_22j<KG8JpB37Z<(rG2"8hm7CXH$,P=d:g$qp:g+n,%_Z@^$4<i_/_u_I^2eHpc!I?f,YpPfjf$',GF+DE`9$M;4T_Zerm]UmE_d>c8^=0im:FONcP<=G0W<D>'XV&1LZ?&<6%'qoPG4j(X#kTdZKb+rW)cDEJBaFc_E5Y.<@`)CN?.11N$l:(Ir-;kN'\Fki@Ve5cja(9B&R?n+Wm:\Q*=^%;Hh_^LnKq&qO[.c:JgNuN>ZOrOUDh^pUemsa>OkXIH.q/a?")9XhkG$>O;/f(q3a%D+?66%ZA[3`V':3)*FV^ZX'Tsup\hoQWrQ>)(X0:K][F)oZ[,]`.$!S24C[q'3+HaE%fJhn>Z*8DHcE1NdB3<f)(k(-#eJi&%dg]D#EmMqoEVT7lA"S7to,3r@Jg^E!)YSiE,c>YV-g9t,.DQ_g3$?kM68.2UEq\ohoTK.fqcV:^Ra:N@/Xm7-q=O]Xc)\]/IpMhnO:@1d]\^Rq[3#(+cRiD4_7dM:pd1"S5\?!uoh'cnG20cLJUnrt34&WsXHQpT=S"&`UIek!Er>rnVMoV-u@26HGUIn'%2lVF!)AAFa^qP0&LLMWq`nGd,P)S")1`[cN%4`@*J7]$&4I`jpb9bh%KgcS/VY;3ZX/CA?SXB%1s)]XKBbREm=E0H+-#l4Y>O[0BUBi_KW3a]OGW8fENrLV@Be9p1b`oi$Dl6t2*dc@r4e@JkZLNj9k76p_]/RNB!I^jX_c$j#6MjgjirfMZ"mX-UfD?!7J+;FB$csZ29ika&pZUR&dc%lU:p.8*(I%J!S;H<4JR!IOmnDN)E^14TE:/U&=Gho4&`Kr.a_!tp_a;:'PWL'Q/4CnbLi?IR%'(Sh@4BWaM?o!685h#_*0qeV!gsQlO\uK9+-n+]&e.#U6rkTNei"<28grEJ8/RUW(u%%6Pq_FV.&`CRW7r/N8dNL5"KDJNn.T9mY;d%Z3@OItI&PMt=`'[#["F?cc-iDrd6;pmTGaPqd'1uKqnYk%lQ![$crBUu&Mq1*;9Zn7`?4H8l1oCrF%M$IQT'j_#ro4pDXA'B,,O,Ab(`4m?gbQTprS-%_[@W)jODejh3)N>$p!@kGT_@LKOKs#ig2;"*\,l=A5;]7Y5seJ]$mo4RM<;ZV*N*`=Z\Qk3>p,5iq.@F(X+c2kM)rMGp)+.C<AUJ211NED2t]-KuB-u<<Xol`ojPn(3oqjN54"T(4r*;5TY^WF1WlADVn.1@n<8+$4+UI2pP._QB^H\<ljn%B^N-8&_MG08]WR?j\O0=DNNJ)B3W09@\13sMACIYJ@pf2fe9qhPt8hg&2Kq%aQC%TWH>[lpWA54maG5UL*+L[PGO(.`7.Q.bAH*I"10J\fLT412_T[Q(@qgu[K$L/0]]S+hR:=aHa(tYfMoSt+.:sG#e6[5kD&-F,=V$'Z8i'cS[3eH?W?@Hn-HB$F6>I+]'Q,@BB0'?&?j[%[str<qj2CeZQloEn3F@).jC3h=Z`0&D46#Y'lnmDEs,O6@O^K;Z>r0l#Go'u&9,EIHc^2Q;RuJZDUV.lKD*uVIK(R^qiRF.YBQ"p!l!mL\aT!\HbeF7qMREI#7\dQe\g8a;M\@KB_ouIXO$AS":;A^)@AHVZ-Z*I#J'tl&nfOQF91L*Ns(jc0'&BGr#,]RZKjjh+_SMLmXo(j\FO8_p3=FgC%$FHS1Ln+pq],p]J4!Hg1Ps6@Mou0'Y#sU0bl,mVT#;Wf6:j<KoJWQo%DWRI6s/B$P`D[g2=hIRTCf&d.luX%[lA&?0>i"ps](MRqmisobOdM&bq6S@@e(K&IS\sn3%$RU&-Yao0A%]lf0%F<MHA4[Pb6]\n,Vk^'ru[s(I"HaT~>endstream
endobj
34 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 389
>>
stream
GasbUhbM'3'ZTV='OS/5<9%Y#m5hr0`Tb@#>N>slV-A(r$1q\F0@[R$[gPQR_th4=j$8b'62S'+JU<Df5sZB5%@WCfI#/(LI7A>"b]5J0j_9ID-qHD0aaBWiqa,VAMc0$[N.p8%_>86/7oPcaib-Xek@^PJi%K.u$2tE`'gQP!cG?B:jQBr8&83m0qm)PQqi,rfV/*HTY#-8VSX"G9gf*s5bWB=B)-_=;8Sk6%Jfpc0XYuL'Y'/5Y<4u?P(o]nBls=S8n>ZO;*fUBE!0323VOZ]U3-u+`WS;oE+O?&g\6'VOCXWXRA@3%>6pHb2o+0`\#s+s"X93j,G^j[:XX:9KC%fh!)l]VF:6$i1g9K*QfcPYl3ie#J<mW&S=\":^!(!<A"o~>endstream
endobj
xref
0 35
0000000000 65535 f
0000000061 00000 n
0000000135 00000 n
0000000242 00000 n
0000000354 00000 n
0000000502 00000 n
0000000650 00000 n
0000000798 00000 n
0000000944 00000 n
0000001090 00000 n
0000001238 00000 n
0000001385 00000 n
0000001533 00000 n
0000001681 00000 n
0000001797 00000 n
0000002072 00000 n
0000002178 00000 n
0000002256 00000 n
0000002462 00000 n
0000002668 00000 n
0000002755 00000 n
0000003067 00000 n
0000003142 00000 n
0000003237 00000 n
0000003379 00000 n
0000003486 00000 n
0000003600 00000 n
0000003707 00000 n
0000003814 00000 n
0000003914 00000 n
0000004024 00000 n
0000004122 00000 n
0000004197 00000 n
0000004919 00000 n
0000007900 00000 n
trailer
<<
/ID
[<9df3a579e257b333c2cd9123c54c5e70><9df3a579e257b333c2cd9123c54c5e70>]
% ReportLab generated PDF document -- digest (opensource)
/Info 20 0 R
/Root 19 0 R
/Size 35
>>
startxref
8380
%%EOF

282
docs/REMOTE_ACCESS_IMPL.pdf Normal file
View File

@@ -0,0 +1,282 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 16 0 R /F4 18 0 R /F5 19 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 45.68504 716.2874 132.389 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 45.68504 705.2874 104.381 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 45.68504 694.2874 209.309 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 59.68504 683.8499 100.125 693.8499 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 59.68504 673.8499 159.315 683.8499 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 20 0 R /Fit ] /Rect [ 59.68504 663.8499 168.9 673.8499 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 59.68504 653.8499 145.1325 663.8499 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 59.68504 643.8499 87.19504 653.8499 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 59.68504 633.8499 95.52754 643.8499 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 623.2874 185.293 634.2874 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 612.2874 157.709 623.2874 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 21 0 R /Fit ] /Rect [ 45.68504 601.2874 65.24504 612.2874 ] /Subtype /Link /Type /Annot
>>
endobj
16 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
17 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R 15 0 R ] /Contents 38 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 37 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
18 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
19 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
20 0 obj
<<
/Contents 39 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 37 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
21 0 obj
<<
/Contents 40 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 37 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
22 0 obj
<<
/Outlines 24 0 R /PageMode /UseNone /Pages 37 0 R /Type /Catalog
>>
endobj
23 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Remote access \204 implementation notes \(v1 WireGuard\)) /Trapped /False
>>
endobj
24 0 obj
<<
/Count 13 /First 25 0 R /Last 36 0 R /Type /Outlines
>>
endobj
25 0 obj
<<
/Dest [ 20 0 R /Fit ] /Next 26 0 R /Parent 24 0 R /Title (App \(developer settings\))
>>
endobj
26 0 obj
<<
/Dest [ 20 0 R /Fit ] /Next 27 0 R /Parent 24 0 R /Prev 25 0 R /Title (BE control plane)
>>
endobj
27 0 obj
<<
/Count 6 /Dest [ 20 0 R /Fit ] /First 28 0 R /Last 33 0 R /Next 34 0 R /Parent 24 0 R
/Prev 26 0 R /Title (Production deploy \(no new nginx HTTP paths\))
>>
endobj
28 0 obj
<<
/Dest [ 20 0 R /Fit ] /Next 29 0 R /Parent 27 0 R /Title (1. Database)
>>
endobj
29 0 obj
<<
/Dest [ 20 0 R /Fit ] /Next 30 0 R /Parent 27 0 R /Prev 28 0 R /Title (2. config.php \204 required keys)
>>
endobj
30 0 obj
<<
/Dest [ 20 0 R /Fit ] /Next 31 0 R /Parent 27 0 R /Prev 29 0 R /Title (3. BE packages and permissions)
>>
endobj
31 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 32 0 R /Parent 27 0 R /Prev 30 0 R /Title (4. Cron \(session cleanup\))
>>
endobj
32 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 33 0 R /Parent 27 0 R /Prev 31 0 R /Title (5. Verify)
>>
endobj
33 0 obj
<<
/Dest [ 21 0 R /Fit ] /Parent 27 0 R /Prev 32 0 R /Title (6. Browser)
>>
endobj
34 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 35 0 R /Parent 24 0 R /Prev 27 0 R /Title (WireGuard data plane \(UDP, not nginx\))
>>
endobj
35 0 obj
<<
/Dest [ 21 0 R /Fit ] /Next 36 0 R /Parent 24 0 R /Prev 34 0 R /Title (WireGuard third-party \(Android\))
>>
endobj
36 0 obj
<<
/Dest [ 21 0 R /Fit ] /Parent 24 0 R /Prev 35 0 R /Title (Tests)
>>
endobj
37 0 obj
<<
/Count 3 /Kids [ 17 0 R 20 0 R 21 0 R ] /Type /Pages
>>
endobj
38 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 807
>>
stream
Gatn$D,8n?&BE]&;r#PO%52na4R=(!AX`gsK5>meKM:C6=VKQB.37;pQNZ$El<$;KUfOMOr-rqb^H2cD5.(:4.Y-On5+GKC%+6$?J-:t*_^$8YO6G';J<M\L?3!h:&^O5Sr#Zsn04mEBJbVh#759m[ZQu2Ok9G@%h8i!G<[be7nj\597Y!;SdjPRn4O%;^,qE7o&6U?NK,_fS-n80<8uc(EKiXl9*)FQb'Rg`sITd&Ih]*V$q@h;$E;92)&H=7Eqa(Q;iS+pR8!B%Ome:T)52fcY[##"9j>B/l_g$e8aL)O_W#Thl9)\ODq>qUs#`GIDD>sd3DD(S-5P6o<@+taA;fPl2cnibMWfbp+!(;1H?Jg6-?/2<;[d$B&?nl`u+A6RI"XiWI:ij)tkmJ?"58;--U^c5H&kja=r4dKDYbB"5<p-Nb[7P!Cb_X]?j;QO\:qtq0RSL\THI45p@JkF,)?BZPgOse=DXf-+;c/H7iVK>r)HNAjVD,>c:<^RsSRpp]$JR.fV0qW<ehA)0a<uLU0d9hZ3DQ<GZ-g']i>`W;%hBbJ-QmA;d5j3r-X-er8h&94o^YU./.<oq?.rc=A'0N)YgO]G`Tjjp[YHbfb5gAQ]\CQ#A!;#`")IGoFS``)<F#k(.KqGg_3sRW@Ili2Cu#Mb,F)J=jF(]dOpjdC9%R^TnAH[tNTi[:*fk_9T.[cbAc"P>qc^1>-9oAtjPhqcg`E#V9WkR;^KaIY8X4L``lW*JQ\AU(=DPO%6G`<d$m#bdQI]Jn71F-GN4(U8e^>pEi_7E/g,cMQ1lQkcFK.-r~>endstream
endobj
39 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3647
>>
stream
Gatm>>BAQ-&q801fU"C6>DM4/PWV*ASD$Qg8Q*NooV(\d?kSV>;^;HsQ8Lhg^Rk[J,!f)#m+RYJ5QH_u`Ek`9Tn/*9>5l:G!dK%oUN[Vi3o%qF1DLR@5/QF+X7*7!EhmCu[VMih33K;a`n84TfWF;lD".i]BJiXmZ/B5ZPB:l'Wqc&q:9H#L^8*I/_@R=q-ZMbq$0\C,X1#%SXtIIq?<pp`Y-1(6WpXtpAucYT)eJ+]5JYN&\G9"kp'#qinn0D3C-$s]h#f4'*q6kf\#'J?F^=JtHDfrn3E.cNaa'&bh2+oLBc&4^5tX-JU.'D&_Z7E0Z(g\j(6r4kX&;lu\*_=^RcD0eC;c1bd00%%"GcfWPD^P0pEB4QcfOL,pocgLO+>XP).A:j?JuZmX:%KVe;$+kG9Dc'8fU`iMo>nBXLl)E4^@+uUN:[QRp'F"RPTc30Oo2>F#kP;8(2RgML?ttFa#$(_^uQJ.AIJMP(jL18TS7MO$1*6OdS^n#P3JCnFj.<8BM7bdYV=)mKdh?S._->YS['qrHnr$O-<Poi`3.to3?juPW]3l*M<JaH0Md2fk!YYo9do/MmLJpgWTCSK5UeR\:Hgh0np9sP_QV]40T&9R8hkJUmQ8%>BY@,h'HiPM(7W]P].pO-8PC>^mFTp^.IMk(ceZrHgJDpX?KV=_<ocCn0n_d;+G[CYJ=Wn>saj11%FklN]Gq[W\ktl0\Ro7&HAt?qk_;PNQ)gR&TUTo)Y!fK!+<<2K9W,r)1Dm'7FS.;9dlPE0!Td.H.SqX%QoXn)F>9f,RcU66uqX\m`k2,7u9c=AA/IH3DG<"iK*a&(m'd2/-G%L8T5n4UG^3%&?bPX6p?N]:?_+^jeS!AZZg$nA+!po+JntP^t0iH7Y8WP2n,DfN[hXghST>qRHACh*R:u.n%:X>/4P^4P%[*OZLr3E;Eqf][jf=!!DB4b6D)Wa0Y\FlK4>shE@Mo0PoCm@CPW`loHYqgfU:B?H/^u14JX1<_2"MLBg9&2>t$V-$d>m0&5lA2h67;aN3TKG/guaVO%i?!Yt.PE`i'rs*1Cc_)pJA;Yj4fT.=S<PfX54JOqTZ<r`dXaJHmX)l8'j#c9]=-q$ajCG*&lk2MRl9%\gR>I;MF>f2W<notjN^]n<m*r93Q;g',bS.?*l"2%Ac@/?Tr'JmeJ$PR1\hKU\0ZD=<Si/bng]>'%AQ_1HN0B>69UW1-NHl1]/(W`DY\Wp6qlV1Jeq(WI1irE+?J.%Y)R*jbjAZP@-bq6iQ4)`8l9G.BZ#mhWk_+"IZ[Xb:-r4"Nlj]1[0LK]>s`D)`;?e:;LqX%Z[o(^NMp=UUHR4UH)@&19890@ZL`&D0I@Zj4\ii7Q)Mj+</9$0TcE%kFHM5$T7&FrpqF*d#u2L_fn.-p2NpV"!P2K'd!P%jKl9l%\PAkM1"'Q?oVH[fb9dW".^rs#^L-rH!ngm]K">&Uo=CFq5Wtr8-6aS>0T>g[eb^931/+*AFTk[.`H_a=0](.KcC<$upnd30bjk]_5&EIW`$`$-PhO)5/4paheT6W"qAH#S8n<p0M.I72XqBaT0^@6Hm%T(<9[Mhn=9"OD%R?5D96$F$W>5<5c6E\;OR:XSfi;+UM163fJD:89d0f1:Ej^h9ObqK4URX&ET`:q2.X*h<bQaiP0<7'N]KP9*>"Yeb`F(o@Gi&?>\YfBSLJsGH&gs[Im[>$u?@:+XGdd0)Sdp+l$jV@C,B"gB?%Y$]'?Q4kQbq&G\4FYZ5fg\nuOsX6MrDgZZFRe^<Nia`<m2MI@N$=1JnKY3SQRL+dt11=L@\e*+Q'2'#1)+,FU\9sQBWc/_XCZGL0dKSLt:qG?7H4V>%b8nn-FklW:^gH(/]/c?QbOoYfpkFKq*GiZ+&hsKkn(JqOIniN<A3V7"Mf,gfHB-03S+-2'p4c+$Z<.e4c7GX"jb/)DD@ld5?)m=?O+)/Yl@E0W%j#*9IOTklu2rkK0amG4qR>R&\$-b#oa][QrKLSdqG6V@jVi>JX,4rqA859AS5$j]@pW0uh7h!`;*Jseu#+UF-h<bdnF*iu#@f+@8s%heQpBAhjONn+7c?OWgmtcH7L0L-1b?"`0#ADU=S?q8,;h@Tec2&9[S*A9<QLjE^]2O02%*&-5#I^Xm2VMhPKRY?)Q7VZ@>Ki)84Z7W8Xl5<+!A`(^%U>,k>NiD?dVSfH\DNTi3tE;8[bfZLYm0h(Bj0a;ZP?d%;jK%g"OUbNIaZoY[!U33?mJ&`I,^(bnabEUi3>tdTIA,tn[a`I-TPF-.4sj7*YLeLL9&MhMbfZFk"Q'`/f@K^2Oq%HeU)9]p3DF]@DEM3FaCLnn<LM\5^B7NC2E.[in!#_o`?A4[$]GhBd?<5G]Fr6\IZQ-@g&1s=Vidk3\;j8H)5[^J,c.:o-*D*gkPZcPYG4I5rD<^89q*Ug,@,0Jp1s%N:MorS]PX[FNO\S\Z-bT5q:J'elB0B<prW@6]mdH-;VPJ\9s\tStSBtH+n,4$@G<U!b?Wii.`%ZfH-:lr\d&DM5]$'c;-]h-!d4'TdYUP$@ZVsO'&hXa8+h'Vtdj!SPYGJf7pX0Wq'fJ1:a2<6rf!5HrDiKNJ[dc;26GhndgtYpQkfN6U/U=[5k(]+M?WpVSsSE&1-Ra_k)ksB=Cqa77P,\o!@+TL6S)8c/-,c7m*]c(k*Qb7gGSG5NbU!)3&UI;J!!p4Xi*iLt8N+_0RBgidoN:[-:Fj*?=b.p$J)5[<?oV1[=r[3V&nn`SU%Kj1W\$A*]s`XtPP@1H55\GKZXroJu*.)Y:<o2[mu'(iR>]CpT!LC9ip4^)ZdX9/k\c*[!Q&q4*ApA=LXRe`Q+Ol0,TlJP\a/)T*\1#W]330@@mj5)eHgZ#aJX49F2EioRY;pc,!DA<e9l0/dagBG*,^IjCThd)[;#!GO<>C!H!Sg+A_9X*ktG%l.*-SD9<M^cMR6XS*RV+UhUW,NWI;W_W:c"pl.nr^MS=0Yh`l:(n474CkE"/jaVLj&4f)`:4O4`oB"F"7[clL0oH+LtFsXLGS]n=?nLq6Fr,^ckd3`EoX+AQS:pONft#aO=acRLT^a+>I/Zckn*M4Rd*01BHA]CGJ*UMo"pmDmo^diD`uIlJ.O`l"F#/u8,S]u]GImhi<YgJKTR<WZ`VC%9X'GoEtM/R\"_)^q"`h:B<<i&T@`DJ%';LGK8A^HY8L2@M-se,Y-,K&`PJ;]'Eotr]pOCr*>4JLSHt!9'6n^-(SB#l[McWp8L#BO4JL/?6VbmjGlC1cXB9CqW[kRm5+D/lr^"g4;Hh*+U(3X<H@rPWAVp/7@O&$.^YJg7Fa;A;$Y?5P:-;^]JJ;F_[KfC^.N^#<<gT!S2jB6N9.W'F;+I*jBc/^;J]DbTJ1OT0<5b\l,Qr1nc@SMPd/6QS/_V_>(h^j63%N&h[]2s:@EP#F:g</BO]4\BCDS)0#]^&!r&+sa!AC"Vq3pm8YLAf6n$$lb<Q;%Nm<Q8/.V:Qr:i+bFkk,>$o9`%bc3qf*^@#0n4CseS*7+r(AKHQBi3DmJ$r'3_<?%2)Q`GdX!#:u3$mQ9"ql1ZQ^A5sHXME+p1`-t.;q)@DC72c83ZQS,r.(/B3[5"EQD6QW='#fc(H7?@i^3g6ee>5Xnc6W&@J^HeG7;%\B"_mJ"g@n9nY"73~>endstream
endobj
40 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1666
>>
stream
Gb!;cgMYb8&:O:S$rAdCSS39\8R6p1aL9kBE#^g6P8=8:MHibq.?`On>5$itQD>@S1+TqR*sr%[cL/oJ3HOo8!$*.Nrp6`e:0l4!$nt@o"#)98JU7P6pZUSW-mL=53!3BoTKb8hhA]Y.mc`7Ac@U_QW0GN@Tq!1gGrT.NiJpBm`#ptJ.njB&UYZ2/:^K0,o+U>"Y[4NF5*Zi5$P:KlNN`15\G+pQW%.dkZ&ZYNo_V*bea[[1@oWO?]CcSiHAoKDmD=Nb;:VOikZ@u5GS7p$,FB#c^@NO<j"-`BmhGJ9B"M,UIOdfIS<OQ1#ORXo%DgHu+kiH4J$R^^GOHY[V?6pRa2:j`/^='BbrAoRP0Krgi;j3R5e"@!1+kb[ej4+h/-h["N3.dZ-j+5:RO,DRHG.I82;#nA:,'a>:l"G=h`CQ6b4!LJ%]l!JL2iH40a"$O1lLE&lftN;U"]AEetL%B8ru[MRi\^F5E"/A\@D@/iq>=s#3fm+&CR<57_]7j_d'MSHtPPMSe("(qGrlZ/[Kc:#&5<TfFqPe&JLVRWE:?WdY(952r*+$eFAh1*IN+336(4LKSX44q(Y+L0'Qss:]0T&ab6aLcnr[s.M'q\CflC`Nc-;;QVs\iUhMY["UXh!-^*tQqP;Nkk=Ola'[u'iHfiH0TM3/I9S]\F=4/4#b[`L_g>9DT!1ghiqE;l8*'hP!Lfjp%)F1VmJ6-0L4i,h%-'$Mcki$oBX"9u#iUpVGq4fGE91HI^1FaQEcV[#W!EA-DL$,'LO5SdRb?&mC)kWZqDJs1Fa&eVjA,#Q[2-K`,VT7roRgsLaH5m!a4BW'3>9ktN's+U)XktT%]/Xi$+f/n'@tO3H;=Y^HM`iN2k#(>V<!\5\^W5d2W:@QG]u8PjUT&FS:o0ZD"s`ed]CI$eB>8"[53/&H)GsJ`C$4p^js.g$KQn*K:Mh^B]AM8>(APH.%<tGqGnQB"#YCWlTJ0_H8jM`PeRk;re?kcPXK%mf-[!p/"20`\-D[/_/LVmB5nJA-*^CkALi8`1<GW4!16+1EmZH48(D@'n^GUupmJM:sei"tm%H@NI;%%W>@0Q+(ID]WT"HAgKLP(_+$qqZkN-?JT+Kk*_D#nd^f.Y)!TS4of*YLQhEQA^K2N"&B42`TN?;J1$aB4:$N@^T_*@]m4^4\"F$mWoma3'][OUjGL8bC(h-934\TOQF0nqOr*Y,29+I=nk4bj[ejP;&<q6ig(a-.Oi"M=LGpaD;eu0Wc[<g<5(QL8\r<MYo9%HX,?=XTUriRCt1^LCK35dk.U3`hDb%Z+u&CYUd#)iSA\%_Lb]N@VZfh-V$dF=7_6=Z[&tZJ7!9f]I<BV+X<BuY#4.+X1]XpDR-PkJ&b@@,c7^T)Yn(VN%1LWKAHWTrn+ZYS'!qGku5"4bn"j;6[ur;6pfVpH.m34]eds;SaU9?bIF;151eW&CXh>,\I^re.;92&)o.J#7-C0V=92`RFic4sh;^>p;J%NP,l6r/@n!Vh*k*9#AITSE4[<g"*M$l+6+<m'D`6'%1+H4j'CcQhXQmWO?g9]Rn%E7#JcnMTb;YU$+-cKWjF)_a4qn6,HHjRk[rhfM%sIc0r:'`nP#n&q$h[u]lPY\.d2SOm.K^_1Lh:OL<jt67[Qi1g6n>27dOqiPB<O)KE:aqb[-//~>endstream
endobj
xref
0 41
0000000000 65535 f
0000000061 00000 n
0000000135 00000 n
0000000242 00000 n
0000000354 00000 n
0000000501 00000 n
0000000648 00000 n
0000000795 00000 n
0000000942 00000 n
0000001089 00000 n
0000001234 00000 n
0000001383 00000 n
0000001532 00000 n
0000001681 00000 n
0000001829 00000 n
0000001977 00000 n
0000002126 00000 n
0000002242 00000 n
0000002541 00000 n
0000002647 00000 n
0000002725 00000 n
0000002931 00000 n
0000003137 00000 n
0000003224 00000 n
0000003555 00000 n
0000003630 00000 n
0000003738 00000 n
0000003849 00000 n
0000004028 00000 n
0000004121 00000 n
0000004248 00000 n
0000004373 00000 n
0000004495 00000 n
0000004599 00000 n
0000004691 00000 n
0000004825 00000 n
0000004953 00000 n
0000005040 00000 n
0000005115 00000 n
0000006013 00000 n
0000009752 00000 n
trailer
<<
/ID
[<3c7062d12426f42b4b67ec68dbf63f96><3c7062d12426f42b4b67ec68dbf63f96>]
% ReportLab generated PDF document -- digest (opensource)
/Info 23 0 R
/Root 22 0 R
/Size 41
>>
startxref
11510
%%EOF

View File

@@ -81,6 +81,8 @@ export RA_DEVICE_ID=my-lab-phone
## Production / staging BE ## Production / staging BE
**Verified 2026-06-04** on `https://apps.f0xx.org/app/androidcast_project/crashes`: `ra_e2e_cli.sh` passed (connect returned real `peer_public_key`, endpoint `ra.apps.f0xx.org:51820`). Poll step may take up to ~45s per `min_poll_interval_s`. UDP handshake still needs a device or `ra_device_sim.sh --apply-wg` from a reachable host.
```bash ```bash
ssh alpine-be # or your BE host ssh alpine-be # or your BE host
cd /var/www/localhost/htdocs/apps/app/androidcast_project/android_cast/examples/crash_reporter/backend cd /var/www/localhost/htdocs/apps/app/androidcast_project/android_cast/examples/crash_reporter/backend

View File

@@ -0,0 +1,220 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 11 0 R /F4 13 0 R /F5 14 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 716.2874 147.501 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 705.2874 70.13304 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 694.2874 156.381 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 683.2874 129.285 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 672.2874 182.189 683.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /Fit ] /Rect [ 45.68504 661.2874 127.037 672.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 16 0 R /Fit ] /Rect [ 45.68504 650.2874 103.045 661.2874 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
12 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 27 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
13 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/BaseFont /Symbol /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
15 0 obj
<<
/Contents 29 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 27 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Contents 30 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 27 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
17 0 obj
<<
/Outlines 19 0 R /PageMode /UseNone /Pages 27 0 R /Type /Catalog
>>
endobj
18 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Remote access \204 validation \(Linux CLI + mobile parity\)) /Trapped /False
>>
endobj
19 0 obj
<<
/Count 7 /First 20 0 R /Last 26 0 R /Type /Outlines
>>
endobj
20 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 21 0 R /Parent 19 0 R /Title (What the CLI suite simulates)
>>
endobj
21 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 22 0 R /Parent 19 0 R /Prev 20 0 R /Title (Scripts)
>>
endobj
22 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 23 0 R /Parent 19 0 R /Prev 21 0 R /Title (Quick start \(local orchestration\))
>>
endobj
23 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 24 0 R /Parent 19 0 R /Prev 22 0 R /Title (Production / staging BE)
>>
endobj
24 0 obj
<<
/Dest [ 15 0 R /Fit ] /Next 25 0 R /Parent 19 0 R /Prev 23 0 R /Title (Optional: bring up WireGuard on Linux)
>>
endobj
25 0 obj
<<
/Dest [ 16 0 R /Fit ] /Next 26 0 R /Parent 19 0 R /Prev 24 0 R /Title (Mobile vs CLI checklist)
>>
endobj
26 0 obj
<<
/Dest [ 16 0 R /Fit ] /Parent 19 0 R /Prev 25 0 R /Title (Troubleshooting)
>>
endobj
27 0 obj
<<
/Count 3 /Kids [ 12 0 R 15 0 R 16 0 R ] /Type /Pages
>>
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 691
>>
stream
Gatn#?Z4XP'ZJu*'_d`-RN">.rq)2uF@)^s/_9cM<!C;GO!J>G6aptu-a_5D<b3#OPXr(>o/kRE(PClTDP+QE\7BQ-N<']#:OiN]!#n;JH9ZcOAS",((fN)<.#O,L-\;0@9d;;<54nsP8a&StTSSaV^n;K,[jU%S7)2DB5lfA'JriHP"pi86KPmCCd(^BnZ2uf,KeY8+,_A`ka?6e,<A<a"AQAb^iHPKtTi?)9#Zt_Cg>B6C1LNFtI=a,%Ds87s\T,h^L_8ITTH6ip%#=:=(I"Qt+1O&d.ciN0`pa3"/TKen(E:I"(g/obPbbLYn"A&6OZ7+'N\BnlDF+"1^u"JbaSlJA/=X74W[H`)ZD+Y%"/$%Cs6KQcQ&FD>iE#ncR9?aed?`)-d^GF@Mp.&2+J+'4O=Ae%h8Oc/OAflMeWR,OfM#M9mR$HF!2]Kh(ouBom;r49:]->/*9F`].^++:h=Chd+fbcOG"?EdH)G,=X;h,>\:D,-jQeZc81hR,REiX"[25qI&PZ"hFL1?k)q/EKSIT!Adb#$<6$t-dVH*#dWEC]^>ueIL',9FCs0IK65!esT_$Bh/J'e4mWn(E[^jUMb@Hlf[3)$7!a7"ZNk\@n&PAdDD\*_OuD86K]XUI<B]`M?QmF=(1Uj*[/\8L5.JuR@;jfX;Z4\<7F5Z[EOdKU^oLYa+:MOI0~>endstream
endobj
29 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3400
>>
stream
Gatm>>B?9+&q9SYQo]T&Nh':.434h_.bRi8T<_tI;GLOt7?(\cYRs5,AD&X5gU@Cj6<jZG.64Ya\TIT<jnfrf8;*%gr,8bM3hN,)B*h-bROsYt$7_KMUWMldf9*E\WG7$&C8-Ro_\>LMUr#6=$koIb/P/77'p:sNj4!gU-=9PB53r:j?dMf/"-3X7VW`JLF$#jnj,8i;FD>+;gg(:<7mK9_Jn!>id)I@4H7$j?^3[TtqWTa*AW<+1SgAK1Arj0IS8N;Y+A9kup?$PM@mjIF*+$X<Q%q@FoP(U"lk4D(3CPoHdbPqL=?ep`UL_[:"$5:`YtN\'$piph@FT@+d'I?u+WCJ`q[T6%b@uPZWWoq;r;]j>#F%q5ERW'NC03L,/m@tHMrR5)MsDl-XhC*paBPcp*0[=RA?mX$oc)*P0Fo5i%!Km3J\r&DO1,mZFV>/?P80)!fX=?c9aTk2.\4ER"?D]7M#p?8qfK`:K>QTBYHun&U4N=OlNZ9(e*0rpJR:t>PI!`tFRGldL:!(?cq=pE=j[p/-mN"S9I(ID4AmJ%i[@@1QWmuGaHEX"!VeDP@6VJqr0*,&bdoMqZCm)t^U%(;<gX&G=L5<4]O>59CgC+jMnhrs]MblEq2ckqaJf84E[@2'E)TG+-$,lFgMs.7<uCH2NlU'_$f^/YO02XGfuo7(kbA'R*I.(8?Yf*Jq]ptj>83F_Y'WDmYr7d?L8-;UN;Xm1,:rD[(e$/cp]Qj+-quF^kB,(^F`4\#p\iaUSG[GN0sRl6o>!3*3Acq20M&#X*0<WU[IrK!(1<5fl)H9T,_D,?ATNULc!kFI8[V-_V,nB69Q`T!G'SFEID3:aPf9'.5qVW\cTPo"E>Ymr+\oA>NMCa6n/rTkr1EW5esaYZ9n*JW$I;KXR,!f#Rf%n$A60u(/M=_mgYXIG[_:7LiA-`WI=GLJ^MGbedWce'3U+uZLQuRo0Q>S%NXT.H(kJ\76nW6/97bgd43WtbP'>UFd>J$m&?!?`,fk*WljuLWCq$5f[Q/d_+&n3@G=$qu3f#p@fe`tj*ERZ=l+MTO?3$EZr^>'RY(ctqce\!][<;.Z2S&j#Hu2SNl^X\d#U(Jq.)6DPQT.%ipIambH\"Psn9cn_!-<N=)a.M[K"eXEdlp,<38]MhHk0Dl^Dmhl&bPhip)?e<Q%WfGh?'cc2Y=4c,lE<P.Mo1\OlYBp(of0<Y+K(rJM0/O@hfT6SoD1d[3jcl+5At\:l=WfCWYe_C2geGLk[Vq$?3LIS\eWa_<.HVWhlDYLI&4ENq1e1T>]J1>OBE,D+GM(_7;KW!-Oo84g##$NX-a_B[^kI[Tm0P:a-Rrp:VB:!`;uX=BCL'''O5l"M5&8>IFpFf?CEK^OO/9a!8Eb%98Tgq=jiS,G5^>*-SN/=H[%fBUV$rM\!b>gL=T!@7\:&*4?Y*_.ETOY^,aN>\9#sOr'_*<VF5\gW8#=VXA;rmWMJ$2GnXE8BSZjgBY#H9$`poP[@rNI;e+bg.2lVV3t_+L719o9AMVO/$Wdoad>pIKg#trj;S@e;ut;G!pZGtCWb\A:BMf*f=AgSY$Y^gr8[@.pBiANCQZC=W>ELL.DR2H8+6pBqrP<Wm'JfRXRlgN4m&@_'Zb`Yo#0AdH04#mXg%2=!C7,$8_-p5$S(?#*?#*M+i/`-.D(%Z1<KjoC_TQ[k(Rf1Sq&/'JlKKTHV\#XJ70HXUr"1o$XSNNM2!q+O_ZZa;?hY[\A7eO*9f.L`>b+:geRNB`@Qi"6M4'JQ0B7Q)gJ^GhEffSj#OMb=dLM"[a)fQq7*-m--N88F[5Q3=2(RIjPHGT_iF];6NLpBe>:XRHaS=f@Lha1Jm#`/QreV#X8q_"`!7+j6&pleRb>V>70/BndR_jJ6-,aBBl+i#8DT\$G?llN`W5JYSRi3<n7kR&i/`O]%!RNpkEc[_^6a^'LiXD"R>3[ko4U_3cYH?bl-mmP]j<g>K>"eXN#X#7R[/KG?8K%b]&t?27_ML294U+AchKj$UZX2Ug&nAk%_K8;Vp4qb^@;8C"n"Id]0ao&4qWV0#H2/qJC3D\GB8I$c-dCN-/CmWSSgXJ=1@cmdS]VL#<+j$;SQ/;!>%Vt+.].LF-Q=[i6ONE'-"TB"$f"%,&O(o"3AO5'7dqT:s=iJ?-OJTHe^uTg6"L&'ct0:RumPK[RMCC.[j`pWnrO3<G@[.q"Gfhn%Vm_#-<6.)/_G&;$u'fKB`<[,mRLjk-fnG?s*tXD0JDho^N)r3"9or#MpZIXr@Ht+48c8CUH&':"Mn[Ae>J<g^\!"X`>;d?4t>J%LHs46t^(i?g`=Bmk#!J:lWM&<BdbL!=@AFaHQEkAKoIW;,gjDAuAA^q2'W>\&!8hi@%jHC61i"H&ZB@6bh%t8I'HI.]TESODL0$"&TIe+4-4NI-4Ie^CFX+W:!S';@R3G$Qd;AfD\%0h<hB`Js#NZO9`,%fIEK'aRN%ZFqaS86j58:&-bP^jd7=;DTa$+QK=][kf<XE1MteO.#r<K]*>Pj2+03FiGjc.m`3e[PGr[gSk_J[E?(PZLQW(.!?^RM'MWQQ7p^Q`_#s0=b5ZF]Bcccu'uuY"=5U)$e&hQd'YUA&m`*^iH6\o@9G3).K"WkN[>YpA2P[rh.iX)?+3:AN8-dG:*i:D]IPM(6n8jV^T\SUt#3_>TOc,i'K#`BFi2jc8)nt*KIU%#7&_Rk>g"r4a\*$nAjnEK^3q2ZK&@s\@onMo03oIdSaG)/-UB?og2PB'oZJ7Q-<Up/R1W^XsgtGMTEl_aXJ"m+::HDTa1^0_):K_D6-i\/KpYa\8;:Ysrr2;KTVc#G8i>P"p6@_PB;LEa%.!t.lY(^abbq"C7k3l?*&4[<<3R@QtLllr,\@XMJo/B@T`BlnY's8@eB3S0m[8I17c<O?T@8EjY9etgN1QL(q476I;@RIN>Y5gK^@';rS"oP!m74>5qPp$*/gaTAljc`]QLk'^pd011Q/mg75fC`!+LpK`s3"+YZM6)@qA'IF>AHg"4R*KjgK':W2mSHJ$7F,8ACQRjc6^1(`,5+AW+G0h`#lT\I"NcINf-^Xe!1easc^5/#S'<W9Z2Ek5N?)b(M%;MUhY*P[D[nkga'qW>'WJQeIE*Q)f3B*!^YVnc&ip!eZRGMhW))Ym=eJhZP8%".8#k.-/L@!\[KCj-ZWia,ET/\lb+ABTBV%BMkpoDrdO2iO_lT6a#V?nL6kGbML#dRDX'%LjTd47`rhc^h)dTK&>YsD608SQfg`?;Q5NY6FE6A[4YGu@Qf*"Onc,R(/WPFX=j)G#KZ\2RE];.k!Zm%ZLe?cX>X2CWuqJPW%LXH;p!FpX"T-VqGq!TAZVCH9588Q:gVBd"aW_1NpEO6\3'3=HZfRe*2!C^bt,uk5/CG/f)P\cA?rXZ%so%=~>endstream
endobj
30 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2296
>>
stream
Gatm=D0)19&H;*)Z'2UP8fM3!=-60@34@82A%/J7[U1l/?oU^o""/.teMI0oh*V5e"@>'g-*^7Tm-[#\\,/:@J;PG3s6E/T+(oQgM#bq2[K'bb#0^sn4M,jL+?N66<324])ISUqMQ&ZA5)7V^+=V_QM@$TpLamo2jrR%@TpgIo,n-pl.8A_PbeE'fqNA1;2%N%k%^S-++o"0[WLrTPFq+_<cnnC)!Id?;MM>FchWHf'+(_$ni28;2[ES<!8O=4UM7b[A_8K!ZM^#:@7?Hm\A9sR>FWj\nKn47nr.M1NELD&h5bFH??,7^RXIs8.3;1qhn7B+4*ou"=V*.^5S(KL>Acp4Wm%(sk9A3R3p("B;'*`YeS9a'R?kK;qE\:H`)d<!rl/_"dhp2OVQ68(p!HUsmkAT5X^iq(o#o.4s$X+f7&3NU5$5K@(p4*^@#5HGTkrr\&IrlJ5O5.V&S*sq02t/JV/DuUf$C>J67Mit,MGumR`BK5;fdqoh+3<"\9\1h%_U'YC:s5#O#iodr3(=E.GX6k\&AT'Cn-m]Z#nl`%g`E?cBFnB&<S_@R)QKp<4+lD!EOK<X6qZ(8n5u']iQmubrH][E1_/*,`CIBM+-3tf7aGFe%j?Z&i6rN\I_2&^K*=p3`XB][>6R4:AeQ"sA+7/K"#@MACJP5tN'jQ_$F(Sa'`cG.8qS#^KZNh%g33-m5-?O<N^#5Aq,tN+m2,7ne:.mp86_:`7Z+2Z'28=8+&Ys+RVqD`k`2Ln,>`2TEss7r8h;&_nWoQ&U(PY%+jglQ=T!t=j_&3^ZC=OPgn+W?T=]kpUXQD8?K'KQFo'Y5=89a_fKY%ARbta[C"jk&[%m>i_oOi@rjGg?kJ52TckK9!lXgdY;H-kC?K(W.%MI'=<nFqJ.)`nfg>DQ+D[#hoL0]sf[/a2[nd`)qAQrfc-.TN$)lN[1Ds/tdq&13dTP9:+<"u1JXI@Bkdjb_uja4LG65GhBJ3GJBU[$Y+;o[kl&9Pnl9CKK3XW,Oa:B/=[qFfrs!CT&C^uKWamG4l5YfO+m%SgY*D8^/KZ1c&5K;nQMNo#amJ#>5s=?UV[;$dVHWEM5=7C;(t:=28m)O[.DWV9$ap`@j/3tVtpdkn49<CSoHrLNqJpX2][!dI#9-R4>]II9S(#h4`p;+Km7"I4fP+C/FB)ME56YVYAq`:TZYkLq<1eVq4-R,.!"GP]qP2^GpG'hBsh6.Hmme1"3Q9+WVfWIo:!3F,p%&+Ie*82Gqi'O&S6H7mG,7]X;Ql];KXS3^DuXsaAZW&)5)AU\LjFpgsga?RJ/@Xh!``1Lao"Ls7h;5X_MAhl)BRYliQI`9'/09hT2)^^.4chh'%OFV7A1)TCmO;s!/c)2$u%_l$pL)#mf7n=sW1H6j2O>']^E)]LR9rq%HW0fh"=IHs%0nBJ314c30!dS'_!_:uO@d;^S+gWd+qlFqjg2<dX0*fJo+)U#QZqSG9M:F'c9[ct"SO%1:,Xk#%=n$)M>Fd$ibVdX#^l&<!5YgCok/14gR961s+R0]Dp*QH,T<S6>;E]`G/p2mk1/6!JZJ$%eWMu^[:I-g)"cN*b.gq\cX]#KCKN(9\$DBr>E$-^%7ZGb@K[c4&U0Z5ipha%l#CaEfdl?MIQ:"C<'!5(R[;Lu$CPnrlYAo!6*bkD$&j6nNrc5aF(m3G@K7LrpomZU5_n1_ho2)q'IEIW_[r^C=#eRc9$ro_R1b=cq9l#'e5].20Lr(:hK82!@c4lR$I\]JLg:h<)i74HISd[hXmJucP!:,LO$hdB$+B9aG5`unf]IaKWM_#XC(PYGR0YaG`#/bkD/Mt024jg7bBjkLl_(g][ej6S3*o$L.\IFPjqOgVCO;o(!_&DXBYq.WeD*Sc^M7h>F^!#;<8O4WZ4s?:sn4o;$9u?XYXSn^@Br^$BQSjk007W/5(<nJZlAU*YC*rKl1bs@a+cBG0o0Mc.6jsqA)S*@i7+D\$qH9E)rK+AX]XoIH9jYQ!BHKdeY>9-:XmMq&7f[pN^)ULP)O(Bi%Tm]bLC$jEadBR)(BeNWXKQ'U;B^pR5LSAia3]($fqKM>4TN00m?AY,ToW:(nZbQ^)-u-,9g=]:DNf(_nMi[1n.SdPW+Q%A^\n-h()_;,O=sbL/RBr'*8`JBW`/2/^5o2Ko`@7+haj?`6dBJ=9:jB<o"92-*:R$"gQUfQ7r7kukK'+SCj02T.L/C_XW5tY*Mb]Uf#e5?B;F0AKAQWR1o7.f6G_W0I/!MSls<t)O/GqNbMD5[M#qKsL(0?"#?fp%nJ\Msr_dC6E:G"l6*mf~>endstream
endobj
xref
0 31
0000000000 65535 f
0000000061 00000 n
0000000135 00000 n
0000000242 00000 n
0000000354 00000 n
0000000501 00000 n
0000000649 00000 n
0000000796 00000 n
0000000943 00000 n
0000001090 00000 n
0000001237 00000 n
0000001385 00000 n
0000001501 00000 n
0000001762 00000 n
0000001868 00000 n
0000001946 00000 n
0000002152 00000 n
0000002358 00000 n
0000002445 00000 n
0000002779 00000 n
0000002853 00000 n
0000002963 00000 n
0000003065 00000 n
0000003195 00000 n
0000003313 00000 n
0000003445 00000 n
0000003563 00000 n
0000003660 00000 n
0000003735 00000 n
0000004517 00000 n
0000008009 00000 n
trailer
<<
/ID
[<c0e727411e9547578b92662630584baf><c0e727411e9547578b92662630584baf>]
% ReportLab generated PDF document -- digest (opensource)
/Info 18 0 R
/Root 17 0 R
/Size 31
>>
startxref
10397
%%EOF

319
docs/ROADMAP.pdf Normal file
View File

@@ -0,0 +1,319 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 17 0 R /F4 19 0 R /F5 20 0 R /F6 21 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 45.68504 716.2874 100.381 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 59.68504 705.8499 124.2975 715.8499 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 59.68504 695.8499 140.1375 705.8499 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 45.68504 685.2874 113.717 696.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 45.68504 674.2874 265.741 685.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 22 0 R /Fit ] /Rect [ 45.68504 663.2874 151.037 674.2874 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 652.2874 131.949 663.2874 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 641.2874 161.269 652.2874 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 630.2874 121.277 641.2874 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 618.6874 126.157 628.2874 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 23 0 R /Fit ] /Rect [ 45.68504 608.2874 121.709 619.2874 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 597.2874 120.829 608.2874 ] /Subtype /Link /Type /Annot
>>
endobj
16 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 24 0 R /Fit ] /Rect [ 45.68504 586.2874 92.37304 597.2874 ] /Subtype /Link /Type /Annot
>>
endobj
17 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
18 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R 15 0 R 16 0 R ] /Contents 42 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 41 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
19 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
20 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
21 0 obj
<<
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
22 0 obj
<<
/Contents 43 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 41 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
23 0 obj
<<
/Contents 44 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 41 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
24 0 obj
<<
/Contents 45 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 41 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
25 0 obj
<<
/Outlines 27 0 R /PageMode /UseNone /Pages 41 0 R /Type /Catalog
>>
endobj
26 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 implementation roadmap) /Trapped /False
>>
endobj
27 0 obj
<<
/Count 14 /First 28 0 R /Last 40 0 R /Type /Outlines
>>
endobj
28 0 obj
<<
/Count 2 /Dest [ 22 0 R /Fit ] /First 29 0 R /Last 30 0 R /Next 31 0 R /Parent 27 0 R
/Title (Alpha definition)
>>
endobj
29 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 30 0 R /Parent 28 0 R /Title (Alpha app checklist)
>>
endobj
30 0 obj
<<
/Dest [ 22 0 R /Fit ] /Parent 28 0 R /Prev 29 0 R /Title (Alpha backend checklist)
>>
endobj
31 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 32 0 R /Parent 27 0 R /Prev 28 0 R /Title (Product positioning)
>>
endobj
32 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 33 0 R /Parent 27 0 R /Prev 31 0 R /Title (USB-C / HDMI \(roadmap D\) and USB-tether cast \(roadmap E\))
>>
endobj
33 0 obj
<<
/Dest [ 22 0 R /Fit ] /Next 34 0 R /Parent 27 0 R /Prev 32 0 R /Title (Commercial \(Play Store prep\))
>>
endobj
34 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 35 0 R /Parent 27 0 R /Prev 33 0 R /Title (Crash console open API)
>>
endobj
35 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 36 0 R /Parent 27 0 R /Prev 34 0 R /Title (Stream protection \(FEC / NACK\))
>>
endobj
36 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 37 0 R /Parent 27 0 R /Prev 35 0 R /Title (libvpx / Opus / Speex)
>>
endobj
37 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 38 0 R /Parent 27 0 R /Prev 36 0 R /Title (Transports & protocols)
>>
endobj
38 0 obj
<<
/Dest [ 23 0 R /Fit ] /Next 39 0 R /Parent 27 0 R /Prev 37 0 R /Title (Receiver / sender UX)
>>
endobj
39 0 obj
<<
/Dest [ 24 0 R /Fit ] /Next 40 0 R /Parent 27 0 R /Prev 38 0 R /Title (Deferred / post-alpha)
>>
endobj
40 0 obj
<<
/Dest [ 24 0 R /Fit ] /Parent 27 0 R /Prev 39 0 R /Title (Related docs)
>>
endobj
41 0 obj
<<
/Count 4 /Kids [ 18 0 R 22 0 R 23 0 R 24 0 R ] /Type /Pages
>>
endobj
42 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 821
>>
stream
Gau1->u03/'Sc)R/'c[E-=Q6dcH#?F9/SOC>oTSFoYrjCc'lSBm/m1ZF4*st%Rr^O+sg*6SG1-PEfNio]7VqQ?36XoE&&b*4@g8R!YdnG!G?-8B9-jR",as_iW,]$6J,'82pVpX*.'mB!Vo<CUDQfq]d+_nDgUoCA1&$V=uls##d#C8Y8/6?5a](7(t&ihK.>>*cX=hQKt6A8OI)sYV5PrO\ZA%hQBb,a62C]3O)Y$[I#%UD*R>ma"OST-MFeEn34p:VqhT-_8PSYi_=`Egk`<,&@<sdJ>n/3[bT:d'Thcoo`DNE1I"5"9!UW#rG\=&NA84>?2h_7B!%oef]JD,>?-;'-mm#M>2ti>&I8HjgK1mie.^,&e66*aGS-7d;V$GCBK(]J;;S\WNYDV,ff-/#lImDdC^(OH>-BQmK.MWUKZSf4bUhN_h=19dR,HiWrle1Om&5M0Tkjf_UrGD5EBRU*.R8OQ"@@':_D^p2PEAg$r!?/\MAtB/Hb-D_MkH&V6PCiabR?^s+dR(?.Tsulmc-3Jr>U/PY<hb2^jLbYJT6,c@ZWaT]ICuq=2goo,+.q)?r&P[DC#t*dG6Lq+2g=Q'Bj[jIEL3(+ih6MVM=q5SQJ&p!-h]<iCT!V$7S.G+HtZ39>S\o;C5Bd19UH/>niKo#-X^1@EAuM,?O*51m0[5H(.)f!3<7Z)lnPQQ>76%mZXm\t$>(;D-@$!fBb[>(`8nl@Q\I4=gOOM7#lK;q_+_!h(SCCZ"e5IKfbRDH="=CI;Qh4H?nrY<>qYQ!2IMlqJm#/N#BOBUkfS#k<q3$9"s&(?oR6lsr'#l~>endstream
endobj
43 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3729
>>
stream
Gb!#^>Bei3&Ur'0^n\6@-ka0aace9t)su@>A'%G@lQ..:KHtF`JkK!bggAqVhF6raBA4K"`$PKpJ=46t2]j.S&UpP>Ire-$`JP'W,pH3l=qaI>'XG:oo@:H;hapC872<1l.Omh.N<E6&/+=Q9Mc$gqGm=tX9ILWTZJ%_k8!-1O?X/`".jG>AhQr0&=W[qbWAY=<!L3h/AO"r;L036dn!G&W#>0-uZaK0U@KaVg]WFI.f-2R!m?hhGL-n;b0Y[k2oD-C=5p3ffX$=\j(S(8%po0dr.d3V$j5au::gp/X;F:[d&7nk@n"AtJ'ua$u#P]h:nE6M%,RN!j.I(Ym8YbH+8Td_P-BT&pe;>:#goXkd2M+Lm.adnJ=FrN,Z76MR*c%K6,(cuGYp,n;>kh"A@$5#N8lR#;8I"RGoe.F#J!)GRESa-MOtK'H:*J`Va[`S,r$-G7ac1\/&j:7LHK9<+;:S-CM`iX(0TOq)KoT$2*(eZ`;&@8##l^).:9@c(*".oRkpOPXL.8Z`8s5+)j&W23O@&gS3,pOBgD2M+Y?aq'WUNn;U=aJPWla=B:PAs83UE9;)(a!E"5c#Gk9LrqS&q);G'r4(_g5#q&i"$P]B!^IPKrO]iQSS0P<Uif'ql<Xo0?=C:dY)Ogb*L@I:-N3lLdRWEpjYJ\FH,C00G`/`L^q1"V:(V]g\6VN#.8&d\p(SHcS"[/]:;KI3K_VlsNKSs#u,2)+7nR"!KRl%K#*=ho</5;3Q>D3WcVL4pe[qV1+.YGYc)cJ;qTSX+O3uL;,d9RPE.IYKSJCd?iC:Qs7INR8\:(&*:O&Dh+E%dBF`EGCDOKO=;a3&LcuAlY8l$h!`bBF[=>@(g5Ko,ro7)hLG(Q(:S9UA3Z$DkHKL'?0c`=C$Vu[WD<]<6nLkWp;u9$X=@HQ#64[I-]BJ7.Z'C>hu3B]deQP)1Nn%cLF7j.UB\!u?9EHak5>WMWl76?.5\h=g&QDoci?j]K;?YpJ"a[E+VQ8^>&44Uc5r/2YB?d0e#>$eja'arWD_<@CfVFuRK=W(`)0N0:ZHBuR4oDeYWluc4L$d3pSW7O&N_+qrQL)2-K17&%&3M,ioP^&cE!'(Hn=K%ml3%N.Z[uLVR*bIQb\`=n^b4b]*\OI\SHNo@2fDl@=W"QE81Nr$U`Q.!TALm1qDq'1Du2Q=:BM12@E-0FT?%mea'S%M?0P18sMBU(R8`g=MW/L&.cYg,9kX>*\i5M%>MLL]2+rHs&dk;jQcFp`WZVr8bOBET<Wl52?`)Qm%#gi-\8sN#CHt-`&n>Z*53SIl.]P>n@i41.BZSlN91dl_0(o%C'AdDU/liP(1\di\ImOaI73<&aniMIYc=<<=&rO*nQ*.L`T9O\X>r_9osjD?qeVQX:Coa72c)sE!cU*c\`j7mf7pnm>abH\aY6biC@B+9)7KHYKS;UQqq3Qsr6GGpPi6..Ktd^lZBO;kT:$*SVgj^aA&q>;nn!Vr",Nt0($+KY\,s%^P0FNdMW4^A=-Hk]UZFDu4kfC'.us!t@b3_?;)%k-S4ob+0IY)WX`HFnbc^,>B7ph]K/-Vu!nps-3Mh\SL;t/9]2,3OeA4=HQ]gRZ5#$dX:!m<%ijK')NZ(3,-2tZdIup3A3)DXZBbH)JPa3E:9Ol+j!s'o/#O(!i=]KaUGE$7QFthl3JCI8HA+?bM@"5^=$<5'Z'tASKK=F;o?RML*L^$[/SOXN4j)`#ekF(%/*nkDa1nnB/j^&bbBiXd8D60,"jGu$hZqFk-&.Bch2u(i=!*"L%#f3rTfBG-kb.)H=?lDK"C[7tYOWB*HH]SGI@YE)IX483.2X4W"gZ"H$<rVdjeS=W!2kSA3J",=Yc>P$G=7b)W.fjn^ASX@VTZbNtH6t7#7=S=E\395MJNhg(q"t#!3rI!hmT.fqrUL"10#R?FPh]tpomh'LYBddN:KI46o>f%dq>;?+%]+47<OSm/GHeSM*AIiok',m`U2Y\B?q?S6aDogmdk<YHMdJ8qJ2#sN\n%f>+Q<^%'83Iu`4!Gn2ni_o!>9eclkBs_'[XC6TtZ@T^ac0WdGn^a/g9[c9dUPX@?jc-K#asL*\\&uQo./5;f%'+ZjFm>645ne]S1gM>Nf4BHnYY*4cRh0(KJ^nV!YRSL8$/LUbs-%.'f4_33a;r$&]i.\KYa><])A"Y+pkZ.Tb[AP-1!uP(/V?4K!1[W%lr:_e1]:aATSqV@^jfb:bfY]-b#%'>oULDjXt$R'2r<CB!T6O#bM>WCIrQUX)'jLWghe$9hY9_cacW=U<T/56Rd*9&7h:4_)iFA2Zqpb\!^WH*$uR"%$!aSe[Ve88KR<IAaa?k\)ZEYkF_V_a5\#@B]8"2Co6<,ct5c8;30Wet4)-R[A6]H+\@eF),]K`8a.*][p,dkMn"[+BOQS?/m6JnCG'mLAuQfCjiXR2d5HFf0/Jg]t^q:Q&H5R?FJ'0%g;B30[3?s%_jS8\Bn.&kLoO&4LZ+GfuflQqZ('U:urfkM6prike[+Omrjf$&]jPaMoiF^BO]b;4j.TJ>u0&C%?KFr@"S,Ad-FgsdeUb6NUFZ$n<me!_?rmFN5n%6`p4l9LrXAT*u29O3D=+C$]_<=Zj/P#F&$0ILe$b;.>ateDLdkGM__57E4QrE;0N=S$,HpAs+kiGS5,A#/1#96Yn8QLn8PMU_+>]'lg1t[.O\f/T$sTI1$d2-+%Lbh_$1\m'pjZ_K<f+_n3.1XfGq29$]$Pn9&=(7&7ST'=+U^Ic`;cr*D<MVVd;q)\'V'W4,p8g'BI<rG'^UfQ9lNf/N:ghj`F!u3/[l6F:khT!eAEmcp[78\So,0TN1)"g/Ju?_bE.LpZ+3mUbFh,.A!'h_5,&3:aPH5"t[Y`[rHggc'4lD+e3lj9r&E02D0$AbW8nieF;t_k*A*;H#u"(6fCH"IaPkl[6IRubCcbO7DgA3";^b8Yp,VN4PPm[7I<Lf9rH9eWr)'kC&3e!0gFtK9ib:])Pji)*-fbX"+Th/*GhkMYBZOR:&?\NOF@04>6&UHkp!9uAK(W`r^]ce&l#j=VZ5ST0=*<+*.-3:8>E$LK;V_69@-eA1kh:@'nlI^fPq.P(p#jQ'>+7L7^c'kbCug"<pM7HRAqNF%`r7)!>56tq#M`)`LtiH=N/oM@HQ?_5KR`tfo>M&KeSh(E>r&qC20Ld7R&"koUPL!%ep5[k8VnQ^-SSU6ZKnUa>p.a&+4bjr/ueV8=cR#$)QZah)OZc+dmF(1Eh`hJ^TZc$d>CY(%e:hDsTJo+Vk;)NrWhua=-:_@5O;990Z"qZOT,Aj#"O$qJ^V96"q3+Qb9!Dmo"@&Z4%;KEp35VA-2S&<1>#\rUcOjRIXVn13]LF$LaGu:+XhSB1FmMb%2$VIG7JX6HB5pe:-^L<=<SY6,(mRp&IZbK@gqb=Uf-WjApoc[S*pnQZ(ag@QWPM'0pA`\ShVUrUF1-]e8=q3Ci8W`VYf_)pA1ZBXVk-Sp.g@c)hS^.HeEV]1*M`O2K$BJ42RFeqG1TETE,S/7MXb(Z84''0XFJ/LIq<+?kqLn+QrmQH?SjZ'aF)<,(*lBsfuK<hgiGURr3dPDOG,T?)'H4*bCG(Tm>MGqEXsO7U_c;+a)CB]C&bp&BZ0,0Q"t`n9R2GY$m*n4jsr-(DT0amGhGErYlQ0=K5hm%N8]M]":Z:ItH\"Ot6]i+A'nFp@lrV#pP__nB55(?7Hhq8c0H4o5#i6Zm_F]SX;u&+]lbqu~>endstream
endobj
44 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3017
>>
stream
Gb"/*CNJK)(B*Z.EBg:eLP=TXCo+Qo`Y5Y,0Rtsk>HVubW<'t);PXMXs8CdiOq8`ZM(siG2<>^.e?-I@\*r@IX0r-Tr^bFTErg57L?=a(OppA"8?/?"p_nJ=ZTla2\>S1!6q,Ose^j8KU#KQZ/,oofB.iYKJ>sK=/BKrCj$c4AqYj0I#/DjrN)h2jh@lQ4]H/m+J<\=m+'<?N2u)EmJO<b:la`_P;"+S5>+.!q&,=[]&b?0Rc`t`]G;0":`p^IFchOi/-nDTrMu"$;a*3ko3Q(iJs*m6Hg2]j:,hW&8IQA-!G`G`L_IBW$#=`q_<?&]F?DPj*p3e[/NBQk/bHeBZ(k4*MLmpWtBL1/O]rd,@m]7V>>#L8/,JQT=&`gGhTseosZ+er>7Z70KWbb'PFRO*bHGaX8F"Jpo!=",,]Gli<JK'@`)#B9;IY>Q,m]k4Y@Lm]s=>[Btm__,[E"b%6'*VAr0RKXe[/[BoB1_)]Q6VT0?HLUf'U&,TUDo;6%VBNiSkiYU%/PZ68j#PooSl+%Cs.^5J=majfP6&cdUY^>>mKiZ\B^CakuqC0+W=+0h9Yj>9eIGf0od(eqj*52*t?XN;)F@F6j*ClSZT"fc?a&od7(UPf,o4T#[<$F,?GCkRT_Y_I.;fdWT-,D$Z%Sn^rVIi[DgR&p,QGua&o(FR"Wit;u8)Q4p#;mnF3T.q=SBAl+%KLA@VkfKAPu?RQgR[Tci-5.EBK'JW7'm`M7>km'fbR<$Ll"AjCbt@%lN)rI<fnIsR2F/J?V/@Jta9+#.*KT878G4HqKXR8!;8HGOM)(+6Ra(8pOPc?<hWA4#K3"-Z2!VZIgaKOF&]JhgdI7_j2`-SLKMMY4SQ>4(#_)$SJM>DZ4YVMo:PA2(D37K[P6iJYnAPh@Cmi>JYiHsQDV(1cI#@0NY7T'-QTMr@D2=gC&6S5072!=PO003.r:cc6`e6S`$LY=cUJ)M=janhE[I(ed2_#/!PH0ZdiDn1&.fe<4O]X/#d"1(F$I-pSHlXUrkCROUk>TbKfp?'>C[;>&oYP*'pd#oZ8aTObl9.AJ5r4nQA+<Nh<%J(s5el[T-bn3P%HDe,3m#>(9)'=+&71.j=8Uh"HMXuC:[r*3SeZ7)$a\_YCA?8?I`;VE$J*uC3$Ru`fB`m)OmV(2I&Ua0[6BqWld"+MOrP&^U"61FC.lCfA:3b!X`V%tC:IH3EF!Zg\2`9B2*ac/UON'2AR*CTJ1q043ZS)UbF*80+*Ws&9@b4Q=rTra`Z^mopb,k5J:$S*)K6(NdP&m0[(Ap7YoN?);0;00Z;J$FW3/UR\]pc@7.911+8a:TgrI`##<k=-_oP&fWYi8u3ELiQc/i;n/[(l"7Y`!mM@lOn9QB*iq`Dap??q+)59/_3\r-&ZX[[7_`NaNirSP&[Oo.(FB]0q3.20;!`BBdM4m9Y&`/]eeXO0qY&J/Otn\7AYM`)BhnM9:+=,\g2%h!ta%04DNk/r0j''G&EUVgN:gprKS1i&?Y5@H:b";.:*cG`&8IEHfOhf[^Y_Y+X7YUJk8:P3X5AZKWji"3X[-Q"GZ7k/<3NppO^jha*Z"uil]<sR5oQ2#KJgbc=9ig;kGS+.&K0s]-\0s4n=7aDP=I"?H?.<o7%Im8klh*ejWH;`'.p/k4F;h52n2OF$RYu">'tr\D7i=)riNQA:j7:9rHOp?k"cHaq_PNFGg3U3.l!1!?+qHNg.XcBDakj@-H9SMi>,??=4On9>AfRS"@qhi1RZBkED5p?3W6IhH/m)S6'5-).$?QQ(*d;V<uJlS<mcUe96QVC>4,T6TV%aWgG6$F(18K&i[-a5*9QqX#E[h'+G\^>?-jj;:gdonuA^QTZ%ppc$*Hi:Q"aX[=2W'4ZCM4Fs[A]4W5QfR-i29jM&3(kC5`J^AUUV"F6O4rc/R>Il`Jli_PqdC^qVJ_B?]4,Xj&f=#B[XCee8bl+&F,;W5lNWjIJG+rAi3<)HFQe>2o#4^%Sf0r!M"b7Hm-5,DUZ\\2gd1BPb0IC.[_H)Hcts%@V"pQlA:r6nJ;_kcUZqi+"T/_80MBZ]INJS/1,83WK67EnX7]mXA^bAEmKn:^4)098b*W?<1u-)q'!DLa/#SF["*,MEV[=So9e9)3L@#.Djpk%&0ff"$^kF[aUi--_K9S!DhtSX+6aNMJ166ke1'+.7AgXe<^+?s>E:R+:FiD8c.lj*J]3EGYB+>#AFsF4!2Xhb)SDSgRc56@ZBplLc@g"="VI_n25NPaE.J@^;LJf_S6$7Wijo.;QWW!RJ/FDV_eu[48c+k@c!daQ<9',7OR-(KMiYT\;eE'^o.]>r$77i3N"a`;4egg"]de\=o3_]%lhl-Xk*Y#j5iAY!sHk:[rlap5f3)bik-$l_('p_%a3%"ete3hqXpI=,?<prbF+rLUPRC>*4uD*=F8eAftTAob\XN;YZ:>mI>sV3JIAs2KV78&%qh'gDU,Iol+4'cuC/ZH>3q:S]dKD5OMI1e)e"^8?u+:BOjh044M45BmD+[+!LdGR@[>nh[*,GF<`%#q]VQ[+6#jNl>L[*#MJLUFNk3*Iq`o27YL1>r\&#_TC;Y_<%c%7Qa2Z;^EOT'(Y!"2$Ym'Q%S4BOik-`bq*HIHEVC/ick0JWp&Q2#a3:Z;q.nPJpL\D0\c>4Q4:b[L_o^rMm2.Z_)uE)#i+JZ5\q2Ub@sP5@G=)*%Z(%MLh+5+0ZuoM(9]M;=$DQ<*7NN1[EmgXnSf]:YVO8,/n,H[^jY`0Ye#FFrq4?^Jr^V+3f*W.;j*us%?YX^WB!6%EZ<o3Q0fbBSAOEop&(N8g&g0_<r`2:UET/'b$%>29q9Iq^31`^3@Y&G(1#,/%W7)3;I_;cm'5El?B)H<DGge*(cZ9GSSa4,<S]@d;B7)r14^JSE^&RN7g9:,a[edY>l&>X>bhb(A[5NmNf61Rg>^K(=;qneir&KV[,R8GMXXJDp4=>oI?E(fh?S#k%i\I4Vr"\H<`Uk6A^jL8;XO54!dF3Z)3[g^&N4a"H!GDE7?BRq"~>endstream
endobj
45 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1512
>>
stream
GatU3;0/I&&:X@To[?i![iurNg`)*;G\*TMP,k]W'fCP>f`4BI0^J]6CX@UT\N(:[;IHA7qO=\'mMR8]nWM%E0*8Y&?ndj2P/1:PU^.;eF"j0A92@TNNlHZ1PZ6#:+[5)s%P)ma.p_mY1m1A%W4F*Eps>@^OA]2OpB5miC1@F9pVS,\4#'8W]qWULQr`40s+>%l#cU444@6&KLEiO>!kfG#B%,D1.6>URR.GjIE'Ju2q)!`E1S8Rb"Ig_`-(OfcJ2pmKDheji/:%Y4l9Bar$I00$c3knAGh$KgTe)/@d:Y^==A7+*V\t!)_%=Y9E+13>.JPn0q\`0YM1ESeXqc@6@kiO!5a1`("]6=]&lY*/D&2nT(_aKTBhJ=;;u_Qd+$F$`CPjT-o57k,";P69Xb[PUAJTlW%@(ggp?JL>(4U0;X(H`>D3+6LlG0lWLFhcg<>Y7,08FOk%>kj"(l_Nm_*ek=9p;r9WRD%r:!e[aoFKK]rg-suQDB+@\P.dp<%d'0n.ptOCfG8g1>XBeZ6?slC@+i`"QdneWR,)Uar$()FN7rfMF@UOpefHrR)PSm1$+d-+ka[MF6JnU>'S&$oM2!K\IFqJ*m$D.L#0\I.!AkaP%5HfUb#kk?lSm*6'5C.s19>3oo9EOP:%J5B+ZRc=C0Rc16'Jo's]B+!CP<t1,-tj&7,GQ>Q9"i1W'2<4AUn+Otu#e,_68ppbE3I4*@A(K\K0Z?LI3=5,Wd\Cm8C";Wd.Ka\bD"jp7@-%a[b.6s9>&QB$\lAamMm[HKeT54dLH8h(1o#tHj!DbO-[e@nOm/CU!AQpTlOUF^1WqCI/^[V#jjO(cc3JdP=N57\Nbg!5[AK&Jo#Wr)X!N6;Fg3,@">2*el3\gK]Niog'EQ?o*rI[\XWlb&ZHmW?2<]3=G[V)3)LN_gcRD1Wfcc!pO52i[<k5XUhOCk9(e_F!_7agB=`<.0-.`m7Z<gSna`CHE1(e/V_\^feN@[Vercea`Ejl;(h#KL%t*.8:YljFR&aKp\[K"Un,kWbc1Z]WN\4pH)Jcd/Tg/"mudMN9e""<i[!DE*)HU5:f*<;%28R_fdM+'1?<<n?7k`lJlo)F(8C?1Lj`Iib,4VRBa^1A_:Tf<g?N`D(MfCCD^(UU8Z+\O5]L\fKZ-QnMnYn*mu6t=qj7;cU8f,=Y.g%f3$=5==M?M=RXgcp'.)mA5*+%>C_jdXqWIX>.%/EHcAhp_!nRu_cCT)!'f!pdW'7kRnqgr\XY=ef32_k-&&6Z#lS[1)R#9p!phisI7_M'YR9'!$[e\sQ(^joYch?U>V7SJZl26R&IUVl:!pbMkejPc?!51s\2E&Yk-EugOh'eB,b&Y4\Oj#:r+N:MjpZXUpV]Vf6eU8sj*94A.p8,,dmTF_Xp<F]:"Ml"0Zif/J:s>[j\\Fo?%nN^I@it3-(!&9E=0YUBU`M,U</r6p4I^9Dp2k>GPBC%D:>q+Mq\T,nUN\,#m7oZqQM-J=4RVd/"rM^g#%_m;!@ic!7gp6~>endstream
endobj
xref
0 46
0000000000 65535 f
0000000061 00000 n
0000000146 00000 n
0000000253 00000 n
0000000365 00000 n
0000000512 00000 n
0000000660 00000 n
0000000808 00000 n
0000000955 00000 n
0000001102 00000 n
0000001249 00000 n
0000001397 00000 n
0000001545 00000 n
0000001693 00000 n
0000001841 00000 n
0000001989 00000 n
0000002137 00000 n
0000002286 00000 n
0000002402 00000 n
0000002708 00000 n
0000002786 00000 n
0000002892 00000 n
0000002976 00000 n
0000003182 00000 n
0000003388 00000 n
0000003594 00000 n
0000003681 00000 n
0000003996 00000 n
0000004071 00000 n
0000004208 00000 n
0000004309 00000 n
0000004414 00000 n
0000004528 00000 n
0000004683 00000 n
0000004808 00000 n
0000004925 00000 n
0000005052 00000 n
0000005168 00000 n
0000005285 00000 n
0000005400 00000 n
0000005516 00000 n
0000005610 00000 n
0000005692 00000 n
0000006604 00000 n
0000010425 00000 n
0000013534 00000 n
trailer
<<
/ID
[<604792abc998f7bf7e113332cf4628d4><604792abc998f7bf7e113332cf4628d4>]
% ReportLab generated PDF document -- digest (opensource)
/Info 26 0 R
/Root 25 0 R
/Size 46
>>
startxref
15138
%%EOF

209
docs/TICKETS_ROADMAP.pdf Normal file
View File

@@ -0,0 +1,209 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 5 0 R /F4 11 0 R /F5 13 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 716.2874 172.853 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 705.2874 199.845 716.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 45.68504 694.2874 167.949 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 59.68504 683.8499 130.545 693.8499 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 14 0 R /Fit ] /Rect [ 59.68504 673.8499 224.3325 683.8499 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 15 0 R /Fit ] /Rect [ 45.68504 663.2874 192.861 674.2874 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
12 0 obj
<<
/Annots [ 4 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Contents 26 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 25 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
13 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Contents 27 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 25 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/Contents 28 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 25 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
16 0 obj
<<
/Outlines 18 0 R /PageMode /UseNone /Pages 25 0 R /Type /Catalog
>>
endobj
17 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Tickets, Gitea, and alpha smoke delegation) /Trapped /False
>>
endobj
18 0 obj
<<
/Count 7 /First 19 0 R /Last 24 0 R /Type /Outlines
>>
endobj
19 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 20 0 R /Parent 18 0 R /Title (Gitea \(/app/androidcast_project/git/\))
>>
endobj
20 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 21 0 R /Parent 18 0 R /Prev 19 0 R /Title (\376\377\000A\000l\000p\000h\000a\000 \000s\000m\000o\000k\000e\000 \000t\000i\000c\000k\000e\000t\000s\000 \000\(\000t\000y\000p\000i\000c\000a\000l\000 \000D\000B\000 \000i\000d\000 !\222\000 \000b\000l\000o\000c\000k\000\))
>>
endobj
21 0 obj
<<
/Count 2 /Dest [ 14 0 R /Fit ] /First 22 0 R /Last 23 0 R /Next 24 0 R /Parent 18 0 R
/Prev 20 0 R /Title (Console features \(implementation\))
>>
endobj
22 0 obj
<<
/Dest [ 14 0 R /Fit ] /Next 23 0 R /Parent 21 0 R /Title (Attachments \(deploy\))
>>
endobj
23 0 obj
<<
/Dest [ 14 0 R /Fit ] /Parent 21 0 R /Prev 22 0 R /Title (Google Workspace \204 phase 2 \(not implemented\))
>>
endobj
24 0 obj
<<
/Dest [ 15 0 R /Fit ] /Parent 18 0 R /Prev 21 0 R /Title (Agent / engineering queue \(from your list\))
>>
endobj
25 0 obj
<<
/Count 3 /Kids [ 12 0 R 14 0 R 15 0 R ] /Type /Pages
>>
endobj
26 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 711
>>
stream
Gatn#?#Q2d'Sc)J/'_]eFTrcnA9Vb:<7<n1>EO(BWH,fuDSW.%=d=KO"%grgasL:\87:D;oD!a[3>?jgB_Te%J;Y,S.0[j:SHB<m#jDe'V1YZHh6%/HM%]63&B?NqK2II%E16P.$[;Xs(e&nD!/W]TKbTtbJ7m;9Ql+6Y6SP1G%Dc-c@$D3DYrKVr1l#M>ZDD[:*3PQjiZ*Ws6'V%/J?@$n67to6#cEVFKCfc(:[iZ0"9e^\cS=X>')i6_I6*66*.AEl"2["L[,jedr:\/?%&])a+T6W^m4,f]s7Kkaq*)M=<W7UC*tB>*QGafanHAsL/a0Ajolou4=*]S#GUOl*3FkT@WL`DWLuuH:IdeO[d`FnhkadVc)g\6]4nQ$7.aNcjpN9seA`gWl3H')lK?4X!`AE%-:2Z858EeX4b!ZQ"$W&j*5i+?MgGi\*g.q",#S3cRQ@5nJNS(55EG;d;B^K%3[q]H##?B<NXO-%25^MrGn)pAfYW#!:pnfT#g,^Ue7>oO`jK^D_\edka>)mB.$In4IBpQ1CR=lGf0qdu9!^e_[*:21<Gq[,",?9"O!t1%p*_9Qb/S1]!!Db5V6HnE$D(BD.C7nPWo`F/5U'^d25Da>I[gPCHpqh['GDC.*r,SV-D,drGf9h$.YEp#rd/m,_DC8BXUZAat/@^CQ?rqJf)RKMSBJ`b]d+Q8mQ5nZs#(HXr8XHF~>endstream
endobj
27 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3969
>>
stream
Gb!#_>Ar<,'n5n\+A`c>mFiJ8]%ahK*';HCS&F19l1VrD5td^c`Yq_%-"E]`IsV^*b@i`D:9m;s,\%:__fJ'*,A@Udn>",*]er-[ma1l(6Q/F<$`"YtJaVBgf69_lNjN8m@4IRQWWob79>RW:_g=ng[85-ah,^qT$*%J"VU7QCFK,XSNds'j@TV%*h&9]QpmYW!q7Mfa.Z0R+p4fE.T_mCQkjC6#0Tds,B6+\SEt\=(B>-m!oHB+fBBl>b,tmF?glg=VrWi8Dh-Yg>Id:Ch0GLpc7BDl.7nj_jn"a9\>paKqa+/I!e&QY\=n+'4;,#Fi%T1OM06cmBJI!MmBUYSFoP'8]aHO@u^W3?W]N/tOOsqVDe+K1'9<MK1'M=RR94;IO(WZu/8EWj9XO)R'+@2J3$ReVK'LcP(;8A$\S;uM0l\DNC;c%&V>kSQAQI'nE-YT%s.:SteA:Dg8P!)8[>ob/i/B?sI_d2-!2u,#k\)h[rVGV@p(\UOeL&1_Kn9?t[Xg=Yj&&&?aSH&H;r*sq5V@h]'<e/*oO]6_<lLCJ2F16%s0Z^2sO>X/V6hK[:IK6#*WiGK4o*@"T>]%iWp!T=feLGM:G^Y#7+N!b`FJ,?(H#p?]RO@ZLH2[a?m0DQcLSGH>>&'C@21<9IqOVE)?8i>G0O2+uiNqP6E7(3N+4np/0t(?=3c2S7H@10eL`hmQ`='B"WMb?cUbP_U&u@]+i_$\ITC"^;n:EP\IS(/U'Np\I88uD2=\O7Ni%`/28]tKHO*fhg>cM]hF7>WOCdA^hBt8mmTE^f.)3mWB_sPSR_]`RWl1n=Xc_lJ!14'0U8SKS^VkHU__cATedBM(85p/&BX"E6Nihns!c;;RoI0M2EBj%B>?SWrbRY:bGF+G*hZlXf9!#<O:>HXDfS2u"eUn!Ln.dl^5L7J#3AIWO`7c'#K:I8QhaAd0$RbfH'pXlirH)u`-c23TMcd61GT0W&c\$q,hC?VM<2biCM@NI/JO9&&jfN=Hj!uCLD9JfE\JXS\+K`g4aVBKWqU4!<pR'(]a.XSb,JnN>kKS@T)[RSs#<,>QW3a4oaR`]Zf`0TmTLfOX)CQK@/b^0ssebq%IM3pd7FSQ7uIk,dCE_`\g2r5Q@Nrf!H`\`RMm6\G?b4oosGT2OIK6SqN^dS[WgMiO%%J<64pE8REJ7o==9hCu+rCB_U=Hn@-`"YMkeO=M4:BSR`POt,<bCOu5RE3b*RO!dU@,9=pU:Z_+4%QVNll)=k?_M_hE'X^O\qVeY!jN'40)bo/`D8Ka[q]tLZhYS0&i<GVZ[>D%g>:PWm,GIm#70)P+C3G[J777Re-*e)91sA]Mu&M/TG`!Vmdt\gAZm^8\C-#Gl)PrjnRG;"'aMs4a:b[EN-%t;3`[f^3f*UD'j]9`b.;"3L?]\4:qi_+?':HBYX,uu6A/@"0sEZI<NX!82F@GmWLiE#Pcn5\.Fg#V;?O8\]_sN#h(H;<ok`B\j9[9tWRN!c&\7u=Q-i<+'g>n&3l5DR5ODqBN&B^UU/R:QM3EidTtZe^<9nlc8QOXe5T\LSC)E#9gN9IY`j":Sm`gkHZi,OPPdf=^&X,(@!+M\`(sr'_dSFmgWGM[i]_a((T-Q622PAf_B"IC(l1/F]6]VU"I`Y-rd[)bsjro@PJ*TFf^ZN3mFS-eZpFA\\W\b;9Lm#9g]T+o#%c-)B=a)pSF*$!D-.REQ?+)oBI)^6GZY/-F/=/"<&Y6bBq$ms,=RZ1c!_"Z7!J<"FN]sd+"Znn[MZrLSM)?VEn#Y(\)O4$o'0WgZD).[I#G/4)PZO7_+f'@E[FCHW)jp'S&@u0Rr!0JW;]t*TKFcRV$(s5Yes_B@X=$1(?:RJ'!cA[YgS69g9IG.(&)0L]-RZabPXfRN:a.I+d0o6QGQFqXB/qG!G<Z0KAnu]$#^C.;?<rj$4b-<G<K1Vj!c%-<O6KPcq6r3[b.IqVZfAWn\*h:'n;e:3HV0GKPbb+Q1"-a&htq8q<d+OD/hij[\NB-Z\93G#:U;,l'T*Uq+aMd;Q0n:;+gNA07-%+0nQ(l\P+Y$^#E].c'?PD&caGQr9_<eB-=PI5(M\B[iLMnAO=9649h)K/G]KgsJ=u!)4U%r8C`-.7F_'H95k`u&O2ojf&MX>4X]U1&m^7rNGPLq.89(kNQl9^gIXH2>fR?aBiq4)LM8oVPas"/VT^I30egAtFF:](@\ip7XeI]OYq@GcT6\(J<,OeYBfK1)-gN<K$f*:04*!!'E)h=i,!:R"?b;Fg0g`(r<e\bE5N8<9]`-CsZ*S1`FpB*-V4d>!AF`#8<fN)6_mlmI&+A.T%_W5!l$aIqrY7^@>8A+08>N%t$%B.p0:*G`Fc-0MOU+/uDD<lqRShb',f`22EY1%g'W]R_Z0Q@o2#TL.$jI&:["I[n'$E/an)7;V1U"hrN[SpCZBEq+/#PUr_6hY#kiVaVbOSpDPGfL1r#LJ0MI<5]QLRd4EZ7QeujYe.\<$mgC"_YrGH+j3's5&Vj]p&<+aR,_f8a65r@N%&.gai0ML2aj*e[NA1h`%<uL#O(k)4(Nn4->e4cI?cqS2]VJ+NZ_sf^h&'%Aqh,o6Jtfc^53XDVJ:YmEFFnAXk[ZbnDPVBF=>UUt)&sC#J\O>I.IU"5k?&U4apfBFM"o[pfq7>L7a[7dB[L^REZ!2ZTj9jPb/XTYhd1cYrX_2(!Ne(\Q'#VSj:k5P_k2(]fVi]nnlQF4q.97l=:54;iCY?5"+8..%1p)\@#CZO=$l'%7FVi3/?/T<-+8M?;58$8a?sJE$&>###&qX]h!55?k>lI.^![XPm)"#i0[b6gIO)7s!RF\XE?4&l2ND)pXesFPLIZh+Q/iZg73V?IN%A;Z@S>X@PC%:P"99kMp[4M]US'I^:4)Kop_@D3RkS*\!>>Do2bDDEG&%,B6",Ylbfl#WY!F]!LeUXdspsg@jjp:;:[a0nI&k$1oer^cTmFf8td%Mb3bLqh".ZefEM2U?cRgog<QTC-ohgS>(.M8oJdi(EFY(roMTWi%JS8H*OMRMuNN!V@+HK8X`QWL;]n*^YJ5$*\6D@nhjXd,[UUpP+e97'V.XjI_hu<mf!O?B-R3@A1kWC..c6lO['n@rZ$a<f4>(4F,8M)+qp0BO:'4c@bqjWK]qJAg2&Yp5"Wk1q9/8:.?DY)W`2ruRP[H8\^P^=:mImGR1=PZ@G#_+fllu@bWCq-:Rcka!_lSbbMD"!XgepeL5Igoio5t/aWRFXA@\MqM"HjWcir4-+KpUIJGEZli%enOkqNh(-;QbEkR(!ImV3:;+k5s0jcubJHVt3?aEop!pI?0GS*t^Dr*REebl@FM62F^?I1c35d9!c#Z#<A][SK_V<mffls)ZAce.F1Z*33(N@q*#'Y.t'06p-ncn#4Ik@\XW;:mUrf_HjM<ek\B-7iC.-)`&T-$WBX]F;Fu(HrO>j4@ZWRM2d)i\2f9^,BnDFnN<Csi[Tb#9_2u9G;`\.pr'<s$?<sB6NFP83tD>DFu6m"[iIO@ctu;%N@Q@5L7LuM3?I,8`8&\OmQ7l3"/X,8hh$3@*>tXrE\NBBNfHLC"JhH`61KlWKB(q;KFUXA/V+5*J`T#CaEADh;'$#qOWa*%&X,`?h\AW&$8<MRN@-9?Gl]ljOCUd&M4aQP20=<;m^iNH;83#8>a0G0&8WDKI4!:j^a`k<c@e=n"?f(bPAe!fl8p'cN2QP7I2"Y-A6cBmoLO7C36+$^"H?:9Ko#!Oif1aUIfO/m/q]jJ`79mc2rPON(A5QGB,kZck-]i-)O^UeBN"?NM+h0U@+W?QG?>k[Z-*H;%i%9^.1=(dVhE+8p+L>sAZ!PX"8;/3MM=Y!AW'W+iWfU*CEgJr$ZlF6P(rP/JtS3C:eDd!rS>XthT:6pF=EmuWW3Cu@IHe3aQ9I4E?$I$caZ4.d'l]-"^]p_(jHoEn1'J:l_pil.Tq:dY\dS"2kh<]F0Sr>@A0Ir![Wj`)?~>endstream
endobj
28 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 735
>>
stream
Gat=h:J^")&B4*cMC3Bm$ab&F[\05'@Za]qKj=jr&&!4O8`D&(KC)Lsg[@-"O_C`&WZiak`\W(Y2e*4(q%;FE>le:G%'Bb%KHu>/q_=7<HqTKkNl:8+GheorN/'-bdqO:k\r8Y1_ji.3CC,Q&Kd[;MKBoK5T6J[+Ck:HU+RLl`ksB).X)rojL)Rq7QWpd_CDr+'3PR[:61Pi6QQY985G&7M7/cZ=69#O@Lgg)8G%_[6V2.=H*J2Kfe2nGI@QqZgmcJZdpTu!-;)H6FWiaC3P[KK;?5\`$e<Z[@XcZfOar)2LdRm=!Gj`=":eP0hpRiBo]57F19sdVNAtP-^iAG&H9');GBgk,1k"V^8;H%.G?<Vg_9.;gCSO"3uEg=B.H<Hm1$<%I%>WpOEZ;QCr>5=>2etp<43ga:B6QD$%q`!4U*X,;A'J1TZQlVte8@leRcX:qabrL8MEPHVLEpn*>p9!cH-1+DoD]+N^+"P'\n7m]K_)IhPVoa!41k9@a\rRLLEHps4D'pNN,5I5@3(IkA&%AFO_ppmW=h@f:0W^nKX";Ao`SJe^1/$H=LJgr/fY!MsXnRC(L536^]EP^Q](qTN:02:/et#$s@-pWVE2?]!BHGl?5-7d'lQ("UiCe22-KfWDh*)[Wo&/@en6TFtO5r6>;R9P\o<l[S2!.DCHo8KSRqsCRNIB#$ZeeA<h-;?GZ/Ai0CQ!=,3o%(j,nIc4o1^$?oFE=qNLT~>endstream
endobj
xref
0 29
0000000000 65535 f
0000000061 00000 n
0000000134 00000 n
0000000241 00000 n
0000000353 00000 n
0000000500 00000 n
0000000577 00000 n
0000000724 00000 n
0000000871 00000 n
0000001018 00000 n
0000001166 00000 n
0000001314 00000 n
0000001430 00000 n
0000001685 00000 n
0000001791 00000 n
0000001997 00000 n
0000002203 00000 n
0000002290 00000 n
0000002607 00000 n
0000002681 00000 n
0000002802 00000 n
0000003122 00000 n
0000003291 00000 n
0000003395 00000 n
0000003526 00000 n
0000003652 00000 n
0000003727 00000 n
0000004529 00000 n
0000008590 00000 n
trailer
<<
/ID
[<7f14806cee8a14988600c30857cea804><7f14806cee8a14988600c30857cea804>]
% ReportLab generated PDF document -- digest (opensource)
/Info 17 0 R
/Root 16 0 R
/Size 29
>>
startxref
9416
%%EOF

171
docs/USB_HDMI_CAST.pdf Normal file
View File

@@ -0,0 +1,171 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 7 0 R /F4 9 0 R /F5 11 0 R /F6 12 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 716.2874 89.70104 727.2874 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 704.6874 244.437 714.2874 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 694.2874 161.733 705.2874 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 13 0 R /Fit ] /Rect [ 45.68504 683.2874 271.237 694.2874 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
10 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 8 0 R ] /Contents 22 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 21 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
11 0 obj
<<
/BaseFont /ZapfDingbats /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
12 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
13 0 obj
<<
/Contents 23 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 21 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
14 0 obj
<<
/Outlines 16 0 R /PageMode /UseNone /Pages 21 0 R /Type /Catalog
>>
endobj
15 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260605123817+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260605123817+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (USB-C / HDMI and USB-tether cast \(roadmap D & E\)) /Trapped /False
>>
endobj
16 0 obj
<<
/Count 4 /First 17 0 R /Last 20 0 R /Type /Outlines
>>
endobj
17 0 obj
<<
/Dest [ 13 0 R /Fit ] /Next 18 0 R /Parent 16 0 R /Title (Layer model)
>>
endobj
18 0 obj
<<
/Dest [ 13 0 R /Fit ] /Next 19 0 R /Parent 16 0 R /Prev 17 0 R /Title (Phase D \204 external display awareness & future capture)
>>
endobj
19 0 obj
<<
/Dest [ 13 0 R /Fit ] /Next 20 0 R /Parent 16 0 R /Prev 18 0 R /Title (Phase E \204 USB-tether transport)
>>
endobj
20 0 obj
<<
/Dest [ 13 0 R /Fit ] /Parent 16 0 R /Prev 19 0 R /Title (\376\377\000T\000a\000b\000l\000e\000t\000 \000+\000 \000a\000d\000a\000p\000t\000e\000r\000 \000c\000h\000e\000c\000k\000l\000i\000s\000t\000 \000\(\000e\000.\000g\000.\000 \000D\000o\000o\000g\000e\000e\000 \000T\000a\000b\000 \000G\0006\000 \000M\000a\000x\000 !\222\000 \000H\000Y\0003\0000\0000\000\))
>>
endobj
21 0 obj
<<
/Count 2 /Kids [ 10 0 R 13 0 R ] /Type /Pages
>>
endobj
22 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 656
>>
stream
Gatn"?#SFN'Sc)P(%9[@2q>jlLVrQ2!p_*]FX"GbKN*5RJW(jd[TV@7?RMPK:s)lt=iuMJI*QfYGn5Vl(2]XW$!\b>N@62B1'7tVJ7OUIdeVFe)p9?L;&jl_39S6OqglBBNnm.8ou3&XLgi\\c6N(UA72M4e/L-hYkCf(R/*EdiqF[Y`umKTrI@5\dJYu6357il=+ffl&64I2_b.P&)Q>D+e#l^q/&_ht]Ye]7G)#'*P4prn%I1aD\oe9BU*SO2PL-*'LgpCdkIZ$8,cif&/&[nYH1f/oh2t`L9mKqfhd1c#,c&YUTT2j%S?SA>'Sd-F\i"GoYL[M+PBnf,g[qbQI5_a&$4/RWW[]MLCJFkO');4rr_ns=VF\(N4r+[3IAP(sEC*pVIhqdTo@E(_`%a"&/;0-\-WA#EjLphi&d>SrX:"ItE@8,pUbPV7ZaF(SknLS+hg^E?qWr\HVhH,!OO)Eo[A_;ABmTnUr"c7OUhPKknGshT[A\ju+k("b2j5W2S7&#>>Y6tCI#`.tma2%.7fJFC.1;oq_/9B\IJ5nnceKR5Mn:V\doT$bMF'Wg#&fmi?uM2UC9:G1n\m2kXYDT=\Z/Kee^EANkp>m-2hM]kkOMA_"1o*[B"b46k0>l*'32V?g5s!qd<Plj;+gT~>endstream
endobj
23 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2569
>>
stream
Gau0ED/\/e&H88.EM!GJX(AufDEePDS?<`u`f6Mu!t5m&7,)H%;'Vp5q=csK0:$0"<gjLflUX,Zn,8iQ%FFWTW;lf5i;E^H*t0hs=KK<B2&d='i*p]smtjn>g5b<U*SgqG)f*#BZ#Lj<j$og+AQZ0m_9b&0DO1dPP+Sm@Hjt_7,iC3^i1,T37)g[4"gA6Si=m'bE/.T_)#PD?0:_#j`H..-'%ZM9<#`t9#I#3':1p?@q/#]bp@<TVWkn*#rU@HFZWd6mVW7)bW0]\CY:bA/,g@_RO:)Dl)GAO979f?'OOF3nG9fpS"@4HaLci)!',g?/hn\8!oJ[<g&2Y]'A5pr.IYGUqZP]tW"^d]JjXan*MmR4>?1S4a#MnERVJ^b/4WO[&ApLu8:#Jc'a)^Na!m@VNg(@`6#VaN?s/(*[#/DVWK[,T\5bh(S>T$n'""jql4\!o@VWCpQ=VFm2`h7U;3O'%SHBR2E=3<JL9Z(s\LiLKbXF<U(nl(_(j$P)\@V8(*]A-pW8,8mf>7u<sOf6bb_,E("mcB];Na?C$=_ZK^VDMu2@%niC=g?G)L?!$[Vb_blnJ1^U,RHopakY;lRUI/l%kq@,0[NC[6H4U4,ISsVfuQ;?2OEOu37qmcr3o;?396V&YZf"qTC&G1C:E-7%I.Yij&[KLld@Go"9\E.A-!QBB0`1bL&Q)P^0J_)/-D@9a?>'c-`g57i-Gk6%j.`HF[Uo)IJ:Qcg+TpM?(r9VP?mi/AT:a^m'uH-6T(]SH_YHT.iO(O`n<<9B-Bppg8+eGQNjbG/3$3hb':Au[H1b5LD^V4_Ok@u%WWY,29@c&(tpZMH@Tg9)+>Y<U)>Ke(X(8K[X@M5U/&0-\ssMK(_=PPDE^iLkG,BJHRrk*<m]qW>$$fqfq_.Y-L9\mXd&8GX4d444Nm3IRC!s@I%-&+YD$QAUflgLK9l?Is*ZuV`hmB1#.2-`r]%a>s&c[oG['"o.>#*6d$sLsS_*_(Y!I&p%JHU;!^9TlfQS5Apf&hQK4ump;mB^i<oJ4I;Z0FaAEe!j$+X;*PfmFFY_;?,Rd#.S=MhJc28KZ_^hc@L8PK4OPd^maJ34H>'.O._!inH,\HG6ur'$-k>gq-6>,[HDPLqKOJ0Q`-1nl^!19@7o_2@>G5\+;+T"aT3Z=+b3#<&mY`+QmUd_MEU#Zn./l7X[p1WK0.Xu%9@]72IV@EC3r/!=D?.8;6f%G?9g@"G$R'iXD1!Lig&K&RhDl"7i'5=;E.dbCU)kCmDY/.2>=TWGL.YQ.*C`R9E#X=-PmNu3fF<bMJGH%u!jLJlF9Cj>5AN,5oVT*UZZdon.c1O6'H$PBgO:_UXKMI]-O=Y?q!<^NZU:YZXmb@8,FY[c]@HXQ8_8e]krkEJ2a5&Hd[drd(g]H^?2Of5!P.$=rEWkBD1<'na1]4'AHNUh4qOE*JDM"RC^:l0;27[?58fb.41Z6>(Q%I'.WNiTqGUh/2ek<D7\L,B&66-&3`&<aI`=s0]UA(7AGn):AC=3._\cD("ZoLcG.ZoB&^eAl]lrn>;i/ccCX2o,&'b)r@Bi&j?=8s5j+]A\AZ(;O3!B@049CN?6K+."\-=H&C0K6Re\SBs(#hkD/N1dS>n"QoW<T]7a!eI=lg<re;?htN;d(`s7-r>QKX*K%>#4G[t0WsYiUNCCXGFbF=hKTUN6NfHnJT*m?0RM!beT8!k+V:,lHkie%T8$n&&S7"`oNZj[X+jqQ&d2=oQW'fX<Go1,10WG#.Ob^k48?=cCY_5/_4"\hf:L"SCUB-dhUY('C\p(5)r*R7UG(4[h^D1r#AUsaTBBL0_^Y9N&ls[r4V\`>@K[W.'&4qGu=gACdg>_8]o6b_0ZhTFGrjoUAI(ZsL#Tnq)9C=JQ=;$megFCtTh7TJ,k,,@'"5RtK&1J;A73C:;qJ5EL#9rd-8`:k=%D\4Ghc5Lr.U"iE.qap)@fSp$SbfW3M'?d'=R^\u(Et?l-+`=c^3-MS4HiG\$="tE>+b.9-Ek[c.F$3^C@WtT2Zd]H`VE1/9q4\)rUH'SGL^NbEcNfIAE.e0b2g'-AVhk);X#ElZr=su4\`tXYm1kcV/1s!Mm!D\lH<<@afS-)_s/oNSAb%rDU6Ipm^B4Y<<Ed5jgBOZ3Sbcp-OX'015u44RJRrghog\h32"u/K.1;G8c]7W%i;CipMI_pQkdhhlc%-VI/M%5ok3]5[Yd%Vf:79EhM0T6G4Se"\.6#Ob\9b&2^fe&#W6/6)dc3^;04+?-ufQZ5rgU"Z!E++mla?PGI5FT-8>0f0IqZX>E.(cD_\Hqc*>]R'%42"7:CieQ?P;UFF@0FlL"^mWGY`>P3`=",1c$mR!l?Kp9Zq\Yd@?NK[N+Hbhn*<BGL)?hRXi,%=(loOf)*'H',mCZ<mlR'G3/S[#=d3FXVS$<V\2PA,>JcV6.Sq9$)9?7h$M=b>q!J*_(Y.[R\3a%hL62T;nrfL0]1;YmS745J'Ls+Ra@.WLs*KrZKm3^u_,r/@$#'*o]:/;0*fe))(3FmA&iHQ>WkOVH7Cd/Ip9!M40CR>ii:OVVD^09#[W(>8fKs%m4TSmJ~>endstream
endobj
xref
0 24
0000000000 65535 f
0000000061 00000 n
0000000144 00000 n
0000000251 00000 n
0000000363 00000 n
0000000511 00000 n
0000000658 00000 n
0000000805 00000 n
0000000882 00000 n
0000001029 00000 n
0000001144 00000 n
0000001386 00000 n
0000001470 00000 n
0000001576 00000 n
0000001782 00000 n
0000001869 00000 n
0000002194 00000 n
0000002268 00000 n
0000002361 00000 n
0000002512 00000 n
0000002640 00000 n
0000003027 00000 n
0000003095 00000 n
0000003842 00000 n
trailer
<<
/ID
[<46e22eb997e0bc715c5afd1f1d8a9577><46e22eb997e0bc715c5afd1f1d8a9577>]
% ReportLab generated PDF document -- digest (opensource)
/Info 15 0 R
/Root 14 0 R
/Size 24
>>
startxref
6503
%%EOF

View File

@@ -0,0 +1,43 @@
#!/usr/bin/env python3
"""Build docs/<name>.pdf for every docs/*.md (top-level only, not _pdf_build/)."""
from __future__ import annotations
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
DOCS = ROOT / "docs"
sys.path.insert(0, str(Path(__file__).resolve().parent))
from md_to_pdf import build_pdf_from_markdown # noqa: E402
SUBTITLE = {
"20260602_REVERSE_SSH_proposals_summary.md": "Generated from markdown — rev. 13 + appendices WG test/production",
"GIT_FLOW.md": "Branches, next, release — from markdown",
"REMOTE_ACCESS_IMPL.md": "WireGuard v1 — implementation and deploy",
"REMOTE_ACCESS_VALIDATION.md": "Linux CLI validation — device sim + E2E",
"INFRA.md": "Production topology — FE, BE, ports",
}
def main() -> int:
md_files = sorted(DOCS.glob("*.md"))
if not md_files:
print("No markdown files in docs/", file=sys.stderr)
return 1
ok = 0
for md in md_files:
out = md.with_suffix(".pdf")
subtitle = SUBTITLE.get(md.name, f"From {md.name}")
try:
build_pdf_from_markdown(md, out, doc_subtitle=subtitle)
ok += 1
except Exception as e:
print(f"FAIL {md.name}: {e}", file=sys.stderr)
print(f"Built {ok}/{len(md_files)} PDFs under docs/")
return 0 if ok == len(md_files) else 1
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -16,7 +16,7 @@ def build_pdf() -> None:
build_pdf_from_markdown( build_pdf_from_markdown(
SOURCE_MD, SOURCE_MD,
OUT_PDF, OUT_PDF,
doc_subtitle="Generated from markdown — rev. 1 + rev. 2 + rev. 3 (2026-06-02)", doc_subtitle="Generated from markdown — rev. 13 + Appendix 1 (WG test) + Appendix 2 (WG production)",
) )

6
scripts/build-all-docs-pdf.sh Executable file
View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
# Render every docs/*.md to docs/<stem>.pdf (reportlab; see docs/_pdf_build/md_to_pdf.py).
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
python3 "$ROOT_DIR/docs/_pdf_build/build_all_docs_pdf.py"
echo "Done: $ROOT_DIR/docs/*.pdf"