nettoyage repo : réorganisation fichiers en vrac, ajout body solidworks + studio mic ref

- Body SolidWorks v1 → 02_PRODUITS_PHYSIQUES/Microphone/Conception/
- Studio Mic KiCAD (DIYPerks) → 02_PRODUITS_PHYSIQUES/R&D_References/DIY/
- cleanup_ports.sh → 04_INFRA_DEPLOIEMENT/
- mockup_jeu_ux → 11_RECHERCHE_&_LAB/
- Printables → 12_DOCUMENTATION/Imprimables/
- Screenshots, ideas, one.html → _BROUILLON/
- all-talas (23Go) → 13_ARCHIVES/
- Supprimé all-talas.zip (20Go doublon), lock files LibreOffice
- Nettoyé .gitignore
- Remote → Forgejo (10.0.20.105:3000)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
senke 2026-04-09 16:31:26 +02:00
parent b4defbe009
commit 1db6d066c0
4019 changed files with 773672 additions and 586 deletions

39
.gitignore vendored
View file

@ -1,42 +1,33 @@
# Ignore generated files and printables
FICHIERS_A_IMPRIMER/
generate_printables.py
# Brouillons et archives
_BROUILLON/
13_ARCHIVES/
# Ignore screenshots and specific image files (unless they are part of the project assets)
Screenshot*.png
disks_inventory.jpg
Gemini_Generated_Image_*.png
# Ignore temporary and IDE files
# Fichiers temporaires et IDE
.DS_Store
.vscode/
.idea/
*.swp
*~
_BROUILLON/
Thumbs.db
# Logseq temp files (assuming you want to keep data, not temp)
# Lock files LibreOffice
.~lock.*
# Logseq temp
logseq/.recycle/
# Ignore python cache
# Python cache
__pycache__/
*.pyc
# Ignore node_modules if you have any Node.js sub-projects later
# Node
node_modules/
# OS generated files
Thumbs.db
# Any random HTML files generated
preview_sumi_v3.html
one.html
# Ignore Claude config if needed
# Claude config
.claude/
# Archives (snapshots volumineux)
13_ARCHIVES/
# Binaire compilé talas-wiki
talas-wiki/talas-wiki
# Backups wiki
.wiki-data/backups/

View file

