← Commit history

1.0.61: Every Konnect v0.13.0 capability, 211 verbs (was 133; docs/konnect-gap.md maps all 228 Konnect tools). Schematic: components, pins, items, rotate, region move, annotate, replace and update symbols, field reset, wire delete/split, labels, junctions, net stubs, pin-to-pin wiring, text, buses, atomic batches, sheets and hierarchy, sheet pins, connectivity trace, checks, connectivity fixes, PNG render with visual baselines, design review. Board: outline, layer count, graphics, mounting holes, SVG import, refill, save, add/flip/delete/edit/align footprints, update footprints from library, footprint graphics and 3D models, selection and cross-probe, update PCB from schematic. Routing and rules: modify track, diff pairs, copy routing, netclasses, board rules, custom rules, clearance check, placement score, decoupling placement, fanout plan. Fab: DXF, GenCAD, IPC-2581, ODB++, IPC-D-356, one-zip fab package, fab pre-flight, cost numbers. Projects and libraries: create, info, rename, snapshot; footprint and symbol create, edit, info; library search. PCM: file:// and private wiki repositories, zipPath installs (#132).

John Lauer ·39ff8a63a9 ·14d ago ·parent baad156
6 files changed +12841
rust/crates/kicad-core/tests/fixtures/sch_hier/mcu-kicad10.svgadded+8612
@@ -0,0 +1,8612 @@+<?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"+  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"+  version="1.1"+  width="297.0022mm" height="210.0072mm" viewBox="0.0000 0.0000 297.0022 210.0072">+<title>SVG Image created as .tmpmtA6hA.svg date 2026-10-27T13:59:16 </title>+  <desc>Image generated by Eeschema-SVG </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:#F5F4EF; fill-opacity:1.0000; +stroke:#F5F4EF; stroke-width:0.0001; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<rect x="0.000000" y="0.000000" width="297.002200" height="210.007200" rx="0.000000" />+</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M177.0022 166.0072+L285.0022 166.0072+L285.0022 198.0072+L177.0022 198.0072+L177.0022 166.0072+" />+<path d="M10.0000 10.0000+L287.0022 10.0000+L287.0022 200.0072+L10.0000 200.0072+L10.0000 10.0000+" />+<path d="M12.0000 12.0000+L285.0022 12.0000+L285.0022 198.0072+L12.0000 198.0072+L12.0000 12.0000+" />+<path d="M60.0000 12.0000+L60.0000 10.0000+" />+<path d="M110.0000 12.0000+L110.0000 10.0000+" />+<path d="M160.0000 12.0000+L160.0000 10.0000+" />+<path d="M210.0000 12.0000+L210.0000 10.0000+" />+<path d="M260.0000 12.0000+L260.0000 10.0000+" />+<text x="35.0000" y="11.6500"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">1</text>+<g class="stroked-text"><desc>1</desc>+<path d="M36.0906 11.5935+L35.3478 11.5935+" />+<path d="M35.7192 11.5935+L35.7192 10.2935+" />+<path d="M35.7192 10.2935+L35.5954 10.4792+" />+<path d="M35.5954 10.4792+L35.4716 10.6030+" />+<path d="M35.4716 10.6030+L35.3478 10.6649+" />+</g><text x="85.0000" y="11.6500"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">2</text>+<g class="stroked-text"><desc>2</desc>+<path d="M85.3478 10.4173+L85.4097 10.3554+" />+<path d="M85.4097 10.3554+L85.5335 10.2935+" />+<path d="M85.5335 10.2935+L85.8430 10.2935+" />+<path d="M85.8430 10.2935+L85.9668 10.3554+" />+<path d="M85.9668 10.3554+L86.0287 10.4173+" />+<path d="M86.0287 10.4173+L86.0906 10.5411+" />+<path d="M86.0906 10.5411+L86.0906 10.6649+" />+<path d="M86.0906 10.6649+L86.0287 10.8506+" />+<path d="M86.0287 10.8506+L85.2859 11.5935+" />+<path d="M85.2859 11.5935+L86.0906 11.5935+" />+</g><text x="135.0000" y="11.6500"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">3</text>+<g class="stroked-text"><desc>3</desc>+<path d="M135.2859 10.2935+L136.0906 10.2935+" />+<path d="M136.0906 10.2935+L135.6573 10.7887+" />+<path d="M135.6573 10.7887+L135.8430 10.7887+" />+<path d="M135.8430 10.7887+L135.9668 10.8506+" />+<path d="M135.9668 10.8506+L136.0287 10.9125+" />+<path d="M136.0287 10.9125+L136.0906 11.0363+" />+<path d="M136.0906 11.0363+L136.0906 11.3458+" />+<path d="M136.0906 11.3458+L136.0287 11.4696+" />+<path d="M136.0287 11.4696+L135.9668 11.5316+" />+<path d="M135.9668 11.5316+L135.8430 11.5935+" />+<path d="M135.8430 11.5935+L135.4716 11.5935+" />+<path d="M135.4716 11.5935+L135.3478 11.5316+" />+<path d="M135.3478 11.5316+L135.2859 11.4696+" />+</g><text x="185.0000" y="11.6500"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">4</text>+<g class="stroked-text"><desc>4</desc>+<path d="M185.9668 10.7268+L185.9668 11.5935+" />+<path d="M185.6573 10.2316+L185.3478 11.1601+" />+<path d="M185.3478 11.1601+L186.1525 11.1601+" />+</g><text x="235.0000" y="11.6500"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">5</text>+<g class="stroked-text"><desc>5</desc>+<path d="M236.0287 10.2935+L235.4097 10.2935+" />+<path d="M235.4097 10.2935+L235.3478 10.9125+" />+<path d="M235.3478 10.9125+L235.4097 10.8506+" />+<path d="M235.4097 10.8506+L235.5335 10.7887+" />+<path d="M235.5335 10.7887+L235.8430 10.7887+" />+<path d="M235.8430 10.7887+L235.9668 10.8506+" />+<path d="M235.9668 10.8506+L236.0287 10.9125+" />+<path d="M236.0287 10.9125+L236.0906 11.0363+" />+<path d="M236.0906 11.0363+L236.0906 11.3458+" />+<path d="M236.0906 11.3458+L236.0287 11.4696+" />+<path d="M236.0287 11.4696+L235.9668 11.5316+" />+<path d="M235.9668 11.5316+L235.8430 11.5935+" />+<path d="M235.8430 11.5935+L235.5335 11.5935+" />+<path d="M235.5335 11.5935+L235.4097 11.5316+" />+<path d="M235.4097 11.5316+L235.3478 11.4696+" />+</g><text x="285.0000" y="11.6500"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">6</text>+<g class="stroked-text"><desc>6</desc>+<path d="M285.9668 10.2935+L285.7192 10.2935+" />+<path d="M285.7192 10.2935+L285.5954 10.3554+" />+<path d="M285.5954 10.3554+L285.5335 10.4173+" />+<path d="M285.5335 10.4173+L285.4097 10.6030+" />+<path d="M285.4097 10.6030+L285.3478 10.8506+" />+<path d="M285.3478 10.8506+L285.3478 11.3458+" />+<path d="M285.3478 11.3458+L285.4097 11.4696+" />+<path d="M285.4097 11.4696+L285.4716 11.5316+" />+<path d="M285.4716 11.5316+L285.5954 11.5935+" />+<path d="M285.5954 11.5935+L285.8430 11.5935+" />+<path d="M285.8430 11.5935+L285.9668 11.5316+" />+<path d="M285.9668 11.5316+L286.0287 11.4696+" />+<path d="M286.0287 11.4696+L286.0906 11.3458+" />+<path d="M286.0906 11.3458+L286.0906 11.0363+" />+<path d="M286.0906 11.0363+L286.0287 10.9125+" />+<path d="M286.0287 10.9125+L285.9668 10.8506+" />+<path d="M285.9668 10.8506+L285.8430 10.7887+" />+<path d="M285.8430 10.7887+L285.5954 10.7887+" />+<path d="M285.5954 10.7887+L285.4716 10.8506+" />+<path d="M285.4716 10.8506+L285.4097 10.9125+" />+<path d="M285.4097 10.9125+L285.3478 11.0363+" />+</g><path d="M60.0000 198.0072+L60.0000 200.0072+" />+<path d="M110.0000 198.0072+L110.0000 200.0072+" />+<path d="M160.0000 198.0072+L160.0000 200.0072+" />+<path d="M210.0000 198.0072+L210.0000 200.0072+" />+<path d="M260.0000 198.0072+L260.0000 200.0072+" />+<text x="35.0000" y="199.6572"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">1</text>+<g class="stroked-text"><desc>1</desc>+<path d="M36.0906 199.6007+L35.3478 199.6007+" />+<path d="M35.7192 199.6007+L35.7192 198.3007+" />+<path d="M35.7192 198.3007+L35.5954 198.4864+" />+<path d="M35.5954 198.4864+L35.4716 198.6102+" />+<path d="M35.4716 198.6102+L35.3478 198.6721+" />+</g><text x="85.0000" y="199.6572"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">2</text>+<g class="stroked-text"><desc>2</desc>+<path d="M85.3478 198.4245+L85.4097 198.3626+" />+<path d="M85.4097 198.3626+L85.5335 198.3007+" />+<path d="M85.5335 198.3007+L85.8430 198.3007+" />+<path d="M85.8430 198.3007+L85.9668 198.3626+" />+<path d="M85.9668 198.3626+L86.0287 198.4245+" />+<path d="M86.0287 198.4245+L86.0906 198.5483+" />+<path d="M86.0906 198.5483+L86.0906 198.6721+" />+<path d="M86.0906 198.6721+L86.0287 198.8578+" />+<path d="M86.0287 198.8578+L85.2859 199.6007+" />+<path d="M85.2859 199.6007+L86.0906 199.6007+" />+</g><text x="135.0000" y="199.6572"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">3</text>+<g class="stroked-text"><desc>3</desc>+<path d="M135.2859 198.3007+L136.0906 198.3007+" />+<path d="M136.0906 198.3007+L135.6573 198.7959+" />+<path d="M135.6573 198.7959+L135.8430 198.7959+" />+<path d="M135.8430 198.7959+L135.9668 198.8578+" />+<path d="M135.9668 198.8578+L136.0287 198.9197+" />+<path d="M136.0287 198.9197+L136.0906 199.0435+" />+<path d="M136.0906 199.0435+L136.0906 199.3530+" />+<path d="M136.0906 199.3530+L136.0287 199.4768+" />+<path d="M136.0287 199.4768+L135.9668 199.5388+" />+<path d="M135.9668 199.5388+L135.8430 199.6007+" />+<path d="M135.8430 199.6007+L135.4716 199.6007+" />+<path d="M135.4716 199.6007+L135.3478 199.5388+" />+<path d="M135.3478 199.5388+L135.2859 199.4768+" />+</g><text x="185.0000" y="199.6572"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">4</text>+<g class="stroked-text"><desc>4</desc>+<path d="M185.9668 198.7340+L185.9668 199.6007+" />+<path d="M185.6573 198.2388+L185.3478 199.1673+" />+<path d="M185.3478 199.1673+L186.1525 199.1673+" />+</g><text x="235.0000" y="199.6572"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">5</text>+<g class="stroked-text"><desc>5</desc>+<path d="M236.0287 198.3007+L235.4097 198.3007+" />+<path d="M235.4097 198.3007+L235.3478 198.9197+" />+<path d="M235.3478 198.9197+L235.4097 198.8578+" />+<path d="M235.4097 198.8578+L235.5335 198.7959+" />+<path d="M235.5335 198.7959+L235.8430 198.7959+" />+<path d="M235.8430 198.7959+L235.9668 198.8578+" />+<path d="M235.9668 198.8578+L236.0287 198.9197+" />+<path d="M236.0287 198.9197+L236.0906 199.0435+" />+<path d="M236.0906 199.0435+L236.0906 199.3530+" />+<path d="M236.0906 199.3530+L236.0287 199.4768+" />+<path d="M236.0287 199.4768+L235.9668 199.5388+" />+<path d="M235.9668 199.5388+L235.8430 199.6007+" />+<path d="M235.8430 199.6007+L235.5335 199.6007+" />+<path d="M235.5335 199.6007+L235.4097 199.5388+" />+<path d="M235.4097 199.5388+L235.3478 199.4768+" />+</g><text x="285.0000" y="199.6572"+textLength="1.4353" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">6</text>+<g class="stroked-text"><desc>6</desc>+<path d="M285.9668 198.3007+L285.7192 198.3007+" />+<path d="M285.7192 198.3007+L285.5954 198.3626+" />+<path d="M285.5954 198.3626+L285.5335 198.4245+" />+<path d="M285.5335 198.4245+L285.4097 198.6102+" />+<path d="M285.4097 198.6102+L285.3478 198.8578+" />+<path d="M285.3478 198.8578+L285.3478 199.3530+" />+<path d="M285.3478 199.3530+L285.4097 199.4768+" />+<path d="M285.4097 199.4768+L285.4716 199.5388+" />+<path d="M285.4716 199.5388+L285.5954 199.6007+" />+<path d="M285.5954 199.6007+L285.8430 199.6007+" />+<path d="M285.8430 199.6007+L285.9668 199.5388+" />+<path d="M285.9668 199.5388+L286.0287 199.4768+" />+<path d="M286.0287 199.4768+L286.0906 199.3530+" />+<path d="M286.0906 199.3530+L286.0906 199.0435+" />+<path d="M286.0906 199.0435+L286.0287 198.9197+" />+<path d="M286.0287 198.9197+L285.9668 198.8578+" />+<path d="M285.9668 198.8578+L285.8430 198.7959+" />+<path d="M285.8430 198.7959+L285.5954 198.7959+" />+<path d="M285.5954 198.7959+L285.4716 198.8578+" />+<path d="M285.4716 198.8578+L285.4097 198.9197+" />+<path d="M285.4097 198.9197+L285.3478 199.0435+" />+</g><path d="M10.0000 60.0000+L12.0000 60.0000+" />+<path d="M10.0000 110.0000+L12.0000 110.0000+" />+<path d="M10.0000 160.0000+L12.0000 160.0000+" />+<text x="11.0000" y="35.6500"+textLength="1.3115" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">A</text>+<g class="stroked-text"><desc>A</desc>+<path d="M10.6905 35.2220+L11.3095 35.2220+" />+<path d="M10.5667 35.5935+L11.0000 34.2935+" />+<path d="M11.0000 34.2935+L11.4333 35.5935+" />+</g><text x="11.0000" y="85.6500"+textLength="1.4972" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">B</text>+<g class="stroked-text"><desc>B</desc>+<path d="M11.0928 84.9125+L11.2785 84.9744+" />+<path d="M11.2785 84.9744+L11.3404 85.0363+" />+<path d="M11.3404 85.0363+L11.4023 85.1601+" />+<path d="M11.4023 85.1601+L11.4023 85.3458+" />+<path d="M11.4023 85.3458+L11.3404 85.4696+" />+<path d="M11.3404 85.4696+L11.2785 85.5316+" />+<path d="M11.2785 85.5316+L11.1547 85.5935+" />+<path d="M11.1547 85.5935+L10.6595 85.5935+" />+<path d="M10.6595 85.5935+L10.6595 84.2935+" />+<path d="M10.6595 84.2935+L11.0928 84.2935+" />+<path d="M11.0928 84.2935+L11.2166 84.3554+" />+<path d="M11.2166 84.3554+L11.2785 84.4173+" />+<path d="M11.2785 84.4173+L11.3404 84.5411+" />+<path d="M11.3404 84.5411+L11.3404 84.6649+" />+<path d="M11.3404 84.6649+L11.2785 84.7887+" />+<path d="M11.2785 84.7887+L11.2166 84.8506+" />+<path d="M11.2166 84.8506+L11.0928 84.9125+" />+<path d="M11.0928 84.9125+L10.6595 84.9125+" />+</g><text x="11.0000" y="135.6500"+textLength="1.4972" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">C</text>+<g class="stroked-text"><desc>C</desc>+<path d="M11.4023 135.4696+L11.3404 135.5316+" />+<path d="M11.3404 135.5316+L11.1547 135.5935+" />+<path d="M11.1547 135.5935+L11.0309 135.5935+" />+<path d="M11.0309 135.5935+L10.8452 135.5316+" />+<path d="M10.8452 135.5316+L10.7214 135.4077+" />+<path d="M10.7214 135.4077+L10.6595 135.2839+" />+<path d="M10.6595 135.2839+L10.5976 135.0363+" />+<path d="M10.5976 135.0363+L10.5976 134.8506+" />+<path d="M10.5976 134.8506+L10.6595 134.6030+" />+<path d="M10.6595 134.6030+L10.7214 134.4792+" />+<path d="M10.7214 134.4792+L10.8452 134.3554+" />+<path d="M10.8452 134.3554+L11.0309 134.2935+" />+<path d="M11.0309 134.2935+L11.1547 134.2935+" />+<path d="M11.1547 134.2935+L11.3404 134.3554+" />+<path d="M11.3404 134.3554+L11.4023 134.4173+" />+</g><text x="11.0000" y="185.6500"+textLength="1.4972" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">D</text>+<g class="stroked-text"><desc>D</desc>+<path d="M10.6595 185.5935+L10.6595 184.2935+" />+<path d="M10.6595 184.2935+L10.9690 184.2935+" />+<path d="M10.9690 184.2935+L11.1547 184.3554+" />+<path d="M11.1547 184.3554+L11.2785 184.4792+" />+<path d="M11.2785 184.4792+L11.3404 184.6030+" />+<path d="M11.3404 184.6030+L11.4023 184.8506+" />+<path d="M11.4023 184.8506+L11.4023 185.0363+" />+<path d="M11.4023 185.0363+L11.3404 185.2839+" />+<path d="M11.3404 185.2839+L11.2785 185.4077+" />+<path d="M11.2785 185.4077+L11.1547 185.5316+" />+<path d="M11.1547 185.5316+L10.9690 185.5935+" />+<path d="M10.9690 185.5935+L10.6595 185.5935+" />+</g><path d="M287.0022 60.0000+L285.0022 60.0000+" />+<path d="M287.0022 110.0000+L285.0022 110.0000+" />+<path d="M287.0022 160.0000+L285.0022 160.0000+" />+<text x="286.0022" y="35.6500"+textLength="1.3115" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">A</text>+<g class="stroked-text"><desc>A</desc>+<path d="M285.6927 35.2220+L286.3117 35.2220+" />+<path d="M285.5689 35.5935+L286.0022 34.2935+" />+<path d="M286.0022 34.2935+L286.4355 35.5935+" />+</g><text x="286.0022" y="85.6500"+textLength="1.4972" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">B</text>+<g class="stroked-text"><desc>B</desc>+<path d="M286.0950 84.9125+L286.2807 84.9744+" />+<path d="M286.2807 84.9744+L286.3426 85.0363+" />+<path d="M286.3426 85.0363+L286.4045 85.1601+" />+<path d="M286.4045 85.1601+L286.4045 85.3458+" />+<path d="M286.4045 85.3458+L286.3426 85.4696+" />+<path d="M286.3426 85.4696+L286.2807 85.5316+" />+<path d="M286.2807 85.5316+L286.1569 85.5935+" />+<path d="M286.1569 85.5935+L285.6617 85.5935+" />+<path d="M285.6617 85.5935+L285.6617 84.2935+" />+<path d="M285.6617 84.2935+L286.0950 84.2935+" />+<path d="M286.0950 84.2935+L286.2188 84.3554+" />+<path d="M286.2188 84.3554+L286.2807 84.4173+" />+<path d="M286.2807 84.4173+L286.3426 84.5411+" />+<path d="M286.3426 84.5411+L286.3426 84.6649+" />+<path d="M286.3426 84.6649+L286.2807 84.7887+" />+<path d="M286.2807 84.7887+L286.2188 84.8506+" />+<path d="M286.2188 84.8506+L286.0950 84.9125+" />+<path d="M286.0950 84.9125+L285.6617 84.9125+" />+</g><text x="286.0022" y="135.6500"+textLength="1.4972" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">C</text>+<g class="stroked-text"><desc>C</desc>+<path d="M286.4045 135.4696+L286.3426 135.5316+" />+<path d="M286.3426 135.5316+L286.1569 135.5935+" />+<path d="M286.1569 135.5935+L286.0331 135.5935+" />+<path d="M286.0331 135.5935+L285.8474 135.5316+" />+<path d="M285.8474 135.5316+L285.7236 135.4077+" />+<path d="M285.7236 135.4077+L285.6617 135.2839+" />+<path d="M285.6617 135.2839+L285.5998 135.0363+" />+<path d="M285.5998 135.0363+L285.5998 134.8506+" />+<path d="M285.5998 134.8506+L285.6617 134.6030+" />+<path d="M285.6617 134.6030+L285.7236 134.4792+" />+<path d="M285.7236 134.4792+L285.8474 134.3554+" />+<path d="M285.8474 134.3554+L286.0331 134.2935+" />+<path d="M286.0331 134.2935+L286.1569 134.2935+" />+<path d="M286.1569 134.2935+L286.3426 134.3554+" />+<path d="M286.3426 134.3554+L286.4045 134.4173+" />+</g><text x="286.0022" y="185.6500"+textLength="1.4972" font-size="1.7333" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">D</text>+<g class="stroked-text"><desc>D</desc>+<path d="M285.6617 185.5935+L285.6617 184.2935+" />+<path d="M285.6617 184.2935+L285.9712 184.2935+" />+<path d="M285.9712 184.2935+L286.1569 184.3554+" />+<path d="M286.1569 184.3554+L286.2807 184.4792+" />+<path d="M286.2807 184.4792+L286.3426 184.6030+" />+<path d="M286.3426 184.6030+L286.4045 184.8506+" />+<path d="M286.4045 184.8506+L286.4045 185.0363+" />+<path d="M286.4045 185.0363+L286.3426 185.2839+" />+<path d="M286.3426 185.2839+L286.2807 185.4077+" />+<path d="M286.2807 185.4077+L286.1569 185.5316+" />+<path d="M286.1569 185.5316+L285.9712 185.5935+" />+<path d="M285.9712 185.5935+L285.6617 185.5935+" />+</g><text x="200.0022" y="193.8572"+textLength="22.1573" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">Date: 2026-10-27</text>+<g class="stroked-text"><desc>Date: 2026-10-27</desc>+<path d="M200.4595 193.7931+L200.4595 192.2931+" />+<path d="M200.4595 192.2931+L200.8166 192.2931+" />+<path d="M200.8166 192.2931+L201.0309 192.3645+" />+<path d="M201.0309 192.3645+L201.1738 192.5074+" />+<path d="M201.1738 192.5074+L201.2452 192.6502+" />+<path d="M201.2452 192.6502+L201.3166 192.9359+" />+<path d="M201.3166 192.9359+L201.3166 193.1502+" />+<path d="M201.3166 193.1502+L201.2452 193.4359+" />+<path d="M201.2452 193.4359+L201.1738 193.5788+" />+<path d="M201.1738 193.5788+L201.0309 193.7217+" />+<path d="M201.0309 193.7217+L200.8166 193.7931+" />+<path d="M200.8166 193.7931+L200.4595 193.7931+" />+<path d="M202.6024 193.7931+L202.6024 193.0074+" />+<path d="M202.6024 193.0074+L202.5309 192.8645+" />+<path d="M202.5309 192.8645+L202.3881 192.7931+" />+<path d="M202.3881 192.7931+L202.1024 192.7931+" />+<path d="M202.1024 192.7931+L201.9595 192.8645+" />+<path d="M202.6024 193.7217+L202.4595 193.7931+" />+<path d="M202.4595 193.7931+L202.1024 193.7931+" />+<path d="M202.1024 193.7931+L201.9595 193.7217+" />+<path d="M201.9595 193.7217+L201.8881 193.5788+" />+<path d="M201.8881 193.5788+L201.8881 193.4359+" />+<path d="M201.8881 193.4359+L201.9595 193.2931+" />+<path d="M201.9595 193.2931+L202.1024 193.2217+" />+<path d="M202.1024 193.2217+L202.4595 193.2217+" />+<path d="M202.4595 193.2217+L202.6024 193.1502+" />+<path d="M203.1023 192.7931+L203.6737 192.7931+" />+<path d="M203.3166 192.2931+L203.3166 193.5788+" />+<path d="M203.3166 193.5788+L203.3880 193.7217+" />+<path d="M203.3880 193.7217+L203.5309 193.7931+" />+<path d="M203.5309 193.7931+L203.6737 193.7931+" />+<path d="M204.7451 193.7217+L204.6023 193.7931+" />+<path d="M204.6023 193.7931+L204.3166 193.7931+" />+<path d="M204.3166 193.7931+L204.1737 193.7217+" />+<path d="M204.1737 193.7217+L204.1023 193.5788+" />+<path d="M204.1023 193.5788+L204.1023 193.0074+" />+<path d="M204.1023 193.0074+L204.1737 192.8645+" />+<path d="M204.1737 192.8645+L204.3166 192.7931+" />+<path d="M204.3166 192.7931+L204.6023 192.7931+" />+<path d="M204.6023 192.7931+L204.7451 192.8645+" />+<path d="M204.7451 192.8645+L204.8166 193.0074+" />+<path d="M204.8166 193.0074+L204.8166 193.1502+" />+<path d="M204.8166 193.1502+L204.1023 193.2931+" />+<path d="M205.4594 193.6502+L205.5308 193.7217+" />+<path d="M205.5308 193.7217+L205.4594 193.7931+" />+<path d="M205.4594 193.7931+L205.3880 193.7217+" />+<path d="M205.3880 193.7217+L205.4594 193.6502+" />+<path d="M205.4594 193.6502+L205.4594 193.7931+" />+<path d="M205.4594 192.8645+L205.5308 192.9359+" />+<path d="M205.5308 192.9359+L205.4594 193.0074+" />+<path d="M205.4594 193.0074+L205.3880 192.9359+" />+<path d="M205.3880 192.9359+L205.4594 192.8645+" />+<path d="M205.4594 192.8645+L205.4594 193.0074+" />+<path d="M207.2452 192.4359+L207.3166 192.3645+" />+<path d="M207.3166 192.3645+L207.4595 192.2931+" />+<path d="M207.4595 192.2931+L207.8166 192.2931+" />+<path d="M207.8166 192.2931+L207.9595 192.3645+" />+<path d="M207.9595 192.3645+L208.0309 192.4359+" />+<path d="M208.0309 192.4359+L208.1023 192.5788+" />+<path d="M208.1023 192.5788+L208.1023 192.7217+" />+<path d="M208.1023 192.7217+L208.0309 192.9359+" />+<path d="M208.0309 192.9359+L207.1737 193.7931+" />+<path d="M207.1737 193.7931+L208.1023 193.7931+" />+<path d="M209.0309 192.2931+L209.1738 192.2931+" />+<path d="M209.1738 192.2931+L209.3166 192.3645+" />+<path d="M209.3166 192.3645+L209.3881 192.4359+" />+<path d="M209.3881 192.4359+L209.4595 192.5788+" />+<path d="M209.4595 192.5788+L209.5309 192.8645+" />+<path d="M209.5309 192.8645+L209.5309 193.2217+" />+<path d="M209.5309 193.2217+L209.4595 193.5074+" />+<path d="M209.4595 193.5074+L209.3881 193.6502+" />+<path d="M209.3881 193.6502+L209.3166 193.7217+" />+<path d="M209.3166 193.7217+L209.1738 193.7931+" />+<path d="M209.1738 193.7931+L209.0309 193.7931+" />+<path d="M209.0309 193.7931+L208.8881 193.7217+" />+<path d="M208.8881 193.7217+L208.8166 193.6502+" />+<path d="M208.8166 193.6502+L208.7452 193.5074+" />+<path d="M208.7452 193.5074+L208.6738 193.2217+" />+<path d="M208.6738 193.2217+L208.6738 192.8645+" />+<path d="M208.6738 192.8645+L208.7452 192.5788+" />+<path d="M208.7452 192.5788+L208.8166 192.4359+" />+<path d="M208.8166 192.4359+L208.8881 192.3645+" />+<path d="M208.8881 192.3645+L209.0309 192.2931+" />+<path d="M210.1024 192.4359+L210.1738 192.3645+" />+<path d="M210.1738 192.3645+L210.3167 192.2931+" />+<path d="M210.3167 192.2931+L210.6738 192.2931+" />+<path d="M210.6738 192.2931+L210.8167 192.3645+" />+<path d="M210.8167 192.3645+L210.8881 192.4359+" />+<path d="M210.8881 192.4359+L210.9595 192.5788+" />+<path d="M210.9595 192.5788+L210.9595 192.7217+" />+<path d="M210.9595 192.7217+L210.8881 192.9359+" />+<path d="M210.8881 192.9359+L210.0309 193.7931+" />+<path d="M210.0309 193.7931+L210.9595 193.7931+" />+<path d="M212.2453 192.2931+L211.9595 192.2931+" />+<path d="M211.9595 192.2931+L211.8167 192.3645+" />+<path d="M211.8167 192.3645+L211.7453 192.4359+" />+<path d="M211.7453 192.4359+L211.6024 192.6502+" />+<path d="M211.6024 192.6502+L211.5310 192.9359+" />+<path d="M211.5310 192.9359+L211.5310 193.5074+" />+<path d="M211.5310 193.5074+L211.6024 193.6502+" />+<path d="M211.6024 193.6502+L211.6738 193.7217+" />+<path d="M211.6738 193.7217+L211.8167 193.7931+" />+<path d="M211.8167 193.7931+L212.1024 193.7931+" />+<path d="M212.1024 193.7931+L212.2453 193.7217+" />+<path d="M212.2453 193.7217+L212.3167 193.6502+" />+<path d="M212.3167 193.6502+L212.3881 193.5074+" />+<path d="M212.3881 193.5074+L212.3881 193.1502+" />+<path d="M212.3881 193.1502+L212.3167 193.0074+" />+<path d="M212.3167 193.0074+L212.2453 192.9359+" />+<path d="M212.2453 192.9359+L212.1024 192.8645+" />+<path d="M212.1024 192.8645+L211.8167 192.8645+" />+<path d="M211.8167 192.8645+L211.6738 192.9359+" />+<path d="M211.6738 192.9359+L211.6024 193.0074+" />+<path d="M211.6024 193.0074+L211.5310 193.1502+" />+<path d="M213.0310 193.2217+L214.1739 193.2217+" />+<path d="M215.6738 193.7931+L214.8167 193.7931+" />+<path d="M215.2452 193.7931+L215.2452 192.2931+" />+<path d="M215.2452 192.2931+L215.1024 192.5074+" />+<path d="M215.1024 192.5074+L214.9595 192.6502+" />+<path d="M214.9595 192.6502+L214.8167 192.7217+" />+<path d="M216.6024 192.2931+L216.7453 192.2931+" />+<path d="M216.7453 192.2931+L216.8881 192.3645+" />+<path d="M216.8881 192.3645+L216.9596 192.4359+" />+<path d="M216.9596 192.4359+L217.0310 192.5788+" />+<path d="M217.0310 192.5788+L217.1024 192.8645+" />+<path d="M217.1024 192.8645+L217.1024 193.2217+" />+<path d="M217.1024 193.2217+L217.0310 193.5074+" />+<path d="M217.0310 193.5074+L216.9596 193.6502+" />+<path d="M216.9596 193.6502+L216.8881 193.7217+" />+<path d="M216.8881 193.7217+L216.7453 193.7931+" />+<path d="M216.7453 193.7931+L216.6024 193.7931+" />+<path d="M216.6024 193.7931+L216.4596 193.7217+" />+<path d="M216.4596 193.7217+L216.3881 193.6502+" />+<path d="M216.3881 193.6502+L216.3167 193.5074+" />+<path d="M216.3167 193.5074+L216.2453 193.2217+" />+<path d="M216.2453 193.2217+L216.2453 192.8645+" />+<path d="M216.2453 192.8645+L216.3167 192.5788+" />+<path d="M216.3167 192.5788+L216.3881 192.4359+" />+<path d="M216.3881 192.4359+L216.4596 192.3645+" />+<path d="M216.4596 192.3645+L216.6024 192.2931+" />+<path d="M217.7453 193.2217+L218.8882 193.2217+" />+<path d="M219.5310 192.4359+L219.6024 192.3645+" />+<path d="M219.6024 192.3645+L219.7453 192.2931+" />+<path d="M219.7453 192.2931+L220.1024 192.2931+" />+<path d="M220.1024 192.2931+L220.2453 192.3645+" />+<path d="M220.2453 192.3645+L220.3167 192.4359+" />+<path d="M220.3167 192.4359+L220.3881 192.5788+" />+<path d="M220.3881 192.5788+L220.3881 192.7217+" />+<path d="M220.3881 192.7217+L220.3167 192.9359+" />+<path d="M220.3167 192.9359+L219.4595 193.7931+" />+<path d="M219.4595 193.7931+L220.3881 193.7931+" />+<path d="M220.8881 192.2931+L221.8881 192.2931+" />+<path d="M221.8881 192.2931+L221.2453 193.7931+" />+</g><path d="M177.0022 194.5072+L285.0022 194.5072+" />+<text x="178.0022" y="196.6572"+textLength="22.3002" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">KiCad E.D.A. 10.0.2</text>+<g class="stroked-text"><desc>KiCad E.D.A. 10.0.2</desc>+<path d="M178.4595 196.5931+L178.4595 195.0931+" />+<path d="M179.3166 196.5931+L178.6738 195.7359+" />+<path d="M179.3166 195.0931+L178.4595 195.9502+" />+<path d="M179.9595 196.5931+L179.9595 195.5931+" />+<path d="M179.9595 195.0931+L179.8881 195.1645+" />+<path d="M179.8881 195.1645+L179.9595 195.2359+" />+<path d="M179.9595 195.2359+L180.0309 195.1645+" />+<path d="M180.0309 195.1645+L179.9595 195.0931+" />+<path d="M179.9595 195.0931+L179.9595 195.2359+" />+<path d="M181.5309 196.4502+L181.4595 196.5217+" />+<path d="M181.4595 196.5217+L181.2452 196.5931+" />+<path d="M181.2452 196.5931+L181.1024 196.5931+" />+<path d="M181.1024 196.5931+L180.8881 196.5217+" />+<path d="M180.8881 196.5217+L180.7452 196.3788+" />+<path d="M180.7452 196.3788+L180.6738 196.2359+" />+<path d="M180.6738 196.2359+L180.6024 195.9502+" />+<path d="M180.6024 195.9502+L180.6024 195.7359+" />+<path d="M180.6024 195.7359+L180.6738 195.4502+" />+<path d="M180.6738 195.4502+L180.7452 195.3074+" />+<path d="M180.7452 195.3074+L180.8881 195.1645+" />+<path d="M180.8881 195.1645+L181.1024 195.0931+" />+<path d="M181.1024 195.0931+L181.2452 195.0931+" />+<path d="M181.2452 195.0931+L181.4595 195.1645+" />+<path d="M181.4595 195.1645+L181.5309 195.2359+" />+<path d="M182.8167 196.5931+L182.8167 195.8074+" />+<path d="M182.8167 195.8074+L182.7452 195.6645+" />+<path d="M182.7452 195.6645+L182.6024 195.5931+" />+<path d="M182.6024 195.5931+L182.3167 195.5931+" />+<path d="M182.3167 195.5931+L182.1738 195.6645+" />+<path d="M182.8167 196.5217+L182.6738 196.5931+" />+<path d="M182.6738 196.5931+L182.3167 196.5931+" />+<path d="M182.3167 196.5931+L182.1738 196.5217+" />+<path d="M182.1738 196.5217+L182.1024 196.3788+" />+<path d="M182.1024 196.3788+L182.1024 196.2359+" />+<path d="M182.1024 196.2359+L182.1738 196.0931+" />+<path d="M182.1738 196.0931+L182.3167 196.0217+" />+<path d="M182.3167 196.0217+L182.6738 196.0217+" />+<path d="M182.6738 196.0217+L182.8167 195.9502+" />+<path d="M184.1738 196.5931+L184.1738 195.0931+" />+<path d="M184.1738 196.5217+L184.0309 196.5931+" />+<path d="M184.0309 196.5931+L183.7452 196.5931+" />+<path d="M183.7452 196.5931+L183.6023 196.5217+" />+<path d="M183.6023 196.5217+L183.5309 196.4502+" />+<path d="M183.5309 196.4502+L183.4595 196.3074+" />+<path d="M183.4595 196.3074+L183.4595 195.8788+" />+<path d="M183.4595 195.8788+L183.5309 195.7359+" />+<path d="M183.5309 195.7359+L183.6023 195.6645+" />+<path d="M183.6023 195.6645+L183.7452 195.5931+" />+<path d="M183.7452 195.5931+L184.0309 195.5931+" />+<path d="M184.0309 195.5931+L184.1738 195.6645+" />+<path d="M186.0309 195.8074+L186.5309 195.8074+" />+<path d="M186.7452 196.5931+L186.0309 196.5931+" />+<path d="M186.0309 196.5931+L186.0309 195.0931+" />+<path d="M186.0309 195.0931+L186.7452 195.0931+" />+<path d="M187.3880 196.4502+L187.4594 196.5217+" />+<path d="M187.4594 196.5217+L187.3880 196.5931+" />+<path d="M187.3880 196.5931+L187.3166 196.5217+" />+<path d="M187.3166 196.5217+L187.3880 196.4502+" />+<path d="M187.3880 196.4502+L187.3880 196.5931+" />+<path d="M188.1023 196.5931+L188.1023 195.0931+" />+<path d="M188.1023 195.0931+L188.4594 195.0931+" />+<path d="M188.4594 195.0931+L188.6737 195.1645+" />+<path d="M188.6737 195.1645+L188.8166 195.3074+" />+<path d="M188.8166 195.3074+L188.8880 195.4502+" />+<path d="M188.8880 195.4502+L188.9594 195.7359+" />+<path d="M188.9594 195.7359+L188.9594 195.9502+" />+<path d="M188.9594 195.9502+L188.8880 196.2359+" />+<path d="M188.8880 196.2359+L188.8166 196.3788+" />+<path d="M188.8166 196.3788+L188.6737 196.5217+" />+<path d="M188.6737 196.5217+L188.4594 196.5931+" />+<path d="M188.4594 196.5931+L188.1023 196.5931+" />+<path d="M189.6023 196.4502+L189.6737 196.5217+" />+<path d="M189.6737 196.5217+L189.6023 196.5931+" />+<path d="M189.6023 196.5931+L189.5309 196.5217+" />+<path d="M189.5309 196.5217+L189.6023 196.4502+" />+<path d="M189.6023 196.4502+L189.6023 196.5931+" />+<path d="M190.2452 196.1645+L190.9595 196.1645+" />+<path d="M190.1023 196.5931+L190.6023 195.0931+" />+<path d="M190.6023 195.0931+L191.1023 196.5931+" />+<path d="M191.6023 196.4502+L191.6737 196.5217+" />+<path d="M191.6737 196.5217+L191.6023 196.5931+" />+<path d="M191.6023 196.5931+L191.5309 196.5217+" />+<path d="M191.5309 196.5217+L191.6023 196.4502+" />+<path d="M191.6023 196.4502+L191.6023 196.5931+" />+<path d="M194.2452 196.5931+L193.3881 196.5931+" />+<path d="M193.8166 196.5931+L193.8166 195.0931+" />+<path d="M193.8166 195.0931+L193.6738 195.3074+" />+<path d="M193.6738 195.3074+L193.5309 195.4502+" />+<path d="M193.5309 195.4502+L193.3881 195.5217+" />+<path d="M195.1738 195.0931+L195.3167 195.0931+" />+<path d="M195.3167 195.0931+L195.4595 195.1645+" />+<path d="M195.4595 195.1645+L195.5310 195.2359+" />+<path d="M195.5310 195.2359+L195.6024 195.3788+" />+<path d="M195.6024 195.3788+L195.6738 195.6645+" />+<path d="M195.6738 195.6645+L195.6738 196.0217+" />+<path d="M195.6738 196.0217+L195.6024 196.3074+" />+<path d="M195.6024 196.3074+L195.5310 196.4502+" />+<path d="M195.5310 196.4502+L195.4595 196.5217+" />+<path d="M195.4595 196.5217+L195.3167 196.5931+" />+<path d="M195.3167 196.5931+L195.1738 196.5931+" />+<path d="M195.1738 196.5931+L195.0310 196.5217+" />+<path d="M195.0310 196.5217+L194.9595 196.4502+" />+<path d="M194.9595 196.4502+L194.8881 196.3074+" />+<path d="M194.8881 196.3074+L194.8167 196.0217+" />+<path d="M194.8167 196.0217+L194.8167 195.6645+" />+<path d="M194.8167 195.6645+L194.8881 195.3788+" />+<path d="M194.8881 195.3788+L194.9595 195.2359+" />+<path d="M194.9595 195.2359+L195.0310 195.1645+" />+<path d="M195.0310 195.1645+L195.1738 195.0931+" />+<path d="M196.3167 196.4502+L196.3881 196.5217+" />+<path d="M196.3881 196.5217+L196.3167 196.5931+" />+<path d="M196.3167 196.5931+L196.2453 196.5217+" />+<path d="M196.2453 196.5217+L196.3167 196.4502+" />+<path d="M196.3167 196.4502+L196.3167 196.5931+" />+<path d="M197.3167 195.0931+L197.4596 195.0931+" />+<path d="M197.4596 195.0931+L197.6024 195.1645+" />+<path d="M197.6024 195.1645+L197.6739 195.2359+" />+<path d="M197.6739 195.2359+L197.7453 195.3788+" />+<path d="M197.7453 195.3788+L197.8167 195.6645+" />+<path d="M197.8167 195.6645+L197.8167 196.0217+" />+<path d="M197.8167 196.0217+L197.7453 196.3074+" />+<path d="M197.7453 196.3074+L197.6739 196.4502+" />+<path d="M197.6739 196.4502+L197.6024 196.5217+" />+<path d="M197.6024 196.5217+L197.4596 196.5931+" />+<path d="M197.4596 196.5931+L197.3167 196.5931+" />+<path d="M197.3167 196.5931+L197.1739 196.5217+" />+<path d="M197.1739 196.5217+L197.1024 196.4502+" />+<path d="M197.1024 196.4502+L197.0310 196.3074+" />+<path d="M197.0310 196.3074+L196.9596 196.0217+" />+<path d="M196.9596 196.0217+L196.9596 195.6645+" />+<path d="M196.9596 195.6645+L197.0310 195.3788+" />+<path d="M197.0310 195.3788+L197.1024 195.2359+" />+<path d="M197.1024 195.2359+L197.1739 195.1645+" />+<path d="M197.1739 195.1645+L197.3167 195.0931+" />+<path d="M198.4596 196.4502+L198.5310 196.5217+" />+<path d="M198.5310 196.5217+L198.4596 196.5931+" />+<path d="M198.4596 196.5931+L198.3882 196.5217+" />+<path d="M198.3882 196.5217+L198.4596 196.4502+" />+<path d="M198.4596 196.4502+L198.4596 196.5931+" />+<path d="M199.1025 195.2359+L199.1739 195.1645+" />+<path d="M199.1739 195.1645+L199.3168 195.0931+" />+<path d="M199.3168 195.0931+L199.6739 195.0931+" />+<path d="M199.6739 195.0931+L199.8168 195.1645+" />+<path d="M199.8168 195.1645+L199.8882 195.2359+" />+<path d="M199.8882 195.2359+L199.9596 195.3788+" />+<path d="M199.9596 195.3788+L199.9596 195.5217+" />+<path d="M199.9596 195.5217+L199.8882 195.7359+" />+<path d="M199.8882 195.7359+L199.0310 196.5931+" />+<path d="M199.0310 196.5931+L199.9596 196.5931+" />+</g><path d="M177.0022 191.5072+L285.0022 191.5072+" />+</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.3000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="263.0022" y="193.8572"+textLength="7.6715" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">Rev: A</text>+<g class="stroked-text"><desc>Rev: A</desc>+<path d="M264.4137 193.7855+L263.9137 193.0712+" />+<path d="M263.5566 193.7855+L263.5566 192.2855+" />+<path d="M263.5566 192.2855+L264.1280 192.2855+" />+<path d="M264.1280 192.2855+L264.2709 192.3569+" />+<path d="M264.2709 192.3569+L264.3423 192.4283+" />+<path d="M264.3423 192.4283+L264.4137 192.5712+" />+<path d="M264.4137 192.5712+L264.4137 192.7855+" />+<path d="M264.4137 192.7855+L264.3423 192.9283+" />+<path d="M264.3423 192.9283+L264.2709 192.9998+" />+<path d="M264.2709 192.9998+L264.1280 193.0712+" />+<path d="M264.1280 193.0712+L263.5566 193.0712+" />+<path d="M265.6280 193.7141+L265.4852 193.7855+" />+<path d="M265.4852 193.7855+L265.1995 193.7855+" />+<path d="M265.1995 193.7855+L265.0566 193.7141+" />+<path d="M265.0566 193.7141+L264.9852 193.5712+" />+<path d="M264.9852 193.5712+L264.9852 192.9998+" />+<path d="M264.9852 192.9998+L265.0566 192.8569+" />+<path d="M265.0566 192.8569+L265.1995 192.7855+" />+<path d="M265.1995 192.7855+L265.4852 192.7855+" />+<path d="M265.4852 192.7855+L265.6280 192.8569+" />+<path d="M265.6280 192.8569+L265.6995 192.9998+" />+<path d="M265.6995 192.9998+L265.6995 193.1426+" />+<path d="M265.6995 193.1426+L264.9852 193.2855+" />+<path d="M266.1994 192.7855+L266.5566 193.7855+" />+<path d="M266.5566 193.7855+L266.9137 192.7855+" />+<path d="M267.4852 193.6426+L267.5566 193.7141+" />+<path d="M267.5566 193.7141+L267.4852 193.7855+" />+<path d="M267.4852 193.7855+L267.4138 193.7141+" />+<path d="M267.4138 193.7141+L267.4852 193.6426+" />+<path d="M267.4852 193.6426+L267.4852 193.7855+" />+<path d="M267.4852 192.8569+L267.5566 192.9283+" />+<path d="M267.5566 192.9283+L267.4852 192.9998+" />+<path d="M267.4852 192.9998+L267.4138 192.9283+" />+<path d="M267.4138 192.9283+L267.4852 192.8569+" />+<path d="M267.4852 192.8569+L267.4852 192.9998+" />+<path d="M269.2710 193.3569+L269.9853 193.3569+" />+<path d="M269.1281 193.7855+L269.6281 192.2855+" />+<path d="M269.6281 192.2855+L270.1281 193.7855+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="178.0022" y="193.8572"+textLength="9.3716" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">Size: A4</text>+<g class="stroked-text"><desc>Size: A4</desc>+<path d="M178.3881 193.7217+L178.6024 193.7931+" />+<path d="M178.6024 193.7931+L178.9595 193.7931+" />+<path d="M178.9595 193.7931+L179.1024 193.7217+" />+<path d="M179.1024 193.7217+L179.1738 193.6502+" />+<path d="M179.1738 193.6502+L179.2452 193.5074+" />+<path d="M179.2452 193.5074+L179.2452 193.3645+" />+<path d="M179.2452 193.3645+L179.1738 193.2217+" />+<path d="M179.1738 193.2217+L179.1024 193.1502+" />+<path d="M179.1024 193.1502+L178.9595 193.0788+" />+<path d="M178.9595 193.0788+L178.6738 193.0074+" />+<path d="M178.6738 193.0074+L178.5309 192.9359+" />+<path d="M178.5309 192.9359+L178.4595 192.8645+" />+<path d="M178.4595 192.8645+L178.3881 192.7217+" />+<path d="M178.3881 192.7217+L178.3881 192.5788+" />+<path d="M178.3881 192.5788+L178.4595 192.4359+" />+<path d="M178.4595 192.4359+L178.5309 192.3645+" />+<path d="M178.5309 192.3645+L178.6738 192.2931+" />+<path d="M178.6738 192.2931+L179.0309 192.2931+" />+<path d="M179.0309 192.2931+L179.2452 192.3645+" />+<path d="M179.8881 193.7931+L179.8881 192.7931+" />+<path d="M179.8881 192.2931+L179.8167 192.3645+" />+<path d="M179.8167 192.3645+L179.8881 192.4359+" />+<path d="M179.8881 192.4359+L179.9595 192.3645+" />+<path d="M179.9595 192.3645+L179.8881 192.2931+" />+<path d="M179.8881 192.2931+L179.8881 192.4359+" />+<path d="M180.4595 192.7931+L181.2453 192.7931+" />+<path d="M181.2453 192.7931+L180.4595 193.7931+" />+<path d="M180.4595 193.7931+L181.2453 193.7931+" />+<path d="M182.3881 193.7217+L182.2453 193.7931+" />+<path d="M182.2453 193.7931+L181.9596 193.7931+" />+<path d="M181.9596 193.7931+L181.8167 193.7217+" />+<path d="M181.8167 193.7217+L181.7453 193.5788+" />+<path d="M181.7453 193.5788+L181.7453 193.0074+" />+<path d="M181.7453 193.0074+L181.8167 192.8645+" />+<path d="M181.8167 192.8645+L181.9596 192.7931+" />+<path d="M181.9596 192.7931+L182.2453 192.7931+" />+<path d="M182.2453 192.7931+L182.3881 192.8645+" />+<path d="M182.3881 192.8645+L182.4596 193.0074+" />+<path d="M182.4596 193.0074+L182.4596 193.1502+" />+<path d="M182.4596 193.1502+L181.7453 193.2931+" />+<path d="M183.1024 193.6502+L183.1738 193.7217+" />+<path d="M183.1738 193.7217+L183.1024 193.7931+" />+<path d="M183.1024 193.7931+L183.0310 193.7217+" />+<path d="M183.0310 193.7217+L183.1024 193.6502+" />+<path d="M183.1024 193.6502+L183.1024 193.7931+" />+<path d="M183.1024 192.8645+L183.1738 192.9359+" />+<path d="M183.1738 192.9359+L183.1024 193.0074+" />+<path d="M183.1024 193.0074+L183.0310 192.9359+" />+<path d="M183.0310 192.9359+L183.1024 192.8645+" />+<path d="M183.1024 192.8645+L183.1024 193.0074+" />+<path d="M184.8882 193.3645+L185.6025 193.3645+" />+<path d="M184.7453 193.7931+L185.2453 192.2931+" />+<path d="M185.2453 192.2931+L185.7453 193.7931+" />+<path d="M186.8882 192.7931+L186.8882 193.7931+" />+<path d="M186.5310 192.2217+L186.1739 193.2931+" />+<path d="M186.1739 193.2931+L187.1024 193.2931+" />+</g><text x="263.0022" y="196.6572"+textLength="8.5144" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">Id: 1/1</text>+<g class="stroked-text"><desc>Id: 1/1</desc>+<path d="M263.4595 196.5931+L263.4595 195.0931+" />+<path d="M264.8167 196.5931+L264.8167 195.0931+" />+<path d="M264.8167 196.5217+L264.6738 196.5931+" />+<path d="M264.6738 196.5931+L264.3881 196.5931+" />+<path d="M264.3881 196.5931+L264.2452 196.5217+" />+<path d="M264.2452 196.5217+L264.1738 196.4502+" />+<path d="M264.1738 196.4502+L264.1024 196.3074+" />+<path d="M264.1024 196.3074+L264.1024 195.8788+" />+<path d="M264.1024 195.8788+L264.1738 195.7359+" />+<path d="M264.1738 195.7359+L264.2452 195.6645+" />+<path d="M264.2452 195.6645+L264.3881 195.5931+" />+<path d="M264.3881 195.5931+L264.6738 195.5931+" />+<path d="M264.6738 195.5931+L264.8167 195.6645+" />+<path d="M265.5309 196.4502+L265.6023 196.5217+" />+<path d="M265.6023 196.5217+L265.5309 196.5931+" />+<path d="M265.5309 196.5931+L265.4595 196.5217+" />+<path d="M265.4595 196.5217+L265.5309 196.4502+" />+<path d="M265.5309 196.4502+L265.5309 196.5931+" />+<path d="M265.5309 195.6645+L265.6023 195.7359+" />+<path d="M265.6023 195.7359+L265.5309 195.8074+" />+<path d="M265.5309 195.8074+L265.4595 195.7359+" />+<path d="M265.4595 195.7359+L265.5309 195.6645+" />+<path d="M265.5309 195.6645+L265.5309 195.8074+" />+<path d="M268.1738 196.5931+L267.3167 196.5931+" />+<path d="M267.7452 196.5931+L267.7452 195.0931+" />+<path d="M267.7452 195.0931+L267.6024 195.3074+" />+<path d="M267.6024 195.3074+L267.4595 195.4502+" />+<path d="M267.4595 195.4502+L267.3167 195.5217+" />+<path d="M269.8881 195.0217+L268.6024 196.9502+" />+<path d="M271.1738 196.5931+L270.3167 196.5931+" />+<path d="M270.7452 196.5931+L270.7452 195.0931+" />+<path d="M270.7452 195.0931+L270.6024 195.3074+" />+<path d="M270.6024 195.3074+L270.4595 195.4502+" />+<path d="M270.4595 195.4502+L270.3167 195.5217+" />+</g><path d="M177.0022 187.5072+L285.0022 187.5072+" />+</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.4000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="178.0022" y="190.3072"+textLength="16.0381" font-size="2.6666" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">Title: MCU</text>+<g class="stroked-text"><desc>Title: MCU</desc>+<path d="M178.6938 188.2116+L179.8367 188.2116+" />+<path d="M179.0153 190.2116+L179.2653 188.2116+" />+<path d="M180.2533 190.2116+L180.4200 188.8783+" />+<path d="M180.5033 188.2116+L180.3962 188.3068+" />+<path d="M180.3962 188.3068+L180.4795 188.4021+" />+<path d="M180.4795 188.4021+L180.5867 188.3068+" />+<path d="M180.5867 188.3068+L180.5033 188.2116+" />+<path d="M180.5033 188.2116+L180.4795 188.4021+" />+<path d="M181.0867 188.8783+L181.8486 188.8783+" />+<path d="M181.4557 188.2116+L181.2415 189.9259+" />+<path d="M181.2415 189.9259+L181.3129 190.1164+" />+<path d="M181.3129 190.1164+L181.4915 190.2116+" />+<path d="M181.4915 190.2116+L181.6819 190.2116+" />+<path d="M182.6344 190.2116+L182.4558 190.1164+" />+<path d="M182.4558 190.1164+L182.3844 189.9259+" />+<path d="M182.3844 189.9259+L182.5986 188.2116+" />+<path d="M184.1700 190.1164+L183.9677 190.2116+" />+<path d="M183.9677 190.2116+L183.5867 190.2116+" />+<path d="M183.5867 190.2116+L183.4081 190.1164+" />+<path d="M183.4081 190.1164+L183.3367 189.9259+" />+<path d="M183.3367 189.9259+L183.4320 189.1640+" />+<path d="M183.4320 189.1640+L183.5510 188.9735+" />+<path d="M183.5510 188.9735+L183.7534 188.8783+" />+<path d="M183.7534 188.8783+L184.1343 188.8783+" />+<path d="M184.1343 188.8783+L184.3129 188.9735+" />+<path d="M184.3129 188.9735+L184.3843 189.1640+" />+<path d="M184.3843 189.1640+L184.3605 189.3544+" />+<path d="M184.3605 189.3544+L183.3843 189.5449+" />+<path d="M185.1343 190.0211+L185.2177 190.1164+" />+<path d="M185.2177 190.1164+L185.1105 190.2116+" />+<path d="M185.1105 190.2116+L185.0272 190.1164+" />+<path d="M185.0272 190.1164+L185.1343 190.0211+" />+<path d="M185.1343 190.0211+L185.1105 190.2116+" />+<path d="M185.2653 188.9735+L185.3486 189.0687+" />+<path d="M185.3486 189.0687+L185.2415 189.1640+" />+<path d="M185.2415 189.1640+L185.1582 189.0687+" />+<path d="M185.1582 189.0687+L185.2653 188.9735+" />+<path d="M185.2653 188.9735+L185.2415 189.1640+" />+<path d="M187.5867 190.2116+L187.8367 188.2116+" />+<path d="M187.8367 188.2116+L188.3248 189.6402+" />+<path d="M188.3248 189.6402+L189.1701 188.2116+" />+<path d="M189.1701 188.2116+L188.9201 190.2116+" />+<path d="M191.0391 190.0211+L190.9320 190.1164+" />+<path d="M190.9320 190.1164+L190.6343 190.2116+" />+<path d="M190.6343 190.2116+L190.4439 190.2116+" />+<path d="M190.4439 190.2116+L190.1701 190.1164+" />+<path d="M190.1701 190.1164+L190.0034 189.9259+" />+<path d="M190.0034 189.9259+L189.9320 189.7354+" />+<path d="M189.9320 189.7354+L189.8843 189.3544+" />+<path d="M189.8843 189.3544+L189.9201 189.0687+" />+<path d="M189.9201 189.0687+L190.0629 188.6878+" />+<path d="M190.0629 188.6878+L190.1820 188.4973+" />+<path d="M190.1820 188.4973+L190.3962 188.3068+" />+<path d="M190.3962 188.3068+L190.6939 188.2116+" />+<path d="M190.6939 188.2116+L190.8843 188.2116+" />+<path d="M190.8843 188.2116+L191.1582 188.3068+" />+<path d="M191.1582 188.3068+L191.2415 188.4021+" />+<path d="M192.1224 188.2116+L191.9201 189.8306+" />+<path d="M191.9201 189.8306+L191.9915 190.0211+" />+<path d="M191.9915 190.0211+L192.0748 190.1164+" />+<path d="M192.0748 190.1164+L192.2534 190.2116+" />+<path d="M192.2534 190.2116+L192.6343 190.2116+" />+<path d="M192.6343 190.2116+L192.8367 190.1164+" />+<path d="M192.8367 190.1164+L192.9439 190.0211+" />+<path d="M192.9439 190.0211+L193.0629 189.8306+" />+<path d="M193.0629 189.8306+L193.2653 188.2116+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="178.0022" y="186.4572"+textLength="30.8713" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">File: .tmpmtA6hA.kicad_sch</text>+<g class="stroked-text"><desc>File: .tmpmtA6hA.kicad_sch</desc>+<path d="M178.9595 185.6074+L178.4595 185.6074+" />+<path d="M178.4595 186.3931+L178.4595 184.8931+" />+<path d="M178.4595 184.8931+L179.1738 184.8931+" />+<path d="M179.7452 186.3931+L179.7452 185.3931+" />+<path d="M179.7452 184.8931+L179.6738 184.9645+" />+<path d="M179.6738 184.9645+L179.7452 185.0359+" />+<path d="M179.7452 185.0359+L179.8166 184.9645+" />+<path d="M179.8166 184.9645+L179.7452 184.8931+" />+<path d="M179.7452 184.8931+L179.7452 185.0359+" />+<path d="M180.6738 186.3931+L180.5309 186.3217+" />+<path d="M180.5309 186.3217+L180.4595 186.1788+" />+<path d="M180.4595 186.1788+L180.4595 184.8931+" />+<path d="M181.8166 186.3217+L181.6738 186.3931+" />+<path d="M181.6738 186.3931+L181.3881 186.3931+" />+<path d="M181.3881 186.3931+L181.2452 186.3217+" />+<path d="M181.2452 186.3217+L181.1738 186.1788+" />+<path d="M181.1738 186.1788+L181.1738 185.6074+" />+<path d="M181.1738 185.6074+L181.2452 185.4645+" />+<path d="M181.2452 185.4645+L181.3881 185.3931+" />+<path d="M181.3881 185.3931+L181.6738 185.3931+" />+<path d="M181.6738 185.3931+L181.8166 185.4645+" />+<path d="M181.8166 185.4645+L181.8881 185.6074+" />+<path d="M181.8881 185.6074+L181.8881 185.7502+" />+<path d="M181.8881 185.7502+L181.1738 185.8931+" />+<path d="M182.5309 186.2502+L182.6023 186.3217+" />+<path d="M182.6023 186.3217+L182.5309 186.3931+" />+<path d="M182.5309 186.3931+L182.4595 186.3217+" />+<path d="M182.4595 186.3217+L182.5309 186.2502+" />+<path d="M182.5309 186.2502+L182.5309 186.3931+" />+<path d="M182.5309 185.4645+L182.6023 185.5359+" />+<path d="M182.6023 185.5359+L182.5309 185.6074+" />+<path d="M182.5309 185.6074+L182.4595 185.5359+" />+<path d="M182.4595 185.5359+L182.5309 185.4645+" />+<path d="M182.5309 185.4645+L182.5309 185.6074+" />+<path d="M184.3881 186.2502+L184.4595 186.3217+" />+<path d="M184.4595 186.3217+L184.3881 186.3931+" />+<path d="M184.3881 186.3931+L184.3167 186.3217+" />+<path d="M184.3167 186.3217+L184.3881 186.2502+" />+<path d="M184.3881 186.2502+L184.3881 186.3931+" />+<path d="M184.8881 185.3931+L185.4595 185.3931+" />+<path d="M185.1024 184.8931+L185.1024 186.1788+" />+<path d="M185.1024 186.1788+L185.1738 186.3217+" />+<path d="M185.1738 186.3217+L185.3167 186.3931+" />+<path d="M185.3167 186.3931+L185.4595 186.3931+" />+<path d="M185.9595 186.3931+L185.9595 185.3931+" />+<path d="M185.9595 185.5359+L186.0309 185.4645+" />+<path d="M186.0309 185.4645+L186.1738 185.3931+" />+<path d="M186.1738 185.3931+L186.3881 185.3931+" />+<path d="M186.3881 185.3931+L186.5309 185.4645+" />+<path d="M186.5309 185.4645+L186.6024 185.6074+" />+<path d="M186.6024 185.6074+L186.6024 186.3931+" />+<path d="M186.6024 185.6074+L186.6738 185.4645+" />+<path d="M186.6738 185.4645+L186.8166 185.3931+" />+<path d="M186.8166 185.3931+L187.0309 185.3931+" />+<path d="M187.0309 185.3931+L187.1738 185.4645+" />+<path d="M187.1738 185.4645+L187.2452 185.6074+" />+<path d="M187.2452 185.6074+L187.2452 186.3931+" />+<path d="M187.9595 185.3931+L187.9595 186.8931+" />+<path d="M187.9595 185.4645+L188.1024 185.3931+" />+<path d="M188.1024 185.3931+L188.3881 185.3931+" />+<path d="M188.3881 185.3931+L188.5309 185.4645+" />+<path d="M188.5309 185.4645+L188.6024 185.5359+" />+<path d="M188.6024 185.5359+L188.6738 185.6788+" />+<path d="M188.6738 185.6788+L188.6738 186.1074+" />+<path d="M188.6738 186.1074+L188.6024 186.2502+" />+<path d="M188.6024 186.2502+L188.5309 186.3217+" />+<path d="M188.5309 186.3217+L188.3881 186.3931+" />+<path d="M188.3881 186.3931+L188.1024 186.3931+" />+<path d="M188.1024 186.3931+L187.9595 186.3217+" />+<path d="M189.3166 186.3931+L189.3166 185.3931+" />+<path d="M189.3166 185.5359+L189.3880 185.4645+" />+<path d="M189.3880 185.4645+L189.5309 185.3931+" />+<path d="M189.5309 185.3931+L189.7452 185.3931+" />+<path d="M189.7452 185.3931+L189.8880 185.4645+" />+<path d="M189.8880 185.4645+L189.9595 185.6074+" />+<path d="M189.9595 185.6074+L189.9595 186.3931+" />+<path d="M189.9595 185.6074+L190.0309 185.4645+" />+<path d="M190.0309 185.4645+L190.1737 185.3931+" />+<path d="M190.1737 185.3931+L190.3880 185.3931+" />+<path d="M190.3880 185.3931+L190.5309 185.4645+" />+<path d="M190.5309 185.4645+L190.6023 185.6074+" />+<path d="M190.6023 185.6074+L190.6023 186.3931+" />+<path d="M191.1023 185.3931+L191.6737 185.3931+" />+<path d="M191.3166 184.8931+L191.3166 186.1788+" />+<path d="M191.3166 186.1788+L191.3880 186.3217+" />+<path d="M191.3880 186.3217+L191.5309 186.3931+" />+<path d="M191.5309 186.3931+L191.6737 186.3931+" />+<path d="M192.1023 185.9645+L192.8166 185.9645+" />+<path d="M191.9594 186.3931+L192.4594 184.8931+" />+<path d="M192.4594 184.8931+L192.9594 186.3931+" />+<path d="M194.1023 184.8931+L193.8165 184.8931+" />+<path d="M193.8165 184.8931+L193.6737 184.9645+" />+<path d="M193.6737 184.9645+L193.6023 185.0359+" />+<path d="M193.6023 185.0359+L193.4594 185.2502+" />+<path d="M193.4594 185.2502+L193.3880 185.5359+" />+<path d="M193.3880 185.5359+L193.3880 186.1074+" />+<path d="M193.3880 186.1074+L193.4594 186.2502+" />+<path d="M193.4594 186.2502+L193.5308 186.3217+" />+<path d="M193.5308 186.3217+L193.6737 186.3931+" />+<path d="M193.6737 186.3931+L193.9594 186.3931+" />+<path d="M193.9594 186.3931+L194.1023 186.3217+" />+<path d="M194.1023 186.3217+L194.1737 186.2502+" />+<path d="M194.1737 186.2502+L194.2451 186.1074+" />+<path d="M194.2451 186.1074+L194.2451 185.7502+" />+<path d="M194.2451 185.7502+L194.1737 185.6074+" />+<path d="M194.1737 185.6074+L194.1023 185.5359+" />+<path d="M194.1023 185.5359+L193.9594 185.4645+" />+<path d="M193.9594 185.4645+L193.6737 185.4645+" />+<path d="M193.6737 185.4645+L193.5308 185.5359+" />+<path d="M193.5308 185.5359+L193.4594 185.6074+" />+<path d="M193.4594 185.6074+L193.3880 185.7502+" />+<path d="M194.8880 186.3931+L194.8880 184.8931+" />+<path d="M195.5309 186.3931+L195.5309 185.6074+" />+<path d="M195.5309 185.6074+L195.4594 185.4645+" />+<path d="M195.4594 185.4645+L195.3166 185.3931+" />+<path d="M195.3166 185.3931+L195.1023 185.3931+" />+<path d="M195.1023 185.3931+L194.9594 185.4645+" />+<path d="M194.9594 185.4645+L194.8880 185.5359+" />+<path d="M196.1737 185.9645+L196.8880 185.9645+" />+<path d="M196.0308 186.3931+L196.5308 184.8931+" />+<path d="M196.5308 184.8931+L197.0308 186.3931+" />+<path d="M197.5308 186.2502+L197.6022 186.3217+" />+<path d="M197.6022 186.3217+L197.5308 186.3931+" />+<path d="M197.5308 186.3931+L197.4594 186.3217+" />+<path d="M197.4594 186.3217+L197.5308 186.2502+" />+<path d="M197.5308 186.2502+L197.5308 186.3931+" />+<path d="M198.2451 186.3931+L198.2451 184.8931+" />+<path d="M198.3880 185.8217+L198.8165 186.3931+" />+<path d="M198.8165 185.3931+L198.2451 185.9645+" />+<path d="M199.4594 186.3931+L199.4594 185.3931+" />+<path d="M199.4594 184.8931+L199.3880 184.9645+" />+<path d="M199.3880 184.9645+L199.4594 185.0359+" />+<path d="M199.4594 185.0359+L199.5308 184.9645+" />+<path d="M199.5308 184.9645+L199.4594 184.8931+" />+<path d="M199.4594 184.8931+L199.4594 185.0359+" />+<path d="M200.8166 186.3217+L200.6737 186.3931+" />+<path d="M200.6737 186.3931+L200.3880 186.3931+" />+<path d="M200.3880 186.3931+L200.2451 186.3217+" />+<path d="M200.2451 186.3217+L200.1737 186.2502+" />+<path d="M200.1737 186.2502+L200.1023 186.1074+" />+<path d="M200.1023 186.1074+L200.1023 185.6788+" />+<path d="M200.1023 185.6788+L200.1737 185.5359+" />+<path d="M200.1737 185.5359+L200.2451 185.4645+" />+<path d="M200.2451 185.4645+L200.3880 185.3931+" />+<path d="M200.3880 185.3931+L200.6737 185.3931+" />+<path d="M200.6737 185.3931+L200.8166 185.4645+" />+<path d="M202.1023 186.3931+L202.1023 185.6074+" />+<path d="M202.1023 185.6074+L202.0308 185.4645+" />+<path d="M202.0308 185.4645+L201.8880 185.3931+" />+<path d="M201.8880 185.3931+L201.6023 185.3931+" />+<path d="M201.6023 185.3931+L201.4594 185.4645+" />+<path d="M202.1023 186.3217+L201.9594 186.3931+" />+<path d="M201.9594 186.3931+L201.6023 186.3931+" />+<path d="M201.6023 186.3931+L201.4594 186.3217+" />+<path d="M201.4594 186.3217+L201.3880 186.1788+" />+<path d="M201.3880 186.1788+L201.3880 186.0359+" />+<path d="M201.3880 186.0359+L201.4594 185.8931+" />+<path d="M201.4594 185.8931+L201.6023 185.8217+" />+<path d="M201.6023 185.8217+L201.9594 185.8217+" />+<path d="M201.9594 185.8217+L202.1023 185.7502+" />+<path d="M203.4594 186.3931+L203.4594 184.8931+" />+<path d="M203.4594 186.3217+L203.3165 186.3931+" />+<path d="M203.3165 186.3931+L203.0308 186.3931+" />+<path d="M203.0308 186.3931+L202.8879 186.3217+" />+<path d="M202.8879 186.3217+L202.8165 186.2502+" />+<path d="M202.8165 186.2502+L202.7451 186.1074+" />+<path d="M202.7451 186.1074+L202.7451 185.6788+" />+<path d="M202.7451 185.6788+L202.8165 185.5359+" />+<path d="M202.8165 185.5359+L202.8879 185.4645+" />+<path d="M202.8879 185.4645+L203.0308 185.3931+" />+<path d="M203.0308 185.3931+L203.3165 185.3931+" />+<path d="M203.3165 185.3931+L203.4594 185.4645+" />+<path d="M203.8165 186.5359+L204.9593 186.5359+" />+<path d="M205.2451 186.3217+L205.3879 186.3931+" />+<path d="M205.3879 186.3931+L205.6736 186.3931+" />+<path d="M205.6736 186.3931+L205.8165 186.3217+" />+<path d="M205.8165 186.3217+L205.8879 186.1788+" />+<path d="M205.8879 186.1788+L205.8879 186.1074+" />+<path d="M205.8879 186.1074+L205.8165 185.9645+" />+<path d="M205.8165 185.9645+L205.6736 185.8931+" />+<path d="M205.6736 185.8931+L205.4594 185.8931+" />+<path d="M205.4594 185.8931+L205.3165 185.8217+" />+<path d="M205.3165 185.8217+L205.2451 185.6788+" />+<path d="M205.2451 185.6788+L205.2451 185.6074+" />+<path d="M205.2451 185.6074+L205.3165 185.4645+" />+<path d="M205.3165 185.4645+L205.4594 185.3931+" />+<path d="M205.4594 185.3931+L205.6736 185.3931+" />+<path d="M205.6736 185.3931+L205.8165 185.4645+" />+<path d="M207.1737 186.3217+L207.0308 186.3931+" />+<path d="M207.0308 186.3931+L206.7451 186.3931+" />+<path d="M206.7451 186.3931+L206.6022 186.3217+" />+<path d="M206.6022 186.3217+L206.5308 186.2502+" />+<path d="M206.5308 186.2502+L206.4594 186.1074+" />+<path d="M206.4594 186.1074+L206.4594 185.6788+" />+<path d="M206.4594 185.6788+L206.5308 185.5359+" />+<path d="M206.5308 185.5359+L206.6022 185.4645+" />+<path d="M206.6022 185.4645+L206.7451 185.3931+" />+<path d="M206.7451 185.3931+L207.0308 185.3931+" />+<path d="M207.0308 185.3931+L207.1737 185.4645+" />+<path d="M207.8165 186.3931+L207.8165 184.8931+" />+<path d="M208.4594 186.3931+L208.4594 185.6074+" />+<path d="M208.4594 185.6074+L208.3879 185.4645+" />+<path d="M208.3879 185.4645+L208.2451 185.3931+" />+<path d="M208.2451 185.3931+L208.0308 185.3931+" />+<path d="M208.0308 185.3931+L207.8879 185.4645+" />+<path d="M207.8879 185.4645+L207.8165 185.5359+" />+</g><path d="M177.0022 181.5072+L285.0022 181.5072+" />+<text x="178.0022" y="183.7572"+textLength="9.8000" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">Sheet: /</text>+<g class="stroked-text"><desc>Sheet: /</desc>+<path d="M178.3881 183.6217+L178.6024 183.6931+" />+<path d="M178.6024 183.6931+L178.9595 183.6931+" />+<path d="M178.9595 183.6931+L179.1024 183.6217+" />+<path d="M179.1024 183.6217+L179.1738 183.5502+" />+<path d="M179.1738 183.5502+L179.2452 183.4074+" />+<path d="M179.2452 183.4074+L179.2452 183.2645+" />+<path d="M179.2452 183.2645+L179.1738 183.1217+" />+<path d="M179.1738 183.1217+L179.1024 183.0502+" />+<path d="M179.1024 183.0502+L178.9595 182.9788+" />+<path d="M178.9595 182.9788+L178.6738 182.9074+" />+<path d="M178.6738 182.9074+L178.5309 182.8359+" />+<path d="M178.5309 182.8359+L178.4595 182.7645+" />+<path d="M178.4595 182.7645+L178.3881 182.6217+" />+<path d="M178.3881 182.6217+L178.3881 182.4788+" />+<path d="M178.3881 182.4788+L178.4595 182.3359+" />+<path d="M178.4595 182.3359+L178.5309 182.2645+" />+<path d="M178.5309 182.2645+L178.6738 182.1931+" />+<path d="M178.6738 182.1931+L179.0309 182.1931+" />+<path d="M179.0309 182.1931+L179.2452 182.2645+" />+<path d="M179.8881 183.6931+L179.8881 182.1931+" />+<path d="M180.5310 183.6931+L180.5310 182.9074+" />+<path d="M180.5310 182.9074+L180.4595 182.7645+" />+<path d="M180.4595 182.7645+L180.3167 182.6931+" />+<path d="M180.3167 182.6931+L180.1024 182.6931+" />+<path d="M180.1024 182.6931+L179.9595 182.7645+" />+<path d="M179.9595 182.7645+L179.8881 182.8359+" />+<path d="M181.8166 183.6217+L181.6738 183.6931+" />+<path d="M181.6738 183.6931+L181.3881 183.6931+" />+<path d="M181.3881 183.6931+L181.2452 183.6217+" />+<path d="M181.2452 183.6217+L181.1738 183.4788+" />+<path d="M181.1738 183.4788+L181.1738 182.9074+" />+<path d="M181.1738 182.9074+L181.2452 182.7645+" />+<path d="M181.2452 182.7645+L181.3881 182.6931+" />+<path d="M181.3881 182.6931+L181.6738 182.6931+" />+<path d="M181.6738 182.6931+L181.8166 182.7645+" />+<path d="M181.8166 182.7645+L181.8881 182.9074+" />+<path d="M181.8881 182.9074+L181.8881 183.0502+" />+<path d="M181.8881 183.0502+L181.1738 183.1931+" />+<path d="M183.1023 183.6217+L182.9595 183.6931+" />+<path d="M182.9595 183.6931+L182.6738 183.6931+" />+<path d="M182.6738 183.6931+L182.5309 183.6217+" />+<path d="M182.5309 183.6217+L182.4595 183.4788+" />+<path d="M182.4595 183.4788+L182.4595 182.9074+" />+<path d="M182.4595 182.9074+L182.5309 182.7645+" />+<path d="M182.5309 182.7645+L182.6738 182.6931+" />+<path d="M182.6738 182.6931+L182.9595 182.6931+" />+<path d="M182.9595 182.6931+L183.1023 182.7645+" />+<path d="M183.1023 182.7645+L183.1738 182.9074+" />+<path d="M183.1738 182.9074+L183.1738 183.0502+" />+<path d="M183.1738 183.0502+L182.4595 183.1931+" />+<path d="M183.6023 182.6931+L184.1737 182.6931+" />+<path d="M183.8166 182.1931+L183.8166 183.4788+" />+<path d="M183.8166 183.4788+L183.8880 183.6217+" />+<path d="M183.8880 183.6217+L184.0309 183.6931+" />+<path d="M184.0309 183.6931+L184.1737 183.6931+" />+<path d="M184.6737 183.5502+L184.7451 183.6217+" />+<path d="M184.7451 183.6217+L184.6737 183.6931+" />+<path d="M184.6737 183.6931+L184.6023 183.6217+" />+<path d="M184.6023 183.6217+L184.6737 183.5502+" />+<path d="M184.6737 183.5502+L184.6737 183.6931+" />+<path d="M184.6737 182.7645+L184.7451 182.8359+" />+<path d="M184.7451 182.8359+L184.6737 182.9074+" />+<path d="M184.6737 182.9074+L184.6023 182.8359+" />+<path d="M184.6023 182.8359+L184.6737 182.7645+" />+<path d="M184.6737 182.7645+L184.6737 182.9074+" />+<path d="M187.6023 182.1217+L186.3166 184.0502+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.3000; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="178.0022" y="180.7572"+textLength="0.9000" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0"></text>+<g class="stroked-text"><desc></desc>+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="178.0022" y="177.7572"+textLength="0.4572" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0"></text>+<g class="stroked-text"><desc></desc>+</g><text x="178.0022" y="174.7572"+textLength="0.4572" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0"></text>+<g class="stroked-text"><desc></desc>+</g><text x="178.0022" y="171.7572"+textLength="0.4572" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0"></text>+<g class="stroked-text"><desc></desc>+</g><text x="178.0022" y="168.7572"+textLength="0.4572" font-size="2.0000" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0"></text>+<g class="stroked-text"><desc></desc>+</g><path d="M197.0022 191.5072+L197.0022 194.5072+" />+<path d="M261.0022 191.5072+L261.0022 198.0072+" />+<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 111.7600,76.2000+111.7600,77.4700+113.0300,77.4700+111.7600,78.7400+110.4900,77.4700+111.7600,77.4700+" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M111.7600 76.2000+L111.7600 76.2000+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="116.3464" y="78.1050"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">GND</text>+<g class="stroked-text"><desc>GND</desc>+<path d="M115.3788 76.8400+L115.2578 76.7795+" />+<path d="M115.2578 76.7795+L115.0764 76.7795+" />+<path d="M115.0764 76.7795+L114.8950 76.8400+" />+<path d="M114.8950 76.8400+L114.7740 76.9610+" />+<path d="M114.7740 76.9610+L114.7135 77.0819+" />+<path d="M114.7135 77.0819+L114.6531 77.3238+" />+<path d="M114.6531 77.3238+L114.6531 77.5052+" />+<path d="M114.6531 77.5052+L114.7135 77.7471+" />+<path d="M114.7135 77.7471+L114.7740 77.8681+" />+<path d="M114.7740 77.8681+L114.8950 77.9891+" />+<path d="M114.8950 77.9891+L115.0764 78.0495+" />+<path d="M115.0764 78.0495+L115.1973 78.0495+" />+<path d="M115.1973 78.0495+L115.3788 77.9891+" />+<path d="M115.3788 77.9891+L115.4392 77.9286+" />+<path d="M115.4392 77.9286+L115.4392 77.5052+" />+<path d="M115.4392 77.5052+L115.1973 77.5052+" />+<path d="M115.9835 78.0495+L115.9835 76.7795+" />+<path d="M115.9835 76.7795+L116.7092 78.0495+" />+<path d="M116.7092 78.0495+L116.7092 76.7795+" />+<path d="M117.3140 78.0495+L117.3140 76.7795+" />+<path d="M117.3140 76.7795+L117.6164 76.7795+" />+<path d="M117.6164 76.7795+L117.7978 76.8400+" />+<path d="M117.7978 76.8400+L117.9188 76.9610+" />+<path d="M117.9188 76.9610+L117.9793 77.0819+" />+<path d="M117.9793 77.0819+L118.0397 77.3238+" />+<path d="M118.0397 77.3238+L118.0397 77.5052+" />+<path d="M118.0397 77.5052+L117.9793 77.7471+" />+<path d="M117.9793 77.7471+L117.9188 77.8681+" />+<path d="M117.9188 77.8681+L117.7978 77.9891+" />+<path d="M117.7978 77.9891+L117.6164 78.0495+" />+<path d="M117.6164 78.0495+L117.3140 78.0495+" />+</g></g>+<g style="fill:#840000; fill-opacity:1.0000; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<rect x="111.760000" y="60.833000" width="0.863600" height="0.254000" rx="0.000000" />+<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 113.0300,60.9600+112.6236,60.9600+" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M113.0300 60.9600+L116.8400 60.9600+" />+</g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="114.9350" y="60.7060"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">1</text>+<g class="stroked-text"><desc>1</desc>+<path d="M115.2979 60.5425+L114.5722 60.5425+" />+<path d="M114.9350 60.5425+L114.9350 59.2725+" />+<path d="M114.9350 59.2725+L114.8141 59.4540+" />+<path d="M114.8141 59.4540+L114.6931 59.5749+" />+<path d="M114.6931 59.5749+L114.5722 59.6354+" />+</g></g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="115.4997" y="60.3250"+textLength="2.3803" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">J3</text>+<g class="stroked-text"><desc>J3</desc>+<path d="M115.0764 58.9995+L115.0764 59.9067+" />+<path d="M115.0764 59.9067+L115.0159 60.0881+" />+<path d="M115.0159 60.0881+L114.8950 60.2091+" />+<path d="M114.8950 60.2091+L114.7135 60.2695+" />+<path d="M114.7135 60.2695+L114.5926 60.2695+" />+<path d="M115.5602 58.9995+L116.3464 58.9995+" />+<path d="M116.3464 58.9995+L115.9230 59.4833+" />+<path d="M115.9230 59.4833+L116.1045 59.4833+" />+<path d="M116.1045 59.4833+L116.2254 59.5438+" />+<path d="M116.2254 59.5438+L116.2859 59.6043+" />+<path d="M116.2859 59.6043+L116.3464 59.7252+" />+<path d="M116.3464 59.7252+L116.3464 60.0276+" />+<path d="M116.3464 60.0276+L116.2859 60.1486+" />+<path d="M116.2859 60.1486+L116.2254 60.2091+" />+<path d="M116.2254 60.2091+L116.1045 60.2695+" />+<path d="M116.1045 60.2695+L115.7416 60.2695+" />+<path d="M115.7416 60.2695+L115.6207 60.2091+" />+<path d="M115.6207 60.2091+L115.5602 60.1486+" />+</g><text x="115.9231" y="62.8650"+textLength="3.2271" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">VIO</text>+<g class="stroked-text"><desc>VIO</desc>+<path d="M114.5321 61.5395+L114.9554 62.8095+" />+<path d="M114.9554 62.8095+L115.3788 61.5395+" />+<path d="M115.8021 62.8095+L115.8021 61.5395+" />+<path d="M116.6488 61.5395+L116.8907 61.5395+" />+<path d="M116.8907 61.5395+L117.0117 61.6000+" />+<path d="M117.0117 61.6000+L117.1326 61.7210+" />+<path d="M117.1326 61.7210+L117.1931 61.9629+" />+<path d="M117.1931 61.9629+L117.1931 62.3862+" />+<path d="M117.1931 62.3862+L117.1326 62.6281+" />+<path d="M117.1326 62.6281+L117.0117 62.7491+" />+<path d="M117.0117 62.7491+L116.8907 62.8095+" />+<path d="M116.8907 62.8095+L116.6488 62.8095+" />+<path d="M116.6488 62.8095+L116.5279 62.7491+" />+<path d="M116.5279 62.7491+L116.4069 62.6281+" />+<path d="M116.4069 62.6281+L116.3465 62.3862+" />+<path d="M116.3465 62.3862+L116.3465 61.9629+" />+<path d="M116.3465 61.9629+L116.4069 61.7210+" />+<path d="M116.4069 61.7210+L116.5279 61.6000+" />+<path d="M116.5279 61.6000+L116.6488 61.5395+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<rect x="156.464000" y="92.710000" width="2.032000" height="5.080000" rx="0.000000" />+</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M157.4800 92.7100+L157.4800 91.4400+" />+<path d="M157.4800 97.7900+L157.4800 99.0600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="161.3709" y="94.6150"+textLength="2.6827" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">R1</text>+<g class="stroked-text"><desc>R1</desc>+<path d="M161.1592 94.5595+L160.7359 93.9548+" />+<path d="M160.4335 94.5595+L160.4335 93.2895+" />+<path d="M160.4335 93.2895+L160.9173 93.2895+" />+<path d="M160.9173 93.2895+L161.0383 93.3500+" />+<path d="M161.0383 93.3500+L161.0988 93.4105+" />+<path d="M161.0988 93.4105+L161.1592 93.5314+" />+<path d="M161.1592 93.5314+L161.1592 93.7129+" />+<path d="M161.1592 93.7129+L161.0988 93.8338+" />+<path d="M161.0988 93.8338+L161.0383 93.8943+" />+<path d="M161.0383 93.8943+L160.9173 93.9548+" />+<path d="M160.9173 93.9548+L160.4335 93.9548+" />+<path d="M162.3688 94.5595+L161.6431 94.5595+" />+<path d="M162.0059 94.5595+L162.0059 93.2895+" />+<path d="M162.0059 93.2895+L161.8850 93.4710+" />+<path d="M161.8850 93.4710+L161.7640 93.5919+" />+<path d="M161.7640 93.5919+L161.6431 93.6524+" />+</g><text x="161.8547" y="97.1550"+textLength="3.6503" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">4k7</text>+<g class="stroked-text"><desc>4k7</desc>+<path d="M160.9778 96.2529+L160.9778 97.0995+" />+<path d="M160.6754 95.7691+L160.3731 96.6762+" />+<path d="M160.3731 96.6762+L161.1592 96.6762+" />+<path d="M161.6430 97.0995+L161.6430 95.8295+" />+<path d="M161.7640 96.6157+L162.1268 97.0995+" />+<path d="M162.1268 96.2529+L161.6430 96.7367+" />+<path d="M162.5502 95.8295+L163.3968 95.8295+" />+<path d="M163.3968 95.8295+L162.8526 97.0995+" />+</g><path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 124.4600,106.6800+124.4600,107.9500+125.7300,107.9500+124.4600,109.2200+123.1900,107.9500+124.4600,107.9500+" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M124.4600 106.6800+L124.4600 106.6800+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="129.0464" y="108.5850"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">GND</text>+<g class="stroked-text"><desc>GND</desc>+<path d="M128.0788 107.3200+L127.9578 107.2595+" />+<path d="M127.9578 107.2595+L127.7764 107.2595+" />+<path d="M127.7764 107.2595+L127.5950 107.3200+" />+<path d="M127.5950 107.3200+L127.4740 107.4410+" />+<path d="M127.4740 107.4410+L127.4135 107.5619+" />+<path d="M127.4135 107.5619+L127.3531 107.8038+" />+<path d="M127.3531 107.8038+L127.3531 107.9852+" />+<path d="M127.3531 107.9852+L127.4135 108.2271+" />+<path d="M127.4135 108.2271+L127.4740 108.3481+" />+<path d="M127.4740 108.3481+L127.5950 108.4691+" />+<path d="M127.5950 108.4691+L127.7764 108.5295+" />+<path d="M127.7764 108.5295+L127.8973 108.5295+" />+<path d="M127.8973 108.5295+L128.0788 108.4691+" />+<path d="M128.0788 108.4691+L128.1392 108.4086+" />+<path d="M128.1392 108.4086+L128.1392 107.9852+" />+<path d="M128.1392 107.9852+L127.8973 107.9852+" />+<path d="M128.6835 108.5295+L128.6835 107.2595+" />+<path d="M128.6835 107.2595+L129.4092 108.5295+" />+<path d="M129.4092 108.5295+L129.4092 107.2595+" />+<path d="M130.0140 108.5295+L130.0140 107.2595+" />+<path d="M130.0140 107.2595+L130.3164 107.2595+" />+<path d="M130.3164 107.2595+L130.4978 107.3200+" />+<path d="M130.4978 107.3200+L130.6188 107.4410+" />+<path d="M130.6188 107.4410+L130.6793 107.5619+" />+<path d="M130.6793 107.5619+L130.7397 107.8038+" />+<path d="M130.7397 107.8038+L130.7397 107.9852+" />+<path d="M130.7397 107.9852+L130.6793 108.2271+" />+<path d="M130.6793 108.2271+L130.6188 108.3481+" />+<path d="M130.6188 108.3481+L130.4978 108.4691+" />+<path d="M130.4978 108.4691+L130.3164 108.5295+" />+<path d="M130.3164 108.5295+L130.0140 108.5295+" />+</g><path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 158.2420,100.3300+157.4800,101.6000+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 157.4800,101.6000+156.7180,100.3300+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 157.4800,99.0600+157.4800,101.6000+" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M157.4800 99.0600+L157.4800 99.0600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="157.3688" y="100.9649"+textLength="5.2832" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">+3V3</text>+<g class="stroked-text"><desc>+3V3</desc>+<path d="M155.1311 100.4256+L156.0988 100.4256+" />+<path d="M155.6149 100.9094+L155.6149 99.9418+" />+<path d="M156.5826 99.6394+L157.3688 99.6394+" />+<path d="M157.3688 99.6394+L156.9454 100.1232+" />+<path d="M156.9454 100.1232+L157.1269 100.1232+" />+<path d="M157.1269 100.1232+L157.2478 100.1837+" />+<path d="M157.2478 100.1837+L157.3083 100.2442+" />+<path d="M157.3083 100.2442+L157.3688 100.3651+" />+<path d="M157.3688 100.3651+L157.3688 100.6675+" />+<path d="M157.3688 100.6675+L157.3083 100.7885+" />+<path d="M157.3083 100.7885+L157.2478 100.8490+" />+<path d="M157.2478 100.8490+L157.1269 100.9094+" />+<path d="M157.1269 100.9094+L156.7640 100.9094+" />+<path d="M156.7640 100.9094+L156.6431 100.8490+" />+<path d="M156.6431 100.8490+L156.5826 100.7885+" />+<path d="M157.7316 99.6394+L158.1549 100.9094+" />+<path d="M158.1549 100.9094+L158.5783 99.6394+" />+<path d="M158.8807 99.6394+L159.6669 99.6394+" />+<path d="M159.6669 99.6394+L159.2435 100.1232+" />+<path d="M159.2435 100.1232+L159.4250 100.1232+" />+<path d="M159.4250 100.1232+L159.5459 100.1837+" />+<path d="M159.5459 100.1837+L159.6064 100.2442+" />+<path d="M159.6064 100.2442+L159.6669 100.3651+" />+<path d="M159.6669 100.3651+L159.6669 100.6675+" />+<path d="M159.6669 100.6675+L159.6064 100.7885+" />+<path d="M159.6064 100.7885+L159.5459 100.8490+" />+<path d="M159.5459 100.8490+L159.4250 100.9094+" />+<path d="M159.4250 100.9094+L159.0621 100.9094+" />+<path d="M159.0621 100.9094+L158.9412 100.8490+" />+<path d="M158.9412 100.8490+L158.8807 100.7885+" />+</g></g>+<g style="fill:#FFFFC2; fill-opacity:1.0000; stroke:none;">+<rect x="116.840000" y="78.740000" width="20.320000" height="20.320000" rx="0.000000" />+</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.2540; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<rect x="116.840000" y="78.740000" width="20.320000" height="20.320000" rx="0.000000" />+</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M124.4600 99.0600+L124.4600 104.1400+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.4600 98.5520)">+<text x="124.4600" y="99.1870"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">GND</text>+</g>+<g class="stroked-text"><desc>GND</desc>+<path d="M123.8300 97.4841+L123.7695 97.6051+" />+<path d="M123.7695 97.6051+L123.7695 97.7865+" />+<path d="M123.7695 97.7865+L123.8300 97.9679+" />+<path d="M123.8300 97.9679+L123.9510 98.0889+" />+<path d="M123.9510 98.0889+L124.0719 98.1494+" />+<path d="M124.0719 98.1494+L124.3138 98.2098+" />+<path d="M124.3138 98.2098+L124.4952 98.2098+" />+<path d="M124.4952 98.2098+L124.7371 98.1494+" />+<path d="M124.7371 98.1494+L124.8581 98.0889+" />+<path d="M124.8581 98.0889+L124.9791 97.9679+" />+<path d="M124.9791 97.9679+L125.0395 97.7865+" />+<path d="M125.0395 97.7865+L125.0395 97.6656+" />+<path d="M125.0395 97.6656+L124.9791 97.4841+" />+<path d="M124.9791 97.4841+L124.9186 97.4237+" />+<path d="M124.9186 97.4237+L124.4952 97.4237+" />+<path d="M124.4952 97.4237+L124.4952 97.6656+" />+<path d="M125.0395 96.8794+L123.7695 96.8794+" />+<path d="M123.7695 96.8794+L125.0395 96.1537+" />+<path d="M125.0395 96.1537+L123.7695 96.1537+" />+<path d="M125.0395 95.5489+L123.7695 95.5489+" />+<path d="M123.7695 95.5489+L123.7695 95.2465+" />+<path d="M123.7695 95.2465+L123.8300 95.0651+" />+<path d="M123.8300 95.0651+L123.9510 94.9441+" />+<path d="M123.9510 94.9441+L124.0719 94.8836+" />+<path d="M124.0719 94.8836+L124.3138 94.8232+" />+<path d="M124.3138 94.8232+L124.4952 94.8232+" />+<path d="M124.4952 94.8232+L124.7371 94.8836+" />+<path d="M124.7371 94.8836+L124.8581 94.9441+" />+<path d="M124.8581 94.9441+L124.9791 95.0651+" />+<path d="M124.9791 95.0651+L125.0395 95.2465+" />+<path d="M125.0395 95.2465+L125.0395 95.5489+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.2060 101.6000)">+<text x="124.2060" y="101.6000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">1</text>+</g>+<g class="stroked-text"><desc>1</desc>+<path d="M124.0425 101.2370+L124.0425 101.9627+" />+<path d="M124.0425 101.5999+L122.7725 101.5999+" />+<path d="M122.7725 101.5999+L122.9540 101.7208+" />+<path d="M122.9540 101.7208+L123.0749 101.8418+" />+<path d="M123.0749 101.8418+L123.1354 101.9627+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 96.5200+L142.2400 96.5200+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="97.1550"+textLength="3.9527" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">CSB</text>+<g class="stroked-text"><desc>CSB</desc>+<path d="M133.8303 96.9786+L133.7699 97.0391+" />+<path d="M133.7699 97.0391+L133.5884 97.0995+" />+<path d="M133.5884 97.0995+L133.4675 97.0995+" />+<path d="M133.4675 97.0995+L133.2861 97.0391+" />+<path d="M133.2861 97.0391+L133.1651 96.9181+" />+<path d="M133.1651 96.9181+L133.1046 96.7971+" />+<path d="M133.1046 96.7971+L133.0442 96.5552+" />+<path d="M133.0442 96.5552+L133.0442 96.3738+" />+<path d="M133.0442 96.3738+L133.1046 96.1319+" />+<path d="M133.1046 96.1319+L133.1651 96.0110+" />+<path d="M133.1651 96.0110+L133.2861 95.8900+" />+<path d="M133.2861 95.8900+L133.4675 95.8295+" />+<path d="M133.4675 95.8295+L133.5884 95.8295+" />+<path d="M133.5884 95.8295+L133.7699 95.8900+" />+<path d="M133.7699 95.8900+L133.8303 95.9505+" />+<path d="M134.3142 97.0391+L134.4956 97.0995+" />+<path d="M134.4956 97.0995+L134.7980 97.0995+" />+<path d="M134.7980 97.0995+L134.9189 97.0391+" />+<path d="M134.9189 97.0391+L134.9794 96.9786+" />+<path d="M134.9794 96.9786+L135.0399 96.8576+" />+<path d="M135.0399 96.8576+L135.0399 96.7367+" />+<path d="M135.0399 96.7367+L134.9794 96.6157+" />+<path d="M134.9794 96.6157+L134.9189 96.5552+" />+<path d="M134.9189 96.5552+L134.7980 96.4948+" />+<path d="M134.7980 96.4948+L134.5561 96.4343+" />+<path d="M134.5561 96.4343+L134.4351 96.3738+" />+<path d="M134.4351 96.3738+L134.3746 96.3133+" />+<path d="M134.3746 96.3133+L134.3142 96.1924+" />+<path d="M134.3142 96.1924+L134.3142 96.0714+" />+<path d="M134.3142 96.0714+L134.3746 95.9505+" />+<path d="M134.3746 95.9505+L134.4351 95.8900+" />+<path d="M134.4351 95.8900+L134.5561 95.8295+" />+<path d="M134.5561 95.8295+L134.8584 95.8295+" />+<path d="M134.8584 95.8295+L135.0399 95.8900+" />+<path d="M136.0075 96.4343+L136.1889 96.4948+" />+<path d="M136.1889 96.4948+L136.2494 96.5552+" />+<path d="M136.2494 96.5552+L136.3098 96.6762+" />+<path d="M136.3098 96.6762+L136.3098 96.8576+" />+<path d="M136.3098 96.8576+L136.2494 96.9786+" />+<path d="M136.2494 96.9786+L136.1889 97.0391+" />+<path d="M136.1889 97.0391+L136.0679 97.0995+" />+<path d="M136.0679 97.0995+L135.5841 97.0995+" />+<path d="M135.5841 97.0995+L135.5841 95.8295+" />+<path d="M135.5841 95.8295+L136.0075 95.8295+" />+<path d="M136.0075 95.8295+L136.1284 95.8900+" />+<path d="M136.1284 95.8900+L136.1889 95.9505+" />+<path d="M136.1889 95.9505+L136.2494 96.0714+" />+<path d="M136.2494 96.0714+L136.2494 96.1924+" />+<path d="M136.2494 96.1924+L136.1889 96.3133+" />+<path d="M136.1889 96.3133+L136.1284 96.3738+" />+<path d="M136.1284 96.3738+L136.0075 96.4343+" />+<path d="M136.0075 96.4343+L135.5841 96.4343+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="96.2660"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">2</text>+<g class="stroked-text"><desc>2</desc>+<path d="M139.3372 94.9535+L139.3976 94.8930+" />+<path d="M139.3976 94.8930+L139.5186 94.8325+" />+<path d="M139.5186 94.8325+L139.8210 94.8325+" />+<path d="M139.8210 94.8325+L139.9419 94.8930+" />+<path d="M139.9419 94.8930+L140.0024 94.9535+" />+<path d="M140.0024 94.9535+L140.0629 95.0744+" />+<path d="M140.0629 95.0744+L140.0629 95.1954+" />+<path d="M140.0629 95.1954+L140.0024 95.3768+" />+<path d="M140.0024 95.3768+L139.2767 96.1025+" />+<path d="M139.2767 96.1025+L140.0629 96.1025+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 91.4400+L142.2400 91.4400+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="92.0750"+textLength="3.2875" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">SDI</text>+<g class="stroked-text"><desc>SDI</desc>+<path d="M133.7094 91.9591+L133.8908 92.0195+" />+<path d="M133.8908 92.0195+L134.1932 92.0195+" />+<path d="M134.1932 92.0195+L134.3141 91.9591+" />+<path d="M134.3141 91.9591+L134.3746 91.8986+" />+<path d="M134.3746 91.8986+L134.4351 91.7776+" />+<path d="M134.4351 91.7776+L134.4351 91.6567+" />+<path d="M134.4351 91.6567+L134.3746 91.5357+" />+<path d="M134.3746 91.5357+L134.3141 91.4752+" />+<path d="M134.3141 91.4752+L134.1932 91.4148+" />+<path d="M134.1932 91.4148+L133.9513 91.3543+" />+<path d="M133.9513 91.3543+L133.8303 91.2938+" />+<path d="M133.8303 91.2938+L133.7698 91.2333+" />+<path d="M133.7698 91.2333+L133.7094 91.1124+" />+<path d="M133.7094 91.1124+L133.7094 90.9914+" />+<path d="M133.7094 90.9914+L133.7698 90.8705+" />+<path d="M133.7698 90.8705+L133.8303 90.8100+" />+<path d="M133.8303 90.8100+L133.9513 90.7495+" />+<path d="M133.9513 90.7495+L134.2536 90.7495+" />+<path d="M134.2536 90.7495+L134.4351 90.8100+" />+<path d="M134.9793 92.0195+L134.9793 90.7495+" />+<path d="M134.9793 90.7495+L135.2817 90.7495+" />+<path d="M135.2817 90.7495+L135.4631 90.8100+" />+<path d="M135.4631 90.8100+L135.5841 90.9310+" />+<path d="M135.5841 90.9310+L135.6446 91.0519+" />+<path d="M135.6446 91.0519+L135.7050 91.2938+" />+<path d="M135.7050 91.2938+L135.7050 91.4752+" />+<path d="M135.7050 91.4752+L135.6446 91.7171+" />+<path d="M135.6446 91.7171+L135.5841 91.8381+" />+<path d="M135.5841 91.8381+L135.4631 91.9591+" />+<path d="M135.4631 91.9591+L135.2817 92.0195+" />+<path d="M135.2817 92.0195+L134.9793 92.0195+" />+<path d="M136.2493 92.0195+L136.2493 90.7495+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="91.1860"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">3</text>+<g class="stroked-text"><desc>3</desc>+<path d="M139.2767 89.7525+L140.0629 89.7525+" />+<path d="M140.0629 89.7525+L139.6395 90.2363+" />+<path d="M139.6395 90.2363+L139.8210 90.2363+" />+<path d="M139.8210 90.2363+L139.9419 90.2968+" />+<path d="M139.9419 90.2968+L140.0024 90.3573+" />+<path d="M140.0024 90.3573+L140.0629 90.4782+" />+<path d="M140.0629 90.4782+L140.0629 90.7806+" />+<path d="M140.0629 90.7806+L140.0024 90.9016+" />+<path d="M140.0024 90.9016+L139.9419 90.9621+" />+<path d="M139.9419 90.9621+L139.8210 91.0225+" />+<path d="M139.8210 91.0225+L139.4581 91.0225+" />+<path d="M139.4581 91.0225+L139.3372 90.9621+" />+<path d="M139.3372 90.9621+L139.2767 90.9016+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 86.3600+L142.2400 86.3600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="86.9950"+textLength="3.9527" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">SCK</text>+<g class="stroked-text"><desc>SCK</desc>+<path d="M133.0442 86.8791+L133.2256 86.9395+" />+<path d="M133.2256 86.9395+L133.5280 86.9395+" />+<path d="M133.5280 86.9395+L133.6489 86.8791+" />+<path d="M133.6489 86.8791+L133.7094 86.8186+" />+<path d="M133.7094 86.8186+L133.7699 86.6976+" />+<path d="M133.7699 86.6976+L133.7699 86.5767+" />+<path d="M133.7699 86.5767+L133.7094 86.4557+" />+<path d="M133.7094 86.4557+L133.6489 86.3952+" />+<path d="M133.6489 86.3952+L133.5280 86.3348+" />+<path d="M133.5280 86.3348+L133.2861 86.2743+" />+<path d="M133.2861 86.2743+L133.1651 86.2138+" />+<path d="M133.1651 86.2138+L133.1046 86.1533+" />+<path d="M133.1046 86.1533+L133.0442 86.0324+" />+<path d="M133.0442 86.0324+L133.0442 85.9114+" />+<path d="M133.0442 85.9114+L133.1046 85.7905+" />+<path d="M133.1046 85.7905+L133.1651 85.7300+" />+<path d="M133.1651 85.7300+L133.2861 85.6695+" />+<path d="M133.2861 85.6695+L133.5884 85.6695+" />+<path d="M133.5884 85.6695+L133.7699 85.7300+" />+<path d="M135.0398 86.8186+L134.9794 86.8791+" />+<path d="M134.9794 86.8791+L134.7979 86.9395+" />+<path d="M134.7979 86.9395+L134.6770 86.9395+" />+<path d="M134.6770 86.9395+L134.4956 86.8791+" />+<path d="M134.4956 86.8791+L134.3746 86.7581+" />+<path d="M134.3746 86.7581+L134.3141 86.6371+" />+<path d="M134.3141 86.6371+L134.2537 86.3952+" />+<path d="M134.2537 86.3952+L134.2537 86.2138+" />+<path d="M134.2537 86.2138+L134.3141 85.9719+" />+<path d="M134.3141 85.9719+L134.3746 85.8510+" />+<path d="M134.3746 85.8510+L134.4956 85.7300+" />+<path d="M134.4956 85.7300+L134.6770 85.6695+" />+<path d="M134.6770 85.6695+L134.7979 85.6695+" />+<path d="M134.7979 85.6695+L134.9794 85.7300+" />+<path d="M134.9794 85.7300+L135.0398 85.7905+" />+<path d="M135.5841 86.9395+L135.5841 85.6695+" />+<path d="M136.3098 86.9395+L135.7656 86.2138+" />+<path d="M136.3098 85.6695+L135.5841 86.3952+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="86.1060"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">4</text>+<g class="stroked-text"><desc>4</desc>+<path d="M139.9419 85.0959+L139.9419 85.9425+" />+<path d="M139.6395 84.6121+L139.3372 85.5192+" />+<path d="M139.3372 85.5192+L140.1233 85.5192+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 81.2800+L142.2400 81.2800+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="81.9150"+textLength="4.0132" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">SDO</text>+<g class="stroked-text"><desc>SDO</desc>+<path d="M132.9837 81.7991+L133.1651 81.8595+" />+<path d="M133.1651 81.8595+L133.4675 81.8595+" />+<path d="M133.4675 81.8595+L133.5884 81.7991+" />+<path d="M133.5884 81.7991+L133.6489 81.7386+" />+<path d="M133.6489 81.7386+L133.7094 81.6176+" />+<path d="M133.7094 81.6176+L133.7094 81.4967+" />+<path d="M133.7094 81.4967+L133.6489 81.3757+" />+<path d="M133.6489 81.3757+L133.5884 81.3152+" />+<path d="M133.5884 81.3152+L133.4675 81.2548+" />+<path d="M133.4675 81.2548+L133.2256 81.1943+" />+<path d="M133.2256 81.1943+L133.1046 81.1338+" />+<path d="M133.1046 81.1338+L133.0441 81.0733+" />+<path d="M133.0441 81.0733+L132.9837 80.9524+" />+<path d="M132.9837 80.9524+L132.9837 80.8314+" />+<path d="M132.9837 80.8314+L133.0441 80.7105+" />+<path d="M133.0441 80.7105+L133.1046 80.6500+" />+<path d="M133.1046 80.6500+L133.2256 80.5895+" />+<path d="M133.2256 80.5895+L133.5279 80.5895+" />+<path d="M133.5279 80.5895+L133.7094 80.6500+" />+<path d="M134.2536 81.8595+L134.2536 80.5895+" />+<path d="M134.2536 80.5895+L134.5560 80.5895+" />+<path d="M134.5560 80.5895+L134.7374 80.6500+" />+<path d="M134.7374 80.6500+L134.8584 80.7710+" />+<path d="M134.8584 80.7710+L134.9189 80.8919+" />+<path d="M134.9189 80.8919+L134.9793 81.1338+" />+<path d="M134.9793 81.1338+L134.9793 81.3152+" />+<path d="M134.9793 81.3152+L134.9189 81.5571+" />+<path d="M134.9189 81.5571+L134.8584 81.6781+" />+<path d="M134.8584 81.6781+L134.7374 81.7991+" />+<path d="M134.7374 81.7991+L134.5560 81.8595+" />+<path d="M134.5560 81.8595+L134.2536 81.8595+" />+<path d="M135.7655 80.5895+L136.0074 80.5895+" />+<path d="M136.0074 80.5895+L136.1284 80.6500+" />+<path d="M136.1284 80.6500+L136.2493 80.7710+" />+<path d="M136.2493 80.7710+L136.3098 81.0129+" />+<path d="M136.3098 81.0129+L136.3098 81.4362+" />+<path d="M136.3098 81.4362+L136.2493 81.6781+" />+<path d="M136.2493 81.6781+L136.1284 81.7991+" />+<path d="M136.1284 81.7991+L136.0074 81.8595+" />+<path d="M136.0074 81.8595+L135.7655 81.8595+" />+<path d="M135.7655 81.8595+L135.6446 81.7991+" />+<path d="M135.6446 81.7991+L135.5236 81.6781+" />+<path d="M135.5236 81.6781+L135.4632 81.4362+" />+<path d="M135.4632 81.4362+L135.4632 81.0129+" />+<path d="M135.4632 81.0129+L135.5236 80.7710+" />+<path d="M135.5236 80.7710+L135.6446 80.6500+" />+<path d="M135.6446 80.6500+L135.7655 80.5895+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="81.0260"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">5</text>+<g class="stroked-text"><desc>5</desc>+<path d="M140.0024 79.5925+L139.3976 79.5925+" />+<path d="M139.3976 79.5925+L139.3372 80.1973+" />+<path d="M139.3372 80.1973+L139.3976 80.1368+" />+<path d="M139.3976 80.1368+L139.5186 80.0763+" />+<path d="M139.5186 80.0763+L139.8210 80.0763+" />+<path d="M139.8210 80.0763+L139.9419 80.1368+" />+<path d="M139.9419 80.1368+L140.0024 80.1973+" />+<path d="M140.0024 80.1973+L140.0629 80.3182+" />+<path d="M140.0629 80.3182+L140.0629 80.6206+" />+<path d="M140.0629 80.6206+L140.0024 80.7416+" />+<path d="M140.0024 80.7416+L139.9419 80.8021+" />+<path d="M139.9419 80.8021+L139.8210 80.8625+" />+<path d="M139.8210 80.8625+L139.5186 80.8625+" />+<path d="M139.5186 80.8625+L139.3976 80.8021+" />+<path d="M139.3976 80.8021+L139.3372 80.7416+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M124.4600 78.7400+L124.4600 73.6600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.4600 79.2480)">+<text x="124.4600" y="79.8830"+textLength="5.7671" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">VDDIO</text>+</g>+<g class="stroked-text"><desc>VDDIO</desc>+<path d="M123.7695 84.7911+L125.0395 84.3678+" />+<path d="M125.0395 84.3678+L123.7695 83.9444+" />+<path d="M125.0395 83.5211+L123.7695 83.5211+" />+<path d="M123.7695 83.5211+L123.7695 83.2187+" />+<path d="M123.7695 83.2187+L123.8300 83.0373+" />+<path d="M123.8300 83.0373+L123.9510 82.9163+" />+<path d="M123.9510 82.9163+L124.0719 82.8558+" />+<path d="M124.0719 82.8558+L124.3138 82.7954+" />+<path d="M124.3138 82.7954+L124.4952 82.7954+" />+<path d="M124.4952 82.7954+L124.7371 82.8558+" />+<path d="M124.7371 82.8558+L124.8581 82.9163+" />+<path d="M124.8581 82.9163+L124.9791 83.0373+" />+<path d="M124.9791 83.0373+L125.0395 83.2187+" />+<path d="M125.0395 83.2187+L125.0395 83.5211+" />+<path d="M125.0395 82.2511+L123.7695 82.2511+" />+<path d="M123.7695 82.2511+L123.7695 81.9487+" />+<path d="M123.7695 81.9487+L123.8300 81.7673+" />+<path d="M123.8300 81.7673+L123.9510 81.6463+" />+<path d="M123.9510 81.6463+L124.0719 81.5858+" />+<path d="M124.0719 81.5858+L124.3138 81.5254+" />+<path d="M124.3138 81.5254+L124.4952 81.5254+" />+<path d="M124.4952 81.5254+L124.7371 81.5858+" />+<path d="M124.7371 81.5858+L124.8581 81.6463+" />+<path d="M124.8581 81.6463+L124.9791 81.7673+" />+<path d="M124.9791 81.7673+L125.0395 81.9487+" />+<path d="M125.0395 81.9487+L125.0395 82.2511+" />+<path d="M125.0395 80.9811+L123.7695 80.9811+" />+<path d="M123.7695 80.1344+L123.7695 79.8925+" />+<path d="M123.7695 79.8925+L123.8300 79.7715+" />+<path d="M123.8300 79.7715+L123.9510 79.6506+" />+<path d="M123.9510 79.6506+L124.1929 79.5901+" />+<path d="M124.1929 79.5901+L124.6162 79.5901+" />+<path d="M124.6162 79.5901+L124.8581 79.6506+" />+<path d="M124.8581 79.6506+L124.9791 79.7715+" />+<path d="M124.9791 79.7715+L125.0395 79.8925+" />+<path d="M125.0395 79.8925+L125.0395 80.1344+" />+<path d="M125.0395 80.1344+L124.9791 80.2553+" />+<path d="M124.9791 80.2553+L124.8581 80.3763+" />+<path d="M124.8581 80.3763+L124.6162 80.4367+" />+<path d="M124.6162 80.4367+L124.1929 80.4367+" />+<path d="M124.1929 80.4367+L123.9510 80.3763+" />+<path d="M123.9510 80.3763+L123.8300 80.2553+" />+<path d="M123.8300 80.2553+L123.7695 80.1344+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.2060 76.2000)">+<text x="124.2060" y="76.2000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">6</text>+</g>+<g class="stroked-text"><desc>6</desc>+<path d="M122.7725 75.9580+L122.7725 76.1999+" />+<path d="M122.7725 76.1999+L122.8330 76.3208+" />+<path d="M122.8330 76.3208+L122.8935 76.3813+" />+<path d="M122.8935 76.3813+L123.0749 76.5023+" />+<path d="M123.0749 76.5023+L123.3168 76.5627+" />+<path d="M123.3168 76.5627+L123.8006 76.5627+" />+<path d="M123.8006 76.5627+L123.9216 76.5023+" />+<path d="M123.9216 76.5023+L123.9821 76.4418+" />+<path d="M123.9821 76.4418+L124.0425 76.3208+" />+<path d="M124.0425 76.3208+L124.0425 76.0789+" />+<path d="M124.0425 76.0789+L123.9821 75.9580+" />+<path d="M123.9821 75.9580+L123.9216 75.8975+" />+<path d="M123.9216 75.8975+L123.8006 75.8370+" />+<path d="M123.8006 75.8370+L123.4982 75.8370+" />+<path d="M123.4982 75.8370+L123.3773 75.8975+" />+<path d="M123.3773 75.8975+L123.3168 75.9580+" />+<path d="M123.3168 75.9580+L123.2563 76.0789+" />+<path d="M123.2563 76.0789+L123.2563 76.3208+" />+<path d="M123.2563 76.3208+L123.3168 76.4418+" />+<path d="M123.3168 76.4418+L123.3773 76.5023+" />+<path d="M123.3773 76.5023+L123.4982 76.5627+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M129.5400 99.0600+L129.5400 104.1400+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.5400 98.5520)">+<text x="129.5400" y="99.1870"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">GND</text>+</g>+<g class="stroked-text"><desc>GND</desc>+<path d="M128.9100 97.4841+L128.8495 97.6051+" />+<path d="M128.8495 97.6051+L128.8495 97.7865+" />+<path d="M128.8495 97.7865+L128.9100 97.9679+" />+<path d="M128.9100 97.9679+L129.0310 98.0889+" />+<path d="M129.0310 98.0889+L129.1519 98.1494+" />+<path d="M129.1519 98.1494+L129.3938 98.2098+" />+<path d="M129.3938 98.2098+L129.5752 98.2098+" />+<path d="M129.5752 98.2098+L129.8171 98.1494+" />+<path d="M129.8171 98.1494+L129.9381 98.0889+" />+<path d="M129.9381 98.0889+L130.0591 97.9679+" />+<path d="M130.0591 97.9679+L130.1195 97.7865+" />+<path d="M130.1195 97.7865+L130.1195 97.6656+" />+<path d="M130.1195 97.6656+L130.0591 97.4841+" />+<path d="M130.0591 97.4841+L129.9986 97.4237+" />+<path d="M129.9986 97.4237+L129.5752 97.4237+" />+<path d="M129.5752 97.4237+L129.5752 97.6656+" />+<path d="M130.1195 96.8794+L128.8495 96.8794+" />+<path d="M128.8495 96.8794+L130.1195 96.1537+" />+<path d="M130.1195 96.1537+L128.8495 96.1537+" />+<path d="M130.1195 95.5489+L128.8495 95.5489+" />+<path d="M128.8495 95.5489+L128.8495 95.2465+" />+<path d="M128.8495 95.2465+L128.9100 95.0651+" />+<path d="M128.9100 95.0651+L129.0310 94.9441+" />+<path d="M129.0310 94.9441+L129.1519 94.8836+" />+<path d="M129.1519 94.8836+L129.3938 94.8232+" />+<path d="M129.3938 94.8232+L129.5752 94.8232+" />+<path d="M129.5752 94.8232+L129.8171 94.8836+" />+<path d="M129.8171 94.8836+L129.9381 94.9441+" />+<path d="M129.9381 94.9441+L130.0591 95.0651+" />+<path d="M130.0591 95.0651+L130.1195 95.2465+" />+<path d="M130.1195 95.2465+L130.1195 95.5489+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.2860 101.6000)">+<text x="129.2860" y="101.6000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">7</text>+</g>+<g class="stroked-text"><desc>7</desc>+<path d="M127.8525 102.0232+L127.8525 101.1766+" />+<path d="M127.8525 101.1766+L129.1225 101.7208+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M129.5400 78.7400+L129.5400 73.6600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.5400 79.2480)">+<text x="129.5400" y="79.8830"+textLength="3.8318" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">VDD</text>+</g>+<g class="stroked-text"><desc>VDD</desc>+<path d="M128.8495 82.8558+L130.1195 82.4325+" />+<path d="M130.1195 82.4325+L128.8495 82.0091+" />+<path d="M130.1195 81.5858+L128.8495 81.5858+" />+<path d="M128.8495 81.5858+L128.8495 81.2834+" />+<path d="M128.8495 81.2834+L128.9100 81.1020+" />+<path d="M128.9100 81.1020+L129.0310 80.9810+" />+<path d="M129.0310 80.9810+L129.1519 80.9205+" />+<path d="M129.1519 80.9205+L129.3938 80.8601+" />+<path d="M129.3938 80.8601+L129.5752 80.8601+" />+<path d="M129.5752 80.8601+L129.8171 80.9205+" />+<path d="M129.8171 80.9205+L129.9381 80.9810+" />+<path d="M129.9381 80.9810+L130.0591 81.1020+" />+<path d="M130.0591 81.1020+L130.1195 81.2834+" />+<path d="M130.1195 81.2834+L130.1195 81.5858+" />+<path d="M130.1195 80.3158+L128.8495 80.3158+" />+<path d="M128.8495 80.3158+L128.8495 80.0134+" />+<path d="M128.8495 80.0134+L128.9100 79.8320+" />+<path d="M128.9100 79.8320+L129.0310 79.7110+" />+<path d="M129.0310 79.7110+L129.1519 79.6505+" />+<path d="M129.1519 79.6505+L129.3938 79.5901+" />+<path d="M129.3938 79.5901+L129.5752 79.5901+" />+<path d="M129.5752 79.5901+L129.8171 79.6505+" />+<path d="M129.8171 79.6505+L129.9381 79.7110+" />+<path d="M129.9381 79.7110+L130.0591 79.8320+" />+<path d="M130.0591 79.8320+L130.1195 80.0134+" />+<path d="M130.1195 80.0134+L130.1195 80.3158+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.2860 76.2000)">+<text x="129.2860" y="76.2000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">8</text>+</g>+<g class="stroked-text"><desc>8</desc>+<path d="M128.3968 76.3208+L128.3363 76.4418+" />+<path d="M128.3363 76.4418+L128.2759 76.5023+" />+<path d="M128.2759 76.5023+L128.1549 76.5627+" />+<path d="M128.1549 76.5627+L128.0944 76.5627+" />+<path d="M128.0944 76.5627+L127.9735 76.5023+" />+<path d="M127.9735 76.5023+L127.9130 76.4418+" />+<path d="M127.9130 76.4418+L127.8525 76.3208+" />+<path d="M127.8525 76.3208+L127.8525 76.0789+" />+<path d="M127.8525 76.0789+L127.9130 75.9580+" />+<path d="M127.9130 75.9580+L127.9735 75.8975+" />+<path d="M127.9735 75.8975+L128.0944 75.8370+" />+<path d="M128.0944 75.8370+L128.1549 75.8370+" />+<path d="M128.1549 75.8370+L128.2759 75.8975+" />+<path d="M128.2759 75.8975+L128.3363 75.9580+" />+<path d="M128.3363 75.9580+L128.3968 76.0789+" />+<path d="M128.3968 76.0789+L128.3968 76.3208+" />+<path d="M128.3968 76.3208+L128.4573 76.4418+" />+<path d="M128.4573 76.4418+L128.5178 76.5023+" />+<path d="M128.5178 76.5023+L128.6387 76.5627+" />+<path d="M128.6387 76.5627+L128.8806 76.5627+" />+<path d="M128.8806 76.5627+L129.0016 76.5023+" />+<path d="M129.0016 76.5023+L129.0621 76.4418+" />+<path d="M129.0621 76.4418+L129.1225 76.3208+" />+<path d="M129.1225 76.3208+L129.1225 76.0789+" />+<path d="M129.1225 76.0789+L129.0621 75.9580+" />+<path d="M129.0621 75.9580+L129.0016 75.8975+" />+<path d="M129.0016 75.8975+L128.8806 75.8370+" />+<path d="M128.8806 75.8370+L128.6387 75.8370+" />+<path d="M128.6387 75.8370+L128.5178 75.8975+" />+<path d="M128.5178 75.8975+L128.4573 75.9580+" />+<path d="M128.4573 75.9580+L128.3968 76.0789+" />+</g></g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="130.9212" y="88.2650"+textLength="2.7432" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">U2</text>+<g class="stroked-text"><desc>U2</desc>+<path d="M129.9535 86.9395+L129.9535 87.9676+" />+<path d="M129.9535 87.9676+L130.0140 88.0886+" />+<path d="M130.0140 88.0886+L130.0745 88.1491+" />+<path d="M130.0745 88.1491+L130.1954 88.2095+" />+<path d="M130.1954 88.2095+L130.4373 88.2095+" />+<path d="M130.4373 88.2095+L130.5583 88.1491+" />+<path d="M130.5583 88.1491+L130.6188 88.0886+" />+<path d="M130.6188 88.0886+L130.6792 87.9676+" />+<path d="M130.6792 87.9676+L130.6792 86.9395+" />+<path d="M131.2236 87.0605+L131.2840 87.0000+" />+<path d="M131.2840 87.0000+L131.4050 86.9395+" />+<path d="M131.4050 86.9395+L131.7074 86.9395+" />+<path d="M131.7074 86.9395+L131.8283 87.0000+" />+<path d="M131.8283 87.0000+L131.8888 87.0605+" />+<path d="M131.8888 87.0605+L131.9493 87.1814+" />+<path d="M131.9493 87.1814+L131.9493 87.3024+" />+<path d="M131.9493 87.3024+L131.8888 87.4838+" />+<path d="M131.8888 87.4838+L131.1631 88.2095+" />+<path d="M131.1631 88.2095+L131.9493 88.2095+" />+</g><text x="133.4006" y="90.8050"+textLength="7.7021" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">BME280</text>+<g class="stroked-text"><desc>BME280</desc>+<path d="M130.3769 90.0843+L130.5583 90.1448+" />+<path d="M130.5583 90.1448+L130.6188 90.2052+" />+<path d="M130.6188 90.2052+L130.6792 90.3262+" />+<path d="M130.6792 90.3262+L130.6792 90.5076+" />+<path d="M130.6792 90.5076+L130.6188 90.6286+" />+<path d="M130.6188 90.6286+L130.5583 90.6891+" />+<path d="M130.5583 90.6891+L130.4373 90.7495+" />+<path d="M130.4373 90.7495+L129.9535 90.7495+" />+<path d="M129.9535 90.7495+L129.9535 89.4795+" />+<path d="M129.9535 89.4795+L130.3769 89.4795+" />+<path d="M130.3769 89.4795+L130.4978 89.5400+" />+<path d="M130.4978 89.5400+L130.5583 89.6005+" />+<path d="M130.5583 89.6005+L130.6188 89.7214+" />+<path d="M130.6188 89.7214+L130.6188 89.8424+" />+<path d="M130.6188 89.8424+L130.5583 89.9633+" />+<path d="M130.5583 89.9633+L130.4978 90.0238+" />+<path d="M130.4978 90.0238+L130.3769 90.0843+" />+<path d="M130.3769 90.0843+L129.9535 90.0843+" />+<path d="M131.2235 90.7495+L131.2235 89.4795+" />+<path d="M131.2235 89.4795+L131.6469 90.3867+" />+<path d="M131.6469 90.3867+L132.0702 89.4795+" />+<path d="M132.0702 89.4795+L132.0702 90.7495+" />+<path d="M132.6749 90.0843+L133.0983 90.0843+" />+<path d="M133.2797 90.7495+L132.6749 90.7495+" />+<path d="M132.6749 90.7495+L132.6749 89.4795+" />+<path d="M132.6749 89.4795+L133.2797 89.4795+" />+<path d="M133.7635 89.6005+L133.8239 89.5400+" />+<path d="M133.8239 89.5400+L133.9449 89.4795+" />+<path d="M133.9449 89.4795+L134.2473 89.4795+" />+<path d="M134.2473 89.4795+L134.3682 89.5400+" />+<path d="M134.3682 89.5400+L134.4287 89.6005+" />+<path d="M134.4287 89.6005+L134.4892 89.7214+" />+<path d="M134.4892 89.7214+L134.4892 89.8424+" />+<path d="M134.4892 89.8424+L134.4287 90.0238+" />+<path d="M134.4287 90.0238+L133.7030 90.7495+" />+<path d="M133.7030 90.7495+L134.4892 90.7495+" />+<path d="M135.2149 90.0238+L135.0939 89.9633+" />+<path d="M135.0939 89.9633+L135.0334 89.9029+" />+<path d="M135.0334 89.9029+L134.9730 89.7819+" />+<path d="M134.9730 89.7819+L134.9730 89.7214+" />+<path d="M134.9730 89.7214+L135.0334 89.6005+" />+<path d="M135.0334 89.6005+L135.0939 89.5400+" />+<path d="M135.0939 89.5400+L135.2149 89.4795+" />+<path d="M135.2149 89.4795+L135.4568 89.4795+" />+<path d="M135.4568 89.4795+L135.5777 89.5400+" />+<path d="M135.5777 89.5400+L135.6382 89.6005+" />+<path d="M135.6382 89.6005+L135.6987 89.7214+" />+<path d="M135.6987 89.7214+L135.6987 89.7819+" />+<path d="M135.6987 89.7819+L135.6382 89.9029+" />+<path d="M135.6382 89.9029+L135.5777 89.9633+" />+<path d="M135.5777 89.9633+L135.4568 90.0238+" />+<path d="M135.4568 90.0238+L135.2149 90.0238+" />+<path d="M135.2149 90.0238+L135.0939 90.0843+" />+<path d="M135.0939 90.0843+L135.0334 90.1448+" />+<path d="M135.0334 90.1448+L134.9730 90.2657+" />+<path d="M134.9730 90.2657+L134.9730 90.5076+" />+<path d="M134.9730 90.5076+L135.0334 90.6286+" />+<path d="M135.0334 90.6286+L135.0939 90.6891+" />+<path d="M135.0939 90.6891+L135.2149 90.7495+" />+<path d="M135.2149 90.7495+L135.4568 90.7495+" />+<path d="M135.4568 90.7495+L135.5777 90.6891+" />+<path d="M135.5777 90.6891+L135.6382 90.6286+" />+<path d="M135.6382 90.6286+L135.6987 90.5076+" />+<path d="M135.6987 90.5076+L135.6987 90.2657+" />+<path d="M135.6987 90.2657+L135.6382 90.1448+" />+<path d="M135.6382 90.1448+L135.5777 90.0843+" />+<path d="M135.5777 90.0843+L135.4568 90.0238+" />+<path d="M136.4848 89.4795+L136.6058 89.4795+" />+<path d="M136.6058 89.4795+L136.7267 89.5400+" />+<path d="M136.7267 89.5400+L136.7872 89.6005+" />+<path d="M136.7872 89.6005+L136.8477 89.7214+" />+<path d="M136.8477 89.7214+L136.9082 89.9633+" />+<path d="M136.9082 89.9633+L136.9082 90.2657+" />+<path d="M136.9082 90.2657+L136.8477 90.5076+" />+<path d="M136.8477 90.5076+L136.7872 90.6286+" />+<path d="M136.7872 90.6286+L136.7267 90.6891+" />+<path d="M136.7267 90.6891+L136.6058 90.7495+" />+<path d="M136.6058 90.7495+L136.4848 90.7495+" />+<path d="M136.4848 90.7495+L136.3639 90.6891+" />+<path d="M136.3639 90.6891+L136.3034 90.6286+" />+<path d="M136.3034 90.6286+L136.2429 90.5076+" />+<path d="M136.2429 90.5076+L136.1825 90.2657+" />+<path d="M136.1825 90.2657+L136.1825 89.9633+" />+<path d="M136.1825 89.9633+L136.2429 89.7214+" />+<path d="M136.2429 89.7214+L136.3034 89.6005+" />+<path d="M136.3034 89.6005+L136.3639 89.5400+" />+<path d="M136.3639 89.5400+L136.4848 89.4795+" />+</g><path style="fill:none; +stroke:#840000; stroke-width:0.5080; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 109.7280,69.0880+113.7920,69.0880+" /> +<path style="fill:none; +stroke:#840000; stroke-width:0.5080; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 109.7280,70.6120+113.7920,70.6120+" /> +</g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M111.7600 68.8340+L111.7600 66.0400+" />+<path d="M111.7600 70.8660+L111.7600 73.6600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="115.6509" y="69.2150"+textLength="2.6827" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">C2</text>+<g class="stroked-text"><desc>C2</desc>+<path d="M115.4392 69.0386+L115.3788 69.0991+" />+<path d="M115.3788 69.0991+L115.1973 69.1595+" />+<path d="M115.1973 69.1595+L115.0764 69.1595+" />+<path d="M115.0764 69.1595+L114.8950 69.0991+" />+<path d="M114.8950 69.0991+L114.7740 68.9781+" />+<path d="M114.7740 68.9781+L114.7135 68.8571+" />+<path d="M114.7135 68.8571+L114.6531 68.6152+" />+<path d="M114.6531 68.6152+L114.6531 68.4338+" />+<path d="M114.6531 68.4338+L114.7135 68.1919+" />+<path d="M114.7135 68.1919+L114.7740 68.0710+" />+<path d="M114.7740 68.0710+L114.8950 67.9500+" />+<path d="M114.8950 67.9500+L115.0764 67.8895+" />+<path d="M115.0764 67.8895+L115.1973 67.8895+" />+<path d="M115.1973 67.8895+L115.3788 67.9500+" />+<path d="M115.3788 67.9500+L115.4392 68.0105+" />+<path d="M115.9231 68.0105+L115.9835 67.9500+" />+<path d="M115.9835 67.9500+L116.1045 67.8895+" />+<path d="M116.1045 67.8895+L116.4069 67.8895+" />+<path d="M116.4069 67.8895+L116.5278 67.9500+" />+<path d="M116.5278 67.9500+L116.5883 68.0105+" />+<path d="M116.5883 68.0105+L116.6488 68.1314+" />+<path d="M116.6488 68.1314+L116.6488 68.2524+" />+<path d="M116.6488 68.2524+L116.5883 68.4338+" />+<path d="M116.5883 68.4338+L115.8626 69.1595+" />+<path d="M115.8626 69.1595+L116.6488 69.1595+" />+</g><text x="116.7999" y="71.7550"+textLength="4.9807" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">100n</text>+<g class="stroked-text"><desc>100n</desc>+<path d="M115.3788 71.6995+L114.6531 71.6995+" />+<path d="M115.0159 71.6995+L115.0159 70.4295+" />+<path d="M115.0159 70.4295+L114.8950 70.6110+" />+<path d="M114.8950 70.6110+L114.7740 70.7319+" />+<path d="M114.7740 70.7319+L114.6531 70.7924+" />+<path d="M116.1649 70.4295+L116.2859 70.4295+" />+<path d="M116.2859 70.4295+L116.4068 70.4900+" />+<path d="M116.4068 70.4900+L116.4673 70.5505+" />+<path d="M116.4673 70.5505+L116.5278 70.6714+" />+<path d="M116.5278 70.6714+L116.5883 70.9133+" />+<path d="M116.5883 70.9133+L116.5883 71.2157+" />+<path d="M116.5883 71.2157+L116.5278 71.4576+" />+<path d="M116.5278 71.4576+L116.4673 71.5786+" />+<path d="M116.4673 71.5786+L116.4068 71.6391+" />+<path d="M116.4068 71.6391+L116.2859 71.6995+" />+<path d="M116.2859 71.6995+L116.1649 71.6995+" />+<path d="M116.1649 71.6995+L116.0440 71.6391+" />+<path d="M116.0440 71.6391+L115.9835 71.5786+" />+<path d="M115.9835 71.5786+L115.9230 71.4576+" />+<path d="M115.9230 71.4576+L115.8626 71.2157+" />+<path d="M115.8626 71.2157+L115.8626 70.9133+" />+<path d="M115.8626 70.9133+L115.9230 70.6714+" />+<path d="M115.9230 70.6714+L115.9835 70.5505+" />+<path d="M115.9835 70.5505+L116.0440 70.4900+" />+<path d="M116.0440 70.4900+L116.1649 70.4295+" />+<path d="M117.3744 70.4295+L117.4954 70.4295+" />+<path d="M117.4954 70.4295+L117.6163 70.4900+" />+<path d="M117.6163 70.4900+L117.6768 70.5505+" />+<path d="M117.6768 70.5505+L117.7373 70.6714+" />+<path d="M117.7373 70.6714+L117.7978 70.9133+" />+<path d="M117.7978 70.9133+L117.7978 71.2157+" />+<path d="M117.7978 71.2157+L117.7373 71.4576+" />+<path d="M117.7373 71.4576+L117.6768 71.5786+" />+<path d="M117.6768 71.5786+L117.6163 71.6391+" />+<path d="M117.6163 71.6391+L117.4954 71.6995+" />+<path d="M117.4954 71.6995+L117.3744 71.6995+" />+<path d="M117.3744 71.6995+L117.2535 71.6391+" />+<path d="M117.2535 71.6391+L117.1930 71.5786+" />+<path d="M117.1930 71.5786+L117.1325 71.4576+" />+<path d="M117.1325 71.4576+L117.0721 71.2157+" />+<path d="M117.0721 71.2157+L117.0721 70.9133+" />+<path d="M117.0721 70.9133+L117.1325 70.6714+" />+<path d="M117.1325 70.6714+L117.1930 70.5505+" />+<path d="M117.1930 70.5505+L117.2535 70.4900+" />+<path d="M117.2535 70.4900+L117.3744 70.4295+" />+<path d="M118.3420 70.8529+L118.3420 71.6995+" />+<path d="M118.3420 70.9738+L118.4025 70.9133+" />+<path d="M118.4025 70.9133+L118.5235 70.8529+" />+<path d="M118.5235 70.8529+L118.7049 70.8529+" />+<path d="M118.7049 70.8529+L118.8258 70.9133+" />+<path d="M118.8258 70.9133+L118.8863 71.0343+" />+<path d="M118.8863 71.0343+L118.8863 71.6995+" />+</g></g>+<g style="fill:none; +stroke:#725600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="100.1395" y="66.6750"+textLength="3.8318" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">VDD</text>+<g class="stroked-text"><desc>VDD</desc>+<path d="M96.5316 65.3495+L96.9549 66.6195+" />+<path d="M96.9549 66.6195+L97.3783 65.3495+" />+<path d="M97.8016 66.6195+L97.8016 65.3495+" />+<path d="M97.8016 65.3495+L98.1040 65.3495+" />+<path d="M98.1040 65.3495+L98.2854 65.4100+" />+<path d="M98.2854 65.4100+L98.4064 65.5310+" />+<path d="M98.4064 65.5310+L98.4669 65.6519+" />+<path d="M98.4669 65.6519+L98.5273 65.8938+" />+<path d="M98.5273 65.8938+L98.5273 66.0752+" />+<path d="M98.5273 66.0752+L98.4669 66.3171+" />+<path d="M98.4669 66.3171+L98.4064 66.4381+" />+<path d="M98.4064 66.4381+L98.2854 66.5591+" />+<path d="M98.2854 66.5591+L98.1040 66.6195+" />+<path d="M98.1040 66.6195+L97.8016 66.6195+" />+<path d="M99.0716 66.6195+L99.0716 65.3495+" />+<path d="M99.0716 65.3495+L99.3740 65.3495+" />+<path d="M99.3740 65.3495+L99.5554 65.4100+" />+<path d="M99.5554 65.4100+L99.6764 65.5310+" />+<path d="M99.6764 65.5310+L99.7369 65.6519+" />+<path d="M99.7369 65.6519+L99.7973 65.8938+" />+<path d="M99.7973 65.8938+L99.7973 66.0752+" />+<path d="M99.7973 66.0752+L99.7369 66.3171+" />+<path d="M99.7369 66.3171+L99.6764 66.4381+" />+<path d="M99.6764 66.4381+L99.5554 66.5591+" />+<path d="M99.5554 66.5591+L99.3740 66.6195+" />+<path d="M99.3740 66.6195+L99.0716 66.6195+" />+</g><path style="fill:none; +stroke:#725600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 101.6000,66.0400+100.9650,65.4050+100.3300,65.4050+100.3300,66.6750+100.9650,66.6750+Z" /> +</g>+<g style="fill:none; +stroke:#725600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="164.0205" y="86.9950"+textLength="3.7108" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">SCL</text>+<g class="stroked-text"><desc>SCL</desc>+<path d="M164.3626 86.8791+L164.5440 86.9395+" />+<path d="M164.5440 86.9395+L164.8464 86.9395+" />+<path d="M164.8464 86.9395+L164.9673 86.8791+" />+<path d="M164.9673 86.8791+L165.0278 86.8186+" />+<path d="M165.0278 86.8186+L165.0883 86.6976+" />+<path d="M165.0883 86.6976+L165.0883 86.5767+" />+<path d="M165.0883 86.5767+L165.0278 86.4557+" />+<path d="M165.0278 86.4557+L164.9673 86.3952+" />+<path d="M164.9673 86.3952+L164.8464 86.3348+" />+<path d="M164.8464 86.3348+L164.6045 86.2743+" />+<path d="M164.6045 86.2743+L164.4835 86.2138+" />+<path d="M164.4835 86.2138+L164.4230 86.1533+" />+<path d="M164.4230 86.1533+L164.3626 86.0324+" />+<path d="M164.3626 86.0324+L164.3626 85.9114+" />+<path d="M164.3626 85.9114+L164.4230 85.7905+" />+<path d="M164.4230 85.7905+L164.4835 85.7300+" />+<path d="M164.4835 85.7300+L164.6045 85.6695+" />+<path d="M164.6045 85.6695+L164.9068 85.6695+" />+<path d="M164.9068 85.6695+L165.0883 85.7300+" />+<path d="M166.3582 86.8186+L166.2978 86.8791+" />+<path d="M166.2978 86.8791+L166.1163 86.9395+" />+<path d="M166.1163 86.9395+L165.9954 86.9395+" />+<path d="M165.9954 86.9395+L165.8140 86.8791+" />+<path d="M165.8140 86.8791+L165.6930 86.7581+" />+<path d="M165.6930 86.7581+L165.6325 86.6371+" />+<path d="M165.6325 86.6371+L165.5721 86.3952+" />+<path d="M165.5721 86.3952+L165.5721 86.2138+" />+<path d="M165.5721 86.2138+L165.6325 85.9719+" />+<path d="M165.6325 85.9719+L165.6930 85.8510+" />+<path d="M165.6930 85.8510+L165.8140 85.7300+" />+<path d="M165.8140 85.7300+L165.9954 85.6695+" />+<path d="M165.9954 85.6695+L166.1163 85.6695+" />+<path d="M166.1163 85.6695+L166.2978 85.7300+" />+<path d="M166.2978 85.7300+L166.3582 85.7905+" />+<path d="M167.5073 86.9395+L166.9025 86.9395+" />+<path d="M166.9025 86.9395+L166.9025 85.6695+" />+</g><path style="fill:none; +stroke:#725600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 162.5600,86.3600+163.1950,86.9950+163.8300,86.9950+163.8300,85.7250+163.1950,85.7250+Z" /> +</g>+<g style="fill:none; +stroke:#725600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="164.0205" y="92.0750"+textLength="3.7713" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">SDA</text>+<g class="stroked-text"><desc>SDA</desc>+<path d="M164.3626 91.9591+L164.5440 92.0195+" />+<path d="M164.5440 92.0195+L164.8464 92.0195+" />+<path d="M164.8464 92.0195+L164.9673 91.9591+" />+<path d="M164.9673 91.9591+L165.0278 91.8986+" />+<path d="M165.0278 91.8986+L165.0883 91.7776+" />+<path d="M165.0883 91.7776+L165.0883 91.6567+" />+<path d="M165.0883 91.6567+L165.0278 91.5357+" />+<path d="M165.0278 91.5357+L164.9673 91.4752+" />+<path d="M164.9673 91.4752+L164.8464 91.4148+" />+<path d="M164.8464 91.4148+L164.6045 91.3543+" />+<path d="M164.6045 91.3543+L164.4835 91.2938+" />+<path d="M164.4835 91.2938+L164.4230 91.2333+" />+<path d="M164.4230 91.2333+L164.3626 91.1124+" />+<path d="M164.3626 91.1124+L164.3626 90.9914+" />+<path d="M164.3626 90.9914+L164.4230 90.8705+" />+<path d="M164.4230 90.8705+L164.4835 90.8100+" />+<path d="M164.4835 90.8100+L164.6045 90.7495+" />+<path d="M164.6045 90.7495+L164.9068 90.7495+" />+<path d="M164.9068 90.7495+L165.0883 90.8100+" />+<path d="M165.6325 92.0195+L165.6325 90.7495+" />+<path d="M165.6325 90.7495+L165.9349 90.7495+" />+<path d="M165.9349 90.7495+L166.1163 90.8100+" />+<path d="M166.1163 90.8100+L166.2373 90.9310+" />+<path d="M166.2373 90.9310+L166.2978 91.0519+" />+<path d="M166.2978 91.0519+L166.3582 91.2938+" />+<path d="M166.3582 91.2938+L166.3582 91.4752+" />+<path d="M166.3582 91.4752+L166.2978 91.7171+" />+<path d="M166.2978 91.7171+L166.2373 91.8381+" />+<path d="M166.2373 91.8381+L166.1163 91.9591+" />+<path d="M166.1163 91.9591+L165.9349 92.0195+" />+<path d="M165.9349 92.0195+L165.6325 92.0195+" />+<path d="M166.8421 91.6567+L167.4468 91.6567+" />+<path d="M166.7211 92.0195+L167.1444 90.7495+" />+<path d="M167.1444 90.7495+L167.5678 92.0195+" />+</g><path style="fill:none; +stroke:#725600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;fill:none"+d="M 162.5600,91.4400+163.1950,90.8050+163.8300,91.4400+163.1950,92.0750+Z" /> +</g>+<g style="fill:none; +stroke:#0F0F0F; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="120.6500" y="60.6107"+textLength="3.2271" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">VIO</text>+<g class="stroked-text"><desc>VIO</desc>+<path d="M120.8711 59.1772+L121.2944 60.4472+" />+<path d="M121.2944 60.4472+L121.7178 59.1772+" />+<path d="M122.1411 60.4472+L122.1411 59.1772+" />+<path d="M122.9878 59.1772+L123.2297 59.1772+" />+<path d="M123.2297 59.1772+L123.3507 59.2377+" />+<path d="M123.3507 59.2377+L123.4716 59.3587+" />+<path d="M123.4716 59.3587+L123.5321 59.6006+" />+<path d="M123.5321 59.6006+L123.5321 60.0239+" />+<path d="M123.5321 60.0239+L123.4716 60.2658+" />+<path d="M123.4716 60.2658+L123.3507 60.3868+" />+<path d="M123.3507 60.3868+L123.2297 60.4472+" />+<path d="M123.2297 60.4472+L122.9878 60.4472+" />+<path d="M122.9878 60.4472+L122.8669 60.3868+" />+<path d="M122.8669 60.3868+L122.7459 60.2658+" />+<path d="M122.7459 60.2658+L122.6855 60.0239+" />+<path d="M122.6855 60.0239+L122.6855 59.6006+" />+<path d="M122.6855 59.6006+L122.7459 59.3587+" />+<path d="M122.7459 59.3587+L122.8669 59.2377+" />+<path d="M122.8669 59.2377+L122.9878 59.1772+" />+</g></g>+<g style="fill:none; +stroke:#009600; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M124.4600 73.6600+L124.4600 60.9600+" />+<path d="M124.4600 60.9600+L116.8400 60.9600+" />+<path d="M142.2400 91.4400+L162.5600 91.4400+" />+<path d="M129.5400 66.0400+L129.5400 73.6600+" />+<path d="M124.4600 104.1400+L124.4600 106.6800+" />+<path d="M124.4600 106.6800+L129.5400 106.6800+" />+<path d="M129.5400 106.6800+L129.5400 104.1400+" />+<path d="M101.6000 66.0400+L129.5400 66.0400+" />+<path d="M142.2400 86.3600+L162.5600 86.3600+" />+<path d="M111.7600 73.6600+L111.7600 76.2000+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="161.3709" y="94.6150"+textLength="2.6827" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">R1</text>+<g class="stroked-text"><desc>R1</desc>+<path d="M161.1592 94.5595+L160.7359 93.9548+" />+<path d="M160.4335 94.5595+L160.4335 93.2895+" />+<path d="M160.4335 93.2895+L160.9173 93.2895+" />+<path d="M160.9173 93.2895+L161.0383 93.3500+" />+<path d="M161.0383 93.3500+L161.0988 93.4105+" />+<path d="M161.0988 93.4105+L161.1592 93.5314+" />+<path d="M161.1592 93.5314+L161.1592 93.7129+" />+<path d="M161.1592 93.7129+L161.0988 93.8338+" />+<path d="M161.0988 93.8338+L161.0383 93.8943+" />+<path d="M161.0383 93.8943+L160.9173 93.9548+" />+<path d="M160.9173 93.9548+L160.4335 93.9548+" />+<path d="M162.3688 94.5595+L161.6431 94.5595+" />+<path d="M162.0059 94.5595+L162.0059 93.2895+" />+<path d="M162.0059 93.2895+L161.8850 93.4710+" />+<path d="M161.8850 93.4710+L161.7640 93.5919+" />+<path d="M161.7640 93.5919+L161.6431 93.6524+" />+</g><text x="161.8547" y="97.1550"+textLength="3.6503" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">4k7</text>+<g class="stroked-text"><desc>4k7</desc>+<path d="M160.9778 96.2529+L160.9778 97.0995+" />+<path d="M160.6754 95.7691+L160.3731 96.6762+" />+<path d="M160.3731 96.6762+L161.1592 96.6762+" />+<path d="M161.6430 97.0995+L161.6430 95.8295+" />+<path d="M161.7640 96.6157+L162.1268 97.0995+" />+<path d="M162.1268 96.2529+L161.6430 96.7367+" />+<path d="M162.5502 95.8295+L163.3968 95.8295+" />+<path d="M163.3968 95.8295+L162.8526 97.0995+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M157.4800 92.7100+L157.4800 91.4400+" />+<path d="M157.4800 97.7900+L157.4800 99.0600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="157.3688" y="100.9649"+textLength="5.2832" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">+3V3</text>+<g class="stroked-text"><desc>+3V3</desc>+<path d="M155.1311 100.4256+L156.0988 100.4256+" />+<path d="M155.6149 100.9094+L155.6149 99.9418+" />+<path d="M156.5826 99.6394+L157.3688 99.6394+" />+<path d="M157.3688 99.6394+L156.9454 100.1232+" />+<path d="M156.9454 100.1232+L157.1269 100.1232+" />+<path d="M157.1269 100.1232+L157.2478 100.1837+" />+<path d="M157.2478 100.1837+L157.3083 100.2442+" />+<path d="M157.3083 100.2442+L157.3688 100.3651+" />+<path d="M157.3688 100.3651+L157.3688 100.6675+" />+<path d="M157.3688 100.6675+L157.3083 100.7885+" />+<path d="M157.3083 100.7885+L157.2478 100.8490+" />+<path d="M157.2478 100.8490+L157.1269 100.9094+" />+<path d="M157.1269 100.9094+L156.7640 100.9094+" />+<path d="M156.7640 100.9094+L156.6431 100.8490+" />+<path d="M156.6431 100.8490+L156.5826 100.7885+" />+<path d="M157.7316 99.6394+L158.1549 100.9094+" />+<path d="M158.1549 100.9094+L158.5783 99.6394+" />+<path d="M158.8807 99.6394+L159.6669 99.6394+" />+<path d="M159.6669 99.6394+L159.2435 100.1232+" />+<path d="M159.2435 100.1232+L159.4250 100.1232+" />+<path d="M159.4250 100.1232+L159.5459 100.1837+" />+<path d="M159.5459 100.1837+L159.6064 100.2442+" />+<path d="M159.6064 100.2442+L159.6669 100.3651+" />+<path d="M159.6669 100.3651+L159.6669 100.6675+" />+<path d="M159.6669 100.6675+L159.6064 100.7885+" />+<path d="M159.6064 100.7885+L159.5459 100.8490+" />+<path d="M159.5459 100.8490+L159.4250 100.9094+" />+<path d="M159.4250 100.9094+L159.0621 100.9094+" />+<path d="M159.0621 100.9094+L158.9412 100.8490+" />+<path d="M158.9412 100.8490+L158.8807 100.7885+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M157.4800 99.0600+L157.4800 99.0600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="115.6509" y="69.2150"+textLength="2.6827" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">C2</text>+<g class="stroked-text"><desc>C2</desc>+<path d="M115.4392 69.0386+L115.3788 69.0991+" />+<path d="M115.3788 69.0991+L115.1973 69.1595+" />+<path d="M115.1973 69.1595+L115.0764 69.1595+" />+<path d="M115.0764 69.1595+L114.8950 69.0991+" />+<path d="M114.8950 69.0991+L114.7740 68.9781+" />+<path d="M114.7740 68.9781+L114.7135 68.8571+" />+<path d="M114.7135 68.8571+L114.6531 68.6152+" />+<path d="M114.6531 68.6152+L114.6531 68.4338+" />+<path d="M114.6531 68.4338+L114.7135 68.1919+" />+<path d="M114.7135 68.1919+L114.7740 68.0710+" />+<path d="M114.7740 68.0710+L114.8950 67.9500+" />+<path d="M114.8950 67.9500+L115.0764 67.8895+" />+<path d="M115.0764 67.8895+L115.1973 67.8895+" />+<path d="M115.1973 67.8895+L115.3788 67.9500+" />+<path d="M115.3788 67.9500+L115.4392 68.0105+" />+<path d="M115.9231 68.0105+L115.9835 67.9500+" />+<path d="M115.9835 67.9500+L116.1045 67.8895+" />+<path d="M116.1045 67.8895+L116.4069 67.8895+" />+<path d="M116.4069 67.8895+L116.5278 67.9500+" />+<path d="M116.5278 67.9500+L116.5883 68.0105+" />+<path d="M116.5883 68.0105+L116.6488 68.1314+" />+<path d="M116.6488 68.1314+L116.6488 68.2524+" />+<path d="M116.6488 68.2524+L116.5883 68.4338+" />+<path d="M116.5883 68.4338+L115.8626 69.1595+" />+<path d="M115.8626 69.1595+L116.6488 69.1595+" />+</g><text x="116.7999" y="71.7550"+textLength="4.9807" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">100n</text>+<g class="stroked-text"><desc>100n</desc>+<path d="M115.3788 71.6995+L114.6531 71.6995+" />+<path d="M115.0159 71.6995+L115.0159 70.4295+" />+<path d="M115.0159 70.4295+L114.8950 70.6110+" />+<path d="M114.8950 70.6110+L114.7740 70.7319+" />+<path d="M114.7740 70.7319+L114.6531 70.7924+" />+<path d="M116.1649 70.4295+L116.2859 70.4295+" />+<path d="M116.2859 70.4295+L116.4068 70.4900+" />+<path d="M116.4068 70.4900+L116.4673 70.5505+" />+<path d="M116.4673 70.5505+L116.5278 70.6714+" />+<path d="M116.5278 70.6714+L116.5883 70.9133+" />+<path d="M116.5883 70.9133+L116.5883 71.2157+" />+<path d="M116.5883 71.2157+L116.5278 71.4576+" />+<path d="M116.5278 71.4576+L116.4673 71.5786+" />+<path d="M116.4673 71.5786+L116.4068 71.6391+" />+<path d="M116.4068 71.6391+L116.2859 71.6995+" />+<path d="M116.2859 71.6995+L116.1649 71.6995+" />+<path d="M116.1649 71.6995+L116.0440 71.6391+" />+<path d="M116.0440 71.6391+L115.9835 71.5786+" />+<path d="M115.9835 71.5786+L115.9230 71.4576+" />+<path d="M115.9230 71.4576+L115.8626 71.2157+" />+<path d="M115.8626 71.2157+L115.8626 70.9133+" />+<path d="M115.8626 70.9133+L115.9230 70.6714+" />+<path d="M115.9230 70.6714+L115.9835 70.5505+" />+<path d="M115.9835 70.5505+L116.0440 70.4900+" />+<path d="M116.0440 70.4900+L116.1649 70.4295+" />+<path d="M117.3744 70.4295+L117.4954 70.4295+" />+<path d="M117.4954 70.4295+L117.6163 70.4900+" />+<path d="M117.6163 70.4900+L117.6768 70.5505+" />+<path d="M117.6768 70.5505+L117.7373 70.6714+" />+<path d="M117.7373 70.6714+L117.7978 70.9133+" />+<path d="M117.7978 70.9133+L117.7978 71.2157+" />+<path d="M117.7978 71.2157+L117.7373 71.4576+" />+<path d="M117.7373 71.4576+L117.6768 71.5786+" />+<path d="M117.6768 71.5786+L117.6163 71.6391+" />+<path d="M117.6163 71.6391+L117.4954 71.6995+" />+<path d="M117.4954 71.6995+L117.3744 71.6995+" />+<path d="M117.3744 71.6995+L117.2535 71.6391+" />+<path d="M117.2535 71.6391+L117.1930 71.5786+" />+<path d="M117.1930 71.5786+L117.1325 71.4576+" />+<path d="M117.1325 71.4576+L117.0721 71.2157+" />+<path d="M117.0721 71.2157+L117.0721 70.9133+" />+<path d="M117.0721 70.9133+L117.1325 70.6714+" />+<path d="M117.1325 70.6714+L117.1930 70.5505+" />+<path d="M117.1930 70.5505+L117.2535 70.4900+" />+<path d="M117.2535 70.4900+L117.3744 70.4295+" />+<path d="M118.3420 70.8529+L118.3420 71.6995+" />+<path d="M118.3420 70.9738+L118.4025 70.9133+" />+<path d="M118.4025 70.9133+L118.5235 70.8529+" />+<path d="M118.5235 70.8529+L118.7049 70.8529+" />+<path d="M118.7049 70.8529+L118.8258 70.9133+" />+<path d="M118.8258 70.9133+L118.8863 71.0343+" />+<path d="M118.8863 71.0343+L118.8863 71.6995+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M111.7600 68.8340+L111.7600 66.0400+" />+<path d="M111.7600 70.8660+L111.7600 73.6600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="130.9212" y="88.2650"+textLength="2.7432" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">U2</text>+<g class="stroked-text"><desc>U2</desc>+<path d="M129.9535 86.9395+L129.9535 87.9676+" />+<path d="M129.9535 87.9676+L130.0140 88.0886+" />+<path d="M130.0140 88.0886+L130.0745 88.1491+" />+<path d="M130.0745 88.1491+L130.1954 88.2095+" />+<path d="M130.1954 88.2095+L130.4373 88.2095+" />+<path d="M130.4373 88.2095+L130.5583 88.1491+" />+<path d="M130.5583 88.1491+L130.6188 88.0886+" />+<path d="M130.6188 88.0886+L130.6792 87.9676+" />+<path d="M130.6792 87.9676+L130.6792 86.9395+" />+<path d="M131.2236 87.0605+L131.2840 87.0000+" />+<path d="M131.2840 87.0000+L131.4050 86.9395+" />+<path d="M131.4050 86.9395+L131.7074 86.9395+" />+<path d="M131.7074 86.9395+L131.8283 87.0000+" />+<path d="M131.8283 87.0000+L131.8888 87.0605+" />+<path d="M131.8888 87.0605+L131.9493 87.1814+" />+<path d="M131.9493 87.1814+L131.9493 87.3024+" />+<path d="M131.9493 87.3024+L131.8888 87.4838+" />+<path d="M131.8888 87.4838+L131.1631 88.2095+" />+<path d="M131.1631 88.2095+L131.9493 88.2095+" />+</g><text x="133.4006" y="90.8050"+textLength="7.7021" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">BME280</text>+<g class="stroked-text"><desc>BME280</desc>+<path d="M130.3769 90.0843+L130.5583 90.1448+" />+<path d="M130.5583 90.1448+L130.6188 90.2052+" />+<path d="M130.6188 90.2052+L130.6792 90.3262+" />+<path d="M130.6792 90.3262+L130.6792 90.5076+" />+<path d="M130.6792 90.5076+L130.6188 90.6286+" />+<path d="M130.6188 90.6286+L130.5583 90.6891+" />+<path d="M130.5583 90.6891+L130.4373 90.7495+" />+<path d="M130.4373 90.7495+L129.9535 90.7495+" />+<path d="M129.9535 90.7495+L129.9535 89.4795+" />+<path d="M129.9535 89.4795+L130.3769 89.4795+" />+<path d="M130.3769 89.4795+L130.4978 89.5400+" />+<path d="M130.4978 89.5400+L130.5583 89.6005+" />+<path d="M130.5583 89.6005+L130.6188 89.7214+" />+<path d="M130.6188 89.7214+L130.6188 89.8424+" />+<path d="M130.6188 89.8424+L130.5583 89.9633+" />+<path d="M130.5583 89.9633+L130.4978 90.0238+" />+<path d="M130.4978 90.0238+L130.3769 90.0843+" />+<path d="M130.3769 90.0843+L129.9535 90.0843+" />+<path d="M131.2235 90.7495+L131.2235 89.4795+" />+<path d="M131.2235 89.4795+L131.6469 90.3867+" />+<path d="M131.6469 90.3867+L132.0702 89.4795+" />+<path d="M132.0702 89.4795+L132.0702 90.7495+" />+<path d="M132.6749 90.0843+L133.0983 90.0843+" />+<path d="M133.2797 90.7495+L132.6749 90.7495+" />+<path d="M132.6749 90.7495+L132.6749 89.4795+" />+<path d="M132.6749 89.4795+L133.2797 89.4795+" />+<path d="M133.7635 89.6005+L133.8239 89.5400+" />+<path d="M133.8239 89.5400+L133.9449 89.4795+" />+<path d="M133.9449 89.4795+L134.2473 89.4795+" />+<path d="M134.2473 89.4795+L134.3682 89.5400+" />+<path d="M134.3682 89.5400+L134.4287 89.6005+" />+<path d="M134.4287 89.6005+L134.4892 89.7214+" />+<path d="M134.4892 89.7214+L134.4892 89.8424+" />+<path d="M134.4892 89.8424+L134.4287 90.0238+" />+<path d="M134.4287 90.0238+L133.7030 90.7495+" />+<path d="M133.7030 90.7495+L134.4892 90.7495+" />+<path d="M135.2149 90.0238+L135.0939 89.9633+" />+<path d="M135.0939 89.9633+L135.0334 89.9029+" />+<path d="M135.0334 89.9029+L134.9730 89.7819+" />+<path d="M134.9730 89.7819+L134.9730 89.7214+" />+<path d="M134.9730 89.7214+L135.0334 89.6005+" />+<path d="M135.0334 89.6005+L135.0939 89.5400+" />+<path d="M135.0939 89.5400+L135.2149 89.4795+" />+<path d="M135.2149 89.4795+L135.4568 89.4795+" />+<path d="M135.4568 89.4795+L135.5777 89.5400+" />+<path d="M135.5777 89.5400+L135.6382 89.6005+" />+<path d="M135.6382 89.6005+L135.6987 89.7214+" />+<path d="M135.6987 89.7214+L135.6987 89.7819+" />+<path d="M135.6987 89.7819+L135.6382 89.9029+" />+<path d="M135.6382 89.9029+L135.5777 89.9633+" />+<path d="M135.5777 89.9633+L135.4568 90.0238+" />+<path d="M135.4568 90.0238+L135.2149 90.0238+" />+<path d="M135.2149 90.0238+L135.0939 90.0843+" />+<path d="M135.0939 90.0843+L135.0334 90.1448+" />+<path d="M135.0334 90.1448+L134.9730 90.2657+" />+<path d="M134.9730 90.2657+L134.9730 90.5076+" />+<path d="M134.9730 90.5076+L135.0334 90.6286+" />+<path d="M135.0334 90.6286+L135.0939 90.6891+" />+<path d="M135.0939 90.6891+L135.2149 90.7495+" />+<path d="M135.2149 90.7495+L135.4568 90.7495+" />+<path d="M135.4568 90.7495+L135.5777 90.6891+" />+<path d="M135.5777 90.6891+L135.6382 90.6286+" />+<path d="M135.6382 90.6286+L135.6987 90.5076+" />+<path d="M135.6987 90.5076+L135.6987 90.2657+" />+<path d="M135.6987 90.2657+L135.6382 90.1448+" />+<path d="M135.6382 90.1448+L135.5777 90.0843+" />+<path d="M135.5777 90.0843+L135.4568 90.0238+" />+<path d="M136.4848 89.4795+L136.6058 89.4795+" />+<path d="M136.6058 89.4795+L136.7267 89.5400+" />+<path d="M136.7267 89.5400+L136.7872 89.6005+" />+<path d="M136.7872 89.6005+L136.8477 89.7214+" />+<path d="M136.8477 89.7214+L136.9082 89.9633+" />+<path d="M136.9082 89.9633+L136.9082 90.2657+" />+<path d="M136.9082 90.2657+L136.8477 90.5076+" />+<path d="M136.8477 90.5076+L136.7872 90.6286+" />+<path d="M136.7872 90.6286+L136.7267 90.6891+" />+<path d="M136.7267 90.6891+L136.6058 90.7495+" />+<path d="M136.6058 90.7495+L136.4848 90.7495+" />+<path d="M136.4848 90.7495+L136.3639 90.6891+" />+<path d="M136.3639 90.6891+L136.3034 90.6286+" />+<path d="M136.3034 90.6286+L136.2429 90.5076+" />+<path d="M136.2429 90.5076+L136.1825 90.2657+" />+<path d="M136.1825 90.2657+L136.1825 89.9633+" />+<path d="M136.1825 89.9633+L136.2429 89.7214+" />+<path d="M136.2429 89.7214+L136.3034 89.6005+" />+<path d="M136.3034 89.6005+L136.3639 89.5400+" />+<path d="M136.3639 89.5400+L136.4848 89.4795+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M124.4600 99.0600+L124.4600 104.1400+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.4600 98.5520)">+<text x="124.4600" y="99.1870"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">GND</text>+</g>+<g class="stroked-text"><desc>GND</desc>+<path d="M123.8300 97.4841+L123.7695 97.6051+" />+<path d="M123.7695 97.6051+L123.7695 97.7865+" />+<path d="M123.7695 97.7865+L123.8300 97.9679+" />+<path d="M123.8300 97.9679+L123.9510 98.0889+" />+<path d="M123.9510 98.0889+L124.0719 98.1494+" />+<path d="M124.0719 98.1494+L124.3138 98.2098+" />+<path d="M124.3138 98.2098+L124.4952 98.2098+" />+<path d="M124.4952 98.2098+L124.7371 98.1494+" />+<path d="M124.7371 98.1494+L124.8581 98.0889+" />+<path d="M124.8581 98.0889+L124.9791 97.9679+" />+<path d="M124.9791 97.9679+L125.0395 97.7865+" />+<path d="M125.0395 97.7865+L125.0395 97.6656+" />+<path d="M125.0395 97.6656+L124.9791 97.4841+" />+<path d="M124.9791 97.4841+L124.9186 97.4237+" />+<path d="M124.9186 97.4237+L124.4952 97.4237+" />+<path d="M124.4952 97.4237+L124.4952 97.6656+" />+<path d="M125.0395 96.8794+L123.7695 96.8794+" />+<path d="M123.7695 96.8794+L125.0395 96.1537+" />+<path d="M125.0395 96.1537+L123.7695 96.1537+" />+<path d="M125.0395 95.5489+L123.7695 95.5489+" />+<path d="M123.7695 95.5489+L123.7695 95.2465+" />+<path d="M123.7695 95.2465+L123.8300 95.0651+" />+<path d="M123.8300 95.0651+L123.9510 94.9441+" />+<path d="M123.9510 94.9441+L124.0719 94.8836+" />+<path d="M124.0719 94.8836+L124.3138 94.8232+" />+<path d="M124.3138 94.8232+L124.4952 94.8232+" />+<path d="M124.4952 94.8232+L124.7371 94.8836+" />+<path d="M124.7371 94.8836+L124.8581 94.9441+" />+<path d="M124.8581 94.9441+L124.9791 95.0651+" />+<path d="M124.9791 95.0651+L125.0395 95.2465+" />+<path d="M125.0395 95.2465+L125.0395 95.5489+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.2060 101.6000)">+<text x="124.2060" y="101.6000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">1</text>+</g>+<g class="stroked-text"><desc>1</desc>+<path d="M124.0425 101.2370+L124.0425 101.9627+" />+<path d="M124.0425 101.5999+L122.7725 101.5999+" />+<path d="M122.7725 101.5999+L122.9540 101.7208+" />+<path d="M122.9540 101.7208+L123.0749 101.8418+" />+<path d="M123.0749 101.8418+L123.1354 101.9627+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 96.5200+L142.2400 96.5200+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="97.1550"+textLength="3.9527" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">CSB</text>+<g class="stroked-text"><desc>CSB</desc>+<path d="M133.8303 96.9786+L133.7699 97.0391+" />+<path d="M133.7699 97.0391+L133.5884 97.0995+" />+<path d="M133.5884 97.0995+L133.4675 97.0995+" />+<path d="M133.4675 97.0995+L133.2861 97.0391+" />+<path d="M133.2861 97.0391+L133.1651 96.9181+" />+<path d="M133.1651 96.9181+L133.1046 96.7971+" />+<path d="M133.1046 96.7971+L133.0442 96.5552+" />+<path d="M133.0442 96.5552+L133.0442 96.3738+" />+<path d="M133.0442 96.3738+L133.1046 96.1319+" />+<path d="M133.1046 96.1319+L133.1651 96.0110+" />+<path d="M133.1651 96.0110+L133.2861 95.8900+" />+<path d="M133.2861 95.8900+L133.4675 95.8295+" />+<path d="M133.4675 95.8295+L133.5884 95.8295+" />+<path d="M133.5884 95.8295+L133.7699 95.8900+" />+<path d="M133.7699 95.8900+L133.8303 95.9505+" />+<path d="M134.3142 97.0391+L134.4956 97.0995+" />+<path d="M134.4956 97.0995+L134.7980 97.0995+" />+<path d="M134.7980 97.0995+L134.9189 97.0391+" />+<path d="M134.9189 97.0391+L134.9794 96.9786+" />+<path d="M134.9794 96.9786+L135.0399 96.8576+" />+<path d="M135.0399 96.8576+L135.0399 96.7367+" />+<path d="M135.0399 96.7367+L134.9794 96.6157+" />+<path d="M134.9794 96.6157+L134.9189 96.5552+" />+<path d="M134.9189 96.5552+L134.7980 96.4948+" />+<path d="M134.7980 96.4948+L134.5561 96.4343+" />+<path d="M134.5561 96.4343+L134.4351 96.3738+" />+<path d="M134.4351 96.3738+L134.3746 96.3133+" />+<path d="M134.3746 96.3133+L134.3142 96.1924+" />+<path d="M134.3142 96.1924+L134.3142 96.0714+" />+<path d="M134.3142 96.0714+L134.3746 95.9505+" />+<path d="M134.3746 95.9505+L134.4351 95.8900+" />+<path d="M134.4351 95.8900+L134.5561 95.8295+" />+<path d="M134.5561 95.8295+L134.8584 95.8295+" />+<path d="M134.8584 95.8295+L135.0399 95.8900+" />+<path d="M136.0075 96.4343+L136.1889 96.4948+" />+<path d="M136.1889 96.4948+L136.2494 96.5552+" />+<path d="M136.2494 96.5552+L136.3098 96.6762+" />+<path d="M136.3098 96.6762+L136.3098 96.8576+" />+<path d="M136.3098 96.8576+L136.2494 96.9786+" />+<path d="M136.2494 96.9786+L136.1889 97.0391+" />+<path d="M136.1889 97.0391+L136.0679 97.0995+" />+<path d="M136.0679 97.0995+L135.5841 97.0995+" />+<path d="M135.5841 97.0995+L135.5841 95.8295+" />+<path d="M135.5841 95.8295+L136.0075 95.8295+" />+<path d="M136.0075 95.8295+L136.1284 95.8900+" />+<path d="M136.1284 95.8900+L136.1889 95.9505+" />+<path d="M136.1889 95.9505+L136.2494 96.0714+" />+<path d="M136.2494 96.0714+L136.2494 96.1924+" />+<path d="M136.2494 96.1924+L136.1889 96.3133+" />+<path d="M136.1889 96.3133+L136.1284 96.3738+" />+<path d="M136.1284 96.3738+L136.0075 96.4343+" />+<path d="M136.0075 96.4343+L135.5841 96.4343+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="96.2660"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">2</text>+<g class="stroked-text"><desc>2</desc>+<path d="M139.3372 94.9535+L139.3976 94.8930+" />+<path d="M139.3976 94.8930+L139.5186 94.8325+" />+<path d="M139.5186 94.8325+L139.8210 94.8325+" />+<path d="M139.8210 94.8325+L139.9419 94.8930+" />+<path d="M139.9419 94.8930+L140.0024 94.9535+" />+<path d="M140.0024 94.9535+L140.0629 95.0744+" />+<path d="M140.0629 95.0744+L140.0629 95.1954+" />+<path d="M140.0629 95.1954+L140.0024 95.3768+" />+<path d="M140.0024 95.3768+L139.2767 96.1025+" />+<path d="M139.2767 96.1025+L140.0629 96.1025+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 91.4400+L142.2400 91.4400+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="92.0750"+textLength="3.2875" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">SDI</text>+<g class="stroked-text"><desc>SDI</desc>+<path d="M133.7094 91.9591+L133.8908 92.0195+" />+<path d="M133.8908 92.0195+L134.1932 92.0195+" />+<path d="M134.1932 92.0195+L134.3141 91.9591+" />+<path d="M134.3141 91.9591+L134.3746 91.8986+" />+<path d="M134.3746 91.8986+L134.4351 91.7776+" />+<path d="M134.4351 91.7776+L134.4351 91.6567+" />+<path d="M134.4351 91.6567+L134.3746 91.5357+" />+<path d="M134.3746 91.5357+L134.3141 91.4752+" />+<path d="M134.3141 91.4752+L134.1932 91.4148+" />+<path d="M134.1932 91.4148+L133.9513 91.3543+" />+<path d="M133.9513 91.3543+L133.8303 91.2938+" />+<path d="M133.8303 91.2938+L133.7698 91.2333+" />+<path d="M133.7698 91.2333+L133.7094 91.1124+" />+<path d="M133.7094 91.1124+L133.7094 90.9914+" />+<path d="M133.7094 90.9914+L133.7698 90.8705+" />+<path d="M133.7698 90.8705+L133.8303 90.8100+" />+<path d="M133.8303 90.8100+L133.9513 90.7495+" />+<path d="M133.9513 90.7495+L134.2536 90.7495+" />+<path d="M134.2536 90.7495+L134.4351 90.8100+" />+<path d="M134.9793 92.0195+L134.9793 90.7495+" />+<path d="M134.9793 90.7495+L135.2817 90.7495+" />+<path d="M135.2817 90.7495+L135.4631 90.8100+" />+<path d="M135.4631 90.8100+L135.5841 90.9310+" />+<path d="M135.5841 90.9310+L135.6446 91.0519+" />+<path d="M135.6446 91.0519+L135.7050 91.2938+" />+<path d="M135.7050 91.2938+L135.7050 91.4752+" />+<path d="M135.7050 91.4752+L135.6446 91.7171+" />+<path d="M135.6446 91.7171+L135.5841 91.8381+" />+<path d="M135.5841 91.8381+L135.4631 91.9591+" />+<path d="M135.4631 91.9591+L135.2817 92.0195+" />+<path d="M135.2817 92.0195+L134.9793 92.0195+" />+<path d="M136.2493 92.0195+L136.2493 90.7495+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="91.1860"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">3</text>+<g class="stroked-text"><desc>3</desc>+<path d="M139.2767 89.7525+L140.0629 89.7525+" />+<path d="M140.0629 89.7525+L139.6395 90.2363+" />+<path d="M139.6395 90.2363+L139.8210 90.2363+" />+<path d="M139.8210 90.2363+L139.9419 90.2968+" />+<path d="M139.9419 90.2968+L140.0024 90.3573+" />+<path d="M140.0024 90.3573+L140.0629 90.4782+" />+<path d="M140.0629 90.4782+L140.0629 90.7806+" />+<path d="M140.0629 90.7806+L140.0024 90.9016+" />+<path d="M140.0024 90.9016+L139.9419 90.9621+" />+<path d="M139.9419 90.9621+L139.8210 91.0225+" />+<path d="M139.8210 91.0225+L139.4581 91.0225+" />+<path d="M139.4581 91.0225+L139.3372 90.9621+" />+<path d="M139.3372 90.9621+L139.2767 90.9016+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 86.3600+L142.2400 86.3600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="86.9950"+textLength="3.9527" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">SCK</text>+<g class="stroked-text"><desc>SCK</desc>+<path d="M133.0442 86.8791+L133.2256 86.9395+" />+<path d="M133.2256 86.9395+L133.5280 86.9395+" />+<path d="M133.5280 86.9395+L133.6489 86.8791+" />+<path d="M133.6489 86.8791+L133.7094 86.8186+" />+<path d="M133.7094 86.8186+L133.7699 86.6976+" />+<path d="M133.7699 86.6976+L133.7699 86.5767+" />+<path d="M133.7699 86.5767+L133.7094 86.4557+" />+<path d="M133.7094 86.4557+L133.6489 86.3952+" />+<path d="M133.6489 86.3952+L133.5280 86.3348+" />+<path d="M133.5280 86.3348+L133.2861 86.2743+" />+<path d="M133.2861 86.2743+L133.1651 86.2138+" />+<path d="M133.1651 86.2138+L133.1046 86.1533+" />+<path d="M133.1046 86.1533+L133.0442 86.0324+" />+<path d="M133.0442 86.0324+L133.0442 85.9114+" />+<path d="M133.0442 85.9114+L133.1046 85.7905+" />+<path d="M133.1046 85.7905+L133.1651 85.7300+" />+<path d="M133.1651 85.7300+L133.2861 85.6695+" />+<path d="M133.2861 85.6695+L133.5884 85.6695+" />+<path d="M133.5884 85.6695+L133.7699 85.7300+" />+<path d="M135.0398 86.8186+L134.9794 86.8791+" />+<path d="M134.9794 86.8791+L134.7979 86.9395+" />+<path d="M134.7979 86.9395+L134.6770 86.9395+" />+<path d="M134.6770 86.9395+L134.4956 86.8791+" />+<path d="M134.4956 86.8791+L134.3746 86.7581+" />+<path d="M134.3746 86.7581+L134.3141 86.6371+" />+<path d="M134.3141 86.6371+L134.2537 86.3952+" />+<path d="M134.2537 86.3952+L134.2537 86.2138+" />+<path d="M134.2537 86.2138+L134.3141 85.9719+" />+<path d="M134.3141 85.9719+L134.3746 85.8510+" />+<path d="M134.3746 85.8510+L134.4956 85.7300+" />+<path d="M134.4956 85.7300+L134.6770 85.6695+" />+<path d="M134.6770 85.6695+L134.7979 85.6695+" />+<path d="M134.7979 85.6695+L134.9794 85.7300+" />+<path d="M134.9794 85.7300+L135.0398 85.7905+" />+<path d="M135.5841 86.9395+L135.5841 85.6695+" />+<path d="M136.3098 86.9395+L135.7656 86.2138+" />+<path d="M136.3098 85.6695+L135.5841 86.3952+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="86.1060"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">4</text>+<g class="stroked-text"><desc>4</desc>+<path d="M139.9419 85.0959+L139.9419 85.9425+" />+<path d="M139.6395 84.6121+L139.3372 85.5192+" />+<path d="M139.3372 85.5192+L140.1233 85.5192+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M137.1600 81.2800+L142.2400 81.2800+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="136.6520" y="81.9150"+textLength="4.0132" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">SDO</text>+<g class="stroked-text"><desc>SDO</desc>+<path d="M132.9837 81.7991+L133.1651 81.8595+" />+<path d="M133.1651 81.8595+L133.4675 81.8595+" />+<path d="M133.4675 81.8595+L133.5884 81.7991+" />+<path d="M133.5884 81.7991+L133.6489 81.7386+" />+<path d="M133.6489 81.7386+L133.7094 81.6176+" />+<path d="M133.7094 81.6176+L133.7094 81.4967+" />+<path d="M133.7094 81.4967+L133.6489 81.3757+" />+<path d="M133.6489 81.3757+L133.5884 81.3152+" />+<path d="M133.5884 81.3152+L133.4675 81.2548+" />+<path d="M133.4675 81.2548+L133.2256 81.1943+" />+<path d="M133.2256 81.1943+L133.1046 81.1338+" />+<path d="M133.1046 81.1338+L133.0441 81.0733+" />+<path d="M133.0441 81.0733+L132.9837 80.9524+" />+<path d="M132.9837 80.9524+L132.9837 80.8314+" />+<path d="M132.9837 80.8314+L133.0441 80.7105+" />+<path d="M133.0441 80.7105+L133.1046 80.6500+" />+<path d="M133.1046 80.6500+L133.2256 80.5895+" />+<path d="M133.2256 80.5895+L133.5279 80.5895+" />+<path d="M133.5279 80.5895+L133.7094 80.6500+" />+<path d="M134.2536 81.8595+L134.2536 80.5895+" />+<path d="M134.2536 80.5895+L134.5560 80.5895+" />+<path d="M134.5560 80.5895+L134.7374 80.6500+" />+<path d="M134.7374 80.6500+L134.8584 80.7710+" />+<path d="M134.8584 80.7710+L134.9189 80.8919+" />+<path d="M134.9189 80.8919+L134.9793 81.1338+" />+<path d="M134.9793 81.1338+L134.9793 81.3152+" />+<path d="M134.9793 81.3152+L134.9189 81.5571+" />+<path d="M134.9189 81.5571+L134.8584 81.6781+" />+<path d="M134.8584 81.6781+L134.7374 81.7991+" />+<path d="M134.7374 81.7991+L134.5560 81.8595+" />+<path d="M134.5560 81.8595+L134.2536 81.8595+" />+<path d="M135.7655 80.5895+L136.0074 80.5895+" />+<path d="M136.0074 80.5895+L136.1284 80.6500+" />+<path d="M136.1284 80.6500+L136.2493 80.7710+" />+<path d="M136.2493 80.7710+L136.3098 81.0129+" />+<path d="M136.3098 81.0129+L136.3098 81.4362+" />+<path d="M136.3098 81.4362+L136.2493 81.6781+" />+<path d="M136.2493 81.6781+L136.1284 81.7991+" />+<path d="M136.1284 81.7991+L136.0074 81.8595+" />+<path d="M136.0074 81.8595+L135.7655 81.8595+" />+<path d="M135.7655 81.8595+L135.6446 81.7991+" />+<path d="M135.6446 81.7991+L135.5236 81.6781+" />+<path d="M135.5236 81.6781+L135.4632 81.4362+" />+<path d="M135.4632 81.4362+L135.4632 81.0129+" />+<path d="M135.4632 81.0129+L135.5236 80.7710+" />+<path d="M135.5236 80.7710+L135.6446 80.6500+" />+<path d="M135.6446 80.6500+L135.7655 80.5895+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="139.7000" y="81.0260"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">5</text>+<g class="stroked-text"><desc>5</desc>+<path d="M140.0024 79.5925+L139.3976 79.5925+" />+<path d="M139.3976 79.5925+L139.3372 80.1973+" />+<path d="M139.3372 80.1973+L139.3976 80.1368+" />+<path d="M139.3976 80.1368+L139.5186 80.0763+" />+<path d="M139.5186 80.0763+L139.8210 80.0763+" />+<path d="M139.8210 80.0763+L139.9419 80.1368+" />+<path d="M139.9419 80.1368+L140.0024 80.1973+" />+<path d="M140.0024 80.1973+L140.0629 80.3182+" />+<path d="M140.0629 80.3182+L140.0629 80.6206+" />+<path d="M140.0629 80.6206+L140.0024 80.7416+" />+<path d="M140.0024 80.7416+L139.9419 80.8021+" />+<path d="M139.9419 80.8021+L139.8210 80.8625+" />+<path d="M139.8210 80.8625+L139.5186 80.8625+" />+<path d="M139.5186 80.8625+L139.3976 80.8021+" />+<path d="M139.3976 80.8021+L139.3372 80.7416+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M124.4600 78.7400+L124.4600 73.6600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.4600 79.2480)">+<text x="124.4600" y="79.8830"+textLength="5.7671" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">VDDIO</text>+</g>+<g class="stroked-text"><desc>VDDIO</desc>+<path d="M123.7695 84.7911+L125.0395 84.3678+" />+<path d="M125.0395 84.3678+L123.7695 83.9444+" />+<path d="M125.0395 83.5211+L123.7695 83.5211+" />+<path d="M123.7695 83.5211+L123.7695 83.2187+" />+<path d="M123.7695 83.2187+L123.8300 83.0373+" />+<path d="M123.8300 83.0373+L123.9510 82.9163+" />+<path d="M123.9510 82.9163+L124.0719 82.8558+" />+<path d="M124.0719 82.8558+L124.3138 82.7954+" />+<path d="M124.3138 82.7954+L124.4952 82.7954+" />+<path d="M124.4952 82.7954+L124.7371 82.8558+" />+<path d="M124.7371 82.8558+L124.8581 82.9163+" />+<path d="M124.8581 82.9163+L124.9791 83.0373+" />+<path d="M124.9791 83.0373+L125.0395 83.2187+" />+<path d="M125.0395 83.2187+L125.0395 83.5211+" />+<path d="M125.0395 82.2511+L123.7695 82.2511+" />+<path d="M123.7695 82.2511+L123.7695 81.9487+" />+<path d="M123.7695 81.9487+L123.8300 81.7673+" />+<path d="M123.8300 81.7673+L123.9510 81.6463+" />+<path d="M123.9510 81.6463+L124.0719 81.5858+" />+<path d="M124.0719 81.5858+L124.3138 81.5254+" />+<path d="M124.3138 81.5254+L124.4952 81.5254+" />+<path d="M124.4952 81.5254+L124.7371 81.5858+" />+<path d="M124.7371 81.5858+L124.8581 81.6463+" />+<path d="M124.8581 81.6463+L124.9791 81.7673+" />+<path d="M124.9791 81.7673+L125.0395 81.9487+" />+<path d="M125.0395 81.9487+L125.0395 82.2511+" />+<path d="M125.0395 80.9811+L123.7695 80.9811+" />+<path d="M123.7695 80.1344+L123.7695 79.8925+" />+<path d="M123.7695 79.8925+L123.8300 79.7715+" />+<path d="M123.8300 79.7715+L123.9510 79.6506+" />+<path d="M123.9510 79.6506+L124.1929 79.5901+" />+<path d="M124.1929 79.5901+L124.6162 79.5901+" />+<path d="M124.6162 79.5901+L124.8581 79.6506+" />+<path d="M124.8581 79.6506+L124.9791 79.7715+" />+<path d="M124.9791 79.7715+L125.0395 79.8925+" />+<path d="M125.0395 79.8925+L125.0395 80.1344+" />+<path d="M125.0395 80.1344+L124.9791 80.2553+" />+<path d="M124.9791 80.2553+L124.8581 80.3763+" />+<path d="M124.8581 80.3763+L124.6162 80.4367+" />+<path d="M124.6162 80.4367+L124.1929 80.4367+" />+<path d="M124.1929 80.4367+L123.9510 80.3763+" />+<path d="M123.9510 80.3763+L123.8300 80.2553+" />+<path d="M123.8300 80.2553+L123.7695 80.1344+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 124.2060 76.2000)">+<text x="124.2060" y="76.2000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">6</text>+</g>+<g class="stroked-text"><desc>6</desc>+<path d="M122.7725 75.9580+L122.7725 76.1999+" />+<path d="M122.7725 76.1999+L122.8330 76.3208+" />+<path d="M122.8330 76.3208+L122.8935 76.3813+" />+<path d="M122.8935 76.3813+L123.0749 76.5023+" />+<path d="M123.0749 76.5023+L123.3168 76.5627+" />+<path d="M123.3168 76.5627+L123.8006 76.5627+" />+<path d="M123.8006 76.5627+L123.9216 76.5023+" />+<path d="M123.9216 76.5023+L123.9821 76.4418+" />+<path d="M123.9821 76.4418+L124.0425 76.3208+" />+<path d="M124.0425 76.3208+L124.0425 76.0789+" />+<path d="M124.0425 76.0789+L123.9821 75.9580+" />+<path d="M123.9821 75.9580+L123.9216 75.8975+" />+<path d="M123.9216 75.8975+L123.8006 75.8370+" />+<path d="M123.8006 75.8370+L123.4982 75.8370+" />+<path d="M123.4982 75.8370+L123.3773 75.8975+" />+<path d="M123.3773 75.8975+L123.3168 75.9580+" />+<path d="M123.3168 75.9580+L123.2563 76.0789+" />+<path d="M123.2563 76.0789+L123.2563 76.3208+" />+<path d="M123.2563 76.3208+L123.3168 76.4418+" />+<path d="M123.3168 76.4418+L123.3773 76.5023+" />+<path d="M123.3773 76.5023+L123.4982 76.5627+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M129.5400 99.0600+L129.5400 104.1400+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.5400 98.5520)">+<text x="129.5400" y="99.1870"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="start" opacity="0" stroke-opacity="0">GND</text>+</g>+<g class="stroked-text"><desc>GND</desc>+<path d="M128.9100 97.4841+L128.8495 97.6051+" />+<path d="M128.8495 97.6051+L128.8495 97.7865+" />+<path d="M128.8495 97.7865+L128.9100 97.9679+" />+<path d="M128.9100 97.9679+L129.0310 98.0889+" />+<path d="M129.0310 98.0889+L129.1519 98.1494+" />+<path d="M129.1519 98.1494+L129.3938 98.2098+" />+<path d="M129.3938 98.2098+L129.5752 98.2098+" />+<path d="M129.5752 98.2098+L129.8171 98.1494+" />+<path d="M129.8171 98.1494+L129.9381 98.0889+" />+<path d="M129.9381 98.0889+L130.0591 97.9679+" />+<path d="M130.0591 97.9679+L130.1195 97.7865+" />+<path d="M130.1195 97.7865+L130.1195 97.6656+" />+<path d="M130.1195 97.6656+L130.0591 97.4841+" />+<path d="M130.0591 97.4841+L129.9986 97.4237+" />+<path d="M129.9986 97.4237+L129.5752 97.4237+" />+<path d="M129.5752 97.4237+L129.5752 97.6656+" />+<path d="M130.1195 96.8794+L128.8495 96.8794+" />+<path d="M128.8495 96.8794+L130.1195 96.1537+" />+<path d="M130.1195 96.1537+L128.8495 96.1537+" />+<path d="M130.1195 95.5489+L128.8495 95.5489+" />+<path d="M128.8495 95.5489+L128.8495 95.2465+" />+<path d="M128.8495 95.2465+L128.9100 95.0651+" />+<path d="M128.9100 95.0651+L129.0310 94.9441+" />+<path d="M129.0310 94.9441+L129.1519 94.8836+" />+<path d="M129.1519 94.8836+L129.3938 94.8232+" />+<path d="M129.3938 94.8232+L129.5752 94.8232+" />+<path d="M129.5752 94.8232+L129.8171 94.8836+" />+<path d="M129.8171 94.8836+L129.9381 94.9441+" />+<path d="M129.9381 94.9441+L130.0591 95.0651+" />+<path d="M130.0591 95.0651+L130.1195 95.2465+" />+<path d="M130.1195 95.2465+L130.1195 95.5489+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.2860 101.6000)">+<text x="129.2860" y="101.6000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">7</text>+</g>+<g class="stroked-text"><desc>7</desc>+<path d="M127.8525 102.0232+L127.8525 101.1766+" />+<path d="M127.8525 101.1766+L129.1225 101.7208+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M129.5400 78.7400+L129.5400 73.6600+" />+</g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.5400 79.2480)">+<text x="129.5400" y="79.8830"+textLength="3.8318" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="end" opacity="0" stroke-opacity="0">VDD</text>+</g>+<g class="stroked-text"><desc>VDD</desc>+<path d="M128.8495 82.8558+L130.1195 82.4325+" />+<path d="M130.1195 82.4325+L128.8495 82.0091+" />+<path d="M130.1195 81.5858+L128.8495 81.5858+" />+<path d="M128.8495 81.5858+L128.8495 81.2834+" />+<path d="M128.8495 81.2834+L128.9100 81.1020+" />+<path d="M128.9100 81.1020+L129.0310 80.9810+" />+<path d="M129.0310 80.9810+L129.1519 80.9205+" />+<path d="M129.1519 80.9205+L129.3938 80.8601+" />+<path d="M129.3938 80.8601+L129.5752 80.8601+" />+<path d="M129.5752 80.8601+L129.8171 80.9205+" />+<path d="M129.8171 80.9205+L129.9381 80.9810+" />+<path d="M129.9381 80.9810+L130.0591 81.1020+" />+<path d="M130.0591 81.1020+L130.1195 81.2834+" />+<path d="M130.1195 81.2834+L130.1195 81.5858+" />+<path d="M130.1195 80.3158+L128.8495 80.3158+" />+<path d="M128.8495 80.3158+L128.8495 80.0134+" />+<path d="M128.8495 80.0134+L128.9100 79.8320+" />+<path d="M128.9100 79.8320+L129.0310 79.7110+" />+<path d="M129.0310 79.7110+L129.1519 79.6505+" />+<path d="M129.1519 79.6505+L129.3938 79.5901+" />+<path d="M129.3938 79.5901+L129.5752 79.5901+" />+<path d="M129.5752 79.5901+L129.8171 79.6505+" />+<path d="M129.8171 79.6505+L129.9381 79.7110+" />+<path d="M129.9381 79.7110+L130.0591 79.8320+" />+<path d="M130.0591 79.8320+L130.1195 80.0134+" />+<path d="M130.1195 80.0134+L130.1195 80.3158+" />+</g></g>+<g style="fill:none; +stroke:#A90000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<g transform="rotate(-90.000000 129.2860 76.2000)">+<text x="129.2860" y="76.2000"+textLength="1.4127" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">8</text>+</g>+<g class="stroked-text"><desc>8</desc>+<path d="M128.3968 76.3208+L128.3363 76.4418+" />+<path d="M128.3363 76.4418+L128.2759 76.5023+" />+<path d="M128.2759 76.5023+L128.1549 76.5627+" />+<path d="M128.1549 76.5627+L128.0944 76.5627+" />+<path d="M128.0944 76.5627+L127.9735 76.5023+" />+<path d="M127.9735 76.5023+L127.9130 76.4418+" />+<path d="M127.9130 76.4418+L127.8525 76.3208+" />+<path d="M127.8525 76.3208+L127.8525 76.0789+" />+<path d="M127.8525 76.0789+L127.9130 75.9580+" />+<path d="M127.9130 75.9580+L127.9735 75.8975+" />+<path d="M127.9735 75.8975+L128.0944 75.8370+" />+<path d="M128.0944 75.8370+L128.1549 75.8370+" />+<path d="M128.1549 75.8370+L128.2759 75.8975+" />+<path d="M128.2759 75.8975+L128.3363 75.9580+" />+<path d="M128.3363 75.9580+L128.3968 76.0789+" />+<path d="M128.3968 76.0789+L128.3968 76.3208+" />+<path d="M128.3968 76.3208+L128.4573 76.4418+" />+<path d="M128.4573 76.4418+L128.5178 76.5023+" />+<path d="M128.5178 76.5023+L128.6387 76.5627+" />+<path d="M128.6387 76.5627+L128.8806 76.5627+" />+<path d="M128.8806 76.5627+L129.0016 76.5023+" />+<path d="M129.0016 76.5023+L129.0621 76.4418+" />+<path d="M129.0621 76.4418+L129.1225 76.3208+" />+<path d="M129.1225 76.3208+L129.1225 76.0789+" />+<path d="M129.1225 76.0789+L129.0621 75.9580+" />+<path d="M129.0621 75.9580+L129.0016 75.8975+" />+<path d="M129.0016 75.8975+L128.8806 75.8370+" />+<path d="M128.8806 75.8370+L128.6387 75.8370+" />+<path d="M128.6387 75.8370+L128.5178 75.8975+" />+<path d="M128.5178 75.8975+L128.4573 75.9580+" />+<path d="M128.4573 75.9580+L128.3968 76.0789+" />+</g></g>+<g style="fill:none; +stroke:#006464; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<text x="116.3464" y="78.1050"+textLength="4.0737" font-size="1.6933" lengthAdjust="spacingAndGlyphs"+text-anchor="middle" opacity="0" stroke-opacity="0">GND</text>+<g class="stroked-text"><desc>GND</desc>+<path d="M115.3788 76.8400+L115.2578 76.7795+" />+<path d="M115.2578 76.7795+L115.0764 76.7795+" />+<path d="M115.0764 76.7795+L114.8950 76.8400+" />+<path d="M114.8950 76.8400+L114.7740 76.9610+" />+<path d="M114.7740 76.9610+L114.7135 77.0819+" />+<path d="M114.7135 77.0819+L114.6531 77.3238+" />+<path d="M114.6531 77.3238+L114.6531 77.5052+" />+<path d="M114.6531 77.5052+L114.7135 77.7471+" />+<path d="M114.7135 77.7471+L114.7740 77.8681+" />+<path d="M114.7740 77.8681+L114.8950 77.9891+" />+<path d="M114.8950 77.9891+L115.0764 78.0495+" />+<path d="M115.0764 78.0495+L115.1973 78.0495+" />+<path d="M115.1973 78.0495+L115.3788 77.9891+" />+<path d="M115.3788 77.9891+L115.4392 77.9286+" />+<path d="M115.4392 77.9286+L115.4392 77.5052+" />+<path d="M115.4392 77.5052+L115.1973 77.5052+" />+<path d="M115.9835 78.0495+L115.9835 76.7795+" />+<path d="M115.9835 76.7795+L116.7092 78.0495+" />+<path d="M116.7092 78.0495+L116.7092 76.7795+" />+<path d="M117.3140 78.0495+L117.3140 76.7795+" />+<path d="M117.3140 76.7795+L117.6164 76.7795+" />+<path d="M117.6164 76.7795+L117.7978 76.8400+" />+<path d="M117.7978 76.8400+L117.9188 76.9610+" />+<path d="M117.9188 76.9610+L117.9793 77.0819+" />+<path d="M117.9793 77.0819+L118.0397 77.3238+" />+<path d="M118.0397 77.3238+L118.0397 77.5052+" />+<path d="M118.0397 77.5052+L117.9793 77.7471+" />+<path d="M117.9793 77.7471+L117.9188 77.8681+" />+<path d="M117.9188 77.8681+L117.7978 77.9891+" />+<path d="M117.7978 77.9891+L117.6164 78.0495+" />+<path d="M117.6164 78.0495+L117.3140 78.0495+" />+</g></g>+<g style="fill:none; +stroke:#840000; stroke-width:0.1524; stroke-opacity:1; +stroke-linecap:round; stroke-linejoin:round;">+<path d="M111.7600 76.2000+L111.7600 76.2000+" />+</g>+<g style="fill:#009600; fill-opacity:1.0000; stroke:none;">+<circle cx="157.4800" cy="91.4400" r="0.4572" /> +</g>+<g style="fill:#009600; fill-opacity:1.0000; stroke:none;">+<circle cx="111.7600" cy="66.0400" r="0.4572" /> +</g> +</svg>
rust/crates/kicad-core/tests/fixtures/sch_hier/mcu.kicad_schadded+1608
@@ -0,0 +1,1608 @@+(kicad_sch+	(version 20260306)+	(generator "eeschema")+	(generator_version "10.0")+	(uuid "ad6c4a7b-70a9-4834-980e-64975947222e")+	(paper "A4")+	(title_block+		(title "MCU")+		(date "2026-10-27")+		(rev "A")+	)+	(lib_symbols+		(symbol "Sensor:BME280"+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "U"+				(at -8.89 11.43 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "BME280"+				(at 7.62 11.43 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" "Package_LGA:Bosch_LGA-8_2.5x2.5mm_P0.65mm_ClockwisePinNumbering"+				(at 38.1 -11.43 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" "https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf"+				(at 0 -5.08 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "3-in-1 sensor, humidity, pressure, temperature, I2C and SPI interface, 1.71-3.6V, LGA-8"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "Bosch pressure humidity temperature environment environmental measurement digital"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_fp_filters" "*LGA*2.5x2.5mm*P0.65mm*Clockwise*"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "BME280_0_1"+				(rectangle+					(start -10.16 10.16)+					(end 10.16 -10.16)+					(stroke+						(width 0.254)+						(type default)+					)+					(fill+						(type background)+					)+				)+			)+			(symbol "BME280_1_1"+				(pin power_in line+					(at -2.54 -15.24 90)+					(length 5.08)+					(name "GND"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin input line+					(at 15.24 -7.62 180)+					(length 5.08)+					(name "CSB"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "2"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin bidirectional line+					(at 15.24 -2.54 180)+					(length 5.08)+					(name "SDI"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "3"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin input line+					(at 15.24 2.54 180)+					(length 5.08)+					(name "SCK"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "4"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin bidirectional line+					(at 15.24 7.62 180)+					(length 5.08)+					(name "SDO"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "5"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin power_in line+					(at -2.54 15.24 270)+					(length 5.08)+					(name "VDDIO"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "6"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin power_in line+					(at 2.54 -15.24 90)+					(length 5.08)+					(name "GND"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "7"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin power_in line+					(at 2.54 15.24 270)+					(length 5.08)+					(name "VDD"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "8"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "Device:C"+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0.254)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "C"+				(at 0.635 2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+					(justify left)+				)+			)+			(property "Value" "C"+				(at 0.635 -2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+					(justify left)+				)+			)+			(property "Footprint" ""+				(at 0.9652 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Unpolarized capacitor"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "cap capacitor"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_fp_filters" "C_*"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "C_0_1"+				(polyline+					(pts+						(xy -2.032 0.762) (xy 2.032 0.762)+					)+					(stroke+						(width 0.508)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy -2.032 -0.762) (xy 2.032 -0.762)+					)+					(stroke+						(width 0.508)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "C_1_1"+				(pin passive line+					(at 0 3.81 270)+					(length 2.794)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin passive line+					(at 0 -3.81 90)+					(length 2.794)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "2"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "power:GND"+			(power global)+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0)+				(hide yes)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "#PWR"+				(at 0 -6.35 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "GND"+				(at 0 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Power symbol creates a global label with name \"GND\" , ground"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "global power"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "GND_0_1"+				(polyline+					(pts+						(xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "GND_1_1"+				(pin power_in line+					(at 0 0 270)+					(length 0)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "Connector:Conn_01x01_Pin"+			(pin_names+				(offset 1.016)+				(hide yes)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "J"+				(at 0 2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "Conn_01x01_Pin"+				(at 0 -2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Generic connector, single row, 01x01, script generated"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_locked" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "connector"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_fp_filters" "Connector*:*_1x??_*"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "Conn_01x01_Pin_1_1"+				(rectangle+					(start 0.8636 0.127)+					(end 0 -0.127)+					(stroke+						(width 0.1524)+						(type default)+					)+					(fill+						(type outline)+					)+				)+				(polyline+					(pts+						(xy 1.27 0) (xy 0.8636 0)+					)+					(stroke+						(width 0.1524)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(pin passive line+					(at 5.08 0 180)+					(length 3.81)+					(name "Pin_1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "Device:R"+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "R"+				(at 2.032 0 90)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "R"+				(at 0 0 90)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at -1.778 0 90)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Resistor"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "R res resistor"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_fp_filters" "R_*"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "R_0_1"+				(rectangle+					(start -1.016 -2.54)+					(end 1.016 2.54)+					(stroke+						(width 0.254)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "R_1_1"+				(pin passive line+					(at 0 3.81 270)+					(length 1.27)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin passive line+					(at 0 -3.81 90)+					(length 1.27)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "2"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "power:+3V3"+			(power global)+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0)+				(hide yes)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "#PWR"+				(at 0 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "+3V3"+				(at 0 3.556 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Power symbol creates a global label with name \"+3V3\""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "global power"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "+3V3_0_1"+				(polyline+					(pts+						(xy -0.762 1.27) (xy 0 2.54)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy 0 2.54) (xy 0.762 1.27)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy 0 0) (xy 0 2.54)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "+3V3_1_1"+				(pin power_in line+					(at 0 0 90)+					(length 0)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+	)+	(symbol+		(lib_id "Sensor:BME280")+		(at 127 88.9 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "e10d4e02-f7e2-4e42-b526-6ea321d71ad1")+		(property "Reference" "U2"+			(at 129.54 87.63 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Value" "BME280"+			(at 129.54 90.17 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" "Package_LGA:Bosch_LGA-8_2.5x2.5mm_P0.65mm_ClockwisePinNumbering"+			(at 127 88.9 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" "https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf"+			(at 127 88.9 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "3-in-1 sensor, humidity, pressure, temperature, I2C and SPI interface, 1.71-3.6V, LGA-8"+			(at 127 88.9 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "6200fc70-c6ee-4b14-b800-de60f2ab2cc0")+		)+		(pin "2"+			(uuid "53f81504-7b5c-4187-8497-54ce932848f2")+		)+		(pin "3"+			(uuid "78a59216-d964-4b2f-b9d7-7037cc025e28")+		)+		(pin "4"+			(uuid "7778eebc-ccc3-44a5-a225-7ef91fbd3842")+		)+		(pin "5"+			(uuid "2393795a-c15e-4e94-927f-30c249e496e9")+		)+		(pin "6"+			(uuid "da593f5a-e16a-475f-b7f6-adef6d1048a6")+		)+		(pin "7"+			(uuid "911c8b96-150f-4615-a305-f08f745a642a")+		)+		(pin "8"+			(uuid "9c6270b0-5cec-4a9b-8f1c-e95f34a47256")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "U2")+					(unit 1)+				)+			)+		)+	)+	(hierarchical_label "VDD"+		(shape input)+		(at 101.6 66.04 180)+		(fields_autoplaced yes)+		(effects+			(font+				(size 1.27 1.27)+			)+			(justify right)+		)+		(uuid "ec597e52-b525-414b-a201-18e511e55d3d")+	)+	(wire+		(pts+			(xy 101.6 66.04) (xy 129.54 66.04)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "97fb4bc2-11e1-457f-b6f4-0f70cc60f8e6")+	)+	(wire+		(pts+			(xy 129.54 66.04) (xy 129.54 73.66)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "7d37567d-bf52-4c7a-9ba0-cf5c363bbeaf")+	)+	(symbol+		(lib_id "Device:C")+		(at 111.76 69.85 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "65319a88-bcb6-4595-9b8c-c6846e843a67")+		(property "Reference" "C2"+			(at 114.3 68.58 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Value" "100n"+			(at 114.3 71.12 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 111.76 69.85 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 111.76 69.85 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Unpolarized capacitor"+			(at 111.76 69.85 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "b9a33c38-f009-43ba-96ef-0240c3359198")+		)+		(pin "2"+			(uuid "615b2745-fdb1-45df-806b-09e0a2be433f")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "C2")+					(unit 1)+				)+			)+		)+	)+	(junction+		(at 111.76 66.04)+		(diameter 0)+		(color 0 0 0 0)+		(uuid "f558e489-8d42-4d10-b146-b2e02b667804")+	)+	(wire+		(pts+			(xy 111.76 73.66) (xy 111.76 76.2)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "528a91ff-dab8-4833-b684-971a1ec03d32")+	)+	(symbol+		(lib_id "power:GND")+		(at 111.76 76.2 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "440efdef-d459-49e1-abb6-d73227f6487c")+		(property "Reference" "#PWR10"+			(at 114.3 74.93 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "GND"+			(at 114.3 77.47 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 111.76 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 111.76 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"GND\" , ground"+			(at 111.76 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "5168db61-a0ee-4ebd-8d3f-dffe41627176")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "#PWR10")+					(unit 1)+				)+			)+		)+	)+	(symbol+		(lib_id "Connector:Conn_01x01_Pin")+		(at 111.76 60.96 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "fbee370f-5cd2-4c8e-981c-8b2f5ef2730b")+		(property "Reference" "J3"+			(at 114.3 59.69 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Value" "VIO"+			(at 114.3 62.23 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 111.76 60.96 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 111.76 60.96 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Generic connector, single row, 01x01, script generated"+			(at 111.76 60.96 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "df138a0b-7eda-4d58-b7e2-5d9d2e85e5c6")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "J3")+					(unit 1)+				)+			)+		)+	)+	(wire+		(pts+			(xy 124.46 73.66) (xy 124.46 60.96)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "46490eef-cfb4-4290-9cee-56f2e57b3689")+	)+	(wire+		(pts+			(xy 124.46 60.96) (xy 116.84 60.96)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "c3a952a4-02b1-4386-a207-77827c3ebca2")+	)+	(label "VIO"+		(at 120.65 60.96 0)+		(effects+			(font+				(size 1.27 1.27)+			)+			(justify left bottom)+		)+		(uuid "479c4b4f-c6d2-4ba0-8df4-afacfdd4c3ff")+	)+	(wire+		(pts+			(xy 124.46 104.14) (xy 124.46 106.68)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "2501152f-3463-42c4-8cf1-02734b98c743")+	)+	(wire+		(pts+			(xy 124.46 106.68) (xy 129.54 106.68)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "25f36df8-b11a-46f2-b998-586996d617f9")+	)+	(wire+		(pts+			(xy 129.54 106.68) (xy 129.54 104.14)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "f8d20c47-a098-4df8-9eca-31858a8f068c")+	)+	(symbol+		(lib_id "power:GND")+		(at 124.46 106.68 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "a98788e7-4059-4d95-896a-dd68699aadef")+		(property "Reference" "#PWR11"+			(at 127 105.41 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "GND"+			(at 127 107.95 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 124.46 106.68 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 124.46 106.68 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"GND\" , ground"+			(at 124.46 106.68 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "ec1b0f9b-139c-4a73-96de-36d34d9a2ba8")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "#PWR11")+					(unit 1)+				)+			)+		)+	)+	(wire+		(pts+			(xy 142.24 91.44) (xy 162.56 91.44)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "0a25d29f-a559-4076-b108-48d42d3377e6")+	)+	(hierarchical_label "SDA"+		(shape bidirectional)+		(at 162.56 91.44 0)+		(fields_autoplaced yes)+		(effects+			(font+				(size 1.27 1.27)+			)+			(justify left)+		)+		(uuid "1a800159-d108-4f66-bcc2-e73ec6720300")+	)+	(symbol+		(lib_id "Device:R")+		(at 157.48 95.25 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "a24e0cf0-5ae2-4b93-b1db-c07895e2a3be")+		(property "Reference" "R1"+			(at 160.02 93.98 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Value" "4k7"+			(at 160.02 96.52 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 157.48 95.25 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 157.48 95.25 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Resistor"+			(at 157.48 95.25 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "10d99eec-a5d7-468c-a60e-832ca4502d84")+		)+		(pin "2"+			(uuid "412bb018-8986-4480-a8fc-fe78309a5773")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "R1")+					(unit 1)+				)+			)+		)+	)+	(junction+		(at 157.48 91.44)+		(diameter 0)+		(color 0 0 0 0)+		(uuid "6003bcec-e9ba-4746-a7f3-0ef4c50ba50d")+	)+	(symbol+		(lib_id "power:+3V3")+		(at 157.48 99.06 180)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "29752cc9-e079-4d87-a0b6-9e7650a37588")+		(property "Reference" "#PWR12"+			(at 160.02 97.79 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "+3V3"+			(at 160.02 100.33 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 157.48 99.06 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 157.48 99.06 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"+3V3\""+			(at 157.48 99.06 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "cd1b768c-8b92-4bb5-aa6d-b8e4d9f27bd6")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/441f215d-5859-45bf-b43f-cf9fdb3aed52"+					(reference "#PWR12")+					(unit 1)+				)+			)+		)+	)+	(wire+		(pts+			(xy 142.24 86.36) (xy 162.56 86.36)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "28d44c75-8a78-4a8d-9262-1828dcdfcc09")+	)+	(hierarchical_label "SCL"+		(shape input)+		(at 162.56 86.36 0)+		(fields_autoplaced yes)+		(effects+			(font+				(size 1.27 1.27)+			)+			(justify left)+		)+		(uuid "3970910a-7f40-44a5-a4de-4564397c4da9")+	)+	(sheet_instances+		(path "/"+			(page "1")+		)+	)+	(embedded_fonts no)+)
rust/crates/kicad-core/tests/fixtures/sch_hier/power.kicad_schadded+1391
@@ -0,0 +1,1391 @@+(kicad_sch+	(version 20260306)+	(generator "eeschema")+	(generator_version "10.0")+	(uuid "70e67ea7-bb87-45d2-970c-334311ef7ef5")+	(paper "A4")+	(title_block+		(title "Power")+		(date "2026-10-27")+		(rev "A")+	)+	(lib_symbols+		(symbol "Regulator_Linear:AP2112K-3.3"+			(pin_names+				(offset 0.254)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "U"+				(at -5.08 5.715 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+					(justify left)+				)+			)+			(property "Value" "AP2112K-3.3"+				(at 0 5.715 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+					(justify left)+				)+			)+			(property "Footprint" "Package_TO_SOT_SMD:SOT-23-5"+				(at 0 8.255 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" "https://www.diodes.com/assets/Datasheets/AP2112.pdf"+				(at 0 2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "600mA low dropout linear regulator, with enable pin, 3.8V-6V input voltage range, 3.3V fixed positive output, SOT-23-5"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "linear regulator ldo fixed positive"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_fp_filters" "SOT?23?5*"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "AP2112K-3.3_0_1"+				(rectangle+					(start -5.08 4.445)+					(end 5.08 -5.08)+					(stroke+						(width 0.254)+						(type default)+					)+					(fill+						(type background)+					)+				)+			)+			(symbol "AP2112K-3.3_1_1"+				(pin power_in line+					(at -7.62 2.54 0)+					(length 2.54)+					(name "VIN"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin power_in line+					(at 0 -7.62 90)+					(length 2.54)+					(name "GND"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "2"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin input line+					(at -7.62 0 0)+					(length 2.54)+					(name "EN"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "3"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin no_connect line+					(at 5.08 0 180)+					(length 2.54)+					(hide yes)+					(name "NC"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "4"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin power_out line+					(at 7.62 2.54 180)+					(length 2.54)+					(name "VOUT"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "5"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "power:+5V"+			(power global)+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0)+				(hide yes)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "#PWR"+				(at 0 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "+5V"+				(at 0 3.556 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Power symbol creates a global label with name \"+5V\""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "global power"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "+5V_0_1"+				(polyline+					(pts+						(xy -0.762 1.27) (xy 0 2.54)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy 0 2.54) (xy 0.762 1.27)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy 0 0) (xy 0 2.54)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "+5V_1_1"+				(pin power_in line+					(at 0 0 90)+					(length 0)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "Device:C"+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0.254)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "C"+				(at 0.635 2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+					(justify left)+				)+			)+			(property "Value" "C"+				(at 0.635 -2.54 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+					(justify left)+				)+			)+			(property "Footprint" ""+				(at 0.9652 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Unpolarized capacitor"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "cap capacitor"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_fp_filters" "C_*"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "C_0_1"+				(polyline+					(pts+						(xy -2.032 0.762) (xy 2.032 0.762)+					)+					(stroke+						(width 0.508)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy -2.032 -0.762) (xy 2.032 -0.762)+					)+					(stroke+						(width 0.508)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "C_1_1"+				(pin passive line+					(at 0 3.81 270)+					(length 2.794)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+				(pin passive line+					(at 0 -3.81 90)+					(length 2.794)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "2"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "power:GND"+			(power global)+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0)+				(hide yes)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "#PWR"+				(at 0 -6.35 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "GND"+				(at 0 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Power symbol creates a global label with name \"GND\" , ground"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "global power"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "GND_0_1"+				(polyline+					(pts+						(xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "GND_1_1"+				(pin power_in line+					(at 0 0 270)+					(length 0)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+		(symbol "power:+3V3"+			(power global)+			(pin_numbers+				(hide yes)+			)+			(pin_names+				(offset 0)+				(hide yes)+			)+			(exclude_from_sim no)+			(in_bom yes)+			(on_board yes)+			(in_pos_files yes)+			(duplicate_pin_numbers_are_jumpers no)+			(property "Reference" "#PWR"+				(at 0 -3.81 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Value" "+3V3"+				(at 0 3.556 0)+				(show_name no)+				(do_not_autoplace no)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Footprint" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Datasheet" ""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "Description" "Power symbol creates a global label with name \"+3V3\""+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(property "ki_keywords" "global power"+				(at 0 0 0)+				(show_name no)+				(do_not_autoplace no)+				(hide yes)+				(effects+					(font+						(size 1.27 1.27)+					)+				)+			)+			(symbol "+3V3_0_1"+				(polyline+					(pts+						(xy -0.762 1.27) (xy 0 2.54)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy 0 2.54) (xy 0.762 1.27)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+				(polyline+					(pts+						(xy 0 0) (xy 0 2.54)+					)+					(stroke+						(width 0)+						(type default)+					)+					(fill+						(type none)+					)+				)+			)+			(symbol "+3V3_1_1"+				(pin power_in line+					(at 0 0 90)+					(length 0)+					(name ""+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+					(number "1"+						(effects+							(font+								(size 1.27 1.27)+							)+						)+					)+				)+			)+			(embedded_fonts no)+		)+	)+	(symbol+		(lib_id "Regulator_Linear:AP2112K-3.3")+		(at 101.6 76.2 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "a13a9ebb-71ad-4dad-9934-4fefd633b2d0")+		(property "Reference" "U1"+			(at 104.14 74.93 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Value" "AP2112K-3.3"+			(at 104.14 77.47 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" "Package_TO_SOT_SMD:SOT-23-5"+			(at 101.6 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" "https://www.diodes.com/assets/Datasheets/AP2112.pdf"+			(at 101.6 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "600mA low dropout linear regulator, with enable pin, 3.8V-6V input voltage range, 3.3V fixed positive output, SOT-23-5"+			(at 101.6 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "fac63ebb-6a8d-4d8c-8e2c-8450ed4c59de")+		)+		(pin "2"+			(uuid "87056f94-cda6-4c79-9597-c8e653eb6206")+		)+		(pin "3"+			(uuid "b905ebd7-fe48-4f53-9dbb-3efe7b15a01a")+		)+		(pin "4"+			(uuid "286a9bb6-98a5-4ee8-81c0-3688bc3709e0")+		)+		(pin "5"+			(uuid "8445e9e2-a3d8-431f-aa59-c0399f085324")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "U1")+					(unit 1)+				)+			)+		)+	)+	(symbol+		(lib_id "power:+5V")+		(at 76.2 66.04 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "c4088aab-da77-4327-a600-caf5d519b060")+		(property "Reference" "#PWR03"+			(at 78.74 64.77 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "+5V"+			(at 78.74 67.31 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 76.2 66.04 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 76.2 66.04 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"+5V\""+			(at 76.2 66.04 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "6d6fe1a7-6ae5-43ea-a2da-2b09f1a5b975")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "#PWR03")+					(unit 1)+				)+			)+		)+	)+	(wire+		(pts+			(xy 76.2 66.04) (xy 76.2 73.66)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "3a88f76d-eb7d-45f2-a381-2e3cec38ef76")+	)+	(wire+		(pts+			(xy 76.2 73.66) (xy 93.98 73.66)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "7ff2274e-cd5a-4c42-8444-ed5e87b77873")+	)+	(junction+		(at 76.2 73.66)+		(diameter 0)+		(color 0 0 0 0)+		(uuid "9ee89b23-4891-4b13-9676-2e1d2cf42e9d")+	)+	(symbol+		(lib_id "Device:C")+		(at 76.2 77.47 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "c5803e95-eee1-4e3a-adef-bf68c6bd324c")+		(property "Reference" "C1"+			(at 78.74 76.2 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Value" "10u"+			(at 78.74 78.74 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 76.2 77.47 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 76.2 77.47 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Unpolarized capacitor"+			(at 76.2 77.47 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "e60c7d01-8499-4dbb-8785-1a798e87f484")+		)+		(pin "2"+			(uuid "1fd0fdfe-756d-4093-9491-f9a07cd128d7")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "C1")+					(unit 1)+				)+			)+		)+	)+	(symbol+		(lib_id "power:GND")+		(at 76.2 83.82 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "7786f7cf-373f-4017-a5a6-5e9ffb67051c")+		(property "Reference" "#PWR04"+			(at 78.74 82.55 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "GND"+			(at 78.74 85.09 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 76.2 83.82 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 76.2 83.82 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"GND\" , ground"+			(at 76.2 83.82 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "972c3af1-e278-48a2-ba5c-b6ce9cf08273")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "#PWR04")+					(unit 1)+				)+			)+		)+	)+	(wire+		(pts+			(xy 76.2 81.28) (xy 76.2 83.82)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "fb2684e0-3e25-4f34-a26c-b512dd84a93f")+	)+	(wire+		(pts+			(xy 101.6 83.82) (xy 101.6 86.36)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "d22386a5-efe5-487f-afd0-e8877695cef4")+	)+	(symbol+		(lib_id "power:GND")+		(at 101.6 86.36 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "63613843-f26f-4efd-8887-f74cff09c91c")+		(property "Reference" "#PWR05"+			(at 104.14 85.09 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "GND"+			(at 104.14 87.63 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 101.6 86.36 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 101.6 86.36 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"GND\" , ground"+			(at 101.6 86.36 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "bf67a2e9-33a1-4666-91ee-20c30d186212")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "#PWR05")+					(unit 1)+				)+			)+		)+	)+	(wire+		(pts+			(xy 109.22 73.66) (xy 114.3 73.66)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "5e8e04e8-799d-4076-8b50-a79c41c8897e")+	)+	(wire+		(pts+			(xy 114.3 73.66) (xy 121.92 73.66)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "22f24093-e468-4452-904e-a7042363e177")+	)+	(hierarchical_label "VOUT"+		(shape output)+		(at 121.92 73.66 0)+		(fields_autoplaced yes)+		(effects+			(font+				(size 1.27 1.27)+			)+			(justify left)+		)+		(uuid "37de9e0e-3ce5-4336-978e-78267883187a")+	)+	(symbol+		(lib_id "power:+3V3")+		(at 114.3 73.66 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "1deefe0e-4a76-4fe5-b4ec-51a6d3c8d734")+		(property "Reference" "#PWR06"+			(at 116.84 72.39 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "+3V3"+			(at 116.84 74.93 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 114.3 73.66 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 114.3 73.66 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"+3V3\""+			(at 114.3 73.66 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "23d27697-9e6d-4c18-86ad-6980fb9ce7b6")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "#PWR06")+					(unit 1)+				)+			)+		)+	)+	(sheet+		(at 40.64 106.68)+		(size 25.4 15.24)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(stroke+			(width 0.1524)+			(type solid)+		)+		(fill+			(color 0 0 0 0.0000)+		)+		(uuid "00c16012-0527-4161-807f-87cd04c1211c")+		(property "Sheetname" "Filter"+			(at 40.64 105.9684 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left bottom)+			)+		)+		(property "Sheetfile" "filter.kicad_sch"+			(at 40.64 122.5046 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left top)+			)+		)+		(pin "VIN" input+			(at 66.04 111.76 0)+			(uuid "b9ba129d-d7ea-46c1-9e0d-fd04975e1582")+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify right)+			)+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(page "3")+				)+			)+		)+	)+	(wire+		(pts+			(xy 66.04 111.76) (xy 71.12 111.76)+		)+		(stroke+			(width 0)+			(type default)+		)+		(uuid "e503ff59-a771-4620-844f-40e77665bfea")+	)+	(symbol+		(lib_id "power:+5V")+		(at 71.12 111.76 0)+		(unit 1)+		(exclude_from_sim no)+		(in_bom yes)+		(on_board yes)+		(dnp no)+		(fields_autoplaced yes)+		(uuid "3d2d9887-9214-4dc8-a4aa-3b7200ed96d8")+		(property "Reference" "#PWR07"+			(at 73.66 110.49 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+				(hide yes)+			)+		)+		(property "Value" "+5V"+			(at 73.66 113.03 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(justify left)+			)+		)+		(property "Footprint" ""+			(at 71.12 111.76 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Datasheet" ""+			(at 71.12 111.76 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(property "Description" "Power symbol creates a global label with name \"+5V\""+			(at 71.12 111.76 0)+			(effects+				(font+					(size 1.27 1.27)+				)+				(hide yes)+			)+		)+		(pin "1"+			(uuid "10e4e13d-4801-429f-ae17-971aabb72759")+		)+		(instances+			(project "hier"+				(path "/4b27afbc-6492-4606-90bb-981fbb98399d/a2400ee4-2dac-4cf4-ad38-44ff51491f3f"+					(reference "#PWR07")+					(unit 1)+				)+			)+		)+	)+	(sheet_instances+		(path "/"+			(page "1")+		)+	)+	(embedded_fonts no)+)
rust/crates/kicad-core/tests/konnect_route.rsadded+409
@@ -0,0 +1,409 @@+//! The konnect-route fixture project (tests/fixtures/konnect-route: a KiCad 10 board, its+//! .kicad_pro, .kicad_dru, a kicadxml netlist and a project footprint library) through the+//! routing, rules, placement-helper and update-from-schematic planners.++use std::path::{Path, PathBuf};++use serde_json::{json, Value};++use kicad_core::libraries::LibCtx;+use kicad_core::{netlist, pcb, pcb_sync, place_tools, placement, project_rules, route_tools};++fn dir() -> PathBuf {+    Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/konnect-route")+}++fn board() -> (String, pcb::Board) {+    let p = dir().join("route-fixture.kicad_pcb");+    let text = std::fs::read_to_string(&p).unwrap();+    let b = pcb::parse_pcb_text(&text, &p.to_string_lossy()).unwrap();+    (text, b)+}++fn project() -> Value {+    project_rules::read_json(&dir().join("route-fixture.kicad_pro")).unwrap()+}++fn net_names(b: &pcb::Board) -> Vec<String> {+    b.nets.iter().map(|n| n.name.clone()).collect()+}++/// A scratch copy of the whole fixture folder.+fn scratch(tag: &str) -> PathBuf {+    let d = std::env::temp_dir().join(format!("kb-konnect-route-{tag}-{}", std::process::id()));+    let _ = std::fs::remove_dir_all(&d);+    copy_dir(&dir(), &d);+    d+}++fn copy_dir(from: &Path, to: &Path) {+    std::fs::create_dir_all(to).unwrap();+    for e in std::fs::read_dir(from).unwrap() {+        let e = e.unwrap();+        let t = to.join(e.file_name());+        if e.file_type().unwrap().is_dir() {+            copy_dir(&e.path(), &t);+        } else {+            std::fs::copy(e.path(), t).unwrap();+        }+    }+}++const SIG_A_1: &str = "00000000-0000-4000-8000-000000000074";++#[test]+fn the_fixture_is_a_kicad_10_board() {+    let (_, b) = board();+    assert_eq!(b.net_format, pcb::NetFormat::Name);+    assert_eq!(b.footprints.len(), 7);+    assert_eq!(b.segments.len(), 3);+    assert_eq!(b.vias.len(), 1);+    let o = placement::outline(&b).unwrap();+    assert_eq!((o.min_x, o.min_y, o.max_x, o.max_y), (0.0, 0.0, 60.0, 40.0));+    let u1 = b.footprints.iter().find(|f| f.reference == "U1").unwrap();+    assert_eq!(u1.pads.iter().find(|p| p.number == "5").unwrap().rotation, Some(90.0), "pad angles are read");+}++// ---------------------------------------------------------------------------+// kicad_netclasses, kicad_board_rules, kicad_custom_rules+// ---------------------------------------------------------------------------++#[test]+fn netclasses_report_patterns_and_the_nets_they_match() {+    let (_, b) = board();+    let r = project_rules::netclasses_report(&project(), &net_names(&b));+    let usb = r["classes"].as_array().unwrap().iter().find(|c| c["name"] == "USB").unwrap();+    assert_eq!(usb["diffPairGap"], 0.15);+    assert_eq!(usb["patterns"][0]["pattern"], "USB_*");+    assert_eq!(usb["nets"], json!(["USB_D+", "USB_D-"]));+    let default = r["classes"].as_array().unwrap().iter().find(|c| c["name"] == "Default").unwrap();+    assert!(default["nets"].as_array().unwrap().contains(&json!("GND")));+    assert_eq!(project_rules::class_for_net(&project(), "USB_D-")["name"], "USB");+}++#[test]+fn netclass_edits_create_assign_and_remove_and_write_atomically() {+    let d = scratch("netclass");+    let pro_path = d.join("route-fixture.kicad_pro");+    let before = std::fs::read_to_string(&pro_path).unwrap();+    let mut pro: Value = serde_json::from_str(&before).unwrap();+    let changes = project_rules::edit_netclasses(&mut pro, &json!({"set": {"name": "PWR", "trackWidth": 0.5, "clearance": 0.3}, "assign": {"netclass": "PWR", "patterns": ["+3V3"]}})).unwrap();+    assert_eq!(changes.len(), 2, "{changes:?}");+    let pwr = project_rules::class_for_net(&pro, "+3V3");+    assert_eq!(pwr["name"], "PWR");+    assert_eq!(pwr["track_width"], 0.5);+    assert_eq!(pwr["via_diameter"], 0.6, "a new class starts from the Default values");+    assert!(project_rules::edit_netclasses(&mut pro, &json!({"set": {"name": "PWR", "trackWidth": 0.5}})).unwrap().is_empty(), "no change, no change list");+    assert_eq!(project_rules::edit_netclasses(&mut pro, &json!({"assign": {"netclass": "NOPE", "patterns": ["x"]}})).unwrap_err().code, "unknown_netclass");+    assert_eq!(project_rules::edit_netclasses(&mut pro, &json!({"set": {"name": "BAD", "viaDiameter": 0.3, "viaDrill": 0.4}})).unwrap_err().code, "invalid_value");+    let bak = project_rules::write_atomic(&pro_path, &project_rules::project_text(&pro), Some(&before)).unwrap();+    assert_eq!(std::fs::read_to_string(&bak).unwrap(), before);+    let back = project_rules::read_json(&pro_path).unwrap();+    assert_eq!(project_rules::class_for_net(&back, "+3V3")["name"], "PWR");+    assert_eq!(project_rules::write_atomic(&pro_path, "{}", Some(&before)).unwrap_err().code, "file_changed");+    let mut p2 = back.clone();+    project_rules::edit_netclasses(&mut p2, &json!({"remove": "PWR"})).unwrap();+    assert_eq!(project_rules::class_for_net(&p2, "+3V3")["name"], "Default");+    assert!(p2["net_settings"]["netclass_patterns"].as_array().unwrap().iter().all(|p| p["netclass"] != "PWR"));+    assert!(project_rules::open_locks(&pro_path).is_empty());+    std::fs::write(d.join("~route-fixture.kicad_pcb.lck"), "x").unwrap();+    assert_eq!(project_rules::open_locks(&pro_path).len(), 1);+    let _ = std::fs::remove_dir_all(&d);+}++#[test]+fn board_rules_read_and_write_with_the_hidden_zero_rows() {+    let mut pro = project();+    let r = project_rules::board_rules_report(&pro);+    assert_eq!(r["constraints"]["minClearance"], 0.15);+    assert_eq!(r["constraints"]["minCopperEdgeClearance"], 0.5);+    assert_eq!(r["trackWidths"], json!([0.2, 0.3, 0.5]));+    assert_eq!(r["viaSizes"], json!([{"diameter": 0.6, "drill": 0.3}]));+    let ch = project_rules::edit_board_rules(&mut pro, &json!({"rules": {"minTrackWidth": 0.127, "min_hole_to_hole": 0.3}, "trackWidths": [0.15, 0.25], "viaSizes": [{"diameter": 0.45, "drill": 0.2}], "diffPairs": [{"width": 0.2, "gap": 0.15}]})).unwrap();+    assert_eq!(ch.len(), 5, "{ch:?}");+    assert_eq!(pro["board"]["design_settings"]["track_widths"], json!([0.0, 0.15, 0.25]));+    assert_eq!(pro["board"]["design_settings"]["via_dimensions"][0], json!({"diameter": 0.0, "drill": 0.0}));+    assert_eq!(pro["board"]["design_settings"]["rules"]["min_track_width"], 0.127);+    let r = project_rules::board_rules_report(&pro);+    assert_eq!(r["diffPairs"], json!([{"width": 0.2, "gap": 0.15, "viaGap": 0.15}]));+    assert_eq!(project_rules::edit_board_rules(&mut pro, &json!({"rules": {"minWiggle": 1}})).unwrap_err().code, "unknown_rule");+    assert_eq!(project_rules::edit_board_rules(&mut pro, &json!({"viaSizes": [{"diameter": 0.3, "drill": 0.3}]})).unwrap_err().code, "invalid_value");+}++#[test]+fn the_fixture_rules_file_parses_and_edits() {+    let text = std::fs::read_to_string(dir().join("route-fixture.kicad_dru")).unwrap();+    let (v, rules) = project_rules::parse_dru(&text).unwrap();+    assert_eq!(v, Some(1));+    assert_eq!(rules.iter().map(|r| r.name.as_str()).collect::<Vec<_>>(), vec!["HV clearance", "Inner thin"]);+    assert_eq!(rules[1].layer.as_deref(), Some("inner"));+    assert_eq!(rules[1].constraints[0]["opt"], "0.15mm");+    let rule = project_rules::rule_text(&json!({"name": "USB pair", "condition": "A.NetClass == 'USB'", "constraints": [{"type": "diff_pair_gap", "min": 0.15, "max": 0.2}, {"type": "skew", "max": 0.1}]})).unwrap();+    let added = project_rules::add_rule(&text, &rule, false).unwrap();+    assert_eq!(project_rules::parse_dru(&added).unwrap().1.len(), 3);+    let (gone, removed) = project_rules::remove_rules(&added, &["HV clearance".into()]).unwrap();+    assert_eq!(removed.len(), 1);+    assert!(gone.contains("Inner thin") && gone.contains("USB pair") && !gone.contains("HV clearance"));+}++// ---------------------------------------------------------------------------+// kicad_modify_track, kicad_route_diff_pair, kicad_copy_routing+// ---------------------------------------------------------------------------++#[test]+fn a_track_change_rewrites_only_that_segment() {+    let (text, b) = board();+    let (changes, cand) = route_tools::plan_track_changes(&b, &text, &json!({"changes": [{"id": SIG_A_1, "width": 0.3, "layer": "B.Cu"}]})).unwrap();+    assert_eq!(changes[0].changed, vec!["width", "layer"]);+    assert_eq!(changes[0].net, "SIG_A");+    let nb = pcb::parse_pcb_text(&cand, "c").unwrap();+    assert_eq!(nb.segments.len(), 3);+    let s = nb.segments.iter().find(|s| s.uuid.as_deref() == Some(SIG_A_1)).unwrap();+    assert_eq!((s.width, s.layer.as_deref(), s.net_name.as_deref()), (Some(0.3), Some("B.Cu"), Some("SIG_A")));+    let others_before: Vec<_> = b.segments.iter().filter(|s| s.uuid.as_deref() != Some(SIG_A_1)).map(|s| (s.uuid.clone(), s.width, s.layer.clone())).collect();+    let others_after: Vec<_> = nb.segments.iter().filter(|s| s.uuid.as_deref() != Some(SIG_A_1)).map(|s| (s.uuid.clone(), s.width, s.layer.clone())).collect();+    assert_eq!(others_before, others_after);+    // an endpoint onto a pad+    let (c2, cand2) = route_tools::plan_track_changes(&b, &text, &json!({"id": SIG_A_1, "end": [12, 19.675]})).unwrap();+    assert_eq!(c2[0].after.end, [12.0, 19.675]);+    assert!(cand2.contains("(end 12 19.675)"));+    let e = |a: Value| route_tools::plan_track_changes(&b, &text, &a).unwrap_err().code;+    assert_eq!(e(json!({"id": "nope", "width": 0.3})), "unknown_track");+    assert_eq!(e(json!({"id": "00000000-0000-4000-8000-000000000076", "width": 0.3})), "unknown_track", "a via is not a track");+    assert_eq!(e(json!({"id": SIG_A_1, "layer": "In7.Cu"})), "unknown_layer");+    assert_eq!(e(json!({"id": SIG_A_1, "width": 0.2})), "no_change");+}++#[test]+fn a_diff_pair_takes_the_netclass_gap_and_reports_skew() {+    let (text, b) = board();+    let pro = project();+    let plan = route_tools::plan_diff_pair(&b, Some(&pro), &json!({"pair": "USB_D", "centerline": [[15, 36], [25, 36], [27, 38]]})).unwrap();+    let v = plan.public();+    assert_eq!((v["netP"].as_str(), v["netN"].as_str()), (Some("USB_D+"), Some("USB_D-")));+    assert_eq!((v["width"].as_f64(), v["gap"].as_f64()), (Some(0.2), Some(0.15)), "the USB netclass values");+    assert_eq!(v["sizesFrom"], "netclass");+    // centre-to-centre spacing is gap + width on the straight run+    let p0 = plan.p.segments[0].start;+    let n0 = plan.n.segments[0].start;+    assert!(((p0[1] - n0[1]).abs() - 0.35).abs() < 1e-6, "{p0:?} {n0:?}");+    assert!(p0[1] < n0[1], "P is on the left of +x travel (smaller y)");+    // on the outside of a right turn the left half is longer+    assert!(v["skewMm"].as_f64().unwrap() > 0.0);+    let cand = pcb::splice(&text, &plan.blocks());+    assert_eq!(pcb::parse_pcb_text(&cand, "c").unwrap().segments.len(), 3 + 4);+    // a layer change puts a via pair at the vias' spacing+    let plan = route_tools::plan_diff_pair(&b, Some(&pro), &json!({"netP": "USB_D+", "centerline": [[15, 36], [25, 36], {"x": 30, "y": 36, "layer": "B.Cu"}, [35, 36]], "viaSize": 0.6})).unwrap();+    assert_eq!((plan.p.vias.len(), plan.n.vias.len()), (1, 1));+    let (vp, vn) = (plan.p.vias[0].at, plan.n.vias[0].at);+    assert!(((vp[1] - vn[1]).abs() - (0.6 + 0.25)).abs() < 1e-6, "via pair centre spacing is viaSize + viaGap: {vp:?} {vn:?}");+    assert_eq!(plan.p.segments.last().unwrap().layer, "B.Cu");+    // pads join the ends, and pcb::plan checks they are on the right nets+    let ok = route_tools::plan_diff_pair(&b, None, &json!({"netP": "USB_D+", "netN": "USB_D-", "centerline": [[20, 24], [26, 24]], "pEnd": "J1.2", "nEnd": "J1.3", "gap": 0.2, "width": 0.25})).unwrap();+    assert_eq!(ok.public()["sizesFrom"], "arguments");+    assert_eq!(ok.p.segments.last().unwrap().end, [30.0, 28.54]);+    let wrong = route_tools::plan_diff_pair(&b, None, &json!({"netP": "USB_D+", "netN": "USB_D-", "centerline": [[20, 24], [26, 24]], "pEnd": "J1.3"})).unwrap_err();+    assert_eq!(wrong.code, "net_mismatch");+    assert_eq!(route_tools::plan_diff_pair(&b, None, &json!({"pair": "NOPE", "centerline": [[0, 0], [1, 0]]})).unwrap_err().code, "pair_not_found");+}++#[test]+fn copy_routing_translates_and_remaps_nets() {+    let (text, b) = board();+    let src = json!({"minX": 9, "minY": 19, "maxX": 19, "maxY": 29});+    let plan = route_tools::plan_copy(&b, &json!({"source": src, "offset": {"dx": 30, "dy": -15}})).unwrap();+    let v = plan.public();+    assert_eq!((v["segmentCount"].as_u64(), v["viaCount"].as_u64()), (Some(2), Some(1)), "the B.Cu run leaves the box and stays");+    assert_eq!(plan.plans[0].net_name, "SIG_A");+    assert_eq!(plan.plans[0].vias[0].at, [40.0, 13.0]);+    let cand = pcb::splice(&text, &plan.blocks());+    assert_eq!(pcb::parse_pcb_text(&cand, "c").unwrap().vias.len(), 2);+    let remap = route_tools::plan_copy(&b, &json!({"source": src, "offset": [30, -15], "netMap": {"SIG_A": "SIG_B"}})).unwrap();+    assert_eq!(remap.plans.iter().map(|p| p.net_name.as_str()).collect::<Vec<_>>(), vec!["SIG_B"]);+    // a footprint pair that maps no net leaves nothing to copy, and says why+    let none = route_tools::plan_copy(&b, &json!({"source": src, "offset": [30, -15], "refMap": {"U1": "U2"}})).unwrap_err();+    assert_eq!(none.code, "nothing_to_copy");+    assert_eq!(none.detail["skipped"][0]["reason"], "unmapped_net");+    assert_eq!(route_tools::plan_copy(&b, &json!({"source": src, "offset": [0, 0]})).unwrap_err().code, "invalid_geometry");+}++// ---------------------------------------------------------------------------+// kicad_check_clearance, kicad_score_placement, kicad_place_decoupling, kicad_plan_fanout+// ---------------------------------------------------------------------------++#[test]+fn clearance_by_courtyard_and_by_pad() {+    let (_, b) = board();+    let c = place_tools::check_clearance(&b, &json!({"threshold": 3})).unwrap();+    let pairs = c["pairs"].as_array().unwrap();+    let c1c2 = pairs.iter().find(|p| p["a"] == "C1" && p["b"] == "C2").expect("C1-C2 under 3 mm");+    assert!((c1c2["distanceMm"].as_f64().unwrap() - 2.14).abs() < 1e-6);+    assert!(place_tools::check_clearance(&b, &json!({})).unwrap()["clean"] == true, "nothing under 0.25 mm");+    let only = place_tools::check_clearance(&b, &json!({"threshold": 50, "refs": ["R1"]})).unwrap();+    assert!(only["pairs"].as_array().unwrap().iter().all(|p| p["a"] == "R1" || p["b"] == "R1"));+    let pads = place_tools::check_clearance(&b, &json!({"mode": "pads", "threshold": 3.5})).unwrap();+    let p = pads["pairs"].as_array().unwrap().iter().find(|p| p["a"] == "C1.2" && p["b"] == "C2.1").expect("C1.2 to C2.1");+    assert!((p["distanceMm"].as_f64().unwrap() - (4.0 - 0.96 - 0.56)).abs() < 1e-6, "{p}");+    assert_eq!(place_tools::check_clearance(&b, &json!({"refs": ["Q9"]})).unwrap_err().code, "unknown_footprint");+}++#[test]+fn the_score_names_its_deductions() {+    let (_, b) = board();+    let s = place_tools::score(&b, &json!({}));+    let rule = |name: &str| s["deductions"].as_array().unwrap().iter().find(|d| d["rule"] == name).cloned().unwrap();+    assert_eq!(rule("connector_off_edge")["items"][0]["ref"], "J1");+    assert_eq!(rule("decoupling_far")["count"], 2);+    assert_eq!(rule("courtyard_overlap")["count"], 0);+    assert_eq!(rule("outside_board")["count"], 0);+    let sc = s["score"].as_f64().unwrap();+    assert!(sc < 90.0 && sc > 50.0, "{s}");+}++#[test]+fn decoupling_caps_go_beside_the_power_pins() {+    let (_, b) = board();+    let plan = place_tools::plan_decoupling(&b, &json!({"ic": "U1"})).unwrap();+    assert_eq!(plan["validation"]["ok"], true, "{plan}");+    let rows = plan["placements"].as_array().unwrap();+    assert_eq!(rows.len(), 2);+    let c1 = rows.iter().find(|r| r["ref"] == "C1").unwrap();+    let c2 = rows.iter().find(|r| r["ref"] == "C2").unwrap();+    assert_eq!((c1["pin"].as_str(), c1["side"].as_str()), (Some("U1.1"), Some("left")));+    assert_eq!((c2["pin"].as_str(), c2["side"].as_str()), (Some("U1.5"), Some("bottom")));+    assert!(c1["padToPinMm"].as_f64().unwrap() < 2.0 && c2["padToPinMm"].as_f64().unwrap() < 2.0, "{plan}");+    // the power pad faces the IC: C1 at 180 puts pad 1 (+3V3) on its right, toward U1+    assert_eq!(c1["rotation"], 180.0);+    // moveArgs is a kicad_move_footprint batch the move planner accepts+    let mv = placement::plan_moves(&b, &plan["moveArgs"]).unwrap();+    assert_eq!(mv.moves.len(), 2);+    let after = place_tools::score(&b, &json!({}));+    let moved = {+        let mut t = std::fs::read_to_string(dir().join("route-fixture.kicad_pcb")).unwrap();+        for m in &mv.moves {+            t = t.replace(&format!("(at {} {})", pcb::num(m.before.x), pcb::num(m.before.y)), &format!("(at {} {} {})", pcb::num(m.after.x), pcb::num(m.after.y), pcb::num(m.after.rotation)));+        }+        pcb::parse_pcb_text(&t, "m").unwrap()+    };+    let better = place_tools::score(&moved, &json!({}));+    assert!(better["score"].as_f64() > after["score"].as_f64(), "placing the caps raises the score: {} -> {}", after["score"], better["score"]);+    assert_eq!(place_tools::plan_decoupling(&b, &json!({"ic": "R1"})).unwrap_err().code, "no_caps");+}++fn route_net_accepts(b: &pcb::Board, calls: &[Value]) {+    for c in calls {+        pcb::plan(b, c).unwrap_or_else(|e| panic!("kicad_route_net would refuse {c}: {} {}", e.code, e.message));+    }+}++#[test]+fn a_bga_fanout_plan_is_route_net_ready() {+    let (_, b) = board();+    let f = place_tools::plan_fanout(&b, &json!({"ref": "U2"})).unwrap();+    assert_eq!(f["package"], "bga");+    assert_eq!(f["pitchMm"], 0.8);+    assert_eq!(f["style"], "dogbone");+    assert_eq!(f["escapeLayer"], "B.Cu", "a two-layer board escapes to the back");+    let rows = f["pads"].as_array().unwrap();+    assert_eq!(rows.iter().filter(|r| r["style"] == "surface").count(), 12, "the outer ring escapes on top");+    assert_eq!(rows.iter().filter(|r| r["style"] == "dogbone").count(), 4);+    let b2 = rows.iter().find(|r| r["pad"] == "U2.B2").unwrap();+    assert_eq!(b2["via"]["at"], json!([41.2, 19.2]), "away from the centre, on the diagonal");+    assert!(f["minViaToPadMm"].as_f64().unwrap() >= 0.1, "{f}");+    route_net_accepts(&b, f["calls"].as_array().unwrap());+    let vip = place_tools::plan_fanout(&b, &json!({"ref": "U2", "style": "via-in-pad"})).unwrap();+    route_net_accepts(&b, vip["calls"].as_array().unwrap());+    let tight = place_tools::plan_fanout(&b, &json!({"ref": "U2", "viaSize": 0.6, "viaDrill": 0.3})).unwrap();+    assert_eq!(tight["style"], "via-in-pad", "a 0.6 mm via does not fit between 0.8 mm balls");+}++#[test]+fn a_qfn_fanout_plan_stubs_out_and_stitches_the_exposed_pad() {+    let (_, b) = board();+    let f = place_tools::plan_fanout(&b, &json!({"ref": "U1"})).unwrap();+    assert_eq!(f["package"], "perimeter");+    assert_eq!(f["pitchMm"], 0.65);+    let rows = f["pads"].as_array().unwrap();+    let ep = rows.iter().find(|r| r["pad"] == "U1.17").unwrap();+    assert_eq!(ep["style"], "thermal-via-grid");+    assert_eq!(ep["vias"].as_array().unwrap().len(), 9, "a 3 x 3 grid at 1 mm in the 2.6 mm pad");+    let p3 = rows.iter().find(|r| r["pad"] == "U1.3").unwrap();+    assert_eq!(p3["edge"], "left");+    assert!(p3["stubEnd"][0].as_f64().unwrap() < 18.05 - 0.4);+    let p6 = rows.iter().find(|r| r["pad"] == "U1.6").unwrap();+    assert_eq!(p6["style"], "skip", "a pad with no net is not fanned out");+    route_net_accepts(&b, f["calls"].as_array().unwrap());+    assert_eq!(place_tools::plan_fanout(&b, &json!({"ref": "C1"})).unwrap_err().code, "not_a_package");+}++// ---------------------------------------------------------------------------+// kicad_update_pcb_from_schematic+// ---------------------------------------------------------------------------++fn fixture_netlist() -> netlist::Netlist {+    netlist::parse_kicadxml(&std::fs::read_to_string(dir().join("route-fixture.net")).unwrap()).unwrap()+}++#[test]+fn the_netlist_carries_symbol_uuids() {+    let nl = fixture_netlist();+    let r2 = nl.component("R2").unwrap();+    assert_eq!(pcb_sync::symbol_path(r2).as_deref(), Some("/10000000-0000-4000-8000-000000000007"));+}++#[test]+fn the_plan_lists_every_difference() {+    let (text, b) = board();+    let d = pcb_sync::compare(&b, &text, &fixture_netlist());+    assert_eq!(d["missingFootprints"], json!([{"ref": "R2", "value": "4k7", "footprint": "Fixture:R_0603_1608Metric"}]));+    assert_eq!(d["extraFootprints"][0]["ref"], "MH1");+    assert_eq!(d["changedValues"], json!([{"ref": "C2", "from": "100n", "to": "1u"}]));+    assert_eq!(d["changedFootprints"][0]["ref"], "J1");+    assert_eq!(d["padNetChanges"], json!([{"pad": "R1.2", "from": "SIG_B", "to": "SIG_C"}]));+    assert_eq!(d["relinks"], json!([]));+    assert_eq!(d["inSync"], false);+}++#[test]+fn apply_on_the_closed_file_brings_the_board_in_sync() {+    let d = scratch("sync");+    let path = d.join("route-fixture.kicad_pcb");+    let text = std::fs::read_to_string(&path).unwrap();+    let b = pcb::parse_pcb_text(&text, &path.to_string_lossy()).unwrap();+    let nl = fixture_netlist();+    let ctx = LibCtx::default();+    let module = |id: &str| pcb_sync::resolve_footprint(id, &d, &ctx).and_then(|p| std::fs::read_to_string(p).map_err(|e| e.to_string()));+    let (out, done) = pcb_sync::apply(&text, &b, &nl, &pcb_sync::ApplyOpts { delete_extra: false, update_footprints: true }, &module).unwrap();+    assert_eq!(done["footprintsAdded"][0]["ref"], "R2", "{done}");+    assert_eq!(done["footprintsReplaced"][0]["to"], "Fixture:PinHeader_1x04_P2.00mm_Vertical");+    assert_eq!(done["valuesUpdated"][0]["ref"], "C2");+    assert_eq!(done["extrasMarked"], json!(["MH1"]));+    assert_eq!(done["notApplied"], json!([]));+    pcb::write_board(&path, &out, true, Some(&text)).unwrap();+    let after = pcb::parse_pcb(&path).unwrap();+    let again = pcb_sync::compare(&after, &out, &nl);+    assert_eq!(again["changeCount"], 1, "only the marked extra is left: {again}");+    assert_eq!(again["extraFootprints"][0]["ref"], "MH1");+    let r2 = after.footprints.iter().find(|f| f.reference == "R2").unwrap();+    assert_eq!(r2.value, "4k7");+    assert_eq!(r2.path.as_deref(), Some("/10000000-0000-4000-8000-000000000007"));+    let pos = r2.position.as_ref().unwrap();+    assert!(pos.y > 40.0, "new parts land in a row below the board: {pos:?}");+    assert_eq!(r2.pads.iter().map(|p| p.net_name.clone().unwrap_or_default()).collect::<Vec<_>>(), vec!["+3V3", "SIG_B"]);+    let j1 = after.footprints.iter().find(|f| f.reference == "J1").unwrap();+    assert_eq!(j1.position.as_ref().map(|p| (p.x, p.y)), Some((30.0, 26.0)), "a replaced footprint keeps its place");+    assert_eq!(j1.pads[2].net_name.as_deref(), Some("USB_D-"));+    assert!(out.contains(pcb_sync::EXTRA_MARK));+    // ids stay unique+    let ids: Vec<&str> = out.match_indices("(uuid \"").map(|(i, _)| &out[i + 7..i + 43]).collect();+    let mut sorted = ids.clone();+    sorted.sort();+    sorted.dedup();+    assert_eq!(sorted.len(), ids.len(), "duplicate uuids");+    // deleteExtra removes it+    let (out2, done2) = pcb_sync::apply(&out, &after, &nl, &pcb_sync::ApplyOpts { delete_extra: true, update_footprints: true }, &module).unwrap();+    assert_eq!(done2["extrasDeleted"], json!(["MH1"]));+    let after2 = pcb::parse_pcb_text(&out2, "x").unwrap();+    assert_eq!(pcb_sync::compare(&after2, &out2, &nl)["inSync"], true);+    let _ = std::fs::remove_dir_all(&d);+}
rust/crates/kicad-core/tests/sch_edit.rsadded+477
@@ -0,0 +1,477 @@+//! The newer schematic edits (`kicad_core::sch_edit`) on a KiCad 10 fixture+//! (`fixtures/sch-edit/edit10.kicad_sch`, version 20260306, built from the KiCad 10 stock+//! Device, Amplifier_Operational and power libraries and loaded by KiCad 10.0.2's ERC):+//! pin geometry for rotated and multi-unit parts, the junction rule, wire delete and split,+//! multi-unit move with wire stretch, rotate, region move, annotate across sheets, symbol+//! replace and library refresh, field reset, labels, text, buses. Every edited text must+//! parse again. When `service-kicad` is on PATH, KiCad 10 itself checks an edited sheet.++use std::collections::BTreeSet;+use std::path::{Path, PathBuf};+use std::process::Command;++use kicad_core::sch_edit::*;+use kicad_core::schematic::*;++fn fixture_dir() -> PathBuf {+    Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/sch-edit")+}++fn fixture() -> String {+    std::fs::read_to_string(fixture_dir().join("edit10.kicad_sch")).expect("edit10.kicad_sch readable")+}++fn sch() -> Schematic {+    Schematic::parse(&fixture()).unwrap()+}++fn minilib(name: &str) -> Node {+    load_lib_symbol(&fixture_dir().join("MiniLib.kicad_sym"), name).unwrap().block+}++fn reparse(s: &Schematic) -> Schematic {+    let text = s.to_text();+    let again = Schematic::parse(&text).expect("edited text parses again");+    assert_eq!(again.to_text(), text, "and writes back byte identical");+    again+}++fn pin(s: &Schematic, spec: &str) -> PinInfo {+    s.find_pin(spec).unwrap_or_else(|e| panic!("{spec}: {e}"))+}++fn temp_dir(tag: &str) -> PathBuf {+    let d = std::env::temp_dir().join(format!("kicad-core-schedit-{tag}-{}-{}", std::process::id(), new_uuid()));+    std::fs::create_dir_all(&d).unwrap();+    d+}++#[test]+fn fixture_is_kicad_10_and_round_trips() {+    let text = fixture();+    let s = Schematic::parse(&text).unwrap();+    assert_eq!(s.version().as_deref(), Some("20260306"));+    assert_eq!(s.to_text(), text);+}++#[test]+fn components_list_units_and_fields() {+    let s = sch();+    let all = s.components(None);+    let refs: Vec<String> = all.iter().map(|c| c["reference"].as_str().unwrap().to_string()).collect();+    // R? twice (two separate parts), U? once (two units of one unannotated part would still be+    // two entries: each X? instance is its own part until annotated)+    assert_eq!(refs.iter().filter(|r| *r == "R?").count(), 2);+    let u1 = all.iter().find(|c| c["reference"] == "U1").unwrap();+    assert_eq!(u1["libId"], "Amplifier_Operational:LM358");+    assert_eq!(u1["unitCount"], 3);+    let units: Vec<u64> = u1["units"].as_array().unwrap().iter().map(|u| u["unit"].as_u64().unwrap()).collect();+    assert_eq!(units, vec![1, 2, 3]);+    assert!(u1["fields"].as_array().unwrap().iter().any(|f| f["name"] == "Value" && f["value"] == "LM358"));+    let only = s.components(Some(&["R2".to_string()]));+    assert_eq!(only.len(), 1);+    assert_eq!(only[0]["units"][0]["rotation"], 90.0);+}++#[test]+fn pins_follow_rotation_and_units() {+    let s = sch();+    let r1 = s.pins_of("R1").unwrap();+    assert_eq!(r1.iter().map(|p| (p.number.as_str(), p.at)).collect::<Vec<_>>(), vec![("1", (100.33, 46.99)), ("2", (100.33, 54.61))]);+    assert_eq!(dir_name(r1[0].out), "up");+    assert_eq!(dir_name(r1[1].out), "down");+    // R2 is turned 90: pin 1 on the left, where KiCad's ERC accepts the no-connect flag+    let p = pin(&s, "R2.1");+    assert_eq!(p.at, (127.0, 50.8));+    assert_eq!(dir_name(p.out), "left");+    let u1 = s.pins_of("U1").unwrap();+    assert_eq!(u1.len(), 8, "three units: 1,2,3 + 5,6,7 + 4,8");+    assert_eq!(pin(&s, "U1.1").at, (160.02, 81.28));+    assert_eq!(pin(&s, "U1.1").etype, "output");+    assert_eq!(pin(&s, "U1.6").at, (144.78, 111.76));+    assert_eq!(pin(&s, "U1.4").at, (180.34, 102.87));+    assert_eq!(pin(&s, "U1.V+").number, "8");+    assert!(s.find_pin("U1.99").is_err());+    assert!(s.find_pin("U1").is_err());+}++#[test]+fn net_walk_and_touching() {+    let s = sch();+    let all = s.all_pins();+    let (nets, others) = s.net_at(pin(&s, "R1.2").at, &all);+    assert_eq!(nets, vec!["VOUT".to_string()]);+    assert!(others.contains(&"R1.2".to_string()));+    let (nets, others) = s.net_at(pin(&s, "C1.2").at, &all);+    assert_eq!(nets, vec!["GND".to_string()], "the power symbol names the net");+    assert!(others.contains(&"#PWR01.1".to_string()));+    let t = s.touching(pin(&s, "R2.1").at);+    assert_eq!(t["noConnect"], true);+    let t = s.touching(pin(&s, "R1.2").at);+    assert_eq!(t["wires"].as_array().unwrap().len(), 1);+}++#[test]+fn items_lists_every_kind() {+    let s = sch();+    let v = s.items(None);+    assert_eq!(v["wires"].as_array().unwrap().len(), 4);+    assert_eq!(v["buses"].as_array().unwrap().len(), 1);+    assert_eq!(v["junctions"].as_array().unwrap().len(), 1);+    assert_eq!(v["noConnects"].as_array().unwrap().len(), 1);+    assert_eq!(v["texts"][0]["text"], "edit fixture");+    assert_eq!(v["powerSymbols"][0]["net"], "GND");+    let kinds: BTreeSet<String> = v["labels"].as_array().unwrap().iter().map(|l| l["kind"].as_str().unwrap().to_string()).collect();+    assert_eq!(kinds, ["global_label", "label"].iter().map(|s| s.to_string()).collect());+    let only = s.items(Some(&["wires".to_string()]));+    assert_eq!(only.as_object().unwrap().len(), 1);+}++#[test]+fn junction_rule_and_auto_junctions() {+    let mut s = sch();+    assert!(s.junction_needed((110.49, 60.96)), "a T needs a dot");+    assert!(!s.junction_needed((100.33, 60.96)), "a corner does not");+    assert!(!s.junction_needed(pin(&s, "R1.2").at), "a pin with one wire does not");+    // A branch off the middle of the VOUT wire gets a dot; its free end does not.+    let (w, j) = s.add_wire_auto(&[(115.57, 60.96), (115.57, 66.04)]).unwrap();+    assert_eq!(w.len(), 1);+    assert_eq!(j.len(), 1);+    assert_eq!(j[0].1, (115.57, 60.96));+    // A wire running through an existing wire end gets a dot there.+    let (_, j) = s.add_wire_auto(&[(110.49, 76.2), (120.65, 76.2)]).unwrap();+    assert!(j.is_empty());+    let (_, j) = s.add_wire_auto(&[(115.57, 66.04), (115.57, 76.2)]).unwrap();+    assert_eq!(j.iter().map(|x| x.1).collect::<Vec<_>>(), vec![(115.57, 76.2)], "an end on another wire's interior");+    // Adding a dot by hand where one is.+    assert!(s.junction_at((115.57, 60.96)).is_some());+    let txt = s.to_text();+    assert!(txt.contains("\t(junction\n\t\t(at 115.57 60.96)\n\t\t(diameter 0)\n\t\t(color 0 0 0 0)\n\t\t(uuid \""));+    reparse(&s);+}++#[test]+fn delete_wire_prunes_and_split_wire_cuts() {+    let mut s = sch();+    let branch = s.wires_between((110.49, 60.96), (110.49, 71.12));+    assert_eq!(branch.len(), 1);+    let (gone, pruned) = s.delete_wires(&branch).unwrap();+    assert_eq!(gone[0].a, (110.49, 60.96));+    assert_eq!(pruned.len(), 1, "the T dot joins nothing now");+    assert!(s.junction_at((110.49, 60.96)).is_none());+    assert!(s.delete_wires(&["nope".to_string()]).is_err());++    let before = s.wires().len();+    let (a, b, j) = s.split_wire((105.41, 60.96), None, true).unwrap();+    assert_ne!(a, b);+    assert!(j.is_some());+    assert_eq!(s.wires().len(), before + 1);+    let w = s.wires();+    let wa = w.iter().find(|x| x.uuid == a).unwrap();+    let wb = w.iter().find(|x| x.uuid == b).unwrap();+    assert_eq!((wa.a, wa.b), ((100.33, 60.96), (105.41, 60.96)));+    assert_eq!((wb.a, wb.b), ((105.41, 60.96), (120.65, 60.96)));+    assert_eq!(s.split_wire((100.33, 60.96), None, true).unwrap_err().code, "not_on_wire");+    // the net still reaches the label across the cut+    let all = s.all_pins();+    assert_eq!(s.net_at(pin(&s, "R1.2").at, &all).0, vec!["VOUT".to_string()]);+    reparse(&s);+}++#[test]+fn move_every_unit_and_stretch_wires() {+    let mut s = sch();+    let (uuids, _) = s.move_units("U1", (2.54, 0.0), false).unwrap();+    assert_eq!(uuids.len(), 3);+    assert_eq!(pin(&s, "U1.1").at, (162.56, 81.28));+    assert_eq!(pin(&s, "U1.4").at, (182.88, 102.87));+    let u1 = s.components(Some(&["U1".to_string()]));+    let ref_field = u1[0]["fields"].as_array().unwrap().iter().find(|f| f["name"] == "Reference").unwrap().clone();+    assert!(ref_field["at"][0].as_f64().unwrap() > 152.4 + 2.0, "fields move with the anchor");++    // R1 down its own axis: the vertical wire end just follows+    let (_, st) = s.move_units("R1", (0.0, -2.54), true).unwrap();+    assert_eq!(st.wires_moved.len(), 1);+    assert!(st.wires_added.is_empty());+    assert_eq!(s.touching(pin(&s, "R1.2").at)["wires"].as_array().unwrap().len(), 1);+    // R1 sideways: the vertical wire stays vertical and a horizontal dogleg joins the pin+    let (_, st) = s.move_units("R1", (5.08, 0.0), true).unwrap();+    assert_eq!(st.wires_added.len(), 1);+    let p2 = pin(&s, "R1.2").at;+    assert_eq!(p2, (105.41, 52.07));+    for w in s.wires() {+        assert!((w.a.0 - w.b.0).abs() < 1e-6 || (w.a.1 - w.b.1).abs() < 1e-6, "every wire stays horizontal or vertical: {w:?}");+    }+    let all = s.all_pins();+    assert_eq!(s.net_at(p2, &all).0, vec!["VOUT".to_string()], "still on its net");++    // The no-connect on R2.1 travels with the pin+    let (_, st) = s.move_units("R2", (0.0, 2.54), true).unwrap();+    assert_eq!(st.flags_moved.len(), 1);+    assert_eq!(s.touching(pin(&s, "R2.1").at)["noConnect"], true);+    assert!(s.move_units("R99", (1.0, 1.0), false).is_err());+    reparse(&s);+}++#[test]+fn rotate_turns_units_and_fields() {+    let mut s = sch();+    let (old, new, uuids) = s.rotate_units("R2", 0.0).unwrap();+    assert_eq!((old, new, uuids.len()), (90.0, 0.0, 1));+    assert_eq!(pin(&s, "R2.1").at, (130.81, 46.99), "pin 1 back on top");+    let (_, _, u) = s.rotate_units("U1", 180.0).unwrap();+    assert_eq!(u.len(), 3);+    assert_eq!(pin(&s, "U1.1").at, (144.78, 81.28), "the output now on the left");+    assert_eq!(pin(&s, "U1.4").at, (185.42, 87.63), "unit 3 turned about its own anchor");+    assert!(s.rotate_units("R2", 45.0).is_err());+    // fields turn about the anchor: a field 2.54 right of R1 ends up 2.54 above after 90+    let before = s.components(Some(&["R1".to_string()]));+    let f = |c: &Vec<serde_json::Value>, n: &str| -> (f64, f64) {+        let f = c[0]["fields"].as_array().unwrap().iter().find(|f| f["name"] == n).unwrap().clone();+        (f["at"][0].as_f64().unwrap(), f["at"][1].as_f64().unwrap())+    };+    let (vx, vy) = f(&before, "Value");+    s.rotate_units("R1", 90.0).unwrap();+    let after = s.components(Some(&["R1".to_string()]));+    let (ax, ay) = f(&after, "Value");+    let (dx, dy) = (vx - 100.33, vy - 50.8);+    assert!(((ax - 100.33) - dy).abs() < 1e-3 && ((ay - 50.8) + dx).abs() < 1e-3, "({vx},{vy}) -> ({ax},{ay})");+    // mirrored: the stored angle runs the other way+    let txt = s.to_text().replacen("(lib_id \"Device:C\")\n\t\t(at 100.33 81.28 0)", "(lib_id \"Device:C\")\n\t\t(at 100.33 81.28 0)\n\t\t(mirror x)", 1);+    let mut m = Schematic::parse(&txt).unwrap();+    m.rotate_units("C1", 90.0).unwrap();+    assert!(m.to_text().contains("(lib_id \"Device:C\")\n\t\t(at 100.33 81.28 90)\n\t\t(mirror x)"));+    reparse(&s);+}++#[test]+fn region_move_takes_what_is_inside() {+    let mut s = sch();+    let moved = s.move_region([45.0, 95.0, 70.0, 130.0], (0.0, -12.7), true, true, true);+    assert_eq!(moved["symbols"].as_array().unwrap().len(), 3, "two R? and the C?");+    assert!(moved.get("wires").is_none());+    let moved = s.move_region([95.0, 55.0, 125.0, 75.0], (0.0, 2.54), true, true, true);+    assert!(moved["wires"].as_array().unwrap().len() >= 2);+    assert_eq!(moved["junctions"].as_array().unwrap().len(), 1);+    assert_eq!(moved["labels"].as_array().unwrap().len(), 2);+    // the wire from R1.2 stretched: its pin end stayed, its other end moved+    assert!(s.touching(pin(&s, "R1.2").at)["wires"].as_array().unwrap().len() == 1);+    reparse(&s);+}++#[test]+fn annotate_numbers_question_marks_like_eeschema() {+    let s = sch();+    let used = s.references_used();+    let plan = s.annotate_plan(&used, false);+    let got: Vec<(String, String, u32)> = plan.iter().map(|p| (p.from.clone(), p.to.clone(), p.unit)).collect();+    assert_eq!(+        got,+        vec![+            ("R?".into(), "R3".into(), 1), // x 50.8 first+            ("C?".into(), "C2".into(), 1),+            ("R?".into(), "R4".into(), 1),+            ("U?".into(), "U2".into(), 1),+            ("U?".into(), "U2".into(), 2), // the second unit packs into the same part+        ]+    );+    // numbers used on other sheets are skipped+    let mut more = used.clone();+    more.insert("R3".into());+    more.insert("U2".into());+    let plan = s.annotate_plan(&more, false);+    assert_eq!(plan[0].to, "R4");+    assert_eq!(plan[3].to, "U3");+    // by y: the C? (y 127) comes after both R? (y 101.6)+    let plan = s.annotate_plan(&used, true);+    assert_eq!(plan.iter().map(|p| p.to.as_str()).collect::<Vec<_>>(), vec!["R3", "R4", "C2", "U2", "U2"]);+    // apply+    let mut s = s;+    for p in &plan {+        s.set_unit_reference(&p.uuid, &p.to).unwrap();+    }+    let again = reparse(&s);+    assert!(again.components(None).iter().all(|c| !c["reference"].as_str().unwrap().ends_with('?')));+    assert!(again.to_text().contains("(reference \"U2\")"));+    assert_eq!(again.unit_indices("U2").len(), 2);+}++#[test]+fn project_sheets_follow_the_hierarchy() {+    let dir = temp_dir("sheets");+    let root = dir.join("proj.kicad_sch");+    let sub = dir.join("sub.kicad_sch");+    std::fs::write(dir.join("proj.kicad_pro"), "{}").unwrap();+    let sheet = "\t(sheet\n\t\t(at 50 50)\n\t\t(size 20 20)\n\t\t(uuid \"aaaaaaaa-0000-4000-8000-000000000001\")\n\t\t(property \"Sheetname\" \"sub\"\n\t\t\t(at 50 49 0)\n\t\t)\n\t\t(property \"Sheetfile\" \"sub.kicad_sch\"\n\t\t\t(at 50 71 0)\n\t\t)\n\t)\n";+    let mut t = fixture();+    t.insert_str(t.find("\t(sheet_instances").unwrap(), sheet);+    std::fs::write(&root, &t).unwrap();+    // the sub-sheet already uses R3+    let subtext = fixture().replace("\"R1\"", "\"R3\"");+    std::fs::write(&sub, subtext).unwrap();+    let sheets = project_sheets(&sub);+    assert_eq!(sheets.len(), 2, "{sheets:?}");+    let s = Schematic::load(&root).unwrap();+    let mut used = s.references_used();+    used.extend(Schematic::load(&sub).unwrap().references_used());+    assert_eq!(s.annotate_plan(&used, false)[0].to, "R4");+    let items = s.items(Some(&["sheets".to_string()]));+    assert_eq!(items["sheets"][0]["file"], "sub.kicad_sch");+    let _ = std::fs::remove_dir_all(&dir);+}++#[test]+fn replace_symbol_keeps_place_and_guards_pins() {+    let mut s = sch();+    let small = minilib("R_Small");+    let r = s.replace_symbol("R1", "Device:R_Small", Some(&small), false).unwrap();+    assert_eq!(r.old_lib_id, "Device:R");+    assert!(r.lib_symbol_added);+    assert!(r.pins_removed.is_empty());+    assert!(!r.old_entry_pruned, "R2 still uses Device:R");+    let c = s.components(Some(&["R1".to_string()]));+    assert_eq!(c[0]["libId"], "Device:R_Small");+    assert_eq!(c[0]["value"], "10k");+    assert_eq!(c[0]["units"][0]["at"], serde_json::json!([100.33, 50.8]));+    // R_Small's pins are 2.54 from the anchor, so pin 2 moved off the wire+    assert_eq!(pin(&s, "R1.2").at, (100.33, 53.34));++    // A one-pin symbol would lose pin 2 of C1+    let one = parse_node("(symbol \"One\" (property \"Reference\" \"TP\" (at 0 0 0) (effects (font (size 1.27 1.27)))) (property \"Value\" \"One\" (at 0 0 0) (effects (font (size 1.27 1.27)))) (symbol \"One_1_1\" (pin passive line (at 0 0 90) (length 0) (name \"1\" (effects (font (size 1.27 1.27)))) (number \"1\" (effects (font (size 1.27 1.27)))))))").unwrap();+    let e = s.replace_symbol("C1", "Test:One", Some(&one), false).unwrap_err();+    assert_eq!(e.code, "pins_lost");+    assert!(!s.has_lib_symbol("Test:One"), "a refusal changes nothing");+    let r = s.replace_symbol("C1", "Test:One", Some(&one), true).unwrap();+    assert_eq!(r.pins_removed, vec!["2".to_string()]);+    assert!(!r.old_entry_pruned, "C? still uses Device:C");+    assert!(s.has_lib_symbol("Device:C"));+    let r = s.replace_symbol("C?", "Test:One", None, true).unwrap();+    assert!(r.old_entry_pruned, "now nothing uses Device:C");+    assert!(!s.has_lib_symbol("Device:C"));+    // a three-unit part cannot become a one-unit resistor+    assert_eq!(s.replace_symbol("U1", "Device:R", None, false).unwrap_err().code, "unit_missing");+    reparse(&s);+}++#[test]+fn update_from_library_detects_changes() {+    let mut s = sch();+    // the fixture was built from these very libraries: nothing to do+    assert!(s.update_lib_symbol("Device:R", &minilib("R"), false).unwrap().is_none());+    let lm = minilib("LM358");+    assert!(s.update_lib_symbol("Amplifier_Operational:LM358", &lm, false).unwrap().is_none(), "flattened extends compares equal");+    // a changed description is an update+    let mut changed = minilib("R");+    let text = changed.to_text().replace("\"Resistor\"", "\"Resistor, updated\"");+    changed = parse_node(&text).unwrap();+    let sync = s.update_lib_symbol("Device:R", &changed, false).unwrap().unwrap();+    assert!(sync.added.is_empty() && sync.removed.is_empty());+    assert!(s.to_text().contains("\"Resistor, updated\""));+    // a library version that drops pin 2 is refused unless forced+    let one = parse_node(&minilib("R").to_text().replacen("(number \"2\"", "(number \"9\"", 1)).unwrap();+    assert_eq!(s.update_lib_symbol("Device:R", &one, false).unwrap_err().code, "pins_lost");+    let sync = s.update_lib_symbol("Device:R", &one, true).unwrap().unwrap();+    assert_eq!(sync.removed, vec!["2".to_string()]);+    assert_eq!(sync.added, vec!["9".to_string()]);+    assert_eq!(s.lib_symbol_keys().len(), 4);+    reparse(&s);+}++#[test]+fn reset_fields_uses_library_offsets() {+    let mut s = sch();+    let done = s.reset_fields("R2", &["Reference".to_string(), "Value".to_string()]).unwrap();+    assert_eq!(done, vec!["1:Reference".to_string(), "1:Value".to_string()]);+    let c = s.components(Some(&["R2".to_string()]));+    let r = c[0]["fields"].as_array().unwrap().iter().find(|f| f["name"] == "Reference").unwrap().clone();+    // Device:R puts Reference at (2.032, 0) angle 90; R2 is turned 90, so it lands 2.032 above+    assert_eq!(r["at"], serde_json::json!([130.81, 48.768]));+    assert_eq!(r["angle"], 90.0);+    let done = s.reset_fields("U1", &["Reference".to_string()]).unwrap();+    assert_eq!(done.len(), 3);+    reparse(&s);+}++#[test]+fn labels_rotate_with_justify() {+    let mut s = sch();+    let idx = s.label_indices(None, Some("VOUT"), Some((120.65, 60.96)));+    assert_eq!(idx.len(), 1);+    s.set_label_rotation(idx[0], 180.0).unwrap();+    let txt = s.to_text();+    assert!(txt.contains("(label \"VOUT\"\n\t\t(at 120.65 60.96 180)\n\t\t(effects\n\t\t\t(font\n\t\t\t\t(size 1.27 1.27)\n\t\t\t)\n\t\t\t(justify right bottom)\n\t\t)"), "{txt}");+    let g = s.label_indices(None, Some("SDA"), None);+    s.set_label_rotation(g[0], 270.0).unwrap();+    assert!(s.to_text().contains("(at 63.5 60.96 270)\n\t\t(fields_autoplaced yes)\n\t\t(effects\n\t\t\t(font\n\t\t\t\t(size 1.27 1.27)\n\t\t\t)\n\t\t\t(justify right)\n\t\t)"));+    assert_eq!(s.label_indices(None, Some("VOUT"), None).len(), 2);+    assert!(s.set_label_rotation(idx[0], 10.0).is_err());+    reparse(&s);+}++#[test]+fn text_bus_and_entries() {+    let mut s = sch();+    let u = s.add_text("Hello\nworld", (25.4, 25.4), 0.0, 2.54, &["left".into(), "bottom".into()], true, false).unwrap();+    let txt = s.to_text();+    assert!(txt.contains(&format!("\t(text \"Hello\\nworld\"\n\t\t(exclude_from_sim no)\n\t\t(at 25.4 25.4 0)\n\t\t(effects\n\t\t\t(font\n\t\t\t\t(size 2.54 2.54)\n\t\t\t\t(bold yes)\n\t\t\t)\n\t\t\t(justify left bottom)\n\t\t)\n\t\t(uuid \"{u}\")\n\t)")), "{txt}");+    assert!(s.add_text("x", (0.0, 0.0), 0.0, 1.27, &["middle".into()], false, false).is_err());+    let b = s.add_segments("bus", &[(220.98, 50.8), (220.98, 76.2)]).unwrap();+    assert_eq!(b.len(), 1);+    let e = s.add_bus_entry((218.44, 63.5), (2.54, -2.54)).unwrap();+    assert!(s.to_text().contains(&format!("\t(bus_entry\n\t\t(at 218.44 63.5)\n\t\t(size 2.54 -2.54)\n\t\t(stroke\n\t\t\t(width 0)\n\t\t\t(type default)\n\t\t)\n\t\t(uuid \"{e}\")\n\t)")));+    assert!(s.add_bus_entry((0.0, 0.0), (0.0, 2.54)).is_err());+    let items = s.items(Some(&["busEntries".to_string(), "buses".to_string()]));+    assert_eq!(items["busEntries"][0]["to"], serde_json::json!([220.98, 60.96]));+    assert_eq!(items["buses"].as_array().unwrap().len(), 2);+    reparse(&s);+}++fn service_kicad() -> Option<PathBuf> {+    let path = std::env::var_os("PATH")?;+    std::env::split_paths(&path).map(|d| d.join("service-kicad")).find(|p| p.is_file())+}++/// KiCad 10 loads a sheet edited by every operation above, and the pins wired by the+/// edits are no longer reported unconnected.+#[test]+fn service_kicad_erc_accepts_an_edited_kicad_10_sheet() {+    let Some(svc) = service_kicad() else {+        eprintln!("service-kicad not on PATH; skipping the live ERC test");+        return;+    };+    let dir = temp_dir("erc");+    let path = dir.join("edit10.kicad_sch");+    let mut s = sch();+    // wire U1.1 (out, right) to R2.2 with an L, flag U1.2/U1.3, stub U1.8 to a label+    let a = pin(&s, "U1.1");+    let b = pin(&s, "R2.2");+    s.add_wire_auto(&l_route(a.at, a.out, b.at, None)).unwrap();+    for p in ["U1.2", "U1.3"] {+        let at = pin(&s, p).at;+        s.add_no_connect(at).unwrap();+    }+    let p8 = pin(&s, "U1.8");+    let end = (p8.at.0 + p8.out.0 * 2.54, p8.at.1 + p8.out.1 * 2.54);+    s.add_wire_auto(&[p8.at, end]).unwrap();+    s.add_label("VCC", LabelKind::Local, end, label_rotation_for(p8.out), None).unwrap();+    s.move_units("C1", (0.0, 2.54), true).unwrap();+    s.rotate_units("R?", 90.0).ok();+    s.add_text("checked by KiCad 10", (50.8, 25.4), 0.0, 1.27, &[], false, false).unwrap();+    let plan = s.annotate_plan(&s.references_used(), false);+    for p in &plan {+        s.set_unit_reference(&p.uuid, &p.to).unwrap();+    }+    std::fs::write(&path, s.to_text()).unwrap();+    let report = dir.join("erc.json");+    let out = Command::new(&svc).args(["sch", "erc"]).arg(&path).args(["--format", "json", "--out"]).arg(&report).output().expect("service-kicad runs");+    assert!(report.is_file(), "service-kicad sch erc wrote no report: {}", String::from_utf8_lossy(&out.stderr));+    let rep: serde_json::Value = serde_json::from_str(&std::fs::read_to_string(&report).unwrap()).unwrap();+    assert!(rep["kicad_version"].as_str().unwrap_or("").starts_with("10"), "KiCad 10 checked it: {}", rep["kicad_version"]);+    let flat = kicad_core::cli::flatten_violations(&rep);+    let unconnected: Vec<String> = flat.iter().filter(|v| v["type"] == "pin_not_connected").map(|v| serde_json::to_string(&v["items"]).unwrap()).collect();+    for p in ["U1 Pin 1 ", "U1 Pin 2 ", "U1 Pin 3 ", "U1 Pin 8 ", "R2 Pin 2 ", "C1 Pin 2 "] {+        assert!(!unconnected.iter().any(|u| u.contains(p)), "{p} still unconnected: {unconnected:?}");+    }+    assert!(!serde_json::to_string(&rep).unwrap().contains("Symbol R?"), "annotated");+    let _ = std::fs::remove_dir_all(&dir);+}
rust/crates/kicad-core/tests/sch_hier.rsadded+344
@@ -0,0 +1,344 @@+//! Schematic hierarchy, connectivity, checks and review on the KiCad 10 fixture project in+//! tests/fixtures/sch_hier: hier.kicad_sch (root) with sheets Power and MCU, and Filter nested+//! in Power (2 levels), plus checks.kicad_sch with one of each connectivity defect. The+//! fixtures were written by eeschema-format code and loaded by KiCad 10.0.2 (service-kicad ERC+//! and SVG export) before being committed. When `service-kicad` is on PATH, files these+//! modules write are run through KiCad 10's ERC too.++use std::path::{Path, PathBuf};+use std::process::Command;++use kicad_core::netlist::parse_kicadxml;+use kicad_core::sch_check::{self, CheckOpts};+use kicad_core::sch_hier::{self, Hierarchy, Paper, TitleEdit};+use kicad_core::sch_model::{self, Connectivity, Item};+use kicad_core::sch_review;+use kicad_core::sch_sheets::Workspace;+use kicad_core::schematic::{new_uuid, Schematic};++fn fixtures() -> PathBuf {+    Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/sch_hier")+}++fn copy_project(tag: &str) -> PathBuf {+    let d = std::env::temp_dir().join(format!("kc-schhier-{tag}-{}-{}", std::process::id(), new_uuid()));+    std::fs::create_dir_all(&d).unwrap();+    for e in std::fs::read_dir(fixtures()).unwrap().flatten() {+        std::fs::copy(e.path(), d.join(e.file_name())).unwrap();+    }+    d+}++#[test]+fn fixtures_round_trip_byte_identical() {+    for f in ["hier", "power", "filter", "mcu", "checks"] {+        let p = fixtures().join(format!("{f}.kicad_sch"));+        let text = std::fs::read_to_string(&p).unwrap();+        let s = Schematic::parse(&text).unwrap();+        assert_eq!(s.to_text(), text, "{f} round trip");+        assert_eq!(s.version().unwrap(), sch_hier::SCH_VERSION);+    }+}++#[test]+fn hierarchy_walks_two_levels() {+    let h = Hierarchy::load(&fixtures().join("hier.kicad_sch")).unwrap();+    let human: Vec<&str> = h.instances.iter().map(|i| i.human.as_str()).collect();+    assert_eq!(human, vec!["/", "/Power/", "/Power/Filter/", "/MCU/"]);+    let pages: Vec<&str> = h.instances.iter().map(|i| i.page.as_deref().unwrap_or("")).collect();+    assert_eq!(pages, vec!["1", "2", "3", "4"]);+    assert_eq!(h.docs.len(), 4);+    let filter = &h.instances[2];+    assert_eq!(filter.depth, 2);+    assert_eq!(filter.path.matches('/').count(), 3);+    // the instance path is what the child's symbols carry+    let fs = h.sch(2).unwrap();+    let m = sch_model::extract(fs, Some(&filter.path));+    assert!(m.symbols.iter().any(|s| s.reference == "D1"));+    assert!(h.references().contains("U2"));+    assert_eq!(h.project_name(), "hier");+    assert_eq!(sch_hier::project_root_for(&fixtures().join("mcu.kicad_sch")).unwrap(), fixtures().join("hier.kicad_sch"));+}++#[test]+fn pins_of_rotated_and_mirrored_symbols() {+    let s = Schematic::load(&fixtures().join("checks.kicad_sch")).unwrap();+    let m = sch_model::extract(&s, None);+    // R2 is placed at 90 degrees: its pins run horizontally+    let r2: Vec<(&str, (f64, f64))> = m.pins.iter().filter(|p| p.reference == "R2").map(|p| (p.number.as_str(), p.at)).collect();+    assert_eq!(r2, vec![("1", (72.39, 46.99)), ("2", (80.01, 46.99))]);+    // the regulator's pins carry their electrical types from lib_symbols+    let en = m.pins.iter().find(|p| p.reference == "U1" && p.number == "3").unwrap();+    assert_eq!((en.name.as_str(), en.electrical.as_str()), ("EN", "input"));+    let gnd = m.pins.iter().find(|p| p.reference == "#PWR02").unwrap();+    assert!(gnd.power_symbol);+    assert_eq!(gnd.power_net.as_deref(), Some("GND"));+    let r4 = m.symbols.iter().find(|s| s.reference == "R4").unwrap().bbox.unwrap();+    assert!((r4.1 - 46.99).abs() < 1e-6 && (r4.3 - 54.61).abs() < 1e-6, "{r4:?}");+}++/// Connectivity rules on small hand-written KiCad 10 sheets.+fn sheet(body: &str) -> Schematic {+    let (blank, _) = sch_hier::blank_sheet(&Paper::parse("A4", None, None, false).unwrap(), &TitleEdit::default());+    let text = blank.replacen("\t(sheet_instances", &format!("{body}\t(sheet_instances"), 1);+    Schematic::parse(&text).unwrap()+}++fn wire(a: (f64, f64), b: (f64, f64)) -> String {+    format!("\t(wire\n\t\t(pts\n\t\t\t(xy {} {}) (xy {} {})\n\t\t)\n\t\t(uuid \"{}\")\n\t)\n", a.0, a.1, b.0, b.1, new_uuid())+}++fn label(t: &str, at: (f64, f64)) -> String {+    format!("\t(label \"{t}\"\n\t\t(at {} {} 0)\n\t\t(uuid \"{}\")\n\t)\n", at.0, at.1, new_uuid())+}++fn junction(at: (f64, f64)) -> String {+    format!("\t(junction\n\t\t(at {} {})\n\t\t(diameter 0)\n\t\t(uuid \"{}\")\n\t)\n", at.0, at.1, new_uuid())+}++#[test]+fn connectivity_rules() {+    // a T: a wire end on another wire's interior joins it; a label anywhere on a wire names it+    let s = sheet(&[wire((0.0, 0.0), (20.0, 0.0)), wire((10.0, 0.0), (10.0, 10.0)), label("A", (5.0, 0.0))].concat());+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    assert_eq!(c.of[&Item::Wire(0)], c.of[&Item::Wire(1)]);+    assert_eq!(c.net_name(&m, c.of[&Item::Wire(1)]), "A");+    // a crossing without a junction does not connect; with one it does+    let s = sheet(&[wire((0.0, 0.0), (20.0, 0.0)), wire((10.0, -10.0), (10.0, 10.0))].concat());+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    assert_ne!(c.of[&Item::Wire(0)], c.of[&Item::Wire(1)]);+    let t = sch_check::trace_point(&m, &c, (10.0, 0.0), 0.05);+    assert_eq!(t["crossingWithoutJunction"], true);+    let s = sheet(&[wire((0.0, 0.0), (20.0, 0.0)), wire((10.0, -10.0), (10.0, 10.0)), junction((10.0, 0.0))].concat());+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    assert_eq!(c.of[&Item::Wire(0)], c.of[&Item::Wire(1)]);+    // same-named local labels join two separate wires+    let s = sheet(&[wire((0.0, 0.0), (10.0, 0.0)), wire((0.0, 20.0), (10.0, 20.0)), label("N", (0.0, 0.0)), label("N", (10.0, 20.0))].concat());+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    assert_eq!(c.of[&Item::Wire(0)], c.of[&Item::Wire(1)]);+    assert!(sch_check::dangling_ends(&m).len() == 2, "the far ends dangle");+}++#[test]+fn a_pin_mid_wire_needs_a_junction() {+    // the fixture's R6 and R7 sit mid-wire WITH junctions: both are on NETA+    let s = Schematic::load(&fixtures().join("checks.kicad_sch")).unwrap();+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    let pin = |r: &str, n: &str| m.pins.iter().position(|p| p.reference == r && p.number == n).unwrap();+    assert_eq!(c.of[&Item::Pin(pin("R6", "1"))], c.of[&Item::Pin(pin("R7", "1"))]);+    // drop the junctions: the pins fall off the wire+    let text = std::fs::read_to_string(fixtures().join("checks.kicad_sch")).unwrap();+    let mut s2 = Schematic::parse(&text).unwrap();+    let js: Vec<String> = m.junctions.iter().map(|j| j.uuid.clone()).collect();+    for u in js {+        s2.delete(&u).unwrap();+    }+    let m2 = sch_model::extract(&s2, None);+    let c2 = Connectivity::build(&m2);+    let wire_net = c2.of[&Item::Wire(m2.wires.iter().position(|w| w.a == (50.8, 76.2)).unwrap())];+    assert_ne!(c2.of[&Item::Pin(pin("R6", "1"))], wire_net);+}++#[test]+fn check_on_the_defect_sheet() {+    let s = Schematic::load(&fixtures().join("checks.kicad_sch")).unwrap();+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    let r = sch_check::check(&m, &c, &CheckOpts { overlaps: true });+    let count = |k: &str| r.findings.iter().filter(|f| f.check == k).count();+    assert_eq!(count("dangling_wire_end"), 2);+    assert_eq!(count("floating_label"), 1);+    assert_eq!(count("unconnected_pin"), 1);+    assert_eq!(count("shorted_nets"), 1);+    assert_eq!(count("single_pin_net"), 3);+    assert!(count("overlap") >= 2);+    // the regulator's nets carry power names, so they are judged cross-sheet, not flagged+    assert_eq!(r.cross_sheet_skipped, 3);+    // the power sheet: +3V3 next to the VOUT hierarchical label is a soft "multiple names"+    let s = Schematic::load(&fixtures().join("power.kicad_sch")).unwrap();+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    let r = sch_check::check(&m, &c, &CheckOpts::default());+    let sh: Vec<_> = r.findings.iter().filter(|f| f.check == "shorted_nets").collect();+    assert_eq!(sh.len(), 1);+    assert_eq!(sh[0].severity, "warning");+    assert_eq!(sh[0].nets, vec!["+3V3", "VOUT"]);+}++#[test]+fn two_rails_on_one_wire_are_an_error() {+    let s = sheet(&[+        wire((0.0, 0.0), (20.0, 0.0)),+        "\t(global_label \"+5V\"\n\t\t(shape input)\n\t\t(at 0 0 180)\n\t\t(uuid \"g1\")\n\t)\n".to_string(),+        "\t(global_label \"+3V3\"\n\t\t(shape input)\n\t\t(at 20 0 0)\n\t\t(uuid \"g2\")\n\t)\n".to_string(),+    ]+    .concat());+    let m = sch_model::extract(&s, None);+    let c = Connectivity::build(&m);+    let r = sch_check::check(&m, &c, &CheckOpts::default());+    let f = r.findings.iter().find(|f| f.check == "shorted_nets").unwrap();+    assert_eq!(f.severity, "error");+}++#[test]+fn fix_plan_and_apply_round_trip() {+    let mut s = Schematic::load(&fixtures().join("checks.kicad_sch")).unwrap();+    let m = sch_model::extract(&s, None);+    let (moves, left) = sch_check::plan_fixes(&m, 0.5);+    assert_eq!(moves.len(), 1);+    assert_eq!(left.len(), 1);+    assert!(!moves[0].diagonal);+    assert_eq!(sch_check::apply_moves(&mut s, &moves), 1);+    let s2 = Schematic::parse(&s.to_text()).unwrap();+    let m2 = sch_model::extract(&s2, None);+    assert_eq!(sch_check::dangling_ends(&m2).len(), 1);+    // a tolerance too tight to reach finds nothing+    assert!(sch_check::plan_fixes(&m, 0.2).0.is_empty());+}++#[test]+fn review_from_the_hierarchy() {+    let h = Hierarchy::load(&fixtures().join("hier.kicad_sch")).unwrap();+    let m = sch_review::from_hierarchy(&h);+    assert_eq!(m.sheets, 4);+    // nets join across the hierarchy: the root's VOUT-to-VDD wire, +3V3 and the MCU's VDD are one+    let u2_vdd = m.parts.iter().find(|p| p.reference == "U2").unwrap().pins.iter().find(|p| p.number == "8").unwrap();+    assert_eq!(u2_vdd.net, "+3V3");+    let j2 = m.parts.iter().find(|p| p.reference == "J2").unwrap();+    assert_eq!(j2.pins[0].net, "/MCU/SDA");+    let d1 = m.parts.iter().find(|p| p.reference == "D1").unwrap();+    assert!(d1.pins.iter().any(|p| p.net == "+5V"), "VIN in Filter is +5V through the sheet pin");+    let f = sch_review::review(&m, None);+    let checks: Vec<&str> = f.iter().map(|x| x.check).collect();+    for want in ["decoupling", "i2c_pullups", "reset_enable", "led_resistor", "regulator_caps", "bulk_capacitance"] {+        assert!(checks.contains(&want), "missing {want}: {checks:?}");+    }+    assert!(!checks.contains(&"annotation"));+    let s = sch_review::summary(&m, &f);+    assert_eq!(s["errors"], 1);+}++/// The same checks on kicad-cli's netlist shape (canned kicadxml, as kicad-cli 10 writes it).+#[test]+fn review_from_a_kicad_cli_netlist() {+    let xml = r#"<?xml version="1.0" encoding="UTF-8"?>+<export version="E">+  <components>+    <comp ref="U1"><value>AP2112K-3.3</value><footprint>Package_TO_SOT_SMD:SOT-23-5</footprint><libsource lib="Regulator_Linear" part="AP2112K-3.3" description="LDO"/></comp>+    <comp ref="C1"><value>10u</value><libsource lib="Device" part="C"/></comp>+    <comp ref="C2"><value>10u</value><libsource lib="Device" part="C"/></comp>+    <comp ref="U2"><value>BME280</value><libsource lib="Sensor" part="BME280"/></comp>+    <comp ref="R1"><value>4k7</value><libsource lib="Device" part="R"/></comp>+    <comp ref="R2"><value>4k7</value><libsource lib="Device" part="R"/></comp>+    <comp ref="C3"><value>100n</value><libsource lib="Device" part="C"/></comp>+    <comp ref="D1"><value>RED</value><libsource lib="Device" part="LED"/></comp>+    <comp ref="R3"><value>1k</value><libsource lib="Device" part="R"/></comp>+    <comp ref="R3"><value>1k</value><libsource lib="Device" part="R"/></comp>+  </components>+  <nets>+    <net code="1" name="+5V"><node ref="U1" pin="1" pinfunction="VIN" pintype="power_in"/><node ref="U1" pin="3" pinfunction="EN" pintype="input"/><node ref="C1" pin="1" pintype="passive"/></net>+    <net code="2" name="GND"><node ref="U1" pin="2" pinfunction="GND" pintype="power_in"/><node ref="C1" pin="2" pintype="passive"/><node ref="C2" pin="2" pintype="passive"/><node ref="U2" pin="1" pinfunction="GND" pintype="power_in"/><node ref="C3" pin="2" pintype="passive"/><node ref="D1" pin="1" pinfunction="K" pintype="passive"/></net>+    <net code="3" name="+3V3"><node ref="U1" pin="5" pinfunction="VOUT" pintype="power_out"/><node ref="C2" pin="1" pintype="passive"/><node ref="U2" pin="8" pinfunction="VDD" pintype="power_in"/><node ref="U2" pin="6" pinfunction="VDDIO" pintype="power_in"/><node ref="R1" pin="2" pintype="passive"/><node ref="R2" pin="2" pintype="passive"/><node ref="C3" pin="1" pintype="passive"/></net>+    <net code="4" name="/SDA"><node ref="U2" pin="3" pinfunction="SDI" pintype="bidirectional"/><node ref="R1" pin="1" pintype="passive"/></net>+    <net code="5" name="/SCL"><node ref="U2" pin="4" pinfunction="SCK" pintype="input"/><node ref="R2" pin="1" pintype="passive"/></net>+    <net code="6" name="Net-(D1-A)"><node ref="D1" pin="2" pinfunction="A" pintype="passive"/><node ref="R3" pin="1" pintype="passive"/></net>+    <net code="7" name="+5V_LED"><node ref="R3" pin="2" pintype="passive"/></net>+  </nets>+</export>"#;+    let n = parse_kicadxml(xml).unwrap();+    let m = sch_review::from_netlist(&n);+    assert_eq!(m.source, "netlist");+    let f = sch_review::review(&m, None);+    let checks: Vec<&str> = f.iter().map(|x| x.check).collect();+    // a good design: decoupled, pulled up, EN tied to VIN, LED limited, caps at the LDO+    for clean in ["decoupling", "i2c_pullups", "reset_enable", "led_resistor", "regulator_caps", "bulk_capacitance"] {+        assert!(!checks.contains(&clean), "{clean} flagged: {:#?}", f);+    }+    // the netlist folds the two R3s into one part: duplicates come from the files+    assert!(f.is_empty(), "{f:#?}");+    let mut m = m;+    m.occurrences.push(("R3".into(), 1, "/ other".into()));+    let f = sch_review::review(&m, Some(&["annotation".to_string()]));+    assert_eq!(f.len(), 1);+    assert!(f[0].message.contains("Reference R3 is used by 2"));+    // the files' occurrences of the fixture: every symbol once+    let h = Hierarchy::load(&fixtures().join("hier.kicad_sch")).unwrap();+    assert_eq!(sch_review::occurrences(&h).len(), 10);+}++#[test]+fn workspace_ops_write_files_that_parse_and_load() {+    let d = copy_project("ws");+    let root = d.join("hier.kicad_sch");+    // add a sheet to a SUB-sheet: the instance path runs through the root+    let mut ws = Workspace::open(&d.join("mcu.kicad_sch"), None).unwrap();+    assert_eq!(ws.paths().len(), 1);+    let v = ws.add_sheet("Debug", "debug.kicad_sch", Some((50.8, 120.65)), None, false).unwrap();+    assert_eq!(v["pages"][0]["page"], "5");+    assert!(v["pages"][0]["path"].as_str().unwrap().starts_with(&ws.paths()[0]));+    let w = ws.commit().unwrap();+    assert_eq!(w.created.len(), 1);+    assert_eq!(w.changed.len(), 1);+    let h = Hierarchy::load(&root).unwrap();+    assert!(h.instances.iter().any(|i| i.human == "/MCU/Debug/" && i.doc.is_some()));+    // commit refuses to overwrite a file it was asked to create+    let mut ws = Workspace::open(&root, None).unwrap();+    ws.add_sheet("Again", "debug2.kicad_sch", None, None, false).unwrap();+    std::fs::write(d.join("debug2.kicad_sch"), "taken").unwrap();+    assert!(ws.commit().is_err());+    assert_eq!(std::fs::read_to_string(d.join("debug2.kicad_sch")).unwrap(), "taken");+    // reuse an existing sheet file: its parts get their own references for the new use+    std::fs::remove_file(d.join("debug2.kicad_sch")).unwrap();+    let mut ws = Workspace::open(&root, None).unwrap();+    let v = ws.add_sheet("Filter2", "filter.kicad_sch", None, None, true).unwrap();+    assert_eq!(v["pinsAdded"][0]["name"], "VIN");+    let renamed: Vec<String> = v["renamed"].as_array().unwrap().iter().map(|r| r["to"].as_str().unwrap().to_string()).collect();+    assert!(renamed.contains(&"D2".to_string()), "{renamed:?}");+    ws.commit().unwrap();+    let h = Hierarchy::load(&root).unwrap();+    let rm = sch_review::from_hierarchy(&h);+    let anno = sch_review::review(&rm, Some(&["annotation".to_string()]));+    assert!(anno.is_empty(), "{anno:#?}");+    for (p, _) in &h.docs {+        Schematic::load(p).unwrap();+    }+    let _ = std::fs::remove_dir_all(&d);+}++fn service_kicad() -> Option<PathBuf> {+    let path = std::env::var_os("PATH")?;+    std::env::split_paths(&path).map(|d| d.join("service-kicad")).find(|p| p.is_file())+}++/// KiCad 10's own verdict on what these modules write: a blank sheet with a custom page and+/// title block, a parent with a new sheet and imported pins, and a duplicated sheet. ERC must+/// produce a report (KiCad refusing a file fails here).+#[test]+fn service_kicad_loads_what_we_write() {+    let Some(svc) = service_kicad() else {+        eprintln!("service-kicad not on PATH; skipping the live KiCad 10 test");+        return;+    };+    let d = copy_project("live");+    let (blank, _) = sch_hier::blank_sheet(&Paper::parse("custom", Some(250.0), Some(180.0), false).unwrap(), &TitleEdit { title: Some("Live".into()), comments: vec![(1, "c1".into())], ..Default::default() });+    std::fs::write(d.join("blank.kicad_sch"), blank).unwrap();+    let mut ws = Workspace::open(&d.join("hier.kicad_sch"), None).unwrap();+    ws.duplicate_sheet("MCU", Some("MCU_B"), None, None).unwrap();+    ws.add_sheet("FilterReuse", "filter.kicad_sch", None, None, true).unwrap();+    ws.add_pin("Power", "EXTRA", "passive", None, None).unwrap();+    ws.commit().unwrap();+    for f in ["blank.kicad_sch", "hier.kicad_sch", "mcu_copy.kicad_sch", "filter.kicad_sch"] {+        let out = d.join(format!("{f}.erc.json"));+        let r = Command::new(&svc).args(["sch", "erc", "--format", "json", "--out"]).arg(&out).arg(d.join(f)).output().expect("service-kicad runs");+        let report = std::fs::read_to_string(&out).unwrap_or_default();+        let v: serde_json::Value = serde_json::from_str(&report).unwrap_or_else(|_| panic!("{f}: KiCad 10 wrote no ERC report: {}", String::from_utf8_lossy(&r.stderr)));+        assert!(v["kicad_version"].as_str().unwrap_or("").starts_with("10."), "{f}: {v}");+        assert!(v["sheets"].is_array(), "{f}");+    }+    let _ = std::fs::remove_dir_all(&d);+}