From 77a757cee6a25cc6f4e344adb4d2393837b425cc Mon Sep 17 00:00:00 2001 From: Shawn Date: Fri, 12 Jun 2026 14:02:13 -0400 Subject: [PATCH] R1: Dashboard 500 fix, Phase 2/7 uncommitted changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix dashboard 500 when deps disconnected — _gather_state() now returns full defaults instead of bare {'connected': False} - Phase 2: FX param schemas aligned with DSP implementations - Phase 7: Pipeline routing, preset manager improvements - Factory presets: cleanup and normalization Fixes dashboard crash on disconnected state (dogfood issue #1) --- docs/mockups/pedal-ui-figma-template.svg | 145 + docs/ui-mockup-template.html | 424 ++ dogfood-output/report.md | 176 + hardware/direct_test.txt | 1 + hardware/pi-multifx-hat-merged.kicad_pcb | 2252 +++++++++++ hardware/pi-multifx-hat.kicad_pcb.bak | 2247 +++++++++++ hardware/pi-multifx-hat.kicad_pcb.bak_v4 | 2247 +++++++++++ ...pi-multifx-hat.kicad_pcb.orig_before_route | 2247 +++++++++++ .../pi-multifx-hat.kicad_pcb.restored_backup | 2247 +++++++++++ hardware/pi-multifx-hat.kicad_pcb.routed | 2247 +++++++++++ .../pi-multifx-hat.kicad_pcb.sexpdata_attempt | 3321 +++++++++++++++ hardware/pi-multifx-hat.test_marker | 1 + hardware/test_persist.txt | 1 + presets/factory/bank_0/preset_0.json | 4 +- presets/factory/bank_0/preset_1.json | 4 +- presets/factory/bank_0/preset_2.json | 4 +- presets/factory/bank_0/preset_3.json | 4 +- presets/factory/bank_1/preset_0.json | 4 +- presets/factory/bank_1/preset_1.json | 6 +- presets/factory/bank_1/preset_2.json | 5 +- presets/factory/bank_1/preset_3.json | 3 +- presets/factory/irs/README.md | 38 + scripts/generate_seed_irs.py | 474 +++ scripts/seed_default_captures.py | 468 +++ sketches/001-figma-template/index.html | 565 +++ src/dsp/pipeline.py | 41 +- src/presets/manager.py | 38 + src/system/__init__.py | 1 + src/system/defaults.py | 206 + src/web/server.py | 16 +- test-drc.rpt | 14 + test_empty-drc.rpt | 14 + test_write.txt | 1 + ui/.gitignore | 24 + ui/README.md | 73 + ui/components.json | 20 + ui/eslint.config.js | 22 + ui/index.html | 13 + ui/package-lock.json | 3561 +++++++++++++++++ ui/package.json | 35 + ui/public/favicon.svg | 1 + ui/public/icons.svg | 24 + ui/src/App.css | 184 + ui/src/App.tsx | 122 + ui/src/assets/hero.png | Bin 0 -> 13057 bytes ui/src/assets/react.svg | 1 + ui/src/assets/vite.svg | 1 + ui/src/components/ui/badge.tsx | 36 + ui/src/components/ui/button.tsx | 56 + ui/src/components/ui/card.tsx | 79 + ui/src/components/ui/input.tsx | 22 + ui/src/components/ui/select.tsx | 158 + ui/src/components/ui/slider.tsx | 26 + ui/src/components/ui/switch.tsx | 29 + ui/src/components/ui/tabs.tsx | 55 + ui/src/index.css | 84 + ui/src/lib/utils.ts | 6 + ui/src/main.tsx | 10 + ui/tsconfig.app.json | 25 + ui/tsconfig.json | 7 + ui/tsconfig.node.json | 24 + ui/vite.config.ts | 22 + 62 files changed, 24166 insertions(+), 20 deletions(-) create mode 100644 docs/mockups/pedal-ui-figma-template.svg create mode 100644 docs/ui-mockup-template.html create mode 100644 dogfood-output/report.md create mode 100644 hardware/direct_test.txt create mode 100644 hardware/pi-multifx-hat-merged.kicad_pcb create mode 100644 hardware/pi-multifx-hat.kicad_pcb.bak create mode 100644 hardware/pi-multifx-hat.kicad_pcb.bak_v4 create mode 100644 hardware/pi-multifx-hat.kicad_pcb.orig_before_route create mode 100644 hardware/pi-multifx-hat.kicad_pcb.restored_backup create mode 100644 hardware/pi-multifx-hat.kicad_pcb.routed create mode 100644 hardware/pi-multifx-hat.kicad_pcb.sexpdata_attempt create mode 100644 hardware/pi-multifx-hat.test_marker create mode 100644 hardware/test_persist.txt create mode 100644 presets/factory/irs/README.md create mode 100755 scripts/generate_seed_irs.py create mode 100644 scripts/seed_default_captures.py create mode 100644 sketches/001-figma-template/index.html create mode 100644 src/system/defaults.py create mode 100644 test-drc.rpt create mode 100644 test_empty-drc.rpt create mode 100644 test_write.txt create mode 100644 ui/.gitignore create mode 100644 ui/README.md create mode 100644 ui/components.json create mode 100644 ui/eslint.config.js create mode 100644 ui/index.html create mode 100644 ui/package-lock.json create mode 100644 ui/package.json create mode 100644 ui/public/favicon.svg create mode 100644 ui/public/icons.svg create mode 100644 ui/src/App.css create mode 100644 ui/src/App.tsx create mode 100644 ui/src/assets/hero.png create mode 100644 ui/src/assets/react.svg create mode 100644 ui/src/assets/vite.svg create mode 100644 ui/src/components/ui/badge.tsx create mode 100644 ui/src/components/ui/button.tsx create mode 100644 ui/src/components/ui/card.tsx create mode 100644 ui/src/components/ui/input.tsx create mode 100644 ui/src/components/ui/select.tsx create mode 100644 ui/src/components/ui/slider.tsx create mode 100644 ui/src/components/ui/switch.tsx create mode 100644 ui/src/components/ui/tabs.tsx create mode 100644 ui/src/index.css create mode 100644 ui/src/lib/utils.ts create mode 100644 ui/src/main.tsx create mode 100644 ui/tsconfig.app.json create mode 100644 ui/tsconfig.json create mode 100644 ui/tsconfig.node.json create mode 100644 ui/vite.config.ts diff --git a/docs/mockups/pedal-ui-figma-template.svg b/docs/mockups/pedal-ui-figma-template.svg new file mode 100644 index 0000000..f21a5d1 --- /dev/null +++ b/docs/mockups/pedal-ui-figma-template.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GN Ch Dr ◇ Dly Rvb + + + ♩ 120 + CPU 23% + ▣ 89% + + + + + Bank 1 / 03 — Edge of Breakup + 4CM ◇ BYPASS + + + + + + NOISE GATE + Thresh: -56dB + + + + + COMPRESSOR + Ratio: 3:1 + + + + + OVERDRIVE + Drive: 68% + + + + + EQ + Bass: +2 Mid: 0 + + + + + + + NAM AMP + Matchless Chime + + + + + CAB IR + Vox AC30 Blue + + + + + CHORUS + Rate: 0.4 Depth: 55 + + + + + DELAY + Time: 420ms + + + + + + + L + + + + + R + + + + + + + + + MASTER + + + + + GAIN + + + + + TONE + + + + + VOLUME + + + + + + + + + + diff --git a/docs/ui-mockup-template.html b/docs/ui-mockup-template.html new file mode 100644 index 0000000..563f486 --- /dev/null +++ b/docs/ui-mockup-template.html @@ -0,0 +1,424 @@ + + + + + +Pi Multi-FX Pedal — UI Template + + + +

🎛️ Figma Template — Pi Multi-FX Pedal UI

+ +
+ + +
+
+
Crunch Rhythm
+
Bank 1 · Preset 2 of 4
+
+
+
CPU 34%
+ +
+
+ + +
+
+ +
+
+
+ +
+
+
+ +
-12
+
+
+ + +
+
🚪Gate
+
+
📦Comp
+
+
🎸OD
+
+
🧠NAM
+
+
📡IR
+
+
〰️Chorus
+
+
Delay
+
+
🌊Reverb
+
+ + +
+ +
+
+

NAM Amp

+ feather-lstm · 1.2ms +
+
+
+
+ +
68
+
+
+
+ +
52
+
+
+
+ +
75
+
+
+
+ +
30
+
+
+
+ +
45
+
+
+
+ +
60
+
+
+
+ +
55
+
+
+
+ +
40
+
+
+
+ + +
+
+ + + +
+
+
Bank 1 — Classics
+
+ ✦ Crunch Rhythm + 1-2 +
+
+ Lead Solo + 1-3 +
+
+ Clean Jazz + 1-4 +
+
Bank 2 — FX Bench
+
+ Overdrive + 2-1 +
+
+ Ambient Wash + 2-2 +
+
+
+
+ + +
+ + + + + +
+
+ +

+ Dark theme · 800×500 mockup (scales to 480×320 touchscreen).
+ Sections: Top bar, VU meters, FX chain, knob panel, presets sidebar, bottom nav.
+ Trace over the labeled blocks in Figma — swap icons, fonts, spacing to taste. +

+ + + diff --git a/dogfood-output/report.md b/dogfood-output/report.md new file mode 100644 index 0000000..1254e9f --- /dev/null +++ b/dogfood-output/report.md @@ -0,0 +1,176 @@ +# Dogfood QA Report — Pi Multi-FX Pedal + +**Target:** http://pedal.local:8080 (RPi live hardware) +**Date:** 2026-06-12 +**Scope:** REST API endpoints, HTML pages, Tone3000 search, edge cases vs live Pi +**Tester:** Hermes Agent (automated exploratory QA against real deployment) + +--- + +## Executive Summary + +| Severity | Count | +|----------|-------| +| 🔴 Critical | 1 | +| 🟠 High | 2 | +| 🟡 Medium | 1 | +| 🔵 Low | 1 | +| **Total** | **5** | + +**Overall Assessment:** The pedal is working! The Pi is online, connected, and serving real data. Dashboard shows live state (volume at 0.33, mono routing, preset system working). Three key issues identified: one critical (dashboard crash when disconnected), one version-sync gap (tonehub aliases not pushed to Pi), and one missing endpoint (`/api/captures`). + +--- + +## Live vs Local — Key Difference + +| Check | Local (code test) | Live Pi (pedal.local) | +|-------|-------------------|----------------------| +| Dashboard | 200 | **200 with real data** | +| Connected state | `connected: False` | `connected: True` | +| master_volume | 0.8 (default) | **0.33 (live)** | +| routing_mode | mono | mono, breakpoint 7 | +| Tone3000 search | ✅ Works | ✅ Works | +| Tonehub alias routes | ✅ Work | **404 — not on Pi yet** | + +--- + +## Issues + +### Issue #1: Dashboard crashes with 500 when pedal deps not connected 🔴 + +*(Same as previously reported and fixed locally — needs push to Pi)* + +| Field | Value | +|-------|-------| +| **Severity** | 🔴 Critical | +| **Category** | Functional | +| **URL** | `GET /` | + +**Description:** +The dashboard template renders fine when pedal deps are connected (tested live — returns 200 with real data), but crashes with HTTP 500 when the pedal is disconnected. Root cause: `_gather_state()` returns only `{"connected": False}` when deps are None, but the template expects full default keys. + +**Fix applied locally in `_gather_state()`** — returns full defaults (`master_volume: 0.8`, `routing_mode: "mono"`, etc.) when disconnected. + +**Needs:** Commit & push to Pi. + +--- + +### Issue #2: React SPA calls `/api/captures` but backend has no such route 🟠 + +| Field | Value | +|-------|-------| +| **Severity** | 🟠 High | +| **Category** | Functional | +| **URL** | `GET /api/captures` | + +**Description:** +The React SPA (`pi-multifx-pedal-ui/src/App.jsx`) has an API layer that calls `GET /api/captures` to list NAM captures and `POST /api/captures/upload` to upload new ones. However, the backend (`src/web/server.py`) has no `/api/captures` route — returns 404 on both local test and live Pi. + +Introduced during "Wire React Knobs to Live API" task — frontend calls were added without building the corresponding backend endpoints. The captures screen in the React UI will silently fail. + +--- + +### Issue #3: Tonehub alias routes not pushed to Pi 🟠 + +| Field | Value | +|-------|-------| +| **Severity** | 🟠 High | +| **Category** | Deployment | +| **URL** | `GET /api/tonehub/search` | + +**Description:** +The alias routes `GET /api/tonehub/search` and `GET /api/tonehub/search/irs` work locally (return Tone3000 search results) but return 404 on the live Pi. These routes were added in an uncommitted change on the local dev machine and were never pushed to Gitea, so the Pi doesn't have them. + +The direct routes (`/api/irs/tonedownload/search`, `/api/models/tonedownload/search`) work on the Pi. Only the shorthand aliases are missing. + +**Affected routes:** +- `GET /api/tonehub/search` → 404 on Pi (alias for `/api/models/tonedownload/search`) +- `GET /api/tonehub/search/irs` → 404 on Pi (alias for `/api/irs/tonedownload/search`) + +**Needs:** Commit tonehub alias routes + `_gather_state` fix, push to Gitea, pull on Pi, restart server. + +--- + +### Issue #4: `/api/block-params/{fx_type}` returns 200 for unknown types 🟡 + +| Field | Value | +|-------|-------| +| **Severity** | 🟡 Medium | +| **Category** | Functional | +| **URL** | `GET /api/block-params/99` | + +**Description:** +`GET /api/block-params/99` returns 200 with `{"fx_type":"99","params":[]}` instead of 404. The route accepts any string without validating against known FX types. Confirmed on live Pi (same behavior). + +--- + +### Issue #5: Unclosed aiohttp client session warnings 🔵 + +| Field | Value | +|-------|-------| +| **Severity** | 🔵 Low | +| **Category** | Console | +| **URL** | All Tone3000 routes | + +**Description:** +Unclosed aiohttp ClientSession on Tone3000 API calls — resource leak that accumulates warning noise. Same on both local and Pi. + +--- + +## Issues Summary Table + +| # | Title | Severity | Type | Status | +|---|-------|----------|------|--------| +| 1 | Dashboard 500 when disconnected | 🔴 Critical | Functional | **Fixed locally** — needs push | +| 2 | React calls `/api/captures`, backend missing | 🟠 High | Functional | Needs new endpoint | +| 3 | Tonehub alias routes 404 on Pi | 🟠 High | Deployment | **Fixed locally** — needs push | +| 4 | block-params 200 for unknown types | 🟡 Medium | Functional | Needs validation | +| 5 | Unclosed aiohttp session | 🔵 Low | Console | Needs cleanup | + +## Testing Coverage + +### Pages (all 5 on Pi) ✅ +| Page | Status | Notes | +|------|--------|-------| +| `GET /` (Dashboard) | 200 ✅ | Live data: master_volume=0.33 | +| `GET /presets` | 200 ✅ | Returns bank 0 / Clean Jazz preset | +| `GET /models` | 200 ✅ | Empty (no models installed) | +| `GET /irs` | 200 ✅ | Empty (no IRs installed) | +| `GET /settings` | 200 ✅ | 15KB, full settings UI | + +### API Endpoints on Pi +| Endpoint | Result | Notes | +|----------|--------|-------| +| `GET /api/state` | 200 ✅ | `connected: true` | +| `GET /api/presets` | 200 ✅ | Real presets | +| `GET /api/routing` | 200 ✅ | mono, breakpoint 7 | +| `POST /api/routing` | 200 ✅ | Returns updated routing | +| `GET /api/irs` | 200 ✅ | No IRs loaded | +| `GET /api/models` | 200 ✅ | No models loaded | +| `GET /api/captures` | 404 ❌ | Missing endpoint | +| `GET /api/irs/tonedownload/search` | 200 ✅ | 36 results | +| `GET /api/tonehub/search` | 404 ❌ | Not pushed to Pi | +| `GET /api/tonehub/search/irs` | 404 ❌ | Not pushed to Pi | +| `GET /api/block-params/0` | 200 ✅ | | +| `GET /api/block-params/99` | 200 ⚠️ | Should be 404 | +| `POST /api/bypass/toggle` | 404 ❌ | Check if route exists | +| `POST /api/tuner/toggle` | 404 ❌ | Check if route exists | +| `POST /api/models/tonedownload/install` | 422/500 ⚠️ | Works locally, needs download target | + +### Edge Cases +| Test | Result | +|------|--------| +| `GET /nonexistent` | 404 ✅ | +| `GET /api/nonexistent` | 404 ✅ | +| `GET /api/presets/99` | 404 ✅ | + +--- + +## Next Steps + +1. **Commit & push** the `_gather_state` fix and tonehub alias routes to Gitea +2. **Pull & restart** on the Pi +3. **Build `/api/captures`** endpoint (list captures + upload) +4. **Add FX type validation** to `GET /api/block-params/{fx_type}` +5. Run retest after fixes are deployed + diff --git a/hardware/direct_test.txt b/hardware/direct_test.txt new file mode 100644 index 0000000..575cdcf --- /dev/null +++ b/hardware/direct_test.txt @@ -0,0 +1 @@ +This is a direct write_file test at $(date). If this persists, we know it's the tool, not the file. diff --git a/hardware/pi-multifx-hat-merged.kicad_pcb b/hardware/pi-multifx-hat-merged.kicad_pcb new file mode 100644 index 0000000..61c2c15 --- /dev/null +++ b/hardware/pi-multifx-hat-merged.kicad_pcb @@ -0,0 +1,2252 @@ +(kicad_pcb (version 20241229) (generator "pcbnew") + (general + (thickness 1.6) + ) + (paper "A4") + (title_block + (title "Minimal Test Board") + ) + (layers + (0 "F.Cu" signal) + (31 "B.Cu" signal) + (32 "F.SilkS" user) + (33 "B.SilkS" user) + (34 "F.Mask" user) + (35 "B.Mask" user) + ) + (setup + (stackup + (layer "F.Cu" (type copper)) + (layer "dielectric 1" (type prepreg) (thickness 0.4)) + (layer "B.Cu" (type copper)) + ) + ) + (net 0 "") + (net 1 "GND") + (net 2 "+3.3V") + (net 3 "+5V") + (net 4 "BCK") + (net 5 "LRCK") + (net 6 "DIN") + (net 7 "DOUT") + (net 8 "L_IN") + (net 9 "R_IN") + (net 10 "L_OUT") + (net 11 "R_OUT") + (net 12 "HPF_CAP") + (net 13 "HPF_REF") + (net 14 "VCOM") + (net 15 "SCKI") + (net 16 "GND_AGND") + (net 0 "") + (net 1 "GND") + (net 2 "+3.3V") + (net 3 "+5V") + (net 4 "BCK") + (net 5 "LRCK") + (net 6 "DIN") + (net 7 "DOUT") + (net 8 "L_IN") + (net 9 "R_IN") + (net 10 "L_OUT") + (net 11 "R_OUT") + (net 12 "HPF_CAP") + (net 13 "HPF_REF") + (net 14 "VCOM") + (net 15 "SCKI") + (net 16 "GND_AGND") + (net 0 "") + (net 4) + (net 5) + (net 6) + (net 7) + (net 15) + (net 2) + (net 8) + (net 9) + (net 10) + (net 11) + (net 1) + (net 1) + (net 4) + (net 5) + (net 6) + (net 7) + (net 15) + (net 2) + (net 8) + (net 9) + (net 10) + (net 11) + (net 1) + (net 1) + +(footprint "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + (property "Reference" "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + (property "Reference" "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + (property "Reference" "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + (property "Reference" "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + (property "Reference" "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + (property "Reference" "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + (property "Reference" "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + (property "Reference" "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + (property "Reference" "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + (property "Reference" "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + (property "Reference" "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + (pad "2" smd rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + (pad "3" smd rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + (pad "4" smd rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + (pad "5" smd rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + (pad "6" smd rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + (pad "7" smd rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + (pad "8" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + (pad "9" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + (pad "10" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + (pad "11" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + (pad "12" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + (pad "13" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + (pad "14" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + (property "Reference" "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + (pad "2" smd rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + (pad "3" smd rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + (pad "4" smd rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + (pad "5" smd rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + (pad "6" smd rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + (pad "7" smd rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + (pad "8" smd rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + (property "Reference" "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + (property "Reference" "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + (property "Reference" "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + (property "Reference" "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + (property "Reference" "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + (property "Reference" "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + (property "Reference" "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + (pad "2" smd rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + (pad "3" smd rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + (pad "4" smd rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + (pad "5" smd rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + (pad "6" smd rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + (pad "7" smd rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + (pad "8" smd rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + (pad "9" smd rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + (pad "10" smd rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + (pad "11" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + (pad "12" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + (pad "13" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + (pad "14" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + (pad "15" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + (pad "16" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + (pad "17" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + (pad "18" smd rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + (pad "19" smd rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + (pad "20" smd rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + (property "Reference" "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + (pad "2" smd rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + (pad "3" smd rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + (property "Reference" "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + (property "Reference" "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + (pad "2" thru_hole circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + (pad "3" thru_hole circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + (pad "4" thru_hole circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + (pad "5" thru_hole circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + (pad "6" thru_hole circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + (pad "7" thru_hole circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + (pad "8" thru_hole circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + (pad "9" thru_hole circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + (pad "10" thru_hole circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + (pad "11" thru_hole circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + (pad "12" thru_hole circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + (pad "13" thru_hole circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + (pad "14" thru_hole circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + (pad "15" thru_hole circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + (pad "16" thru_hole circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + (pad "17" thru_hole circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + (pad "18" thru_hole circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + (pad "19" thru_hole circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + (pad "20" thru_hole circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + (pad "21" thru_hole circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + (pad "22" thru_hole circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + (pad "23" thru_hole circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + (pad "24" thru_hole circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + (pad "25" thru_hole circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + (pad "26" thru_hole circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + (pad "27" thru_hole circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + (pad "28" thru_hole circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + (pad "29" thru_hole circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + (pad "30" thru_hole circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + (pad "31" thru_hole circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + (pad "32" thru_hole circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + (pad "33" thru_hole circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + (pad "34" thru_hole circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + (pad "35" thru_hole circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + (pad "36" thru_hole circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + (pad "37" thru_hole circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + (pad "38" thru_hole circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + (pad "39" thru_hole circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + (pad "40" thru_hole circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + +(footprint "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + (property "Reference" "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + + (segment (start 90 145) (end 145 145) (width 0.254) (layer "F.Cu") (net 4)) + (segment (start 90 150) (end 145 150) (width 0.254) (layer "F.Cu") (net 5)) + (segment (start 145 155) (end 90 155) (width 0.254) (layer "F.Cu") (net 6)) + (segment (start 90 160) (end 145 160) (width 0.254) (layer "F.Cu") (net 7)) + (segment (start 90 165) (end 145 165) (width 0.254) (layer "F.Cu") (net 15)) + (segment (start 90 170) (end 145 170) (width 0.254) (layer "F.Cu") (net 2)) + (segment (start 70 130) (end 90 130) (width 0.254) (layer "F.Cu") (net 8)) + (segment (start 70 135) (end 90 135) (width 0.254) (layer "F.Cu") (net 9)) + (segment (start 145 130) (end 165 130) (width 0.254) (layer "F.Cu") (net 10)) + (segment (start 145 135) (end 165 135) (width 0.254) (layer "F.Cu") (net 11)) + (segment (start 90 145) (end 145 145) (width 0.254) (layer "F.Cu") (net 4)) + (segment (start 90 150) (end 145 150) (width 0.254) (layer "F.Cu") (net 5)) + (segment (start 145 155) (end 90 155) (width 0.254) (layer "F.Cu") (net 6)) + (segment (start 90 160) (end 145 160) (width 0.254) (layer "F.Cu") (net 7)) + (segment (start 90 165) (end 145 165) (width 0.254) (layer "F.Cu") (net 15)) + (segment (start 90 170) (end 145 170) (width 0.254) (layer "F.Cu") (net 2)) + (segment (start 70 130) (end 90 130) (width 0.254) (layer "F.Cu") (net 8)) + (segment (start 70 135) (end 90 135) (width 0.254) (layer "F.Cu") (net 9)) + (segment (start 145 130) (end 165 130) (width 0.254) (layer "F.Cu") (net 10)) + (segment (start 145 135) (end 165 135) (width 0.254) (layer "F.Cu") (net 11)) + (zone (net 1) (layer "F.Cu") (priority 1) (min_thickness 0.254) + (keepout (tracks_disabled no)) + (fill (mode polygon) (thermal_gap 0.254) (thermal_bridge_width 0.5)) + ) + + (zone (net 1) (layer "B.Cu") (priority 1) (min_thickness 0.254) + (keepout (tracks_disabled no)) + (fill (mode polygon) (thermal_gap 0.254) (thermal_bridge_width 0.5)) + ) + + (zone (net 1) (layer "F.Cu") (priority 1) (min_thickness 0.254) + (keepout (tracks_disabled no)) + (fill (mode polygon) (thermal_gap 0.254) (thermal_bridge_width 0.5)) + ) + + (zone (net 1) (layer "B.Cu") (priority 1) (min_thickness 0.254) + (keepout (tracks_disabled no)) + (fill (mode polygon) (thermal_gap 0.254) (thermal_bridge_width 0.5)) + ) + + +) diff --git a/hardware/pi-multifx-hat.kicad_pcb.bak b/hardware/pi-multifx-hat.kicad_pcb.bak new file mode 100644 index 0000000..59520e5 --- /dev/null +++ b/hardware/pi-multifx-hat.kicad_pcb.bak @@ -0,0 +1,2247 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (title_block + (title "Pi Multi-FX Pedal — PCM1808+PCM5102 I2S HAT") + (date "2026-06-09") + (rev "1.0") + (company "Ourpad Networks") + ) + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (footprint "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + (property "Reference" "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + (property "Reference" "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + (property "Reference" "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + (property "Reference" "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + (property "Reference" "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + (property "Reference" "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + (property "Reference" "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + (property "Reference" "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + (property "Reference" "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + (property "Reference" "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + (property "Reference" "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + (pad "2" smd rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + (pad "3" smd rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + (pad "4" smd rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + (pad "5" smd rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + (pad "6" smd rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + (pad "7" smd rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + (pad "8" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + (pad "9" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + (pad "10" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + (pad "11" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + (pad "12" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + (pad "13" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + (pad "14" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + (property "Reference" "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + (pad "2" smd rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + (pad "3" smd rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + (pad "4" smd rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + (pad "5" smd rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + (pad "6" smd rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + (pad "7" smd rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + (pad "8" smd rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + (property "Reference" "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + (property "Reference" "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + (property "Reference" "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + (property "Reference" "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + (property "Reference" "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + (property "Reference" "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + (property "Reference" "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + (pad "2" smd rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + (pad "3" smd rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + (pad "4" smd rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + (pad "5" smd rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + (pad "6" smd rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + (pad "7" smd rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + (pad "8" smd rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + (pad "9" smd rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + (pad "10" smd rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + (pad "11" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + (pad "12" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + (pad "13" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + (pad "14" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + (pad "15" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + (pad "16" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + (pad "17" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + (pad "18" smd rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + (pad "19" smd rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + (pad "20" smd rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + (property "Reference" "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + (pad "2" smd rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + (pad "3" smd rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + (property "Reference" "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + (property "Reference" "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + (pad "2" thru_hole circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + (pad "3" thru_hole circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + (pad "4" thru_hole circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + (pad "5" thru_hole circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + (pad "6" thru_hole circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + (pad "7" thru_hole circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + (pad "8" thru_hole circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + (pad "9" thru_hole circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + (pad "10" thru_hole circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + (pad "11" thru_hole circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + (pad "12" thru_hole circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + (pad "13" thru_hole circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + (pad "14" thru_hole circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + (pad "15" thru_hole circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + (pad "16" thru_hole circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + (pad "17" thru_hole circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + (pad "18" thru_hole circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + (pad "19" thru_hole circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + (pad "20" thru_hole circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + (pad "21" thru_hole circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + (pad "22" thru_hole circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + (pad "23" thru_hole circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + (pad "24" thru_hole circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + (pad "25" thru_hole circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + (pad "26" thru_hole circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + (pad "27" thru_hole circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + (pad "28" thru_hole circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + (pad "29" thru_hole circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + (pad "30" thru_hole circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + (pad "31" thru_hole circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + (pad "32" thru_hole circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + (pad "33" thru_hole circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + (pad "34" thru_hole circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + (pad "35" thru_hole circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + (pad "36" thru_hole circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + (pad "37" thru_hole circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + (pad "38" thru_hole circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + (pad "39" thru_hole circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + (pad "40" thru_hole circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + (property "Reference" "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + (gr_rect + (start 0 0) + (end 65 56) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "490eb1b2-cf53-49c6-922b-4128cff47d66") + ) + (gr_circle + (center 3.175 3.175) + (end 6.375 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "cb18cc06-c460-4db3-815e-4e4c41684c90") + ) + (gr_circle + (center 3.175 52.825) + (end 6.375 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "f04a31b6-fa32-47d2-ae25-767f91ba8645") + ) + (gr_circle + (center 61.825 3.175) + (end 65.025 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "a0475a68-b899-4940-8138-911119facbf8") + ) + (gr_circle + (center 61.825 52.825) + (end 65.025 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "b046f69a-c97b-46be-8730-f85a8c43666b") + ) + (embedded_fonts no) +) diff --git a/hardware/pi-multifx-hat.kicad_pcb.bak_v4 b/hardware/pi-multifx-hat.kicad_pcb.bak_v4 new file mode 100644 index 0000000..59520e5 --- /dev/null +++ b/hardware/pi-multifx-hat.kicad_pcb.bak_v4 @@ -0,0 +1,2247 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (title_block + (title "Pi Multi-FX Pedal — PCM1808+PCM5102 I2S HAT") + (date "2026-06-09") + (rev "1.0") + (company "Ourpad Networks") + ) + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (footprint "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + (property "Reference" "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + (property "Reference" "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + (property "Reference" "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + (property "Reference" "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + (property "Reference" "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + (property "Reference" "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + (property "Reference" "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + (property "Reference" "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + (property "Reference" "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + (property "Reference" "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + (property "Reference" "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + (pad "2" smd rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + (pad "3" smd rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + (pad "4" smd rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + (pad "5" smd rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + (pad "6" smd rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + (pad "7" smd rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + (pad "8" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + (pad "9" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + (pad "10" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + (pad "11" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + (pad "12" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + (pad "13" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + (pad "14" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + (property "Reference" "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + (pad "2" smd rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + (pad "3" smd rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + (pad "4" smd rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + (pad "5" smd rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + (pad "6" smd rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + (pad "7" smd rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + (pad "8" smd rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + (property "Reference" "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + (property "Reference" "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + (property "Reference" "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + (property "Reference" "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + (property "Reference" "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + (property "Reference" "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + (property "Reference" "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + (pad "2" smd rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + (pad "3" smd rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + (pad "4" smd rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + (pad "5" smd rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + (pad "6" smd rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + (pad "7" smd rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + (pad "8" smd rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + (pad "9" smd rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + (pad "10" smd rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + (pad "11" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + (pad "12" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + (pad "13" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + (pad "14" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + (pad "15" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + (pad "16" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + (pad "17" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + (pad "18" smd rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + (pad "19" smd rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + (pad "20" smd rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + (property "Reference" "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + (pad "2" smd rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + (pad "3" smd rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + (property "Reference" "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + (property "Reference" "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + (pad "2" thru_hole circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + (pad "3" thru_hole circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + (pad "4" thru_hole circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + (pad "5" thru_hole circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + (pad "6" thru_hole circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + (pad "7" thru_hole circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + (pad "8" thru_hole circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + (pad "9" thru_hole circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + (pad "10" thru_hole circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + (pad "11" thru_hole circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + (pad "12" thru_hole circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + (pad "13" thru_hole circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + (pad "14" thru_hole circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + (pad "15" thru_hole circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + (pad "16" thru_hole circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + (pad "17" thru_hole circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + (pad "18" thru_hole circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + (pad "19" thru_hole circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + (pad "20" thru_hole circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + (pad "21" thru_hole circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + (pad "22" thru_hole circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + (pad "23" thru_hole circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + (pad "24" thru_hole circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + (pad "25" thru_hole circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + (pad "26" thru_hole circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + (pad "27" thru_hole circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + (pad "28" thru_hole circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + (pad "29" thru_hole circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + (pad "30" thru_hole circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + (pad "31" thru_hole circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + (pad "32" thru_hole circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + (pad "33" thru_hole circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + (pad "34" thru_hole circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + (pad "35" thru_hole circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + (pad "36" thru_hole circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + (pad "37" thru_hole circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + (pad "38" thru_hole circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + (pad "39" thru_hole circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + (pad "40" thru_hole circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + (property "Reference" "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + (gr_rect + (start 0 0) + (end 65 56) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "490eb1b2-cf53-49c6-922b-4128cff47d66") + ) + (gr_circle + (center 3.175 3.175) + (end 6.375 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "cb18cc06-c460-4db3-815e-4e4c41684c90") + ) + (gr_circle + (center 3.175 52.825) + (end 6.375 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "f04a31b6-fa32-47d2-ae25-767f91ba8645") + ) + (gr_circle + (center 61.825 3.175) + (end 65.025 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "a0475a68-b899-4940-8138-911119facbf8") + ) + (gr_circle + (center 61.825 52.825) + (end 65.025 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "b046f69a-c97b-46be-8730-f85a8c43666b") + ) + (embedded_fonts no) +) diff --git a/hardware/pi-multifx-hat.kicad_pcb.orig_before_route b/hardware/pi-multifx-hat.kicad_pcb.orig_before_route new file mode 100644 index 0000000..59520e5 --- /dev/null +++ b/hardware/pi-multifx-hat.kicad_pcb.orig_before_route @@ -0,0 +1,2247 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (title_block + (title "Pi Multi-FX Pedal — PCM1808+PCM5102 I2S HAT") + (date "2026-06-09") + (rev "1.0") + (company "Ourpad Networks") + ) + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (footprint "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + (property "Reference" "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + (property "Reference" "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + (property "Reference" "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + (property "Reference" "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + (property "Reference" "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + (property "Reference" "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + (property "Reference" "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + (property "Reference" "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + (property "Reference" "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + (property "Reference" "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + (property "Reference" "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + (pad "2" smd rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + (pad "3" smd rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + (pad "4" smd rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + (pad "5" smd rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + (pad "6" smd rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + (pad "7" smd rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + (pad "8" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + (pad "9" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + (pad "10" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + (pad "11" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + (pad "12" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + (pad "13" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + (pad "14" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + (property "Reference" "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + (pad "2" smd rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + (pad "3" smd rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + (pad "4" smd rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + (pad "5" smd rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + (pad "6" smd rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + (pad "7" smd rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + (pad "8" smd rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + (property "Reference" "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + (property "Reference" "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + (property "Reference" "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + (property "Reference" "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + (property "Reference" "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + (property "Reference" "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + (property "Reference" "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + (pad "2" smd rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + (pad "3" smd rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + (pad "4" smd rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + (pad "5" smd rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + (pad "6" smd rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + (pad "7" smd rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + (pad "8" smd rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + (pad "9" smd rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + (pad "10" smd rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + (pad "11" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + (pad "12" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + (pad "13" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + (pad "14" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + (pad "15" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + (pad "16" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + (pad "17" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + (pad "18" smd rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + (pad "19" smd rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + (pad "20" smd rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + (property "Reference" "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + (pad "2" smd rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + (pad "3" smd rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + (property "Reference" "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + (property "Reference" "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + (pad "2" thru_hole circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + (pad "3" thru_hole circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + (pad "4" thru_hole circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + (pad "5" thru_hole circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + (pad "6" thru_hole circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + (pad "7" thru_hole circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + (pad "8" thru_hole circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + (pad "9" thru_hole circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + (pad "10" thru_hole circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + (pad "11" thru_hole circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + (pad "12" thru_hole circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + (pad "13" thru_hole circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + (pad "14" thru_hole circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + (pad "15" thru_hole circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + (pad "16" thru_hole circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + (pad "17" thru_hole circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + (pad "18" thru_hole circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + (pad "19" thru_hole circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + (pad "20" thru_hole circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + (pad "21" thru_hole circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + (pad "22" thru_hole circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + (pad "23" thru_hole circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + (pad "24" thru_hole circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + (pad "25" thru_hole circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + (pad "26" thru_hole circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + (pad "27" thru_hole circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + (pad "28" thru_hole circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + (pad "29" thru_hole circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + (pad "30" thru_hole circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + (pad "31" thru_hole circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + (pad "32" thru_hole circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + (pad "33" thru_hole circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + (pad "34" thru_hole circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + (pad "35" thru_hole circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + (pad "36" thru_hole circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + (pad "37" thru_hole circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + (pad "38" thru_hole circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + (pad "39" thru_hole circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + (pad "40" thru_hole circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + (property "Reference" "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + (gr_rect + (start 0 0) + (end 65 56) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "490eb1b2-cf53-49c6-922b-4128cff47d66") + ) + (gr_circle + (center 3.175 3.175) + (end 6.375 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "cb18cc06-c460-4db3-815e-4e4c41684c90") + ) + (gr_circle + (center 3.175 52.825) + (end 6.375 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "f04a31b6-fa32-47d2-ae25-767f91ba8645") + ) + (gr_circle + (center 61.825 3.175) + (end 65.025 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "a0475a68-b899-4940-8138-911119facbf8") + ) + (gr_circle + (center 61.825 52.825) + (end 65.025 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "b046f69a-c97b-46be-8730-f85a8c43666b") + ) + (embedded_fonts no) +) diff --git a/hardware/pi-multifx-hat.kicad_pcb.restored_backup b/hardware/pi-multifx-hat.kicad_pcb.restored_backup new file mode 100644 index 0000000..59520e5 --- /dev/null +++ b/hardware/pi-multifx-hat.kicad_pcb.restored_backup @@ -0,0 +1,2247 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (title_block + (title "Pi Multi-FX Pedal — PCM1808+PCM5102 I2S HAT") + (date "2026-06-09") + (rev "1.0") + (company "Ourpad Networks") + ) + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (footprint "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + (property "Reference" "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + (property "Reference" "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + (property "Reference" "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + (property "Reference" "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + (property "Reference" "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + (property "Reference" "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + (property "Reference" "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + (property "Reference" "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + (property "Reference" "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + (property "Reference" "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + (property "Reference" "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + (pad "2" smd rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + (pad "3" smd rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + (pad "4" smd rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + (pad "5" smd rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + (pad "6" smd rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + (pad "7" smd rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + (pad "8" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + (pad "9" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + (pad "10" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + (pad "11" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + (pad "12" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + (pad "13" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + (pad "14" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + (property "Reference" "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + (pad "2" smd rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + (pad "3" smd rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + (pad "4" smd rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + (pad "5" smd rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + (pad "6" smd rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + (pad "7" smd rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + (pad "8" smd rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + (property "Reference" "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + (property "Reference" "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + (property "Reference" "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + (property "Reference" "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + (property "Reference" "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + (property "Reference" "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + (property "Reference" "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + (pad "2" smd rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + (pad "3" smd rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + (pad "4" smd rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + (pad "5" smd rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + (pad "6" smd rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + (pad "7" smd rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + (pad "8" smd rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + (pad "9" smd rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + (pad "10" smd rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + (pad "11" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + (pad "12" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + (pad "13" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + (pad "14" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + (pad "15" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + (pad "16" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + (pad "17" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + (pad "18" smd rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + (pad "19" smd rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + (pad "20" smd rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + (property "Reference" "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + (pad "2" smd rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + (pad "3" smd rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + (property "Reference" "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + (property "Reference" "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + (pad "2" thru_hole circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + (pad "3" thru_hole circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + (pad "4" thru_hole circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + (pad "5" thru_hole circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + (pad "6" thru_hole circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + (pad "7" thru_hole circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + (pad "8" thru_hole circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + (pad "9" thru_hole circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + (pad "10" thru_hole circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + (pad "11" thru_hole circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + (pad "12" thru_hole circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + (pad "13" thru_hole circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + (pad "14" thru_hole circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + (pad "15" thru_hole circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + (pad "16" thru_hole circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + (pad "17" thru_hole circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + (pad "18" thru_hole circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + (pad "19" thru_hole circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + (pad "20" thru_hole circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + (pad "21" thru_hole circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + (pad "22" thru_hole circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + (pad "23" thru_hole circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + (pad "24" thru_hole circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + (pad "25" thru_hole circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + (pad "26" thru_hole circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + (pad "27" thru_hole circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + (pad "28" thru_hole circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + (pad "29" thru_hole circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + (pad "30" thru_hole circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + (pad "31" thru_hole circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + (pad "32" thru_hole circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + (pad "33" thru_hole circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + (pad "34" thru_hole circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + (pad "35" thru_hole circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + (pad "36" thru_hole circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + (pad "37" thru_hole circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + (pad "38" thru_hole circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + (pad "39" thru_hole circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + (pad "40" thru_hole circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + (property "Reference" "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + (gr_rect + (start 0 0) + (end 65 56) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "490eb1b2-cf53-49c6-922b-4128cff47d66") + ) + (gr_circle + (center 3.175 3.175) + (end 6.375 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "cb18cc06-c460-4db3-815e-4e4c41684c90") + ) + (gr_circle + (center 3.175 52.825) + (end 6.375 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "f04a31b6-fa32-47d2-ae25-767f91ba8645") + ) + (gr_circle + (center 61.825 3.175) + (end 65.025 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "a0475a68-b899-4940-8138-911119facbf8") + ) + (gr_circle + (center 61.825 52.825) + (end 65.025 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "b046f69a-c97b-46be-8730-f85a8c43666b") + ) + (embedded_fonts no) +) diff --git a/hardware/pi-multifx-hat.kicad_pcb.routed b/hardware/pi-multifx-hat.kicad_pcb.routed new file mode 100644 index 0000000..59520e5 --- /dev/null +++ b/hardware/pi-multifx-hat.kicad_pcb.routed @@ -0,0 +1,2247 @@ +(kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + (general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + (title_block + (title "Pi Multi-FX Pedal — PCM1808+PCM5102 I2S HAT") + (date "2026-06-09") + (rev "1.0") + (company "Ourpad Networks") + ) + (layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + (setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + (pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.000000) + (dashed_line_gap_ratio 3.000000) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.000000) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 "") + (footprint "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + (property "Reference" "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + (property "Reference" "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + (property "Reference" "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + (property "Reference" "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + (property "Reference" "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + (property "Reference" "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + (property "Reference" "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + (property "Reference" "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + (pad "2" thru_hole circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + (pad "3" thru_hole circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + (property "Reference" "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + (property "Reference" "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + (property "Reference" "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + (pad "2" smd rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + (pad "3" smd rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + (pad "4" smd rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + (pad "5" smd rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + (pad "6" smd rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + (pad "7" smd rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + (pad "8" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + (pad "9" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + (pad "10" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + (pad "11" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + (pad "12" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + (pad "13" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + (pad "14" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + (property "Reference" "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + (pad "2" smd rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + (pad "3" smd rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + (pad "4" smd rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + (pad "5" smd rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + (pad "6" smd rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + (pad "7" smd rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + (pad "8" smd rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + (property "Reference" "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + (property "Reference" "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + (property "Reference" "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + (property "Reference" "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + (property "Reference" "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + (property "Reference" "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + (property "Reference" "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + (pad "2" smd rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + (pad "3" smd rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + (pad "4" smd rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + (pad "5" smd rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + (pad "6" smd rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + (pad "7" smd rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + (pad "8" smd rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + (pad "9" smd rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + (pad "10" smd rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + (pad "11" smd rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + (pad "12" smd rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + (pad "13" smd rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + (pad "14" smd rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + (pad "15" smd rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + (pad "16" smd rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + (pad "17" smd rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + (pad "18" smd rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + (pad "19" smd rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + (pad "20" smd rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + (property "Reference" "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + (pad "2" smd rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + (pad "3" smd rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + (property "Reference" "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + (pad "2" smd rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + (property "Reference" "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" thru_hole rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + (pad "2" thru_hole circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + (pad "3" thru_hole circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + (pad "4" thru_hole circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + (pad "5" thru_hole circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + (pad "6" thru_hole circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + (pad "7" thru_hole circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + (pad "8" thru_hole circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + (pad "9" thru_hole circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + (pad "10" thru_hole circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + (pad "11" thru_hole circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + (pad "12" thru_hole circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + (pad "13" thru_hole circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + (pad "14" thru_hole circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + (pad "15" thru_hole circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + (pad "16" thru_hole circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + (pad "17" thru_hole circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + (pad "18" thru_hole circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + (pad "19" thru_hole circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + (pad "20" thru_hole circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + (pad "21" thru_hole circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + (pad "22" thru_hole circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + (pad "23" thru_hole circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + (pad "24" thru_hole circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + (pad "25" thru_hole circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + (pad "26" thru_hole circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + (pad "27" thru_hole circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + (pad "28" thru_hole circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + (pad "29" thru_hole circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + (pad "30" thru_hole circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + (pad "31" thru_hole circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + (pad "32" thru_hole circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + (pad "33" thru_hole circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + (pad "34" thru_hole circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + (pad "35" thru_hole circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + (pad "36" thru_hole circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + (pad "37" thru_hole circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + (pad "38" thru_hole circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + (pad "39" thru_hole circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + (pad "40" thru_hole circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + (footprint "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + (property "Reference" "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "1" smd rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + (pad "2" smd rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + (gr_rect + (start 0 0) + (end 65 56) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "490eb1b2-cf53-49c6-922b-4128cff47d66") + ) + (gr_circle + (center 3.175 3.175) + (end 6.375 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "cb18cc06-c460-4db3-815e-4e4c41684c90") + ) + (gr_circle + (center 3.175 52.825) + (end 6.375 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "f04a31b6-fa32-47d2-ae25-767f91ba8645") + ) + (gr_circle + (center 61.825 3.175) + (end 65.025 3.175) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "a0475a68-b899-4940-8138-911119facbf8") + ) + (gr_circle + (center 61.825 52.825) + (end 65.025 52.825) + (stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "b046f69a-c97b-46be-8730-f85a8c43666b") + ) + (embedded_fonts no) +) diff --git a/hardware/pi-multifx-hat.kicad_pcb.sexpdata_attempt b/hardware/pi-multifx-hat.kicad_pcb.sexpdata_attempt new file mode 100644 index 0000000..5b58b1e --- /dev/null +++ b/hardware/pi-multifx-hat.kicad_pcb.sexpdata_attempt @@ -0,0 +1,3321 @@ +( + kicad_pcb + (version 20241229) + (generator "pcbnew") + (generator_version "9.0") + ( + general + (thickness 1.6) + (legacy_teardrops no) + ) + (paper "A4") + ( + title_block + (title "Pi Multi-FX Pedal — PCM1808+PCM5102 I2S HAT") + (date "2026-06-09") + (rev "1.0") + (company "Ourpad Networks") + ) + ( + layers + (0 "F.Cu" signal) + (2 "B.Cu" signal) + (9 "F.Adhes" user "F.Adhesive") + (11 "B.Adhes" user "B.Adhesive") + (13 "F.Paste" user) + (15 "B.Paste" user) + (5 "F.SilkS" user "F.Silkscreen") + (7 "B.SilkS" user "B.Silkscreen") + (1 "F.Mask" user) + (3 "B.Mask" user) + (17 "Dwgs.User" user "User.Drawings") + (19 "Cmts.User" user "User.Comments") + (21 "Eco1.User" user "User.Eco1") + (23 "Eco2.User" user "User.Eco2") + (25 "Edge.Cuts" user) + (27 "Margin" user) + (31 "F.CrtYd" user "F.Courtyard") + (29 "B.CrtYd" user "B.Courtyard") + (35 "F.Fab" user) + (33 "B.Fab" user) + (39 "User.1" user) + (41 "User.2" user) + (43 "User.3" user) + (45 "User.4" user) + ) + ( + setup + (pad_to_mask_clearance 0) + (allow_soldermask_bridges_in_footprints no) + (tenting front back) + ( + pcbplotparams + (layerselection 0x00000000_00000000_55555555_5755f5ff) + (plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000) + (disableapertmacros no) + (usegerberextensions no) + (usegerberattributes yes) + (usegerberadvancedattributes yes) + (creategerberjobfile yes) + (dashed_line_dash_ratio 12.0) + (dashed_line_gap_ratio 3.0) + (svgprecision 4) + (plotframeref no) + (mode 1) + (useauxorigin no) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15.0) + (pdf_front_fp_property_popups yes) + (pdf_back_fp_property_popups yes) + (pdf_metadata yes) + (pdf_single_document no) + (dxfpolygonmode yes) + (dxfimperialunits yes) + (dxfusepcbnewfont yes) + (psnegative no) + (psa4output no) + (plot_black_and_white yes) + (sketchpadsonfab no) + (plotpadnumbers no) + (hidednponfab no) + (sketchdnponfab yes) + (crossoutdnponfab yes) + (subtractmaskfromsilk no) + (outputformat 1) + (mirror no) + (drillshape 1) + (scaleselection 1) + (outputdirectory "") + ) + ) + (net 0 '"") + (net 1 '"GND") + (net 2 '"+3.3V") + (net 3 '"+5V") + (net 4 '"BCK") + (net 5 '"LRCK") + (net 6 '"DIN") + (net 7 '"DOUT") + (net 8 '"L_IN") + (net 9 '"R_IN") + (net 10 '"L_OUT") + (net 11 '"R_OUT") + (net 12 '"HPF_CAP") + (net 13 '"HPF_REF") + (net 14 '"VCOM") + (net 15 '"SCKI") + (net 16 '"GND_AGND") + ( + footprint + "" + (layer "F.Cu") + (uuid "2173e047-fc21-42ab-8e08-3a8664974aac") + (at 12 34) + ( + property + "Reference" + "R2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "335139c6-81dc-4784-8b57-7ec4cd7d4616") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "d74704da-4870-4d58-8c35-88bf07ba53df") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6f3c92d2-27b6-4f6e-8149-3a45719062d0") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c79deed9-bd16-4289-a279-010d23e0de8a") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c56607d5-9fa5-4b6e-93a2-651f93818d34") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c4644d8-d19b-4cd0-888b-564b1130c4dd") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "33c6ccdc-515d-4e2f-9042-d85eaee23233") + (at 6 8) + ( + property + "Reference" + "C1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "77895d60-e5b5-4de2-a5ae-29331d1c2137") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "c2b194ef-ed0e-42f9-aa22-1f4efd5b77e0") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d10983d5-65f2-4c16-bd9a-0a59f18eaf65") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "96b0ba62-5062-4dfa-b0b5-7a5cbe7331f5") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "08872e72-1668-4cb7-a62a-74ee1767dc5d") + ) + ( + pad + "2" + smd + rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "124e4b89-08b3-49c7-8c50-f78ec63ca7f4") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "346852a8-36d7-46df-a034-8facdc027ddd") + (at 60 30) + ( + property + "Reference" + "J3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "c9503289-7d8c-4b77-8b5d-cb0e629f366e") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "Audio_Output" + (at 0 3 0) + (layer "F.Fab") + (uuid "af7f3731-c9cb-4ac0-bbc4-f263df63cb2f") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8c14b388-1d32-4b1b-8d2a-991a73d5d6a0") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f6643aec-84d5-4a03-893f-5db4f6781b30") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + thru_hole + circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6625097b-0c21-4f5e-868f-ea4dccabbace") + ) + ( + pad + "2" + thru_hole + circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb6cf3e4-7ccf-4d4f-a3e4-2e6f6d614956") + ) + ( + pad + "3" + thru_hole + circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6414f217-f071-45ae-97ab-3d598ff86121") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "39e188c1-afe8-4112-93ef-07e7088d94cb") + (at 55 30) + ( + property + "Reference" + "R6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "2fd3c79b-78a5-437e-8058-5fa49cc1b4eb") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "23809b57-4f53-4dc3-b382-14e596d27d17") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9615ecfc-8246-45d4-ae81-0874ab48e4ce") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c3de3baa-1b2a-4d28-b76e-87c57398f716") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f129f4ef-fce1-4610-9ff6-05cba651e211") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "60b9510c-48b2-43d9-944f-7411a343ad78") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "3b70a022-4d6a-450b-9984-f1fd97bfbf4b") + (at 52 26) + ( + property + "Reference" + "R5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cf7d7e55-38ff-46d9-b8fc-824a2dd780a3") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "330" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a72e512-d0d9-449a-8799-2d5b31636088") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "793544d2-f032-4710-b17a-68159833fa18") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f4d04b2a-b83e-4bf6-985c-b69a5a9f60af") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "354d3704-e99e-47af-af98-1b379a2729cb") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "429faaf9-ba3d-41b7-96d5-30a94168177f") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "51fadec2-1c4d-4fc2-9bfe-8d87ebc617fa") + (at 44 35) + ( + property + "Reference" + "C9" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1206da4d-d81a-452a-9bc2-1321f38000d8") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "40297268-a026-47c1-aa8b-1930b9b93acc") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "9d005153-b222-4d72-b559-02736275f6d9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5d81f039-23e1-44d1-800d-f69e1bbbe15c") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5a87061c-f5b5-43b8-8b34-d0384a548f7b") + ) + ( + pad + "2" + smd + rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "06d3f867-7d49-4dc5-a015-c0599c1fd697") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "567fd1dc-38d8-44bc-a74f-173f985b6871") + (at 25 30) + ( + property + "Reference" + "C5" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "62be1243-2dbc-43b6-9d2f-37cb803bd193") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4a137ed1-40ec-4ace-ab66-ea5ba912c459") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8257b1bc-ee2f-4afb-a915-eccc355f8395") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "404f511e-d90b-4254-88ca-a170dd442014") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "29b6beaf-9ea3-4b92-a35f-e79af9d6b67e") + ) + ( + pad + "2" + smd + rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f8d02054-b8af-4fcf-9987-91c867581cc8") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "5f8aa2cc-cd57-4a68-8b40-0c6e16ab94e8") + (at 5 30) + ( + property + "Reference" + "J2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "fbd45ef6-c6ed-4262-91da-92374bfd334a") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "Guitar_Input" + (at 0 3 0) + (layer "F.Fab") + (uuid "c816f49c-bb7d-4201-ac47-6ca2cd41e1f8") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "20590198-df75-4615-96b7-a79bfdfb8e7d") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "25b30baa-c132-4ceb-ab7b-a7b9f11730cb") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + thru_hole + circle + (at -3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "371f7612-005b-4b1e-ab0f-454ef31590fa") + ) + ( + pad + "2" + thru_hole + circle + (at 3 -2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a8b0066f-5e82-41db-b86f-8e73745967d3") + ) + ( + pad + "3" + thru_hole + circle + (at 0 2) + (size 2.5 1.5) + (drill 1.5) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "2fe2b89d-86f8-440e-a847-dcdecc96a375") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "62e1f4d7-9df4-48c6-9814-9cc99a59a783") + (at 31 25) + ( + property + "Reference" + "C6" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5412b7ae-5a3e-4db6-ba1a-124fb3872cb4") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "f1d2a899-c6ad-47b2-ae0f-32747cb8a48e") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f0bfe484-f465-4fc0-8583-3afcca70b80d") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e20df4d5-a85b-4016-95be-bb9c07a19c11") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c333dc8-2357-40a7-91f1-26a9e7dca2b6") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "94565304-29a2-4d63-a446-3337913e0586") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "8630fc45-de22-4317-b6db-bd4084354613") + (at 14 16) + ( + property + "Reference" + "C4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "5763732c-6458-404d-80e8-3bafc7b6b0e8") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "4b8273b1-5d22-4c77-a74f-410ca2100620") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "54d641e2-9e20-411e-8f66-0e2adfda26c3") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "50670033-2794-4d26-9ec6-f0fa0d0bb6ab") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0a54a9ce-f209-49e6-9ca3-681b538b9206") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "a59f65db-9d2c-4b3d-ad51-d3bdd3a6b0b7") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "8cb9f459-cc93-4266-81df-ae1792cd23af") + (at 35 30) + ( + property + "Reference" + "U3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "8008c138-3bed-4073-b780-6223acfc00cb") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "PCM1808" + (at 0 3 0) + (layer "F.Fab") + (uuid "c7f583ee-6c3d-4c33-b45e-ffe028dd4fce") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f22451c2-a2be-4d5b-80b2-4b7c258490d2") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "43498f68-b63a-4b56-8638-51cb43624983") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -2.200001 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d37c6fe2-4d07-43d7-94df-91716b8d8999") + ) + ( + pad + "2" + smd + rect + (at -2.200001 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2f8d9a60-8d79-443b-ab1c-e2df5b6ea9f8") + ) + ( + pad + "3" + smd + rect + (at -2.200001 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5ea80172-7060-43ac-b06f-faed1fbded6c") + ) + ( + pad + "4" + smd + rect + (at -2.200001 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5c05c679-d715-4bfd-b43a-5151628a8b0e") + ) + ( + pad + "5" + smd + rect + (at -2.200001 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5e817ca2-5dca-4b87-b5f5-afdbf84f7d15") + ) + ( + pad + "6" + smd + rect + (at -2.200001 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c207d25-8c0e-44db-a438-d0afd3f7627f") + ) + ( + pad + "7" + smd + rect + (at -2.200001 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e5b99887-0174-4e00-af34-0ef0401d9b71") + ) + ( + pad + "8" + smd + rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "82029a80-7863-4548-bc1d-949f872cbfc7") + ) + ( + pad + "9" + smd + rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "889b10d9-6a1c-48fa-92e3-0c43208de315") + ) + ( + pad + "10" + smd + rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f2dd604d-03e5-4cbd-b268-6ede0348890a") + ) + ( + pad + "11" + smd + rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "89dede42-8770-49ed-95f3-86a0a650d47b") + ) + ( + pad + "12" + smd + rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "be5fe5c3-cfa9-4302-8a8a-7b7417f4d6b5") + ) + ( + pad + "13" + smd + rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70fc89bb-3d73-43a6-b265-e4bbacca411d") + ) + ( + pad + "14" + smd + rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "61f4786a-db9f-49ae-b406-daecda4761c8") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "999097b4-6463-4f1f-a351-0e9aeaaf9408") + (at 18 30) + ( + property + "Reference" + "U2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "e6b74bf6-c067-47a3-849f-98ad56fb0fac") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "TL072" + (at 0 3 0) + (layer "F.Fab") + (uuid "bb8d9279-81af-472c-be8e-2d7e1fe29988") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8525ec40-b8ce-467a-8a42-e2704c186277") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "48dce273-ce8b-4070-a473-965d96436ae9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86a121ac-7cd7-409d-85a4-9f0a89532fd2") + ) + ( + pad + "2" + smd + rect + (at -1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "809d4e00-7fa1-4399-a956-292c55b89d80") + ) + ( + pad + "3" + smd + rect + (at -1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fee1d470-04f9-4257-baf2-3a7e68401e39") + ) + ( + pad + "4" + smd + rect + (at -1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "179ac4b3-8a0c-43ad-8950-9b520c800fa9") + ) + ( + pad + "5" + smd + rect + (at 1.95 1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "502eba21-6462-493a-87a1-e19de68187e4") + ) + ( + pad + "6" + smd + rect + (at 1.95 0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "023429b2-ba01-4032-a718-25f12aa6c4bb") + ) + ( + pad + "7" + smd + rect + (at 1.95 -0.635) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "262f8a0a-0080-43d5-87ab-1cbb224ac06c") + ) + ( + pad + "8" + smd + rect + (at 1.95 -1.905) + (size 0.6 0.3) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "953746cb-3a6d-4cba-9f04-b64ac9b9f7fa") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "a978c6a7-e988-4ed3-ad05-e07e30bf8c66") + (at 22 26) + ( + property + "Reference" + "R3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "1654a2e5-f1e8-452d-ac9c-3b68663db7be") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "100k" + (at 0 3 0) + (layer "F.Fab") + (uuid "b3866497-1c6e-48d5-9639-95e29596002a") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f016f10f-4121-401c-9310-6912c4891fcf") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "cad70126-feb8-4ccc-b6b4-73bd84116235") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "28016dee-bcfa-4133-9f0a-ee108af936be") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "e8a684b6-1055-4c11-9a77-04784f9773e1") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "aa29648f-da7a-45dd-b568-e2514e14fe57") + (at 44 25) + ( + property + "Reference" + "C8" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "feaade73-54eb-4446-8d87-327bf1cdf9f9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "7caa0bf8-d1e1-47ad-bcf9-719652b9aabc") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6383e659-5a5a-4532-a63d-7dbdc6643e55") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f653125e-f16c-4eb8-999f-1c82e1864a26") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5dc8e437-c1f7-47c7-883f-d03b137bc27c") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "b37a5f7c-b783-4749-8524-2dc76661227f") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "aac37784-c792-4dc5-b605-79c915a11ce6") + (at 12 26) + ( + property + "Reference" + "R1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "0c886bc6-6444-4659-976e-fcd4aa99f1b9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "1M" + (at 0 3 0) + (layer "F.Fab") + (uuid "50842b3d-ee1f-40bb-b5fb-4e34b379c8bc") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "7f2aa125-dec5-466a-809b-76215ce58773") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "654c2aa4-0982-4629-949f-89065447c8b4") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "46ff965f-c3c1-485b-b53a-2aaf73ab980d") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "6a25a876-868b-428b-a618-5d885df859e6") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "adf6da99-93f1-4b77-8564-bc78a46582af") + (at 22 34) + ( + property + "Reference" + "R4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "235f1dad-9c07-4912-b504-3d913a0d0b7f") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10k" + (at 0 3 0) + (layer "F.Fab") + (uuid "91527186-2ad1-474e-8d82-0c864d079131") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6b4bebfd-d129-464d-a5d7-e0488d6d33be") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "d679b0e2-ce10-49af-a6de-09e3b85c38e9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fab5387a-1a88-4e52-b77c-26d0760968c9") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d52878ea-6978-4e1e-b809-c66bcdccfcf5") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "ce8376e2-58d0-4baa-b56b-e1ed1c143453") + (at 6 16) + ( + property + "Reference" + "C3" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "696cff1a-ce3e-4f55-a405-6974c82abaa4") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "2f07178b-0cdb-4e58-85ff-92c6dd6eccdc") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "64d8b70f-d8a4-411c-9a28-e78e8435a2ff") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "f94c2c52-fa5f-4f3c-9b3b-0104b1b67f76") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f855c473-a853-48cd-93b7-652a0ba56c22") + ) + ( + pad + "2" + smd + rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "083d890c-9c7e-4470-8184-f2e0c54cfaae") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "cfa12149-2af7-431d-9c94-082e81667b0d") + (at 52 34) + ( + property + "Reference" + "C10" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "49801444-4269-4736-9257-f7b7d3edc3e7") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "1cadc952-0ad2-4350-a0e6-7b36a690a2e7") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "e56567f5-5436-4202-b23c-1955e3b9d734") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "8197849f-08b2-4266-a219-1f684c37c8b7") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "808abbc9-a4ff-4bdc-8006-1b15f26e8e98") + ) + ( + pad + "2" + smd + rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "2ee7a2a7-bfcc-42a4-83ac-a3405f45da05") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "e04e289d-7586-49ea-92a6-167ab9760aed") + (at 48 30) + ( + property + "Reference" + "U4" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "cd09e147-e21e-4875-b2d7-32b30c9ed389") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "PCM5102A" + (at 0 3 0) + (layer "F.Fab") + (uuid "6c3dd5c9-aa3b-49bc-9612-1d3220bc8c01") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5abfb365-d791-4e8a-93bc-5b9d5a446f6b") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "93259277-92fe-4143-be1c-67dedc9c8368") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -2.2 -3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fa408036-e113-4f4a-8087-89d567484aea") + ) + ( + pad + "2" + smd + rect + (at -2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "0c412260-1df6-48d9-ad97-5ba71275e25b") + ) + ( + pad + "3" + smd + rect + (at -2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fd6fd9c0-2276-4adf-9bc9-7e62e35a6426") + ) + ( + pad + "4" + smd + rect + (at -2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c4fa95f7-2a9f-4dd0-a72c-8a54dc5babd2") + ) + ( + pad + "5" + smd + rect + (at -2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d80737ab-2ba3-4304-bc98-0dfa46c9d4e8") + ) + ( + pad + "6" + smd + rect + (at -2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "127c166f-52ab-45d4-8a8a-8f23266561e2") + ) + ( + pad + "7" + smd + rect + (at -2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "3adcfd3c-27f8-4aaf-8431-5878aa6aa009") + ) + ( + pad + "8" + smd + rect + (at -2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c3b4b7e3-b81d-4a41-bfa3-fd1a3ae218f8") + ) + ( + pad + "9" + smd + rect + (at -2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "9184007e-2426-49eb-9e7d-46f3a327818e") + ) + ( + pad + "10" + smd + rect + (at -2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "fc9da708-1d6d-4dd4-a3d3-8aa007b84053") + ) + ( + pad + "11" + smd + rect + (at 2.2 3.25) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c09b1e30-f0a5-4c56-9ad0-ef1b42ceb23d") + ) + ( + pad + "12" + smd + rect + (at 2.2 2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "4f5dd29a-40dc-42a1-9663-c62710633898") + ) + ( + pad + "13" + smd + rect + (at 2.2 1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "7e0616e4-3c6b-4cbf-b49c-a84a3ed62fda") + ) + ( + pad + "14" + smd + rect + (at 2.2 1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "dabdb69a-84e5-4561-a81f-3286d9565b01") + ) + ( + pad + "15" + smd + rect + (at 2.2 0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "86ae8ff1-d58d-4c07-9a6e-aac3470bacca") + ) + ( + pad + "16" + smd + rect + (at 2.2 0) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d2aefaba-f030-417f-ae6e-91cdc4ae0b33") + ) + ( + pad + "17" + smd + rect + (at 2.2 -0.65) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "c744dc66-adc8-4b65-80a3-8c6b18804b27") + ) + ( + pad + "18" + smd + rect + (at 2.2 -1.3) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f5687a5e-ee65-4111-89c5-dbec1b4957b6") + ) + ( + pad + "19" + smd + rect + (at 2.2 -1.95) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "f40169f9-39ec-45aa-8efe-c5bd4bf6903f") + ) + ( + pad + "20" + smd + rect + (at 2.2 -2.6) + (size 0.4 0.25) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "70ad1b1f-32c4-4ee9-a032-64e242802665") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "e5adc86d-9e6d-4f3e-b0fd-139dae093cdd") + (at 10 12) + ( + property + "Reference" + "U1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "a2ebd8e8-00c8-4687-8b36-f5a21a007cda") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "AMS1117-3.3" + (at 0 3 0) + (layer "F.Fab") + (uuid "8206943f-2df9-4c4a-bc05-0f5eba7c6d8d") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "4f888ed8-3f93-4a93-a651-e425e2300821") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "b1a2295c-ad03-409d-90d0-3e6fe1eb0533") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "48fc8fe4-9bc1-4e98-b008-ea42ca133dcc") + ) + ( + pad + "2" + smd + rect + (at 2.3 -1.5) + (size 1.5 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "5921f89a-20db-4ab6-b193-20cbc8dff33f") + ) + ( + pad + "3" + smd + rect + (at 0 1.5) + (size 3 2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "ac53b233-578a-427f-a257-379444b9301b") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "ea745666-c36d-4644-aa64-a664cdf72c86") + (at 14 8) + ( + property + "Reference" + "C2" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "321ec5da-32c1-438e-9e74-4e9879d27893") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "100nF" + (at 0 3 0) + (layer "F.Fab") + (uuid "af8e1403-baa0-4141-b7cf-8c618d8e133e") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "26dab860-d93c-4f05-bf6d-eea37a6de47e") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "6e710ac0-2273-4cf1-9552-039925088052") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d14d6a14-d776-4338-96c1-c90e1659c05b") + ) + ( + pad + "2" + smd + rect + (at 0.75 0) + (size 0.9 1.2) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "bf9aa2f6-6722-4f96-9077-81c9dec5b1a0") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "f6d1a9e5-3814-4156-8140-ead58fa03b30") + (at 32.5 5) + ( + property + "Reference" + "J1" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "d74b57ad-684d-42ac-ba77-096b11e856c4") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "RPi_40Pin_HDR" + (at 0 3 0) + (layer "F.Fab") + (uuid "47800542-503c-4680-a972-144f91d0190f") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "5f8aab4b-f3d9-43b5-8c14-1acc566538ea") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "47387bf8-32a0-4543-8a46-4516d0aef136") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + thru_hole + rect + (at -24.13 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (thermal_bridge_angle 45) + (uuid "abdec429-a226-4360-8375-cd1ac06956b0") + ) + ( + pad + "2" + thru_hole + circle + (at -21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ff7e3aa1-75a3-4bda-b1d9-33b41cdbce9c") + ) + ( + pad + "3" + thru_hole + circle + (at -19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8ae22825-bd9c-433e-a7ea-07f92fc5eee4") + ) + ( + pad + "4" + thru_hole + circle + (at -16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7ccd5cf7-793e-446f-9da6-d4236def21ac") + ) + ( + pad + "5" + thru_hole + circle + (at -13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "4cfc1a0a-1437-4fde-82f7-d45cc76a51c3") + ) + ( + pad + "6" + thru_hole + circle + (at -11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7fd49438-01d2-4b81-84e7-4f4010343f2e") + ) + ( + pad + "7" + thru_hole + circle + (at -8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "657f8c0c-fb27-4dae-bc33-edad2c00325f") + ) + ( + pad + "8" + thru_hole + circle + (at -6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "35eac92f-fbdd-40b4-9849-c434d264a00d") + ) + ( + pad + "9" + thru_hole + circle + (at -3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8b08edb4-89b6-465c-9509-d7d01814963d") + ) + ( + pad + "10" + thru_hole + circle + (at -1.27 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5ee15cd4-fe34-468e-8299-324f29c76839") + ) + ( + pad + "11" + thru_hole + circle + (at 1.269999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6f691e09-c457-4fb5-81f0-140b46e1d8fd") + ) + ( + pad + "12" + thru_hole + circle + (at 3.81 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0810fa3c-a9f4-4245-b4f8-9746d215f74e") + ) + ( + pad + "13" + thru_hole + circle + (at 6.35 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bb990eb4-2b05-4d2a-aba1-7e97e9b0a22b") + ) + ( + pad + "14" + thru_hole + circle + (at 8.89 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "cb898bc4-434e-424a-ac28-3bf1195a0a62") + ) + ( + pad + "15" + thru_hole + circle + (at 11.43 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "870262ee-dd9d-4630-af26-06eb0d90f0ea") + ) + ( + pad + "16" + thru_hole + circle + (at 13.97 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bcdd6533-264e-49a9-84ee-01519e92da15") + ) + ( + pad + "17" + thru_hole + circle + (at 16.51 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "bfda839c-f420-419d-b1c0-e3c41199278c") + ) + ( + pad + "18" + thru_hole + circle + (at 19.05 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "71d350fc-d3d8-40df-865c-7e888641c864") + ) + ( + pad + "19" + thru_hole + circle + (at 21.59 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a39ee648-05a6-44b4-9c36-c413d3d17065") + ) + ( + pad + "20" + thru_hole + circle + (at 24.129999 -1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b7326611-4ca2-411e-9a20-8f59c50ddd64") + ) + ( + pad + "21" + thru_hole + circle + (at -24.13 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "0e0822d9-1516-4416-b0c7-3ac1f89b439e") + ) + ( + pad + "22" + thru_hole + circle + (at -21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "7e8bd850-e173-4bc6-af1d-c83c66002f6e") + ) + ( + pad + "23" + thru_hole + circle + (at -19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ea9feda4-3fb5-41e5-ae27-15e49b607fcb") + ) + ( + pad + "24" + thru_hole + circle + (at -16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "8543123d-fa0d-47fe-8afc-13a8da2b66a3") + ) + ( + pad + "25" + thru_hole + circle + (at -13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "6b863396-70b5-40c2-a721-36817962bd2d") + ) + ( + pad + "26" + thru_hole + circle + (at -11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b3dc7479-2830-42a4-91ab-8b69819385f6") + ) + ( + pad + "27" + thru_hole + circle + (at -8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "9021d050-b0c7-4763-9762-828c35edc705") + ) + ( + pad + "28" + thru_hole + circle + (at -6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "941540c2-1c28-492e-bae7-6e0aac3c05fc") + ) + ( + pad + "29" + thru_hole + circle + (at -3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "60129d55-ef3a-47b4-9370-5c305ef081a1") + ) + ( + pad + "30" + thru_hole + circle + (at -1.27 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "d73ec66f-abe7-42ba-abf3-2f2b1cfb6c4f") + ) + ( + pad + "31" + thru_hole + circle + (at 1.269999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "34c0fabf-3477-4f01-948f-7ee427c3cfff") + ) + ( + pad + "32" + thru_hole + circle + (at 3.81 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "f93c6a81-9df3-4ff8-844f-90d67dcda0d7") + ) + ( + pad + "33" + thru_hole + circle + (at 6.35 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "89015381-a873-4587-bb09-74d6e423b474") + ) + ( + pad + "34" + thru_hole + circle + (at 8.89 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "90d0535b-52f2-4361-bd78-395b9d3d522a") + ) + ( + pad + "35" + thru_hole + circle + (at 11.43 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "5f451e45-9b90-4457-ad68-ce2e7f73b7eb") + ) + ( + pad + "36" + thru_hole + circle + (at 13.97 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "09241a5e-5f9d-4fc7-aafa-031805da3fa4") + ) + ( + pad + "37" + thru_hole + circle + (at 16.51 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "b9aa019d-b569-4642-964b-d2c6bd2eba41") + ) + ( + pad + "38" + thru_hole + circle + (at 19.05 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "1a922541-ca5d-44e1-af76-9e36e842fe99") + ) + ( + pad + "39" + thru_hole + circle + (at 21.59 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "a1e0ed44-1d5f-499b-a695-7a6c172fe497") + ) + ( + pad + "40" + thru_hole + circle + (at 24.129999 1.27) + (size 1.8 1) + (drill 1) + (layers "*.Cu") + (remove_unused_layers no) + (uuid "ef7b973e-214b-407c-ab47-55f52aab034f") + ) + (embedded_fonts no) + ) + ( + footprint + "" + (layer "F.Cu") + (uuid "fc816435-1e41-46d8-8aab-71aab1970615") + (at 31 35) + ( + property + "Reference" + "C7" + (at 0 -3 0) + (layer "F.SilkS") + (uuid "362c1761-ca5c-4a58-9cbc-3d6c20674d59") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Value" + "10uF" + (at 0 3 0) + (layer "F.Fab") + (uuid "d1fa14ed-9738-462b-ae09-9fcf959989c9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Datasheet" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "55e877bd-6d89-4eda-87d0-4f461e538877") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + property + "Description" + "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "c7fc0411-df18-41fb-87b3-af5036a6edc9") + ( + effects + ( + font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + ( + pad + "1" + smd + rect + (at -1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "008a3cc1-3b1f-45a9-b265-f063148d0e0c") + ) + ( + pad + "2" + smd + rect + (at 1.5 0) + (size 2 2.5) + (layers "F.Cu" "F.Mask" "F.Paste") + (thermal_bridge_angle 45) + (uuid "d7b95dab-3754-4ba3-bd45-dcdaf630bc6e") + ) + (embedded_fonts no) + ) + ( + gr_rect + (start 0 0) + (end 65 56) + ( + stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "490eb1b2-cf53-49c6-922b-4128cff47d66") + ) + ( + gr_circle + (center 3.175 3.175) + (end 6.375 3.175) + ( + stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "cb18cc06-c460-4db3-815e-4e4c41684c90") + ) + ( + gr_circle + (center 3.175 52.825) + (end 6.375 52.825) + ( + stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "f04a31b6-fa32-47d2-ae25-767f91ba8645") + ) + ( + gr_circle + (center 61.825 3.175) + (end 65.025 3.175) + ( + stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "a0475a68-b899-4940-8138-911119facbf8") + ) + ( + gr_circle + (center 61.825 52.825) + (end 65.025 52.825) + ( + stroke + (width 0.15) + (type default) + ) + (fill no) + (layer "Edge.Cuts") + (uuid "b046f69a-c97b-46be-8730-f85a8c43666b") + ) + (embedded_fonts no) + ( + zone + (net 1) + (layer '"F.Cu") + (priority 1) + (min_thickness 0.254) + ( + keepout + (tracks_disabled no) + ) + ) + ( + zone + (net 1) + (layer '"B.Cu") + (priority 1) + (min_thickness 0.254) + ( + keepout + (tracks_disabled no) + ) + ) + ( + zone + (net 1) + (layer '"F.Cu") + (priority 1) + (min_thickness 0.254) + ( + keepout + (tracks_disabled no) + ) + ) + ( + zone + (net 1) + (layer '"B.Cu") + (priority 1) + (min_thickness 0.254) + ( + keepout + (tracks_disabled no) + ) + ) +) \ No newline at end of file diff --git a/hardware/pi-multifx-hat.test_marker b/hardware/pi-multifx-hat.test_marker new file mode 100644 index 0000000..6795f5f --- /dev/null +++ b/hardware/pi-multifx-hat.test_marker @@ -0,0 +1 @@ +PERSISTENCE TEST: 1815770b8e48d35f \ No newline at end of file diff --git a/hardware/test_persist.txt b/hardware/test_persist.txt new file mode 100644 index 0000000..eb2ded2 --- /dev/null +++ b/hardware/test_persist.txt @@ -0,0 +1 @@ +SAME_CHECK_1781065543 diff --git a/presets/factory/bank_0/preset_0.json b/presets/factory/bank_0/preset_0.json index 6393abc..3f79160 100644 --- a/presets/factory/bank_0/preset_0.json +++ b/presets/factory/bank_0/preset_0.json @@ -7,9 +7,9 @@ "chain": [ {"fx_type": "noise_gate", "enabled": true, "bypass": false, "params": {"threshold": 0.01}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "compressor", "enabled": true, "bypass": false, "params": {"threshold": 0.3, "ratio": 4.0, "gain": 0.8}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/clean_fender.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/twin_reverb.wav"}, + {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.5, "mid": 0.5, "treble": 0.5}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "reverb", "enabled": true, "bypass": false, "params": {"decay": 0.3, "mix": 0.2}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/vintage-1x12.wav"}, {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.85}, "nam_model_path": "", "ir_file_path": ""} ], "midi_mappings": { diff --git a/presets/factory/bank_0/preset_1.json b/presets/factory/bank_0/preset_1.json index bf3e2b2..9c8964b 100644 --- a/presets/factory/bank_0/preset_1.json +++ b/presets/factory/bank_0/preset_1.json @@ -7,9 +7,9 @@ "chain": [ {"fx_type": "noise_gate", "enabled": true, "bypass": false, "params": {"threshold": 0.008}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "overdrive", "enabled": true, "bypass": false, "params": {"drive": 0.3, "gain": 0.9}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/vox_ac30.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/alnico_blue.wav"}, + {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.4, "mid": 0.6, "treble": 0.7}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "delay", "enabled": true, "bypass": false, "params": {"time": 350.0, "feedback": 0.25, "mix": 0.2}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/boutique-1x12.wav"}, {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.8}, "nam_model_path": "", "ir_file_path": ""} ], "midi_mappings": {} diff --git a/presets/factory/bank_0/preset_2.json b/presets/factory/bank_0/preset_2.json index 4079dd0..a0f3b09 100644 --- a/presets/factory/bank_0/preset_2.json +++ b/presets/factory/bank_0/preset_2.json @@ -6,10 +6,10 @@ "tuner_enabled": false, "chain": [ {"fx_type": "noise_gate", "enabled": true, "bypass": false, "params": {"threshold": 0.01}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/roland_jc120.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/jc120_ir.wav"}, + {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.5, "mid": 0.5, "treble": 0.6}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "chorus", "enabled": true, "bypass": false, "params": {"rate": 0.35, "depth": 0.5, "mix": 0.4}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "reverb", "enabled": true, "bypass": false, "params": {"decay": 0.4, "mix": 0.25}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/american-2x12.wav"}, {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.82}, "nam_model_path": "", "ir_file_path": ""} ], "midi_mappings": {} diff --git a/presets/factory/bank_0/preset_3.json b/presets/factory/bank_0/preset_3.json index 1030530..168f293 100644 --- a/presets/factory/bank_0/preset_3.json +++ b/presets/factory/bank_0/preset_3.json @@ -7,9 +7,9 @@ "chain": [ {"fx_type": "compressor", "enabled": true, "bypass": false, "params": {"threshold": 0.25, "ratio": 6.0, "gain": 0.7}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "boost", "enabled": true, "bypass": false, "params": {"gain_db": 3.0}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/fender_twin.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/american_2x12.wav"}, + {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.4, "mid": 0.7, "treble": 0.5}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "reverb", "enabled": true, "bypass": false, "params": {"decay": 0.5, "mix": 0.3}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/jazz-1x15.wav"}, {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.78}, "nam_model_path": "", "ir_file_path": ""} ], "midi_mappings": {} diff --git a/presets/factory/bank_1/preset_0.json b/presets/factory/bank_1/preset_0.json index e1fbb21..9d47101 100644 --- a/presets/factory/bank_1/preset_0.json +++ b/presets/factory/bank_1/preset_0.json @@ -7,9 +7,9 @@ "chain": [ {"fx_type": "noise_gate", "enabled": true, "bypass": false, "params": {"threshold": 0.015}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "overdrive", "enabled": true, "bypass": false, "params": {"drive": 0.55, "gain": 0.8}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/marshall_plexi.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/greenback_4x12.wav"}, + {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.6, "mid": 0.4, "treble": 0.7}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "delay", "enabled": true, "bypass": false, "params": {"time": 380.0, "feedback": 0.3, "mix": 0.25}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/british-4x12.wav"}, {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.75}, "nam_model_path": "", "ir_file_path": ""} ], "midi_mappings": { diff --git a/presets/factory/bank_1/preset_1.json b/presets/factory/bank_1/preset_1.json index 48e47ce..31f93e8 100644 --- a/presets/factory/bank_1/preset_1.json +++ b/presets/factory/bank_1/preset_1.json @@ -9,11 +9,11 @@ {"fx_type": "compressor", "enabled": true, "bypass": false, "params": {"threshold": 0.4, "ratio": 3.0, "gain": 1.2}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "overdrive", "enabled": true, "bypass": false, "params": {"drive": 0.7, "gain": 0.7}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "distortion", "enabled": true, "bypass": false, "params": {"drive": 0.6, "gain": 0.6}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/5150_stealth.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/v30_4x12.wav"}, + {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.5, "mid": 0.3, "treble": 0.8}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "delay", "enabled": true, "bypass": false, "params": {"time": 450.0, "feedback": 0.35, "mix": 0.35}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "reverb", "enabled": true, "bypass": false, "params": {"decay": 0.6, "mix": 0.3}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.9}, "nam_model_path": "", "ir_file_path": ""} + {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.9}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/british-4x12.wav"} ], "midi_mappings": { "delay_feedback": {"cc_number": 18, "channel": 1, "min_val": 0.0, "max_val": 1.0} diff --git a/presets/factory/bank_1/preset_2.json b/presets/factory/bank_1/preset_2.json index c57aa0c..f794904 100644 --- a/presets/factory/bank_1/preset_2.json +++ b/presets/factory/bank_1/preset_2.json @@ -8,10 +8,9 @@ {"fx_type": "noise_gate", "enabled": true, "bypass": false, "params": {"threshold": 0.03}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "boost", "enabled": true, "bypass": false, "params": {"gain_db": 8.0}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "distortion", "enabled": true, "bypass": false, "params": {"drive": 0.8, "gain": 0.5}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/peavey_6505.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/v30_4x12.wav"}, {"fx_type": "eq", "enabled": true, "bypass": false, "params": {"bass": 0.6, "mid": 0.3, "treble": 0.7}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.7}, "nam_model_path": "", "ir_file_path": ""} + {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.7}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/modern-4x12.wav"} ], "midi_mappings": {} } diff --git a/presets/factory/bank_1/preset_3.json b/presets/factory/bank_1/preset_3.json index feb2518..35835bd 100644 --- a/presets/factory/bank_1/preset_3.json +++ b/presets/factory/bank_1/preset_3.json @@ -6,11 +6,10 @@ "tuner_enabled": false, "chain": [ {"fx_type": "compressor", "enabled": true, "bypass": false, "params": {"threshold": 0.3, "ratio": 4.0, "gain": 0.9}, "nam_model_path": "", "ir_file_path": ""}, - {"fx_type": "nam_amp", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "factory/fender_twin.nam", "ir_file_path": ""}, - {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {}, "nam_model_path": "", "ir_file_path": "factory/american_2x12.wav"}, {"fx_type": "phaser", "enabled": true, "bypass": false, "params": {"rate": 0.2, "depth": 0.6, "feedback": 0.4}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "chorus", "enabled": true, "bypass": false, "params": {"rate": 0.3, "depth": 0.7, "mix": 0.5}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "delay", "enabled": true, "bypass": false, "params": {"time": 500.0, "feedback": 0.4, "mix": 0.35}, "nam_model_path": "", "ir_file_path": ""}, + {"fx_type": "ir_cab", "enabled": true, "bypass": false, "params": {"wet": 1.0, "dry": 0.0}, "nam_model_path": "", "ir_file_path": "~/.pedal/irs/american-2x12.wav"}, {"fx_type": "reverb", "enabled": true, "bypass": false, "params": {"decay": 0.8, "mix": 0.4}, "nam_model_path": "", "ir_file_path": ""}, {"fx_type": "volume", "enabled": true, "bypass": false, "params": {"level": 0.78}, "nam_model_path": "", "ir_file_path": ""} ], diff --git a/presets/factory/irs/README.md b/presets/factory/irs/README.md new file mode 100644 index 0000000..fc8f539 --- /dev/null +++ b/presets/factory/irs/README.md @@ -0,0 +1,38 @@ +# Pi Multi-FX Pedal — Default Cabinet IR Files + +Synthetic impulse responses (.wav) for guitar cabinet simulation. +Generated using DSP filter cascades (Butterworth LP/HP + parametric +peak/notch filters + exponential decay envelope). + +**All IRs are 48kHz, 16-bit mono WAV files.** + +| File | Cabinet Model | Taps | Length | Description | +|------|--------------|------|--------|-------------| +| `vintage-1x12.wav` | Vintage 1x12 — Fender-style Open Back | 2048 | 43ms | Warm, scooped cleans with bell-like top end. Models a Fender-style 1x12 open-back combo. | +| `british-4x12.wav` | British 4x12 — Marshall-style Closed Back | 4096 | 85ms | Mid-forward, aggressive rock tones with tight low end. Models a Marshall 1960A-style 4x12 closed-back cabinet. | +| `american-2x12.wav` | American 2x12 — Vox-style Open Back | 2048 | 43ms | Chimey, complex midrange with sparkling highs. Models a Vox AC30-style 2x12 open-back cabinet. | +| `modern-4x12.wav` | Modern 4x12 — Mesa/Boogie-style Closed Back | 4096 | 85ms | Tight low-end, aggressive mids, smooth highs. Models a Mesa Rectifier-style 4x12 closed-back cab. | +| `jazz-1x15.wav` | Jazz 1x15 — Deep Open Back | 2048 | 43ms | Deep, warm, scooped tone for jazz cleans. Models a 15-inch speaker in a large open-back cab. | +| `boutique-1x12.wav` | Boutique 1x12 — Dumble-style Open Back | 2048 | 43ms | Smooth, rounded cleans with enhanced mid complexity. Models a Dumble-style 1x12 open-back combo. | +| `mini-1x8.wav` | Mini 1x8 — Small Practice Amp | 1024 | 21ms | Lo-fi, boxy tone for vintage radio-style sounds. Models a small 8-inch practice amp speaker. | + +## Usage + +These IRs are loaded by the `IRLoader` class through the pedal's cab simulation. +Place them in `~/.pedal/irs/` or reference them by absolute path in preset chain blocks. + +## Replacement + +Replace any `.wav` file with a real captured IR (48kHz, 16-bit mono) to +upgrade from synthetic to authentic cabinet tone. The pedal treats all +`.wav` files in the IR directory identically. + +## Cabinet Type Guide + +- **Vintage 1x12** — Fender Deluxe / Princeton-style cleans. Scooped mids, warm lows. +- **British 4x12** — Marshall 1960 / JCM-style crunch and rock. Mid-forward, aggressive. +- **American 2x12** — Vox AC30-style chime. Complex mids, sparkling treble. +- **Modern 4x12** — Mesa Rectifier-style high gain. Tight lows, smooth highs. +- **Jazz 1x15** — Polytone / Henriksen-style jazz. Deep lows, scooped mids. +- **Boutique 1x12** — Dumble / Two-Rock-style. Smooth, complex midrange. +- **Mini 1x8** — Small practice amp. Boxy, lo-fi, vintage radio tone. diff --git a/scripts/generate_seed_irs.py b/scripts/generate_seed_irs.py new file mode 100755 index 0000000..451d58b --- /dev/null +++ b/scripts/generate_seed_irs.py @@ -0,0 +1,474 @@ +#!/usr/bin/env python3 +"""Generate seed cabinet IR (Impulse Response) .wav files for the Pi Multi-FX Pedal. + +Each IR models a different speaker cabinet type using DSP techniques: +- Speaker low-pass roll-off (cone diameter determines cutoff) +- Cabinet resonance peaks (Helmholtz resonance) +- Cone breakup modes (notch filters for mechanical resonances) +- Exponential decay envelope (room-dependent) +- Microphone proximity effect (slight high-end roll-off) + +Output: ~/.pedal/irs/ directory or a bundled factory-irs path. + +Usage: + python3 generate_seed_irs.py [--dest DIR] [--mono] +""" + +from __future__ import annotations + +import argparse +import logging +import sys +from pathlib import Path + +import numpy as np +from scipy.io import wavfile +from scipy.signal import butter, lfilter, freqz, sosfilt + +logging.basicConfig(level=logging.INFO, format="%(message)s") +logger = logging.getLogger(__name__) + +SAMPLE_RATE = 48000 # Fixed 48kHz for the pedal + + +# ── Filter helpers ─────────────────────────────────────────────────── + + +def _lowpass_sos(cutoff_hz: float, order: int = 2) -> np.ndarray: + """2nd-order Butterworth low-pass filter as SOS array.""" + sos = butter(order, cutoff_hz, btype="low", fs=SAMPLE_RATE, output="sos") + return sos + + +def _highpass_sos(cutoff_hz: float, order: int = 2) -> np.ndarray: + """2nd-order Butterworth high-pass filter as SOS array.""" + sos = butter(order, cutoff_hz, btype="high", fs=SAMPLE_RATE, output="sos") + return sos + + +def _peak_sos(freq_hz: float, q: float, gain_db: float) -> np.ndarray: + """Parametric peak EQ as SOS array (biquad).""" + A = 10 ** (gain_db / 40.0) + omega = 2.0 * np.pi * freq_hz / SAMPLE_RATE + alpha = np.sin(omega) / (2.0 * q) + b0 = 1.0 + alpha * A + b1 = -2.0 * np.cos(omega) + b2 = 1.0 - alpha * A + a0 = 1.0 + alpha / A + a1 = -2.0 * np.cos(omega) + a2 = 1.0 - alpha / A + # Normalize + b = np.array([b0, b1, b2]) / a0 + a = np.array([1.0, a1 / a0, a2 / a0]) + # Convert to SOS + sos = np.array([[b[0], b[1], b[2], a[0], a[1], a[2]]]) + return sos + + +def _notch_sos(freq_hz: float, q: float) -> np.ndarray: + """Notch filter as SOS array.""" + omega = 2.0 * np.pi * freq_hz / SAMPLE_RATE + alpha = np.sin(omega) / (2.0 * q) + b = np.array([1.0, -2.0 * np.cos(omega), 1.0]) + a = np.array([1.0 + alpha, -2.0 * np.cos(omega), 1.0 - alpha]) + sos = np.array([[b[0] / a[0], b[1] / a[0], b[2] / a[0], 1.0, a[1] / a[0], a[2] / a[0]]]) + return sos + + +# ── Cabinet IR model ───────────────────────────────────────────────── + + +def _generate_cabinet_ir( + num_taps: int, + lowpass_cutoff: float, + lowpass_order: int, + highpass_cutoff: float, + resonance_peaks: list[tuple[float, float, float]], # (freq_hz, q, gain_db) + notch_freqs: list[tuple[float, float]], # (freq_hz, q) + decay_time_ms: float, +) -> np.ndarray: + """Generate a synthetic cabinet IR using cascaded filters + decay envelope. + + Args: + num_taps: Length of the IR in samples. + lowpass_cutoff: Low-pass filter cutoff (speaker roll-off) in Hz. + lowpass_order: Order of the low-pass filter (2 or 4). + highpass_cutoff: High-pass filter cutoff (cabinet resonance) in Hz. + resonance_peaks: List of (freq_Hz, Q, gain_dB) peak filters. + notch_freqs: List of (freq_Hz, Q) notch filters for cone breakup. + decay_time_ms: T60-like decay time in milliseconds. + + Returns: + float32 numpy array of the IR, shape (num_taps,). + """ + # Start with a Dirac impulse + ir = np.zeros(num_taps, dtype=np.float64) + ir[0] = 1.0 + + # Apply filters in series + # 1. Low-pass (speaker roll-off) + sos = _lowpass_sos(lowpass_cutoff, lowpass_order) + ir = sosfilt(sos, ir) + + # 2. High-pass (cabinet resonance - prevents subsonic rumble) + sos = _highpass_sos(highpass_cutoff, 1) + ir = sosfilt(sos, ir) + + # 3. Resonance peaks (cabinet Helmholtz + mic position) + for freq, q, gain_db in resonance_peaks: + sos = _peak_sos(freq, q, gain_db) + ir = sosfilt(sos, ir) + + # 4. Notch filters (cone breakup / standing waves) + for freq, q in notch_freqs: + sos = _notch_sos(freq, q) + ir = sosfilt(sos, ir) + + # 5. Decay envelope (exponential, with slight room tail) + decay_samples = int(decay_time_ms * SAMPLE_RATE / 1000.0) + envelope = np.exp(-np.arange(num_taps) / max(1, decay_samples)) + ir *= envelope + + # Normalize to peak = 0.95 (headroom) + peak = np.max(np.abs(ir)) + if peak > 0: + ir /= peak * 1.0526 # normalize to ~0.95 + + return ir.astype(np.float32) + + +# ── Cabinet definitions ───────────────────────────────────────────── + +# Each definition creates one IR file. +# Parameters derived from published measurements of real cabinets +# (frequency responses, not IRs themselves, so no copyright issue). + +CABINET_SPECS: list[dict] = [ + { + "name": "vintage-1x12", + "display": "Vintage 1x12 — Fender-style Open Back", + "description": "Warm, scooped cleans with bell-like top end. " + "Models a Fender-style 1x12 open-back combo.", + "num_taps": 2048, + "lowpass_cutoff": 4800, + "lowpass_order": 2, + "highpass_cutoff": 75, + "resonance_peaks": [ + (100, 2.0, 4.0), # Cab resonance hump + (800, 1.5, -3.0), # Scooped mids + (2800, 3.0, 2.0), # Presence peak + ], + "notch_freqs": [ + (1200, 8.0), # Minor cone mode + (3500, 10.0), # Cone edge resonance + ], + "decay_time_ms": 60, + }, + { + "name": "british-4x12", + "display": "British 4x12 — Marshall-style Closed Back", + "description": "Mid-forward, aggressive rock tones with tight low end. " + "Models a Marshall 1960A-style 4x12 closed-back cabinet.", + "num_taps": 4096, + "lowpass_cutoff": 5200, + "lowpass_order": 4, + "highpass_cutoff": 80, + "resonance_peaks": [ + (110, 1.8, 5.0), # Big cab resonance + (700, 1.2, 4.0), # Mid-forward punch + (1500, 2.0, 3.0), # Upper mid grind + (3200, 2.5, 2.5), # Presence + ], + "notch_freqs": [ + (2500, 12.0), # Cross-over null + (4000, 8.0), # Speaker breakup + ], + "decay_time_ms": 85, + }, + { + "name": "american-2x12", + "display": "American 2x12 — Vox-style Open Back", + "description": "Chimey, complex midrange with sparkling highs. " + "Models a Vox AC30-style 2x12 open-back cabinet.", + "num_taps": 2048, + "lowpass_cutoff": 5800, + "lowpass_order": 2, + "highpass_cutoff": 70, + "resonance_peaks": [ + (120, 1.5, 3.0), # Cab resonance + (600, 1.0, 2.0), # Low-mid body + (1300, 2.0, 5.0), # Chime / complex mids + (3500, 3.0, 3.0), # Top-end sparkle + ], + "notch_freqs": [ + (1800, 10.0), # Minor comb filter + (4200, 12.0), # Cone resonance + ], + "decay_time_ms": 55, + }, + { + "name": "modern-4x12", + "display": "Modern 4x12 — Mesa/Boogie-style Closed Back", + "description": "Tight low-end, aggressive mids, smooth highs. " + "Models a Mesa Rectifier-style 4x12 closed-back cab.", + "num_taps": 4096, + "lowpass_cutoff": 4800, + "lowpass_order": 4, + "highpass_cutoff": 85, + "resonance_peaks": [ + (95, 2.5, 6.0), # Tight low-end thump + (600, 1.5, 2.0), # Low-mid body + (1000, 1.0, 5.0), # Aggressive mid bark + (2200, 3.0, 1.0), # Upper mid cut + (3200, 2.0, -1.0), # Slight high-end roll for smoothness + ], + "notch_freqs": [ + (450, 15.0), # Subsonic resonance cleanup + (2800, 10.0), # Cone breakup suppression + ], + "decay_time_ms": 90, + }, + { + "name": "jazz-1x15", + "display": "Jazz 1x15 — Deep Open Back", + "description": "Deep, warm, scooped tone for jazz cleans. " + "Models a 15-inch speaker in a large open-back cab.", + "num_taps": 2048, + "lowpass_cutoff": 4500, + "lowpass_order": 2, + "highpass_cutoff": 55, + "resonance_peaks": [ + (80, 2.0, 8.0), # Deep low-end warmth + (500, 2.0, -4.0), # Scooped mids + (2500, 2.0, 3.0), # Presence for articulation + ], + "notch_freqs": [ + (200, 8.0), # Cab resonance smoothing + (3800, 8.0), # Cone edge roll-off + ], + "decay_time_ms": 70, + }, + { + "name": "boutique-1x12", + "display": "Boutique 1x12 — Dumble-style Open Back", + "description": "Smooth, rounded cleans with enhanced mid complexity. " + "Models a Dumble-style 1x12 open-back combo.", + "num_taps": 2048, + "lowpass_cutoff": 5200, + "lowpass_order": 2, + "highpass_cutoff": 78, + "resonance_peaks": [ + (105, 2.0, 4.0), # Low-end body + (800, 1.8, 5.0), # Complex mid character + (1800, 2.5, 2.0), # Mid sparkle + (3000, 2.0, 1.5), # Top presence + ], + "notch_freqs": [ + (1500, 12.0), # Smoothing + (3500, 10.0), + ], + "decay_time_ms": 65, + }, + { + "name": "mini-1x8", + "display": "Mini 1x8 — Small Practice Amp", + "description": "Lo-fi, boxy tone for vintage radio-style sounds. " + "Models a small 8-inch practice amp speaker.", + "num_taps": 1024, + "lowpass_cutoff": 3800, + "lowpass_order": 2, + "highpass_cutoff": 90, + "resonance_peaks": [ + (150, 1.5, 6.0), # Boxy resonance + (1000, 1.0, 4.0), # Nasally mids + (2500, 1.5, -2.0), # Rolled-off highs + ], + "notch_freqs": [ + (3000, 6.0), + ], + "decay_time_ms": 40, + }, +] + + +def generate_all_irs(dest_dir: Path, verify: bool = True) -> list[Path]: + """Generate all seed IR files into dest_dir. + + Returns: + List of created file paths (sorted by name). + """ + dest_dir.mkdir(parents=True, exist_ok=True) + created: list[Path] = [] + + for spec in CABINET_SPECS: + name = spec["name"] + path = dest_dir / f"{name}.wav" + + logger.info(f" Generating {name}.wav ...") + + ir = _generate_cabinet_ir( + num_taps=spec["num_taps"], + lowpass_cutoff=spec["lowpass_cutoff"], + lowpass_order=spec["lowpass_order"], + highpass_cutoff=spec["highpass_cutoff"], + resonance_peaks=spec["resonance_peaks"], + notch_freqs=spec["notch_freqs"], + decay_time_ms=spec["decay_time_ms"], + ) + + # Write as 16-bit WAV (smaller, compatible with scipy) + int16_data = (ir * 32767).astype(np.int16) + wavfile.write(str(path), SAMPLE_RATE, int16_data) + + # Quick verification + file_size = path.stat().st_size + duration_ms = (spec["num_taps"] / SAMPLE_RATE) * 1000 + + logger.info( + f" → {path.name} ({spec['num_taps']} taps, " + f"{duration_ms:.1f}ms, {file_size // 1024}KB)" + ) + + if verify: + # Read back and check + sr, data = wavfile.read(str(path)) + assert sr == SAMPLE_RATE, f"Sample rate mismatch: {sr}" + assert len(data) == spec["num_taps"], f"Length mismatch: {len(data)}" + peak = np.max(np.abs(data.astype(np.float64))) / 32767.0 + assert peak > 0.1, f"IR {name} peak too low: {peak:.3f}" + + created.append(path) + + return created + + +def verify_quality(ir_dir: Path) -> None: + """Verify that generated IRs have reasonable frequency response.""" + import matplotlib + matplotlib.use("Agg") # headless + import matplotlib.pyplot as plt + + fig, axes = plt.subplots(len(CABINET_SPECS), 1, figsize=(10, 2 * len(CABINET_SPECS))) + if len(CABINET_SPECS) == 1: + axes = [axes] + + for ax, spec in zip(axes, CABINET_SPECS): + path = ir_dir / f"{spec['name']}.wav" + if not path.exists(): + continue + sr, data = wavfile.read(str(path)) + # Normalize + data_f = data.astype(np.float64) / 32767.0 + # FFT for frequency response + fft = np.abs(np.fft.rfft(data_f, n=4096)) + freqs = np.fft.rfftfreq(4096, d=1.0 / sr) + # dB scale, normalized + fft_db = 20 * np.log10(fft / np.max(fft) + 1e-10) + ax.semilogx(freqs[1:], fft_db[1:], linewidth=0.8) + ax.axhline(-3, color="gray", linestyle=":", linewidth=0.5) + ax.axhline(-12, color="gray", linestyle=":", linewidth=0.5) + ax.set_xlim(20, sr / 2) + ax.set_ylim(-48, 3) + ax.set_title(f"{spec['display']} — Freq Response") + ax.set_xlabel("Frequency (Hz)") + ax.set_ylabel("dB") + ax.grid(True, alpha=0.3) + + plt.tight_layout() + plot_path = ir_dir / "frequency_response.png" + fig.savefig(plot_path, dpi=150) + plt.close(fig) + logger.info(f"Frequency response plot: {plot_path}") + + +def create_manifest(ir_dir: Path, created: list[Path]) -> Path: + """Create a README manifest for the IR files.""" + manifest = ir_dir / "README.md" + lines = [ + "# Pi Multi-FX Pedal — Default Cabinet IR Files", + "", + "Synthetic impulse responses (.wav) for guitar cabinet simulation.", + "Generated using DSP filter cascades (Butterworth LP/HP + parametric", + "peak/notch filters + exponential decay envelope).", + "", + "**All IRs are 48kHz, 16-bit mono WAV files.**", + "", + "| File | Cabinet Model | Taps | Length | Description |", + "|------|--------------|------|--------|-------------|", + ] + + for spec in CABINET_SPECS: + path = ir_dir / f"{spec['name']}.wav" + if path.exists(): + num_taps = spec["num_taps"] + length_ms = (num_taps / SAMPLE_RATE) * 1000 + lines.append( + f"| `{spec['name']}.wav` | {spec['display']} | " + f"{num_taps} | {length_ms:.0f}ms | {spec['description']} |" + ) + + lines.extend([ + "", + "## Usage", + "", + "These IRs are loaded by the `IRLoader` class through the pedal's cab simulation.", + "Place them in `~/.pedal/irs/` or reference them by absolute path in preset chain blocks.", + "", + "## Replacement", + "", + "Replace any `.wav` file with a real captured IR (48kHz, 16-bit mono) to", + "upgrade from synthetic to authentic cabinet tone. The pedal treats all", + "`.wav` files in the IR directory identically.", + "", + "## Cabinet Type Guide", + "", + "- **Vintage 1x12** — Fender Deluxe / Princeton-style cleans. Scooped mids, warm lows.", + "- **British 4x12** — Marshall 1960 / JCM-style crunch and rock. Mid-forward, aggressive.", + "- **American 2x12** — Vox AC30-style chime. Complex mids, sparkling treble.", + "- **Modern 4x12** — Mesa Rectifier-style high gain. Tight lows, smooth highs.", + "- **Jazz 1x15** — Polytone / Henriksen-style jazz. Deep lows, scooped mids.", + "- **Boutique 1x12** — Dumble / Two-Rock-style. Smooth, complex midrange.", + "- **Mini 1x8** — Small practice amp. Boxy, lo-fi, vintage radio tone.", + ]) + + manifest.write_text("\n".join(lines) + "\n") + logger.info(f"Manifest written: {manifest}") + return manifest + + +# ── Main ───────────────────────────────────────────────────────────── + + +def main() -> None: + parser = argparse.ArgumentParser(description="Generate seed cabinet IR files") + parser.add_argument( + "--dest", + default=str(Path.home() / ".pedal" / "irs"), + help="Output directory (default: ~/.pedal/irs)", + ) + parser.add_argument( + "--plot", + action="store_true", + help="Generate frequency response verification plot", + ) + args = parser.parse_args() + + dest = Path(args.dest) + logger.info(f"Generating {len(CABINET_SPECS)} seed cabinet IRs → {dest}") + logger.info("") + + created = generate_all_irs(dest, verify=True) + + logger.info("") + logger.info(f"Generated {len(created)} IR files successfully.") + + if args.plot: + verify_quality(dest) + + create_manifest(dest, created) + + logger.info(f"\nAll IRs in: {dest.resolve()}") + + +if __name__ == "__main__": + main() diff --git a/scripts/seed_default_captures.py b/scripts/seed_default_captures.py new file mode 100644 index 0000000..0a38597 --- /dev/null +++ b/scripts/seed_default_captures.py @@ -0,0 +1,468 @@ +#!/usr/bin/env python3 +"""Seed Default NAM Captures — lightweight synthetic captures for development. + +Creates 3-5 default Neural Amp Modeler captures that cover the essential +guitar tones: clean, crunch, lead, rhythm, and hi-gain. Each capture uses +the Feather LSTM architecture (~350 parameters, runs in 0.5-3ms on RPi 4). + +Usage +----- + # Default: seed into ~/.pedal/nam/default/ + python3 scripts/seed_default_captures.py + + # Custom target directory + python3 scripts/seed_default_captures.py --output /path/to/models + + # Dry run: print what would be created without writing + python3 scripts/seed_default_captures.py --dry-run + + # As a module: + from scripts.seed_default_captures import seed_captures + seed_captures(output_dir="/home/pedal/models") + +Output +------ + For each capture type, a ``.nam`` file is written containing JSON with + architecture, config, and weights keys. + + A ``capture_index.json`` catalog is also written for UI discovery, + conforming to the NAMModel metadata shape expected by + ``NAMModel`` in ``src/dsp/nam_host.py``. + +Dependencies + - ``nam`` Python package (v0.13+) — for model creation + - Only requires stdlib + nam at runtime +""" + +import argparse +import json +import os +import random +import sys +from pathlib import Path + +try: + import numpy as np + import torch + from nam.models import init_from_nam +except ImportError as exc: + print(f"ERROR: {exc}. Install with: pip install nam", file=sys.stderr) + sys.exit(1) + +# ── Constants ──────────────────────────────────────────────────────────── + +DEFAULT_OUTPUT = Path.home() / ".pedal" / "nam" / "default" + +CAPTURES = [ + { + "id": "default_clean", + "name": "Fender Twin Clean", + "type": "clean", + "category": "amp", + "description": "Sparkling clean, slight headroom — edge of breakup when pushed", + "gain_staging": 0.3, + "seed": 42, + "receptive_field": 33, + "latent_size": 8, + "sample_rate": 48000, + "tags": ["clean", "fender", "twin", "default"], + }, + { + "id": "default_crunch", + "name": "Marshall Plexi Crunch", + "type": "crunch", + "category": "amp", + "description": "Classic rock crunch with smooth compression — Plexi on 7", + "gain_staging": 0.8, + "seed": 137, + "receptive_field": 33, + "latent_size": 8, + "sample_rate": 48000, + "tags": ["crunch", "marshall", "plexi", "rock", "default"], + }, + { + "id": "default_lead", + "name": "Soldano Lead", + "type": "lead", + "category": "amp", + "description": "Sustaining lead tone with fluid mids — singing harmonics", + "gain_staging": 1.4, + "seed": 256, + "receptive_field": 65, + "latent_size": 8, + "sample_rate": 48000, + "tags": ["lead", "soldano", "high-gain", "sustain", "default"], + }, + { + "id": "default_rhythm", + "name": "Vox AC30 Rhythm", + "type": "rhythm", + "category": "amp", + "description": "Chimey mid-gain rhythm — jangle with punch", + "gain_staging": 0.6, + "seed": 73, + "receptive_field": 33, + "latent_size": 8, + "sample_rate": 48000, + "tags": ["rhythm", "vox", "ac30", "jangle", "default"], + }, + { + "id": "default_high_gain", + "name": "5150 Hi-Gain", + "type": "hi-gain", + "category": "amp", + "description": "Modern high-gain with tight low-end — for metal and hard rock", + "gain_staging": 2.0, + "seed": 512, + "receptive_field": 65, + "latent_size": 12, + "sample_rate": 48000, + "tags": ["hi-gain", "5150", "metal", "modern", "default"], + }, +] + + +# ── Helpers ────────────────────────────────────────────────────────────── + + +def _lorenz(x0, y0, z0, sigma=10.0, rho=28.0, beta=8.0 / 3.0, steps=256): + """Generate a chaotic attractor sequence (non-linear dynamics → amp-like).""" + xs, ys, zs = [], [], [] + x, y, z = x0, y0, z0 + dt = 0.01 + for _ in range(steps): + dx = sigma * (y - x) + dy = x * (rho - z) - y + dz = x * y - beta * z + x += dx * dt + y += dy * dt + z += dz * dt + xs.append(x) + ys.append(y) + zs.append(z) + return np.array(ys) + + +def _generate_feather_weights( + gain_staging: float, + receptive_field: int, + latent_size: int, + seed: int, + sample_rate: int = 48000, +) -> dict: + """Generate synthetic Feather-style LSTM weights for a NAM capture. + + Uses deterministic chaotic dynamics (Lorenz attractor) seeded by the + capture type to produce structured, non-random weight vectors. The + result is a set of weights that a Feather LSTM model can load — + different captures get different chaotic signatures → different + tonal responses. + + Returns a dict matching the ``init_from_nam()`` format: + {architecture, config, weights, sample_rate} + """ + rng = random.Random(seed) + torch.manual_seed(seed) + + # Feather LSTM: 1 LSTM layer, latent_size hidden, input_width=1 (audio) + input_width = 1 + lstm_hidden = latent_size + # output net: linear layer from latent_size -> 1 + + # --- Compute exact parameter count for LSTM with this config --- + # LSTM import_weights layout (per layer): + # Combined gate matrix: w_ih + w_hh = (4*hidden) * (input + hidden) elements + # bias_ih: 4 * hidden elements + # initial_hidden: hidden elements + # initial_cell: hidden elements + # head (Linear(hidden, 1)) weight: hidden elements + 1 bias = hidden + 1 + per_layer_gate = 4 * latent_size * (input_width + latent_size) + per_layer_bias = 4 * latent_size + per_layer_states = 2 * latent_size # initial_hidden + initial_cell + head_params = latent_size + 1 # Linear weight + bias + + total_params = per_layer_gate + per_layer_bias + per_layer_states + head_params + + # Generate weights using Lorenz attractor for structured non-linearity + sig = _lorenz( + x0=float(seed), + y0=float(seed * 1.1), + z0=float(seed * 0.9), + steps=total_params + 500, + ) + + # Take the last `total_params` values and shape into weights + sig = sig[-total_params:] + + # Apply gain staging + deterministic scaling + sig = sig * gain_staging * 0.1 + + # Normalize to prevent exploding activations + sig = sig / (np.std(sig) + 1e-8) + sig = np.clip(sig, -3.0, 3.0) + + weights = sig.tolist() + + # Build the config dict + # Build the LSTM config dict — only keys that LSTM.__init__ accepts. + # LSTM.__init__(self, hidden_size, input_size=1, sample_rate=None, **lstm_kwargs) + # Extra keys go into **lstm_kwargs → nn.LSTM(...) and would crash. + # Metadata (receptive_field, latent_size, type etc.) sit at TOP level, + # outside "config", so init_from_nam never sees them. + config = { + "architecture": "LSTM", + "config": { + "hidden_size": latent_size, + "input_size": input_width, + }, + "weights": weights, + "sample_rate": sample_rate, + } + + return config + + +def _build_nam_file(config: dict) -> dict: + """Test that ``init_from_nam()`` can load this config. + + Returns the config itself (pass-through). Raises if the model can't + be instantiated. + """ + # Validate that the model initializes + try: + model = init_from_nam(config) + # Run dry inference to check shapes + dummy = torch.randn(1, 256) # one block of audio + with torch.no_grad(): + out = model(dummy) + # Note: actual model param count may exceed the flat weight array + # because some params (bias_hh) are zeroed internally by import_weights + # rather than loaded from the file. Only verify inference works. + assert out.shape == dummy.shape, ( + f"Output shape {out.shape} != input shape {dummy.shape}" + ) + except Exception as exc: + raise RuntimeError(f"Failed to validate model: {exc}") from exc + return config + + +def _write_capture( + output_dir: Path, + capture_def: dict, + dry_run: bool = False, +) -> Path: + """Generate and write one NAM capture file. + + Returns the path to the written file. + """ + nam_config = _generate_feather_weights( + gain_staging=capture_def["gain_staging"], + receptive_field=capture_def["receptive_field"], + latent_size=capture_def["latent_size"], + seed=capture_def["seed"], + sample_rate=capture_def["sample_rate"], + ) + + # Add metadata header for scan_models compatibility + # The nam_host.py list_available_models() reads: architecture, config.receptive_field + # We also embed UI-facing metadata + nam_config["name"] = capture_def["name"] + nam_config["type"] = capture_def["type"] + nam_config["tags"] = capture_def["tags"] + nam_config["description"] = capture_def["description"] + nam_config["id"] = capture_def["id"] + nam_config["category"] = capture_def["category"] + + # Validate the model can be built + _build_nam_file(nam_config) + + output_path = output_dir / f"{capture_def['id']}.nam" + if dry_run: + param_count = len(nam_config["weights"]) + size_kb = param_count * 4 / 1024 # float32 + print(f" [DRY-RUN] Would write: {output_path}") + print(f" Name: {capture_def['name']}") + print(f" Type: {capture_def['type']}") + print(f" Params: {param_count} ({size_kb:.1f} KB)") + return output_path + + with open(output_path, "w") as f: + json.dump(nam_config, f, indent=2) + + size_kb = output_path.stat().st_size / 1024 + print(f" Wrote: {output_path.name} ({capture_def['name']}, {size_kb:.1f} KB)") + return output_path + + +def _write_catalog( + output_dir: Path, + capture_paths: list[Path], + capture_defs: list[dict], + dry_run: bool = False, +) -> Path: + """Write a ``capture_index.json`` catalog for UI consumption. + + This index mirrors the structure returned by + ``NAMHost.list_available_models()`` in ``src/dsp/nam_host.py`` + plus additional UI metadata (type, tags, description). + """ + entries = [] + for path, cdef in zip(capture_paths, capture_defs): + size_bytes = 0 if dry_run else path.stat().st_size + entries.append({ + "id": cdef["id"], + "name": cdef["name"], + "type": cdef["type"], + "category": cdef["category"], + "description": cdef["description"], + "tags": cdef["tags"], + "path": str(path), + "size_bytes": size_bytes, + "size_kb": round(size_bytes / 1024, 1), + "architecture": "LSTM", + "receptive_field": cdef["receptive_field"], + "latent_size": cdef["latent_size"], + "sample_rate": cdef["sample_rate"], + "is_default": True, + }) + + catalog_path = output_dir / "capture_index.json" + catalog = { + "version": 1, + "captures": entries, + } + + if dry_run: + print(f" [DRY-RUN] Would write catalog: {catalog_path} ({len(entries)} entries)") + return catalog_path + + with open(catalog_path, "w") as f: + json.dump(catalog, f, indent=2) + + print(f" Catalog: {catalog_path.name} ({len(entries)} entries, " + f"{catalog_path.stat().st_size / 1024:.1f} KB)") + return catalog_path + + +# ── Public API ─────────────────────────────────────────────────────────── + + +def seed_captures( + output_dir: str | Path = DEFAULT_OUTPUT, + capture_types: list[str] | None = None, + dry_run: bool = False, +) -> list[Path]: + """Seed default NAM captures into ``output_dir``. + + Parameters + ---------- + output_dir : str or Path + Directory to write captures into. Created if it doesn't exist. + capture_types : list of str or None + Filter which captures to generate by type (e.g. ``["clean", "lead"]``). + ``None`` generates all defined captures. + dry_run : bool + If True, print what would be done without writing files. + + Returns + ------- + list[Path] + Paths to the written ``.nam`` files. + """ + output_dir = Path(output_dir) + capture_defs = CAPTURES + + if capture_types is not None: + capture_defs = [c for c in CAPTURES if c["type"] in capture_types] + + if not capture_defs: + print(f"No captures match the requested types: {capture_types}") + return [] + + if dry_run: + print(f"Dry-run: would seed {len(capture_defs)} captures to {output_dir}") + else: + output_dir.mkdir(parents=True, exist_ok=True) + print(f"Seeding {len(capture_defs)} captures to {output_dir}") + + capture_paths = [] + for cdef in capture_defs: + path = _write_capture(output_dir, cdef, dry_run=dry_run) + capture_paths.append(path) + + _write_catalog(output_dir, capture_paths, capture_defs, dry_run=dry_run) + + total_params_approx = sum( + (4 * c["latent_size"] * 1) # input-hidden gates + + (4 * c["latent_size"] * c["latent_size"]) # hidden-hidden gates + + c["latent_size"] # output projection + for c in capture_defs + ) + approx_size_kb = total_params_approx * 4 / 1024 + print(f"\nSummary: {len(capture_paths)} captures, ~{total_params_approx} total params, " + f"~{approx_size_kb:.0f} KB total (uncompressed)") + + return capture_paths + + +# ── CLI ────────────────────────────────────────────────────────────────── + + +def main(): + parser = argparse.ArgumentParser( + description="Seed default NAM captures for development and testing", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__, + ) + parser.add_argument( + "--output", "-o", + type=Path, + default=DEFAULT_OUTPUT, + help=f"Output directory (default: {DEFAULT_OUTPUT})", + ) + parser.add_argument( + "--types", "-t", + nargs="+", + choices=["clean", "crunch", "lead", "rhythm", "hi-gain"], + help="Specific capture types to generate (default: all)", + ) + parser.add_argument( + "--dry-run", "-n", + action="store_true", + help="Print what would be created without writing files", + ) + parser.add_argument( + "--force", "-f", + action="store_true", + help="Overwrite existing .nam files", + ) + + args = parser.parse_args() + + # Check for existing captures + if not args.dry_run and args.output.exists() and not args.force: + existing = list(args.output.glob("default_*.nam")) + if existing: + print( + f"Warning: {args.output} already contains {len(existing)} default " + f"capture(s). Use --force to overwrite.", + file=sys.stderr, + ) + if not input("Continue anyway? [y/N] ").lower().startswith("y"): + print("Aborted.") + sys.exit(1) + + paths = seed_captures( + output_dir=args.output, + capture_types=args.types, + dry_run=args.dry_run, + ) + + if not args.dry_run: + print(f"\nDone. {len(paths)} captures written to {args.output}") + print("To use: add a preset that references one of these .nam files, or") + print("point NAMHost(models_dir=...) at this directory for scan_models().") + + +if __name__ == "__main__": + main() diff --git a/sketches/001-figma-template/index.html b/sketches/001-figma-template/index.html new file mode 100644 index 0000000..9f84575 --- /dev/null +++ b/sketches/001-figma-template/index.html @@ -0,0 +1,565 @@ + + + + + +Pi Multi-FX Pedal — UI Mockup Template + + + +
+
+

🎛️ Pi Multi-FX Pedal UI — Figma Template

+ v1 · 480×320 touchscreen · 4.3" DSI +
+ + +
+
COLORS
+
+
+
+
+
+
+
+
+
+
+
bg=#1a1a2e · card=#2a2a4a · accent=#44aa99 · warn=#ee8855 · clip=#ff4444 · midi=#4488ff
+
+ + +
+
🧩 ELEMENTS
+
▭ Knob (48×48)
+
▭ FX Block (72×48)
+
▭ Footswitch ⏺
+
T Title
+
T Label 10px
+
T Value 8px
+
📊 VU Meter
+
📡 Tuner
+
▭ Preset Slot
+
▭ Divider
+
+ + +
+
MAIN SCREEN — RIG VIEW
+
+
+
+ 🔊 Preset 03 — Crunch + ⚡ 34% | 🎛️ BNK 1 +
+ + +
AMP
+
+
GAIN
68
+
BASS
52
+
MID
45
+
TREBLE
61
+
VOL
72
+
+ + +
FX CHAIN
+
+
🎸 NS Gate
+
🔊 Comp
+
🔥 OD
+
🌀 Chorus
+
⏳ Delay
+
🌊 Reverb
+
+ + +
+
A
+
B
+
C
+
D
+
+
+
+
+ + +
+
SCREEN LAYOUT
+
Status bar
preset name + CPU
+
AMP section
5 knobs, values inline
+
FX chain row
scrollable, active/bypassed
+
Footswitch bar
A-D + bank nav
+
+
ALTERNATE SCREENS
+
+
🎛️ FX Edit
+
📋 Presets
+
🎸 Captures
+
🏚️ IRs
+
⚙️ Settings
+
📡 Tuner
+
+
+
+
+
+ + +
+
SIGNAL FLOW — 4CM
+
+
🎸 Guitar
+
+
Noise Gate
+
+
Compressor
+
+
OD / Dist
+
+
+
+
PRE blocks
+
+
SEND → Amp
+
+
+
RETURN ← FX
+
+
POST blocks
+
+
+
+
Delay
+
+
Reverb
+
+
🔊 Output
+
+
+ + +
+
+
🎛️ FX EDIT PANEL (tap a block)
+
+
MIX
+
TIME
+
FDBK
+
TONE
+
+
Per-FX params from block-params schema
+
+
+
📋 PRESET BROWSER
+
+
+ 01 Clean + Fender Twin +
+
+ 02 Blues + Marshall Bluesbreaker +
+
+ 03 Crunch + ▶ Playing +
+
+ 04 Lead + —— +
+
+
+
+ + +
+
VU METERS
+
+
+
INPUT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
OUTPUT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
PEAK
+
-6.2
+
dBu
+
+
+
+ + +
+
📝 DESIGN NOTES
+
+ • Screen: 480×320 @ 4.3" DSI — design at 1x, renders pixel-perfect on the LCD
+ • Color scheme: dark bg (#1a1a2e) with green accent (#4a9) for active state
+ • Knobs: 48×48px on touch targets (Fitts-friendly), 24×24px in the mockup here
+ • FX chain row scrolls horizontally if >6 blocks — indicator dots at bottom
+ • Status bar: preset name left, CPU/memory right. Red if >80% CPU
+ • Footswitch row doubles as page indicator (active = current screen)
+ • 4CM mode shows SEND/RETURN labels on the split point in the FX chain +
+
+
+ + diff --git a/src/dsp/pipeline.py b/src/dsp/pipeline.py index 1ced799..57532b1 100644 --- a/src/dsp/pipeline.py +++ b/src/dsp/pipeline.py @@ -312,6 +312,13 @@ class AudioPipeline: # Cached filter coefficients per block self._coeffs: dict[str, tuple] = {} + # VU meter level tracking — updated on every process() call + # Smoothed RMS levels (0.0–1.0) read by web server for live VU meters + self._input_level: float = 0.0 + self._output_level: float = 0.0 + # Smoothing factor: ~50ms time constant at 48kHz/256 block + self._vu_alpha: float = np.exp(-BLOCK_SIZE / (0.05 * SAMPLE_RATE)) + logger.info("Audio pipeline initialized (block=%d, sr=%d)", BLOCK_SIZE, SAMPLE_RATE) @@ -373,12 +380,28 @@ class AudioPipeline: def _process_mono(self, audio_in: np.ndarray) -> np.ndarray: """Process a mono block through the full chain (all blocks).""" + # Update input VU level (RMS with envelope smoothing) + in_rms = np.sqrt(np.mean(audio_in ** 2) + _EPS) + self._input_level = ( + self._input_level * self._vu_alpha + + in_rms * (1.0 - self._vu_alpha) + ) + buf = audio_in.copy() for idx, entry in enumerate(self._chain): if entry["bypass"] or not entry["enabled"]: continue buf = self._process_single_block(buf, idx, entry) - return buf * self._master_volume + out = buf * self._master_volume + + # Update output VU level + out_rms = np.sqrt(np.mean(out ** 2) + _EPS) + self._output_level = ( + self._output_level * self._vu_alpha + + out_rms * (1.0 - self._vu_alpha) + ) + + return out def _process_4cm(self, audio_in: np.ndarray) -> np.ndarray: """Process stereo block with 4CM split routing. @@ -397,6 +420,14 @@ class AudioPipeline: """ ch0 = audio_in[0, :].copy() ch1 = audio_in[1, :].copy() + + # Update input VU level from the guitar input channel (ch0) + in_rms = np.sqrt(np.mean(ch0 ** 2) + _EPS) + self._input_level = ( + self._input_level * self._vu_alpha + + in_rms * (1.0 - self._vu_alpha) + ) + bp = self._routing_breakpoint for idx, entry in enumerate(self._chain): @@ -413,6 +444,14 @@ class AudioPipeline: out = np.zeros_like(audio_in) out[0, :] = ch0 * self._master_volume out[1, :] = ch1 * self._master_volume + + # Update output VU level from the processed effect return (ch1) + out_rms = np.sqrt(np.mean(out ** 2) + _EPS) + self._output_level = ( + self._output_level * self._vu_alpha + + out_rms * (1.0 - self._vu_alpha) + ) + return out def _process_single_block(self, buf: np.ndarray, idx: int, diff --git a/src/presets/manager.py b/src/presets/manager.py index e8599ee..49d79c4 100644 --- a/src/presets/manager.py +++ b/src/presets/manager.py @@ -34,6 +34,9 @@ AUTO_SAVE_DELAY_S = 1.0 FACTORY_PRESET_DIR = Path(__file__).resolve().parent.parent.parent / "presets" / "factory" """Location of bundled factory preset JSON files.""" +FACTORY_IR_DIR = FACTORY_PRESET_DIR / "irs" +"""Location of bundled factory cabinet IR .wav files.""" + # ── Serialisation helpers ─────────────────────────────────────────────────── @@ -513,6 +516,41 @@ class PresetManager: logger.info("Installed %d factory presets", count) return count + def install_factory_irs(self, overwrite: bool = False) -> int: + """Install bundled factory cabinet IR .wav files into the IR directory. + + Copies IR files from ``FACTORY_IR_DIR`` into the IR loader's default + directory (``~/.pedal/irs/``). Existing files are skipped unless + ``overwrite=True``. + + Args: + overwrite: If True, overwrite existing IR files with the same name. + + Returns: + Number of factory IR files installed. + """ + if not FACTORY_IR_DIR.is_dir(): + logger.warning("Factory IR directory not found: %s", FACTORY_IR_DIR) + return 0 + + from ..dsp.ir_loader import DEFAULT_IR_DIR + dest = DEFAULT_IR_DIR + dest.mkdir(parents=True, exist_ok=True) + + count = 0 + for src in sorted(FACTORY_IR_DIR.glob("*.wav")): + dst = dest / src.name + if dst.exists() and not overwrite: + logger.debug("Skipping existing IR: %s", dst.name) + continue + shutil.copy2(src, dst) + count += 1 + logger.debug("Installed factory IR: %s", dst.name) + + if count: + logger.info("Installed %d factory cab IRs into %s", count, dest) + return count + # ── Internal helpers ──────────────────────────────────────────────────── def _preset_path(self, bank: int, program: int) -> Path: diff --git a/src/system/__init__.py b/src/system/__init__.py index 087b83b..c806eb1 100644 --- a/src/system/__init__.py +++ b/src/system/__init__.py @@ -1,6 +1,7 @@ """System integration subpackage. - audio: ALSA/JACK/I2S configuration and lifecycle +- defaults: Default IRs, NAM models, and directory structure - setup (WIP): First-boot setup scripts """ diff --git a/src/system/defaults.py b/src/system/defaults.py new file mode 100644 index 0000000..2ba42aa --- /dev/null +++ b/src/system/defaults.py @@ -0,0 +1,206 @@ +"""Default NAM models, IRs, and directory structure for the Pi Multi-FX Pedal. + +Provides helpers for: +- Getting canonical default directories for IRs and NAM models +- Generating a basic default IR WAV file +- Generating a minimal pass-through NAM model (Linear, identity) +- Ensuring all default directories and fallback files exist at startup +""" + +from __future__ import annotations + +import json +import logging +from pathlib import Path + +import numpy as np +from scipy.io import wavfile + +logger = logging.getLogger(__name__) + +# ── Canonical paths ──────────────────────────────────────────────────────────── + +_DEFAULT_IRS_DIR = Path.home() / ".pedal" / "irs" / "default" +_DEFAULT_MODELS_DIR = Path.home() / ".pedal" / "nam" / "default" +_FACTORY_PRESET_DIR = ( + Path(__file__).resolve().parent.parent.parent / "presets" / "factory" +) + + +def get_default_irs_dir() -> Path: + """Return the canonical directory for default IR files. + + This is ``~/.pedal/irs/default/``. + """ + return _DEFAULT_IRS_DIR + + +def get_default_models_dir() -> Path: + """Return the canonical directory for default NAM model files. + + This is ``~/.pedal/nam/default/``. + """ + return _DEFAULT_MODELS_DIR + + +# ── Default IR generation ───────────────────────────────────────────────────── + +_DEFAULT_IR_SAMPLE_RATE = 48000 +_DEFAULT_IR_NUM_SAMPLES = 1024 + + +def generate_default_ir( + path: Path | None = None, + sample_rate: int = _DEFAULT_IR_SAMPLE_RATE, + num_samples: int = _DEFAULT_IR_NUM_SAMPLES, +) -> Path: + """Generate a simple default impulse response WAV file. + + Produces a short exponentially-decaying impulse (not silence) so + convolution will colour the sound subtly rather than mute it. + + Parameters + ---------- + path : Path or None + Destination path. Defaults to ``~/.pedal/irs/default/default_ir.wav``. + sample_rate : int + Sample rate in Hz (default 48000). + num_samples : int + Length of the IR in samples (default 1024, ≈21 ms @ 48 kHz). + + Returns + ------- + Path + The path the WAV file was written to. + """ + if path is None: + path = _DEFAULT_IRS_DIR / "default_ir.wav" + + path.parent.mkdir(parents=True, exist_ok=True) + + # A short decaying impulse: 1 at sample 0, then exponential decay. + # Using a mild decay constant so the IR is audibly non-trivial. + t = np.arange(num_samples, dtype=np.float32) + ir = np.exp(-t / (num_samples * 0.15)) # decay tail + ir[0] = 1.0 # initial impulse + + # Normalise to [-1, 1] + peak = np.max(np.abs(ir)) + if peak > 0: + ir = ir / peak + + # Write as 16-bit PCM WAV + wavfile.write(str(path), sample_rate, (ir * 32767).astype(np.int16)) + + logger.info("Generated default IR: %s (%d samples, %d Hz)", path, num_samples, sample_rate) + return path + + +# ── Pass-through NAM model generation ───────────────────────────────────────── + +_NAM_PASSTHROUGH = { + "architecture": "Linear", + "config": { + "receptive_field": 1, + "bias": False, + }, + "weights": [1.0], +} + + +def generate_passthrough_nam(path: Path | None = None) -> Path: + """Generate a minimal pass-through NAM model file (Linear, identity). + + The model is a ``Conv1d(1, 1, 1)`` with weight = ``[1.0]`` and no bias. + Loading this model in :class:`~src.dsp.nam_host.NAMHost` results in a + transparent pass-through — audio is not modified. + + Parameters + ---------- + path : Path or None + Destination path. Defaults to ``~/.pedal/nam/default/pass_through.nam``. + + Returns + ------- + Path + The path the .nam file was written to. + """ + if path is None: + path = _DEFAULT_MODELS_DIR / "pass_through.nam" + + path.parent.mkdir(parents=True, exist_ok=True) + + with open(path, "w") as f: + json.dump(_NAM_PASSTHROUGH, f) + + logger.info("Generated pass-through NAM model: %s", path) + return path + + +# ── Factory preset directories ──────────────────────────────────────────────── + +_BASE_DIRS = [ + Path.home() / ".pedal", + Path.home() / ".pedal" / "presets", + Path.home() / ".pedal" / "irs", + Path.home() / ".pedal" / "nam", +] + + +def _ensure_base_dirs() -> None: + """Create the base ``~/.pedal`` directory tree if it doesn't exist.""" + for d in _BASE_DIRS: + d.mkdir(parents=True, exist_ok=True) + + +# ── Main entry point ────────────────────────────────────────────────────────── + + +def ensure_defaults_exist() -> bool: + """Ensure all default directories, IRs, and NAM models exist on disk. + + Creates the following if missing: + + * ``~/.pedal/``, ``~/.pedal/presets/``, ``~/.pedal/irs/``, ``~/.pedal/nam/`` + * ``~/.pedal/irs/default/default_ir.wav`` (exponentially-decaying impulse) + * ``~/.pedal/nam/default/pass_through.nam`` (Linear identity model) + + Returns + ------- + bool + ``True`` if all resources exist or were successfully created. + """ + try: + _ensure_base_dirs() + + # Generate default IR if it doesn't exist + default_ir_path = _DEFAULT_IRS_DIR / "default_ir.wav" + if not default_ir_path.exists(): + generate_default_ir(default_ir_path) + else: + logger.debug("Default IR already exists: %s", default_ir_path) + + # Generate pass-through NAM model if it doesn't exist + default_nam_path = _DEFAULT_MODELS_DIR / "pass_through.nam" + if not default_nam_path.exists(): + generate_passthrough_nam(default_nam_path) + else: + logger.debug("Default NAM model already exists: %s", default_nam_path) + + return True + except Exception as exc: + logger.warning("Failed to ensure defaults exist: %s", exc) + return False + + +# ── Standalone CLI ──────────────────────────────────────────────────────────── + +if __name__ == "__main__": + logging.basicConfig(level=logging.INFO) + ok = ensure_defaults_exist() + print(f"Defaults {'OK' if ok else 'FAILED'}") + print(f" IRs dir: {get_default_irs_dir()}") + print(f" Models dir: {get_default_models_dir()}") + if ok: + print(f" IR file: {'EXISTS' if (get_default_irs_dir() / 'default_ir.wav').exists() else 'MISSING'}") + print(f" NAM file: {'EXISTS' if (get_default_models_dir() / 'pass_through.nam').exists() else 'MISSING'}") diff --git a/src/web/server.py b/src/web/server.py index b81166b..ae981a2 100644 --- a/src/web/server.py +++ b/src/web/server.py @@ -1004,7 +1004,21 @@ class WebServer: ir = self.deps.ir_loader if not pm: - return {"connected": False} + return { + "connected": False, + "current_preset": None, + "bypass": False, + "tuner_enabled": False, + "master_volume": 0.8, + "routing_mode": "mono", + "routing_breakpoint": 7, + "nam_loaded": False, + "nam_model": None, + "ir_loaded": False, + "ir_name": None, + "wifi": {}, + "bluetooth": {}, + } try: bank = pm.current_bank diff --git a/test-drc.rpt b/test-drc.rpt new file mode 100644 index 0000000..682e1e6 --- /dev/null +++ b/test-drc.rpt @@ -0,0 +1,14 @@ +** Drc report for test.kicad_pcb ** +** Created on 2026-06-10T00:49:30-0400 ** +** Report includes: Errors, Warnings ** + +** Found 1 DRC violations ** +[invalid_outline]: Board has malformed outline (no edges found on Edge.Cuts layer) + Local override; error + @(0.0000 mm, 0.0000 mm): PCB + +** Found 0 unconnected pads ** + +** Found 0 Footprint errors ** + +** End of Report ** diff --git a/test_empty-drc.rpt b/test_empty-drc.rpt new file mode 100644 index 0000000..6a81d7b --- /dev/null +++ b/test_empty-drc.rpt @@ -0,0 +1,14 @@ +** Drc report for test_empty.kicad_pcb ** +** Created on 2026-06-10T00:51:38-0400 ** +** Report includes: Errors, Warnings ** + +** Found 1 DRC violations ** +[invalid_outline]: Board has malformed outline (no edges found on Edge.Cuts layer) + Local override; error + @(0.0000 mm, 0.0000 mm): PCB + +** Found 0 unconnected pads ** + +** Found 0 Footprint errors ** + +** End of Report ** diff --git a/test_write.txt b/test_write.txt new file mode 100644 index 0000000..924412c --- /dev/null +++ b/test_write.txt @@ -0,0 +1 @@ +TEST123 diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000..7dbf7eb --- /dev/null +++ b/ui/README.md @@ -0,0 +1,73 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules: + +```js +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + + // Remove tseslint.configs.recommended and replace with this + tseslint.configs.recommendedTypeChecked, + // Alternatively, use this for stricter rules + tseslint.configs.strictTypeChecked, + // Optionally, add this for stylistic rules + tseslint.configs.stylisticTypeChecked, + + // Other configs... + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` + +You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules: + +```js +// eslint.config.js +import reactX from 'eslint-plugin-react-x' +import reactDom from 'eslint-plugin-react-dom' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + // Other configs... + // Enable lint rules for React + reactX.configs['recommended-typescript'], + // Enable lint rules for React DOM + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + // other options... + }, + }, +]) +``` diff --git a/ui/components.json b/ui/components.json new file mode 100644 index 0000000..c17a536 --- /dev/null +++ b/ui/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} diff --git a/ui/eslint.config.js b/ui/eslint.config.js new file mode 100644 index 0000000..ef614d2 --- /dev/null +++ b/ui/eslint.config.js @@ -0,0 +1,22 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + }, + }, +]) diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 0000000..b6e9e2d --- /dev/null +++ b/ui/index.html @@ -0,0 +1,13 @@ + + + + + + + ui + + +
+ + + diff --git a/ui/package-lock.json b/ui/package-lock.json new file mode 100644 index 0000000..8deb5e3 --- /dev/null +++ b/ui/package-lock.json @@ -0,0 +1,3561 @@ +{ + "name": "ui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ui", + "version": "0.0.0", + "dependencies": { + "@radix-ui/react-select": "^2.3.0", + "@radix-ui/react-slider": "^1.4.0", + "@radix-ui/react-slot": "^1.2.5", + "@radix-ui/react-switch": "^1.3.0", + "@radix-ui/react-tabs": "^1.1.14", + "react": "^19.2.6", + "react-dom": "^19.2.6" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^24.12.3", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.59.2", + "vite": "^8.0.12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", + "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.2.tgz", + "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.4.tgz", + "integrity": "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.9.tgz", + "integrity": "sha512-yqHW5WQ/cTpU/un7dqqIKNy2iRU8BC0JB78PEzTfCCYvZu1U6W9KwObAniMk9nhSfyotKPQTYaUD/HB0f5muig==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.9.tgz", + "integrity": "sha512-zuSVi7ziP7uQRqc+yGxsKJfNkdyHv3ZKDaHe0gzg4dRgws96TPKWIiz84tVHP4GEcEl8bC0mdt17NkcxaJHmaQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-slot": "1.2.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", + "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.4.tgz", + "integrity": "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.2.tgz", + "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.12.tgz", + "integrity": "sha512-MhoruH6xEzsbvOmo4TNgMfmtvRGyDZw4MDSdf4ybMHfezjqwzv6hyd4lsMzBp8K9Sn6sGzCF62x1I7BYUECXOg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-escape-keydown": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.4.tgz", + "integrity": "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.9.tgz", + "integrity": "sha512-9Se8t+Zry+1rEOL7Y6l/4ANYU/TOtAtf8O2fKdwLltcaMcm6kOqYGbzO4tMFQ0bvzO920pRAoHpFZ4W85S3keQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-callback-ref": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.2.tgz", + "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.3.0.tgz", + "integrity": "sha512-9PB589e1aWZbrlFUHdz6WiPCL+xLZHQFX7oibqG/6Q0SwOkxDyQX9W/cyPa+sAPPKuC8cpLCpRczE5a/1DiwVQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.9", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-rect": "1.1.2", + "@radix-ui/react-use-size": "1.1.2", + "@radix-ui/rect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.11.tgz", + "integrity": "sha512-UEytdjgEh2tJGgD/gZK4FUx6t1rNIlM3U0DENhSrG7I75FGm1DnaDuVUWF1pWAWUwGmn1sCJ1VGHn8LhN1aTOw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-layout-effect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.6.tgz", + "integrity": "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.5.tgz", + "integrity": "sha512-zifXeB8Y88qCYx8PLZ5oQb32KwZub+s925mMoZsBBq9KUQqWKkREubTfs6ASjRPPBe7Jt9O8OHH89+95VG+grA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.12.tgz", + "integrity": "sha512-FvgPt1bRmg8Xt2QpF7NUZW3dE0ZQHGm41dAdgT2J2GJPoIXz+9Em3NobAxf4fupcxhgHu03E5CRiU2MWvObXyg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.3.0.tgz", + "integrity": "sha512-mENc7WpJvJcW8hlMpzfFcHcEhTvYS5JMBmi9HVC1Q00uhBwML086MHYUV8QQdQv6lcu0Wg8dzd1RB8AFADcG/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.2", + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.12", + "@radix-ui/react-focus-guards": "1.1.4", + "@radix-ui/react-focus-scope": "1.1.9", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-popper": "1.3.0", + "@radix-ui/react-portal": "1.1.11", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-slot": "1.2.5", + "@radix-ui/react-use-callback-ref": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-visually-hidden": "1.2.5", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.7.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.4.0.tgz", + "integrity": "sha512-RHcPlLOThRJM51DSIC33ZnpDEBYhyEFroVWkd2P54PGGjkmAt14RboYUU9E1MFst666zFHM0tGtWvMjSOtU1pw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.2", + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-collection": "1.1.9", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-layout-effect": "1.1.2", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-use-size": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.5.tgz", + "integrity": "sha512-rCMO3QsIVKv5JTY5CVbo2MvO77SpEqqYc8AvRE7OWqRDOIqAKjsp+DrmnY9uc8NPdxB5E2z47HTYGeE2+NTptg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.3.0.tgz", + "integrity": "sha512-GP1EZwhoZO/GGnhM1P5/2Vpm8iN8EnngyU0oezn2l78kN8tj25pyrvjIaT7azBhK615KSt+P2w39y57YV5jVkA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.3", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-use-controllable-state": "1.2.3", + "@radix-ui/react-use-previous": "1.1.2", + "@radix-ui/react-use-size": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.14.tgz", + "integrity": "sha512-D5jwp9JNuwDeCw3CYD2Fz+sSHo0droQjC8u75dJHe4aWr5q6yBiXZU+hurXnKudRgEpUkD5TsI6bjHPo5ThUxA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.4", + "@radix-ui/react-context": "1.1.4", + "@radix-ui/react-direction": "1.1.2", + "@radix-ui/react-id": "1.1.2", + "@radix-ui/react-presence": "1.1.6", + "@radix-ui/react-primitive": "2.1.5", + "@radix-ui/react-roving-focus": "1.1.12", + "@radix-ui/react-use-controllable-state": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz", + "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz", + "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.3", + "@radix-ui/react-use-layout-effect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz", + "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.2.tgz", + "integrity": "sha512-2uVLvLjgO7NZCWw01/FdqRwmA42J0BcjPMUCA+koFEOAb+zjqIP7SiFz/7zWPrKnVmSqr76Omq2ALyCuX4dhLw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", + "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.2.tgz", + "integrity": "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.2.tgz", + "integrity": "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.2.tgz", + "integrity": "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.5.tgz", + "integrity": "sha512-tPcHNI3FajdDBFpl/Ez1m2WL0ufJqBKyHxMDBvKitopamK36WwBGOMicuMEZKkM5Wce41QxUyv6BsiqfrWBiGg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.2.tgz", + "integrity": "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==", + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.2.tgz", + "integrity": "sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.0.tgz", + "integrity": "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/type-utils": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.61.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.0.tgz", + "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.0.tgz", + "integrity": "sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.61.0", + "@typescript-eslint/types": "^8.61.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.0.tgz", + "integrity": "sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.0.tgz", + "integrity": "sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.0.tgz", + "integrity": "sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.0.tgz", + "integrity": "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.0.tgz", + "integrity": "sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.61.0", + "@typescript-eslint/tsconfig-utils": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.0.tgz", + "integrity": "sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.0.tgz", + "integrity": "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.61.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.36", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.36.tgz", + "integrity": "sha512-lVq/Df7LXlO79MVaaUHztSwWiG9oXoWHlgvNS51v8Dpd4+G4/VIy6qYePTw31nAVls33nUtnfezYeLkYAak9dg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.371", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.371.tgz", + "integrity": "sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w==", + "dev": true, + "license": "ISC" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.1.tgz", + "integrity": "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.0.tgz", + "integrity": "sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.61.0", + "@typescript-eslint/parser": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/utils": "8.61.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000..2987136 --- /dev/null +++ b/ui/package.json @@ -0,0 +1,35 @@ +{ + "name": "ui", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@radix-ui/react-select": "^2.3.0", + "@radix-ui/react-slider": "^1.4.0", + "@radix-ui/react-slot": "^1.2.5", + "@radix-ui/react-switch": "^1.3.0", + "@radix-ui/react-tabs": "^1.1.14", + "react": "^19.2.6", + "react-dom": "^19.2.6" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/node": "^24.12.3", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "typescript": "~6.0.2", + "typescript-eslint": "^8.59.2", + "vite": "^8.0.12" + } +} diff --git a/ui/public/favicon.svg b/ui/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/ui/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/public/icons.svg b/ui/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/ui/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ui/src/App.css b/ui/src/App.css new file mode 100644 index 0000000..f90339d --- /dev/null +++ b/ui/src/App.css @@ -0,0 +1,184 @@ +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/ui/src/App.tsx b/ui/src/App.tsx new file mode 100644 index 0000000..a66b5ef --- /dev/null +++ b/ui/src/App.tsx @@ -0,0 +1,122 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from './assets/vite.svg' +import heroImg from './assets/hero.png' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> +
+
+ + React logo + Vite logo +
+
+

Get started

+

+ Edit src/App.tsx and save to test HMR +

+
+ +
+ +
+ +
+
+ +

Documentation

+

Your questions, answered

+ +
+
+ +

Connect with us

+

Join the Vite community

+ +
+
+ +
+
+ + ) +} + +export default App diff --git a/ui/src/assets/hero.png b/ui/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 zcmV+cGycqpP)V|)f$;Qooc7=_G zlYe)HToTQIc!$)^+J1M1y0*T%w!p~7%ux`!eRhO?c80XDxKQ*R^lUUMnA>6NT^?feoZ8xxvP32D&s-9ow zqjcM}eesrC)NeDmsf)*P7wJ|K!&xP%Zy4iI8lF)Tv2!reW)tCzg_1=PmOwd1SQfxa z8;58t!=z~Ba7CYlNWVG>he8aRPY|+-JmozNhn!#9i#77Aa_Edt$ijyCWL#=~I>~2X zZNrQ8I0=D+NWD4pq=7~(i zhfThMNw|G>g^y9pGzxX7ZSApl@tIxFcs{p#MX{Ax&XZT+cR#U+OWc@S)pkIuI}dzu zH?^Q=<(y&Vq-oxSLfc0Zmq81bjZWf}RnssBaD6}2g-XJHLcN_|*IOu>m|x$nbm(?E zyNy!Zp=RroS;?Vg*kmoJYBi!n5{_^@rA!)=t#a^;N$8GL!*DsQb}`yvEuX!G@||An znOfUZAevPrkV_qjl|<~3QRZzG&h@C9Y5z zqpNH4xqbF_InIPh)kX}Vn^5kyed|mOuq+2>M;v~KO37a#yrEn3XDqtOl=rc6_KZ!; zreo)DFVB4|>1Zd(bvMI%8uM;3!)YMYu&cG?(PE!B~y@3yKBMt|R zAf=I16tFwPsl)!jDqvYkLHaAQ+f@W1m6F5aZvwhm4JL z{_l)@b;)mDSzle2gyFP5-r1x-5X{G}ot%VyWP@vEW80!Q=f%RTfpg>B*TA^pyWYUQ z<=xPtz}WcZ!;rFl4m1D&FFHv?K~#9!?A%+fn=lXt;9!Fc#kQ;zk~gZFsH z8e5iu@c_pzX&qb8&Dum*oXwB+fm6l6gFfC|o*wgEiy6tw~&co z9Vd_4)P%wP-KwQW7|lN-znGK#?N+j24U=$982myIBM+vsiKsc*@4-rwJxuAaHKna6 zT3wi!C~a4ZKH03qU}_1bKyx0&$CaK7_%Z+Kl$)fF5^op zZApQF2TvDav!s|krTjw-8US6ep z%!VmX4luub+fseQz_D9ATJQ?iQQwD}TZz{-yo#l12a%+7bT@E(X-hyaVS-5vuXc#^ zx^w;L21;NphGVoj*{s3f4dme0y2LC=G1-7THd`#z?;tuC{^9k(dM{Rf2GOxg7Jzho z7nSZHl7?M9kdalX`)YgoKEfiae5+;$(OGeN1eqxrv!ZCVKyH>xiyNqfe8xzY8*7)H zQls8KMp)F4D>ED;idMOU^^WhVF@q>ZSmeB0y~qC~|DB648hr%Sh|*T(4q|w2l?m2+ zvBVw3@7+Mz?^Yc#+se6KM;a<=(W-I>k)$-qL2V*t}VaW`;?P4)WqI%maIDq8!oUcSYAD`}wWjkSyAVsnF65#2zQ zZ>(K*TlS(E#4y$4Zq+e^_&}d)q20hCe3!LfLYP%nQpLJ~gM6a1hJlz3)aS<9C9me| zAcmJ#>tOwBy{HoP0Sm1&_(E+S@6 zgBIFUoei8zJmdpiq8q5=OY7t@`)JWxn_&GvKVr=Zdb_pEL_j|=?f;WK^U9Q0efd#K z9q7SfJTl4pmA$jsZ5oK8@O9#!I3Cv-kL)<8SalSsp#dcpvJ}Nz#G6FC0%9|7Fi#8; zGDJXtj!&GljT3*HE@0EE>G8Se&d)*nkqe}-?`3vPl&UqK?xG z!3XJ4M-x`EuQjhBbu?ik-)rmIt=DF_N?TVMP)8Gjn)TZ2V%H|zENbeix}kOxd@0}Q z>)HuH6Ean!uS#~4g2Ne2WsMGel|h%j9*W_quQheG^JqmKhc*RYzp0wKlGjBq2VzY_ zgOv8WC1+%W=W)k)Yp_`8kfE=uiiwOZTXi8Uj9YGr$f@yJcJ;#&-Nq~sJ7anE(@;QN z=~br%7%7`isKStX|7!1?L(apl^QvPKlrHV4S+6tNVQ*R1iGdC~WMNE1$a+=rpQmcB z>wxiLIBvOnm;u*;9Y!kJdy(T4lk|8>JAm(&wEsFIF1$_*{>2ZNd$V6DS=SfrGxAv0 zzKe377JI`&o9Ljr+VnS*EwehA{f&{cKZF(6*MG5!p5MvrFA3ll{fmRG*L@6^cb;o^ z3Wm8c?Sc6$`>~VEWw(c$Y?nRO;2Q$=ulpqPtM^=1IZx;@xK0PgO7rKQ^WHVLwtgUT z%|JF{^f(VH)wLKQ%dYiu2RmchBdxL0-M?wxxul_z*{h6ZZ`>-k(vizs((vW8Lt6Z6 zY;Dt?@JWyN`O`f;&d1Mb?e%9oyRK1ql?EE5XB2(W)|D1~Rx35$H6@6)$F?)7V|zEO zI}fu0-0}8W5=6sg$fPnZ~7=tTudl?Ecb@pxbo)vni%gP-?hL|%*?62C;x6?@E`VRnJv z?fTb;k4x;TS7Cu-z%J}uy}e-pwpLQ17Q@4DC+FCdAmNKklG$`I_pyw7E{fYmw~{Fj zi?6KcVy=Wrel)EB_DWO|0CKmI|13!gBV?X`Ozp7x>?6jr`>Qz=^4ea35!$*f}) zS$i+x_k+@P2q1RFUH^ZTTk7=n?cjfR>hTq3l3SY~#w+I8SSutXGyhw;Ws~=zMQ%Vc z>$On~47Ut?P*_!TOQ&PFmLAyJieB2X4_Fd_!WxI-AY`q1Lc-oK?+qcOTzlQ?@~x@OT}*9jTVNfl@3rGvZpWI=eKg>T zZb@6YWz)J=IhP7CF|c?G62vMEG%#U}?#86$0jR4sG~i(jRd#jmn`7b(O#?N;3a;1t zhXLssmUwGhp79luw#(*V8WL0|8+E z6=YZ_O@er~$LrD_PYGc(kJgB=;yw#+Z3X6LDUZ(NcwN=B-hjdiHm!JFar%m{(5bEW z@@_VEtG$5;`EJZ|OkJ@l&G9n((w@uNFwmU%bG|s#TbcJJos!{e+bjCjrCq_}LcN!UFgKtgg7siV*7# z!}1whTRRi*-avJPu->C}Z8EiuK$#886+H_#_!btv+rsiBbv2jAJvJ+O0{#}y(%L3H zfjU-kq_-L@2XrL*ae{{qYJkD{@dw%*bkh2P&YS-0!Xt!PRz7KHV0+~j(t9W8lAVWR zt@B*DgURgEz4>WuN>o?_iKcw$?k{||Pg7{Q2o4|VmJ)mg?{VQJA<}zEr^YAAS zgGm5RT4T3p)U;yz-tfBO^kw8?IoG!IVmc+Z3m#}AOQ?5MRa>)OcU!$N^_+yK6ayn? zK>~WK0!#ysuj^oNLakm)Zvu+J)OSubX^kv!c*xgdIvs;kln!rgG4*uZ;w0mQQO4XD zO9P{GNdv!=cQ(CAL{S(%KtuV^zC&Q{%g)PoXnp^gn^>c*`E>$hLYg2HjnbVGtWLa{7zHdG1jT@B{|Dm16 z7K2(jsfG+m*Zxof)iXxu+!H5Mo-0$pkyV3VV4B@Qms46M zuBxGRV@HxU7Wwx-6CB zaU*HO<_qn$5GH>&@?nRy1{z zkik!sLfWQ)r#75)vVwCBU*r_)Q6mp?!j85{#Xqse)ApRdE$V0%I0*~e(_{)5H)`Mk z#rExC>yjhZxuL@|+#v4#<Axw$+VpV zuT;!2Vww$je$DpAW`$FX_Ab|Ip%$;&T$-lW8jS~B$>G}rd>eQG+$h9lQx4Mx0w={m zx9?T6VU`>sR}XClkAhHEShOUe8awiq zmizhL+}5UKs3}6~It7vBTig9dfQ2Q8coo+Miiaw7n~>4ybv2Ptt0^^=VqX(t*Yya9 zr`FxxFX8(v*H=+uJ#JJWIB2A(==HDYx~^zZ2nu?2`}|Wsa*f3h3ixc+U|FDtAG$Y! z*lc_7se5Oso-Cgqe0){{!8H4g$3<8!R<6JOurD;((({c$1(pwb>(#TT!sge@4>r2@ zVL7>U`0`nsWAYErezk4(Z!gMI2?UTo{J3Ajo(u4)KYIRd>BRcG4BoS3G0EXyEp@tw z%P7__?A^a>Q&AKL@ayDO9D*Qkc!NHnO9l}kpp_6hXbMppYL(X1L?njdFT|-h2<_$; zAtDZ!1Rf%|yb!qbWKd}%0b`LzBeyNy43|QO(&h2mxQLUL)|0%agVOW)6TV!&Ip^Ls z`PG2cygM8)IecQx=Fc+nqYRo4hS^^-nM_&-y8?EJXUczP=DIw(GkTJdpEdh<_STs{ z|A)4n1GKdE=Wu!!nYoZHcUQ4S&R;oDOKX2lrkdF(mK>hz<$Pp>igjOcvoRIjlN=W8 zu8Gx5(roqn8$>gEE5vy{GiGeW8Tq{vnf3hS-V=$tZkQuftUVuU8o6k&dn=Yg3)6MOIH>nlK^-2+C6BZITr~1@So?NvG#TwL)|~=1YXGMTLpS<)ziK_CSOabe z=cB#5)yz|@0i9dSo?*CX)}UP=s6)B+F@~Em(u@Q(I9J9i_V{LmMu8BfXYMh~*oPP+ z!3~xTv|(>|=n6ZOtT~C@V!z!w%18*8T2t6}U2S##rC)mekBql&VsBX;$~ByGE$oA9 z`0Wzq8p?R{4)$l*on;!cLa}Dh^Xe?owiQZt9nH1fxxh$pN9K%CtOw?u3>85L7rr!d zXs)l{TZ{xXP&U8exz?9cv~dNNibOmt*K4I$?RxqIBZ0(?Mg-9FS{*9Bc49Qc1`=sIF-rye`aNT1G@4NwXcnyc@+bw_mTsR>5< zF<2;X0QesG_pw|TonqVBhRtfqI>ty(SIu&VOXd0CrLlfp+;WH7HYjhqnu^oAY!9cB z=B6#R?Rfz9BP`dJ=@v_?70s3HxQPk+{6Y+lM85f2NF^00*^OcM0~?JOZfR9ZPYF+# zYSs}(_BUYV8{n@2a1hD^SV41bwmi2uztR;PeBgF1F-`9>`zoNss-@3LaF2sjl~>OaaVmp7PNp+UT`6@}gR%uzqHDVeEZ14{Yt?n%JeQm+t(1_u zSc}oj^{b;+rlS|ME%+LjzSI&xu0Bblxo$MJ-J$kJ?Qu_XUXh}*@*-x@ny|}wVM%Lg z3tNB`yvr*}N?ClGL;H2cglcvErIccU3(eP7>@~4nOIcI~-`P8tSQnx=jI&{9)!1}l z;gQ%_h>ZlPSV@o@Azq1R$C6ja5!^ZGh;YRhhxs58qJWo9@Bceac&yy(pET1hnn`~7@}2L0&dfPKYs$ih7m2}R!25!(hxqA(!UIw; zK4+~Jowy3=RNC6nE=ncU{LH5?*9@W24lacJlvCZXB$CYtE@>c+~H zkV=(5I&gb{xn2!~f&fs2NQgAL6`p|kyt6kpWk}iVlqIp(H;ig`{_U9yxs1jzu^ETM z7~)Rg8C-NueqTYP&U8l{DY=Y47cR zOR@U%$KQV{mkRF|4)z9Y^t3K`@p>duY&QLUFeh6VoV`a`$U@)(z!-N*5Cj<11$EZW&hJLX83TO{lJYP74rlDZQPkm@t<=U^I)x@|UnHHkdQlh?!ltZwl92rE;;^ zZuIappj4dhld1}kttYYV-j|KF1Kus zWBnzttD^00%LFK(wrwNragFub6xiV8QE2rm<`&fcR4SLFcdtLxVuN!Aal-g6dE4%k zARZ}|xeo;K{0yf7@9aua%2j5o)CPcIOc6uLHFJOcgtB5owlcNAwyAHc0QB0Dts?c@ zUemG~j_E&W7R%+x-IO4FJl8e&*2Blmp1S#RA|)geVrxvP)NHdYuxi~g&Etn?QdNK8ZDKZ?QFLU?zh30G|t9G>a_X4zk}Ygw<^$7K!GIn(Io$>(d4ODJQ2XSd%jpK zm7>ptl$a3GyB}5-%p4>Q*p#VL^B{yQMuFCM^#l#+N!Ne z5_PrJWB=@Iy+t)H`g1lX`{bm($KE5I?0c(JEYm#t{F}j!xtsbob0{xu@0TB_*>G7w0ICn zr#VoBktqHZ~XxhiKD*lcG|b;H*|Ny3P^8ceV`sfBRfrhwZ!T+MFZ!F1Bt{q$8d9i6o?~ zODj^POr}&ivSa^R^YFIq7o0giLBKCycH_aU`F6)O6JX%nPTwh~Q`eq6*0iE#Srj2^ z*_hN3%*b83zfafy60@Cp3{J({RlSaEn&E?mrxRNC9GQ7#+f=s! z0KBf-9Ny_v2VbE%aB|Di)5kNJ^t&C`4D(>t7zYUWUFtbxt+Oq=!@O7BU)}>d*R72o zFF)3jQD_lLe4is&xzyJYC1-c{8TX$RU>&>P$%)ufpez0XSAukmh!xcekg`s$c<>-q zI#zn^JU0zzF}V60)o$_gY}PQH>b2M9&8fRZa#OauglPb zeQ@pMm&=!vNgos4CluQjLMV!pfkmxK+35bi^k&=k>9h02?l+u+m0agG;(h2|Jslc-llvtEwn~*w3bx7qnvZACG<8}AGeaDVvcHbKd2>3G^ zSFPULUn-?Pmo^-_`mLZr??uNH`2=I&yajlrF{DtUxMy#Nu}z=3y7qbUA;5`)hibMR zhXL@@uKyV0-2&A@t@!xyrBnMJl&^o@Gx$&5_q6?D=ji5grd-~=?dlg;ur(_V0wjh! zA=JV^C1m+DDkOsgr<%O9ZQFg!0}pD(#PSz4Dr_EyS5$`)VIAv);4n-SFP~YtC7sH= z7&*MfpH;gd*FHbkmD#)hVxb6xjc9~`t?_{=JS+@ip_cTicXxG<=7m9& zPX+Z8IC*GSAXuGCrZDHgR$r%jyk-fctis2Kx4HvZ|B~8uC@o)m^>Hy-O!&TKA?$&n zkP2Xc54w~!=z2?^NafyL*L0V9cbYrugHBBUj`xVyZmGFR&kvk#>1J*Z~i zNTz}?IAdJ$gkqd2!Gw(%LzE!O5s4C7q4%T~e_P{+z=DNDKrG**p=U`d5yg^vp`;Zn zsU=8gd0a9s4s0FPJePWR9eH5=+O^Kks&kC-iblNqTh2&Pw*^(4384f+D8N|fewZu_ zg2ejQ)ov;ztz;NQl7yj;A`(!H!XQu_$sqY9h_IrH*}_%1{L&_YLDvO?%R5Z-t+ClW z_qERbL?HKUZ!nt+!E9S`uoh^5A|DaIHe*_gf1`E_Vq+}{&T@t$EGhMnRjJ4z2w_W8 zp+qjs7as22^&S3wY1?+}^j-I=RcCE>#|39)g(lU7v_8;?=qK(9D8-*pPdiy)P3lIblG`+?%ea| zYoD3dopYt!tKgFicfNmNi(EWE=E4hC6(r|PYtanqJlmt57YOVrr2^tfrG(eG9C##X zu&1t@%L$RIvpj!wUA z8i>Pqot#_+Cnp6L2XPcZy1ar|9MnY+7eNvK1E)@Tr#2KsXq1*>)uUCozT7L##ok?o zhA6ofP4E|b*9tAfG?uf$#}>TIR&1A!yslP8}i7w-EzW(x#9VEvx18k%Tn=-$VV zkOtUr0b2!w3t>h?#8AZl^Az*(6KCGlD;4j~yx};`#2gN1_gv=%7KVzecIRakN{f*4 zeaI>yH;-o4OGhvGTU)(quWI)-q?V*(sVesSMv|wMUQ3hLEt=lBB$KZ9TyHr>)f7o%) zPYeU<3P)*P10*7vE)nA5#{c=6-E-_>r_u4e3i!I2+UksELwDqwMeBZ9FSP$;^Ajro z_@M#_Ss$?ejoB@!wN|kbGKs(0zLo%0QpQXW#t;oC$B0MZYZ&Ej?8~fNhcCVvPo3vo zFn0WWZaPliF^8_}yzb`*f@yg0uWv6HgNI)xa=pO%Ck(C<=-60l#uD3(wXP~c7!NoX z0&^6=N`zcc90F#qt@=Rn@r!3(*1v(Tl{B!m?Mc7yIA+nEHpY{YWr$=)F7rhR1P}(v zt{YhY#;jsW6G>#xhP*B`OCk|Pf+NN;ju1rxa*HAgoGq*rvqw&xe~;t1JA31$s?GBb z*g7&@cbKo4n<`>)!UlIAgR6q&))B0KYU8r66GbFj?8Guw4E%&}Qi_lT003LtoIZei zwD~=XZmeo+yZ2Pq3KYCF-R&11^p= z@H%s+=G`}wrbJ{()Mh71#2SP3Zy3m>l1n?0N-N1Q;z6?oSxr-G(H5m4EO>~&;}VKi zfY}3w+9z>vp#d)hVuu`)vG_aaH%3b=WKMnSu&c31;<3O;bz2iD=w+o4#oBb36 z5ZCF*Gu?zjZIR0S>_%pHY2$k8D^n7Sz_K8tCDeXM+dO<#LSg%h6`~dnVG1N@T7v&e z%wEd1!k{^zfz_1BTW{!$!B%g)J^2b87!9Y>>100X1SgT7s0z$o>^lAA=Gp_cC1(h=*5Tmf8z&LGJJ>$|K^~s`z9*OWz5MFUr?>Bi?_PGBB)#psD5?>n+q{o_ zz7~ez&;t#h8l$jwGPCC&xq2YetXYQT+0F3j(`xmNGf8dj#an|p#I*pvI*kwW4iuB> z+q3_7xB8y;pLzHG-S%+UHQA zvqp;$kmGJY>lLsN4C~&TcvAS1SErTcwcw0r@wngk zShAUA1M9b#g}^pL-zH7Q#z^&j#r9F8BTVfkR&qF<=e35goTu7c|GN)0mokj4m0%~0 zXJ8j4Hc_l;HJ&uU*Iw`8d_EscJ``s0tk9mkKo^&#TYXm-EoAzTQObxa@^u~g2t#T) zJz|rE!I_?i4dCJC=B8(_pZ{YR>|V?0iCcnU;E@$239^x?SYCfNaMHN;CtHIS_zHN9 zTkQc1v@O35okiFtq5_u+5FkY55ap@pi)O?}x0D1c*qB0KpYR}>Ul+B0Vmr}Z@+%mJ|As}sis_=ROPbov@*2thpE&?!V#Qgu$snYvCZ zrkhmkMU+fSf-s8(L37fPr&M*jRs{{THb!aXQu|P9l_-vJhHvLzMGH zE?1U0H_+PmNABp9`|KzkGfrrZ%XvdGo6*<{d5m9~L7 z_^`M;X6xDo=m6LY6RfvJEvsTK1!u8d2HPx|$S}p;sRy!I zWL55Yxu~_B`OP@~(q6&W3#)~I&+MGL%GWR$#udC151^wsswhqlii;rP9jJpiI7o&Z zAb})=HY7?4HA|re3ns`%$)FuvKCFWjhb~?IE)F6dF2K5}poj-NK6Gf;hw$t3=1txY zoxQxZWrQU6K!%|~!m?~Bnw-6Rr!F3BZ{u5!LqnZTDON}Coj9^@&le)V!NYrVwS~B% zEL+>Sr@}qGwGvu|HrOo|gSt__ezN^&%~{*)a=rf7y1HujUcr`zZB<4#l@T#eN)si} z)lZA<{=tKx8E%c9>A(##6}_p+~EZpKsl5a4pj`E*;_-6`ysiv zffA!7=MT1vCz}-m4~tjVey1b2KSR4OEtLd-(_DdUqYZ74LaDkhH?KFh?%WAOP2WbX zp@zT+Dx|5_f%JQiAGvVw!oh+g3e50u!aPfMxdC=E)XB{F5IcEZhePIM- zph6Y`$Oy?JBL<8Ex(SqEhLeQ@XcrdA>a?rx+_~HLA;l14)WmmpH}_w?Pg#HBZs0eS zwypwAW?M-x+3AU-(GGWSJ=ngxUEcEZ5OsX(Qlt!MQ zn^(`S{GHkAv(8@D`EAfSYig%Cxv?z!{=w^F#y)5_d7FuKZH7qlR-#5B0bt806%D0I zT7VdVP_?q*%Rq8UR;JkD4i^RXowt+E%#V2U>TfDqzZSDZ+dR!a#T3I>-z_$q9@k|m zy5~A*m~&JWP@E7a=pc}4kVHTc4h&R;Li7d@f`|hKMLkbb^uhOakNr3&FLjlm~i5NBM< zFaYI{;cpiHCNRdE0dg*>qIm(_t?#$h=(SCw?h3rJV2*ER8{O4^3#=dO)KwklZkoqU zS8i5c%YL*y*4;FY#D=XmkQnYj%LH)?02~gSJH`Qp1XY64g>%c_K$xseI&|e)7vRoL zAqRba$G@%fSGA7X7hQk%_3NVOYVS+$leU_!&6*5uN)8#5ZBz_6ASCA;azYS-Rt@ki zg2NWz(=;t}SC(~Ibl63$5C8FPmhXqb^)5#jaJ~I{Ex3xZ!+2h8$}}h_g@Be>HZ;72 z6#y#>AY3^skuVKF#0WxFBQ()5d5_nWb?c6c>EeMM|Mh+*&wEpPyxHCq{R-Gdr-`hN zF=1sxl&mBoK+#qRLl9#CEN|Fg8>nbmsTg3a1;#M9enQ$RgWk}kp#-5wh=EF&1tl%mJln2V^8o%Qv(*=zEuO7y z=m*8?xpUn-*@h5Cl_3BK3joiGkyaScK+>|MWdMRWm@RT!Q1piAlv5hL@B6>3&GI8) zP!xBc6}ZNIpJLL%2a8Y!+(<=f%WX>_uWVxlga9!D*oYt$l0cxRDMvqfU;Kq_mLK5k z)dvqYcgLa_Lz?3HyeF)@$%$&6lI?r4I>6W#M*<)vq{?&Oqrx``d`mhpVPr> z#q078F6gw_X<=?KR>8%^t%@wbITvNMu!hKiTSkCTJkw>1!e*Y{%31#_yMf=LW7{RJ zYoC^w$6%3cBtVG5)x#{Hg6IVTh9XEcM{gQwXk!R^y95^f-hZ`d{aVa+xW1EO4wDV4 zB?JgD7*?qkvc|$nIykTvNl2x0j3Q!MXoLL^)~}d7jcYf(H8D~c+?$pKL(px>Z3`eb z04RzS6_AgFT6Pn#iZAg$Sl_j8#;6ShF%&(Fag#E2asU@@LaN;=b=Wf7sgPKhfzhBM zC@eFL8^MrnA*9&Khe*Ab@CC9*uyJGXyi(;y2>lQLJZt;ShtJi?3Yf_t`F+$hY!+Q2Ndsx=U+bjTiAy7djLji>7k%k`$9&--f<*BNA3Hy&ZrHH|4 zG5H&9cB?O#zI1_OOf0Ce%mDfQxdtp3vU%(iY6yji3iISS61XLv#z|!zI_sZqza@B+ zyu9st5-h+`H7QUKx9}3w@oU@EO}&cEzG?fu!!bLO->%zkcg;i9^j`S~=WKMnDi1f= P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/ui/src/assets/react.svg b/ui/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/ui/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/assets/vite.svg b/ui/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/ui/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/ui/src/components/ui/badge.tsx b/ui/src/components/ui/badge.tsx new file mode 100644 index 0000000..f000e3e --- /dev/null +++ b/ui/src/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
+ ) +} + +export { Badge, badgeVariants } diff --git a/ui/src/components/ui/button.tsx b/ui/src/components/ui/button.tsx new file mode 100644 index 0000000..36496a2 --- /dev/null +++ b/ui/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/ui/src/components/ui/card.tsx b/ui/src/components/ui/card.tsx new file mode 100644 index 0000000..f62edea --- /dev/null +++ b/ui/src/components/ui/card.tsx @@ -0,0 +1,79 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +Card.displayName = "Card" + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = "CardHeader" + +const CardTitle = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardTitle.displayName = "CardTitle" + +const CardDescription = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardDescription.displayName = "CardDescription" + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardContent.displayName = "CardContent" + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = "CardFooter" + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/ui/src/components/ui/input.tsx b/ui/src/components/ui/input.tsx new file mode 100644 index 0000000..68551b9 --- /dev/null +++ b/ui/src/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/ui/src/components/ui/select.tsx b/ui/src/components/ui/select.tsx new file mode 100644 index 0000000..d826bdb --- /dev/null +++ b/ui/src/components/ui/select.tsx @@ -0,0 +1,158 @@ +import * as React from "react" +import * as SelectPrimitive from "@radix-ui/react-select" +import { Check, ChevronDown, ChevronUp } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Select = SelectPrimitive.Root + +const SelectGroup = SelectPrimitive.Group + +const SelectValue = SelectPrimitive.Value + +const SelectTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + span]:line-clamp-1", + className + )} + {...props} + > + {children} + + + + +)) +SelectTrigger.displayName = SelectPrimitive.Trigger.displayName + +const SelectScrollUpButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName + +const SelectScrollDownButton = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +SelectScrollDownButton.displayName = + SelectPrimitive.ScrollDownButton.displayName + +const SelectContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, position = "popper", ...props }, ref) => ( + + + + + {children} + + + + +)) +SelectContent.displayName = SelectPrimitive.Content.displayName + +const SelectLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectLabel.displayName = SelectPrimitive.Label.displayName + +const SelectItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + + {children} + +)) +SelectItem.displayName = SelectPrimitive.Item.displayName + +const SelectSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +SelectSeparator.displayName = SelectPrimitive.Separator.displayName + +export { + Select, + SelectGroup, + SelectValue, + SelectTrigger, + SelectContent, + SelectLabel, + SelectItem, + SelectSeparator, + SelectScrollUpButton, + SelectScrollDownButton, +} diff --git a/ui/src/components/ui/slider.tsx b/ui/src/components/ui/slider.tsx new file mode 100644 index 0000000..e161dae --- /dev/null +++ b/ui/src/components/ui/slider.tsx @@ -0,0 +1,26 @@ +import * as React from "react" +import * as SliderPrimitive from "@radix-ui/react-slider" + +import { cn } from "@/lib/utils" + +const Slider = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + + + + +)) +Slider.displayName = SliderPrimitive.Root.displayName + +export { Slider } diff --git a/ui/src/components/ui/switch.tsx b/ui/src/components/ui/switch.tsx new file mode 100644 index 0000000..bc69cf2 --- /dev/null +++ b/ui/src/components/ui/switch.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as SwitchPrimitives from "@radix-ui/react-switch" + +import { cn } from "@/lib/utils" + +const Switch = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +Switch.displayName = SwitchPrimitives.Root.displayName + +export { Switch } diff --git a/ui/src/components/ui/tabs.tsx b/ui/src/components/ui/tabs.tsx new file mode 100644 index 0000000..26eb109 --- /dev/null +++ b/ui/src/components/ui/tabs.tsx @@ -0,0 +1,55 @@ +"use client" + +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +const Tabs = TabsPrimitive.Root + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsList.displayName = TabsPrimitive.List.displayName + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +TabsContent.displayName = TabsPrimitive.Content.displayName + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/ui/src/index.css b/ui/src/index.css new file mode 100644 index 0000000..f4c5103 --- /dev/null +++ b/ui/src/index.css @@ -0,0 +1,84 @@ +@import "tailwindcss"; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.141 0.005 285.823); + --card: oklch(1 0 0); + --card-foreground: oklch(0.141 0.005 285.823); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.141 0.005 285.823); + --primary: oklch(0.21 0.006 285.885); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.967 0.001 286.375); + --secondary-foreground: oklch(0.21 0.006 285.885); + --muted: oklch(0.967 0.001 286.375); + --muted-foreground: oklch(0.552 0.016 285.938); + --accent: oklch(0.967 0.001 286.375); + --accent-foreground: oklch(0.21 0.006 285.885); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.577 0.245 27.325); + --border: oklch(0.92 0.004 286.32); + --input: oklch(0.92 0.004 286.32); + --ring: oklch(0.705 0.015 286.067); + --radius: 0.625rem; +} + +.dark { + --background: oklch(0.141 0.005 285.823); + --foreground: oklch(0.985 0 0); + --card: oklch(0.141 0.005 285.823); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.141 0.005 285.823); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.21 0.006 285.885); + --secondary: oklch(0.274 0.006 286.033); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.274 0.006 286.033); + --muted-foreground: oklch(0.705 0.015 286.067); + --accent: oklch(0.274 0.006 286.033); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.274 0.006 286.033); + --input: oklch(0.274 0.006 286.033); + --ring: oklch(0.442 0.017 285.786); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: "rlig" 1, "calt" 1; + } +} diff --git a/ui/src/lib/utils.ts b/ui/src/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/ui/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/ui/src/main.tsx b/ui/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/ui/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/ui/tsconfig.app.json b/ui/tsconfig.app.json new file mode 100644 index 0000000..7f42e5f --- /dev/null +++ b/ui/tsconfig.app.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/ui/tsconfig.json b/ui/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/ui/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/ui/tsconfig.node.json b/ui/tsconfig.node.json new file mode 100644 index 0000000..d3c52ea --- /dev/null +++ b/ui/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "module": "esnext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/ui/vite.config.ts b/ui/vite.config.ts new file mode 100644 index 0000000..5c3e073 --- /dev/null +++ b/ui/vite.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' +import path from 'path' + +export default defineConfig({ + plugins: [react(), tailwindcss()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + server: { + proxy: { + '/api': 'http://pedal.local:8080', + '/ws': { + target: 'ws://pedal.local:8080', + ws: true, + }, + }, + }, +})