@ -0,0 +1,324 @@
# Matrice de dependances — Modules Veza
> Qui depend de quoi. Quel module peut etre developpe en parallele, lequel bloque les autres.
> A consulter AVANT de commencer le dev d'un module.
> Derniere mise a jour : avril 2026.
---
## 1. Vue graphe (haut → bas = ordre de dev)
```
┌──────────────┐
│ INFRA │
│ PG Redis S3 │
│ RMQ ClamAV │
└──────┬───────┘
┌──────┴───────┐
│ AUTH & CORE │
│ JWT RBAC 2FA │
└──────┬───────┘
┌────────────────┼────────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴──────┐
│ USERS │ │ CHAT │ │ NOTIFS │
│ Profiles │ │ DMs Groups│ │ Email Push │
└─────┬─────┘ └─────┬─────┘ └─────┬──────┘
│ │ │
┌─────┼────────────────┼────────────────┤
│ │ │ │
┌───┴───┐ │ ┌─────┴─────┐ │
│TRACKS │ │ │ TROC │ │
│Upload │ │ │ Annonces │ │
│Stream │ │ └───────────┘ │
└───┬───┘ │ │
│ │ ┌───────────┐ │
│ │ │ SAMPLES │ │
│ │ │ Depot │ │
│ │ └───────────┘ │
│ │ │
│ │ ┌───────────┐ │
│ │ │ FORMATION │ │
│ │ │ Cours HLS │ │
│ │ └───────────┘ │
│ │ │
│ │ ┌───────────┐ │
│ │ │EVENEMENTS │ │
│ │ │Challenges │ │
│ │ └───────────┘ │
│ │ │
│ │ ┌───────────────────┐ │
│ │ │ SHOP │ │
│ │ │ Catalogue→Paiement│ │
│ │ └────────┬──────────┘ │
│ │ │ │
│ │ ┌────────┴──────────┐ │
│ │ │ PRODUITS PERSO │ │
│ │ │ Garantie SAV │ │
│ │ └───────────────────┘ │
│ │ │
│ │ ┌───────────────────┐ │
│ │ │ CLOUD PERSO │ │
│ │ │ Stockage privé │ │
│ │ └───────────────────┘ │
│ │ │
│ │ │
│ │ ┌────────────────┐ │
│ │ │ RECHERCHE │ │
│ │ │ Elasticsearch │ │
│ │ └────────────────┘ │
│ │ │
│ │ ┌────────────────┐ │
│ │ │ AUDIO ANALYZER │ │
│ │ │ BPM, key (V1.5)│ │
│ │ └────────────────┘ │
│ │ │
│ │ │
┌───┴─────┴──────────────────────────────────┴───┐
│ FRONTEND REACT │
│ SUMI V3 · Zustand · TanStack │
└─────────────────────────────────────────────────┘
│ (prerequis non-tech)
┌─────────────────────────────────────────────────┐
│ IDENTITE VISUELLE │
│ Logo · Palette · Typo · Icones │
└─────────────────────────────────────────────────┘
```
---
## 2. Matrice de dependances detaillee
### Legende
- **Bloquant** = ne peut PAS commencer sans cette dependance
- **Necessaire** = peut commencer mais ne peut pas finir/deployer sans
- **Optionnel** = fonctionne sans, mais mieux avec
### 2.1 Infrastructure (couche 0)
| Module | Depend de | Type |
|--------|-----------|:----:|
| PostgreSQL 16 | OS, Docker | Bloquant |
| Redis 7 | OS, Docker | Bloquant |
| MinIO S3 | OS, Docker | Bloquant |
| RabbitMQ 3 | OS, Docker | Bloquant |
| ClamAV | OS, Docker | Necessaire |
| Elasticsearch | OS, Docker | Optionnel (fallback PG) |
| HAProxy | OS | Bloquant (prod) |
| Coraza WAF | HAProxy | Necessaire (prod) |
| WireGuard | OS | Necessaire (prod) |
**Statut actuel** : tout est deployable, Docker Compose existe.
---
### 2.2 Auth & Core (couche 1)
| Module | Depend de | Type | Spec |
|--------|-----------|:----:|------|
| Auth & Core | PostgreSQL, Redis | Bloquant | [[Auth_&_Core/SPEC_AUTH_CORE]] |
**Bloque** : TOUT le reste (chaque module a besoin d'auth).
**Ordre dev** : **PREMIER** module a implementer.
---
### 2.3 Modules communautaires (couche 2-3)
| Module | Depend de | Type | Spec | Phase |
|--------|-----------|:----:|------|:-----:|
| Users / Profiles | Auth | Bloquant | (existant) | Beta |
| Chat / DMs | Auth, Redis (pub/sub) | Bloquant | [[Community/Groupes_Chat/README]] | Beta |
| Notifications | Auth, RabbitMQ, Listmonk | Necessaire | — | Beta |
| Tracks | Auth, MinIO, RabbitMQ, Stream Server, ClamAV | Bloquant | (existant) | Beta |
| Samples | Auth, MinIO, RabbitMQ, ClamAV | Bloquant | [[Community/Partage/SPEC_TECHNIQUE_PARTAGE]] | Beta |
| Troc | Auth, **Chat** | Bloquant | [[Community/Troc/SPEC_TECHNIQUE_TROC]] | Beta |
| Evenements | Auth, Tracks (soumissions) | Necessaire | [[Événements_Participatifs/SPEC_EVENEMENTS]] | Beta |
| Formation | Auth, MinIO, **Stream Server** (video HLS) | Bloquant | [[Community/Formation/SPEC_TECHNIQUE_FORMATION]] | Post-beta |
---
### 2.4 Shop (couche 2-3)
| Module | Depend de | Type | Spec | Phase |
|--------|-----------|:----:|------|:-----:|
| Shop Backend | Auth, PostgreSQL | Bloquant | [[Shop/Backend/SPEC_BACKEND_SHOP]] | Shop (aout) |
| Paiement | Shop Backend, **Mollie** (externe) | Bloquant | [[Shop/Paiement/SPEC_PAIEMENT]] | Shop (aout) |
| Shop Frontend | Frontend, Shop Backend, Paiement | Bloquant | [[Shop/Frontend/SPEC_FRONTEND_SHOP]] | Shop (aout) |
| Produits Perso | Shop Backend (orders), Auth | Necessaire | [[Personal/Produits_Personnels/SPEC_ESPACE_PRODUITS]] | Shop (aout) |
---
### 2.5 Personal (couche 3-4)
| Module | Depend de | Type | Spec | Phase |
|--------|-----------|:----:|------|:-----:|
| Cloud Perso | Auth, MinIO | Bloquant | [[Personal/Cloud_Perso/SPEC_CLOUD_PERSO]] | Post-public |
| AudioGridder | Auth, Docker, WireGuard | Bloquant | [[Personal/AudioGridder_Client/SPEC_AUDIOGRIDDER]] | **V2 (2027)** |
---
### 2.6 Enrichissement (couche 4+)
| Module | Depend de | Type | Spec | Phase |
|--------|-----------|:----:|------|:-----:|
| Recherche ES | Elasticsearch, Tracks/Samples (contenu) | Optionnel | — | Post-public |
| Audio Analyzer | RabbitMQ, Tracks (trigger) | Optionnel | [[Rust_Engines/OVERVIEW_RUST_MODULES]] | V1.5 |
| DSP Engine | Stream Server | Optionnel | [[Rust_Engines/OVERVIEW_RUST_MODULES]] | V2 |
---
### 2.7 Frontend & Identite (transversal)
| Module | Depend de | Type | Spec | Phase |
|--------|-----------|:----:|------|:-----:|
| Identite visuelle | Workbook (a la main) | **Bloquant tout le frontend** | [[IDENTITE_VISUELLE]] | **MAINTENANT** |
| Design System SUMI V3 | Identite visuelle | Bloquant frontend | [[SUMI_V3_SPECIFICATION]] | Avant beta |
| Frontend React | SUMI V3, Auth, toutes les APIs | Bloquant | [[FRONTEND_REACT]] | Continu |
---
## 3. Chemin critique
Le chemin critique = la chaine de dependances la plus longue qui retarde le lancement.
```
Identite visuelle ──→ SUMI V3 ──→ Frontend
\ ↑
\ │
──→ Auth ──→ Chat ──→ Troc ──→ Beta (juin)
└──→ Shop Backend ──→ Paiement ──→ Shop Frontend ──→ Lancement shop (aout)
```
### 3.1 Goulots d'etranglement identifies
| Goulot | Impact | Mitigation |
|--------|--------|------------|
| **Identite visuelle** (logo, palette) | Bloque tout le frontend, toute la communication | Workbook en cours — accelerer |
| **Auth & Core** | Bloque tous les modules | Deja bien avance dans le code |
| **Chat / DMs** | Bloque le Troc (feature cle de la beta) | Prioritiser chat avant samples |
| **Stream Server** | Bloque tracks + formation | Deja en place |
| **Mollie integration** | Bloque le shop | Commencer l'integration en juin |
### 3.2 Ordre de dev recommande
```
PHASE 0 — Maintenant (avril 2026)
├── [MAIN] Identite visuelle (workbook, logo, palette)
├── [DEV] Finaliser Auth (si pas complet)
└── [DEV] Chat / DMs (base pour troc + groupes)
PHASE 1 — Preparation beta (mai 2026)
├── [DEV] Profiles artistes
├── [DEV] Tracks (upload + streaming)
├── [DEV] Samples (depot communautaire)
├── [DEV] Troc (dependance : Chat OK)
├── [DEV] Evenements (challenges)
├── [UX] SUMI V3 (implementation frontend)
└── [PREP] 5 Talas Starter Packs (samples)
PHASE 2 — Beta fondateurs (juin 2026)
├── [LIVE] Onboarding 50 fondateurs
├── [DEV] Notifications (email + in-app)
├── [DEV] Recherche (PG full-text d'abord, ES plus tard)
├── [FIX] Bugs beta
└── [PREP] Integration Mollie (commencer)
PHASE 3 — Ouverture publique (juillet 2026)
├── [LIVE] Inscriptions ouvertes
├── [DEV] Shop backend (catalogue, stock)
├── [DEV] Paiement (Mollie, factures)
└── [DEV] Shop frontend (checkout)
PHASE 4 — Lancement shop (aout 2026)
├── [LIVE] Premier micro en vente
├── [DEV] Produits personnels (garantie, SAV)
├── [DEV] Cloud perso (V1 basique)
└── [QA] Audit securite pre-shop
PHASE 5+ — Post-lancement (sept 2026+)
├── [DEV] Formation (cours + video)
├── [DEV] Audio Analyzer (BPM, key)
├── [DEV] Recherche Elasticsearch
└── [DEV] AudioGridder (V2, 2027)
```
---
## 4. Modules paralleles (peuvent etre developpes en meme temps)
Une fois Auth + Chat en place, ces modules sont **independants** entre eux :
```
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Tracks │ │ Samples │ │ Troc │ │ Events │
│ (upload) │ │ (depot) │ │(annonces)│ │(challenges)│
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
└──────────────┴──────────────┴──────────────┘
Parallelisable
```
De meme, une fois Shop Backend en place :
```
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Paiement │ │ Produits │ │ Cloud │
│ (Mollie) │ │ Perso │ │ Perso │
└──────────┘ └──────────┘ └──────────┘
│ │ │
└──────────────┴──────────────┘
Parallelisable
```
---
## 5. Dependances externes (hors Veza)
| Dependance | Module concerne | Risque | Mitigation |
|-----------|----------------|--------|------------|
| **Mollie API** | Paiement | API down → pas d'achat | SEPA direct en fallback |
| **Discord OAuth** | Auth | Discord down → login OAuth KO | Login email toujours dispo |
| **FFmpeg** | Stream Server | Regression version | Pin version dans Docker |
| **Let's Encrypt** | TLS | Rate limits sur renewal | Renouveler 30j avant expiration |
| **HaveIBeenPwned API** | Auth (V1.5) | API down → skip check | Vérification optionnelle |
| **Capsule CY002 (fournisseur)** | Hardware | Rupture stock | 2e fournisseur identifié |
| **AliExpress corps metal** | Hardware | Délai 3-6 semaines | Commander en avance |
---
## 6. Dependances non-techniques (bloquantes)
| Dependance | Bloque | Statut |
|-----------|--------|:------:|
| **Identite visuelle terminee** | Frontend, communication, packaging | En cours (workbook) |
| **Micro-entreprise creee** | Vente, factures | A faire 2-3 sem. avant 1re vente |
| **Depot marque INPI** | Nom public, packaging | A lancer |
| **Marquage CE / declaration conformite** | Vente de micros | Guide existe, a executer |
| **CGV / Mentions legales finalisees** | Site en ligne | Brouillons existent |
| **50 artistes fondateurs recrutes** | Beta | Reperage en cours |
| **Talas Starter Packs enregistres** | Contenu initial beta | A faire (5 packs) |
| **Customer validation** (survey + interviews) | Validation prix | **BLOQUANT** — pas encore fait |
---
## Voir aussi
- [[01_PILOTAGE/CALENDRIER_GENERAL]] — phases 0-4 et milestones
- [[01_PILOTAGE/PLAN_ACTION_LANCEMENT]] — checklist de lancement
- [[01_PILOTAGE/REVUE_ROADMAP_2026-03]] — chemin critique et risques
- [[01_PILOTAGE/ROADMAP_SOFTWARE_BUSINESS]] — taches dev detaillees
- [[03_APPS_&_SERVICES/ARCHITECTURE_VEZA]] — architecture technique
- [[05_EXPERIENCE_UTILISATEUR/Flux_Utilisateurs/PARCOURS_UTILISATEURS_VEZA]] — user flows

View file

@ -0,0 +1,666 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION (( 'STEP AP214' ),
'1' );
FILE_NAME ('bodymicro_cylindre.STEP',
'2025-02-16T11:50:26',
( '' ),
( '' ),
'SwSTEP 2.0',
'SolidWorks 2025',
'' );
FILE_SCHEMA (( 'AUTOMOTIVE_DESIGN' ));
ENDSEC;
DATA;
#1 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, 0.000000000000000000 ) ) ;
#2 = CARTESIAN_POINT ( 'NONE', ( -0.9999999999999952260, -8.689069556631126900, 0.000000000000000000 ) ) ;
#3 = ORIENTED_EDGE ( 'NONE', *, *, #531, .T. ) ;
#4 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
#5 = VECTOR ( 'NONE', #199, 1000.000000000000227 ) ;
#6 = CYLINDRICAL_SURFACE ( 'NONE', #598, 23.15000000000002345 ) ;
#7 = CARTESIAN_POINT ( 'NONE', ( 4.689819602289335310E-15, -6.689069556631126012, 0.000000000000000000 ) ) ;
#8 = CIRCLE ( 'NONE', #229, 20.15000000000002700 ) ;
#9 = CARTESIAN_POINT ( 'NONE', ( 4.000000000000000000, 85.81093044336887488, 0.000000000000000000 ) ) ;
#10 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -6.689069556631128677, 20.15000000000002700 ) ) ;
#11 = ORIENTED_EDGE ( 'NONE', *, *, #321, .T. ) ;
#12 = APPLICATION_CONTEXT ( 'automotive_design' ) ;
#13 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -8.689069556631123348, 20.15000000000002700 ) ) ;
#14 = EDGE_LOOP ( 'NONE', ( #557, #460, #536, #412 ) ) ;
#15 = ORIENTED_EDGE ( 'NONE', *, *, #625, .F. ) ;
#16 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 91.31093044336887488, -24.15000000000001990 ) ) ;
#17 = AXIS2_PLACEMENT_3D ( 'NONE', #273, #29, #473 ) ;
#18 = ORIENTED_EDGE ( 'NONE', *, *, #604, .F. ) ;
#19 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -7.689069556631129565, 23.15000000000002345 ) ) ;
#20 = ORIENTED_EDGE ( 'NONE', *, *, #388, .T. ) ;
#21 = LINE ( 'NONE', #424, #248 ) ;
#22 = ORIENTED_EDGE ( 'NONE', *, *, #60, .T. ) ;
#23 = EDGE_LOOP ( 'NONE', ( #568, #575 ) ) ;
#24 = FACE_OUTER_BOUND ( 'NONE', #444, .T. ) ;
#25 = AXIS2_PLACEMENT_3D ( 'NONE', #426, #176, #547 ) ;
#26 = CIRCLE ( 'NONE', #293, 23.15000000000002345 ) ;
#27 = VECTOR ( 'NONE', #381, 1000.000000000000000 ) ;
#28 = VERTEX_POINT ( 'NONE', #416 ) ;
#29 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ;
#30 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, 0.000000000000000000 ) ) ;
#31 = CIRCLE ( 'NONE', #562, 24.15000000000001990 ) ;
#32 = ORIENTED_EDGE ( 'NONE', *, *, #59, .F. ) ;
#33 = CARTESIAN_POINT ( 'NONE', ( 3.000000000000000444, 91.31093044336887488, 0.000000000000000000 ) ) ;
#34 = AXIS2_PLACEMENT_3D ( 'NONE', #1, #53, #628 ) ;
#35 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#36 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#37 = ORIENTED_EDGE ( 'NONE', *, *, #474, .T. ) ;
#38 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 88.81093044336887488, 0.000000000000000000 ) ) ;
#39 = PLANE ( 'NONE', #202 ) ;
#40 = EDGE_CURVE ( 'NONE', #419, #607, #221, .T. ) ;
#41 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 1.000000000000000000 ) ) ;
#42 = VERTEX_POINT ( 'NONE', #268 ) ;
#43 = ADVANCED_FACE ( 'NONE', ( #624 ), #71, .F. ) ;
#44 = SURFACE_SIDE_STYLE ('',( #46 ) ) ;
#45 = ORIENTED_EDGE ( 'NONE', *, *, #641, .T. ) ;
#46 = SURFACE_STYLE_FILL_AREA ( #246 ) ;
#47 = EDGE_CURVE ( 'NONE', #434, #267, #525, .T. ) ;
#48 = CYLINDRICAL_SURFACE ( 'NONE', #402, 24.15000000000001990 ) ;
#49 = FACE_BOUND ( 'NONE', #301, .T. ) ;
#50 = ORIENTED_EDGE ( 'NONE', *, *, #619, .T. ) ;
#51 = AXIS2_PLACEMENT_3D ( 'NONE', #509, #262, #354 ) ;
#52 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#53 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#54 = AXIS2_PLACEMENT_3D ( 'NONE', #239, #349, #638 ) ;
#55 = AXIS2_PLACEMENT_3D ( 'NONE', #329, #595, #284 ) ;
#56 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 85.81093044336887488, 0.000000000000000000 ) ) ;
#57 = AXIS2_PLACEMENT_3D ( 'NONE', #79, #136, #390 ) ;
#58 = FACE_OUTER_BOUND ( 'NONE', #217, .T. ) ;
#59 = EDGE_CURVE ( 'NONE', #263, #618, #456, .T. ) ;
#60 = EDGE_CURVE ( 'NONE', #65, #178, #78, .T. ) ;
#61 = FACE_OUTER_BOUND ( 'NONE', #14, .T. ) ;
#62 = ORIENTED_EDGE ( 'NONE', *, *, #550, .F. ) ;
#63 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ;
#64 = ORIENTED_EDGE ( 'NONE', *, *, #461, .T. ) ;
#65 = VERTEX_POINT ( 'NONE', #300 ) ;
#66 = PRODUCT_RELATED_PRODUCT_CATEGORY ( 'part', '', ( #398 ) ) ;
#67 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#68 = ORIENTED_EDGE ( 'NONE', *, *, #206, .F. ) ;
#69 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#70 = VERTEX_POINT ( 'NONE', #238 ) ;
#71 = CYLINDRICAL_SURFACE ( 'NONE', #222, 22.65000000000000568 ) ;
#72 = CYLINDRICAL_SURFACE ( 'NONE', #397, 20.15000000000002700 ) ;
#73 = ORIENTED_EDGE ( 'NONE', *, *, #216, .F. ) ;
#74 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#75 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#76 = VERTEX_POINT ( 'NONE', #600 ) ;
#77 = LINE ( 'NONE', #280, #119 ) ;
#78 = CIRCLE ( 'NONE', #475, 24.15000000000001990 ) ;
#79 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#80 = CIRCLE ( 'NONE', #359, 25.15000000000001990 ) ;
#81 = EDGE_LOOP ( 'NONE', ( #371, #128, #425, #303 ) ) ;
#82 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#83 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -6.689069556631128677, -21.15000000000002345 ) ) ;
#84 = CARTESIAN_POINT ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
#85 = AXIS2_PLACEMENT_3D ( 'NONE', #347, #548, #642 ) ;
#86 = ORIENTED_EDGE ( 'NONE', *, *, #393, .T. ) ;
#87 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#88 = CIRCLE ( 'NONE', #232, 24.15000000000001990 ) ;
#89 = EDGE_CURVE ( 'NONE', #326, #237, #173, .T. ) ;
#90 = FACE_OUTER_BOUND ( 'NONE', #391, .T. ) ;
#91 = ORIENTED_EDGE ( 'NONE', *, *, #152, .F. ) ;
#92 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 85.81093044336887488, 0.000000000000000000 ) ) ;
#93 = VERTEX_POINT ( 'NONE', #380 ) ;
#94 = CIRCLE ( 'NONE', #458, 24.15000000000002700 ) ;
#95 = ORIENTED_EDGE ( 'NONE', *, *, #166, .F. ) ;
#96 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#97 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#98 = AXIS2_PLACEMENT_3D ( 'NONE', #433, #278, #631 ) ;
#99 = FACE_BOUND ( 'NONE', #362, .T. ) ;
#100 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#101 = FACE_OUTER_BOUND ( 'NONE', #116, .T. ) ;
#102 = ADVANCED_FACE ( 'NONE', ( #49, #101 ), #250, .T. ) ;
#103 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -8.689069556631123348, 0.000000000000000000 ) ) ;
#104 = PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE ( 'ANY', '', #398, .NOT_KNOWN. ) ;
#105 = EDGE_CURVE ( 'NONE', #147, #70, #645, .T. ) ;
#106 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#107 = CLOSED_SHELL ( 'NONE', ( #454, #569, #523, #356, #373, #613, #647, #455, #172, #553, #200, #593, #472, #296, #413, #361, #43, #102, #578, #317, #345, #511, #366 ) ) ;
#108 = CIRCLE ( 'NONE', #408, 25.15000000000001990 ) ;
#109 = AXIS2_PLACEMENT_3D ( 'NONE', #7, #110, #462 ) ;
#110 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ;
#111 = EDGE_CURVE ( 'NONE', #42, #419, #123, .T. ) ;
#112 = ORIENTED_EDGE ( 'NONE', *, *, #393, .F. ) ;
#113 = VECTOR ( 'NONE', #492, 1000.000000000000000 ) ;
#114 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#115 = AXIS2_PLACEMENT_3D ( 'NONE', #151, #350, #552 ) ;
#116 = EDGE_LOOP ( 'NONE', ( #274, #279 ) ) ;
#117 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#118 = ORIENTED_EDGE ( 'NONE', *, *, #340, .T. ) ;
#119 = VECTOR ( 'NONE', #479, 1000.000000000000000 ) ;
#120 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 88.81093044336887488, 22.64999999999999858 ) ) ;
#121 = EDGE_LOOP ( 'NONE', ( #286, #560 ) ) ;
#122 = EDGE_LOOP ( 'NONE', ( #189, #517 ) ) ;
#123 = CIRCLE ( 'NONE', #495, 24.15000000000002700 ) ;
#124 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#125 = EDGE_CURVE ( 'NONE', #382, #419, #333, .T. ) ;
#126 = ORIENTED_EDGE ( 'NONE', *, *, #156, .F. ) ;
#127 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#128 = ORIENTED_EDGE ( 'NONE', *, *, #292, .T. ) ;
#129 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 85.81093044336887488, 25.15000000000001990 ) ) ;
#130 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#131 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#132 = AXIS2_PLACEMENT_3D ( 'NONE', #69, #201, #106 ) ;
#133 = EDGE_LOOP ( 'NONE', ( #142, #378 ) ) ;
#134 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#135 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#136 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#137 = EDGE_LOOP ( 'NONE', ( #32, #45, #86, #18 ) ) ;
#138 = CIRCLE ( 'NONE', #215, 22.65000000000001279 ) ;
#139 = CIRCLE ( 'NONE', #452, 25.15000000000002700 ) ;
#140 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#141 = CYLINDRICAL_SURFACE ( 'NONE', #334, 24.15000000000001990 ) ;
#142 = ORIENTED_EDGE ( 'NONE', *, *, #521, .T. ) ;
#143 = AXIS2_PLACEMENT_3D ( 'NONE', #635, #170, #135 ) ;
#144 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#145 = FACE_OUTER_BOUND ( 'NONE', #316, .T. ) ;
#146 = AXIS2_PLACEMENT_3D ( 'NONE', #2, #438, #541 ) ;
#147 = VERTEX_POINT ( 'NONE', #129 ) ;
#148 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#149 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -8.689069556631123348, 0.000000000000000000 ) ) ;
#150 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -6.689069556631128677, 0.000000000000000000 ) ) ;
#151 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -6.689069556631128677, 0.000000000000000000 ) ) ;
#152 = EDGE_CURVE ( 'NONE', #423, #415, #265, .T. ) ;
#153 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#154 = EDGE_CURVE ( 'NONE', #28, #481, #616, .T. ) ;
#155 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#156 = EDGE_CURVE ( 'NONE', #178, #65, #88, .T. ) ;
#157 = FACE_OUTER_BOUND ( 'NONE', #186, .T. ) ;
#158 = ORIENTED_EDGE ( 'NONE', *, *, #590, .F. ) ;
#159 = LINE ( 'NONE', #313, #431 ) ;
#160 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#161 = EDGE_LOOP ( 'NONE', ( #581, #220 ) ) ;
#162 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -7.689069556631129565, 25.15000000000002700 ) ) ;
#163 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION ( '', ( #483 ), #612 ) ;
#164 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#165 = VECTOR ( 'NONE', #234, 1000.000000000000000 ) ;
#166 = EDGE_CURVE ( 'NONE', #607, #261, #197, .T. ) ;
#167 = VERTEX_POINT ( 'NONE', #582 ) ;
#168 = AXIS2_PLACEMENT_3D ( 'NONE', #30, #131, #182 ) ;
#169 = ORIENTED_EDGE ( 'NONE', *, *, #40, .T. ) ;
#170 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#171 = ORIENTED_EDGE ( 'NONE', *, *, #505, .F. ) ;
#172 = ADVANCED_FACE ( 'NONE', ( #145 ), #364, .T. ) ;
#173 = CIRCLE ( 'NONE', #256, 20.15000000000002700 ) ;
#174 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#175 = ORIENTED_EDGE ( 'NONE', *, *, #474, .F. ) ;
#176 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#177 = CYLINDRICAL_SURFACE ( 'NONE', #583, 24.15000000000002700 ) ;
#178 = VERTEX_POINT ( 'NONE', #306 ) ;
#179 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#180 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 88.81093044336887488, -22.64999999999999858 ) ) ;
#181 = EDGE_CURVE ( 'NONE', #487, #429, #484, .T. ) ;
#182 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#183 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#184 = CYLINDRICAL_SURFACE ( 'NONE', #223, 21.15000000000001279 ) ;
#185 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 20.15000000000002700 ) ) ;
#186 = EDGE_LOOP ( 'NONE', ( #73, #91 ) ) ;
#187 = ORIENTED_EDGE ( 'NONE', *, *, #340, .F. ) ;
#188 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 84.81093044336887488, -25.15000000000001990 ) ) ;
#189 = ORIENTED_EDGE ( 'NONE', *, *, #625, .T. ) ;
#190 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#191 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#192 = CIRCLE ( 'NONE', #399, 21.15000000000000213 ) ;
#193 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#194 = LINE ( 'NONE', #447, #5 ) ;
#195 = PRESENTATION_LAYER_ASSIGNMENT ( '', '', ( #483 ) ) ;
#196 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #498, 'distance_accuracy_value', 'NONE');
#197 = CIRCLE ( 'NONE', #564, 25.15000000000002700 ) ;
#198 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#199 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.8944271909999158554, -0.4472135954999579277 ) ) ;
#200 = ADVANCED_FACE ( 'NONE', ( #287 ), #6, .T. ) ;
#201 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#202 = AXIS2_PLACEMENT_3D ( 'NONE', #546, #342, #96 ) ;
#203 = PRODUCT_DEFINITION_CONTEXT ( 'detailed design', #12, 'design' ) ;
#204 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, 0.000000000000000000 ) ) ;
#205 = VECTOR ( 'NONE', #100, 1000.000000000000000 ) ;
#206 = EDGE_CURVE ( 'NONE', #42, #261, #194, .T. ) ;
#207 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 85.81093044336887488, -25.15000000000001990 ) ) ;
#208 = ORIENTED_EDGE ( 'NONE', *, *, #111, .T. ) ;
#209 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -8.689069556631123348, -20.15000000000002700 ) ) ;
#210 = VERTEX_POINT ( 'NONE', #602 ) ;
#211 = CIRCLE ( 'NONE', #281, 24.15000000000002700 ) ;
#212 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#213 = ORIENTED_EDGE ( 'NONE', *, *, #47, .T. ) ;
#214 = CYLINDRICAL_SURFACE ( 'NONE', #543, 24.15000000000002700 ) ;
#215 = AXIS2_PLACEMENT_3D ( 'NONE', #351, #254, #606 ) ;
#216 = EDGE_CURVE ( 'NONE', #415, #423, #451, .T. ) ;
#217 = EDGE_LOOP ( 'NONE', ( #596, #319 ) ) ;
#218 = VECTOR ( 'NONE', #386, 1000.000000000000000 ) ;
#219 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#220 = ORIENTED_EDGE ( 'NONE', *, *, #353, .T. ) ;
#221 = LINE ( 'NONE', #162, #309 ) ;
#222 = AXIS2_PLACEMENT_3D ( 'NONE', #368, #468, #323 ) ;
#223 = AXIS2_PLACEMENT_3D ( 'NONE', #527, #570, #35 ) ;
#224 = CYLINDRICAL_SURFACE ( 'NONE', #417, 21.15000000000001279 ) ;
#225 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -6.689069556631128677, -20.15000000000002700 ) ) ;
#226 = VERTEX_POINT ( 'NONE', #507 ) ;
#227 = EDGE_LOOP ( 'NONE', ( #233, #112 ) ) ;
#228 = EDGE_CURVE ( 'NONE', #167, #210, #252, .T. ) ;
#229 = AXIS2_PLACEMENT_3D ( 'NONE', #150, #405, #148 ) ;
#230 = FACE_OUTER_BOUND ( 'NONE', #328, .T. ) ;
#231 = LINE ( 'NONE', #377, #514 ) ;
#232 = AXIS2_PLACEMENT_3D ( 'NONE', #482, #633, #488 ) ;
#233 = ORIENTED_EDGE ( 'NONE', *, *, #89, .F. ) ;
#234 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#235 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#236 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) );
#237 = VERTEX_POINT ( 'NONE', #13 ) ;
#238 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 84.81093044336887488, 25.15000000000001990 ) ) ;
#239 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#240 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -7.689069556631129565, 25.15000000000002700 ) ) ;
#241 = VERTEX_POINT ( 'NONE', #207 ) ;
#242 = VECTOR ( 'NONE', #82, 1000.000000000000000 ) ;
#243 = VERTEX_POINT ( 'NONE', #16 ) ;
#244 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#245 = EDGE_CURVE ( 'NONE', #226, #93, #538, .T. ) ;
#246 = FILL_AREA_STYLE ('',( #544 ) ) ;
#247 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -6.689069556631128677, 0.000000000000000000 ) ) ;
#248 = VECTOR ( 'NONE', #384, 1000.000000000000000 ) ;
#249 = LINE ( 'NONE', #291, #363 ) ;
#250 = PLANE ( 'NONE', #621 ) ;
#251 = AXIS2_PLACEMENT_3D ( 'NONE', #603, #153, #212 ) ;
#252 = LINE ( 'NONE', #533, #165 ) ;
#253 = ADVANCED_BREP_SHAPE_REPRESENTATION ( 'bodymicro_cylindre', ( #565, #275 ), #392 ) ;
#254 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#255 = EDGE_CURVE ( 'NONE', #567, #70, #404, .T. ) ;
#256 = AXIS2_PLACEMENT_3D ( 'NONE', #149, #403, #179 ) ;
#257 = AXIS2_PLACEMENT_3D ( 'NONE', #534, #320, #630 ) ;
#258 = EDGE_CURVE ( 'NONE', #70, #567, #615, .T. ) ;
#259 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 84.81093044336887488, -24.15000000000002700 ) ) ;
#260 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 24.15000000000001990 ) ) ;
#261 = VERTEX_POINT ( 'NONE', #315 ) ;
#262 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#263 = VERTEX_POINT ( 'NONE', #10 ) ;
#264 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#265 = CIRCLE ( 'NONE', #634, 21.15000000000002345 ) ;
#266 = LINE ( 'NONE', #260, #587 ) ;
#267 = VERTEX_POINT ( 'NONE', #407 ) ;
#268 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -5.689069556631127789, -24.15000000000002700 ) ) ;
#269 = EDGE_CURVE ( 'NONE', #481, #28, #138, .T. ) ;
#270 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 88.81093044336887488, 0.000000000000000000 ) ) ;
#271 = ORIENTED_EDGE ( 'NONE', *, *, #353, .F. ) ;
#272 = ORIENTED_EDGE ( 'NONE', *, *, #258, .F. ) ;
#273 = CARTESIAN_POINT ( 'NONE', ( 1.499999999999981570, 88.81093044336887488, 0.000000000000000000 ) ) ;
#274 = ORIENTED_EDGE ( 'NONE', *, *, #409, .F. ) ;
#275 = AXIS2_PLACEMENT_3D ( 'NONE', #84, #41, #530 ) ;
#276 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#277 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#278 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#279 = ORIENTED_EDGE ( 'NONE', *, *, #531, .F. ) ;
#280 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -24.15000000000002700 ) ) ;
#281 = AXIS2_PLACEMENT_3D ( 'NONE', #561, #554, #611 ) ;
#282 = CYLINDRICAL_SURFACE ( 'NONE', #98, 23.15000000000002345 ) ;
#283 = EDGE_LOOP ( 'NONE', ( #439, #11, #37, #187 ) ) ;
#284 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#285 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#286 = ORIENTED_EDGE ( 'NONE', *, *, #506, .F. ) ;
#287 = FACE_OUTER_BOUND ( 'NONE', #551, .T. ) ;
#288 = SURFACE_STYLE_USAGE ( .BOTH. , #44 ) ;
#289 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #12 ) ;
#290 = ORIENTED_EDGE ( 'NONE', *, *, #255, .F. ) ;
#291 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -21.15000000000001279 ) ) ;
#292 = EDGE_CURVE ( 'NONE', #76, #178, #266, .T. ) ;
#293 = AXIS2_PLACEMENT_3D ( 'NONE', #597, #489, #52 ) ;
#294 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#295 = ORIENTED_EDGE ( 'NONE', *, *, #206, .T. ) ;
#296 = ADVANCED_FACE ( 'NONE', ( #508, #157 ), #558, .T. ) ;
#297 = ORIENTED_EDGE ( 'NONE', *, *, #156, .T. ) ;
#298 = PRODUCT_DEFINITION_SHAPE ( 'NONE', 'NONE', #599 ) ;
#299 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#300 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 85.81093044336887488, -24.15000000000001990 ) ) ;
#301 = EDGE_LOOP ( 'NONE', ( #337, #332 ) ) ;
#302 = EDGE_CURVE ( 'NONE', #434, #167, #559, .T. ) ;
#303 = ORIENTED_EDGE ( 'NONE', *, *, #461, .F. ) ;
#304 = PLANE ( 'NONE', #85 ) ;
#305 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 24.15000000000002700 ) ) ;
#306 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 85.81093044336887488, 24.15000000000001990 ) ) ;
#307 = FACE_BOUND ( 'NONE', #614, .T. ) ;
#308 = PLANE ( 'NONE', #17 ) ;
#309 = VECTOR ( 'NONE', #477, 1000.000000000000227 ) ;
#310 = AXIS2_PLACEMENT_3D ( 'NONE', #270, #130, #577 ) ;
#311 = FACE_BOUND ( 'NONE', #325, .T. ) ;
#312 = EDGE_LOOP ( 'NONE', ( #637, #3, #64, #126 ) ) ;
#313 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 21.15000000000001279 ) ) ;
#314 = AXIS2_PLACEMENT_3D ( 'NONE', #38, #537, #87 ) ;
#315 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, -25.15000000000002700 ) ) ;
#316 = EDGE_LOOP ( 'NONE', ( #476, #118, #295, #95 ) ) ;
#317 = ADVANCED_FACE ( 'NONE', ( #311, #457 ), #453, .T. ) ;
#318 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#319 = ORIENTED_EDGE ( 'NONE', *, *, #395, .F. ) ;
#320 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#321 = EDGE_CURVE ( 'NONE', #382, #588, #331, .T. ) ;
#322 = EDGE_LOOP ( 'NONE', ( #470, #532, #632, #490 ) ) ;
#323 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#324 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#325 = EDGE_LOOP ( 'NONE', ( #22, #297 ) ) ;
#326 = VERTEX_POINT ( 'NONE', #209 ) ;
#327 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#328 = EDGE_LOOP ( 'NONE', ( #158, #640, #540, #512 ) ) ;
#329 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 91.31093044336887488, 0.000000000000000000 ) ) ;
#330 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#331 = CIRCLE ( 'NONE', #51, 24.15000000000002700 ) ;
#332 = ORIENTED_EDGE ( 'NONE', *, *, #154, .T. ) ;
#333 = LINE ( 'NONE', #305, #205 ) ;
#334 = AXIS2_PLACEMENT_3D ( 'NONE', #594, #144, #344 ) ;
#335 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#336 = AXIS2_PLACEMENT_3D ( 'NONE', #430, #411, #513 ) ;
#337 = ORIENTED_EDGE ( 'NONE', *, *, #269, .T. ) ;
#338 = EDGE_CURVE ( 'NONE', #93, #226, #192, .T. ) ;
#339 = LINE ( 'NONE', #448, #113 ) ;
#340 = EDGE_CURVE ( 'NONE', #419, #42, #211, .T. ) ;
#341 = ORIENTED_EDGE ( 'NONE', *, *, #369, .T. ) ;
#342 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#343 = ORIENTED_EDGE ( 'NONE', *, *, #152, .T. ) ;
#344 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#345 = ADVANCED_FACE ( 'NONE', ( #605 ), #516, .T. ) ;
#346 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#347 = CARTESIAN_POINT ( 'NONE', ( 2.000000000000005329, -7.689069556631126900, 0.000000000000000000 ) ) ;
#348 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ;
#349 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#350 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#351 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 91.31093044336887488, 0.000000000000000000 ) ) ;
#352 = FACE_BOUND ( 'NONE', #227, .T. ) ;
#353 = EDGE_CURVE ( 'NONE', #267, #210, #385, .T. ) ;
#354 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#355 = EDGE_CURVE ( 'NONE', #147, #241, #80, .T. ) ;
#356 = ADVANCED_FACE ( 'NONE', ( #61 ), #519, .F. ) ;
#357 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 84.81093044336887488, 0.000000000000000000 ) ) ;
#358 = ORIENTED_EDGE ( 'NONE', *, *, #355, .T. ) ;
#359 = AXIS2_PLACEMENT_3D ( 'NONE', #566, #555, #117 ) ;
#360 = DIRECTION ( 'NONE', ( 0.000000000000000000, 1.000000000000000000, 0.000000000000000000 ) ) ;
#361 = ADVANCED_FACE ( 'NONE', ( #307, #58 ), #308, .T. ) ;
#362 = EDGE_LOOP ( 'NONE', ( #573, #610 ) ) ;
#363 = VECTOR ( 'NONE', #190, 1000.000000000000000 ) ;
#364 = CONICAL_SURFACE ( 'NONE', #34, 25.15000000000002700, 0.4636476090008060935 ) ;
#365 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#366 = ADVANCED_FACE ( 'NONE', ( #617 ), #177, .T. ) ;
#367 = ORIENTED_EDGE ( 'NONE', *, *, #526, .F. ) ;
#368 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#369 = EDGE_CURVE ( 'NONE', #241, #567, #584, .T. ) ;
#370 = LINE ( 'NONE', #466, #427 ) ;
#371 = ORIENTED_EDGE ( 'NONE', *, *, #409, .T. ) ;
#372 = CIRCLE ( 'NONE', #491, 24.15000000000001990 ) ;
#373 = ADVANCED_FACE ( 'NONE', ( #24 ), #224, .F. ) ;
#374 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 84.81093044336887488, 0.000000000000000000 ) ) ;
#375 = ORIENTED_EDGE ( 'NONE', *, *, #105, .F. ) ;
#376 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#377 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -20.15000000000002700 ) ) ;
#378 = ORIENTED_EDGE ( 'NONE', *, *, #59, .T. ) ;
#379 = CIRCLE ( 'NONE', #168, 23.15000000000002345 ) ;
#380 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 88.81093044336887488, 21.15000000000000213 ) ) ;
#381 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#382 = VERTEX_POINT ( 'NONE', #428 ) ;
#383 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#384 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#385 = CIRCLE ( 'NONE', #648, 23.15000000000002345 ) ;
#386 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#387 = ORIENTED_EDGE ( 'NONE', *, *, #258, .T. ) ;
#388 = EDGE_CURVE ( 'NONE', #481, #487, #21, .T. ) ;
#389 = FACE_OUTER_BOUND ( 'NONE', #81, .T. ) ;
#390 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#391 = EDGE_LOOP ( 'NONE', ( #623, #387 ) ) ;
#392 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #504 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #236, #585, #493 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
#393 = EDGE_CURVE ( 'NONE', #237, #326, #571, .T. ) ;
#394 = FACE_OUTER_BOUND ( 'NONE', #643, .T. ) ;
#395 = EDGE_CURVE ( 'NONE', #429, #487, #510, .T. ) ;
#396 = FACE_OUTER_BOUND ( 'NONE', #122, .T. ) ;
#397 = AXIS2_PLACEMENT_3D ( 'NONE', #324, #277, #529 ) ;
#398 = PRODUCT ( 'bodymicro_cylindre', 'bodymicro_cylindre', '', ( #627 ) ) ;
#399 = AXIS2_PLACEMENT_3D ( 'NONE', #459, #608, #410 ) ;
#400 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#401 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#402 = AXIS2_PLACEMENT_3D ( 'NONE', #193, #299, #140 ) ;
#403 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#404 = CIRCLE ( 'NONE', #336, 25.15000000000001990 ) ;
#405 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#406 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#407 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -8.689069556631123348, 23.15000000000002345 ) ) ;
#408 = AXIS2_PLACEMENT_3D ( 'NONE', #92, #198, #401 ) ;
#409 = EDGE_CURVE ( 'NONE', #243, #76, #372, .T. ) ;
#410 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#411 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#412 = ORIENTED_EDGE ( 'NONE', *, *, #388, .F. ) ;
#413 = ADVANCED_FACE ( 'NONE', ( #230 ), #184, .F. ) ;
#414 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#415 = VERTEX_POINT ( 'NONE', #83 ) ;
#416 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 91.31093044336887488, 22.65000000000000924 ) ) ;
#417 = AXIS2_PLACEMENT_3D ( 'NONE', #485, #174, #330 ) ;
#418 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#419 = VERTEX_POINT ( 'NONE', #620 ) ;
#420 = ORIENTED_EDGE ( 'NONE', *, *, #228, .F. ) ;
#421 = AXIS2_PLACEMENT_3D ( 'NONE', #357, #155, #414 ) ;
#422 = FACE_OUTER_BOUND ( 'NONE', #322, .T. ) ;
#423 = VERTEX_POINT ( 'NONE', #626 ) ;
#424 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -22.65000000000000568 ) ) ;
#425 = ORIENTED_EDGE ( 'NONE', *, *, #60, .F. ) ;
#426 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -6.689069556631128677, 0.000000000000000000 ) ) ;
#427 = VECTOR ( 'NONE', #522, 1000.000000000000000 ) ;
#428 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 84.81093044336887488, 24.15000000000002700 ) ) ;
#429 = VERTEX_POINT ( 'NONE', #120 ) ;
#430 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 84.81093044336887488, 0.000000000000000000 ) ) ;
#431 = VECTOR ( 'NONE', #264, 1000.000000000000000 ) ;
#432 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 91.31093044336887488, -22.65000000000001279 ) ) ;
#433 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#434 = VERTEX_POINT ( 'NONE', #19 ) ;
#435 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#436 = FACE_OUTER_BOUND ( 'NONE', #463, .T. ) ;
#437 = EDGE_CURVE ( 'NONE', #588, #382, #94, .T. ) ;
#438 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#439 = ORIENTED_EDGE ( 'NONE', *, *, #125, .F. ) ;
#440 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ;
#441 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 91.31093044336887488, 0.000000000000000000 ) ) ;
#442 = CYLINDRICAL_SURFACE ( 'NONE', #57, 20.15000000000002700 ) ;
#443 = ORIENTED_EDGE ( 'NONE', *, *, #302, .T. ) ;
#444 = EDGE_LOOP ( 'NONE', ( #542, #572, #343, #367 ) ) ;
#445 = ORIENTED_EDGE ( 'NONE', *, *, #245, .T. ) ;
#446 = VECTOR ( 'NONE', #276, 1000.000000000000000 ) ;
#447 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, -25.15000000000002700 ) ) ;
#448 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 22.65000000000000568 ) ) ;
#449 = COLOUR_RGB ( '',0.7921568627450980005, 0.8196078431372548767, 0.9333333333333333481 ) ;
#450 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#451 = CIRCLE ( 'NONE', #115, 21.15000000000002345 ) ;
#452 = AXIS2_PLACEMENT_3D ( 'NONE', #636, #294, #36 ) ;
#453 = PLANE ( 'NONE', #478 ) ;
#454 = ADVANCED_FACE ( 'NONE', ( #580 ), #214, .T. ) ;
#455 = ADVANCED_FACE ( 'NONE', ( #436 ), #622, .T. ) ;
#456 = CIRCLE ( 'NONE', #25, 20.15000000000002700 ) ;
#457 = FACE_OUTER_BOUND ( 'NONE', #121, .T. ) ;
#458 = AXIS2_PLACEMENT_3D ( 'NONE', #374, #127, #235 ) ;
#459 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 88.81093044336887488, 0.000000000000000000 ) ) ;
#460 = ORIENTED_EDGE ( 'NONE', *, *, #550, .T. ) ;
#461 = EDGE_CURVE ( 'NONE', #243, #65, #370, .T. ) ;
#462 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ;
#463 = EDGE_LOOP ( 'NONE', ( #208, #169, #15, #68 ) ) ;
#464 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#465 = ORIENTED_EDGE ( 'NONE', *, *, #181, .T. ) ;
#466 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -24.15000000000001990 ) ) ;
#467 = ORIENTED_EDGE ( 'NONE', *, *, #111, .F. ) ;
#468 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#469 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 91.31093044336887488, 0.000000000000000000 ) ) ;
#470 = ORIENTED_EDGE ( 'NONE', *, *, #641, .F. ) ;
#471 = ORIENTED_EDGE ( 'NONE', *, *, #47, .F. ) ;
#472 = ADVANCED_FACE ( 'NONE', ( #422 ), #72, .F. ) ;
#473 = DIRECTION ( 'NONE', ( 0.000000000000000000, -0.000000000000000000, 1.000000000000000000 ) ) ;
#474 = EDGE_CURVE ( 'NONE', #588, #42, #77, .T. ) ;
#475 = AXIS2_PLACEMENT_3D ( 'NONE', #56, #134, #499 ) ;
#476 = ORIENTED_EDGE ( 'NONE', *, *, #40, .F. ) ;
#477 = DIRECTION ( 'NONE', ( 5.476786982642026244E-17, -0.8944271909999158554, 0.4472135954999579277 ) ) ;
#478 = AXIS2_PLACEMENT_3D ( 'NONE', #9, #360, #63 ) ;
#479 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#480 = FACE_OUTER_BOUND ( 'NONE', #528, .T. ) ;
#481 = VERTEX_POINT ( 'NONE', #432 ) ;
#482 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 85.81093044336887488, 0.000000000000000000 ) ) ;
#483 = STYLED_ITEM ( 'NONE', ( #500 ), #565 ) ;
#484 = CIRCLE ( 'NONE', #314, 22.64999999999999858 ) ;
#485 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#486 = FACE_OUTER_BOUND ( 'NONE', #137, .T. ) ;
#487 = VERTEX_POINT ( 'NONE', #180 ) ;
#488 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#489 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#490 = ORIENTED_EDGE ( 'NONE', *, *, #89, .T. ) ;
#491 = AXIS2_PLACEMENT_3D ( 'NONE', #469, #574, #219 ) ;
#492 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#493 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
#494 = ORIENTED_EDGE ( 'NONE', *, *, #338, .T. ) ;
#495 = AXIS2_PLACEMENT_3D ( 'NONE', #579, #383, #400 ) ;
#496 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#497 = ORIENTED_EDGE ( 'NONE', *, *, #437, .T. ) ;
#498 =( LENGTH_UNIT ( ) NAMED_UNIT ( * ) SI_UNIT ( .MILLI., .METRE. ) );
#499 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#500 = PRESENTATION_STYLE_ASSIGNMENT (( #288 ) ) ;
#501 = AXIS2_PLACEMENT_3D ( 'NONE', #204, #318, #114 ) ;
#502 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, 0.000000000000000000 ) ) ;
#503 = FACE_OUTER_BOUND ( 'NONE', #161, .T. ) ;
#504 = UNCERTAINTY_MEASURE_WITH_UNIT (LENGTH_MEASURE( 1.000000000000000082E-05 ), #236, 'distance_accuracy_value', 'NONE');
#505 = EDGE_CURVE ( 'NONE', #210, #267, #26, .T. ) ;
#506 = EDGE_CURVE ( 'NONE', #241, #147, #108, .T. ) ;
#507 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 88.81093044336887488, -21.15000000000000213 ) ) ;
#508 = FACE_BOUND ( 'NONE', #133, .T. ) ;
#509 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 84.81093044336887488, 0.000000000000000000 ) ) ;
#510 = CIRCLE ( 'NONE', #310, 22.64999999999999858 ) ;
#511 = ADVANCED_FACE ( 'NONE', ( #90, #649 ), #39, .T. ) ;
#512 = ORIENTED_EDGE ( 'NONE', *, *, #216, .T. ) ;
#513 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#514 = VECTOR ( 'NONE', #75, 1000.000000000000000 ) ;
#515 = ORIENTED_EDGE ( 'NONE', *, *, #228, .T. ) ;
#516 = CYLINDRICAL_SURFACE ( 'NONE', #609, 25.15000000000001990 ) ;
#517 = ORIENTED_EDGE ( 'NONE', *, *, #166, .T. ) ;
#518 = ORIENTED_EDGE ( 'NONE', *, *, #506, .T. ) ;
#519 = CYLINDRICAL_SURFACE ( 'NONE', #132, 22.65000000000000568 ) ;
#520 = ORIENTED_EDGE ( 'NONE', *, *, #125, .T. ) ;
#521 = EDGE_CURVE ( 'NONE', #618, #263, #8, .T. ) ;
#522 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#523 = ADVANCED_FACE ( 'NONE', ( #389 ), #48, .T. ) ;
#524 = EDGE_LOOP ( 'NONE', ( #497, #520, #467, #175 ) ) ;
#525 = LINE ( 'NONE', #576, #446 ) ;
#526 = EDGE_CURVE ( 'NONE', #226, #415, #249, .T. ) ;
#527 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#528 = EDGE_LOOP ( 'NONE', ( #50, #213, #171, #420 ) ) ;
#529 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#530 = DIRECTION ( 'NONE', ( 1.000000000000000000, 0.000000000000000000, 0.000000000000000000 ) ) ;
#531 = EDGE_CURVE ( 'NONE', #76, #243, #31, .T. ) ;
#532 = ORIENTED_EDGE ( 'NONE', *, *, #521, .F. ) ;
#533 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -23.15000000000002345 ) ) ;
#534 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -8.689069556631123348, 0.000000000000000000 ) ) ;
#535 = SHAPE_DEFINITION_REPRESENTATION ( #298, #253 ) ;
#536 = ORIENTED_EDGE ( 'NONE', *, *, #395, .T. ) ;
#537 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#538 = CIRCLE ( 'NONE', #251, 21.15000000000000213 ) ;
#539 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, -25.15000000000001990 ) ) ;
#540 = ORIENTED_EDGE ( 'NONE', *, *, #526, .T. ) ;
#541 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#542 = ORIENTED_EDGE ( 'NONE', *, *, #338, .F. ) ;
#543 = AXIS2_PLACEMENT_3D ( 'NONE', #124, #327, #335 ) ;
#544 = FILL_AREA_STYLE_COLOUR ( '', #449 ) ;
#545 = ORIENTED_EDGE ( 'NONE', *, *, #269, .F. ) ;
#546 = CARTESIAN_POINT ( 'NONE', ( 3.000000000000004885, 84.81093044336887488, 0.000000000000000000 ) ) ;
#547 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#548 = DIRECTION ( 'NONE', ( 0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#549 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 25.15000000000001990 ) ) ;
#550 = EDGE_CURVE ( 'NONE', #28, #429, #339, .T. ) ;
#551 = EDGE_LOOP ( 'NONE', ( #471, #443, #515, #271 ) ) ;
#552 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#553 = ADVANCED_FACE ( 'NONE', ( #396, #99 ), #304, .T. ) ;
#554 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#555 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#556 = PLANE ( 'NONE', #146 ) ;
#557 = ORIENTED_EDGE ( 'NONE', *, *, #154, .F. ) ;
#558 = PLANE ( 'NONE', #109 ) ;
#559 = CIRCLE ( 'NONE', #501, 23.15000000000002345 ) ;
#560 = ORIENTED_EDGE ( 'NONE', *, *, #355, .F. ) ;
#561 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -5.689069556631127789, 0.000000000000000000 ) ) ;
#562 = AXIS2_PLACEMENT_3D ( 'NONE', #441, #244, #496 ) ;
#563 = EDGE_LOOP ( 'NONE', ( #62, #545, #20, #465 ) ) ;
#564 = AXIS2_PLACEMENT_3D ( 'NONE', #502, #191, #183 ) ;
#565 = MANIFOLD_SOLID_BREP ( 'R\X2\00e9\X0\volution1', #107 ) ;
#566 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 85.81093044336887488, 0.000000000000000000 ) ) ;
#567 = VERTEX_POINT ( 'NONE', #188 ) ;
#568 = ORIENTED_EDGE ( 'NONE', *, *, #437, .F. ) ;
#569 = ADVANCED_FACE ( 'NONE', ( #394 ), #589, .T. ) ;
#570 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#571 = CIRCLE ( 'NONE', #257, 20.15000000000002700 ) ;
#572 = ORIENTED_EDGE ( 'NONE', *, *, #590, .T. ) ;
#573 = ORIENTED_EDGE ( 'NONE', *, *, #619, .F. ) ;
#574 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#575 = ORIENTED_EDGE ( 'NONE', *, *, #321, .F. ) ;
#576 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 47.14430681599709771, 23.15000000000002345 ) ) ;
#577 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#578 = ADVANCED_FACE ( 'NONE', ( #644 ), #141, .T. ) ;
#579 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -5.689069556631127789, 0.000000000000000000 ) ) ;
#580 = FACE_OUTER_BOUND ( 'NONE', #524, .T. ) ;
#581 = ORIENTED_EDGE ( 'NONE', *, *, #505, .T. ) ;
#582 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, -23.15000000000002345 ) ) ;
#583 = AXIS2_PLACEMENT_3D ( 'NONE', #285, #74, #376 ) ;
#584 = LINE ( 'NONE', #539, #27 ) ;
#585 =( NAMED_UNIT ( * ) PLANE_ANGLE_UNIT ( ) SI_UNIT ( $, .RADIAN. ) );
#586 = EDGE_LOOP ( 'NONE', ( #375, #358, #341, #272 ) ) ;
#587 = VECTOR ( 'NONE', #160, 1000.000000000000000 ) ;
#588 = VERTEX_POINT ( 'NONE', #259 ) ;
#589 = CYLINDRICAL_SURFACE ( 'NONE', #54, 25.15000000000001990 ) ;
#590 = EDGE_CURVE ( 'NONE', #93, #423, #159, .T. ) ;
#591 = LINE ( 'NONE', #185, #218 ) ;
#592 = ORIENTED_EDGE ( 'NONE', *, *, #105, .T. ) ;
#593 = ADVANCED_FACE ( 'NONE', ( #503, #352 ), #556, .T. ) ;
#594 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 47.14430681599709771, 0.000000000000000000 ) ) ;
#595 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#596 = ORIENTED_EDGE ( 'NONE', *, *, #181, .F. ) ;
#597 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -8.689069556631123348, 0.000000000000000000 ) ) ;
#598 = AXIS2_PLACEMENT_3D ( 'NONE', #346, #97, #406 ) ;
#599 = PRODUCT_DEFINITION ( 'UNKNOWN', '', #104, #203 ) ;
#600 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, 91.31093044336887488, 24.15000000000001990 ) ) ;
#601 =( NAMED_UNIT ( * ) SI_UNIT ( $, .STERADIAN. ) SOLID_ANGLE_UNIT ( ) );
#602 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -8.689069556631123348, -23.15000000000002345 ) ) ;
#603 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, 88.81093044336887488, 0.000000000000000000 ) ) ;
#604 = EDGE_CURVE ( 'NONE', #618, #326, #231, .T. ) ;
#605 = FACE_OUTER_BOUND ( 'NONE', #586, .T. ) ;
#606 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#607 = VERTEX_POINT ( 'NONE', #240 ) ;
#608 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#609 = AXIS2_PLACEMENT_3D ( 'NONE', #67, #464, #418 ) ;
#610 = ORIENTED_EDGE ( 'NONE', *, *, #302, .F. ) ;
#611 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#612 =( GEOMETRIC_REPRESENTATION_CONTEXT ( 3 ) GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT ( ( #196 ) ) GLOBAL_UNIT_ASSIGNED_CONTEXT ( ( #498, #4, #601 ) ) REPRESENTATION_CONTEXT ( 'NONE', 'WORKASPACE' ) );
#613 = ADVANCED_FACE ( 'NONE', ( #486 ), #442, .F. ) ;
#614 = EDGE_LOOP ( 'NONE', ( #445, #494 ) ) ;
#615 = CIRCLE ( 'NONE', #421, 25.15000000000001990 ) ;
#616 = CIRCLE ( 'NONE', #55, 22.65000000000001279 ) ;
#617 = FACE_OUTER_BOUND ( 'NONE', #283, .T. ) ;
#618 = VERTEX_POINT ( 'NONE', #225 ) ;
#619 = EDGE_CURVE ( 'NONE', #167, #434, #379, .T. ) ;
#620 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -5.689069556631127789, 24.15000000000002700 ) ) ;
#621 = AXIS2_PLACEMENT_3D ( 'NONE', #33, #348, #440 ) ;
#622 = CONICAL_SURFACE ( 'NONE', #143, 25.15000000000002700, 0.4636476090008060935 ) ;
#623 = ORIENTED_EDGE ( 'NONE', *, *, #255, .T. ) ;
#624 = FACE_OUTER_BOUND ( 'NONE', #563, .T. ) ;
#625 = EDGE_CURVE ( 'NONE', #261, #607, #139, .T. ) ;
#626 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001634, -6.689069556631128677, 21.15000000000002345 ) ) ;
#627 = PRODUCT_CONTEXT ( 'NONE', #629, 'mechanical' ) ;
#628 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#629 = APPLICATION_CONTEXT ( 'automotive_design' ) ;
#630 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#631 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#632 = ORIENTED_EDGE ( 'NONE', *, *, #604, .T. ) ;
#633 = DIRECTION ( 'NONE', ( -0.000000000000000000, -1.000000000000000000, -0.000000000000000000 ) ) ;
#634 = AXIS2_PLACEMENT_3D ( 'NONE', #247, #435, #450 ) ;
#635 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, 0.000000000000000000 ) ) ;
#636 = CARTESIAN_POINT ( 'NONE', ( -21.15000000000001990, -7.689069556631129565, 0.000000000000000000 ) ) ;
#637 = ORIENTED_EDGE ( 'NONE', *, *, #292, .F. ) ;
#638 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#639 = APPLICATION_PROTOCOL_DEFINITION ( 'draft international standard', 'automotive_design', 1998, #629 ) ;
#640 = ORIENTED_EDGE ( 'NONE', *, *, #245, .F. ) ;
#641 = EDGE_CURVE ( 'NONE', #263, #237, #591, .T. ) ;
#642 = DIRECTION ( 'NONE', ( 0.000000000000000000, 0.000000000000000000, -1.000000000000000000 ) ) ;
#643 = EDGE_LOOP ( 'NONE', ( #518, #592, #290, #646 ) ) ;
#644 = FACE_OUTER_BOUND ( 'NONE', #312, .T. ) ;
#645 = LINE ( 'NONE', #549, #242 ) ;
#646 = ORIENTED_EDGE ( 'NONE', *, *, #369, .F. ) ;
#647 = ADVANCED_FACE ( 'NONE', ( #480 ), #282, .T. ) ;
#648 = AXIS2_PLACEMENT_3D ( 'NONE', #103, #164, #365 ) ;
#649 = FACE_BOUND ( 'NONE', #23, .T. ) ;
ENDSEC;
END-ISO-10303-21;

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,26 @@
M48
; DRILL file {KiCad (7.0.0)} date Sat Mar 18 07:42:43 2023
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-18T07:42:43+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(7.0.0)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
METRIC
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T1C2.700
%
G90
G05
T1
G00X137.744Y-51.397
M15
G01X138.544Y-51.397
M16
G05
G00X166.744Y-51.397
M15
G01X167.544Y-51.397
M16
G05
T0
M30

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,28 @@
M48
; DRILL file {KiCad (7.0.0)} date Sat Mar 18 07:42:43 2023
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-18T07:42:43+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(7.0.0)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
METRIC
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C1.000
%
G90
G05
T1
X143.764Y-108.331
X145.034Y-59.563
X147.955Y-78.232
X150.391Y-71.755
X151.638Y-106.934
X153.416Y-59.817
X153.67Y-77.724
X154.822Y-67.828
X158.242Y-56.388
X162.687Y-58.039
X163.322Y-104.013
X163.322Y-109.093
T0
M30

View file

@ -0,0 +1,88 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Copper,L2,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,ViaPad*%
%ADD10C,2.000000*%
%TD*%
%TA.AperFunction,Conductor*%
%ADD11C,0.400000*%
%TD*%
G04 APERTURE END LIST*
D10*
%TO.N,HT*%
X158242000Y-56388000D03*
X162687000Y-58039000D03*
%TO.N,Net-(C1-Pad2)*%
X150391500Y-71755000D03*
X151638000Y-106934000D03*
%TO.N,Net-(U1A--)*%
X143764000Y-108331000D03*
X153416000Y-59817000D03*
%TO.N,+12V*%
X154822500Y-67827500D03*
X163322000Y-109093000D03*
X153670000Y-77724000D03*
X163322000Y-104013000D03*
%TO.N,GNDREF*%
X147955000Y-78232000D03*
X145034000Y-59563000D03*
%TD*%
D11*
%TO.N,+12V*%
X153670000Y-68980000D02*
X154822500Y-67827500D01*
X153670000Y-77724000D02*
X153670000Y-68980000D01*
%TO.N,Net-(U1A--)*%
X140081000Y-104648000D02*
X143764000Y-108331000D01*
X140081000Y-58293000D02*
X140081000Y-104648000D01*
X150495000Y-56896000D02*
X141478000Y-56896000D01*
X153416000Y-59817000D02*
X150495000Y-56896000D01*
X141478000Y-56896000D02*
X140081000Y-58293000D01*
%TO.N,Net-(C1-Pad2)*%
X150391500Y-81811500D02*
X150391500Y-71755000D01*
X152518990Y-83938990D02*
X150391500Y-81811500D01*
X152518990Y-106053010D02*
X152518990Y-83938990D01*
X151638000Y-106934000D02*
X152518990Y-106053010D01*
%TO.N,+12V*%
X163322000Y-104013000D02*
X163322000Y-109093000D01*
%TO.N,GNDREF*%
X145542000Y-78232000D02*
X147955000Y-78232000D01*
X142240000Y-74930000D02*
X145542000Y-78232000D01*
X143764000Y-59563000D02*
X142240000Y-61087000D01*
X145034000Y-59563000D02*
X143764000Y-59563000D01*
X142240000Y-61087000D02*
X142240000Y-74930000D01*
%TO.N,HT*%
X162687000Y-57721500D02*
X162687000Y-58039000D01*
X161353500Y-56388000D02*
X162687000Y-57721500D01*
X158242000Y-56388000D02*
X161353500Y-56388000D01*
%TD*%
M02*

View file

@ -0,0 +1,23 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Bot*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10O,3.500000X2.700000*%
G04 APERTURE END LIST*
D10*
%TO.C,H1*%
X138143614Y-51396883D03*
%TD*%
%TO.C,H2*%
X167143614Y-51396883D03*
%TD*%
M02*

View file

@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*

View file

@ -0,0 +1,15 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Legend,Bot*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 APERTURE END LIST*
M02*

View file

@ -0,0 +1,50 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Profile,NP*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%TA.AperFunction,Profile*%
%ADD10C,0.100000*%
%TD*%
G04 APERTURE END LIST*
D10*
X169643615Y-130140653D02*
X169735615Y-130140653D01*
X138620616Y-133095115D02*
G75*
G03*
X135664384Y-130138884I-2956216J15D01*
G01*
X135664384Y-130138884D02*
X135572384Y-130138884D01*
X173092835Y-49373211D02*
G75*
G03*
X171816501Y-48096877I-1276334J0D01*
G01*
X133470225Y-48096877D02*
G75*
G03*
X132193891Y-49373211I0J-1276334D01*
G01*
X132193891Y-49373211D02*
X135572384Y-130138884D01*
X133470225Y-48096877D02*
X171816501Y-48096877D01*
X173092835Y-49373211D02*
X169735615Y-130140653D01*
X169643615Y-130140684D02*
G75*
G03*
X166687384Y-133096884I-15J-2956216D01*
G01*
X138620615Y-133095115D02*
X166687384Y-133096884D01*
M02*

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,344 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Soldermask,Top*%
%TF.FilePolarity,Negative*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10RoundRect,0.250000X-0.475000X0.250000X-0.475000X-0.250000X0.475000X-0.250000X0.475000X0.250000X0*%
%ADD11RoundRect,0.250000X0.475000X-0.250000X0.475000X0.250000X-0.475000X0.250000X-0.475000X-0.250000X0*%
%ADD12RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*%
%ADD13RoundRect,0.250000X-0.600000X1.400000X-0.600000X-1.400000X0.600000X-1.400000X0.600000X1.400000X0*%
%ADD14RoundRect,0.250000X0.450000X-0.262500X0.450000X0.262500X-0.450000X0.262500X-0.450000X-0.262500X0*%
%ADD15RoundRect,0.250000X0.262500X0.450000X-0.262500X0.450000X-0.262500X-0.450000X0.262500X-0.450000X0*%
%ADD16RoundRect,0.250000X-0.250000X0.250000X-0.250000X-0.250000X0.250000X-0.250000X0.250000X0.250000X0*%
%ADD17RoundRect,0.250000X1.950000X1.000000X-1.950000X1.000000X-1.950000X-1.000000X1.950000X-1.000000X0*%
%ADD18RoundRect,0.250000X-0.450000X0.262500X-0.450000X-0.262500X0.450000X-0.262500X0.450000X0.262500X0*%
%ADD19RoundRect,0.250000X-0.262500X-0.450000X0.262500X-0.450000X0.262500X0.450000X-0.262500X0.450000X0*%
%ADD20RoundRect,0.250000X-0.250000X-0.475000X0.250000X-0.475000X0.250000X0.475000X-0.250000X0.475000X0*%
%ADD21RoundRect,0.250000X0.250000X0.475000X-0.250000X0.475000X-0.250000X-0.475000X0.250000X-0.475000X0*%
%ADD22O,3.500000X2.700000*%
%ADD23RoundRect,0.250000X0.250000X0.250000X-0.250000X0.250000X-0.250000X-0.250000X0.250000X-0.250000X0*%
%ADD24RoundRect,0.250000X1.000000X-1.950000X1.000000X1.950000X-1.000000X1.950000X-1.000000X-1.950000X0*%
%ADD25RoundRect,0.500000X-0.500000X-0.500000X0.500000X-0.500000X0.500000X0.500000X-0.500000X0.500000X0*%
%ADD26RoundRect,0.250000X-1.950000X-1.000000X1.950000X-1.000000X1.950000X1.000000X-1.950000X1.000000X0*%
%ADD27RoundRect,0.250000X-0.250000X-0.250000X0.250000X-0.250000X0.250000X0.250000X-0.250000X0.250000X0*%
%ADD28RoundRect,0.250000X-1.000000X1.950000X-1.000000X-1.950000X1.000000X-1.950000X1.000000X1.950000X0*%
%ADD29RoundRect,0.150000X-0.150000X0.825000X-0.150000X-0.825000X0.150000X-0.825000X0.150000X0.825000X0*%
G04 APERTURE END LIST*
D10*
%TO.C,C12*%
X162282500Y-79353400D03*
X162282500Y-77453400D03*
%TD*%
%TO.C,C8*%
X145087000Y-63688000D03*
X145087000Y-61788000D03*
%TD*%
D11*
%TO.C,C16*%
X159385000Y-65871000D03*
X159385000Y-67771000D03*
%TD*%
D12*
%TO.C,U2*%
X157126300Y-69944200D03*
X158396300Y-69944200D03*
X159666300Y-69944200D03*
X160936300Y-69944200D03*
X162206300Y-69944200D03*
X163476300Y-69944200D03*
X164746300Y-69944200D03*
X164746300Y-74894200D03*
X163476300Y-74894200D03*
X162206300Y-74894200D03*
X160936300Y-74894200D03*
X159666300Y-74894200D03*
X158396300Y-74894200D03*
X157126300Y-74894200D03*
%TD*%
D13*
%TO.C,D1*%
X161671000Y-92666000D03*
X161671000Y-87166000D03*
%TD*%
D14*
%TO.C,R12*%
X153138500Y-62333500D03*
X153138500Y-64158500D03*
%TD*%
D15*
%TO.C,R5*%
X151821500Y-80156000D03*
X153646500Y-80156000D03*
%TD*%
%TO.C,R10*%
X161522400Y-60598000D03*
X163347400Y-60598000D03*
%TD*%
D16*
%TO.C,D8*%
X157353000Y-65896800D03*
X157353000Y-63396800D03*
%TD*%
D17*
%TO.C,C3*%
X155771500Y-101600000D03*
X163171500Y-101600000D03*
%TD*%
D18*
%TO.C,R2*%
X152630500Y-121285000D03*
X152630500Y-119460000D03*
%TD*%
D19*
%TO.C,R6*%
X151384000Y-76346000D03*
X149559000Y-76346000D03*
%TD*%
D20*
%TO.C,C15*%
X164399000Y-67456000D03*
X162499000Y-67456000D03*
%TD*%
D10*
%TO.C,C11*%
X160250500Y-79353400D03*
X160250500Y-77453400D03*
%TD*%
D21*
%TO.C,C17*%
X161510300Y-62630000D03*
X163410300Y-62630000D03*
%TD*%
D22*
%TO.C,H1*%
X138143614Y-51396883D03*
%TD*%
D23*
%TO.C,D3*%
X161819900Y-81146600D03*
X164319900Y-81146600D03*
%TD*%
D18*
%TO.C,R9*%
X159666300Y-63908300D03*
X159666300Y-62083300D03*
%TD*%
D19*
%TO.C,R3*%
X163322000Y-118110000D03*
X161497000Y-118110000D03*
%TD*%
%TO.C,R11*%
X150391500Y-69361000D03*
X148566500Y-69361000D03*
%TD*%
D18*
%TO.C,R101*%
X136144000Y-58189500D03*
X136144000Y-56364500D03*
%TD*%
%TO.C,R102*%
X136144000Y-61642000D03*
X136144000Y-59817000D03*
%TD*%
%TO.C,R105*%
X136144000Y-71905500D03*
X136144000Y-70080500D03*
%TD*%
D19*
%TO.C,R7*%
X149582500Y-74314000D03*
X147757500Y-74314000D03*
%TD*%
D11*
%TO.C,C10*%
X155348300Y-69919800D03*
X155348300Y-71819800D03*
%TD*%
D19*
%TO.C,R4*%
X163322000Y-120396000D03*
X161497000Y-120396000D03*
%TD*%
D24*
%TO.C,C1*%
X157099000Y-108568000D03*
X157099000Y-115968000D03*
%TD*%
D25*
%TO.C,J1*%
X157630500Y-123444000D03*
X152630500Y-123444000D03*
X147630500Y-123444000D03*
%TD*%
D10*
%TO.C,C13*%
X164289100Y-79363600D03*
X164289100Y-77463600D03*
%TD*%
D20*
%TO.C,C19*%
X150683000Y-58928000D03*
X148783000Y-58928000D03*
%TD*%
D26*
%TO.C,C7*%
X155465000Y-88646000D03*
X148065000Y-88646000D03*
%TD*%
D19*
%TO.C,R107*%
X141247500Y-73660000D03*
X139422500Y-73660000D03*
%TD*%
D18*
%TO.C,R1*%
X157964500Y-121285000D03*
X157964500Y-119460000D03*
%TD*%
D27*
%TO.C,D7*%
X164318000Y-64916000D03*
X161818000Y-64916000D03*
%TD*%
D21*
%TO.C,C9*%
X156481100Y-79048600D03*
X158381100Y-79048600D03*
%TD*%
D23*
%TO.C,D2*%
X157349500Y-81934000D03*
X159849500Y-81934000D03*
%TD*%
D15*
%TO.C,R13*%
X155471500Y-56388000D03*
X153646500Y-56388000D03*
%TD*%
%TO.C,R8*%
X156544000Y-77092800D03*
X158369000Y-77092800D03*
%TD*%
D18*
%TO.C,R103*%
X136144000Y-65047500D03*
X136144000Y-63222500D03*
%TD*%
D16*
%TO.C,D4*%
X166295700Y-81162200D03*
X166295700Y-78662200D03*
%TD*%
D25*
%TO.C,MK1*%
X151304000Y-56388000D03*
X141304000Y-56388000D03*
%TD*%
D11*
%TO.C,C18*%
X165608000Y-60537000D03*
X165608000Y-62437000D03*
%TD*%
D18*
%TO.C,R104*%
X136144000Y-68476500D03*
X136144000Y-66651500D03*
%TD*%
D19*
%TO.C,R108*%
X144676500Y-73660000D03*
X142851500Y-73660000D03*
%TD*%
D22*
%TO.C,H2*%
X167143614Y-51396883D03*
%TD*%
D16*
%TO.C,D6*%
X167005000Y-68325000D03*
X167005000Y-65825000D03*
%TD*%
D14*
%TO.C,R109*%
X144526000Y-70080500D03*
X144526000Y-71905500D03*
%TD*%
D11*
%TO.C,C4*%
X164084000Y-88839000D03*
X164084000Y-90739000D03*
%TD*%
D19*
%TO.C,R106*%
X137795000Y-73660000D03*
X135970000Y-73660000D03*
%TD*%
D10*
%TO.C,C14*%
X166549700Y-71896000D03*
X166549700Y-69996000D03*
%TD*%
D16*
%TO.C,D5*%
X166676700Y-76234600D03*
X166676700Y-73734600D03*
%TD*%
D11*
%TO.C,C6*%
X149813000Y-79968000D03*
X149813000Y-81868000D03*
%TD*%
D24*
%TO.C,C2*%
X147447000Y-110981000D03*
X147447000Y-118381000D03*
%TD*%
D28*
%TO.C,C5*%
X147447000Y-103903000D03*
X147447000Y-96503000D03*
%TD*%
D14*
%TO.C,R110*%
X144526000Y-66651500D03*
X144526000Y-68476500D03*
%TD*%
D29*
%TO.C,U1*%
X151233500Y-67010000D03*
X149963500Y-67010000D03*
X148693500Y-67010000D03*
X147423500Y-67010000D03*
X147423500Y-62060000D03*
X148693500Y-62060000D03*
X149963500Y-62060000D03*
X151233500Y-62060000D03*
%TD*%
M02*

View file

@ -0,0 +1,335 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:40+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Paste,Top*%
%TF.FilePolarity,Positive*%
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:40*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
G04 Aperture macros list*
%AMRoundRect*
0 Rectangle with rounded corners*
0 $1 Rounding radius*
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
0 Add a 4 corners polygon primitive as box body*
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
0 Add four circle primitives for the rounded corners*
1,1,$1+$1,$2,$3*
1,1,$1+$1,$4,$5*
1,1,$1+$1,$6,$7*
1,1,$1+$1,$8,$9*
0 Add four rect primitives between the rounded corners*
20,1,$1+$1,$2,$3,$4,$5,0*
20,1,$1+$1,$4,$5,$6,$7,0*
20,1,$1+$1,$6,$7,$8,$9,0*
20,1,$1+$1,$8,$9,$2,$3,0*%
G04 Aperture macros list end*
%ADD10RoundRect,0.250000X-0.475000X0.250000X-0.475000X-0.250000X0.475000X-0.250000X0.475000X0.250000X0*%
%ADD11RoundRect,0.250000X0.475000X-0.250000X0.475000X0.250000X-0.475000X0.250000X-0.475000X-0.250000X0*%
%ADD12RoundRect,0.150000X0.150000X-0.825000X0.150000X0.825000X-0.150000X0.825000X-0.150000X-0.825000X0*%
%ADD13RoundRect,0.250000X-0.600000X1.400000X-0.600000X-1.400000X0.600000X-1.400000X0.600000X1.400000X0*%
%ADD14RoundRect,0.250000X0.450000X-0.262500X0.450000X0.262500X-0.450000X0.262500X-0.450000X-0.262500X0*%
%ADD15RoundRect,0.250000X0.262500X0.450000X-0.262500X0.450000X-0.262500X-0.450000X0.262500X-0.450000X0*%
%ADD16RoundRect,0.250000X-0.250000X0.250000X-0.250000X-0.250000X0.250000X-0.250000X0.250000X0.250000X0*%
%ADD17RoundRect,0.250000X1.950000X1.000000X-1.950000X1.000000X-1.950000X-1.000000X1.950000X-1.000000X0*%
%ADD18RoundRect,0.250000X-0.450000X0.262500X-0.450000X-0.262500X0.450000X-0.262500X0.450000X0.262500X0*%
%ADD19RoundRect,0.250000X-0.262500X-0.450000X0.262500X-0.450000X0.262500X0.450000X-0.262500X0.450000X0*%
%ADD20RoundRect,0.250000X-0.250000X-0.475000X0.250000X-0.475000X0.250000X0.475000X-0.250000X0.475000X0*%
%ADD21RoundRect,0.250000X0.250000X0.475000X-0.250000X0.475000X-0.250000X-0.475000X0.250000X-0.475000X0*%
%ADD22RoundRect,0.250000X0.250000X0.250000X-0.250000X0.250000X-0.250000X-0.250000X0.250000X-0.250000X0*%
%ADD23RoundRect,0.250000X1.000000X-1.950000X1.000000X1.950000X-1.000000X1.950000X-1.000000X-1.950000X0*%
%ADD24RoundRect,0.500000X-0.500000X-0.500000X0.500000X-0.500000X0.500000X0.500000X-0.500000X0.500000X0*%
%ADD25RoundRect,0.250000X-1.950000X-1.000000X1.950000X-1.000000X1.950000X1.000000X-1.950000X1.000000X0*%
%ADD26RoundRect,0.250000X-0.250000X-0.250000X0.250000X-0.250000X0.250000X0.250000X-0.250000X0.250000X0*%
%ADD27RoundRect,0.250000X-1.000000X1.950000X-1.000000X-1.950000X1.000000X-1.950000X1.000000X1.950000X0*%
%ADD28RoundRect,0.150000X-0.150000X0.825000X-0.150000X-0.825000X0.150000X-0.825000X0.150000X0.825000X0*%
G04 APERTURE END LIST*
D10*
%TO.C,C12*%
X162282500Y-79353400D03*
X162282500Y-77453400D03*
%TD*%
%TO.C,C8*%
X145087000Y-63688000D03*
X145087000Y-61788000D03*
%TD*%
D11*
%TO.C,C16*%
X159385000Y-65871000D03*
X159385000Y-67771000D03*
%TD*%
D12*
%TO.C,U2*%
X157126300Y-69944200D03*
X158396300Y-69944200D03*
X159666300Y-69944200D03*
X160936300Y-69944200D03*
X162206300Y-69944200D03*
X163476300Y-69944200D03*
X164746300Y-69944200D03*
X164746300Y-74894200D03*
X163476300Y-74894200D03*
X162206300Y-74894200D03*
X160936300Y-74894200D03*
X159666300Y-74894200D03*
X158396300Y-74894200D03*
X157126300Y-74894200D03*
%TD*%
D13*
%TO.C,D1*%
X161671000Y-92666000D03*
X161671000Y-87166000D03*
%TD*%
D14*
%TO.C,R12*%
X153138500Y-62333500D03*
X153138500Y-64158500D03*
%TD*%
D15*
%TO.C,R5*%
X151821500Y-80156000D03*
X153646500Y-80156000D03*
%TD*%
%TO.C,R10*%
X161522400Y-60598000D03*
X163347400Y-60598000D03*
%TD*%
D16*
%TO.C,D8*%
X157353000Y-65896800D03*
X157353000Y-63396800D03*
%TD*%
D17*
%TO.C,C3*%
X155771500Y-101600000D03*
X163171500Y-101600000D03*
%TD*%
D18*
%TO.C,R2*%
X152630500Y-121285000D03*
X152630500Y-119460000D03*
%TD*%
D19*
%TO.C,R6*%
X151384000Y-76346000D03*
X149559000Y-76346000D03*
%TD*%
D20*
%TO.C,C15*%
X164399000Y-67456000D03*
X162499000Y-67456000D03*
%TD*%
D10*
%TO.C,C11*%
X160250500Y-79353400D03*
X160250500Y-77453400D03*
%TD*%
D21*
%TO.C,C17*%
X161510300Y-62630000D03*
X163410300Y-62630000D03*
%TD*%
D22*
%TO.C,D3*%
X161819900Y-81146600D03*
X164319900Y-81146600D03*
%TD*%
D18*
%TO.C,R9*%
X159666300Y-63908300D03*
X159666300Y-62083300D03*
%TD*%
D19*
%TO.C,R3*%
X163322000Y-118110000D03*
X161497000Y-118110000D03*
%TD*%
%TO.C,R11*%
X150391500Y-69361000D03*
X148566500Y-69361000D03*
%TD*%
D18*
%TO.C,R101*%
X136144000Y-58189500D03*
X136144000Y-56364500D03*
%TD*%
%TO.C,R102*%
X136144000Y-61642000D03*
X136144000Y-59817000D03*
%TD*%
%TO.C,R105*%
X136144000Y-71905500D03*
X136144000Y-70080500D03*
%TD*%
D19*
%TO.C,R7*%
X149582500Y-74314000D03*
X147757500Y-74314000D03*
%TD*%
D11*
%TO.C,C10*%
X155348300Y-69919800D03*
X155348300Y-71819800D03*
%TD*%
D19*
%TO.C,R4*%
X163322000Y-120396000D03*
X161497000Y-120396000D03*
%TD*%
D23*
%TO.C,C1*%
X157099000Y-108568000D03*
X157099000Y-115968000D03*
%TD*%
D24*
%TO.C,J1*%
X157630500Y-123444000D03*
X152630500Y-123444000D03*
X147630500Y-123444000D03*
%TD*%
D10*
%TO.C,C13*%
X164289100Y-79363600D03*
X164289100Y-77463600D03*
%TD*%
D20*
%TO.C,C19*%
X150683000Y-58928000D03*
X148783000Y-58928000D03*
%TD*%
D25*
%TO.C,C7*%
X155465000Y-88646000D03*
X148065000Y-88646000D03*
%TD*%
D19*
%TO.C,R107*%
X141247500Y-73660000D03*
X139422500Y-73660000D03*
%TD*%
D18*
%TO.C,R1*%
X157964500Y-121285000D03*
X157964500Y-119460000D03*
%TD*%
D26*
%TO.C,D7*%
X164318000Y-64916000D03*
X161818000Y-64916000D03*
%TD*%
D21*
%TO.C,C9*%
X156481100Y-79048600D03*
X158381100Y-79048600D03*
%TD*%
D22*
%TO.C,D2*%
X157349500Y-81934000D03*
X159849500Y-81934000D03*
%TD*%
D15*
%TO.C,R13*%
X155471500Y-56388000D03*
X153646500Y-56388000D03*
%TD*%
%TO.C,R8*%
X156544000Y-77092800D03*
X158369000Y-77092800D03*
%TD*%
D18*
%TO.C,R103*%
X136144000Y-65047500D03*
X136144000Y-63222500D03*
%TD*%
D16*
%TO.C,D4*%
X166295700Y-81162200D03*
X166295700Y-78662200D03*
%TD*%
D24*
%TO.C,MK1*%
X151304000Y-56388000D03*
X141304000Y-56388000D03*
%TD*%
D11*
%TO.C,C18*%
X165608000Y-60537000D03*
X165608000Y-62437000D03*
%TD*%
D18*
%TO.C,R104*%
X136144000Y-68476500D03*
X136144000Y-66651500D03*
%TD*%
D19*
%TO.C,R108*%
X144676500Y-73660000D03*
X142851500Y-73660000D03*
%TD*%
D16*
%TO.C,D6*%
X167005000Y-68325000D03*
X167005000Y-65825000D03*
%TD*%
D14*
%TO.C,R109*%
X144526000Y-70080500D03*
X144526000Y-71905500D03*
%TD*%
D11*
%TO.C,C4*%
X164084000Y-88839000D03*
X164084000Y-90739000D03*
%TD*%
D19*
%TO.C,R106*%
X137795000Y-73660000D03*
X135970000Y-73660000D03*
%TD*%
D10*
%TO.C,C14*%
X166549700Y-71896000D03*
X166549700Y-69996000D03*
%TD*%
D16*
%TO.C,D5*%
X166676700Y-76234600D03*
X166676700Y-73734600D03*
%TD*%
D11*
%TO.C,C6*%
X149813000Y-79968000D03*
X149813000Y-81868000D03*
%TD*%
D23*
%TO.C,C2*%
X147447000Y-110981000D03*
X147447000Y-118381000D03*
%TD*%
D27*
%TO.C,C5*%
X147447000Y-103903000D03*
X147447000Y-96503000D03*
%TD*%
D14*
%TO.C,R110*%
X144526000Y-66651500D03*
X144526000Y-68476500D03*
%TD*%
D28*
%TO.C,U1*%
X151233500Y-67010000D03*
X149963500Y-67010000D03*
X148693500Y-67010000D03*
X147423500Y-67010000D03*
X147423500Y-62060000D03*
X148693500Y-62060000D03*
X149963500Y-62060000D03*
X151233500Y-62060000D03*
%TD*%
M02*

View file

@ -0,0 +1,26 @@
M48
; DRILL file {KiCad (7.0.0)} date Sat Mar 18 07:41:42 2023
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-18T07:41:42+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(7.0.0)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
METRIC
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T1C2.700
%
G90
G05
T1
G00X137.744Y-51.397
M15
G01X138.544Y-51.397
M16
G05
G00X166.744Y-51.397
M15
G01X167.544Y-51.397
M16
G05
T0
M30

View file

@ -0,0 +1,787 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:41:42+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Drillmap*%
%TF.FilePolarity,Positive*%
%FSLAX45Y45*%
G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:41:42*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.200000*%
G04 APERTURE END LIST*
D10*
X16964362Y-13014065D02*
X16973562Y-13014065D01*
X13862062Y-13309511D02*
G75*
G03*
X13566438Y-13013888I-295622J2D01*
G01*
X13566438Y-13013888D02*
X13557238Y-13013888D01*
X17309284Y-4937321D02*
G75*
G03*
X17181650Y-4809688I-127633J0D01*
G01*
X13347022Y-4809688D02*
G75*
G03*
X13219389Y-4937321I0J-127633D01*
G01*
X13219389Y-4937321D02*
X13557238Y-13013888D01*
X13347022Y-4809688D02*
X17181650Y-4809688D01*
X17309284Y-4937321D02*
X16973562Y-13014065D01*
X16964362Y-13014068D02*
G75*
G03*
X16668738Y-13309688I-2J-295622D01*
G01*
X13862061Y-13309511D02*
X16668738Y-13309688D01*
D11*
D10*
X14326400Y-10783100D02*
X14426400Y-10883100D01*
X14426400Y-10783100D02*
X14326400Y-10883100D01*
X14453400Y-5906300D02*
X14553400Y-6006300D01*
X14553400Y-5906300D02*
X14453400Y-6006300D01*
X14745500Y-7773200D02*
X14845500Y-7873200D01*
X14845500Y-7773200D02*
X14745500Y-7873200D01*
X14989150Y-7125500D02*
X15089150Y-7225500D01*
X15089150Y-7125500D02*
X14989150Y-7225500D01*
X15113800Y-10643400D02*
X15213800Y-10743400D01*
X15213800Y-10643400D02*
X15113800Y-10743400D01*
X15291600Y-5931700D02*
X15391600Y-6031700D01*
X15391600Y-5931700D02*
X15291600Y-6031700D01*
X15317000Y-7722400D02*
X15417000Y-7822400D01*
X15417000Y-7722400D02*
X15317000Y-7822400D01*
X15432250Y-6732750D02*
X15532250Y-6832750D01*
X15532250Y-6732750D02*
X15432250Y-6832750D01*
X15774200Y-5588800D02*
X15874200Y-5688800D01*
X15874200Y-5588800D02*
X15774200Y-5688800D01*
X16218700Y-5753900D02*
X16318700Y-5853900D01*
X16318700Y-5753900D02*
X16218700Y-5853900D01*
X16282200Y-10351300D02*
X16382200Y-10451300D01*
X16382200Y-10351300D02*
X16282200Y-10451300D01*
X16282200Y-10859300D02*
X16382200Y-10959300D01*
X16382200Y-10859300D02*
X16282200Y-10959300D01*
D11*
X13462008Y-13608164D02*
X13462008Y-13408164D01*
X13462008Y-13408164D02*
X13509627Y-13408164D01*
X13509627Y-13408164D02*
X13538199Y-13417688D01*
X13538199Y-13417688D02*
X13557246Y-13436736D01*
X13557246Y-13436736D02*
X13566770Y-13455784D01*
X13566770Y-13455784D02*
X13576294Y-13493879D01*
X13576294Y-13493879D02*
X13576294Y-13522450D01*
X13576294Y-13522450D02*
X13566770Y-13560545D01*
X13566770Y-13560545D02*
X13557246Y-13579593D01*
X13557246Y-13579593D02*
X13538199Y-13598641D01*
X13538199Y-13598641D02*
X13509627Y-13608164D01*
X13509627Y-13608164D02*
X13462008Y-13608164D01*
X13662008Y-13608164D02*
X13662008Y-13474831D01*
X13662008Y-13512926D02*
X13671532Y-13493879D01*
X13671532Y-13493879D02*
X13681056Y-13484355D01*
X13681056Y-13484355D02*
X13700103Y-13474831D01*
X13700103Y-13474831D02*
X13719151Y-13474831D01*
X13785818Y-13608164D02*
X13785818Y-13474831D01*
X13785818Y-13408164D02*
X13776294Y-13417688D01*
X13776294Y-13417688D02*
X13785818Y-13427212D01*
X13785818Y-13427212D02*
X13795341Y-13417688D01*
X13795341Y-13417688D02*
X13785818Y-13408164D01*
X13785818Y-13408164D02*
X13785818Y-13427212D01*
X13909627Y-13608164D02*
X13890579Y-13598641D01*
X13890579Y-13598641D02*
X13881056Y-13579593D01*
X13881056Y-13579593D02*
X13881056Y-13408164D01*
X14014389Y-13608164D02*
X13995341Y-13598641D01*
X13995341Y-13598641D02*
X13985818Y-13579593D01*
X13985818Y-13579593D02*
X13985818Y-13408164D01*
X14210579Y-13608164D02*
X14210579Y-13408164D01*
X14210579Y-13408164D02*
X14277246Y-13551022D01*
X14277246Y-13551022D02*
X14343913Y-13408164D01*
X14343913Y-13408164D02*
X14343913Y-13608164D01*
X14524865Y-13608164D02*
X14524865Y-13503403D01*
X14524865Y-13503403D02*
X14515341Y-13484355D01*
X14515341Y-13484355D02*
X14496294Y-13474831D01*
X14496294Y-13474831D02*
X14458198Y-13474831D01*
X14458198Y-13474831D02*
X14439151Y-13484355D01*
X14524865Y-13598641D02*
X14505818Y-13608164D01*
X14505818Y-13608164D02*
X14458198Y-13608164D01*
X14458198Y-13608164D02*
X14439151Y-13598641D01*
X14439151Y-13598641D02*
X14429627Y-13579593D01*
X14429627Y-13579593D02*
X14429627Y-13560545D01*
X14429627Y-13560545D02*
X14439151Y-13541498D01*
X14439151Y-13541498D02*
X14458198Y-13531974D01*
X14458198Y-13531974D02*
X14505818Y-13531974D01*
X14505818Y-13531974D02*
X14524865Y-13522450D01*
X14620103Y-13474831D02*
X14620103Y-13674831D01*
X14620103Y-13484355D02*
X14639151Y-13474831D01*
X14639151Y-13474831D02*
X14677246Y-13474831D01*
X14677246Y-13474831D02*
X14696294Y-13484355D01*
X14696294Y-13484355D02*
X14705818Y-13493879D01*
X14705818Y-13493879D02*
X14715341Y-13512926D01*
X14715341Y-13512926D02*
X14715341Y-13570069D01*
X14715341Y-13570069D02*
X14705818Y-13589117D01*
X14705818Y-13589117D02*
X14696294Y-13598641D01*
X14696294Y-13598641D02*
X14677246Y-13608164D01*
X14677246Y-13608164D02*
X14639151Y-13608164D01*
X14639151Y-13608164D02*
X14620103Y-13598641D01*
X14801056Y-13589117D02*
X14810579Y-13598641D01*
X14810579Y-13598641D02*
X14801056Y-13608164D01*
X14801056Y-13608164D02*
X14791532Y-13598641D01*
X14791532Y-13598641D02*
X14801056Y-13589117D01*
X14801056Y-13589117D02*
X14801056Y-13608164D01*
X14801056Y-13484355D02*
X14810579Y-13493879D01*
X14810579Y-13493879D02*
X14801056Y-13503403D01*
X14801056Y-13503403D02*
X14791532Y-13493879D01*
X14791532Y-13493879D02*
X14801056Y-13484355D01*
X14801056Y-13484355D02*
X14801056Y-13503403D01*
D10*
X13114389Y-13904688D02*
X13214389Y-14004688D01*
X13214389Y-13904688D02*
X13114389Y-14004688D01*
D11*
X13566770Y-14028164D02*
X13452484Y-14028164D01*
X13509627Y-14028164D02*
X13509627Y-13828164D01*
X13509627Y-13828164D02*
X13490579Y-13856736D01*
X13490579Y-13856736D02*
X13471532Y-13875784D01*
X13471532Y-13875784D02*
X13452484Y-13885307D01*
X13652484Y-14009117D02*
X13662008Y-14018641D01*
X13662008Y-14018641D02*
X13652484Y-14028164D01*
X13652484Y-14028164D02*
X13642960Y-14018641D01*
X13642960Y-14018641D02*
X13652484Y-14009117D01*
X13652484Y-14009117D02*
X13652484Y-14028164D01*
X13785818Y-13828164D02*
X13804865Y-13828164D01*
X13804865Y-13828164D02*
X13823913Y-13837688D01*
X13823913Y-13837688D02*
X13833437Y-13847212D01*
X13833437Y-13847212D02*
X13842960Y-13866260D01*
X13842960Y-13866260D02*
X13852484Y-13904355D01*
X13852484Y-13904355D02*
X13852484Y-13951974D01*
X13852484Y-13951974D02*
X13842960Y-13990069D01*
X13842960Y-13990069D02*
X13833437Y-14009117D01*
X13833437Y-14009117D02*
X13823913Y-14018641D01*
X13823913Y-14018641D02*
X13804865Y-14028164D01*
X13804865Y-14028164D02*
X13785818Y-14028164D01*
X13785818Y-14028164D02*
X13766770Y-14018641D01*
X13766770Y-14018641D02*
X13757246Y-14009117D01*
X13757246Y-14009117D02*
X13747722Y-13990069D01*
X13747722Y-13990069D02*
X13738199Y-13951974D01*
X13738199Y-13951974D02*
X13738199Y-13904355D01*
X13738199Y-13904355D02*
X13747722Y-13866260D01*
X13747722Y-13866260D02*
X13757246Y-13847212D01*
X13757246Y-13847212D02*
X13766770Y-13837688D01*
X13766770Y-13837688D02*
X13785818Y-13828164D01*
X13976294Y-13828164D02*
X13995341Y-13828164D01*
X13995341Y-13828164D02*
X14014389Y-13837688D01*
X14014389Y-13837688D02*
X14023913Y-13847212D01*
X14023913Y-13847212D02*
X14033437Y-13866260D01*
X14033437Y-13866260D02*
X14042960Y-13904355D01*
X14042960Y-13904355D02*
X14042960Y-13951974D01*
X14042960Y-13951974D02*
X14033437Y-13990069D01*
X14033437Y-13990069D02*
X14023913Y-14009117D01*
X14023913Y-14009117D02*
X14014389Y-14018641D01*
X14014389Y-14018641D02*
X13995341Y-14028164D01*
X13995341Y-14028164D02*
X13976294Y-14028164D01*
X13976294Y-14028164D02*
X13957246Y-14018641D01*
X13957246Y-14018641D02*
X13947722Y-14009117D01*
X13947722Y-14009117D02*
X13938199Y-13990069D01*
X13938199Y-13990069D02*
X13928675Y-13951974D01*
X13928675Y-13951974D02*
X13928675Y-13904355D01*
X13928675Y-13904355D02*
X13938199Y-13866260D01*
X13938199Y-13866260D02*
X13947722Y-13847212D01*
X13947722Y-13847212D02*
X13957246Y-13837688D01*
X13957246Y-13837688D02*
X13976294Y-13828164D01*
X14166770Y-13828164D02*
X14185818Y-13828164D01*
X14185818Y-13828164D02*
X14204865Y-13837688D01*
X14204865Y-13837688D02*
X14214389Y-13847212D01*
X14214389Y-13847212D02*
X14223913Y-13866260D01*
X14223913Y-13866260D02*
X14233437Y-13904355D01*
X14233437Y-13904355D02*
X14233437Y-13951974D01*
X14233437Y-13951974D02*
X14223913Y-13990069D01*
X14223913Y-13990069D02*
X14214389Y-14009117D01*
X14214389Y-14009117D02*
X14204865Y-14018641D01*
X14204865Y-14018641D02*
X14185818Y-14028164D01*
X14185818Y-14028164D02*
X14166770Y-14028164D01*
X14166770Y-14028164D02*
X14147722Y-14018641D01*
X14147722Y-14018641D02*
X14138199Y-14009117D01*
X14138199Y-14009117D02*
X14128675Y-13990069D01*
X14128675Y-13990069D02*
X14119151Y-13951974D01*
X14119151Y-13951974D02*
X14119151Y-13904355D01*
X14119151Y-13904355D02*
X14128675Y-13866260D01*
X14128675Y-13866260D02*
X14138199Y-13847212D01*
X14138199Y-13847212D02*
X14147722Y-13837688D01*
X14147722Y-13837688D02*
X14166770Y-13828164D01*
X14319151Y-14028164D02*
X14319151Y-13894831D01*
X14319151Y-13913879D02*
X14328675Y-13904355D01*
X14328675Y-13904355D02*
X14347722Y-13894831D01*
X14347722Y-13894831D02*
X14376294Y-13894831D01*
X14376294Y-13894831D02*
X14395341Y-13904355D01*
X14395341Y-13904355D02*
X14404865Y-13923403D01*
X14404865Y-13923403D02*
X14404865Y-14028164D01*
X14404865Y-13923403D02*
X14414389Y-13904355D01*
X14414389Y-13904355D02*
X14433437Y-13894831D01*
X14433437Y-13894831D02*
X14462008Y-13894831D01*
X14462008Y-13894831D02*
X14481056Y-13904355D01*
X14481056Y-13904355D02*
X14490580Y-13923403D01*
X14490580Y-13923403D02*
X14490580Y-14028164D01*
X14585818Y-14028164D02*
X14585818Y-13894831D01*
X14585818Y-13913879D02*
X14595341Y-13904355D01*
X14595341Y-13904355D02*
X14614389Y-13894831D01*
X14614389Y-13894831D02*
X14642961Y-13894831D01*
X14642961Y-13894831D02*
X14662008Y-13904355D01*
X14662008Y-13904355D02*
X14671532Y-13923403D01*
X14671532Y-13923403D02*
X14671532Y-14028164D01*
X14671532Y-13923403D02*
X14681056Y-13904355D01*
X14681056Y-13904355D02*
X14700103Y-13894831D01*
X14700103Y-13894831D02*
X14728675Y-13894831D01*
X14728675Y-13894831D02*
X14747722Y-13904355D01*
X14747722Y-13904355D02*
X14757246Y-13923403D01*
X14757246Y-13923403D02*
X14757246Y-14028164D01*
X15115341Y-13818641D02*
X14943913Y-14075784D01*
X15340103Y-13828164D02*
X15359151Y-13828164D01*
X15359151Y-13828164D02*
X15378199Y-13837688D01*
X15378199Y-13837688D02*
X15387722Y-13847212D01*
X15387722Y-13847212D02*
X15397246Y-13866260D01*
X15397246Y-13866260D02*
X15406770Y-13904355D01*
X15406770Y-13904355D02*
X15406770Y-13951974D01*
X15406770Y-13951974D02*
X15397246Y-13990069D01*
X15397246Y-13990069D02*
X15387722Y-14009117D01*
X15387722Y-14009117D02*
X15378199Y-14018641D01*
X15378199Y-14018641D02*
X15359151Y-14028164D01*
X15359151Y-14028164D02*
X15340103Y-14028164D01*
X15340103Y-14028164D02*
X15321056Y-14018641D01*
X15321056Y-14018641D02*
X15311532Y-14009117D01*
X15311532Y-14009117D02*
X15302008Y-13990069D01*
X15302008Y-13990069D02*
X15292484Y-13951974D01*
X15292484Y-13951974D02*
X15292484Y-13904355D01*
X15292484Y-13904355D02*
X15302008Y-13866260D01*
X15302008Y-13866260D02*
X15311532Y-13847212D01*
X15311532Y-13847212D02*
X15321056Y-13837688D01*
X15321056Y-13837688D02*
X15340103Y-13828164D01*
X15492484Y-14009117D02*
X15502008Y-14018641D01*
X15502008Y-14018641D02*
X15492484Y-14028164D01*
X15492484Y-14028164D02*
X15482961Y-14018641D01*
X15482961Y-14018641D02*
X15492484Y-14009117D01*
X15492484Y-14009117D02*
X15492484Y-14028164D01*
X15625818Y-13828164D02*
X15644865Y-13828164D01*
X15644865Y-13828164D02*
X15663913Y-13837688D01*
X15663913Y-13837688D02*
X15673437Y-13847212D01*
X15673437Y-13847212D02*
X15682961Y-13866260D01*
X15682961Y-13866260D02*
X15692484Y-13904355D01*
X15692484Y-13904355D02*
X15692484Y-13951974D01*
X15692484Y-13951974D02*
X15682961Y-13990069D01*
X15682961Y-13990069D02*
X15673437Y-14009117D01*
X15673437Y-14009117D02*
X15663913Y-14018641D01*
X15663913Y-14018641D02*
X15644865Y-14028164D01*
X15644865Y-14028164D02*
X15625818Y-14028164D01*
X15625818Y-14028164D02*
X15606770Y-14018641D01*
X15606770Y-14018641D02*
X15597246Y-14009117D01*
X15597246Y-14009117D02*
X15587722Y-13990069D01*
X15587722Y-13990069D02*
X15578199Y-13951974D01*
X15578199Y-13951974D02*
X15578199Y-13904355D01*
X15578199Y-13904355D02*
X15587722Y-13866260D01*
X15587722Y-13866260D02*
X15597246Y-13847212D01*
X15597246Y-13847212D02*
X15606770Y-13837688D01*
X15606770Y-13837688D02*
X15625818Y-13828164D01*
X15759151Y-13828164D02*
X15882961Y-13828164D01*
X15882961Y-13828164D02*
X15816294Y-13904355D01*
X15816294Y-13904355D02*
X15844865Y-13904355D01*
X15844865Y-13904355D02*
X15863913Y-13913879D01*
X15863913Y-13913879D02*
X15873437Y-13923403D01*
X15873437Y-13923403D02*
X15882961Y-13942450D01*
X15882961Y-13942450D02*
X15882961Y-13990069D01*
X15882961Y-13990069D02*
X15873437Y-14009117D01*
X15873437Y-14009117D02*
X15863913Y-14018641D01*
X15863913Y-14018641D02*
X15844865Y-14028164D01*
X15844865Y-14028164D02*
X15787722Y-14028164D01*
X15787722Y-14028164D02*
X15768675Y-14018641D01*
X15768675Y-14018641D02*
X15759151Y-14009117D01*
X15978199Y-14028164D02*
X16016294Y-14028164D01*
X16016294Y-14028164D02*
X16035342Y-14018641D01*
X16035342Y-14018641D02*
X16044865Y-14009117D01*
X16044865Y-14009117D02*
X16063913Y-13980545D01*
X16063913Y-13980545D02*
X16073437Y-13942450D01*
X16073437Y-13942450D02*
X16073437Y-13866260D01*
X16073437Y-13866260D02*
X16063913Y-13847212D01*
X16063913Y-13847212D02*
X16054389Y-13837688D01*
X16054389Y-13837688D02*
X16035342Y-13828164D01*
X16035342Y-13828164D02*
X15997246Y-13828164D01*
X15997246Y-13828164D02*
X15978199Y-13837688D01*
X15978199Y-13837688D02*
X15968675Y-13847212D01*
X15968675Y-13847212D02*
X15959151Y-13866260D01*
X15959151Y-13866260D02*
X15959151Y-13913879D01*
X15959151Y-13913879D02*
X15968675Y-13932926D01*
X15968675Y-13932926D02*
X15978199Y-13942450D01*
X15978199Y-13942450D02*
X15997246Y-13951974D01*
X15997246Y-13951974D02*
X16035342Y-13951974D01*
X16035342Y-13951974D02*
X16054389Y-13942450D01*
X16054389Y-13942450D02*
X16063913Y-13932926D01*
X16063913Y-13932926D02*
X16073437Y-13913879D01*
X16244865Y-13894831D02*
X16244865Y-14028164D01*
X16197246Y-13818641D02*
X16149627Y-13961498D01*
X16149627Y-13961498D02*
X16273437Y-13961498D01*
X16340103Y-13828164D02*
X16340103Y-13866260D01*
X16416294Y-13828164D02*
X16416294Y-13866260D01*
X16679151Y-14104355D02*
X16669627Y-14094831D01*
X16669627Y-14094831D02*
X16650580Y-14066260D01*
X16650580Y-14066260D02*
X16641056Y-14047212D01*
X16641056Y-14047212D02*
X16631532Y-14018641D01*
X16631532Y-14018641D02*
X16622008Y-13971022D01*
X16622008Y-13971022D02*
X16622008Y-13932926D01*
X16622008Y-13932926D02*
X16631532Y-13885307D01*
X16631532Y-13885307D02*
X16641056Y-13856736D01*
X16641056Y-13856736D02*
X16650580Y-13837688D01*
X16650580Y-13837688D02*
X16669627Y-13809117D01*
X16669627Y-13809117D02*
X16679151Y-13799593D01*
X16860104Y-14028164D02*
X16745818Y-14028164D01*
X16802961Y-14028164D02*
X16802961Y-13828164D01*
X16802961Y-13828164D02*
X16783913Y-13856736D01*
X16783913Y-13856736D02*
X16764865Y-13875784D01*
X16764865Y-13875784D02*
X16745818Y-13885307D01*
X16936294Y-13847212D02*
X16945818Y-13837688D01*
X16945818Y-13837688D02*
X16964865Y-13828164D01*
X16964865Y-13828164D02*
X17012485Y-13828164D01*
X17012485Y-13828164D02*
X17031532Y-13837688D01*
X17031532Y-13837688D02*
X17041056Y-13847212D01*
X17041056Y-13847212D02*
X17050580Y-13866260D01*
X17050580Y-13866260D02*
X17050580Y-13885307D01*
X17050580Y-13885307D02*
X17041056Y-13913879D01*
X17041056Y-13913879D02*
X16926770Y-14028164D01*
X16926770Y-14028164D02*
X17050580Y-14028164D01*
X17256294Y-14028164D02*
X17256294Y-13828164D01*
X17342008Y-14028164D02*
X17342008Y-13923403D01*
X17342008Y-13923403D02*
X17332485Y-13904355D01*
X17332485Y-13904355D02*
X17313437Y-13894831D01*
X17313437Y-13894831D02*
X17284865Y-13894831D01*
X17284865Y-13894831D02*
X17265818Y-13904355D01*
X17265818Y-13904355D02*
X17256294Y-13913879D01*
X17465818Y-14028164D02*
X17446770Y-14018641D01*
X17446770Y-14018641D02*
X17437246Y-14009117D01*
X17437246Y-14009117D02*
X17427723Y-13990069D01*
X17427723Y-13990069D02*
X17427723Y-13932926D01*
X17427723Y-13932926D02*
X17437246Y-13913879D01*
X17437246Y-13913879D02*
X17446770Y-13904355D01*
X17446770Y-13904355D02*
X17465818Y-13894831D01*
X17465818Y-13894831D02*
X17494389Y-13894831D01*
X17494389Y-13894831D02*
X17513437Y-13904355D01*
X17513437Y-13904355D02*
X17522961Y-13913879D01*
X17522961Y-13913879D02*
X17532485Y-13932926D01*
X17532485Y-13932926D02*
X17532485Y-13990069D01*
X17532485Y-13990069D02*
X17522961Y-14009117D01*
X17522961Y-14009117D02*
X17513437Y-14018641D01*
X17513437Y-14018641D02*
X17494389Y-14028164D01*
X17494389Y-14028164D02*
X17465818Y-14028164D01*
X17646770Y-14028164D02*
X17627723Y-14018641D01*
X17627723Y-14018641D02*
X17618199Y-13999593D01*
X17618199Y-13999593D02*
X17618199Y-13828164D01*
X17799151Y-14018641D02*
X17780104Y-14028164D01*
X17780104Y-14028164D02*
X17742008Y-14028164D01*
X17742008Y-14028164D02*
X17722961Y-14018641D01*
X17722961Y-14018641D02*
X17713437Y-13999593D01*
X17713437Y-13999593D02*
X17713437Y-13923403D01*
X17713437Y-13923403D02*
X17722961Y-13904355D01*
X17722961Y-13904355D02*
X17742008Y-13894831D01*
X17742008Y-13894831D02*
X17780104Y-13894831D01*
X17780104Y-13894831D02*
X17799151Y-13904355D01*
X17799151Y-13904355D02*
X17808675Y-13923403D01*
X17808675Y-13923403D02*
X17808675Y-13942450D01*
X17808675Y-13942450D02*
X17713437Y-13961498D01*
X17884866Y-14018641D02*
X17903913Y-14028164D01*
X17903913Y-14028164D02*
X17942008Y-14028164D01*
X17942008Y-14028164D02*
X17961056Y-14018641D01*
X17961056Y-14018641D02*
X17970580Y-13999593D01*
X17970580Y-13999593D02*
X17970580Y-13990069D01*
X17970580Y-13990069D02*
X17961056Y-13971022D01*
X17961056Y-13971022D02*
X17942008Y-13961498D01*
X17942008Y-13961498D02*
X17913437Y-13961498D01*
X17913437Y-13961498D02*
X17894389Y-13951974D01*
X17894389Y-13951974D02*
X17884866Y-13932926D01*
X17884866Y-13932926D02*
X17884866Y-13923403D01*
X17884866Y-13923403D02*
X17894389Y-13904355D01*
X17894389Y-13904355D02*
X17913437Y-13894831D01*
X17913437Y-13894831D02*
X17942008Y-13894831D01*
X17942008Y-13894831D02*
X17961056Y-13904355D01*
X18037247Y-14104355D02*
X18046770Y-14094831D01*
X18046770Y-14094831D02*
X18065818Y-14066260D01*
X18065818Y-14066260D02*
X18075342Y-14047212D01*
X18075342Y-14047212D02*
X18084866Y-14018641D01*
X18084866Y-14018641D02*
X18094389Y-13971022D01*
X18094389Y-13971022D02*
X18094389Y-13932926D01*
X18094389Y-13932926D02*
X18084866Y-13885307D01*
X18084866Y-13885307D02*
X18075342Y-13856736D01*
X18075342Y-13856736D02*
X18065818Y-13837688D01*
X18065818Y-13837688D02*
X18046770Y-13809117D01*
X18046770Y-13809117D02*
X18037247Y-13799593D01*
M02*

View file

@ -0,0 +1,28 @@
M48
; DRILL file {KiCad (7.0.0)} date Sat Mar 18 07:41:42 2023
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-18T07:41:42+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(7.0.0)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
METRIC
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C1.000
%
G90
G05
T1
X143.764Y-108.331
X145.034Y-59.563
X147.955Y-78.232
X150.391Y-71.755
X151.638Y-106.934
X153.416Y-59.817
X153.67Y-77.724
X154.822Y-67.828
X158.242Y-56.388
X162.687Y-58.039
X163.322Y-104.013
X163.322Y-109.093
T0
M30

View file

@ -0,0 +1,125 @@
{
"Header": {
"GenerationSoftware": {
"Vendor": "KiCad",
"Application": "Pcbnew",
"Version": "(7.0.0)"
},
"CreationDate": "2023-03-18T07:41:40+03:00"
},
"GeneralSpecs": {
"ProjectId": {
"Name": "StudioMic",
"GUID": "53747564-696f-44d6-9963-2e6b69636164",
"Revision": "1"
},
"Size": {
"X": 40.9989,
"Y": 85.1
},
"LayerNumber": 2,
"BoardThickness": 1.6,
"Finish": "None"
},
"DesignRules": [
{
"Layers": "Outer",
"PadToPad": 0.25,
"PadToTrack": 0.25,
"TrackToTrack": 0.3,
"MinLineWidth": 0.4
}
],
"FilesAttributes": [
{
"Path": "StudioMic-F_Cu.gbr",
"FileFunction": "Copper,L1,Top",
"FilePolarity": "Positive"
},
{
"Path": "StudioMic-B_Cu.gbr",
"FileFunction": "Copper,L2,Bot",
"FilePolarity": "Positive"
},
{
"Path": "StudioMic-F_Paste.gbr",
"FileFunction": "SolderPaste,Top",
"FilePolarity": "Positive"
},
{
"Path": "StudioMic-B_Paste.gbr",
"FileFunction": "SolderPaste,Bot",
"FilePolarity": "Positive"
},
{
"Path": "StudioMic-F_Silkscreen.gbr",
"FileFunction": "Legend,Top",
"FilePolarity": "Positive"
},
{
"Path": "StudioMic-B_Silkscreen.gbr",
"FileFunction": "Legend,Bot",
"FilePolarity": "Positive"
},
{
"Path": "StudioMic-F_Mask.gbr",
"FileFunction": "SolderMask,Top",
"FilePolarity": "Negative"
},
{
"Path": "StudioMic-B_Mask.gbr",
"FileFunction": "SolderMask,Bot",
"FilePolarity": "Negative"
},
{
"Path": "StudioMic-Edge_Cuts.gbr",
"FileFunction": "Profile",
"FilePolarity": "Positive"
}
],
"MaterialStackup": [
{
"Type": "Legend",
"Name": "Top Silk Screen"
},
{
"Type": "SolderPaste",
"Name": "Top Solder Paste"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Top Solder Mask"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "F.Cu"
},
{
"Type": "Dielectric",
"Thickness": 1.51,
"Material": "FR4",
"Name": "F.Cu/B.Cu",
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
},
{
"Type": "Copper",
"Thickness": 0.035,
"Name": "B.Cu"
},
{
"Type": "SolderMask",
"Thickness": 0.01,
"Name": "Bottom Solder Mask"
},
{
"Type": "SolderPaste",
"Name": "Bottom Solder Paste"
},
{
"Type": "Legend",
"Name": "Bottom Silk Screen"
}
]
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="842px" height="596px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="Cutout"><path d="M374.581,139.956c0,-2.063 1.697,-3.76 3.76,-3.76l108.698,-0c2.062,-0 3.759,1.697 3.759,3.76c0,0.001 0,0.003 0,0.005l-9.516,228.948c-0.003,0.076 -0.066,0.136 -0.142,0.136c-0.002,-0 -0.004,-0.001 -0.006,-0.001l-0.254,0.001c-4.52,-0 -8.239,3.718 -8.239,8.238c0,0.078 -0.063,0.141 -0.141,0.141l-79.56,-0.005c-0.078,0 -0.141,-0.063 -0.141,-0.142c-0,-4.519 -3.719,-8.238 -8.239,-8.238l-0.254,0c-0.002,0 -0.004,0 -0.006,0c-0.076,0 -0.139,-0.06 -0.142,-0.135c0,-0.002 -0,-0.004 -0,-0.006l-9.577,-228.937c0,-0.002 0,-0.003 0,-0.005Zm3.76,-3.477c-1.905,0 -3.473,1.566 -3.476,3.471l-0,0.006l9.571,228.8l0.124,-0c4.628,-0 8.444,3.769 8.521,8.38l79.278,0.005c0.077,-4.611 3.893,-8.38 8.52,-8.38c0.002,0 0.125,0 0.125,0l9.511,-228.805l0,-0.006c-0.003,-1.905 -1.571,-3.471 -3.476,-3.471l-108.698,0Z"/><path d="M390.454,149.642c-2.18,0 -3.95,-1.77 -3.95,-3.95c0,-2.18 1.77,-3.95 3.95,-3.95l2.268,0c2.18,0 3.95,1.77 3.95,3.95c0,2.18 -1.77,3.95 -3.95,3.95l-2.268,0Zm0,-0.123l2.268,-0c2.112,-0 3.827,-1.715 3.827,-3.827c-0,-2.112 -1.715,-3.827 -3.827,-3.827l-2.268,0c-2.112,0 -3.826,1.715 -3.826,3.827c-0,2.112 1.714,3.827 3.826,3.827Z"/><path d="M472.659,149.642c-2.18,0 -3.95,-1.77 -3.95,-3.95c0,-2.18 1.77,-3.95 3.95,-3.95l2.268,0c2.18,0 3.95,1.77 3.95,3.95c-0,2.18 -1.77,3.95 -3.95,3.95l-2.268,0Zm0,-0.123l2.268,-0c2.112,-0 3.827,-1.715 3.827,-3.827c-0,-2.112 -1.715,-3.827 -3.827,-3.827l-2.268,0c-2.112,0 -3.827,1.715 -3.827,3.827c0,2.112 1.715,3.827 3.827,3.827Z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 42 KiB

View file

@ -0,0 +1,498 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
<title>SVG Image created as StudioMic-B_Cu.svg date 2023/03/18 07:42:13 </title>
<desc>Image generated by PCBNEW </desc>
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
stroke-linecap:round; stroke-linejoin:round;"
transform="translate(0 0) scale(1 1)">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="158.2420" cy="56.3880" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="162.6870" cy="58.0390" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="150.3915" cy="71.7550" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="151.6380" cy="106.9340" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="143.7640" cy="108.3310" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="153.4160" cy="59.8170" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="154.8225" cy="67.8275" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="163.3220" cy="109.0930" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="153.6700" cy="77.7240" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="163.3220" cy="104.0130" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="147.9550" cy="78.2320" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<circle cx="145.0340" cy="59.5630" r="1.0000" />
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g >
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.0212; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:1.0000;
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M153.6700 68.9800
L154.8225 67.8275
" />
<path d="M153.6700 77.7240
L153.6700 68.9800
" />
<path d="M140.0810 104.6480
L143.7640 108.3310
" />
<path d="M140.0810 58.2930
L140.0810 104.6480
" />
<path d="M150.4950 56.8960
L141.4780 56.8960
" />
<path d="M153.4160 59.8170
L150.4950 56.8960
" />
<path d="M141.4780 56.8960
L140.0810 58.2930
" />
<path d="M150.3915 81.8115
L150.3915 71.7550
" />
<path d="M152.5190 83.9390
L150.3915 81.8115
" />
<path d="M152.5190 106.0530
L152.5190 83.9390
" />
<path d="M151.6380 106.9340
L152.5190 106.0530
" />
<path d="M163.3220 104.0130
L163.3220 109.0930
" />
<path d="M145.5420 78.2320
L147.9550 78.2320
" />
<path d="M142.2400 74.9300
L145.5420 78.2320
" />
<path d="M143.7640 59.5630
L142.2400 61.0870
" />
<path d="M145.0340 59.5630
L143.7640 59.5630
" />
<path d="M142.2400 61.0870
L142.2400 74.9300
" />
<path d="M162.6870 57.7215
L162.6870 58.0390
" />
<path d="M161.3535 56.3880
L162.6870 57.7215
" />
<path d="M158.2420 56.3880
L161.3535 56.3880
" />
</g>
<g >
</g>
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.4000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.1000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M169.6436 130.1407
L169.7356 130.1407
" />
<path d="M138.6206 133.0951 A2.9562 2.9562 0.0 0 0 135.6644 130.1389" />
<path d="M135.6644 130.1389
L135.5724 130.1389
" />
<path d="M173.0928 49.3732 A1.2763 1.2763 0.0 0 0 171.8165 48.0969" />
<path d="M133.4702 48.0969 A1.2763 1.2763 0.0 0 0 132.1939 49.3732" />
<path d="M132.1939 49.3732
L135.5724 130.1389
" />
<path d="M133.4702 48.0969
L171.8165 48.0969
" />
<path d="M173.0928 49.3732
L169.7356 130.1407
" />
<path d="M169.6436 130.1407 A2.9562 2.9562 0.0 0 0 166.6874 133.0969" />
<path d="M138.6206 133.0951
L166.6874 133.0969
" />
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,332 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
<title>SVG Image created as StudioMic-B_Mask.svg date 2023/03/18 07:42:13 </title>
<desc>Image generated by PCBNEW </desc>
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
stroke-linecap:round; stroke-linejoin:round;"
transform="translate(0 0) scale(1 1)">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:2.7000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M137.7436 51.3969
L138.5436 51.3969
" />
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:2.7000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M166.7436 51.3969
L167.5436 51.3969
" />
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:2.7000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.1000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M169.6436 130.1407
L169.7356 130.1407
" />
<path d="M138.6206 133.0951 A2.9562 2.9562 0.0 0 0 135.6644 130.1389" />
<path d="M135.6644 130.1389
L135.5724 130.1389
" />
<path d="M173.0928 49.3732 A1.2763 1.2763 0.0 0 0 171.8165 48.0969" />
<path d="M133.4702 48.0969 A1.2763 1.2763 0.0 0 0 132.1939 49.3732" />
<path d="M132.1939 49.3732
L135.5724 130.1389
" />
<path d="M133.4702 48.0969
L171.8165 48.0969
" />
<path d="M173.0928 49.3732
L169.7356 130.1407
" />
<path d="M169.6436 130.1407 A2.9562 2.9562 0.0 0 0 166.6874 133.0969" />
<path d="M138.6206 133.0951
L166.6874 133.0969
" />
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1,314 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
<title>SVG Image created as StudioMic-B_Paste.svg date 2023/03/18 07:42:13 </title>
<desc>Image generated by PCBNEW </desc>
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
stroke-linecap:round; stroke-linejoin:round;"
transform="translate(0 0) scale(1 1)">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.1000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M169.6436 130.1407
L169.7356 130.1407
" />
<path d="M138.6206 133.0951 A2.9562 2.9562 0.0 0 0 135.6644 130.1389" />
<path d="M135.6644 130.1389
L135.5724 130.1389
" />
<path d="M173.0928 49.3732 A1.2763 1.2763 0.0 0 0 171.8165 48.0969" />
<path d="M133.4702 48.0969 A1.2763 1.2763 0.0 0 0 132.1939 49.3732" />
<path d="M132.1939 49.3732
L135.5724 130.1389
" />
<path d="M133.4702 48.0969
L171.8165 48.0969
" />
<path d="M173.0928 49.3732
L169.7356 130.1407
" />
<path d="M169.6436 130.1407 A2.9562 2.9562 0.0 0 0 166.6874 133.0969" />
<path d="M138.6206 133.0951
L166.6874 133.0969
" />
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,314 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
<title>SVG Image created as StudioMic-B_Silkscreen.svg date 2023/03/18 07:42:13 </title>
<desc>Image generated by PCBNEW </desc>
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
stroke-linecap:round; stroke-linejoin:round;"
transform="translate(0 0) scale(1 1)">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.1000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M169.6436 130.1407
L169.7356 130.1407
" />
<path d="M138.6206 133.0951 A2.9562 2.9562 0.0 0 0 135.6644 130.1389" />
<path d="M135.6644 130.1389
L135.5724 130.1389
" />
<path d="M173.0928 49.3732 A1.2763 1.2763 0.0 0 0 171.8165 48.0969" />
<path d="M133.4702 48.0969 A1.2763 1.2763 0.0 0 0 132.1939 49.3732" />
<path d="M132.1939 49.3732
L135.5724 130.1389
" />
<path d="M133.4702 48.0969
L171.8165 48.0969
" />
<path d="M173.0928 49.3732
L169.7356 130.1407
" />
<path d="M169.6436 130.1407 A2.9562 2.9562 0.0 0 0 166.6874 133.0969" />
<path d="M138.6206 133.0951
L166.6874 133.0969
" />
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,178 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">
<title>SVG Image created as StudioMic-Edge_Cuts.svg date 2023/03/18 07:42:13 </title>
<desc>Image generated by PCBNEW </desc>
<g style="fill:#000000; fill-opacity:1.0000;stroke:#000000; stroke-opacity:1.0000;
stroke-linecap:round; stroke-linejoin:round;"
transform="translate(0 0) scale(1 1)">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.0000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
</g>
<g style="fill:#000000; fill-opacity:0.0;
stroke:#000000; stroke-width:0.1000; stroke-opacity:1;
stroke-linecap:round; stroke-linejoin:round;">
<path d="M169.6436 130.1407
L169.7356 130.1407
" />
<path d="M138.6206 133.0951 A2.9562 2.9562 0.0 0 0 135.6644 130.1389" />
<path d="M135.6644 130.1389
L135.5724 130.1389
" />
<path d="M173.0928 49.3732 A1.2763 1.2763 0.0 0 0 171.8165 48.0969" />
<path d="M133.4702 48.0969 A1.2763 1.2763 0.0 0 0 132.1939 49.3732" />
<path d="M132.1939 49.3732
L135.5724 130.1389
" />
<path d="M133.4702 48.0969
L171.8165 48.0969
" />
<path d="M173.0928 49.3732
L169.7356 130.1407
" />
<path d="M169.6436 130.1407 A2.9562 2.9562 0.0 0 0 166.6874 133.0969" />
<path d="M138.6206 133.0951
L166.6874 133.0969
" />
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
<g >
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 100 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 82 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 143 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -0,0 +1,26 @@
M48
; DRILL file {KiCad (7.0.0)} date Sat Mar 18 07:42:17 2023
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-18T07:42:17+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(7.0.0)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
METRIC
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T1C2.700
%
G90
G05
T1
G00X137.744Y-51.397
M15
G01X138.544Y-51.397
M16
G05
G00X166.744Y-51.397
M15
G01X167.544Y-51.397
M16
G05
T0
M30

View file

@ -0,0 +1,787 @@
%TF.GenerationSoftware,KiCad,Pcbnew,(7.0.0)*%
%TF.CreationDate,2023-03-18T07:42:10+03:00*%
%TF.ProjectId,StudioMic,53747564-696f-44d6-9963-2e6b69636164,1*%
%TF.SameCoordinates,Original*%
%TF.FileFunction,Drillmap*%
%TF.FilePolarity,Positive*%
%FSLAX45Y45*%
G04 Gerber Fmt 4.5, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (7.0.0)) date 2023-03-18 07:42:10*
%MOMM*%
%LPD*%
G01*
G04 APERTURE LIST*
%ADD10C,0.100000*%
%ADD11C,0.200000*%
G04 APERTURE END LIST*
D10*
X16964362Y-13014065D02*
X16973562Y-13014065D01*
X13862062Y-13309511D02*
G75*
G03*
X13566438Y-13013888I-295622J2D01*
G01*
X13566438Y-13013888D02*
X13557238Y-13013888D01*
X17309284Y-4937321D02*
G75*
G03*
X17181650Y-4809688I-127633J0D01*
G01*
X13347022Y-4809688D02*
G75*
G03*
X13219389Y-4937321I0J-127633D01*
G01*
X13219389Y-4937321D02*
X13557238Y-13013888D01*
X13347022Y-4809688D02*
X17181650Y-4809688D01*
X17309284Y-4937321D02*
X16973562Y-13014065D01*
X16964362Y-13014068D02*
G75*
G03*
X16668738Y-13309688I-2J-295622D01*
G01*
X13862061Y-13309511D02*
X16668738Y-13309688D01*
D11*
D10*
X14326400Y-10783100D02*
X14426400Y-10883100D01*
X14426400Y-10783100D02*
X14326400Y-10883100D01*
X14453400Y-5906300D02*
X14553400Y-6006300D01*
X14553400Y-5906300D02*
X14453400Y-6006300D01*
X14745500Y-7773200D02*
X14845500Y-7873200D01*
X14845500Y-7773200D02*
X14745500Y-7873200D01*
X14989150Y-7125500D02*
X15089150Y-7225500D01*
X15089150Y-7125500D02*
X14989150Y-7225500D01*
X15113800Y-10643400D02*
X15213800Y-10743400D01*
X15213800Y-10643400D02*
X15113800Y-10743400D01*
X15291600Y-5931700D02*
X15391600Y-6031700D01*
X15391600Y-5931700D02*
X15291600Y-6031700D01*
X15317000Y-7722400D02*
X15417000Y-7822400D01*
X15417000Y-7722400D02*
X15317000Y-7822400D01*
X15432250Y-6732750D02*
X15532250Y-6832750D01*
X15532250Y-6732750D02*
X15432250Y-6832750D01*
X15774200Y-5588800D02*
X15874200Y-5688800D01*
X15874200Y-5588800D02*
X15774200Y-5688800D01*
X16218700Y-5753900D02*
X16318700Y-5853900D01*
X16318700Y-5753900D02*
X16218700Y-5853900D01*
X16282200Y-10351300D02*
X16382200Y-10451300D01*
X16382200Y-10351300D02*
X16282200Y-10451300D01*
X16282200Y-10859300D02*
X16382200Y-10959300D01*
X16382200Y-10859300D02*
X16282200Y-10959300D01*
D11*
X13462008Y-13608164D02*
X13462008Y-13408164D01*
X13462008Y-13408164D02*
X13509627Y-13408164D01*
X13509627Y-13408164D02*
X13538199Y-13417688D01*
X13538199Y-13417688D02*
X13557246Y-13436736D01*
X13557246Y-13436736D02*
X13566770Y-13455784D01*
X13566770Y-13455784D02*
X13576294Y-13493879D01*
X13576294Y-13493879D02*
X13576294Y-13522450D01*
X13576294Y-13522450D02*
X13566770Y-13560545D01*
X13566770Y-13560545D02*
X13557246Y-13579593D01*
X13557246Y-13579593D02*
X13538199Y-13598641D01*
X13538199Y-13598641D02*
X13509627Y-13608164D01*
X13509627Y-13608164D02*
X13462008Y-13608164D01*
X13662008Y-13608164D02*
X13662008Y-13474831D01*
X13662008Y-13512926D02*
X13671532Y-13493879D01*
X13671532Y-13493879D02*
X13681056Y-13484355D01*
X13681056Y-13484355D02*
X13700103Y-13474831D01*
X13700103Y-13474831D02*
X13719151Y-13474831D01*
X13785818Y-13608164D02*
X13785818Y-13474831D01*
X13785818Y-13408164D02*
X13776294Y-13417688D01*
X13776294Y-13417688D02*
X13785818Y-13427212D01*
X13785818Y-13427212D02*
X13795341Y-13417688D01*
X13795341Y-13417688D02*
X13785818Y-13408164D01*
X13785818Y-13408164D02*
X13785818Y-13427212D01*
X13909627Y-13608164D02*
X13890579Y-13598641D01*
X13890579Y-13598641D02*
X13881056Y-13579593D01*
X13881056Y-13579593D02*
X13881056Y-13408164D01*
X14014389Y-13608164D02*
X13995341Y-13598641D01*
X13995341Y-13598641D02*
X13985818Y-13579593D01*
X13985818Y-13579593D02*
X13985818Y-13408164D01*
X14210579Y-13608164D02*
X14210579Y-13408164D01*
X14210579Y-13408164D02*
X14277246Y-13551022D01*
X14277246Y-13551022D02*
X14343913Y-13408164D01*
X14343913Y-13408164D02*
X14343913Y-13608164D01*
X14524865Y-13608164D02*
X14524865Y-13503403D01*
X14524865Y-13503403D02*
X14515341Y-13484355D01*
X14515341Y-13484355D02*
X14496294Y-13474831D01*
X14496294Y-13474831D02*
X14458198Y-13474831D01*
X14458198Y-13474831D02*
X14439151Y-13484355D01*
X14524865Y-13598641D02*
X14505818Y-13608164D01*
X14505818Y-13608164D02*
X14458198Y-13608164D01*
X14458198Y-13608164D02*
X14439151Y-13598641D01*
X14439151Y-13598641D02*
X14429627Y-13579593D01*
X14429627Y-13579593D02*
X14429627Y-13560545D01*
X14429627Y-13560545D02*
X14439151Y-13541498D01*
X14439151Y-13541498D02*
X14458198Y-13531974D01*
X14458198Y-13531974D02*
X14505818Y-13531974D01*
X14505818Y-13531974D02*
X14524865Y-13522450D01*
X14620103Y-13474831D02*
X14620103Y-13674831D01*
X14620103Y-13484355D02*
X14639151Y-13474831D01*
X14639151Y-13474831D02*
X14677246Y-13474831D01*
X14677246Y-13474831D02*
X14696294Y-13484355D01*
X14696294Y-13484355D02*
X14705818Y-13493879D01*
X14705818Y-13493879D02*
X14715341Y-13512926D01*
X14715341Y-13512926D02*
X14715341Y-13570069D01*
X14715341Y-13570069D02*
X14705818Y-13589117D01*
X14705818Y-13589117D02*
X14696294Y-13598641D01*
X14696294Y-13598641D02*
X14677246Y-13608164D01*
X14677246Y-13608164D02*
X14639151Y-13608164D01*
X14639151Y-13608164D02*
X14620103Y-13598641D01*
X14801056Y-13589117D02*
X14810579Y-13598641D01*
X14810579Y-13598641D02*
X14801056Y-13608164D01*
X14801056Y-13608164D02*
X14791532Y-13598641D01*
X14791532Y-13598641D02*
X14801056Y-13589117D01*
X14801056Y-13589117D02*
X14801056Y-13608164D01*
X14801056Y-13484355D02*
X14810579Y-13493879D01*
X14810579Y-13493879D02*
X14801056Y-13503403D01*
X14801056Y-13503403D02*
X14791532Y-13493879D01*
X14791532Y-13493879D02*
X14801056Y-13484355D01*
X14801056Y-13484355D02*
X14801056Y-13503403D01*
D10*
X13114389Y-13904688D02*
X13214389Y-14004688D01*
X13214389Y-13904688D02*
X13114389Y-14004688D01*
D11*
X13566770Y-14028164D02*
X13452484Y-14028164D01*
X13509627Y-14028164D02*
X13509627Y-13828164D01*
X13509627Y-13828164D02*
X13490579Y-13856736D01*
X13490579Y-13856736D02*
X13471532Y-13875784D01*
X13471532Y-13875784D02*
X13452484Y-13885307D01*
X13652484Y-14009117D02*
X13662008Y-14018641D01*
X13662008Y-14018641D02*
X13652484Y-14028164D01*
X13652484Y-14028164D02*
X13642960Y-14018641D01*
X13642960Y-14018641D02*
X13652484Y-14009117D01*
X13652484Y-14009117D02*
X13652484Y-14028164D01*
X13785818Y-13828164D02*
X13804865Y-13828164D01*
X13804865Y-13828164D02*
X13823913Y-13837688D01*
X13823913Y-13837688D02*
X13833437Y-13847212D01*
X13833437Y-13847212D02*
X13842960Y-13866260D01*
X13842960Y-13866260D02*
X13852484Y-13904355D01*
X13852484Y-13904355D02*
X13852484Y-13951974D01*
X13852484Y-13951974D02*
X13842960Y-13990069D01*
X13842960Y-13990069D02*
X13833437Y-14009117D01*
X13833437Y-14009117D02*
X13823913Y-14018641D01*
X13823913Y-14018641D02*
X13804865Y-14028164D01*
X13804865Y-14028164D02*
X13785818Y-14028164D01*
X13785818Y-14028164D02*
X13766770Y-14018641D01*
X13766770Y-14018641D02*
X13757246Y-14009117D01*
X13757246Y-14009117D02*
X13747722Y-13990069D01*
X13747722Y-13990069D02*
X13738199Y-13951974D01*
X13738199Y-13951974D02*
X13738199Y-13904355D01*
X13738199Y-13904355D02*
X13747722Y-13866260D01*
X13747722Y-13866260D02*
X13757246Y-13847212D01*
X13757246Y-13847212D02*
X13766770Y-13837688D01*
X13766770Y-13837688D02*
X13785818Y-13828164D01*
X13976294Y-13828164D02*
X13995341Y-13828164D01*
X13995341Y-13828164D02*
X14014389Y-13837688D01*
X14014389Y-13837688D02*
X14023913Y-13847212D01*
X14023913Y-13847212D02*
X14033437Y-13866260D01*
X14033437Y-13866260D02*
X14042960Y-13904355D01*
X14042960Y-13904355D02*
X14042960Y-13951974D01*
X14042960Y-13951974D02*
X14033437Y-13990069D01*
X14033437Y-13990069D02*
X14023913Y-14009117D01*
X14023913Y-14009117D02*
X14014389Y-14018641D01*
X14014389Y-14018641D02*
X13995341Y-14028164D01*
X13995341Y-14028164D02*
X13976294Y-14028164D01*
X13976294Y-14028164D02*
X13957246Y-14018641D01*
X13957246Y-14018641D02*
X13947722Y-14009117D01*
X13947722Y-14009117D02*
X13938199Y-13990069D01*
X13938199Y-13990069D02*
X13928675Y-13951974D01*
X13928675Y-13951974D02*
X13928675Y-13904355D01*
X13928675Y-13904355D02*
X13938199Y-13866260D01*
X13938199Y-13866260D02*
X13947722Y-13847212D01*
X13947722Y-13847212D02*
X13957246Y-13837688D01*
X13957246Y-13837688D02*
X13976294Y-13828164D01*
X14166770Y-13828164D02*
X14185818Y-13828164D01*
X14185818Y-13828164D02*
X14204865Y-13837688D01*
X14204865Y-13837688D02*
X14214389Y-13847212D01*
X14214389Y-13847212D02*
X14223913Y-13866260D01*
X14223913Y-13866260D02*
X14233437Y-13904355D01*
X14233437Y-13904355D02*
X14233437Y-13951974D01*
X14233437Y-13951974D02*
X14223913Y-13990069D01*
X14223913Y-13990069D02*
X14214389Y-14009117D01*
X14214389Y-14009117D02*
X14204865Y-14018641D01*
X14204865Y-14018641D02*
X14185818Y-14028164D01*
X14185818Y-14028164D02*
X14166770Y-14028164D01*
X14166770Y-14028164D02*
X14147722Y-14018641D01*
X14147722Y-14018641D02*
X14138199Y-14009117D01*
X14138199Y-14009117D02*
X14128675Y-13990069D01*
X14128675Y-13990069D02*
X14119151Y-13951974D01*
X14119151Y-13951974D02*
X14119151Y-13904355D01*
X14119151Y-13904355D02*
X14128675Y-13866260D01*
X14128675Y-13866260D02*
X14138199Y-13847212D01*
X14138199Y-13847212D02*
X14147722Y-13837688D01*
X14147722Y-13837688D02*
X14166770Y-13828164D01*
X14319151Y-14028164D02*
X14319151Y-13894831D01*
X14319151Y-13913879D02*
X14328675Y-13904355D01*
X14328675Y-13904355D02*
X14347722Y-13894831D01*
X14347722Y-13894831D02*
X14376294Y-13894831D01*
X14376294Y-13894831D02*
X14395341Y-13904355D01*
X14395341Y-13904355D02*
X14404865Y-13923403D01*
X14404865Y-13923403D02*
X14404865Y-14028164D01*
X14404865Y-13923403D02*
X14414389Y-13904355D01*
X14414389Y-13904355D02*
X14433437Y-13894831D01*
X14433437Y-13894831D02*
X14462008Y-13894831D01*
X14462008Y-13894831D02*
X14481056Y-13904355D01*
X14481056Y-13904355D02*
X14490580Y-13923403D01*
X14490580Y-13923403D02*
X14490580Y-14028164D01*
X14585818Y-14028164D02*
X14585818Y-13894831D01*
X14585818Y-13913879D02*
X14595341Y-13904355D01*
X14595341Y-13904355D02*
X14614389Y-13894831D01*
X14614389Y-13894831D02*
X14642961Y-13894831D01*
X14642961Y-13894831D02*
X14662008Y-13904355D01*
X14662008Y-13904355D02*
X14671532Y-13923403D01*
X14671532Y-13923403D02*
X14671532Y-14028164D01*
X14671532Y-13923403D02*
X14681056Y-13904355D01*
X14681056Y-13904355D02*
X14700103Y-13894831D01*
X14700103Y-13894831D02*
X14728675Y-13894831D01*
X14728675Y-13894831D02*
X14747722Y-13904355D01*
X14747722Y-13904355D02*
X14757246Y-13923403D01*
X14757246Y-13923403D02*
X14757246Y-14028164D01*
X15115341Y-13818641D02*
X14943913Y-14075784D01*
X15340103Y-13828164D02*
X15359151Y-13828164D01*
X15359151Y-13828164D02*
X15378199Y-13837688D01*
X15378199Y-13837688D02*
X15387722Y-13847212D01*
X15387722Y-13847212D02*
X15397246Y-13866260D01*
X15397246Y-13866260D02*
X15406770Y-13904355D01*
X15406770Y-13904355D02*
X15406770Y-13951974D01*
X15406770Y-13951974D02*
X15397246Y-13990069D01*
X15397246Y-13990069D02*
X15387722Y-14009117D01*
X15387722Y-14009117D02*
X15378199Y-14018641D01*
X15378199Y-14018641D02*
X15359151Y-14028164D01*
X15359151Y-14028164D02*
X15340103Y-14028164D01*
X15340103Y-14028164D02*
X15321056Y-14018641D01*
X15321056Y-14018641D02*
X15311532Y-14009117D01*
X15311532Y-14009117D02*
X15302008Y-13990069D01*
X15302008Y-13990069D02*
X15292484Y-13951974D01*
X15292484Y-13951974D02*
X15292484Y-13904355D01*
X15292484Y-13904355D02*
X15302008Y-13866260D01*
X15302008Y-13866260D02*
X15311532Y-13847212D01*
X15311532Y-13847212D02*
X15321056Y-13837688D01*
X15321056Y-13837688D02*
X15340103Y-13828164D01*
X15492484Y-14009117D02*
X15502008Y-14018641D01*
X15502008Y-14018641D02*
X15492484Y-14028164D01*
X15492484Y-14028164D02*
X15482961Y-14018641D01*
X15482961Y-14018641D02*
X15492484Y-14009117D01*
X15492484Y-14009117D02*
X15492484Y-14028164D01*
X15625818Y-13828164D02*
X15644865Y-13828164D01*
X15644865Y-13828164D02*
X15663913Y-13837688D01*
X15663913Y-13837688D02*
X15673437Y-13847212D01*
X15673437Y-13847212D02*
X15682961Y-13866260D01*
X15682961Y-13866260D02*
X15692484Y-13904355D01*
X15692484Y-13904355D02*
X15692484Y-13951974D01*
X15692484Y-13951974D02*
X15682961Y-13990069D01*
X15682961Y-13990069D02*
X15673437Y-14009117D01*
X15673437Y-14009117D02*
X15663913Y-14018641D01*
X15663913Y-14018641D02*
X15644865Y-14028164D01*
X15644865Y-14028164D02*
X15625818Y-14028164D01*
X15625818Y-14028164D02*
X15606770Y-14018641D01*
X15606770Y-14018641D02*
X15597246Y-14009117D01*
X15597246Y-14009117D02*
X15587722Y-13990069D01*
X15587722Y-13990069D02*
X15578199Y-13951974D01*
X15578199Y-13951974D02*
X15578199Y-13904355D01*
X15578199Y-13904355D02*
X15587722Y-13866260D01*
X15587722Y-13866260D02*
X15597246Y-13847212D01*
X15597246Y-13847212D02*
X15606770Y-13837688D01*
X15606770Y-13837688D02*
X15625818Y-13828164D01*
X15759151Y-13828164D02*
X15882961Y-13828164D01*
X15882961Y-13828164D02*
X15816294Y-13904355D01*
X15816294Y-13904355D02*
X15844865Y-13904355D01*
X15844865Y-13904355D02*
X15863913Y-13913879D01*
X15863913Y-13913879D02*
X15873437Y-13923403D01*
X15873437Y-13923403D02*
X15882961Y-13942450D01*
X15882961Y-13942450D02*
X15882961Y-13990069D01*
X15882961Y-13990069D02*
X15873437Y-14009117D01*
X15873437Y-14009117D02*
X15863913Y-14018641D01*
X15863913Y-14018641D02*
X15844865Y-14028164D01*
X15844865Y-14028164D02*
X15787722Y-14028164D01*
X15787722Y-14028164D02*
X15768675Y-14018641D01*
X15768675Y-14018641D02*
X15759151Y-14009117D01*
X15978199Y-14028164D02*
X16016294Y-14028164D01*
X16016294Y-14028164D02*
X16035342Y-14018641D01*
X16035342Y-14018641D02*
X16044865Y-14009117D01*
X16044865Y-14009117D02*
X16063913Y-13980545D01*
X16063913Y-13980545D02*
X16073437Y-13942450D01*
X16073437Y-13942450D02*
X16073437Y-13866260D01*
X16073437Y-13866260D02*
X16063913Y-13847212D01*
X16063913Y-13847212D02*
X16054389Y-13837688D01*
X16054389Y-13837688D02*
X16035342Y-13828164D01*
X16035342Y-13828164D02*
X15997246Y-13828164D01*
X15997246Y-13828164D02*
X15978199Y-13837688D01*
X15978199Y-13837688D02*
X15968675Y-13847212D01*
X15968675Y-13847212D02*
X15959151Y-13866260D01*
X15959151Y-13866260D02*
X15959151Y-13913879D01*
X15959151Y-13913879D02*
X15968675Y-13932926D01*
X15968675Y-13932926D02*
X15978199Y-13942450D01*
X15978199Y-13942450D02*
X15997246Y-13951974D01*
X15997246Y-13951974D02*
X16035342Y-13951974D01*
X16035342Y-13951974D02*
X16054389Y-13942450D01*
X16054389Y-13942450D02*
X16063913Y-13932926D01*
X16063913Y-13932926D02*
X16073437Y-13913879D01*
X16244865Y-13894831D02*
X16244865Y-14028164D01*
X16197246Y-13818641D02*
X16149627Y-13961498D01*
X16149627Y-13961498D02*
X16273437Y-13961498D01*
X16340103Y-13828164D02*
X16340103Y-13866260D01*
X16416294Y-13828164D02*
X16416294Y-13866260D01*
X16679151Y-14104355D02*
X16669627Y-14094831D01*
X16669627Y-14094831D02*
X16650580Y-14066260D01*
X16650580Y-14066260D02*
X16641056Y-14047212D01*
X16641056Y-14047212D02*
X16631532Y-14018641D01*
X16631532Y-14018641D02*
X16622008Y-13971022D01*
X16622008Y-13971022D02*
X16622008Y-13932926D01*
X16622008Y-13932926D02*
X16631532Y-13885307D01*
X16631532Y-13885307D02*
X16641056Y-13856736D01*
X16641056Y-13856736D02*
X16650580Y-13837688D01*
X16650580Y-13837688D02*
X16669627Y-13809117D01*
X16669627Y-13809117D02*
X16679151Y-13799593D01*
X16860104Y-14028164D02*
X16745818Y-14028164D01*
X16802961Y-14028164D02*
X16802961Y-13828164D01*
X16802961Y-13828164D02*
X16783913Y-13856736D01*
X16783913Y-13856736D02*
X16764865Y-13875784D01*
X16764865Y-13875784D02*
X16745818Y-13885307D01*
X16936294Y-13847212D02*
X16945818Y-13837688D01*
X16945818Y-13837688D02*
X16964865Y-13828164D01*
X16964865Y-13828164D02*
X17012485Y-13828164D01*
X17012485Y-13828164D02*
X17031532Y-13837688D01*
X17031532Y-13837688D02*
X17041056Y-13847212D01*
X17041056Y-13847212D02*
X17050580Y-13866260D01*
X17050580Y-13866260D02*
X17050580Y-13885307D01*
X17050580Y-13885307D02*
X17041056Y-13913879D01*
X17041056Y-13913879D02*
X16926770Y-14028164D01*
X16926770Y-14028164D02*
X17050580Y-14028164D01*
X17256294Y-14028164D02*
X17256294Y-13828164D01*
X17342008Y-14028164D02*
X17342008Y-13923403D01*
X17342008Y-13923403D02*
X17332485Y-13904355D01*
X17332485Y-13904355D02*
X17313437Y-13894831D01*
X17313437Y-13894831D02*
X17284865Y-13894831D01*
X17284865Y-13894831D02*
X17265818Y-13904355D01*
X17265818Y-13904355D02*
X17256294Y-13913879D01*
X17465818Y-14028164D02*
X17446770Y-14018641D01*
X17446770Y-14018641D02*
X17437246Y-14009117D01*
X17437246Y-14009117D02*
X17427723Y-13990069D01*
X17427723Y-13990069D02*
X17427723Y-13932926D01*
X17427723Y-13932926D02*
X17437246Y-13913879D01*
X17437246Y-13913879D02*
X17446770Y-13904355D01*
X17446770Y-13904355D02*
X17465818Y-13894831D01*
X17465818Y-13894831D02*
X17494389Y-13894831D01*
X17494389Y-13894831D02*
X17513437Y-13904355D01*
X17513437Y-13904355D02*
X17522961Y-13913879D01*
X17522961Y-13913879D02*
X17532485Y-13932926D01*
X17532485Y-13932926D02*
X17532485Y-13990069D01*
X17532485Y-13990069D02*
X17522961Y-14009117D01*
X17522961Y-14009117D02*
X17513437Y-14018641D01*
X17513437Y-14018641D02*
X17494389Y-14028164D01*
X17494389Y-14028164D02*
X17465818Y-14028164D01*
X17646770Y-14028164D02*
X17627723Y-14018641D01*
X17627723Y-14018641D02*
X17618199Y-13999593D01*
X17618199Y-13999593D02*
X17618199Y-13828164D01*
X17799151Y-14018641D02*
X17780104Y-14028164D01*
X17780104Y-14028164D02*
X17742008Y-14028164D01*
X17742008Y-14028164D02*
X17722961Y-14018641D01*
X17722961Y-14018641D02*
X17713437Y-13999593D01*
X17713437Y-13999593D02*
X17713437Y-13923403D01*
X17713437Y-13923403D02*
X17722961Y-13904355D01*
X17722961Y-13904355D02*
X17742008Y-13894831D01*
X17742008Y-13894831D02*
X17780104Y-13894831D01*
X17780104Y-13894831D02*
X17799151Y-13904355D01*
X17799151Y-13904355D02*
X17808675Y-13923403D01*
X17808675Y-13923403D02*
X17808675Y-13942450D01*
X17808675Y-13942450D02*
X17713437Y-13961498D01*
X17884866Y-14018641D02*
X17903913Y-14028164D01*
X17903913Y-14028164D02*
X17942008Y-14028164D01*
X17942008Y-14028164D02*
X17961056Y-14018641D01*
X17961056Y-14018641D02*
X17970580Y-13999593D01*
X17970580Y-13999593D02*
X17970580Y-13990069D01*
X17970580Y-13990069D02*
X17961056Y-13971022D01*
X17961056Y-13971022D02*
X17942008Y-13961498D01*
X17942008Y-13961498D02*
X17913437Y-13961498D01*
X17913437Y-13961498D02*
X17894389Y-13951974D01*
X17894389Y-13951974D02*
X17884866Y-13932926D01*
X17884866Y-13932926D02*
X17884866Y-13923403D01*
X17884866Y-13923403D02*
X17894389Y-13904355D01*
X17894389Y-13904355D02*
X17913437Y-13894831D01*
X17913437Y-13894831D02*
X17942008Y-13894831D01*
X17942008Y-13894831D02*
X17961056Y-13904355D01*
X18037247Y-14104355D02*
X18046770Y-14094831D01*
X18046770Y-14094831D02*
X18065818Y-14066260D01*
X18065818Y-14066260D02*
X18075342Y-14047212D01*
X18075342Y-14047212D02*
X18084866Y-14018641D01*
X18084866Y-14018641D02*
X18094389Y-13971022D01*
X18094389Y-13971022D02*
X18094389Y-13932926D01*
X18094389Y-13932926D02*
X18084866Y-13885307D01*
X18084866Y-13885307D02*
X18075342Y-13856736D01*
X18075342Y-13856736D02*
X18065818Y-13837688D01*
X18065818Y-13837688D02*
X18046770Y-13809117D01*
X18046770Y-13809117D02*
X18037247Y-13799593D01*
M02*

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -0,0 +1,28 @@
M48
; DRILL file {KiCad (7.0.0)} date Sat Mar 18 07:42:17 2023
; FORMAT={-:-/ absolute / metric / decimal}
; #@! TF.CreationDate,2023-03-18T07:42:17+03:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(7.0.0)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
METRIC
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C1.000
%
G90
G05
T1
X143.764Y-108.331
X145.034Y-59.563
X147.955Y-78.232
X150.391Y-71.755
X151.638Y-106.934
X153.416Y-59.817
X153.67Y-77.724
X154.822Y-67.828
X158.242Y-56.388
X162.687Y-58.039
X163.322Y-104.013
X163.322Y-109.093
T0
M30

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,76 @@
{
"board": {
"active_layer": 44,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "ffdffff_ffffffff",
"zone_display_mode": 0
},
"meta": {
"filename": "StudioMic.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,490 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 3.5,
"height": 2.7,
"width": 3.5
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "ignore",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0
],
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
}
],
"zones_allow_external_fillets": false
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "error",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "StudioMic.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.3,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.4,
"via_diameter": 1.0,
"via_drill": 0.5,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "StudioMic.step",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"91bc7b18-b29c-4e7b-9217-215188e7e972",
""
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

View file

@ -0,0 +1,413 @@
# Spec technique — AudioGridder intégré Veza
> Traitement VST distant pour artistes avec machines faibles : utiliser les serveurs Talas comme ferme de plugins.
> Feature premium (V2+), module "Personal".
> Dernière mise à jour : avril 2026.
---
## 1. Qu'est-ce qu'AudioGridder
[AudioGridder](https://audiogridder.com/) est un logiciel open-source (MIT) qui permet de **déporter le traitement de plugins audio** (VST/AU) sur une machine distante via le réseau.
```
┌────────────────────┐ ┌─────────────────────────┐
│ DAW local │ réseau │ Serveur AudioGridder │
│ (laptop faible) │──────────▶│ (machine puissante) │
│ │ audio │ │
│ Plugin AG client │◀──────────│ Plugins VST chargés │
│ (= proxy VST) │ processed│ (Fabfilter, Valhalla…) │
└────────────────────┘ └─────────────────────────┘
```
**Pourquoi c'est pertinent pour Veza** : les artistes indépendants ont souvent un seul laptop qui rame sous 20 pistes avec des plugins lourds. Talas a 2× Dell R720 avec 768 GB RAM et 64 cœurs — de la puissance inutilisée.
---
## 2. Vision Veza
### 2.1 Concept
Veza propose aux artistes de **connecter leur DAW** à un serveur AudioGridder hébergé par Talas, pour traiter leurs plugins à distance.
**Ce que ça change** : un beatmaker avec un laptop à 500€ peut utiliser des chaînes de mix lourdes (20 instances de FabFilter, Valhalla, etc.) sans latence perceptible — parce que le traitement tourne sur les R720.
### 2.2 Modèle (premium V2)
- Feature **payante** (abonnement mensuel) — pas gratuit (coût serveur non-nul)
- Chaque artiste obtient un **slot dédié** (CPU + RAM réservés)
- Les plugins "maison" (open-source / gratuits) sont **pré-installés** sur le serveur
- Les plugins commerciaux → l'artiste doit avoir sa propre licence (Talas ne distribue pas de plugins)
### 2.3 Ce que c'est VS ce que c'est pas
| C'est | C'est pas |
|-------|-----------|
| Un serveur de calcul pour tes plugins | Un cloud gaming audio |
| Un complément à ton DAW local | Un remplacement de ton DAW |
| Un outil pour les machines faibles | Un service de mastering |
| Un hébergement de traitements | Une distribution de plugins piratés |
---
## 3. Architecture Veza + AudioGridder
### 3.1 Infrastructure
```
┌───────────────────────────────────────────────────────────────┐
│ Dell R720 "compute" │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌───────────────┐ │
│ │ AG Instance #1 │ │ AG Instance #2 │ │ AG Instance N │ │
│ │ User: artiste_a │ │ User: artiste_b │ │ User: ... │ │
│ │ 4 CPU · 16 GB │ │ 4 CPU · 16 GB │ │ │ │
│ │ Plugins chargés │ │ Plugins chargés │ │ │ │
│ └─────────────────┘ └─────────────────┘ └───────────────┘ │
│ │
│ Docker containers (isolation par user) │
└───────────────────────────────────────────────────────────────┘
↕ WireGuard VPN
↕ (audio stream chiffré)
┌──────────────────────┐
│ Laptop artiste │
│ DAW + AG Client │
│ (plugin proxy VST) │
└──────────────────────┘
```
### 3.2 Isolation par container Docker
Chaque user = un container Docker AudioGridder dédié :
- **CPU** : limité (4 cœurs par slot)
- **RAM** : limité (16 GB par slot)
- **Réseau** : uniquement port AG + WireGuard
- **Stockage** : volume isolé pour presets/config
**Pourquoi Docker** : isolation, reproductibilité, scaling.
### 3.3 Connexion réseau
**Problème** : AudioGridder envoie de l'audio brut sur le réseau. Ça doit être :
1. **Chiffré** (audio brut = contenu sensible de l'artiste)
2. **Basse latence** (sinon inutilisable)
**Solution** : tunnel **WireGuard** entre le laptop de l'artiste et le serveur Talas.
- Chaque artiste reçoit un profil WireGuard personnel (clé publique/privée)
- Le container AG est accessible uniquement via l'IP WireGuard du user
- Latence additionnelle WireGuard : < 1ms (même réseau EU)
### 3.4 Latence attendue
| Distance réseau | Latence aller-retour | Buffer audio | Utilisable ? |
|----------------|---------------------|-------------|-------------|
| Même ville | 2-5 ms | 64 samples | Oui |
| Même pays (FR) | 5-15 ms | 128 samples | Oui |
| EU voisin (DE, NL) | 15-30 ms | 256 samples | Limite |
| Intercontinental | 50-150 ms | Non | Non |
**Cible V1** : utilisable en France métropolitaine et pays voisins.
---
## 4. Gestion des plugins
### 4.1 Plugins pré-installés (gratuits/open-source)
Talas pré-installe sur les serveurs AG :
| Plugin | Type | Licence |
|--------|------|---------|
| Vital | Synthé | GPL |
| Surge | Synthé | GPL |
| Dexed | Synthé FM | GPL |
| OB-Xd | Synthé analogique | GPL |
| TAL-NoiseMaker | Synthé | Freeware |
| Odin 2 | Synthé | GPL |
| DrumGizmo | Batterie | GPL |
| LSP Plugins | EQ, comp, gate, delay | GPL |
| Airwindows | Effets divers | MIT |
| MFreeFXBundle | EQ, comp, saturation | Freeware |
| Dragonfly Reverb | Reverb | GPL |
| Valhalla Supermassive | Reverb | Freeware |
| TDR Nova | EQ dynamique | Freeware |
| Analog Obsession suite | Channel strips | Freeware |
**Suite de base solide** couvrant synthé, EQ, comp, reverb, delay, saturation.
### 4.2 Plugins commerciaux (licence user)
L'artiste possède sa propre licence → il peut demander l'installation sur son container.
**Workflow** :
1. L'artiste ouvre un ticket "Demande d'installation plugin"
2. Fournit sa clé de licence ou son compte
3. L'admin (toi) installe le plugin dans le container du user
4. Le plugin est accessible uniquement dans SON container
**Restrictions** :
- Talas n'achète PAS de licences pour les users
- Un plugin installé sur le container A ne peut PAS être accédé par le container B
- Si l'artiste résilie, ses plugins commerciaux sont désinstallés (données presets exportées)
### 4.3 Plugins interdits
- Plugins crackés
- Plugins avec DRM "cloud" incompatible (iLok cloud, Pace)
- Plugins nécessitant un dongle physique (iLok USB) — impossible sur serveur distant
---
## 5. Modèle de données Veza
### 5.1 Table `ag_subscriptions`
```sql
CREATE TABLE ag_subscriptions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
plan VARCHAR(30) NOT NULL,
-- 'starter', 'pro'
status VARCHAR(20) NOT NULL DEFAULT 'pending',
-- 'pending', 'active', 'suspended', 'cancelled'
-- ressources allouées
cpu_cores INT NOT NULL DEFAULT 4,
ram_gb INT NOT NULL DEFAULT 16,
-- container
container_id VARCHAR(100), -- Docker container ID
wireguard_ip INET,
wireguard_pubkey VARCHAR(100),
activated_at TIMESTAMPTZ,
suspended_at TIMESTAMPTZ,
cancelled_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE UNIQUE INDEX idx_ag_subscriptions_user ON ag_subscriptions(user_id) WHERE status IN ('active', 'pending');
```
### 5.2 Table `ag_installed_plugins`
```sql
CREATE TABLE ag_installed_plugins (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
subscription_id UUID NOT NULL REFERENCES ag_subscriptions(id) ON DELETE CASCADE,
plugin_name VARCHAR(200) NOT NULL,
plugin_vendor VARCHAR(100) NOT NULL,
plugin_type VARCHAR(20) NOT NULL, -- 'vst3', 'vst2', 'au', 'clap'
license_type VARCHAR(20) NOT NULL, -- 'preinstalled', 'user_owned'
installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
removed_at TIMESTAMPTZ
);
```
### 5.3 Table `ag_usage_logs`
```sql
CREATE TABLE ag_usage_logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
subscription_id UUID NOT NULL REFERENCES ag_subscriptions(id),
session_start TIMESTAMPTZ NOT NULL,
session_end TIMESTAMPTZ,
peak_cpu_percent NUMERIC(5,2),
peak_ram_mb INT,
avg_latency_ms NUMERIC(6,2),
plugins_loaded INT
);
CREATE INDEX idx_ag_usage_logs_sub ON ag_usage_logs(subscription_id, session_start DESC);
```
---
## 6. API Endpoints
Base : `/api/v1/audiogridder`
| Méthode | Route | Auth | Description |
|---------|-------|------|-------------|
| GET | `/status` | 🔒 | Mon abonnement AG + status container |
| POST | `/subscribe` | 🔒 | Souscrire un plan AG |
| POST | `/cancel` | 🔒 | Résilier |
| GET | `/connection` | 🔒 | Config WireGuard + IP du container |
| GET | `/plugins` | 🔒 | Liste plugins installés sur mon container |
| POST | `/plugins/request` | 🔒 | Demander installation plugin |
| GET | `/usage` | 🔒 | Historique d'usage |
| POST | `/admin/provision` | 🔒👑 | Provisionner container (admin) |
| POST | `/admin/plugins/install` | 🔒👑 | Installer plugin (admin) |
| POST | `/admin/suspend` | 🔒👑 | Suspendre un container |
---
## 7. Provisioning d'un container
### 7.1 Flow d'activation
```
[1] POST /audiogridder/subscribe { plan: 'starter' }
→ Backend:
- Vérifie user a un abonnement actif (ou paiement ponctuel)
- INSERT ag_subscriptions (status='pending')
- Notifie admin (toi) : "Nouvel abonnement AG à provisionner"
[2] Admin : POST /admin/provision { subscription_id }
→ Backend:
- docker run --name ag_<user_id> --cpus=4 --memory=16g ...
- Génère paire WireGuard (clé privée user → envoyée par email chiffré)
- Configure firewall (uniquement port AG + WG depuis l'IP WG du user)
- UPDATE ag_subscriptions SET status='active', container_id=..., wireguard_ip=...
- Email à l'artiste avec instructions de connexion
[3] Artiste :
- Installe WireGuard + importe le profil
- Configure AudioGridder client dans son DAW
- Pointe vers l'IP WireGuard du container
```
### 7.2 V1 : provisioning semi-manuel
En V1, c'est **toi qui provisionnes** les containers (Ansible playbook).
Le flow n'est pas 100% automatique — et c'est OK pour les 10-50 premiers users.
### 7.3 V2 : provisioning automatique
Ansible playbook déclenché automatiquement par le backend sur subscribe.
Avec un pool de containers pré-créés "warm" pour démarrage instantané.
---
## 8. Plans et pricing
### 8.1 Plans V2
| Plan | CPU | RAM | Plugins pré-installés | Prix (HT/mois) |
|------|-----|-----|----------------------|-----------------|
| `starter` | 4 cœurs | 16 GB | Tous gratuits | 9 € |
| `pro` | 8 cœurs | 32 GB | Tous gratuits + support plugins perso | 19 € |
### 8.2 Ce que le prix couvre
- Hébergement du container 24/7
- Bande passante audio illimitée
- Mise à jour des plugins pré-installés
- Support technique pour la config
### 8.3 Coût infra réel (estimation)
Avec les R720 (768 GB RAM total, 64 cœurs total) :
- Slots `starter` possibles : ~40 simultanés (pas tous actifs en même temps)
- Slots `pro` possibles : ~20 simultanés
- Coût marginal par slot : électricité (~2-3 €/mois)
- Marge : ~6-7 €/slot/mois
---
## 9. Risques et limites
### 9.1 Latence
- **Risque** : un artiste en Roumanie tente d'utiliser un serveur en France → latence 40ms → inutilisable en temps réel
- **Mitigation** : afficher clairement les zones de latence supportées, outil de test intégré
### 9.2 Abus de ressources
- **Risque** : un user charge 50 instances de Kontakt → 200 GB RAM
- **Mitigation** : limites Docker cgroups (CPU + RAM hard limit), monitoring, kill si dépassement prolongé
### 9.3 Plugins vérolés
- **Risque** : un user demande l'installation d'un VST corrompu / cracké
- **Mitigation** : validation manuelle par l'admin, scan ClamAV avant installation
### 9.4 Dépendance à AudioGridder (projet open-source)
- **Risque** : projet abandonné par le mainteneur
- **Mitigation** : fork Talas si nécessaire (licence MIT, code court ~15k lignes)
### 9.5 Complexité opérationnelle
- **Risque** : gérer 50 containers avec des plugins différents = cauchemar ops
- **Mitigation** : images Docker standardisées, Ansible automation, max 2-3 configs différentes
---
## 10. Aspects légaux
### 10.1 Licences VST
- Talas installe des plugins gratuits/GPL → aucun problème
- Plugins utilisateur : la licence appartient au user, il est responsable
- Talas ne distribue pas le plugin, il l'exécute pour le compte du user (comparable au cloud computing)
### 10.2 RGPD
- Audio transitant : données personnelles de l'artiste
- Chiffrement WireGuard (in transit)
- Chiffrement volume Docker (at rest, LUKS)
- Suppression garantie à la résiliation
---
## 11. Roadmap
### V1.0 — aucun (feature non lancée initialement)
AudioGridder intégré n'est **pas** dans le périmètre de lancement.
### V2.0 (Q1 2027, si demande validée)
- [ ] Provisioning semi-manuel (Ansible)
- [ ] Intégration WireGuard
- [ ] Suite plugins gratuits pré-installés
- [ ] Dashboard usage
- [ ] Plan `starter`
### V2.5 (mi-2027)
- [ ] Provisioning automatique
- [ ] Pool de containers warm
- [ ] Installation plugins user automatisée
- [ ] Plan `pro`
- [ ] Outil de test latence intégré
### V3.0+ (si ça marche)
- [ ] Multi-serveur (load balancing entre R720)
- [ ] Snapshot / restore de session complète
- [ ] Présets de chaînes (mastering, mix, sound design)
- [ ] API pour contrôle externe (OSC, MIDI over network)
---
## 12. Alternatives considérées
| Option | Pour | Contre |
|--------|------|--------|
| **AudioGridder (choisi)** | Open-source, simple, léger | Pas de GUI côté serveur |
| **JACK network** | Standard audio Linux | Complexe, pas Windows-friendly |
| **SoundGrid (Waves)** | Pro, basse latence | Propriétaire, cher, plugins Waves only |
| **VST Transit (Steinberg)** | Intégré Cubase | Fermé, Cubase only |
| **Rien** | Zéro complexité | Pas de différenciant |
AudioGridder est le meilleur compromis : open-source, cross-platform, léger, communauté active.
---
## Voir aussi
- [[Personal/Cloud_Perso/SPEC_CLOUD_PERSO]] — autre feature Personal
- [[Personal/README]] — vue d'ensemble module Personal
- [[04_INFRA_DEPLOIEMENT/Architecture_Serveurs]] — R720 specs
- [[04_INFRA_DEPLOIEMENT/Docker_Incus]] — stratégie containers
- [[09_MODELE_ECONOMIQUE/BUSINESS_PLAN_TALAS]] — revenue streams

View file

@ -0,0 +1,309 @@
# Spec technique — Espace Produits Personnels
> Espace client pour les produits Talas achetés : garantie, documentation, SAV, historique.
> Stack : Go (Gin + GORM) · PostgreSQL · MinIO (PDFs)
> Dernière mise à jour : avril 2026.
---
## 1. Vue d'ensemble
Quand un artiste achète un micro Talas, il obtient un **espace produit personnel** dans Veza qui lui donne accès à :
- Le certificat de garantie (avec numéro de série)
- La documentation technique du produit (PDF, guides)
- L'historique de ses achats
- Le suivi SAV / réparation
- Les mises à jour firmware (si applicable)
- Des guides d'entretien et de réparation DIY
C'est le **lien permanent** entre l'artiste et son matériel — et un différenciant clé de Talas (réparabilité, durabilité).
---
## 2. Modèle de données
### 2.1 Table `user_products` (liaison user ↔ produit physique)
```sql
CREATE TABLE user_products (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
order_id UUID REFERENCES orders(id),
variant_id UUID REFERENCES product_variants(id),
serial_number VARCHAR(50) UNIQUE,
product_name VARCHAR(200) NOT NULL, -- snapshot du nom produit
purchase_date DATE NOT NULL,
-- garantie
warranty_months INT NOT NULL DEFAULT 24,
warranty_start DATE NOT NULL,
warranty_end DATE NOT NULL,
warranty_extended BOOLEAN NOT NULL DEFAULT false,
-- état
status VARCHAR(20) NOT NULL DEFAULT 'active',
-- 'active', 'in_repair', 'replaced', 'retired'
-- notes
user_notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_user_products_user ON user_products(user_id);
CREATE INDEX idx_user_products_serial ON user_products(serial_number);
```
### 2.2 Table `product_documents` (docs par produit-type)
```sql
CREATE TABLE product_documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
product_id UUID NOT NULL REFERENCES products(id),
title VARCHAR(200) NOT NULL,
doc_type VARCHAR(30) NOT NULL,
-- 'manual', 'quick_start', 'repair_guide', 'schematic',
-- 'datasheet', 'firmware', 'faq'
language VARCHAR(5) NOT NULL DEFAULT 'fr',
version VARCHAR(20),
s3_key VARCHAR(500) NOT NULL,
file_size_bytes BIGINT,
is_public BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_product_documents_product ON product_documents(product_id, doc_type);
```
### 2.3 Table `repair_requests` (SAV)
```sql
CREATE TABLE repair_requests (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_product_id UUID NOT NULL REFERENCES user_products(id),
user_id UUID NOT NULL REFERENCES users(id),
subject VARCHAR(200) NOT NULL,
description TEXT NOT NULL,
status VARCHAR(30) NOT NULL DEFAULT 'submitted',
-- 'submitted', 'acknowledged', 'diagnosing',
-- 'awaiting_parts', 'repairing', 'shipping_back',
-- 'completed', 'cancelled'
is_warranty BOOLEAN, -- couvert par garantie ?
repair_notes TEXT, -- notes internes (admin)
-- tracking
return_tracking_number VARCHAR(100), -- envoi user → Talas
reship_tracking_number VARCHAR(100), -- renvoi Talas → user
submitted_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_repair_requests_user ON repair_requests(user_id, submitted_at DESC);
CREATE INDEX idx_repair_requests_status ON repair_requests(status) WHERE status NOT IN ('completed', 'cancelled');
```
### 2.4 Table `repair_messages` (fil de discussion SAV)
```sql
CREATE TABLE repair_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
repair_id UUID NOT NULL REFERENCES repair_requests(id) ON DELETE CASCADE,
author_id UUID NOT NULL REFERENCES users(id),
is_admin BOOLEAN NOT NULL DEFAULT false,
body TEXT NOT NULL,
attachments VARCHAR(500)[] DEFAULT '{}',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_repair_messages_repair ON repair_messages(repair_id, created_at);
```
---
## 3. API Endpoints
Base : `/api/v1/my-products`
### 3.1 Mes produits
| Méthode | Route | Auth | Description |
|---------|-------|------|-------------|
| GET | `/` | 🔒 | Liste mes produits enregistrés |
| GET | `/:id` | 🔒 | Détail produit + garantie + docs |
| POST | `/register` | 🔒 | Enregistrer un produit (numéro de série) |
| PUT | `/:id/notes` | 🔒 | Ajouter notes perso |
### 3.2 Documentation
| Méthode | Route | Auth | Description |
|---------|-------|------|-------------|
| GET | `/:id/documents` | 🔒 | Docs disponibles pour ce produit |
| GET | `/documents/:doc_id/download` | 🔒 | Télécharger document (URL signée) |
### 3.3 SAV / Réparation
| Méthode | Route | Auth | Description |
|---------|-------|------|-------------|
| POST | `/:id/repair` | 🔒 | Ouvrir demande de réparation |
| GET | `/repairs` | 🔒 | Mes demandes SAV |
| GET | `/repairs/:id` | 🔒 | Détail + messages |
| POST | `/repairs/:id/message` | 🔒 | Envoyer message dans le fil |
| POST | `/repairs/:id/cancel` | 🔒 | Annuler demande |
### 3.4 Admin SAV
| Méthode | Route | Auth | Description |
|---------|-------|------|-------------|
| GET | `/admin/repairs` | 🔒👑 | Toutes les demandes |
| PUT | `/admin/repairs/:id/status` | 🔒👑 | Changer statut |
| POST | `/admin/repairs/:id/message` | 🔒👑 | Répondre (badge admin) |
| POST | `/admin/documents` | 🔒👑 | Ajouter document produit |
---
## 4. Flux techniques
### 4.1 Enregistrement produit (auto + manuel)
**Auto** (après achat en ligne) :
```
Event order.shipped
→ Backend: INSERT user_products (serial_number du colis, auto-lié au user + order)
→ Email: "Ton micro est enregistré, consulte ta garantie ici"
```
**Manuel** (achat hors ligne, occasion, cadeau) :
```
POST /my-products/register
Body: { serial_number }
→ Backend:
- Check serial_number valide (format TALAS-LITE-XXXXXX ou TALAS-ONE-XXXXXX)
- Check pas déjà enregistré par un autre user
- INSERT user_products (warranty_start = aujourd'hui si pas d'order lié)
```
### 4.2 Demande de réparation
```
POST /my-products/:id/repair
Body: { subject, description, photos[]? }
→ Backend:
- Check user_product.status != 'retired'
- Calcul is_warranty (warranty_end > today)
- INSERT repair_requests
- Email admin : "Nouvelle demande SAV #XXX"
- Email user : "Ta demande est enregistrée, numéro #XXX"
```
### 4.3 Suivi réparation (timeline)
L'UI affiche une **timeline visuelle** des changements de statut :
```
● Soumis (5 avril)
● Pris en charge (6 avril)
│ "Bonjour, je regarde ça cet après-midi"
● Diagnostic en cours (7 avril)
│ "Le problème vient du câble XLR interne,
│ soudure froide. Couvert par la garantie."
○ En attente de pièce
○ Réparation
○ Renvoi
○ Terminé
```
---
## 5. Guides de réparation DIY
### 5.1 Concept (aligné open-hardware)
Talas est réparable et open-hardware. Chaque produit a des **guides de réparation** consultables par l'acheteur :
- **Remplacement câble XLR** (PDF illustré, 15 min)
- **Nettoyage de la capsule** (PDF illustré, 10 min)
- **Remplacement PCB préampli** (PDF + vidéo, 30 min)
- **Schéma électronique complet** (PDF)
- **BOM** (liste de composants)
### 5.2 Accès
- Guides **quick start** et **FAQ** : publics (pas de login)
- Guides **réparation** et **schémas** : réservés aux propriétaires enregistrés
- **Schémas KiCAD** bruts : sur le repo open-source GitHub
---
## 6. Interface utilisateur
### 6.1 Page "Mes produits" (`/my/products`)
- Liste des produits enregistrés (carte par produit)
- Chaque carte : photo, nom, numéro de série, statut garantie (badge)
- CTA : "Voir les docs" / "Demander une réparation"
### 6.2 Page produit (`/my/products/:id`)
- Photo + infos produit
- Badge garantie (vert = active, gris = expirée)
- Onglets : Documents | Réparations | Notes
- Section "Guides de réparation DIY"
- Bouton "Ouvrir une demande SAV"
### 6.3 Page réparation (`/my/products/repairs/:id`)
- Timeline visuelle des statuts
- Fil de messages (chat avec l'admin)
- Tracking d'envoi / retour (si renseigné)
- Pièces jointes (photos du problème)
---
## 7. Roadmap
### V1.0 (lancement shop, août 2026)
- [ ] Enregistrement auto après achat
- [ ] Page "Mes produits" + garantie
- [ ] Documents téléchargeables
- [ ] Demande SAV basique
### V1.5 (Q4 2026)
- [ ] Enregistrement manuel (numéro de série)
- [ ] Fil de messages SAV (chat)
- [ ] Timeline visuelle statut
- [ ] Guides réparation DIY
### V2.0 (2027)
- [ ] Vidéos de réparation intégrées
- [ ] Notifications firmware update
- [ ] Extension de garantie (payante)
- [ ] Transfert de propriété (vente occasion)
---
## Voir aussi
- [[Shop/Backend/SPEC_BACKEND_SHOP]] — lifecycle commandes (source d'enregistrement auto)
- [[02_PRODUITS_PHYSIQUES/Microphone/FICHE_PRODUIT]] — détail produit
- [[08_CONFORMITE_JURIDIQUE/Politique_Garantie_Retour]] — politique garantie
- [[Personal/Cloud_Perso/SPEC_CLOUD_PERSO]] — autre feature Personal

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 MiB

View file

@ -0,0 +1,513 @@
# Parcours utilisateurs — Veza
> Les 8 parcours clés de la plateforme, du premier contact à la fidélisation.
> Chaque flow est un enchaînement d'écrans + actions + décisions système.
> Dernière mise à jour : avril 2026.
---
## Personas de référence
| Persona | Profil | Objectif principal |
|---------|--------|-------------------|
| **Léa** | Beatmaker 22 ans, laptop + casque, débutante | Partager ses beats, trouver une communauté |
| **Youssef** | Ingé son freelance 30 ans, home studio complet | Trouver des clients/collabs, vendre du mix |
| **Sonia** | Podcasteuse 28 ans, contenu FR/ES, micro USB | Acheter un micro pro, upgrader son son |
| **Thomas** | Producteur confirmé 35 ans, studio traité | Découvrir des artistes, mentorer, troquer |
---
## Flow 1 — Inscription et onboarding
**Persona** : Léa (premier contact)
**Durée** : 3-5 min
**Objectif** : compte créé + profil minimum + 1 action réalisée
```
┌─────────────────────────────────────────────────────────┐
│ LANDING / RS / lien d'invitation fondateur │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ PAGE INSCRIPTION │
│ │
│ ○ Email + password (12 car. min) │
│ ○ OU connexion Discord / GitHub │
│ ○ Pseudo (vérification dispo instantanée) │
│ ○ Checkbox CGU (lien) │
│ [Créer mon espace] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ VÉRIFICATION EMAIL │
│ │
│ "Un email t'a été envoyé. Clique sur le lien." │
│ [Renvoyer l'email] │
│ │
│ → Si OAuth : email auto-vérifié, skip cette étape │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ ONBOARDING (3 étapes, skippable sauf étape 1) │
│ │
│ Étape 1/3 — TON PROFIL (obligatoire) │
│ ○ Avatar (upload ou génération auto) │
│ ○ Bio (2 lignes) │
│ ○ Genre musical principal (dropdown) │
│ [Suivant] │
│ │
│ Étape 2/3 — TES OUTILS (optionnel) │
│ ○ DAW principal (Ableton/FL/Reaper/Logic/autre) │
│ ○ Micro actuel (texte libre) │
│ ○ Niveau (débutant/intermédiaire/confirmé/pro) │
│ [Suivant] ou [Passer] │
│ │
│ Étape 3/3 — TA PREMIÈRE ACTION (guidance) │
│ "Fais une de ces 3 choses pour commencer :" │
│ ○ [Uploade un morceau] │
│ ○ [Partage un sample pack] │
│ ○ [Dis bonjour dans #production] │
│ → Chaque bouton mène directement au flow correspondant │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ DASHBOARD / HOME VEZA │
│ │
│ → Feed personnalisé (vide au début, contenu fondateurs) │
│ → Sidebar : groupes, chat, samples, troc │
│ → Badge "nouveau" visible 30 jours │
└─────────────────────────────────────────────────────────┘
```
**Points de friction à surveiller** :
- Si le pseudo est pris → suggestion alternative instantanée
- Si l'email de vérification n'arrive pas → timer 30s puis bouton "Renvoyer"
- Onboarding étape 3 : si skip total → relance email J+1 "Tu n'as pas encore posté"
---
## Flow 2 — Upload d'un morceau
**Persona** : Léa (première publication)
**Durée** : 2-5 min
**Objectif** : morceau en ligne, visible sur le profil
```
[Bouton "+" ou "Publier" dans le header]
┌─────────────────────────────────────────────────────────┐
│ UPLOAD — Étape 1 : Fichier │
│ │
│ ○ Drag & drop zone (ou clic pour parcourir) │
│ ○ Formats : WAV, FLAC, MP3, OGG, AIFF │
│ ○ Taille max : 500 MB │
│ ○ Barre de progression │
│ │
│ → Upload direct vers MinIO (URL signée) │
│ → Pendant l'upload : afficher le formulaire metadata │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ UPLOAD — Étape 2 : Metadata (pendant l'upload) │
│ │
│ ○ Titre (pré-rempli : nom du fichier sans extension) │
│ ○ Description (optionnel) │
│ ○ Genre (dropdown multi-select) │
│ ○ Tags (3 à 10, auto-suggest) │
│ ○ Visibilité : Public / Privé / Lien secret │
│ ○ Cover art (upload optionnel, sinon waveform auto) │
│ ○ Licence (CC-BY-SA par défaut) │
│ │
│ [Publier] — actif quand upload terminé │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ PROCESSING (async, user redirigé vers la page du track) │
│ │
│ → ClamAV scan │
│ → RabbitMQ → Stream Server : transcoding HLS │
│ → Waveform generation │
│ → BPM / key detection (V1.5) │
│ → Elasticsearch indexation │
│ │
│ Indicateur : "En cours de traitement..." │
│ Quand fini : "Ton morceau est en ligne !" │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ PAGE DU MORCEAU │
│ │
│ → Player audio (waveform + boutons) │
│ → Metadata affichée │
│ → Boutons : Partager / Liker / Commenter / Repost │
│ → Lien direct partageable │
└─────────────────────────────────────────────────────────┘
```
---
## Flow 3 — Partage d'un sample pack
**Persona** : Thomas (contributeur expérimenté)
**Durée** : 5-10 min
**Objectif** : pack publié dans le dépôt communautaire
```
[Section "Samples" → "Partager un pack"]
┌─────────────────────────────────────────────────────────┐
│ UPLOAD PACK — Étape 1 : Fichier │
│ │
│ ○ Drag & drop .zip (500 MB max) │
│ ○ Barre de progression │
│ → Upload direct MinIO │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ UPLOAD PACK — Étape 2 : Metadata │
│ │
│ ○ Titre du pack │
│ ○ Description (comment il a été fait, quoi dedans) │
│ ○ Type (sample pack / one-shot / loop / preset / IR) │
│ ○ Licence (CC-BY-SA par défaut) │
│ ○ Tags (genre, instrument, ambiance) │
│ ○ BPM / tonalité (si applicable) │
│ ○ Outils utilisés (texte libre) │
│ ○ Preview audio (upload ou auto-généré) │
│ │
│ [Publier le pack] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ POST-PROCESSING (async) │
│ │
│ → ClamAV scan du zip │
│ → Extraction liste fichiers │
│ → FFprobe metadata sur chaque audio │
│ → Génération preview MP3 (si pas fourni) │
│ → Publication │
│ │
│ → Notification : "Ton pack est en ligne !" │
│ → Visible dans le feed Samples │
└─────────────────────────────────────────────────────────┘
```
---
## Flow 4 — Troc entre artistes
**Persona** : Youssef (offre du mix) ↔ Léa (offre un beat)
**Durée** : publication 3 min, échange 1-3 semaines
**Objectif** : troc conclu, reconnaissances données
```
[YOUSSEF]
[Section "Troc" → "Nouvelle annonce"]
┌─────────────────────────────────────────────────────────┐
│ CRÉATION ANNONCE │
│ │
│ ○ Titre : "Mix rap/trap contre un beat original" │
│ ○ J'offre : "Mix complet de 1 morceau rap (stems→WAV)" │
│ ○ Je cherche : "Un beat original 90-100 BPM, sombre" │
│ ○ Catégories : Services audio ↔ Production musicale │
│ ○ Délai de ma part : 7 jours │
│ ○ Exemples : (liens vers ses morceaux Veza) │
│ │
│ [Publier] │
│ → Annonce visible dans le feed Troc │
└─────────────────────────────────────────────────────────┘
[LÉA — voit l'annonce, clique "Je suis intéressée"]
┌─────────────────────────────────────────────────────────┐
│ DM AUTO-CRÉÉ │
│ │
│ Message système : │
│ "🤝 @léa s'intéresse à ton annonce : │
│ 'Mix rap/trap contre un beat original'" │
│ │
│ → Youssef reçoit une notification │
│ → Les deux échangent en DM │
│ → Ils précisent les attentes │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ RÉALISATION (hors plateforme, échange de fichiers en DM) │
│ │
│ → Léa envoie le beat (fichier attaché dans le DM) │
│ → Youssef envoie le mix (fichier attaché) │
│ → Révisions si besoin │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CLOSING │
│ │
│ Youssef clique "Clôturer ce troc" (bouton dans le DM) │
│ → Statut annonce → "conclu" │
│ → Les deux reçoivent : "Donne tes reconnaissances" │
│ │
│ Léa donne : 🤝 Fiable, ⏱️ Ponctuel, 🎯 Précis │
│ Youssef donne : 💡 Inventif, 🤗 Chaleureux │
│ │
│ → Badges ajoutés aux profils │
│ → Annonce archivée avec badge "conclu" │
└─────────────────────────────────────────────────────────┘
```
---
## Flow 5 — Achat d'un micro (shop)
**Persona** : Sonia (premier achat Talas)
**Durée** : 5-10 min
**Objectif** : commande payée, confirmation reçue
```
[RS / landing page / lien direct → /shop]
┌─────────────────────────────────────────────────────────┐
│ SHOP HOME │
│ │
│ → Grid produits (Talas Lite, Talas One) │
│ → Section "Pourquoi Talas" (3 arguments) │
│ → Sonia clique sur "Talas One" │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ FICHE PRODUIT — Talas One │
│ │
│ → Galerie 6 photos + player audio démo │
│ → Configurateur : │
│ • Finition : [Brute] [Noire] [+10€] │
│ • Options : ☐ Pochette tissu (+8€) │
│ ☐ Suspension élastique (+15€) │
│ → Prix recalculé live : 150€ → 173€ HT │
│ → Stock : "En stock (12 disponibles)" │
│ → [Ajouter au panier] │
│ │
│ → Onglets : Description | Specs | Réparabilité | FAQ │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CART DRAWER (overlay latéral) │
│ │
│ → "Talas One — Finition noire — Pochette tissu" │
│ → Qté : 1 │
│ → Sous-total : 173€ HT │
│ → [Voir le panier] ou [Commander] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CHECKOUT — Étape 1/3 : Coordonnées │
│ │
│ → Si connectée : pré-rempli │
│ → Si pas connectée : [Se connecter] ou remplir │
│ ○ Email, Nom, Adresse, Ville, CP, Pays │
│ ○ ☑ Adresse de facturation identique │
│ [Suivant] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CHECKOUT — Étape 2/3 : Livraison │
│ │
│ ○ Colissimo domicile — 6.90€ (3-5 jours) │
│ ○ Mondial Relay — 4.50€ (4-6 jours) │
│ ○ Chronopost express — 12€ (24-48h) │
│ Note : "Colis expédié en matériaux recyclés" │
│ [Suivant] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CHECKOUT — Étape 3/3 : Paiement │
│ │
│ → Récap complet : │
│ Talas One noire + pochette : 173.00€ │
│ Livraison Colissimo : 6.90€ │
│ Total : 179.90€ TTC │
│ (TVA non applicable, art. 293 B du CGI) │
│ │
│ ○ Carte bancaire (Mollie) │
│ ○ iDEAL │
│ ○ Virement SEPA │
│ ☑ J'accepte les CGV │
│ [Payer 179.90€] │
│ → Redirect Mollie │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ CONFIRMATION │
│ │
│ ✓ Commande TALAS-2026-00042 confirmée │
│ "Merci Sonia ! Ton micro est en cours de préparation." │
│ → Récap commande │
│ → Délai estimé : 3-5 jours │
│ → [Suivre ma commande] → espace client │
│ → Email : confirmation + facture PDF │
│ │
│ → En parallèle : │
│ - Produit enregistré dans "Mes produits" │
│ - Garantie 24 mois activée │
│ - Guides de réparation accessibles │
└─────────────────────────────────────────────────────────┘
```
---
## Flow 6 — Découverte et exploration
**Persona** : Thomas (explore la communauté)
**Objectif** : trouver un artiste / morceau / sample intéressant
```
┌─────────────────────────────────────────────────────────┐
│ HOME VEZA (connecté) │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Feed principal │ │
│ │ → Morceaux récents des gens que je suis │ │
│ │ → Challenges en cours │ │
│ │ → Packs samples de la semaine │ │
│ │ → Annonces de troc récentes │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Barre de recherche (toujours visible) │ │
│ │ → Recherche unifiée : artistes, morceaux, packs │ │
│ │ → Autocomplete + preview audio inline │ │
│ └─────────────────────────────────────────────────────┘ │
└───────────────────────────┬─────────────────────────────┘
▼ (clic résultat)
┌─────────────────────────────────────────────────────────┐
│ PROFIL ARTISTE │
│ │
│ → Avatar, bio, badges patine, reconnaissances troc │
│ → Onglets : Morceaux | Samples | Troc | À propos │
│ → Player audio intégré │
│ → [Suivre] [Envoyer un message] │
│ │
│ → Exploration latérale : │
│ "Artistes similaires" (tags match) │
│ Morceaux qui utilisent ses samples │
└─────────────────────────────────────────────────────────┘
```
---
## Flow 7 — Challenge hebdomadaire
**Persona** : Léa (participe à son premier challenge)
**Durée** : 45 min (production) + 5 min (soumission)
```
[Notification : "Nouveau challenge : Fais un beat en 30 min..."]
┌─────────────────────────────────────────────────────────┐
│ PAGE CHALLENGE │
│ │
│ Titre : "30 min, que des sons de chez toi" │
│ Deadline : Dimanche 23:59 │
│ Règles : (voir CHALLENGES_HEBDO_FONDATEURS) │
│ Soumissions : 8 artistes ont déjà participé │
│ │
│ → Écouter les soumissions existantes (player inline) │
│ → [Soumettre mon morceau] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ SOUMISSION (= upload spécial lié au challenge) │
│ │
│ ○ Upload fichier audio │
│ ○ Description courte ("j'ai utilisé ma cafetière") │
│ ○ Tags auto : #challenge-semaine-1 │
│ [Soumettre] │
│ │
│ → Morceau publié dans la page du challenge │
│ → Aussi visible sur le profil de l'artiste │
│ → Notif aux autres participants │
└─────────────────────────────────────────────────────────┘
```
---
## Flow 8 — Demande SAV / réparation
**Persona** : Sonia (6 mois après l'achat, problème de câble)
**Objectif** : demande ouverte, suivi, réparation
```
[Espace client → Mes produits → Talas One #TALAS-ONE-004217]
┌─────────────────────────────────────────────────────────┐
│ FICHE PRODUIT PERSO │
│ │
│ Talas One #TALAS-ONE-004217 │
│ Garantie : ✓ Active (18 mois restants) │
│ │
│ → Onglet "Guides de réparation" │
│ → "Remplacement câble XLR interne" (PDF 15 min) │
│ → "Nettoyage capsule" (PDF 10 min) │
│ │
│ → Si le guide ne suffit pas : │
│ [Demander une réparation] │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ FORMULAIRE SAV │
│ │
│ ○ Sujet : "Grésillements intermittents" │
│ ○ Description : "Depuis 2 semaines, grésillement │
│ quand je bouge le câble XLR..." │
│ ○ Photos (drag & drop, max 5) │
│ [Envoyer] │
│ │
│ → Demande créée : #SAV-2026-0017 │
│ → Email : "Demande reçue, on revient vers toi" │
│ → Notif admin │
└───────────────────────────┬─────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ SUIVI (timeline + chat) │
│ │
│ ● Soumis (5 avril) │
│ │ "Grésillements intermittents" │
│ ● Pris en charge (6 avril) │
│ │ Talas : "C'est un classique, soudure froide │
│ │ probable. Couvert par garantie. Envoie-le à : │
│ │ Talas, 12 rue..., en Colissimo." │
│ ○ En attente de réception │
│ ○ Diagnostic │
│ ○ Réparation │
│ ○ Renvoi │
│ ○ Terminé │
│ │
│ [Envoyer un message] (input texte + PJ) │
└─────────────────────────────────────────────────────────┘
```
---
## Métriques de conversion par flow
| Flow | Métrique | Objectif |
|------|----------|----------|
| Inscription | Complétion onboarding 3 étapes | > 70% |
| Inscription | 1 action dans les 7 jours | > 60% |
| Upload morceau | Drop-off entre étape 1 et publish | < 20% |
| Sample pack | Pack publié après début d'upload | > 85% |
| Troc | Intérêt → closing (conversion) | > 40% |
| Achat | Panier → paiement (conversion) | > 50% |
| Découverte | Temps moyen sur profil artiste | > 90s |
| SAV | Temps réponse 1er message | < 24h |
---
## Voir aussi
- [[CONCEPTS_INNOVANTS_VEZA]] — Patine, exploration spatiale
- [[SUMI_V3_SPECIFICATION]] — Design system (composants des flows)
- [[Shop/Frontend/SPEC_FRONTEND_SHOP]] — Détail technique du flow achat
- [[Community/Partage/SPEC_TECHNIQUE_PARTAGE]] — Backend du flow samples
- [[Community/Troc/SPEC_TECHNIQUE_TROC]] — Backend du flow troc
- [[STRATEGIE_LANCEMENT_COMMUNAUTAIRE]] — Phases d'ouverture des modules

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 MiB

View file

@ -0,0 +1,536 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>TALAS — Crafted for Endurance</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@200;300;400;500&family=JetBrains+Mono:wght@300;400&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
:root{
--paper:#F0EADE;--ink:#18181C;
--ink50:rgba(24,24,28,.5);--ink25:rgba(24,24,28,.25);--ink12:rgba(24,24,28,.12);--ink06:rgba(24,24,28,.06);--ink03:rgba(24,24,28,.03);
--cyan:#2AA5BF;--cyan2:#48BED6;--cw1:rgba(42,165,191,.14);--cw2:rgba(42,165,191,.08);--cw3:rgba(42,165,191,.04);
--d:'Space Grotesk',sans-serif;--b:'Inter',sans-serif;--m:'JetBrains Mono',monospace;
}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
::selection{background:rgba(42,165,191,.18);color:var(--ink)}
html{background:var(--paper)}
body{font-family:var(--b);font-weight:300;font-size:14px;line-height:1.7;color:var(--ink);overflow-x:hidden}
a{color:var(--ink);text-decoration:none}
/* Washi */
body::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:9999;
background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.6' numOctaves='5' seed='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='512' height='512' filter='url(%23n)'/%3E%3C/svg%3E") repeat;
background-size:512px;opacity:.035;mix-blend-mode:multiply}
/* SVG ink elements */
.ink-el{position:absolute;pointer-events:none;z-index:0}
.ink-el svg{width:100%;height:100%;overflow:visible}
/* ═══ NAV ═══ */
.topnav{position:fixed;top:0;left:0;right:0;z-index:100;display:flex;align-items:center;padding:0 4vw;height:56px;
background:linear-gradient(to bottom,var(--paper) 50%,rgba(240,234,222,0))}
.topnav-logo{display:flex;align-items:center;gap:10px;margin-right:auto}
.topnav-logo svg{width:32px;height:22px}
.topnav-word{font-family:var(--d);font-weight:700;font-size:16px;letter-spacing:.12em}
.topnav-links{display:flex;gap:28px;margin-right:32px}
.topnav-links a{font-family:var(--d);font-size:11px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--ink50);transition:color .2s}
.topnav-links a:hover{color:var(--ink)}
.topnav-icons{display:flex;gap:14px}
.topnav-icons svg{width:17px;height:17px;stroke:var(--ink);opacity:.3;cursor:pointer;transition:opacity .2s;stroke-width:1.5;fill:none}
.topnav-icons svg:hover{opacity:.7}
/* ═══ HERO ═══ */
.hero{min-height:100vh;padding:130px 4vw 80px;display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center;position:relative;overflow:hidden}
.hero-text{position:relative;z-index:2;max-width:540px}
.hero-ey{font-family:var(--d);font-size:11px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--ink50);margin-bottom:20px}
.hero h1{font-family:var(--d);font-weight:700;font-size:clamp(38px,5.5vw,66px);letter-spacing:.02em;line-height:1.05;margin-bottom:20px}
.hero h1 .dot{color:var(--cyan)}
.hero-sub{font-size:15px;font-weight:300;color:var(--ink50);max-width:400px;margin-bottom:36px;line-height:1.8}
.hero-cta{display:inline-block;font-family:var(--d);font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
padding:14px 32px;border:1.5px solid var(--ink);color:var(--ink);background:transparent;cursor:pointer;transition:all .3s}
.hero-cta:hover{background:var(--ink);color:var(--paper)}
.hero-visual{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;min-height:420px}
.hero-dim{position:absolute;font-family:var(--m);font-size:9px;color:var(--ink25);letter-spacing:.08em}
/* ═══ FEATURES ═══ */
.features{padding:80px 4vw;display:grid;grid-template-columns:repeat(3,1fr);gap:48px;position:relative}
.feature{position:relative;padding:24px 0}
.feature-icon{width:48px;height:48px;margin-bottom:20px;position:relative}
.feature-icon svg{width:28px;height:28px;stroke:var(--ink);stroke-width:1.2;fill:none;position:relative;z-index:1}
.feature h3{font-family:var(--d);font-weight:700;font-size:14px;letter-spacing:.06em;text-transform:uppercase;line-height:1.45;margin-bottom:10px}
.feature p{font-size:13px;color:var(--ink50);line-height:1.75;max-width:280px}
/* ═══ EXPLODED ═══ */
.exploded{padding:100px 4vw;display:grid;grid-template-columns:1.2fr 1fr;gap:60px;align-items:center;position:relative}
.exploded-vis{position:relative;z-index:2}
.exploded-text{position:relative;z-index:2}
.exploded-text h2{font-family:var(--d);font-weight:700;font-size:clamp(28px,3.5vw,44px);letter-spacing:.02em;line-height:1.1;margin-bottom:16px}
.exploded-text p{font-size:14px;color:var(--ink50);line-height:1.8;max-width:380px;margin-bottom:20px}
.schema-btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--m);font-size:11px;color:var(--cyan);padding:8px 0;border:none;background:none;cursor:pointer;transition:color .2s}
.schema-btn:hover{color:var(--ink)}
.schema-btn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.5}
/* ═══ SPLIT (Veza + Foundation) ═══ */
.split{padding:80px 4vw;display:grid;grid-template-columns:1fr 1fr;gap:4px;position:relative}
.split-card{padding:48px 40px;position:relative}
.split-ey{font-family:var(--d);font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--ink25);margin-bottom:12px}
.split-title{font-family:var(--d);font-weight:700;font-size:clamp(24px,3vw,36px);letter-spacing:.02em;line-height:1.12;margin-bottom:14px}
.split-title .dot{color:var(--cyan)}
.split-text{font-size:13px;color:var(--ink50);line-height:1.8;max-width:360px;margin-bottom:24px}
.split-link{font-family:var(--d);font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;
padding:10px 24px;border:1.5px solid var(--ink12);display:inline-block;transition:all .3s}
.split-link:hover{border-color:var(--ink);background:var(--ink);color:var(--paper)}
.statement{font-family:var(--d);font-weight:700;font-size:clamp(13px,1.4vw,16px);letter-spacing:.04em;line-height:1.65;margin-top:16px;max-width:300px}
.statement .big{color:var(--cyan);font-size:1.5em}
.f-stat{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--ink06)}
.f-stat:last-child{border:none}
.f-stat-l{font-size:11px;color:var(--ink25)}.f-stat-v{font-family:var(--m);font-size:11px}
/* ═══ TRANSPARENCY ═══ */
.transp{padding:32px 4vw;margin:0 4vw;display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap;
border-top:1px solid var(--ink06);border-bottom:1px solid var(--ink06);position:relative}
.t-counter{text-align:center}
.t-counter-label{font-family:var(--d);font-size:10px;font-weight:500;letter-spacing:.15em;text-transform:uppercase;color:var(--ink25);margin-bottom:4px}
.t-counter-val{font-family:var(--d);font-size:28px;font-weight:700;color:var(--cyan)}
.t-counter-sub{font-size:10px;color:var(--ink25);margin-top:2px}
.t-right{font-family:var(--d);font-weight:700;font-size:13px;letter-spacing:.06em;text-transform:uppercase;line-height:1.5;text-align:right;max-width:300px}
.t-right .big{color:var(--cyan);font-size:20px}
/* ═══ JOURNAL ═══ */
.journal{padding:80px 4vw;position:relative}
.journal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:32px}
.journal-title{font-family:var(--d);font-weight:700;font-size:clamp(20px,2.5vw,32px);letter-spacing:.02em}
.journal-link{font-family:var(--d);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink25)}
.journal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.article{cursor:pointer;position:relative}
.article-img{height:180px;background:var(--ink03);margin-bottom:14px;position:relative;overflow:hidden}
.article-cat{font-family:var(--m);font-size:9px;color:var(--ink25);margin-bottom:4px}
.article-t{font-family:var(--d);font-size:14px;font-weight:600;letter-spacing:.02em;line-height:1.4;margin-bottom:6px;transition:color .2s}
.article:hover .article-t{color:var(--cyan)}
.article-ex{font-size:12px;color:var(--ink25);line-height:1.6}
/* ═══ FOOTER ═══ */
.footer{padding:48px 4vw;display:flex;align-items:flex-start;justify-content:space-between;gap:48px;flex-wrap:wrap}
.footer-brand{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.footer-brand svg{width:24px;height:16px}
.footer-brand span{font-family:var(--d);font-weight:700;font-size:14px;letter-spacing:.1em}
.footer-copy{font-size:11px;color:var(--ink25)}
.footer-cols{display:flex;gap:48px}
.footer-col-t{font-family:var(--d);font-size:10px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--ink25);margin-bottom:10px}
.footer-col a{display:block;font-size:12px;color:var(--ink50);padding:3px 0;transition:color .2s}
.footer-col a:hover{color:var(--ink)}
.footer-btm{width:100%;text-align:center;padding-top:24px;border-top:1px solid var(--ink06);font-size:11px;color:var(--ink12);margin-top:16px}
/* ═══ ANIMATIONS ═══ */
.reveal{opacity:0;transform:translateY(24px);transition:opacity 1s cubic-bezier(.25,.8,.25,1),transform 1s cubic-bezier(.25,.8,.25,1)}
.reveal.vis{opacity:1;transform:none}
@media(max-width:900px){
.hero,.exploded,.split{grid-template-columns:1fr}
.features,.journal-grid{grid-template-columns:1fr}
.hero-visual{min-height:280px}
.topnav-links{display:none}
}
</style>
</head>
<body>
<!-- ═══════════════════════════════════════
SVG DEFINITIONS — brush strokes, stains, splatters
All hand-crafted organic paths
═══════════════════════════════════════ -->
<svg style="display:none">
<!-- Talas waveform symbol -->
<symbol id="sym" viewBox="0 0 80 48">
<path d="M4 28Q8 10 16 24Q20 32 24 18Q28 6 32 24Q34 34 38 12Q42-2 46 24Q48 36 52 20Q56 8 60 24Q64 34 68 22Q72 14 76 24"
fill="none" stroke="currentColor" stroke-width="3.5" stroke-linecap="round"/>
</symbol>
<!-- Large brush stroke (horizontal sweep) -->
<symbol id="brush-h" viewBox="0 0 1000 120">
<path d="M20 80 Q60 20,150 55 Q240 90,320 40 Q400 -5,500 60 Q580 100,680 35 Q760 -10,850 50 Q920 95,980 45"
fill="none" stroke="currentColor" stroke-width="18" stroke-linecap="round" opacity=".6"
style="filter:url(#brush-rough)"/>
<path d="M50 70 Q130 30,230 65 Q340 95,450 45 Q540 10,650 58 Q740 90,830 42 Q900 15,970 55"
fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round" opacity=".3"/>
</symbol>
<!-- Ink stain (organic blob) -->
<symbol id="stain-1" viewBox="0 0 200 200">
<path d="M100 20 Q140 25,155 55 Q170 85,160 120 Q150 155,120 170 Q90 185,60 165 Q30 145,25 110 Q20 75,40 50 Q60 25,100 20Z"
fill="currentColor" opacity=".07"/>
<path d="M95 35 Q125 38,138 60 Q150 82,143 108 Q136 134,115 148 Q94 162,72 150 Q50 138,42 112 Q34 86,48 62 Q62 38,95 35Z"
fill="currentColor" opacity=".05"/>
</symbol>
<!-- Ink stain 2 (elongated) -->
<symbol id="stain-2" viewBox="0 0 300 180">
<path d="M30 90 Q50 30,120 50 Q190 70,220 40 Q250 10,280 60 Q300 110,260 140 Q220 170,160 150 Q100 130,60 155 Q20 150,30 90Z"
fill="currentColor" opacity=".06"/>
</symbol>
<!-- Splatter (small droplets) -->
<symbol id="splatter" viewBox="0 0 200 200">
<circle cx="100" cy="100" r="18" fill="currentColor" opacity=".08"/>
<circle cx="60" cy="80" r="4" fill="currentColor" opacity=".12"/>
<circle cx="145" cy="70" r="6" fill="currentColor" opacity=".1"/>
<circle cx="130" cy="140" r="3" fill="currentColor" opacity=".14"/>
<circle cx="55" cy="130" r="5" fill="currentColor" opacity=".09"/>
<circle cx="160" cy="110" r="2.5" fill="currentColor" opacity=".15"/>
<circle cx="80" cy="50" r="2" fill="currentColor" opacity=".13"/>
<circle cx="40" cy="105" r="3.5" fill="currentColor" opacity=".07"/>
<circle cx="170" cy="85" r="1.5" fill="currentColor" opacity=".16"/>
<circle cx="110" cy="160" r="2" fill="currentColor" opacity=".11"/>
<circle cx="90" cy="45" r="1.5" fill="currentColor" opacity=".12"/>
<ellipse cx="120" cy="75" rx="8" ry="3" transform="rotate(-25 120 75)" fill="currentColor" opacity=".06"/>
</symbol>
<!-- Brush stroke diagonal -->
<symbol id="brush-diag" viewBox="0 0 400 300">
<path d="M30 250 Q80 200,140 180 Q200 160,260 100 Q310 50,380 30"
fill="none" stroke="currentColor" stroke-width="22" stroke-linecap="round" opacity=".08"/>
<path d="M40 260 Q90 210,155 185 Q215 165,275 105 Q325 55,390 35"
fill="none" stroke="currentColor" stroke-width="6" stroke-linecap="round" opacity=".04"/>
</symbol>
<!-- Vertical drip -->
<symbol id="drip" viewBox="0 0 30 200">
<path d="M15 5 Q14 40,16 80 Q18 120,15 160 Q13 180,15 195"
fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" opacity=".08"/>
<circle cx="15" cy="195" r="4" fill="currentColor" opacity=".06"/>
</symbol>
<!-- Enso (zen circle) -->
<symbol id="enso" viewBox="0 0 200 200">
<path d="M160 100 Q160 40,100 35 Q40 30,30 95 Q20 160,85 170 Q150 180,165 115"
fill="none" stroke="currentColor" stroke-width="12" stroke-linecap="round" opacity=".06"/>
</symbol>
<!-- Watercolor wash (cyan, for behind hero) -->
<symbol id="wash-cyan" viewBox="0 0 800 600">
<ellipse cx="400" cy="300" rx="350" ry="250" fill="currentColor" opacity=".12"
style="filter:url(#ink-blur)"/>
<ellipse cx="350" cy="260" rx="250" ry="180" fill="currentColor" opacity=".08"/>
<ellipse cx="450" cy="340" rx="200" ry="150" fill="currentColor" opacity=".06"/>
<circle cx="250" cy="200" r="40" fill="currentColor" opacity=".1"/>
<circle cx="550" cy="380" r="30" fill="currentColor" opacity=".08"/>
<circle cx="320" cy="420" r="15" fill="currentColor" opacity=".12"/>
<circle cx="500" cy="180" r="12" fill="currentColor" opacity=".09"/>
</symbol>
<!-- Filters -->
<defs>
<filter id="ink-blur"><feGaussianBlur stdDeviation="20"/></filter>
<filter id="ink-blur-sm"><feGaussianBlur stdDeviation="8"/></filter>
<filter id="brush-rough">
<feTurbulence type="turbulence" baseFrequency=".04" numOctaves="3" seed="5"/>
<feDisplacementMap in="SourceGraphic" scale="6"/>
</filter>
<filter id="stain-blur">
<feGaussianBlur stdDeviation="3"/>
<feComponentTransfer><feFuncA type="linear" slope="1.5" intercept="-.2"/></feComponentTransfer>
</filter>
</defs>
</svg>
<!-- ═══════ NAV ═══════ -->
<nav class="topnav">
<div class="topnav-logo">
<svg viewBox="0 0 80 48"><use href="#sym"/></svg>
<div class="topnav-word">TALAS</div>
</div>
<div class="topnav-links">
<a href="#features">Mics</a>
<a href="#exploded">Schematics</a>
<a href="#veza">Veza</a>
<a href="#journal">Manifeste</a>
<a href="#footer">Contact</a>
</div>
<div class="topnav-icons">
<svg viewBox="0 0 24 24"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.35-4.35"/></svg>
<svg viewBox="0 0 24 24"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
</div>
</nav>
<!-- ═══════ HERO ═══════ -->
<section class="hero">
<!-- Ink elements behind hero -->
<div class="ink-el" style="width:70vw;height:80vh;top:0;right:-10%">
<svg viewBox="0 0 800 600" style="color:var(--cyan)"><use href="#wash-cyan"/></svg>
</div>
<div class="ink-el" style="width:200px;height:200px;top:8%;left:50%">
<svg viewBox="0 0 200 200" style="color:var(--cyan)"><use href="#splatter"/></svg>
</div>
<div class="ink-el" style="width:300px;height:180px;bottom:5%;right:5%">
<svg viewBox="0 0 300 180" style="color:var(--ink)"><use href="#stain-2"/></svg>
</div>
<div class="ink-el" style="width:20px;height:160px;right:18%;top:10%">
<svg viewBox="0 0 30 200" style="color:var(--ink)"><use href="#drip"/></svg>
</div>
<div class="hero-text reveal">
<div class="hero-ey">Open Hardware Audio</div>
<h1>TALAS<span class="dot">.</span><br>CRAFTED FOR<br>ENDURANCE<span class="dot">.</span></h1>
<p class="hero-sub">Artisanal, repairable condenser microphones. Built to capture, built to last. Built by hand.</p>
<button class="hero-cta">SHOP THE MICS</button>
</div>
<div class="hero-visual reveal" style="transition-delay:.2s">
<svg viewBox="0 0 200 500" style="width:175px;filter:drop-shadow(0 20px 50px rgba(0,0,0,.06))">
<defs><linearGradient id="mg" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#C4C0B8"/><stop offset="30%" stop-color="#DAD6CE"/><stop offset="50%" stop-color="#D0CCC4"/>
<stop offset="70%" stop-color="#DED9D2"/><stop offset="100%" stop-color="#B4B0A8"/>
</linearGradient></defs>
<ellipse cx="100" cy="60" rx="48" ry="56" fill="none" stroke="#ACA8A0" stroke-width="1.5"/>
<ellipse cx="100" cy="60" rx="42" ry="50" fill="none" stroke="#C0BCB4" stroke-width=".4"/>
<g opacity=".35" stroke="#B8B4AC" stroke-width=".4"><line x1="60" y1="35" x2="140" y2="35"/><line x1="56" y1="45" x2="144" y2="45"/><line x1="54" y1="55" x2="146" y2="55"/><line x1="54" y1="65" x2="146" y2="65"/><line x1="56" y1="75" x2="144" y2="75"/><line x1="60" y1="85" x2="140" y2="85"/><line x1="68" y1="95" x2="132" y2="95"/></g>
<rect x="64" y="110" width="72" height="300" rx="6" fill="url(#mg)"/>
<rect x="64" y="110" width="72" height="300" rx="6" fill="none" stroke="#A4A09C" stroke-width=".8"/>
<rect x="62" y="140" width="76" height="3" rx="1.5" fill="#A4A09C" opacity=".35"/>
<rect x="62" y="370" width="76" height="3" rx="1.5" fill="#A4A09C" opacity=".35"/>
<g transform="translate(82,238) scale(.35)" opacity=".2"><path d="M4 28Q8 10 16 24Q20 32 24 18Q28 6 32 24Q34 34 38 12Q42-2 46 24Q48 36 52 20Q56 8 60 24Q64 34 68 22Q72 14 76 24" fill="none" stroke="#18181C" stroke-width="5" stroke-linecap="round"/></g>
<rect x="80" y="410" width="40" height="30" rx="4" fill="#96928A"/>
<circle cx="100" cy="450" r="12" fill="none" stroke="#86827A" stroke-width="1"/>
<g fill="#86827A"><circle cx="94" cy="447" r="2"/><circle cx="100" cy="442" r="2"/><circle cx="106" cy="447" r="2"/><circle cx="97" cy="454" r="2"/><circle cx="103" cy="454" r="2"/></g>
<g opacity=".12" stroke="#18181C" stroke-dasharray="4 4" stroke-width=".3"><line x1="40" y1="110" x2="160" y2="110"/><line x1="40" y1="410" x2="160" y2="410"/></g>
<line x1="100" y1="0" x2="100" y2="470" stroke="#18181C" stroke-width=".2" stroke-dasharray="2 6" opacity=".06"/>
</svg>
<div class="hero-dim" style="right:-10px;top:22%;writing-mode:vertical-lr">340mm</div>
<div class="hero-dim" style="bottom:24%;left:-30px">72mm</div>
</div>
</section>
<!-- ═══════ BRUSH STROKE SEPARATOR ═══════ -->
<div style="position:relative;height:40px;margin:0 4vw;overflow:visible">
<svg viewBox="0 0 1000 120" preserveAspectRatio="none" style="width:100%;height:40px;color:var(--ink);overflow:visible">
<use href="#brush-h"/>
</svg>
</div>
<!-- ═══════ FEATURES ═══════ -->
<section class="features" id="features">
<!-- Ink stain behind features -->
<div class="ink-el" style="width:180px;height:180px;top:-20px;left:10%">
<svg viewBox="0 0 200 200" style="color:var(--ink)"><use href="#stain-1"/></svg>
</div>
<div class="ink-el" style="width:100px;height:100px;bottom:10px;right:20%">
<svg viewBox="0 0 200 200" style="color:var(--cyan)"><use href="#splatter"/></svg>
</div>
<div class="feature reveal">
<div class="feature-icon">
<svg viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke-linecap="round" stroke-linejoin="round"/></svg>
</div>
<h3>Repairable.<br>Public Schematics.</h3>
<p>Designed to be opened, modified, and repaired. Built with standard, documented components. Full KiCAD schematics under CERN-OHL-W.</p>
</div>
<div class="feature reveal" style="transition-delay:.12s">
<div class="feature-icon">
<svg viewBox="0 0 24 24"><path d="M12 1a3 3 0 00-3 3v8a3 3 0 006 0V4a3 3 0 00-3-3z"/><path d="M19 10v2a7 7 0 01-14 0v-2M12 19v4M8 23h8" stroke-linecap="round" stroke-linejoin="round"/></svg>
</div>
<h3>Professional<br>Response.</h3>
<p>Studio-quality capture for independent artists. OPA1642 preamp, large diaphragm capsule. Frequency response published.</p>
</div>
<div class="feature reveal" style="transition-delay:.24s">
<div class="feature-icon">
<svg viewBox="0 0 24 24"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" stroke-linecap="round" stroke-linejoin="round"/></svg>
</div>
<h3>Solid.<br>Durable.</h3>
<p>Built to survive a lifetime. Brushed aluminium, hand-assembled in France. 5-year warranty. Every part replaceable.</p>
</div>
</section>
<!-- Brush stroke -->
<div style="position:relative;height:30px;margin:20px 4vw;overflow:visible">
<svg viewBox="0 0 1000 120" preserveAspectRatio="none" style="width:70%;height:30px;color:var(--cyan);overflow:visible;opacity:.5">
<use href="#brush-h"/>
</svg>
</div>
<!-- ═══════ EXPLODED VIEW ═══════ -->
<section class="exploded" id="exploded">
<!-- Ink elements -->
<div class="ink-el" style="width:50vw;height:50vh;top:-10%;left:-10%">
<svg viewBox="0 0 800 600" style="color:var(--cyan);opacity:.5"><use href="#wash-cyan"/></svg>
</div>
<div class="ink-el" style="width:300px;height:300px;bottom:-10%;right:20%">
<svg viewBox="0 0 200 200" style="color:var(--ink)"><use href="#enso"/></svg>
</div>
<div class="ink-el" style="width:15px;height:140px;left:35%;top:5%">
<svg viewBox="0 0 30 200" style="color:var(--ink)"><use href="#drip"/></svg>
</div>
<div class="exploded-vis reveal">
<svg viewBox="0 0 400 350" style="width:100%;max-width:420px">
<line x1="200" y1="20" x2="200" y2="330" stroke="var(--ink)" stroke-width=".3" stroke-dasharray="3 5" opacity=".1"/>
<ellipse cx="200" cy="45" rx="35" ry="20" fill="none" stroke="var(--ink)" stroke-width="1" opacity=".25"/>
<line x1="240" y1="45" x2="330" y2="45" stroke="var(--ink)" stroke-width=".5" opacity=".12"/>
<text x="335" y="48" font-family="var(--m)" font-size="8" fill="var(--ink50)">Large membrane capsule</text>
<rect x="170" y="100" width="60" height="35" rx="2" fill="none" stroke="var(--ink)" stroke-width="1" opacity=".25"/>
<rect x="180" y="108" width="8" height="5" rx="1" fill="var(--ink)" opacity=".12"/>
<rect x="195" y="110" width="12" height="8" rx="1" fill="var(--ink)" opacity=".08"/>
<circle cx="218" cy="115" r="4" fill="none" stroke="var(--ink)" stroke-width=".5" opacity=".15"/>
<line x1="235" y1="118" x2="330" y2="118" stroke="var(--ink)" stroke-width=".5" opacity=".12"/>
<text x="335" y="115" font-family="var(--m)" font-size="8" fill="var(--ink50)">OPA1642 preamp PCB</text>
<text x="335" y="126" font-family="var(--m)" font-size="7" fill="var(--cyan)" opacity=".7">Public schematic</text>
<rect x="175" y="165" width="50" height="25" rx="2" fill="none" stroke="var(--ink)" stroke-width="1" opacity=".25"/>
<line x1="230" y1="178" x2="330" y2="178" stroke="var(--ink)" stroke-width=".5" opacity=".12"/>
<text x="335" y="175" font-family="var(--m)" font-size="8" fill="var(--ink50)">Hex inverter PCB</text>
<text x="335" y="186" font-family="var(--m)" font-size="7" fill="var(--cyan)" opacity=".7">48V phantom power</text>
<rect x="178" y="220" width="44" height="80" rx="4" fill="none" stroke="var(--ink)" stroke-width="1" opacity=".2"/>
<line x1="60" y1="260" x2="173" y2="260" stroke="var(--ink)" stroke-width=".5" opacity=".12"/>
<text x="8" y="257" font-family="var(--m)" font-size="8" fill="var(--ink50)">Aluminium body</text>
<text x="8" y="268" font-family="var(--m)" font-size="7" fill="var(--cyan)" opacity=".7">Hand-finished</text>
<circle cx="200" cy="325" r="12" fill="none" stroke="var(--ink)" stroke-width="1" opacity=".25"/>
<g fill="var(--ink)" opacity=".15"><circle cx="196" cy="321" r="1.5"/><circle cx="204" cy="321" r="1.5"/><circle cx="200" cy="328" r="1.5"/></g>
<line x1="60" y1="325" x2="185" y2="325" stroke="var(--ink)" stroke-width=".5" opacity=".12"/>
<text x="8" y="322" font-family="var(--m)" font-size="8" fill="var(--ink50)">XLR 5-pin connector</text>
<text x="8" y="333" font-family="var(--m)" font-size="7" fill="var(--cyan)" opacity=".7">Neutrik</text>
</svg>
</div>
<div class="exploded-text reveal" style="transition-delay:.2s">
<h2>Every Part<br>Documented<span style="color:var(--cyan)">.</span></h2>
<p>Full KiCAD schematics, Gerber files, and bill of materials published under CERN-OHL-W-2.0. Every component is standard and replaceable.</p>
<p>The repair guide is in the box. Schematics available on our public repository.</p>
<button class="schema-btn">
<svg viewBox="0 0 24 24" stroke-linecap="round"><path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3"/></svg>
View schematics on Codeberg
</button>
</div>
</section>
<!-- Diagonal brush stroke -->
<div style="position:relative;height:80px;margin:0 4vw;overflow:visible">
<svg viewBox="0 0 400 300" preserveAspectRatio="none" style="width:40%;height:80px;color:var(--ink);overflow:visible">
<use href="#brush-diag"/>
</svg>
<div class="ink-el" style="width:60px;height:60px;right:30%;top:0">
<svg viewBox="0 0 200 200" style="color:var(--ink)"><use href="#splatter"/></svg>
</div>
</div>
<!-- ═══════ VEZA + FOUNDATION ═══════ -->
<section class="split" id="veza">
<div class="ink-el" style="width:300px;height:300px;top:-40px;left:-20px">
<svg viewBox="0 0 800 600" style="color:var(--cyan);opacity:.6"><use href="#wash-cyan"/></svg>
</div>
<div class="ink-el" style="width:120px;height:120px;top:20px;right:40%">
<svg viewBox="0 0 200 200" style="color:var(--cyan)"><use href="#splatter"/></svg>
</div>
<div class="split-card reveal">
<div class="split-ey">Platform</div>
<div class="split-title">VEZA<span class="dot">.</span><br>CONNECT<span class="dot">.</span></div>
<p class="split-text">A community for independent artists. Share samples, trade skills, stream music. No tracking, no ads, no algorithms. Self-hosted.</p>
<a href="#" class="split-link">Visit Veza</a>
</div>
<div class="split-card reveal" style="transition-delay:.15s">
<div class="split-ey">Foundation</div>
<div class="statement">
<span class="big">65%</span> profits foundation.<br>
Creator life cap at 10M EUR.<br>
Total transparency.<br>
Born in France. Built by hand.
</div>
<div style="margin-top:24px">
<div class="f-stat"><span class="f-stat-l">Education</span><span class="f-stat-v">30%</span></div>
<div class="f-stat"><span class="f-stat-l">Artist support</span><span class="f-stat-v">25%</span></div>
<div class="f-stat"><span class="f-stat-l">Open-source</span><span class="f-stat-v">25%</span></div>
<div class="f-stat"><span class="f-stat-l">Repair workshops</span><span class="f-stat-v">15%</span></div>
</div>
</div>
</section>
<!-- ═══════ TRANSPARENCY ═══════ -->
<div class="transp reveal">
<div class="ink-el" style="width:80px;height:80px;left:20%;top:-30px">
<svg viewBox="0 0 200 200" style="color:var(--ink)"><use href="#stain-1"/></svg>
</div>
<div class="t-counter">
<div class="t-counter-label">Total reversed to foundation</div>
<div class="t-counter-val" id="counter">0</div>
<div class="t-counter-sub">every euro is publicly auditable</div>
</div>
<div class="t-right">
<span class="big">65%</span> OF ALL PROFITS<br>TO THE TALAS FOUNDATION.<br>EVERY TRANSACTION<br>IS PUBLIC.
</div>
</div>
<!-- Brush stroke -->
<div style="position:relative;height:30px;margin:40px 4vw 0;overflow:visible">
<svg viewBox="0 0 1000 120" preserveAspectRatio="none" style="width:55%;height:25px;color:var(--ink);overflow:visible;margin-left:auto;display:block">
<use href="#brush-h"/>
</svg>
</div>
<!-- ═══════ JOURNAL ═══════ -->
<section class="journal" id="journal">
<div class="ink-el" style="width:160px;height:160px;top:20px;right:5%">
<svg viewBox="0 0 200 200" style="color:var(--cyan)"><use href="#stain-1"/></svg>
</div>
<div class="journal-head reveal">
<div class="journal-title">Journal & Schematics</div>
<a href="#" class="journal-link">View all</a>
</div>
<div class="journal-grid">
<div class="article reveal">
<div class="article-img">
<!-- ink stain as placeholder -->
<svg viewBox="0 0 300 180" style="width:100%;height:100%;color:var(--ink)"><use href="#stain-2"/></svg>
</div>
<div class="article-cat">Hardware</div>
<div class="article-t">Inside the TALAS One: A Complete Teardown</div>
<div class="article-ex">Every component, every decision explained. From capsule to PCB layout.</div>
</div>
<div class="article reveal" style="transition-delay:.1s">
<div class="article-img">
<svg viewBox="0 0 200 200" style="width:80%;height:80%;margin:10%;color:var(--cyan);opacity:.6"><use href="#enso"/></svg>
</div>
<div class="article-cat">Philosophy</div>
<div class="article-t">The Craft of Open Sourcing Hardware</div>
<div class="article-ex">Why we publish our schematics and what it means for the industry.</div>
</div>
<div class="article reveal" style="transition-delay:.2s">
<div class="article-img">
<svg viewBox="0 0 200 200" style="width:100%;height:100%;color:var(--ink)"><use href="#splatter"/><use href="#stain-1" x="-20" y="20"/></svg>
</div>
<div class="article-cat">Community</div>
<div class="article-t">Founding Artists: The First 50</div>
<div class="article-ex">Meet the artists who shaped Veza before it opened to the world.</div>
</div>
</div>
</section>
<!-- ═══════ FOOTER ═══════ -->
<footer class="footer" id="footer">
<div>
<div class="footer-brand"><svg viewBox="0 0 80 48"><use href="#sym"/></svg><span>TALAS</span></div>
<div class="footer-copy">Materiel audio reparable.<br>Fait main en France.</div>
</div>
<div class="footer-cols">
<div><div class="footer-col-t">Products</div><a href="#">Talas Lite</a><a href="#">Talas One</a><a href="#">Schematics</a><a href="#">Repair Guide</a></div>
<div><div class="footer-col-t">Veza</div><a href="#">Community</a><a href="#">Troc</a><a href="#">Samples</a><a href="#">Streaming</a></div>
<div><div class="footer-col-t">Talas</div><a href="#">Manifeste</a><a href="#">Foundation</a><a href="#">Journal</a><a href="#">Contact</a></div>
</div>
<div class="footer-btm">TALAS Group — CERN-OHL-W-2.0 / AGPL-3.0 — 65% profits to foundation</div>
</footer>
<script>
/* Scroll reveal */
const obs=new IntersectionObserver(es=>{es.forEach(e=>{if(e.isIntersecting)e.target.classList.add('vis')})},{threshold:.08,rootMargin:'0px 0px -30px 0px'});
document.querySelectorAll('.reveal').forEach(el=>obs.observe(el));
/* Counter */
const cEl=document.getElementById('counter');let cd=false;
new IntersectionObserver(es=>{if(es[0].isIntersecting&&!cd){cd=true;const s=performance.now(),tgt=847;
!function f(t){const p=Math.min((t-s)/2000,1);cEl.textContent=Math.round((1-Math.pow(1-p,3))*tgt).toLocaleString('fr-FR')+' EUR';if(p<1)requestAnimationFrame(f)}(s)}},{threshold:.5}).observe(cEl);
</script>
</body>
</html>

View file

@ -0,0 +1,280 @@
# Calcul des marges unitaires — Talas Lite & Talas One
> Décomposition complète du coût de revient et de la marge par unité vendue.
> Sources : BOM réel (factures Mouser/PCBWay mai 2025), estimations fournisseurs.
> Dernière mise à jour : avril 2026.
**Rappel statut fiscal** : micro-entreprise, franchise en base de TVA (tous les prix sont HT = TTC pour le client tant que CA < 37 500 ).
---
## 1. Talas One — Condenser large membrane
### 1.1 Coût composants (BOM)
| Poste | Détail | Coût unitaire | Source |
|-------|--------|:-------------:|--------|
| PCB préampli AliceOPA | PCBWay, Rev3, lot 100 pcs | 1.08 € | Facture réelle |
| OPA1642AIDR (op-amp) | Mouser, QTY 10+ | 1.76 € | Facture réelle |
| Résistances Vishay (lot) | 10 refs × 0.15-0.30 € | 2.20 € | Facture réelle |
| Condensateurs (film + electro) | 8 refs × 0.20-0.60 € | 3.50 € | Facture réelle |
| Diodes / régulateur | 3 refs | 1.00 € | Facture réelle |
| Capsule CY002 34mm | 797 Audio, lot 50 | 15.00 € | Estimation fournisseur |
| Corps métal (reconditionné) | AliExpress, lot 20 | 10.00 € | Estimation |
| Grille métal + bonnette interne | Lot 50 | 2.00 € | Estimation |
| Connecteur XLR 5-pin | Neutrik ou équivalent | 3.00 € | Estimation |
| Câblage interne + soudure | Fil, gaine, soudure | 1.50 € | Estimation |
| Visserie + joints | Standard M2/M3 | 0.50 € | Estimation |
| **Sous-total composants** | | **41.54 €** | |
### 1.2 Coût packaging
| Poste | Détail | Coût unitaire |
|-------|--------|:-------------:|
| Boîte carton kraft | Non blanchi, taille micro | 1.50 € |
| Pochette tissu noire | Coton, logo brodé cyan | 3.00 € |
| Livret (quick start + specs) | 12 pages, papier recyclé | 0.80 € |
| Sticker logo | Monochrome, 50mm | 0.20 € |
| Carte garantie / numéro de série | Imprimée, tampon | 0.30 € |
| Câble XLR 3m (si inclus) | Basique, pas premium | 2.50 € |
| **Sous-total packaging** | | **8.30 €** |
### 1.3 Coût main-d'œuvre (assemblage)
| Poste | Temps | Coût |
|-------|-------|:----:|
| Soudure PCB (composants traversants) | 30 min | 5.00 € |
| Assemblage micro (capsule, câblage, corps) | 20 min | 3.50 € |
| Test audio fonctionnel | 10 min | 1.50 € |
| Emballage + contrôle final | 10 min | 1.50 € |
| **Sous-total main-d'œuvre** | **~70 min** | **11.50 €** |
*(Base : SMIC horaire ~12 €/h brut arrondi. Même si tu te paies pas encore, c'est la valeur de ton temps.)*
### 1.4 Coût logistique et plateforme
| Poste | Calcul | Coût unitaire |
|-------|--------|:-------------:|
| Frais Mollie (CB) | 1.8% de 150€ + 0.25€ | 2.95 € |
| Expédition (Colissimo, payé par le client) | 0 € (facturé au client) | 0.00 € |
| Emballage expédition (carton + calage) | Carton + papier kraft | 1.00 € |
| Étiquette Colissimo (si prépayé) | Intégré dans le prix client | 0.00 € |
| **Sous-total logistique** | | **3.95 €** |
### 1.5 Synthèse Talas One
```
┌──────────────────────────────────────────────────┐
│ TALAS ONE — Prix de vente : 150.00 € │
│ │
│ Composants (BOM) 41.54 € (27.7%) │
│ Packaging 8.30 € (5.5%) │
│ Main-d'œuvre assemblage 11.50 € (7.7%) │
│ Logistique / fees 3.95 € (2.6%) │
│ ────────────────────────────────────────── │
│ Coût de revient total 65.29 € (43.5%) │
│ │
│ ═══════════════════════════════════════════ │
│ MARGE BRUTE 84.71 € (56.5%) │
│ │
│ Dont : │
│ Réserve SAV/garantie (5%) 7.50 € │
│ Marketing/contenu (10%) 15.00 € │
│ R&D produits futurs (10%) 15.00 € │
│ Trésorerie / salaire 47.21 € (31.5%) │
└──────────────────────────────────────────────────┘
```
---
## 2. Talas Lite — Electret
### 2.1 Coût composants (BOM)
| Poste | Détail | Coût unitaire |
|-------|--------|:-------------:|
| PCB préampli THAT1512 | PCBWay, lot 100 | 0.80 € |
| THAT1512 (préampli IC) | Mouser, QTY 10+ | 3.50 € |
| Résistances / condensateurs | ~8 refs | 2.00 € |
| Capsule electret JLI-2555BXZ3-GP | Lot 50 | 5.00 € |
| Corps métal (reconditionné) | AliExpress, lot 20 | 8.00 € |
| Grille + mousse | Lot 50 | 1.50 € |
| Connecteur (USB-C ou XLR 3) | Selon version | 2.00 € |
| Module USB-C audio (si USB) | PCM2912A ou équivalent | 3.00 € |
| Câblage interne | | 1.00 € |
| Visserie | | 0.40 € |
| **Sous-total composants** | | **27.20 €** |
### 2.2 Packaging + MO + logistique
| Poste | Coût unitaire |
|-------|:-------------:|
| Packaging (même style, boîte plus petite) | 6.00 € |
| Main-d'œuvre assemblage (~50 min) | 9.00 € |
| Frais Mollie (1.8% de 100€ + 0.25€) | 2.05 € |
| Emballage expédition | 0.80 € |
| **Sous-total** | **17.85 €** |
### 2.3 Synthèse Talas Lite
```
┌──────────────────────────────────────────────────┐
│ TALAS LITE — Prix de vente : 100.00 € │
│ │
│ Composants (BOM) 27.20 € (27.2%) │
│ Packaging 6.00 € (6.0%) │
│ Main-d'œuvre assemblage 9.00 € (9.0%) │
│ Logistique / fees 2.85 € (2.9%) │
│ ────────────────────────────────────────── │
│ Coût de revient total 45.05 € (45.1%) │
│ │
│ ═══════════════════════════════════════════ │
│ MARGE BRUTE 54.95 € (54.9%) │
│ │
│ Dont : │
│ Réserve SAV/garantie (5%) 5.00 € │
│ Marketing/contenu (10%) 10.00 € │
│ R&D produits futurs (10%) 10.00 € │
│ Trésorerie / salaire 29.95 € (30.0%) │
└──────────────────────────────────────────────────┘
```
---
## 3. Comparaison par produit
| | Talas Lite | Talas One |
|---|:---:|:---:|
| **Prix de vente** | 100 € | 150 € |
| **Coût de revient** | 45.05 € | 65.29 € |
| **Marge brute** | 54.95 € | 84.71 € |
| **Marge brute %** | 54.9% | 56.5% |
| **Temps assemblage** | 50 min | 70 min |
| **Marge / heure de travail** | 66 € | 73 € |
| **Priorité production** | Secondaire | **Primaire** |
**Conclusion** : le Talas One a la meilleure marge horaire. Le Talas Lite est une porte d'entrée mais ne doit pas cannibaliser le One.
---
## 4. Seuil de rentabilité
### 4.1 Charges fixes mensuelles (estimation)
| Poste | Coût / mois |
|-------|:-----------:|
| Électricité serveurs (R720 ×2) | 135 € |
| Internet fibre | 40 € |
| Domaine + DNS | 3 € |
| Assurance RC Pro | 25 € |
| Comptabilité / AE | 0 € (auto-déclaration) |
| Petit outillage consommable (soudure, etc.) | 30 € |
| **Total charges fixes** | **~233 €/mois** |
### 4.2 Break-even par scénario
| Scénario | Mix produit | Marge brute / unité | Unités / mois pour break-even |
|----------|-------------|:--------------------:|:-----------------------------:|
| 100% Talas One | 150 € | 84.71 € | **3 unités** |
| 100% Talas Lite | 100 € | 54.95 € | **5 unités** |
| Mix 60% One / 40% Lite | — | 72.82 € | **4 unités** |
**→ Break-even : 3-5 micros / mois.** C'est faisable dès les premiers mois.
### 4.3 Scénarios de CA annuel
| Scénario | Unités / mois | CA annuel | Marge brute annuelle |
|----------|:------------:|:---------:|:--------------------:|
| **Prudent** | 5 | 7 800 € | 4 284 € |
| **Réaliste** | 15 | 23 400 € | 12 852 € |
| **Optimiste** | 40 | 62 400 € | 34 272 € |
*(Mix 60% One / 40% Lite, prix moyen pondéré 130 €)*
**Attention** : au-delà de ~288 unités/an (37 500 € CA), passage en TVA assujettie. Prévoir ce seuil.
---
## 5. Options et accessoires — marges additionnelles
| Option | Prix vente | Coût | Marge | Marge % |
|--------|:---------:|:----:|:-----:|:-------:|
| Pochette tissu (vendue séparément) | 15 € | 3.50 € | 11.50 € | 77% |
| Suspension élastique | 25 € | 8.00 € | 17.00 € | 68% |
| Bonnette anti-vent | 10 € | 2.00 € | 8.00 € | 80% |
| Câble XLR premium 3m | 20 € | 5.00 € | 15.00 € | 75% |
| Pièce de rechange : capsule | 25 € | 15.00 € | 10.00 € | 40% |
| Pièce de rechange : PCB préampli | 15 € | 5.00 € | 10.00 € | 67% |
**Les accessoires ont les meilleures marges.** Encourager le cross-sell.
Les pièces de rechange à faible marge sont volontaires : la réparabilité est une promesse, pas un centre de profit.
---
## 6. Sensibilité aux prix
### 6.1 Que se passe-t-il si un composant coûte plus cher ?
| Variable | Base | +50% | Impact marge One |
|----------|:----:|:----:|:----------------:|
| Capsule CY002 | 15 € | 22.50 € | Marge → 77.21 € (-8.8%) |
| Corps métal | 10 € | 15 € | Marge → 79.71 € (-5.9%) |
| Op-amp OPA1642 | 1.76 € | 2.64 € | Marge → 83.83 € (-1.0%) |
**Le plus sensible** : la capsule. Négocier le prix en lot ou trouver un second fournisseur.
### 6.2 Que se passe-t-il si on baisse le prix ?
| Prix One | Marge brute | Marge % | Viable ? |
|:--------:|:-----------:|:-------:|:--------:|
| 170 € | 104.71 € | 61.6% | Très confortable |
| 150 € | 84.71 € | 56.5% | **Cible actuelle** |
| 130 € | 64.71 € | 49.8% | Correct mais tendu |
| 120 € | 54.71 € | 45.6% | Minimum absolu |
| 108 € (= prix RODE NT1 Sig) | 42.71 € | 39.5% | Non viable |
**→ Ne pas descendre en-dessous de 130 €.** À 150 €, la marge est saine.
---
## 7. Coûts cachés à surveiller
| Coût caché | Estimation | Fréquence |
|-----------|:----------:|-----------|
| SAV / réparation gratuite (garantie) | 5-10 € / cas | ~5% des ventes |
| Retour / remboursement (rétractation) | Coût aller-retour | ~3% des ventes |
| Perte / casse transport | Coût total unité | ~1% des envois |
| Stock dormant (composants commandés non utilisés) | Variable | Risque si commande grosse |
| Impayés / fraude CB | ~0.5% du CA | Continu |
| Certification CE / RoHS | 200-300 € | Une fois |
**Provision recommandée** : 5% du CA en réserve pour ces aléas (déjà inclus dans la ligne "SAV/garantie" ci-dessus).
---
## 8. Règles de pricing
### 8.1 Règles fixes
1. **Le prix est le même partout** — pas de promo, pas de codes, pas de "founders price"
2. **Transparence des coûts** — la page produit peut afficher la ventilation (valeur Talas)
3. **Les pièces de rechange sont au coût** — pas de marge abusive sur les réparations
4. **Pas de baisse de prix** dans les 12 premiers mois (protéger les early adopters)
### 8.2 Règles souples
5. Prix ajustable +/- 10 € après 6 mois de données
6. Prix accessoires ajustable à tout moment
7. Bundle micro + accessoires possible avec -5% (arrondi)
---
## Voir aussi
- [[09_MODELE_ECONOMIQUE/BUSINESS_PLAN_TALAS]] — business plan complet
- [[09_MODELE_ECONOMIQUE/ANALYSE_MARCHE]] — positionnement prix vs concurrence
- [[09_MODELE_ECONOMIQUE/SIMULATION_CASHFLOW_24_MOIS]] — projections trésorerie
- [[02_PRODUITS_PHYSIQUES/GAMME_PRODUITS]] — fiche des deux lignes
- [[Shop/Paiement/SPEC_PAIEMENT]] — fees Mollie pris en compte ici
- [[08_CONFORMITE_JURIDIQUE/CONFORMITE_CE_ROHS_GUIDE]] — coût CE/RoHS

View file

@ -0,0 +1,320 @@
# Plan d'audit sécurité — Veza
> Checklist OWASP, plan pentest, calendrier d'audits pour la plateforme Veza.
> À exécuter avant chaque phase de lancement (beta, publique, shop).
> Dernière mise à jour : avril 2026.
---
## 1. Périmètre
### 1.1 Composants audités
| Composant | Stack | Criticité |
|-----------|-------|:---------:|
| Backend API | Go/Gin | **Critique** |
| Stream Server | Rust/Axum | Haute |
| Frontend Web | React/Vite | Moyenne |
| Base de données | PostgreSQL 16 | **Critique** |
| Cache/sessions | Redis 7 | Haute |
| Storage | MinIO S3 | Haute |
| Messaging | RabbitMQ 3 | Moyenne |
| Reverse proxy | HAProxy | Haute |
| WAF | Coraza | Haute |
| VPN | WireGuard | Haute |
| OS / infra | Debian, Docker | Haute |
### 1.2 Hors périmètre V1
- Applications desktop (Electron) — pas encore déployé
- AudioGridder — feature V2
- Applications mobiles — pas encore développé
---
## 2. Checklist OWASP Top 10 (2021)
### A01:2021 — Broken Access Control
| # | Vérification | Comment tester | Statut |
|---|-------------|----------------|:------:|
| 1 | Accès horizontal : user A ne peut pas voir les données de user B | Tester GET/PUT/DELETE avec ID d'un autre user | ☐ |
| 2 | Accès vertical : user normal ne peut pas accéder aux endpoints admin | Tester sans rôle admin | ☐ |
| 3 | IDOR sur tous les endpoints à paramètre :id | Fuzzer les IDs (UUID valides d'autres users) | ☐ |
| 4 | Force browsing : pages admin non accessibles sans auth | Scanner /admin/*, /internal/* | ☐ |
| 5 | CORS : origins autorisées uniquement les domaines Talas | Vérifier Access-Control-Allow-Origin | ☐ |
| 6 | Méthodes HTTP : seules GET/POST/PUT/DELETE autorisées | Tester OPTIONS, TRACE, PATCH | ☐ |
### A02:2021 — Cryptographic Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 7 | TLS 1.2+ obligatoire, pas de TLS 1.0/1.1 | ☐ |
| 8 | Certificats Let's Encrypt valides, auto-renew | ☐ |
| 9 | Pas de secrets en clair dans le code ou les logs | ☐ |
| 10 | Passwords hashés bcrypt cost ≥12 | ☐ |
| 11 | Tokens TOTP chiffrés AES-256-GCM en DB | ☐ |
| 12 | JWT signés RS256, pas HS256 en prod | ☐ |
| 13 | Pas de données sensibles dans les JWT (payload minimal) | ☐ |
### A03:2021 — Injection
| # | Vérification | Statut |
|---|-------------|:------:|
| 14 | SQL injection : GORM paramétré, pas de raw queries non-escaped | ☐ |
| 15 | NoSQL injection : N/A (pas de NoSQL) | ✓ |
| 16 | OS command injection : pas de exec() avec user input | ☐ |
| 17 | LDAP injection : N/A | ✓ |
| 18 | XSS : sanitisation de tous les inputs rendus HTML | ☐ |
| 19 | SSRF : pas de fetch d'URL arbitraire fournie par l'utilisateur | ☐ |
### A04:2021 — Insecure Design
| # | Vérification | Statut |
|---|-------------|:------:|
| 20 | Rate limiting sur login, register, reset password | ☐ |
| 21 | Verrouillage de compte après N échecs | ☐ |
| 22 | Pas de réponse différente "email existe" vs "email inconnu" | ☐ |
| 23 | Captcha ou proof-of-work sur formulaires publics (V1.5) | ☐ |
### A05:2021 — Security Misconfiguration
| # | Vérification | Statut |
|---|-------------|:------:|
| 24 | Headers sécurité : HSTS, CSP, X-Content-Type, X-Frame | ☐ |
| 25 | Pas de stack traces exposées en production | ☐ |
| 26 | Pas de debug mode en production | ☐ |
| 27 | Docker : pas de containers root, images signées | ☐ |
| 28 | Ports exposés : uniquement 80/443 vers l'extérieur | ☐ |
| 29 | MinIO : pas de bucket public sauf previews | ☐ |
| 30 | Redis : auth activée, pas d'accès externe | ☐ |
| 31 | PostgreSQL : auth MD5/scram, pas d'accès externe | ☐ |
### A06:2021 — Vulnerable and Outdated Components
| # | Vérification | Statut |
|---|-------------|:------:|
| 32 | Go : `govulncheck` sans vulnérabilité critique | ☐ |
| 33 | Rust : `cargo audit` sans vulnérabilité critique | ☐ |
| 34 | NPM : `npm audit` sans critical/high | ☐ |
| 35 | Docker images : `trivy image scan` clean | ☐ |
| 36 | OS packages : mise à jour sécurité < 7 jours | |
### A07:2021 — Identification and Authentication Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 37 | Password policy appliquée (12 car, complexité) | ☐ |
| 38 | Sessions expirent (access 15min, refresh 30j) | ☐ |
| 39 | Logout invalide le refresh token | ☐ |
| 40 | Cookies HTTP-only + Secure + SameSite=Lax | ☐ |
| 41 | OAuth state parameter vérifié | ☐ |
| 42 | 2FA fonctionne et bloque sans code | ☐ |
### A08:2021 — Software and Data Integrity Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 43 | Uploads scannés ClamAV avant stockage | ☐ |
| 44 | Checksums vérifiés après upload MinIO | ☐ |
| 45 | Webhooks Mollie vérifiés (re-call API) | ☐ |
| 46 | Dépendances : lockfiles commités, pas de floating versions | ☐ |
### A09:2021 — Security Logging and Monitoring Failures
| # | Vérification | Statut |
|---|-------------|:------:|
| 47 | Audit log sur login, logout, password change, admin actions | ☐ |
| 48 | Logs structurés (JSON) en production | ☐ |
| 49 | Alertes Sentry sur erreurs 500 | ☐ |
| 50 | Fail2ban actif sur SSH et HTTP brute-force | ☐ |
| 51 | Métriques Prometheus exportées et dashboardées | ☐ |
### A10:2021 — Server-Side Request Forgery (SSRF)
| # | Vérification | Statut |
|---|-------------|:------:|
| 52 | Pas de proxy/fetch d'URL arbitraire | ☐ |
| 53 | Callbacks OAuth limités aux domaines autorisés | ☐ |
| 54 | Webhooks Mollie : vérification IP source (optionnel) | ☐ |
---
## 3. Tests de pénétration
### 3.1 Scope pentest V1
| Cible | Type de test |
|-------|-------------|
| API REST (tout `/api/v1/*`) | Blackbox + greybox (avec un compte user) |
| Auth (login, register, 2FA, OAuth) | Blackbox |
| Upload fichiers (tracks, samples, cloud) | Greybox |
| WebSocket streaming | Blackbox |
| Infra réseau (ports, services) | Blackbox depuis extérieur |
### 3.2 Outils
| Outil | Usage | Self-hosted ? |
|-------|-------|:-------------:|
| **Nmap** | Scan ports + services | ✓ |
| **OWASP ZAP** | Proxy scanner web, fuzzer | ✓ |
| **Nuclei** | Scan vulnérabilités templates | ✓ |
| **SQLMap** | Injection SQL (validation) | ✓ |
| **ffuf** | Fuzzer endpoints / dirs | ✓ |
| **Burp Suite Community** | Proxy manuel | ✓ |
| **Trivy** | Scan containers Docker | ✓ |
| **govulncheck** | Vulns Go | ✓ |
| **cargo audit** | Vulns Rust | ✓ |
| **npm audit** | Vulns JS | ✓ |
### 3.3 Déroulement d'un pentest
```
Phase 1 — Reconnaissance (2h)
→ Nmap scan réseau externe
→ ffuf directory brute-force
→ Nuclei templates scan
Phase 2 — Authentication (2h)
→ Brute-force login (rate limit test)
→ Password reset flow (token enum)
→ Session hijacking attempt
→ 2FA bypass attempts
→ OAuth redirect manipulation
Phase 3 — Authorization (3h)
→ IDOR sur chaque endpoint avec :id
→ Escalation user → admin
→ Cross-user data access
→ File access cross-tenant (cloud, uploads)
Phase 4 — Input validation (2h)
→ XSS sur tous les champs affichables
→ SQL injection sur search + filtres
→ File upload : extensions interdites, LFI, path traversal
→ Payload size limits
Phase 5 — Business logic (2h)
→ Stock manipulation (réservation concurrente)
→ Payment flow bypass
→ Double-submit paiement
→ Rate limit contournement
Phase 6 — Infrastructure (1h)
→ Docker escape (container → host)
→ Redis accès sans auth
→ PostgreSQL accès direct
→ MinIO bucket listing
Phase 7 — Rapport (2h)
→ Rédaction des findings
→ Classification CVSS
→ Recommandations de remediation
```
**Durée totale** : ~14 heures (2 jours de travail intensif).
---
## 4. Calendrier d'audit
### 4.1 Audits obligatoires
| Quand | Type | Scope |
|-------|------|-------|
| **Avant beta** (mai 2026) | OWASP checklist complète | Tout |
| **Avant ouverture publique** (juin 2026) | Pentest léger (phases 1-4) | API + auth |
| **Avant lancement shop** (août 2026) | Pentest complet + focus paiement | Shop + payment |
| **Trimestriel** | Scan vulnérabilités (Trivy, govulncheck, npm audit) | Dépendances |
| **Après chaque release majeure** | Revue OWASP ciblée | Code modifié |
### 4.2 Audits continus (automatisés en CI)
| Check | Outil | Fréquence |
|-------|-------|-----------|
| Vulnérabilités Go | `govulncheck` | Chaque PR |
| Vulnérabilités Rust | `cargo audit` | Chaque PR |
| Vulnérabilités NPM | `npm audit --audit-level=high` | Chaque PR |
| Docker images | `trivy image` | Chaque build |
| Secrets dans le code | `gitleaks` | Chaque PR |
| Headers sécurité | Script custom (curl + check) | Daily cron |
| Certificat TLS expiration | `openssl s_client` | Weekly cron |
---
## 5. Classification des vulnérabilités
| Niveau | CVSS | Délai de correction | Exemples |
|--------|:----:|:-------------------:|----------|
| **Critique** | 9.0-10.0 | **24h** | RCE, SQLi, auth bypass, données exposées |
| **Haute** | 7.0-8.9 | **72h** | XSS stocké, IDOR critique, CSRF paiement |
| **Moyenne** | 4.0-6.9 | **2 semaines** | XSS réfléchi, info leak mineur, rate limit faible |
| **Basse** | 0.1-3.9 | **1 mois** | Headers manquants, verbose errors, enumeration |
---
## 6. Reporting
### 6.1 Format de rapport pentest
```markdown
## Finding: [Titre]
**Sévérité**: Critique / Haute / Moyenne / Basse
**CVSS**: X.X
**Composant**: Backend API / Frontend / Infra
**Endpoint**: POST /api/v1/...
**CWE**: CWE-XXX
### Description
[Ce qui a été trouvé]
### Preuve
[Commande/screenshot/payload]
### Impact
[Ce qu'un attaquant pourrait faire]
### Remédiation
[Comment corriger]
### Statut
☐ À corriger / ☐ Corrigé / ☐ Accepté (risque mitigé)
```
### 6.2 Suivi
Un fichier `FINDINGS_LOG.md` dans ce dossier trace toutes les vulnérabilités trouvées :
```markdown
| # | Date | Sévérité | Titre | Statut | Corrigé le |
|---|------|----------|-------|--------|-----------|
| 001 | 2026-05-15 | Haute | IDOR sur /tracks/:id | Corrigé | 2026-05-16 |
| 002 | ... | ... | ... | ... | ... |
```
---
## 7. Règles de Coraza WAF à valider
| Règle | Vérifie |
|-------|---------|
| OWASP CRS 4.x activé | ☐ |
| Anomaly scoring threshold = 5 | ☐ |
| SQL injection rules actives | ☐ |
| XSS rules actives | ☐ |
| Path traversal rules actives | ☐ |
| File upload rules actives | ☐ |
| Rate limiting intégré (ou HAProxy) | ☐ |
| Logging des blocked requests | ☐ |
| False positives identifiés et whitelistés | ☐ |
---
## Voir aussi
- [[Auth_&_Core/SPEC_AUTH_CORE]] — implémentation auth
- [[04_INFRA_DEPLOIEMENT/Sécurité]] — hardening infra
- [[04_INFRA_DEPLOIEMENT/Sécurité_WAF_Coraza]] — config WAF
- [[08_CONFORMITE_JURIDIQUE/RGPD]] — obligations données personnelles
- [[ARCHITECTURE_VEZA]] — composants à auditer

View file

@ -0,0 +1,394 @@
# Scénarios de tests fonctionnels — Veza
> Tests par module : critères d'acceptation, cas limites, flows à valider.
> Chaque scénario = un test qui doit passer avant mise en production.
> Dernière mise à jour : avril 2026.
---
## Organisation
### Priorité des tests
| Priorité | Signification | Quand exécuter |
|:--------:|--------------|----------------|
| **P0** | Bloquant production — si échec, pas de deploy | Chaque PR |
| **P1** | Critique — à corriger dans les 24h si regression | Chaque release |
| **P2** | Important — à corriger avant la prochaine release | Hebdomadaire |
| **P3** | Nice-to-have — à corriger quand possible | Mensuel |
### Format d'un scénario
```
[ID] Titre
Priorité: PX | Type: unit/integ/e2e
Préconditions: ...
Étapes:
1. ...
2. ...
Résultat attendu: ...
Cas limites: ...
```
---
## Module 1 — Authentification
### AUTH-001 — Inscription email + password
**P0 | e2e**
- Préconditions : aucun compte existant
- Étapes :
1. POST /auth/register { email, password, username }
2. Vérifier email reçu (lien de vérification)
3. Cliquer le lien
4. Vérifier que le compte est actif
- Résultat : compte créé, JWT retourné, email vérifié
- Cas limites :
- Email déjà pris → erreur 409
- Username déjà pris → erreur 409
- Password < 12 car erreur 400
- Password pwned (HIBP) → warning (V1.5)
- Email invalide → erreur 400
- Lien de vérification expiré (> 24h) → erreur + lien "renvoyer"
### AUTH-002 — Login + JWT
**P0 | integ**
- Étapes :
1. POST /auth/login { email, password }
2. Vérifier cookies HTTP-only (access + refresh)
3. GET /auth/me avec cookie
- Résultat : user info retournée
- Cas limites :
- Mauvais password → 401 (pas de distinction "email inconnu")
- Compte verrouillé (5 échecs) → 429 + message "réessaie dans 15 min"
- Compte non vérifié → 403 "vérifie ton email"
### AUTH-003 — Refresh token
**P0 | integ**
- Étapes :
1. Login → obtenir access + refresh
2. Attendre expiration access (ou simuler)
3. POST /auth/refresh avec refresh cookie
- Résultat : nouveau access token, refresh token tourné
- Cas limites :
- Refresh expiré → 401
- Refresh révoqué (post-logout) → 401
- Double utilisation du même refresh → 401 + révoquer TOUTES les sessions (detection replay)
### AUTH-004 — 2FA TOTP
**P1 | integ**
- Étapes :
1. POST /auth/2fa/setup → QR code
2. POST /auth/2fa/verify { code } → activation
3. Logout + login → reçoit { requires_2fa: true }
4. POST /auth/login/2fa { temp_token, code }
- Résultat : login complet
- Cas limites :
- Code TOTP incorrect → 401
- Code TOTP expiré (> 30s window) → 401
- Backup code utilisé → OK, code invalidé
- Tous backup codes utilisés → message "configure un nouveau 2FA"
### AUTH-005 — OAuth Discord
**P1 | e2e**
- Étapes :
1. GET /auth/oauth/discord → redirect Discord
2. User autorise → callback avec code
3. Backend échange code → crée/lie le compte
- Résultat : JWT retourné, compte actif
- Cas limites :
- State mismatch → 400
- Discord down → erreur propre "service temporairement indisponible"
- Email Discord déjà lié à un compte local → propose de lier
### AUTH-006 — Rate limiting auth
**P0 | integ**
- Étapes :
1. Envoyer 6 POST /auth/login (mauvais password)
- Résultat : 429 au 6e avec Retry-After header
- Vérifier : IP différente ne bloque pas
---
## Module 2 — Tracks (morceaux)
### TRACK-001 — Upload + processing
**P0 | integ**
- Étapes :
1. POST /tracks (metadata)
2. PUT upload URL (binaire WAV)
3. POST /tracks/:id/publish
4. Attendre event "transcoding.completed"
5. GET /tracks/:id
- Résultat : track publié, HLS manifest disponible, waveform générée
- Cas limites :
- Fichier > 500 MB → 413
- Format non supporté (.exe, .pdf) → 415
- ClamAV détecte virus → status "removed" + notif admin
- Upload interrompu → status "draft" conservé, reprise possible
### TRACK-002 — Lecture streaming
**P0 | e2e**
- Étapes :
1. GET /tracks/:id → HLS manifest URL
2. Charger dans player HLS.js
3. Vérifier lecture audio
- Résultat : audio jouable, adaptatif (qualité s'adapte au réseau)
- Cas limites :
- Track privé sans auth → 401
- Track supprimé → 404
- Connexion lente → fallback bitrate bas
### TRACK-003 — Permissions
**P1 | integ**
- Vérifier :
- User A ne peut pas DELETE /tracks/:id de user B → 403
- User A ne peut pas PUT /tracks/:id de user B → 403
- Track privé de user A non visible par user B → 404
- Track avec lien secret accessible avec le bon token
---
## Module 3 — Samples & Presets
### SAMPLE-001 — Upload pack complet
**P0 | integ**
- Même flow que TRACK-001 mais avec .zip
- Vérifications supplémentaires :
- Extraction liste fichiers post-upload
- Preview MP3 généré automatiquement
- Tags indexés pour recherche
### SAMPLE-002 — Téléchargement
**P1 | integ**
- Étapes :
1. GET /samples/packs/:id/download
2. Vérifier URL signée MinIO
3. Vérifier incrément downloads_count
- Cas limites :
- Pack supprimé → 404
- Rate limit (50 downloads/h) → 429
### SAMPLE-003 — Remix (arbre)
**P1 | integ**
- Étapes :
1. Créer pack parent
2. POST /samples/packs/:id/remix (nouveau pack)
3. GET /samples/packs/:parent_id/remixes
- Résultat : arbre parent → enfant visible
- Cas limites :
- Parent avec remix_allowed=false → 403
- Licence incompatible → erreur
### SAMPLE-004 — Recherche et filtres
**P1 | integ**
- Tester chaque combinaison de filtres :
- type + genre + bpm_min/max + key + tags + licence
- sort=recent|popular|downloads
- Pagination (page + limit)
- Résultat : résultats cohérents, pas de crash
---
## Module 4 — Troc
### TROC-001 — Flow complet création → closing
**P0 | e2e**
- Étapes :
1. User A : POST /trades/listings (créer annonce)
2. User B : POST /trades/listings/:id/interest
3. Vérifier : DM créé entre A et B
4. User A : POST /trades/listings/:id/conclude { concluded_with: B }
5. User B : POST /trades/listings/:id/recognition { badges: ['reliable'] }
- Résultat : annonce "conclue", badges sur profil B
- Cas limites :
- Auto-intérêt (creator == interested) → 403
- Conclude avec user non-intéressé → 400
- Double reconnaissance → 409
### TROC-002 — Détection anti-argent
**P1 | unit**
- POST /trades/listings avec "je cherche 100€" → 400
- POST avec "échange contre euros" → 400
- POST avec "je propose un mix" → OK
### TROC-003 — Limites
**P1 | integ**
- 6e annonce active → 400 "max 5 annonces actives"
- 3e annonce dans la journée → 400 "max 2/jour"
---
## Module 5 — Shop
### SHOP-001 — Parcours achat complet
**P0 | e2e**
- Étapes :
1. GET /shop/products/talas-one → fiche produit
2. POST /shop/cart/items { variant_id, qty: 1 }
3. POST /shop/checkout/validate { addresses }
4. POST /shop/orders → commande créée
5. POST /payments/create → redirect Mollie
6. Webhook Mollie payment.paid
7. Vérifier : order status = "paid", email confirmé, facture générée
- Cas limites :
- Stock = 0 → erreur au checkout
- Réservation expirée (15 min) → stock libéré
- Webhook Mollie en double → idempotent (pas de double charge)
- Paiement échoué → order annulé, stock libéré
### SHOP-002 — Réservation stock concurrente
**P0 | integ**
- Étapes :
1. Stock = 1 unité
2. User A et user B tentent checkout simultanément
- Résultat : un seul réussit, l'autre reçoit "rupture de stock"
- Vérifier : pas de survente (stock négatif impossible)
### SHOP-003 — Calcul prix
**P0 | unit**
- Vérifier :
- Prix base + options = total correct
- TVA = 0% (franchise en base) avec mention légale
- Frais de port ajoutés au total
- Fees Mollie pas facturés au client (absorbés)
### SHOP-004 — Remboursement
**P1 | integ**
- Étapes :
1. Commande payée
2. Admin : POST /admin/payments/:id/refund
3. Webhook Mollie refund.paid
4. Vérifier : order status "refunded", facture d'avoir, stock ré-incrémenté
---
## Module 6 — Cloud Perso
### CLOUD-001 — CRUD fichiers
**P1 | integ**
- Upload, download, rename, delete, restore
- Vérifier quotas mis à jour après chaque action
### CLOUD-002 — Isolation
**P0 | integ**
- User A ne peut pas :
- Lister les fichiers de user B
- Télécharger un fichier de user B
- Supprimer un fichier de user B
- Même via manipulation d'URL / brute-force UUID
### CLOUD-003 — Partage
**P1 | integ**
- Créer lien partagé → accessible sans auth
- Lien avec password → exige le bon password
- Lien expiré → 410 Gone
- Max downloads atteint → 403
---
## Module 7 — Formation
### LEARN-001 — Inscription et progression
**P1 | integ**
- Enroll → start lesson → complete lesson → progress updated
- Vérifier progress_percent recalculé correctement
### LEARN-002 — Video streaming
**P1 | e2e**
- Leçon vidéo → HLS manifest → lecture dans player
- Position sauvegardée → reprise au bon endroit
### LEARN-003 — Permissions contenu
**P1 | integ**
- Leçon non-preview sans enrollment → 403
- Leçon preview → accessible sans enrollment
- Seul le content_creator peut modifier son cours
---
## Module 8 — Chat et notifications
### CHAT-001 — DM entre users
**P1 | integ**
- Créer conversation, envoyer message, recevoir (WebSocket)
### CHAT-002 — Groupes
**P1 | integ**
- Poster dans un groupe, voir les messages des autres
- Permissions : modérateur peut supprimer
### NOTIF-001 — Notifications
**P2 | integ**
- Vérifier que chaque action génère la bonne notif :
- Like sur track → notif au créateur
- Intérêt troc → notif à l'annonceur
- Commande payée → email client
- SAV message → notif user
---
## Module 9 — Performance
### PERF-001 — Temps de réponse API
**P1 | load test**
- GET /tracks (feed) : p95 < 200ms sous 100 req/s
- GET /tracks/:id : p95 < 100ms
- POST /auth/login : p95 < 500ms
### PERF-002 — Streaming concurrence
**P1 | load test**
- 100 connexions WebSocket simultanées → pas de drop
### PERF-003 — Upload concurrence
**P2 | load test**
- 20 uploads simultanés → pas de timeout, pas de corruption
---
## Outils de test
| Couche | Outil | Langage |
|--------|-------|---------|
| Unit backend | `go test` | Go |
| Unit Rust | `cargo test` | Rust |
| Unit frontend | Vitest | TypeScript |
| Integration API | `go test` + httptest | Go |
| E2E | Playwright | TypeScript |
| Load | k6 | JavaScript |
| Sécurité | OWASP ZAP, Nuclei | - |
| Visual | Storybook + Chromatic | TypeScript |
---
## Exécution en CI
```yaml
# Chaque PR
- go test ./...
- cargo test
- npm run test
- govulncheck ./...
- cargo audit
- npm audit --audit-level=high
- gitleaks detect
# Nightly
- playwright test (e2e)
- k6 run perf-tests.js (load)
- trivy image scan
# Pre-release
- OWASP checklist manuelle
- Pentest ciblé si code critique modifié
```
---
## Voir aussi
- [[Tableaux_Validation/CHECKLIST_VALIDATION_V0]] — checklist pré-vente (86 items)
- [[Audit_Sécurité/PLAN_AUDIT_SECURITE]] — tests sécurité spécifiques
- [[Tests_Hardware/PROTOCOLES_TESTS_HARDWARE]] — tests matériel
- [[ARCHITECTURE_VEZA]] — composants à tester
- [[05_EXPERIENCE_UTILISATEUR/Flux_Utilisateurs/PARCOURS_UTILISATEURS_VEZA]] — flows à valider en e2e

View file

@ -0,0 +1,383 @@
/**
* game.js
* Moteur 2D Top-Down V2 - Architecture Orientée Objet
* Tilemap, Caméra, Collisions & Interactions (Raycasting)
*/
// --- 1. Configuration Globale ---
const TILE_SIZE = 64;
const CANVAS_WIDTH = 800;
const CANVAS_HEIGHT = 600;
// --- 2. Gestion des Entrées (Input) ---
const keys = {
w: false, a: false, s: false, d: false,
ArrowUp: false, ArrowLeft: false, ArrowDown: false, ArrowRight: false
};
// Écouteurs globaux pour le clavier (ZQSD / WASD / Flèches)
window.addEventListener('keydown', (e) => {
if (keys.hasOwnProperty(e.key)) keys[e.key] = true;
if (e.code === 'KeyW' || e.code === 'KeyZ') keys.w = true; // Z pour AZERTY, W pour QWERTY
if (e.code === 'KeyA' || e.code === 'KeyQ') keys.a = true; // Q pour AZERTY, A pour QWERTY
if (e.code === 'KeyS') keys.s = true;
if (e.code === 'KeyD') keys.d = true;
});
window.addEventListener('keyup', (e) => {
if (keys.hasOwnProperty(e.key)) keys[e.key] = false;
if (e.code === 'KeyW' || e.code === 'KeyZ') keys.w = false;
if (e.code === 'KeyA' || e.code === 'KeyQ') keys.a = false;
if (e.code === 'KeyS') keys.s = false;
if (e.code === 'KeyD') keys.d = false;
});
// --- 3. Classes de l'Architecture ---
/**
* Gère la position de la vue (Caméra) dans le monde
*/
class Camera {
constructor(width, height, mapWidth, mapHeight) {
this.x = 0;
this.y = 0;
this.width = width;
this.height = height;
this.mapWidth = mapWidth;
this.mapHeight = mapHeight;
}
update(target) {
// La caméra cible le centre de l'entité (le joueur)
this.x = target.x + target.width / 2 - this.width / 2;
this.y = target.y + target.height / 2 - this.height / 2;
// Culling de la caméra : on l'empêche de sortir des limites de la Tilemap
this.x = Math.max(0, Math.min(this.x, this.mapWidth - this.width));
this.y = Math.max(0, Math.min(this.y, this.mapHeight - this.height));
}
// Convertit des coordonnées écran (clic souris) en coordonnées monde absolues
screenToWorld(screenX, screenY) {
return {
x: screenX + this.x,
y: screenY + this.y
};
}
}
/**
* Gère la carte, le tableau 2D (grille) et le rendu des tuiles
*/
class TileMap {
constructor() {
this.tileSize = TILE_SIZE;
// Création d'une carte de 1600x1216 pixels (25x19 tuiles)
this.cols = 25;
this.rows = 19;
this.width = this.cols * this.tileSize;
this.height = this.rows * this.tileSize;
this.data = this.generateMap();
// Palette de couleurs pour la V2 (en attendant les sprites)
this.colors = {
0: '#6ab04c', // Herbe (Vert clair)
1: '#eb4d4b', // Chemin de terre (Marron/Rouge)
2: '#535c68' // Mur / Obstacle (Gris)
};
}
generateMap() {
const map = [];
for (let y = 0; y < this.rows; y++) {
const row = [];
for (let x = 0; x < this.cols; x++) {
// Créer des murs sur toutes les bordures extérieures
if (x === 0 || x === this.cols - 1 || y === 0 || y === this.rows - 1) {
row.push(2);
} else {
// Remplissage aléatoire simple du centre
const rand = Math.random();
if (rand < 0.15) row.push(2); // 15% de murs/obstacles
else if (rand < 0.35) row.push(1); // 20% de chemins
else row.push(0); // 65% d'herbe
}
}
map.push(row);
}
// S'assurer de libérer une "clairière" au centre pour que le joueur y apparaisse sans être bloqué
const midY = Math.floor(this.rows / 2);
const midX = Math.floor(this.cols / 2);
for(let dy = -2; dy <= 2; dy++) {
for(let dx = -2; dx <= 2; dx++) {
map[midY + dy][midX + dx] = 0; // Herbe au centre
}
}
return map;
}
// Rend uniquement les tuiles visibles par la caméra (Optimisation: Culling)
draw(ctx, camera) {
const startCol = Math.floor(camera.x / this.tileSize);
const endCol = startCol + (camera.width / this.tileSize) + 1;
const startRow = Math.floor(camera.y / this.tileSize);
const endRow = startRow + (camera.height / this.tileSize) + 1;
for (let y = startRow; y < endRow; y++) {
for (let x = startCol; x < endCol; x++) {
// Vérifier si la tuile existe bien dans le tableau pour éviter les erreurs
if (y >= 0 && y < this.rows && x >= 0 && x < this.cols) {
const tileType = this.data[y][x];
ctx.fillStyle = this.colors[tileType];
// Calcul de la position de dessin en soustrayant la position de la caméra
const drawX = Math.round(x * this.tileSize - camera.x);
const drawY = Math.round(y * this.tileSize - camera.y);
ctx.fillRect(drawX, drawY, this.tileSize, this.tileSize);
// Ligne optionnelle pour afficher la grille
ctx.strokeStyle = 'rgba(0,0,0,0.05)';
ctx.strokeRect(drawX, drawY, this.tileSize, this.tileSize);
}
}
}
}
// Indique si une position X,Y spécifique du monde est solide (infranchissable)
isSolid(x, y) {
const col = Math.floor(x / this.tileSize);
const row = Math.floor(y / this.tileSize);
// Sortir de la map compte comme un mur
if (col < 0 || col >= this.cols || row < 0 || row >= this.rows) {
return true;
}
// La tuile n°2 est notre identifiant pour "Mur"
return this.data[row][col] === 2;
}
}
/**
* L'avatar contrôlé par l'utilisateur
*/
class Player {
constructor(x, y) {
this.x = x;
this.y = y;
this.width = 32; // Plus petit que la tuile (64)
this.height = 32;
this.color = '#f9ca24'; // Jaune vif
this.speed = 5;
}
update(map) {
let dx = 0;
let dy = 0;
// Déterminer le vecteur de direction désiré
if (keys.w || keys.ArrowUp) dy -= this.speed;
if (keys.s || keys.ArrowDown) dy += this.speed;
if (keys.a || keys.ArrowLeft) dx -= this.speed;
if (keys.d || keys.ArrowRight) dx += this.speed;
// Normalisation de la vitesse en diagonale
if (dx !== 0 && dy !== 0) {
const length = Math.sqrt(dx * dx + dy * dy);
dx = (dx / length) * this.speed;
dy = (dy / length) * this.speed;
}
// Système de Collision séparé par axe (AABB)
// Axe X
if (dx !== 0) {
const newX = this.x + dx;
if (!this.checkCollision(newX, this.y, map)) {
this.x = newX;
}
}
// Axe Y
if (dy !== 0) {
const newY = this.y + dy;
if (!this.checkCollision(this.x, newY, map)) {
this.y = newY;
}
}
}
// Vérifie si la boîte de collision (Bounding Box) aux futures coordonnées heurte un mur
checkCollision(newX, newY, map) {
const left = newX;
const right = newX + this.width - 1; // -1 pour ne pas compter le pixel adjacent en collision
const top = newY;
const bottom = newY + this.height - 1;
// Si n'importe lequel des 4 coins touche un mur, il y a collision
return map.isSolid(left, top) ||
map.isSolid(right, top) ||
map.isSolid(left, bottom) ||
map.isSolid(right, bottom);
}
draw(ctx, camera) {
ctx.fillStyle = this.color;
// La position dessinée dépend de l'offset de la caméra
const drawX = Math.round(this.x - camera.x);
const drawY = Math.round(this.y - camera.y);
ctx.fillRect(drawX, drawY, this.width, this.height);
}
}
/**
* Entité interactive cliquable sur la carte
*/
class PointOfInterest {
constructor(x, y, radius = 24) {
this.x = x;
this.y = y;
this.radius = radius;
this.color = '#0984e3'; // Bleu
}
draw(ctx, camera) {
const drawX = Math.round(this.x - camera.x);
const drawY = Math.round(this.y - camera.y);
ctx.beginPath();
ctx.arc(drawX, drawY, this.radius, 0, Math.PI * 2);
ctx.fillStyle = this.color;
ctx.fill();
ctx.strokeStyle = '#74b9ff';
ctx.lineWidth = 4;
ctx.stroke();
}
// Vérifie si un point absolu du monde (px, py) intersecte le cercle (Raycasting basique)
contains(px, py) {
const dx = this.x - px;
const dy = this.y - py;
const distance = Math.sqrt(dx * dx + dy * dy);
return distance <= this.radius;
}
}
/**
* Classe Chef d'Orchestre du jeu
*/
class Game {
constructor() {
this.canvas = document.getElementById('gameCanvas');
this.ctx = this.canvas.getContext('2d');
this.map = new TileMap();
// Apparition du joueur au centre du monde
const startX = (this.map.width / 2) - 16;
const startY = (this.map.height / 2) - 16;
this.player = new Player(startX, startY);
this.camera = new Camera(CANVAS_WIDTH, CANVAS_HEIGHT, this.map.width, this.map.height);
// Génération de quelques POIs autour du centre
this.pois = [
new PointOfInterest(startX + 200, startY + 50),
new PointOfInterest(startX - 250, startY + 150),
new PointOfInterest(startX + 60, startY - 200)
];
this.isPaused = false;
this.initUI();
this.initMouseInput();
// Lancer la boucle de jeu
requestAnimationFrame(() => this.loop());
}
initUI() {
this.modal = document.getElementById('ui-modal');
const closeBtn = document.getElementById('close-modal-btn');
// Fermer la modale
closeBtn.addEventListener('click', () => {
this.modal.classList.add('hidden');
this.isPaused = false; // Relancer les updates du jeu
});
}
initMouseInput() {
this.canvas.addEventListener('mousedown', (e) => {
if (this.isPaused) return;
// 1. Obtenir les coordonnées locales du clic sur le canvas
const rect = this.canvas.getBoundingClientRect();
// Facteur de mise à l'échelle si le canvas est redimensionné en CSS
const scaleX = this.canvas.width / rect.width;
const scaleY = this.canvas.height / rect.height;
const mouseX = (e.clientX - rect.left) * scaleX;
const mouseY = (e.clientY - rect.top) * scaleY;
// 2. Convertir les coordonnées écran en coordonnées monde
const worldPos = this.camera.screenToWorld(mouseX, mouseY);
// 3. Vérifier l'intersection avec tous les Points d'Intérêts
for (const poi of this.pois) {
if (poi.contains(worldPos.x, worldPos.y)) {
this.triggerEvent(poi);
break;
}
}
});
}
triggerEvent(poi) {
this.isPaused = true;
this.modal.classList.remove('hidden');
// Réinitialiser les touches pour empêcher le joueur de "glisser" à la fermeture
for (let key in keys) {
keys[key] = false;
}
}
update() {
if (this.isPaused) return;
this.player.update(this.map);
this.camera.update(this.player);
}
draw() {
// Fond de sécurité
this.ctx.fillStyle = '#000';
this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
// 1. Dessiner la Tilemap
this.map.draw(this.ctx, this.camera);
// 2. Dessiner les objets interactifs
for (const poi of this.pois) {
poi.draw(this.ctx, this.camera);
}
// 3. Dessiner le Joueur
this.player.draw(this.ctx, this.camera);
}
loop() {
this.update();
this.draw();
requestAnimationFrame(() => this.loop());
}
}
// --- Démarrage ---
window.onload = () => {
new Game();
};

Binary file not shown.

View file

@ -0,0 +1,5 @@
[folding]
node_unfolds=[NodePath("."), PackedStringArray("Transform"), NodePath("Player"), PackedStringArray("Transform"), NodePath("Spawns/spawn_from_bleue"), PackedStringArray("Transform"), NodePath("PortalToBleue"), PackedStringArray("Transform"), NodePath("DocPoint"), PackedStringArray("Transform")]
resource_unfolds=[]
nodes_folded=[]

View file

@ -0,0 +1,48 @@
[docks]
dock_3_selected_tab_idx=0
dock_4_selected_tab_idx=0
dock_5_selected_tab_idx=0
dock_floating={}
dock_bottom=[]
dock_closed=[]
dock_split_2=0
dock_split_3=0
dock_hsplit_1=0
dock_hsplit_2=270
dock_hsplit_3=-270
dock_hsplit_4=0
dock_filesystem_h_split_offset=240
dock_filesystem_v_split_offset=0
dock_filesystem_display_mode=0
dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://")
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://")
dock_3="Scene,Import"
dock_4="FileSystem"
dock_5="Inspector,Node,History"
[EditorNode]
open_scenes=PackedStringArray("res://scenes/Map_Racine.tscn")
current_scene="res://scenes/Map_Racine.tscn"
center_split_offset=0
selected_default_debugger_tab_idx=0
selected_main_editor_idx=0
[ScriptEditor]
open_scripts=[]
selected_script=""
open_help=[]
script_split_offset=70
list_split_offset=0
zoom_factor=1.0
[ShaderEditor]
open_shaders=[]
split_offset=0
selected_shader=""
text_shader_zoom_factor=1.0

View file

@ -0,0 +1,22 @@
ea4bc82a6ad023ab7ee23ee620429895
::res://::1775411111
::res://assets/::1775411749
circle.svg::CompressedTexture2D::6191740675976978764::1775410748::1775411115::1::::<><>::
square.svg::CompressedTexture2D::2641187142350835140::1775410748::1775411115::1::::<><>::
tilemap_packed.png::CompressedTexture2D::8753092169432371097::1775411749::1775411847::1::::<><>::
::res://scenes/::1775410783
DocPoint.tscn::PackedScene::-1::1775411789::0::1::::<><>::res://scripts/DocPoint.gd<>res://assets/tilemap_packed.png
GlobalUI.tscn::PackedScene::-1::1775410748::0::1::::<><>::res://scripts/GlobalUI.gd
Map_Bleue.tscn::PackedScene::-1::1775411806::0::1::::<><>::res://scripts/MapGenerator.gd<>res://scenes/Player.tscn<>res://scenes/Portal.tscn<>res://scenes/DocPoint.tscn
Map_Racine.tscn::PackedScene::-1::1775411798::0::1::::<><>::res://scripts/MapGenerator.gd<>res://scenes/Player.tscn<>res://scenes/Portal.tscn<>res://scenes/DocPoint.tscn
Player.tscn::PackedScene::-1::1775411761::0::1::::<><>::res://scripts/Player.gd<>res://assets/tilemap_packed.png
Portal.tscn::PackedScene::-1::1775411784::0::1::::<><>::res://scripts/Portal.gd<>res://assets/tilemap_packed.png
::res://scripts/::1775410780
DocPoint.gd::GDScript::-1::1775410780::0::1::::DocPoint<>Area2D<>::
GameManager.gd::GDScript::-1::1775410748::0::1::::<>Node<>::
GlobalUI.gd::GDScript::-1::1775410748::0::1::::<>CanvasLayer<>::
MapGenerator.gd::GDScript::-1::1775411778::0::1::::GameMap<>Node2D<>::
Player.gd::GDScript::-1::1775411766::0::1::::Player<>CharacterBody2D<>::
Portal.gd::GDScript::-1::1775410749::0::1::::Portal<>Area2D<>::
::res://sounds/::1775410587
::res://ui/::1775410587

View file

@ -0,0 +1,7 @@
[editor_metadata]
executable_path="/home/senke/Documents/TG__Talas_Group/mockup_jeu_ux/Godot_v4.3-stable_linux.x86_64"
[recent_files]
scenes=["res://scenes/Map_Racine.tscn"]

View file

@ -0,0 +1,25 @@
list=Array[Dictionary]([{
"base": &"Area2D",
"class": &"DocPoint",
"icon": "",
"language": &"GDScript",
"path": "res://scripts/DocPoint.gd"
}, {
"base": &"Node2D",
"class": &"GameMap",
"icon": "",
"language": &"GDScript",
"path": "res://scripts/MapGenerator.gd"
}, {
"base": &"CharacterBody2D",
"class": &"Player",
"icon": "",
"language": &"GDScript",
"path": "res://scripts/Player.gd"
}, {
"base": &"Area2D",
"class": &"Portal",
"icon": "",
"language": &"GDScript",
"path": "res://scripts/Portal.gd"
}])

View file

@ -0,0 +1,3 @@
source_md5="67f2d43016cb12358bd34c826d2b5f6a"
dest_md5="7d8c5d8aa0b5330fc3f22a1eacf24125"

View file

@ -0,0 +1,3 @@
source_md5="1755ae822fd061382e9922b367ec3a1e"
dest_md5="75597f2e849f74b49e4e1af6ea09464c"

Some files were not shown because too many files have changed in this diff Show more