@tscircuit/schematic-trace-solver 0.0.149 → 0.0.151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/.agents/skills/schematic-trace-visualization/SKILL.md +7 -2
  2. package/README.md +6 -4
  3. package/dist/index.d.ts +64 -3
  4. package/dist/index.js +383 -66
  5. package/lib/solvers/InlineNetLabelSolver/InlineNetLabelSolver.ts +123 -84
  6. package/lib/solvers/NetLabelPlacementSolver/NetLabelPlacementSolver.ts +17 -1
  7. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/SingleNetLabelPlacementSolver.ts +2 -0
  8. package/lib/solvers/NetLabelPlacementSolver/SingleNetLabelPlacementSolver/solvePortOnlyPin.ts +2 -0
  9. package/lib/solvers/NetLabelToTraceSolver/NetLabelToTraceSolver.ts +338 -0
  10. package/lib/solvers/NetLabelTraceRecovery/getTraceRecoveryConnectivityMaps.ts +33 -0
  11. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +15 -0
  12. package/lib/types/InputProblem.ts +27 -1
  13. package/package.json +8 -1
  14. package/tests/bug-reports/bug-report-20260706T213649Z/__snapshots__/bug-report-20260706T213649Z.snap.svg +751 -5
  15. package/tests/bug-reports/bug-report-20260706T220324Z/__snapshots__/bug-report-20260706T220324Z.snap.svg +660 -5
  16. package/tests/bug-reports/bug-report-20260707T020342Z/__snapshots__/bug-report-20260707T020342Z.snap.svg +44 -5
  17. package/tests/bug-reports/bug-report-20260707T092615Z/__snapshots__/bug-report-20260707T092615Z.snap.svg +394 -5
  18. package/tests/bug-reports/bug-report-20260707T134549Z/__snapshots__/bug-report-20260707T134549Z.snap.svg +170 -5
  19. package/tests/bug-reports/bug-report-20260707T134722Z/__snapshots__/bug-report-20260707T134722Z.snap.svg +79 -5
  20. package/tests/bug-reports/bug-report-20260707T140410Z/__snapshots__/bug-report-20260707T140410Z.snap.svg +219 -5
  21. package/tests/bug-reports/bug-report-20260707T141025Z/__snapshots__/bug-report-20260707T141025Z.snap.svg +65 -5
  22. package/tests/bug-reports/bug-report-20260707T141421Z/__snapshots__/bug-report-20260707T141421Z.snap.svg +142 -5
  23. package/tests/bug-reports/bug-report-20260707T230831Z/__snapshots__/bug-report-20260707T230831Z.snap.svg +100 -5
  24. package/tests/bug-reports/bug-report-20260708T053736Z/__snapshots__/bug-report-20260708T053736Z.snap.svg +23 -5
  25. package/tests/bug-reports/bug-report-20260708T055430Z/__snapshots__/bug-report-20260708T055430Z.snap.svg +58 -5
  26. package/tests/bug-reports/bug-report-20260708T095725Z/__snapshots__/bug-report-20260708T095725Z.snap.svg +86 -5
  27. package/tests/bug-reports/bug-report-20260716T144856Z/__snapshots__/bug-report-20260716T144856Z.snap.svg +226 -5
  28. package/tests/bug-reports/bug-report-20260717T022934Z/__snapshots__/bug-report-20260717T022934Z.snap.svg +191 -5
  29. package/tests/bug-reports/bug-report-20260717T031704Z/__snapshots__/bug-report-20260717T031704Z.snap.svg +30 -5
  30. package/tests/bug-reports/bug-report-20260717T042845Z/__snapshots__/bug-report-20260717T042845Z.snap.svg +37 -5
  31. package/tests/bug-reports/bug-report-20260721T221026Z/__snapshots__/bug-report-20260721T221026Z.snap.svg +580 -2
  32. package/tests/bug-reports/bug-report-20260724T175257Z/__snapshots__/bug-report-20260724T175257Z.snap.svg +44 -5
  33. package/tests/bug-reports/bug-report-20260728T144234Z/__snapshots__/bug-report-20260728T144234Z.snap.svg +107 -5
  34. package/tests/bug-reports/bug-report-20260728T225606Z/__snapshots__/bug-report-20260728T225606Z.snap.svg +114 -5
  35. package/tests/bug-reports/bug-report-20260730T061837Z/__snapshots__/bug-report-20260730T061837Z.snap.svg +121 -5
  36. package/tests/bug-reports/bug-report-20260731T052229Z/__snapshots__/bug-report-20260731T052229Z.snap.svg +51 -5
  37. package/tests/bug-reports/bug-report-20260804T095800Z/__snapshots__/bug-report-20260804T095800Z.snap.svg +212 -5
  38. package/tests/bug-reports/bug-report-20260804T171919Z/__snapshots__/bug-report-20260804T171919Z.snap.svg +569 -5
  39. package/tests/bug-reports/bug-report-20260804T225912Z/__snapshots__/bug-report-20260804T225912Z.snap.svg +37 -5
  40. package/tests/bug-reports/bug-report-20260805T061316Z/__snapshots__/bug-report-20260805T061316Z.snap.svg +289 -5
  41. package/tests/bug-reports/bug-report-20260806T061548Z/__snapshots__/bug-report-20260806T061548Z.snap.svg +289 -5
  42. package/tests/bug-reports/bug-report-20260806T093501Z/__snapshots__/bug-report-20260806T093501Z.snap.svg +149 -5
  43. package/tests/bug-reports/bug-report-20260811T075142Z/__snapshots__/bug-report-20260811T075142Z.snap.svg +93 -5
  44. package/tests/bug-reports/bug-report-20260815T073240Z/__snapshots__/bug-report-20260815T073240Z.snap.svg +79 -5
  45. package/tests/bug-reports/bug-report-20260819T091818Z/__snapshots__/bug-report-20260819T091818Z.snap.svg +244 -2
  46. package/tests/examples/__snapshots__/example01.snap.svg +44 -5
  47. package/tests/examples/__snapshots__/example02.snap.svg +51 -5
  48. package/tests/examples/__snapshots__/example03.snap.svg +86 -5
  49. package/tests/examples/__snapshots__/example04.snap.svg +30 -5
  50. package/tests/examples/__snapshots__/example05.snap.svg +30 -5
  51. package/tests/examples/__snapshots__/example06.snap.svg +30 -5
  52. package/tests/examples/__snapshots__/example07.snap.svg +58 -5
  53. package/tests/examples/__snapshots__/example08.snap.svg +37 -5
  54. package/tests/examples/__snapshots__/example09.snap.svg +149 -5
  55. package/tests/examples/__snapshots__/example10.snap.svg +65 -5
  56. package/tests/examples/__snapshots__/example11.snap.svg +51 -5
  57. package/tests/examples/__snapshots__/example12.snap.svg +51 -5
  58. package/tests/examples/__snapshots__/example13.snap.svg +72 -5
  59. package/tests/examples/__snapshots__/example14.snap.svg +79 -5
  60. package/tests/examples/__snapshots__/example15.snap.svg +86 -5
  61. package/tests/examples/__snapshots__/example16.snap.svg +51 -5
  62. package/tests/examples/__snapshots__/example17.snap.svg +51 -5
  63. package/tests/examples/__snapshots__/example18.snap.svg +58 -5
  64. package/tests/examples/__snapshots__/example19.snap.svg +44 -5
  65. package/tests/examples/__snapshots__/example20.snap.svg +44 -5
  66. package/tests/examples/__snapshots__/example21.snap.svg +72 -5
  67. package/tests/examples/__snapshots__/example22.snap.svg +51 -5
  68. package/tests/examples/__snapshots__/example23.snap.svg +51 -5
  69. package/tests/examples/__snapshots__/example24.snap.svg +51 -5
  70. package/tests/examples/__snapshots__/example25.snap.svg +86 -5
  71. package/tests/examples/__snapshots__/example26.snap.svg +51 -5
  72. package/tests/examples/__snapshots__/example27.snap.svg +72 -5
  73. package/tests/examples/__snapshots__/example28.snap.svg +44 -5
  74. package/tests/examples/__snapshots__/example29.snap.svg +324 -5
  75. package/tests/examples/__snapshots__/example30.snap.svg +107 -5
  76. package/tests/examples/__snapshots__/example31.snap.svg +37 -5
  77. package/tests/examples/__snapshots__/example32.snap.svg +149 -5
  78. package/tests/examples/__snapshots__/example33.snap.svg +93 -5
  79. package/tests/examples/__snapshots__/example34.snap.svg +51 -5
  80. package/tests/examples/__snapshots__/example35.snap.svg +58 -5
  81. package/tests/examples/__snapshots__/example36.snap.svg +44 -5
  82. package/tests/examples/__snapshots__/example37.snap.svg +72 -5
  83. package/tests/examples/__snapshots__/example38.snap.svg +30 -5
  84. package/tests/examples/__snapshots__/example39.snap.svg +37 -5
  85. package/tests/examples/__snapshots__/example40.snap.svg +100 -5
  86. package/tests/examples/__snapshots__/example41.snap.svg +44 -5
  87. package/tests/examples/__snapshots__/example42.snap.svg +65 -5
  88. package/tests/examples/__snapshots__/example43.snap.svg +58 -5
  89. package/tests/examples/__snapshots__/example44.snap.svg +107 -5
  90. package/tests/examples/__snapshots__/example45.snap.svg +51 -5
  91. package/tests/examples/__snapshots__/example46.snap.svg +93 -5
  92. package/tests/examples/__snapshots__/example47.snap.svg +93 -5
  93. package/tests/examples/__snapshots__/example48.snap.svg +65 -5
  94. package/tests/examples/__snapshots__/example49.snap.svg +177 -5
  95. package/tests/examples/__snapshots__/example50.snap.svg +93 -5
  96. package/tests/examples/__snapshots__/example51.snap.svg +594 -21
  97. package/tests/fixtures/convertSolverOutputToCircuitJson.test.ts +219 -0
  98. package/tests/fixtures/convertSolverOutputToCircuitJson.ts +1058 -0
  99. package/tests/fixtures/matcher.ts +45 -8
  100. package/tests/repros/__snapshots__/board-1273-trace-overlap-cycle.snap.svg +762 -2
  101. package/tests/repros/__snapshots__/board-15984-same-net-junction.snap.svg +111 -2
  102. package/tests/repros/__snapshots__/board1096-usb-label-overlap-iteration.snap.svg +170 -5
  103. package/tests/repros/__snapshots__/bugreport-001-gnd-overlap.snap.svg +65 -5
  104. package/tests/repros/__snapshots__/manufacturePartNumber-text-box.snap.svg +30 -5
  105. package/tests/repros/__snapshots__/netlabel-connector-through-rail-label.snap.svg +79 -5
  106. package/tests/repros/__snapshots__/repro-atmega328p-fault-pullup.snap.svg +65 -5
  107. package/tests/repros/__snapshots__/repro-atmega328p-missing-gnd-netlabel.snap.svg +149 -5
  108. package/tests/repros/__snapshots__/repro-board-589-regulator-section.snap.svg +55 -2
  109. package/tests/repros/__snapshots__/repro-board-648-esp12f-section.snap.svg +160 -2
  110. package/tests/repros/__snapshots__/repro-bq24074-battery-charger.snap.svg +135 -5
  111. package/tests/repros/__snapshots__/repro-bq25895-cross-net-trace-overlap.snap.svg +69 -2
  112. package/tests/repros/__snapshots__/repro-cc2340r5.snap.svg +86 -5
  113. package/tests/repros/__snapshots__/repro-core-555-power-cross-net-overlap.snap.svg +44 -5
  114. package/tests/repros/__snapshots__/repro-core-subcircuit-missing-ground.snap.svg +44 -5
  115. package/tests/repros/__snapshots__/repro-core-tb67s579ftg-inline-label-routing.snap.svg +30 -5
  116. package/tests/repros/__snapshots__/repro-example35-minimize-trace-crossing.snap.svg +335 -2
  117. package/tests/repros/__snapshots__/repro-ground-label-on-lower-rail-end.snap.svg +48 -2
  118. package/tests/repros/__snapshots__/repro-ina237-current-monitor.snap.svg +149 -5
  119. package/tests/repros/__snapshots__/repro-missing-trace-netlabel.snap.svg +72 -5
  120. package/tests/repros/__snapshots__/repro-netlabel-collision-687.snap.svg +100 -5
  121. package/tests/repros/__snapshots__/repro-netlabel-overlap-trace.snap.svg +51 -5
  122. package/tests/repros/__snapshots__/repro-nrf52810-clock-routing.snap.svg +90 -2
  123. package/tests/repros/__snapshots__/repro-power-group-rail-labels.snap.svg +37 -5
  124. package/tests/repros/__snapshots__/repro-rectifier-trace-overlap.snap.svg +44 -5
  125. package/tests/repros/__snapshots__/repro-rp2040-gamepad-trace-alignment.snap.svg +237 -2
  126. package/tests/repros/__snapshots__/repro-rp2040-usb-cc2-ground-overlap.snap.svg +72 -5
  127. package/tests/repros/__snapshots__/repro-rp2040-v3v3-label-placement.snap.svg +51 -5
  128. package/tests/repros/__snapshots__/repro-rp2040-zero-crystal-fallback-netlabels.snap.svg +30 -5
  129. package/tests/repros/__snapshots__/repro-ti-power-output-section.snap.svg +79 -5
  130. package/tests/repros/__snapshots__/repro-tida010076-j4-ground-bus.snap.svg +27 -2
  131. package/tests/repros/__snapshots__/repro-tida010076-page02.snap.svg +1150 -5
  132. package/tests/repros/__snapshots__/repro-tps61222-trace-intersection.snap.svg +51 -5
  133. package/tests/repros/__snapshots__/repro-type-c-16pin-self-connection.snap.svg +30 -5
  134. package/tests/repros/__snapshots__/repro-type-c-16pin-to-resistor.snap.svg +30 -5
  135. package/tests/repros/__snapshots__/repro-type-c-vbus-led-ground-label.snap.svg +44 -5
  136. package/tests/repros/__snapshots__/repro-usb-power-vbus-label-detour.snap.svg +685 -2
  137. package/tests/repros/__snapshots__/repro-vcc-pin1-detour.snap.svg +27 -2
  138. package/tests/repros/__snapshots__/repro129-host-custom-symbol-passives.snap.svg +51 -5
  139. package/tests/repros/__snapshots__/repro130-bq27441-fuel-gauge-trace-through-c1.snap.svg +100 -5
  140. package/tests/repros/__snapshots__/repro161-power-section-autolayout.snap.svg +107 -5
  141. package/tests/repros/__snapshots__/repro47-endpoint-obstacle-detour.snap.svg +51 -5
  142. package/tests/repros/__snapshots__/repro48-555-timer-vcc-rail-label.snap.svg +104 -2
  143. package/tests/repros/__snapshots__/repro5-escape-padded-text-obstacles.snap.svg +30 -5
  144. package/tests/repros/__snapshots__/repro51-overlap-junction-crossing.snap.svg +65 -5
  145. package/tests/repros/__snapshots__/repro84-stacked-gnd-label-orientation.snap.svg +27 -2
  146. package/tests/repros/__snapshots__/small-variant-resistor-facing-direction.snap.svg +58 -5
  147. package/tests/repros/__snapshots__/trace-overlap-box-resistor.snap.svg +37 -5
  148. package/tests/solvers/InlineNetLabelSolver/__snapshots__/fallback-net-label-width.snap.svg +25 -7
  149. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-anchored-label-clearance.snap.svg +34 -2
  150. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-port-stub.snap.svg +23 -5
  151. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label-two-pin-net.snap.svg +23 -5
  152. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label01.snap.svg +23 -5
  153. package/tests/solvers/InlineNetLabelSolver/__snapshots__/inline-net-label02.snap.svg +23 -5
  154. package/tests/solvers/InlineNetLabelSolver/__snapshots__/terminal-stub-trace-clearance.snap.svg +23 -5
  155. package/tests/solvers/InlineNetLabelSolver/fallback-net-label-width.test.ts +10 -1
  156. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_01-example17-d1_1-u1_1.snap.svg +23 -5
  157. package/tests/solvers/SchematicTraceSingleLineSolver2/__snapshots__/SchematicTraceSingleLineSolver2_repro47-short-opposing-pins.snap.svg +20 -2
  158. package/tests/solvers/TraceCleanupSolver/__snapshots__/TraceCleanupSolver.snap.svg +44 -5
  159. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +79 -5
  160. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +44 -5
  161. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +23 -5
  162. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +30 -5
@@ -1,4 +1,6 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-3.4,-0.8999999999999999 0,-1.4" data-type="line" data-label="" points="113.04347826086953,371.76956521739135 320,402.204347826087" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.49999999999999994 -1.3,-0.5" data-type="line" data-label="" points="113.04347826086953,347.4217391304348 240.8695652173913,347.42173913043484" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.2999999999999999 -1.3,-0.30000000000000004" data-type="line" data-label="" points="113.04347826086953,335.24782608695654 240.8695652173913,335.24782608695654" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.09999999999999992 -1.3,-0.10000000000000009" data-type="line" data-label="" points="113.04347826086953,323.0739130434783 240.8695652173913,323.0739130434783" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,0.10000000000000003 -1.3,0.09999999999999998" data-type="line" data-label="" points="113.04347826086953,310.90000000000003 240.8695652173913,310.90000000000003" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.5 1.3,-0.5" data-type="line" data-label="" points="526.9565217391305,347.42173913043484 399.1304347826087,347.42173913043484" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.3000000000000001 1.3,-0.3" data-type="line" data-label="" points="526.9565217391305,335.24782608695654 399.1304347826087,335.24782608695654" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.10000000000000003 1.3,-0.09999999999999998" data-type="line" data-label="" points="526.9565217391305,323.0739130434783 399.1304347826087,323.0739130434783" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,0.09999999999999998 1.3,0.10000000000000009" data-type="line" data-label="" points="526.9565217391305,310.90000000000003 399.1304347826087,310.90000000000003" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-0.2,1.4 -3.4,-0.7" data-type="line" data-label="" points="307.82608695652175,231.76956521739135 113.04347826086953,359.5956521739131" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-1.4 -3.4,-0.8999999999999999" data-type="line" data-label="" points="320,402.204347826087 113.04347826086953,371.76956521739135" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-1.4 3.4,-0.8999999999999999" data-type="line" data-label="" points="320,402.204347826087 526.9565217391305,371.76956521739135" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-3.4,-0.8999999999999999 3.4,-0.8999999999999999" data-type="line" data-label="" points="113.04347826086953,371.76956521739135 526.9565217391305,371.76956521739135" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.2,1.4 3.4,-0.7" data-type="line" data-label="" points="332.17391304347825,231.76956521739135 526.9565217391305,359.5956521739131" fill="none" stroke="hsl(199, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-1.4 0,-1.5999999999999999 -1.7,-1.5999999999999999 -1.7,-0.8999999999999999 -3.4,-0.8999999999999999" data-type="line" data-label="" points="320,402.204347826087 320,414.3782608695652 216.52173913043475,414.3782608695652 216.52173913043475,371.76956521739135 113.04347826086953,371.76956521739135" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.8999999999999999 1.6999999999999997,-0.8999999999999999 1.6999999999999997,-1.5999999999999999 0,-1.5999999999999999 0,-1.4" data-type="line" data-label="" points="526.9565217391305,371.76956521739135 423.47826086956525,371.76956521739135 423.47826086956525,414.3782608695652 320,414.3782608695652 320,402.204347826087" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.49999999999999994 -1.3,-0.5" data-type="line" data-label="" points="113.04347826086953,347.4217391304348 240.8695652173913,347.42173913043484" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.2999999999999999 -1.3,-0.30000000000000004" data-type="line" data-label="" points="113.04347826086953,335.24782608695654 240.8695652173913,335.24782608695654" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.09999999999999992 -1.3,-0.10000000000000009" data-type="line" data-label="" points="113.04347826086953,323.0739130434783 240.8695652173913,323.0739130434783" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,0.10000000000000003 -1.3,0.09999999999999998" data-type="line" data-label="" points="113.04347826086953,310.90000000000003 240.8695652173913,310.90000000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.5 1.3,-0.5" data-type="line" data-label="" points="526.9565217391305,347.42173913043484 399.1304347826087,347.42173913043484" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.3000000000000001 1.3,-0.3" data-type="line" data-label="" points="526.9565217391305,335.24782608695654 399.1304347826087,335.24782608695654" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.10000000000000003 1.3,-0.09999999999999998" data-type="line" data-label="" points="526.9565217391305,323.0739130434783 399.1304347826087,323.0739130434783" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,0.09999999999999998 1.3,0.10000000000000009" data-type="line" data-label="" points="526.9565217391305,310.90000000000003 399.1304347826087,310.90000000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="240.8695652173913" y="231.76956521739135" width="158.26086956521738" height="170.43478260869563" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-4" data-y="-0.3" x="39.999999999999986" y="286.5521739130435" width="73.04347826086953" height="97.39130434782612" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="4" data-y="-0.3" x="526.9565217391305" y="286.5521739130435" width="73.0434782608695" height="97.39130434782612" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="netId: V3_3
1
+ <svg width="2416" height="1200" viewBox="0 0 2416 1200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on the left and Circuit JSON schematic on the right">
2
+ <g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
3
+ <rect width="100%" height="100%" fill="white"/><g><polyline data-points="-3.4,-0.8999999999999999 0,-1.4" data-type="line" data-label="" points="113.04347826086953,371.76956521739135 320,402.204347826087" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.49999999999999994 -1.3,-0.5" data-type="line" data-label="" points="113.04347826086953,347.4217391304348 240.8695652173913,347.42173913043484" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.2999999999999999 -1.3,-0.30000000000000004" data-type="line" data-label="" points="113.04347826086953,335.24782608695654 240.8695652173913,335.24782608695654" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.09999999999999992 -1.3,-0.10000000000000009" data-type="line" data-label="" points="113.04347826086953,323.0739130434783 240.8695652173913,323.0739130434783" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-3.4,0.10000000000000003 -1.3,0.09999999999999998" data-type="line" data-label="" points="113.04347826086953,310.90000000000003 240.8695652173913,310.90000000000003" fill="none" stroke="hsl(336, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.5 1.3,-0.5" data-type="line" data-label="" points="526.9565217391305,347.42173913043484 399.1304347826087,347.42173913043484" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.3000000000000001 1.3,-0.3" data-type="line" data-label="" points="526.9565217391305,335.24782608695654 399.1304347826087,335.24782608695654" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.10000000000000003 1.3,-0.09999999999999998" data-type="line" data-label="" points="526.9565217391305,323.0739130434783 399.1304347826087,323.0739130434783" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="3.4,0.09999999999999998 1.3,0.10000000000000009" data-type="line" data-label="" points="526.9565217391305,310.90000000000003 399.1304347826087,310.90000000000003" fill="none" stroke="hsl(24, 100%, 50%, 0.8)" stroke-width="1px"/></g><g><polyline data-points="-0.2,1.4 -3.4,-0.7" data-type="line" data-label="" points="307.82608695652175,231.76956521739135 113.04347826086953,359.5956521739131" fill="none" stroke="hsl(73, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-1.4 -3.4,-0.8999999999999999" data-type="line" data-label="" points="320,402.204347826087 113.04347826086953,371.76956521739135" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-1.4 3.4,-0.8999999999999999" data-type="line" data-label="" points="320,402.204347826087 526.9565217391305,371.76956521739135" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-3.4,-0.8999999999999999 3.4,-0.8999999999999999" data-type="line" data-label="" points="113.04347826086953,371.76956521739135 526.9565217391305,371.76956521739135" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0.2,1.4 3.4,-0.7" data-type="line" data-label="" points="332.17391304347825,231.76956521739135 526.9565217391305,359.5956521739131" fill="none" stroke="hsl(199, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="0,-1.4 0,-1.5999999999999999 -1.7,-1.5999999999999999 -1.7,-0.8999999999999999 -3.4,-0.8999999999999999" data-type="line" data-label="" points="320,402.204347826087 320,414.3782608695652 216.52173913043475,414.3782608695652 216.52173913043475,371.76956521739135 113.04347826086953,371.76956521739135" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.8999999999999999 1.6999999999999997,-0.8999999999999999 1.6999999999999997,-1.5999999999999999 0,-1.5999999999999999 0,-1.4" data-type="line" data-label="" points="526.9565217391305,371.76956521739135 423.47826086956525,371.76956521739135 423.47826086956525,414.3782608695652 320,414.3782608695652 320,402.204347826087" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.49999999999999994 -1.3,-0.5" data-type="line" data-label="" points="113.04347826086953,347.4217391304348 240.8695652173913,347.42173913043484" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.2999999999999999 -1.3,-0.30000000000000004" data-type="line" data-label="" points="113.04347826086953,335.24782608695654 240.8695652173913,335.24782608695654" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,-0.09999999999999992 -1.3,-0.10000000000000009" data-type="line" data-label="" points="113.04347826086953,323.0739130434783 240.8695652173913,323.0739130434783" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-3.4,0.10000000000000003 -1.3,0.09999999999999998" data-type="line" data-label="" points="113.04347826086953,310.90000000000003 240.8695652173913,310.90000000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.5 1.3,-0.5" data-type="line" data-label="" points="526.9565217391305,347.42173913043484 399.1304347826087,347.42173913043484" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.3000000000000001 1.3,-0.3" data-type="line" data-label="" points="526.9565217391305,335.24782608695654 399.1304347826087,335.24782608695654" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,-0.10000000000000003 1.3,-0.09999999999999998" data-type="line" data-label="" points="526.9565217391305,323.0739130434783 399.1304347826087,323.0739130434783" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="3.4,0.09999999999999998 1.3,0.10000000000000009" data-type="line" data-label="" points="526.9565217391305,310.90000000000003 399.1304347826087,310.90000000000003" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="schematic_component_0" data-x="0" data-y="0" x="240.8695652173913" y="231.76956521739135" width="158.26086956521738" height="170.43478260869563" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="schematic_component_1" data-x="-4" data-y="-0.3" x="39.999999999999986" y="286.5521739130435" width="73.04347826086953" height="97.39130434782612" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="schematic_component_2" data-x="4" data-y="-0.3" x="526.9565217391305" y="286.5521739130435" width="73.0434782608695" height="97.39130434782612" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="netId: V3_3
2
4
  globalConnNetId: connectivity_net9" data-x="-0.2" data-y="1.6009999999999998" x="301.7391304347826" y="207.3608695652174" width="12.173913043478251" height="24.34782608695653" fill="#ef444466" stroke="#ef4444" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="netId: V3_3
3
5
  globalConnNetId: connectivity_net9" data-x="-3.199" data-y="-0.7" x="113.10434782608692" y="353.50869565217397" width="24.34782608695656" height="12.173913043478251" fill="#ef444466" stroke="#ef4444" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="netId: pinheader.JP1 &gt; port.pin6 to .U1 &gt; .pin2
4
6
  globalConnNetId: connectivity_net4" data-x="-2.35" data-y="0.325" x="170.86956521739125" y="283.5086956521739" width="12.17391304347828" height="27.39130434782612" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.016428571428571428"/></g><g><rect data-type="rect" data-label="netId: GND
@@ -48,7 +50,7 @@ orientation: x-" data-x="3.4" data-y="-0.7" cx="526.9565217391305" cy="359.59565
48
50
  const h = svg.getElementById('crosshair-h');
49
51
  const v = svg.getElementById('crosshair-v');
50
52
  const coords = svg.getElementById('coordinates');
51
-
53
+
52
54
  crosshair.style.display = 'block';
53
55
  h.setAttribute('x1', '0');
54
56
  h.setAttribute('x2', '640');
@@ -67,13 +69,13 @@ orientation: x-" data-x="3.4" data-y="-0.7" cx="526.9565217391305" cy="359.59565
67
69
  // y' = (y - ty) / sy
68
70
  const sx = matrix.a;
69
71
  const sy = matrix.d;
70
- const tx = matrix.e;
72
+ const tx = matrix.e;
71
73
  const ty = matrix.f;
72
74
  const realPoint = {
73
75
  x: (x - tx) / sx,
74
76
  y: (y - ty) / sy // Flip y back since we used negative scale
75
77
  }
76
-
78
+
77
79
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
78
80
  coords.setAttribute('x', (x + 5).toString());
79
81
  coords.setAttribute('y', (y - 5).toString());
@@ -81,4 +83,69 @@ orientation: x-" data-x="3.4" data-y="-0.7" cx="526.9565217391305" cy="359.59565
81
83
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
82
84
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
83
85
  });
84
- ]]></script></svg>
86
+ ]]></script>
87
+ </g>
88
+ <g transform="translate(1216, 200)">
89
+ <style>
90
+ .boundary { fill: rgb(245, 241, 237); }
91
+ .schematic-boundary { fill: none; stroke: #fff; }
92
+ .component { fill: none; stroke: rgb(132, 0, 0); }
93
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
94
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
95
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
96
+ .pin-number { fill: rgb(169, 0, 0); }
97
+ .port-label { fill: rgb(0, 100, 100); }
98
+ .component-name { fill: rgb(0, 100, 100); }
99
+
100
+ </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 600 570.9098532495 L 600 596.0670859539 L 386.1635220126 596.0670859539 L 386.1635220126 508.01677148849996 L 172.32704402520005 508.01677148849996" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 600 570.9098532495 L 600 596.0670859539 L 386.1635220126 596.0670859539 L 386.1635220126 508.01677148849996 L 172.32704402520005 508.01677148849996" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 1027.6729559748 508.01677148849996 L 813.8364779873999 508.01677148849996 L 813.8364779873999 596.0670859539 L 600 596.0670859539 L 600 570.9098532495" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1027.6729559748 508.01677148849996 L 813.8364779873999 508.01677148849996 L 813.8364779873999 596.0670859539 L 600 596.0670859539 L 600 570.9098532495" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"><path d="M 172.32704402520005 457.70230607969995 L 436.47798742140003 457.7023060797" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 172.32704402520005 457.70230607969995 L 436.47798742140003 457.7023060797" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"><path d="M 172.32704402520005 432.5450733753 L 436.47798742140003 432.5450733753" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 172.32704402520005 432.5450733753 L 436.47798742140003 432.5450733753" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"><path d="M 172.32704402520005 407.3878406709 L 436.47798742140003 407.3878406709" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 172.32704402520005 407.3878406709 L 436.47798742140003 407.3878406709" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_5__stack1"><path d="M 172.32704402520005 382.2306079665 L 436.47798742140003 382.2306079665" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 172.32704402520005 382.2306079665 L 436.47798742140003 382.2306079665" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_6__stack1"><path d="M 1027.6729559748 457.7023060797 L 763.5220125786 457.7023060797" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1027.6729559748 457.7023060797 L 763.5220125786 457.7023060797" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_7__stack1"><path d="M 1027.6729559748 432.5450733753 L 763.5220125786 432.5450733753" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1027.6729559748 432.5450733753 L 763.5220125786 432.5450733753" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_8__stack1"><path d="M 1027.6729559748 407.3878406709 L 763.5220125786 407.3878406709" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1027.6729559748 407.3878406709 L 763.5220125786 407.3878406709" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_9__stack1"><path d="M 1027.6729559748 382.2306079665 L 763.5220125786 382.2306079665" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="20.12578616352px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 1027.6729559748 382.2306079665 L 763.5220125786 382.2306079665" stroke="rgb(0, 150, 0)" fill="none" stroke-width="2.51572327044px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><circle cx="600" cy="570.9098532495" r="3.77358490566" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/><circle cx="600" cy="596.0670859539" r="3.77358490566" class="trace-junction sch-trace-junction" fill="rgb(0, 150, 0)"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_2__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_3__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_4__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_5__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_6__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_7__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_8__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_9__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="486.7924528302" y="269.0230607967" width="226.41509433960005" height="251.5723270439999" stroke-width="2.51572327044px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="486.7924528302" y="269.0230607967" width="226.41509433960005" height="251.5723270439999" fill="transparent"/><text class="sch-text" x="600" y="394.8092243187" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="22.64150943396px" transform="rotate(0, 600, 394.8092243187)">U1</text><line class="component-pin sch-component-pin sch-port-line" x1="574.8427672956" y1="269.0230607967" x2="574.8427672956" y2="221.22431865834" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="574.8427672956" cy="218.7085953879" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="572.3270440251599" y="216.19287211746" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="572.32704402516" y="243.8658280923" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="rotate(-90 572.32704402516 243.8658280923)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="486.7924528302" y1="382.2306079665" x2="436.47798742140003" y2="382.2306079665" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><rect x="433.96226415096004" y="379.71488469606" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="461.6352201258" y="379.71488469606" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="486.7924528302" y1="407.3878406709" x2="436.47798742140003" y2="407.3878406709" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><rect x="433.96226415096004" y="404.87211740046" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="461.6352201258" y="404.87211740046" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="486.7924528302" y1="432.5450733753" x2="436.47798742140003" y2="432.5450733753" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><rect x="433.96226415096004" y="430.02935010486" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="461.6352201258" y="430.02935010486" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="486.7924528302" y1="457.7023060797" x2="436.47798742140003" y2="457.7023060797" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><rect x="433.96226415096004" y="455.18658280926" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="461.6352201258" y="455.18658280926" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="600" y1="520.5953878406999" x2="600" y2="570.9098532495" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_5__stack1"><rect x="597.48427672956" y="568.3941299790599" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="597.48427672956" y="545.7526205451" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="rotate(-90 597.48427672956 545.7526205451)">7</text><line class="component-pin sch-component-pin sch-port-line" x1="486.7924528302" y1="331.91614255769997" x2="438.99371069183996" y2="331.91614255769997" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="436.47798742140003" cy="331.91614255769997" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="433.96226415096004" y="329.40041928726" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="461.6352201258" y="329.40041928726" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">8</text><line class="component-pin sch-component-pin sch-port-line" x1="713.2075471698" y1="457.7023060797" x2="763.5220125786" y2="457.7023060797" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_7__stack1"><rect x="761.0062893081599" y="455.18658280926" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="738.3647798741999" y="455.18658280926" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">10</text><line class="component-pin sch-component-pin sch-port-line" x1="713.2075471698" y1="432.5450733753" x2="763.5220125786" y2="432.5450733753" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_8__stack1"><rect x="761.0062893081599" y="430.02935010486" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="738.3647798741999" y="430.02935010486" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">11</text><line class="component-pin sch-component-pin sch-port-line" x1="713.2075471698" y1="407.3878406709" x2="763.5220125786" y2="407.3878406709" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_9__stack1"><rect x="761.0062893081599" y="404.87211740046" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="738.3647798741999" y="404.87211740046" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">12</text><line class="component-pin sch-component-pin sch-port-line" x1="713.2075471698" y1="382.2306079665" x2="763.5220125786" y2="382.2306079665" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_10__stack1"><rect x="761.0062893081599" y="379.71488469606" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="738.3647798741999" y="379.71488469606" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">13</text><line class="component-pin sch-component-pin sch-port-line" x1="625.1572327044" y1="269.0230607967" x2="625.1572327044" y2="221.22431865834" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_0_11__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="625.1572327044" cy="218.7085953879" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="622.64150943396" y="216.19287211746" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="622.64150943396" y="243.8658280923" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="rotate(-90 622.64150943396 243.8658280923)">14</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_1__stack1"><rect class="component chip sch-component-body" x="71.69811320760004" y="331.91614255769997" width="50.314465408800004" height="201.25786163519996" stroke-width="2.51572327044px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="71.69811320760004" y="331.91614255769997" width="50.314465408800004" height="201.25786163519996" fill="transparent"/><text class="sch-text" x="96.85534591200002" y="432.5450733753" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="22.64150943396px" transform="rotate(0, 96.85534591200002, 432.5450733753)">JP1</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="508.01677148849996" x2="172.32704402520005" y2="508.01677148849996" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_0__stack1"><rect x="169.81132075476006" y="505.50104821805996" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="505.50104821805996" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="482.8595387841" x2="169.81132075476" y2="482.8595387841" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="172.32704402520005" cy="482.8595387841" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="169.81132075476006" y="480.34381551366" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="480.34381551366" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="457.70230607969995" x2="172.32704402520005" y2="457.70230607969995" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_2__stack1"><rect x="169.81132075476006" y="455.18658280925996" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="455.18658280925996" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="432.5450733753" x2="172.32704402520005" y2="432.5450733753" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_3__stack1"><rect x="169.81132075476006" y="430.02935010486" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="430.02935010486" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="407.3878406709" x2="172.32704402520005" y2="407.3878406709" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_4__stack1"><rect x="169.81132075476006" y="404.87211740046" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="404.87211740045996" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="382.2306079665" x2="172.32704402520005" y2="382.2306079665" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_5__stack1"><rect x="169.81132075476006" y="379.71488469606" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="379.71488469606" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="122.01257861640005" y1="357.0733752621" x2="169.81132075476" y2="357.0733752621" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_1_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="172.32704402520005" cy="357.0733752621" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="169.81132075476006" y="354.55765199166" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="147.16981132080002" y="354.55765199166" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">7</text></g><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_2__stack1"><rect class="component chip sch-component-body" x="1077.9874213836" y="331.91614255769997" width="50.31446540880006" height="201.25786163519996" stroke-width="2.51572327044px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="1077.9874213836" y="331.91614255769997" width="50.31446540880006" height="201.25786163519996" fill="transparent"/><text class="sch-text" x="1103.144654088" y="432.5450733753" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="22.64150943396px" transform="rotate(0, 1103.144654088, 432.5450733753)">JP2</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="508.01677148849996" x2="1027.6729559748" y2="508.01677148849996" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_0__stack1"><rect x="1025.15723270436" y="505.50104821805996" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="505.50104821805996" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">1</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="482.8595387841" x2="1030.18867924524" y2="482.8595387841" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_1__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="1027.6729559748" cy="482.8595387841" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="1025.15723270436" y="480.34381551366" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="480.34381551366" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">2</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="457.7023060797" x2="1027.6729559748" y2="457.7023060797" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_2__stack1"><rect x="1025.15723270436" y="455.18658280926" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="455.18658280926" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">3</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="432.5450733753" x2="1027.6729559748" y2="432.5450733753" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_3__stack1"><rect x="1025.15723270436" y="430.02935010486" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="430.02935010486" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">4</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="407.3878406709" x2="1027.6729559748" y2="407.3878406709" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_4__stack1"><rect x="1025.15723270436" y="404.87211740046" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="404.87211740046" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">5</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="382.2306079665" x2="1027.6729559748" y2="382.2306079665" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_5__stack1"><rect x="1025.15723270436" y="379.71488469606" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="379.71488469606" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">6</text><line class="component-pin sch-component-pin sch-port-line" x1="1077.9874213836" y1="357.0733752621" x2="1030.18867924524" y2="357.0733752621" stroke-width="2.51572327044px"/><g class="sch-port" data-schematic-port-id="source_port_2_6__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="1027.6729559748" cy="357.0733752621" r="2.51572327044" stroke-width="2.51572327044px"/><rect x="1025.15723270436" y="354.55765199166" width="5.03144654088" height="5.03144654088" opacity="0"/></g><text class="pin-number sch-pin-number" x="1052.8301886792" y="354.55765199166" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="18.867924528299998px" transform="">7</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="574.8427672956" cy="218.7085953879" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="436.47798742140003" cy="382.2306079665" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="436.47798742140003" cy="407.3878406709" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="436.47798742140003" cy="432.5450733753" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="436.47798742140003" cy="457.7023060797" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_5__stack1"><circle cx="600" cy="570.9098532495" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_6__stack1"><circle cx="436.47798742140003" cy="331.91614255769997" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_7__stack1"><circle cx="763.5220125786" cy="457.7023060797" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_8__stack1"><circle cx="763.5220125786" cy="432.5450733753" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_9__stack1"><circle cx="763.5220125786" cy="407.3878406709" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_10__stack1"><circle cx="763.5220125786" cy="382.2306079665" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_11__stack1"><circle cx="625.1572327044" cy="218.7085953879" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_0__stack1"><circle cx="172.32704402520005" cy="508.01677148849996" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_1__stack1"><circle cx="172.32704402520005" cy="482.8595387841" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_2__stack1"><circle cx="172.32704402520005" cy="457.70230607969995" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_3__stack1"><circle cx="172.32704402520005" cy="432.5450733753" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_4__stack1"><circle cx="172.32704402520005" cy="407.3878406709" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_5__stack1"><circle cx="172.32704402520005" cy="382.2306079665" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_1_6__stack1"><circle cx="172.32704402520005" cy="357.0733752621" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_0__stack1"><circle cx="1027.6729559748" cy="508.01677148849996" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_1__stack1"><circle cx="1027.6729559748" cy="482.8595387841" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_2__stack1"><circle cx="1027.6729559748" cy="457.7023060797" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_3__stack1"><circle cx="1027.6729559748" cy="432.5450733753" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_4__stack1"><circle cx="1027.6729559748" cy="407.3878406709" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_5__stack1"><circle cx="1027.6729559748" cy="382.2306079665" r="5.03144654088" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_2_6__stack1"><circle cx="1027.6729559748" cy="357.0733752621" r="5.03144654088" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
101
+ M 574.8427672956,218.7085953879
102
+ L 562.2641509434,211.916142557712
103
+ L 562.2641509434,168.7798742139008
104
+ L 587.4213836478,168.7798742139008
105
+ L 587.4213836478,211.916142557712
106
+ Z
107
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="574.8427672956" y="207.38784067092" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="rotate(-90 574.8427672956 207.38784067092)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
108
+ M 172.32704402520005,482.8595387841
109
+ L 179.11949685538806,470.28092243189997
110
+ L 222.25576519919926,470.28092243189997
111
+ L 222.25576519919926,495.4381551363
112
+ L 179.11949685538806,495.4381551363
113
+ Z
114
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="183.64779874218004" y="482.8595387841" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
115
+ M 304.4025157233,382.2306079665
116
+ L 291.82389937109997,375.438155136312
117
+ L 291.82389937109997,332.3018867925008
118
+ L 316.9811320755,332.3018867925008
119
+ L 316.9811320755,375.438155136312
120
+ Z
121
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="304.4025157233" y="370.90985324952" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="rotate(-90 304.4025157233 370.90985324952)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" d="
122
+ M 600,596.0670859539
123
+ L 612.5786163522,602.859538784088
124
+ L 612.5786163522,631.2201257861816
125
+ L 587.4213836478,631.2201257861816
126
+ L 587.4213836478,602.859538784088
127
+ Z
128
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_3__stack1" x="600" y="607.38784067088" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="rotate(90 600 607.38784067088)">X</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" d="
129
+ M 895.5974842767,382.2306079665
130
+ L 883.0188679245,375.438155136312
131
+ L 883.0188679245,332.3018867925008
132
+ L 908.1761006289,332.3018867925008
133
+ L 908.1761006289,375.438155136312
134
+ Z
135
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_4__stack1" x="895.5974842767" y="370.90985324952" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="rotate(-90 895.5974842767 370.90985324952)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" d="
136
+ M 625.1572327044,218.7085953879
137
+ L 612.5786163522,211.916142557712
138
+ L 612.5786163522,183.5555555556184
139
+ L 637.7358490566,183.5555555556184
140
+ L 637.7358490566,211.916142557712
141
+ Z
142
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_5__stack1" x="625.1572327044" y="207.38784067092" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="rotate(-90 625.1572327044 207.38784067092)">X</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" d="
143
+ M 1027.6729559748,482.8595387841
144
+ L 1020.880503144612,495.4381551363
145
+ L 992.5199161425185,495.4381551363
146
+ L 992.5199161425185,470.28092243189997
147
+ L 1020.880503144612,470.28092243189997
148
+ Z
149
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="2.51572327044px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_6__stack1" x="1016.3522012578201" y="482.8595387841" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="22.64150943396px" transform="">X</text>
150
+ </g>
151
+ </svg>
@@ -1,4 +1,6 @@
1
- <svg width="640" height="640" viewBox="0 0 640 640" xmlns="http://www.w3.org/2000/svg"><rect width="100%" height="100%" fill="white"/><g><polyline data-points="-0.3,0.1 -0.3,-0.1" data-type="line" data-label="" points="273.3851276359601,343.30743618202 273.3851276359601,405.46059933407327" fill="none" stroke="hsl(325, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.3,0.1 -0.5,0.1 -0.5,-0.1 -0.3,-0.1" data-type="line" data-label="" points="273.3851276359601,343.30743618202 211.23196448390684,343.30743618202 211.23196448390684,405.46059933407327 273.3851276359601,405.46059933407327" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.3,0 -0.6000000000000001,0" data-type="line" data-label="" points="273.3851276359601,374.38401775804664 180.15538290788018,374.38401775804664" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="1" data-x="0" data-y="0" x="273.3851276359601" y="312.2308546059934" width="186.45948945615987" height="124.3063263041065" fill="hsl(49, 100%, 50%, 0.8)" stroke="black" stroke-width="0.003217857142857143"/></g><g><rect data-type="rect" data-label="netId: V5_IN
1
+ <svg width="2416" height="1200" viewBox="0 0 2416 1200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Solver debug visualization on the left and Circuit JSON schematic on the right">
2
+ <g transform="translate(0, 0) scale(1.875, 1.875) translate(0, 0)">
3
+ <rect width="100%" height="100%" fill="white"/><g><polyline data-points="-0.3,0.1 -0.3,-0.1" data-type="line" data-label="" points="273.3851276359601,343.30743618202 273.3851276359601,405.46059933407327" fill="none" stroke="hsl(325, 100%, 50%, 0.8)" stroke-width="1px" stroke-dasharray="4 2"/></g><g><polyline data-points="-0.3,0.1 -0.5,0.1 -0.5,-0.1 -0.3,-0.1" data-type="line" data-label="" points="273.3851276359601,343.30743618202 211.23196448390684,343.30743618202 211.23196448390684,405.46059933407327 273.3851276359601,405.46059933407327" fill="none" stroke="purple" stroke-width="1px"/></g><g><polyline data-points="-0.3,0 -0.6000000000000001,0" data-type="line" data-label="" points="273.3851276359601,374.38401775804664 180.15538290788018,374.38401775804664" fill="none" stroke="purple" stroke-width="1px"/></g><g><rect data-type="rect" data-label="1" data-x="0" data-y="0" x="273.3851276359601" y="312.2308546059934" width="186.45948945615987" height="124.3063263041065" fill="hsl(49, 100%, 50%, 0.8)" stroke="black" stroke-width="0.003217857142857143"/></g><g><rect data-type="rect" data-label="netId: V5_IN
2
4
  globalConnNetId: connectivity_net0" data-x="-0.4" data-y="0.325" x="211.23196448390684" y="203.46281908990014" width="62.15316315205325" height="139.8446170921199" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.003217857142857143"/></g><g><rect data-type="rect" data-label="netId: GND
3
5
  globalConnNetId: connectivity_net2" data-x="-0.8260000000000001" data-y="0" x="40.00000000000003" y="343.30743618202" width="139.8446170921199" height="62.15316315205325" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.003217857142857143"/></g><g><rect data-type="rect" data-label="netId: V3P3
4
6
  globalConnNetId: connectivity_net1" data-x="0.526" data-y="0.1" x="460.15538290788015" y="312.2308546059934" width="139.8446170921199" height="62.15316315205325" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.003217857142857143"/></g><g><circle data-type="point" data-label="IN
@@ -19,7 +21,7 @@ orientation: x+" data-x="0.3" data-y="0.1" cx="459.84461709211996" cy="343.30743
19
21
  const h = svg.getElementById('crosshair-h');
20
22
  const v = svg.getElementById('crosshair-v');
21
23
  const coords = svg.getElementById('coordinates');
22
-
24
+
23
25
  crosshair.style.display = 'block';
24
26
  h.setAttribute('x1', '0');
25
27
  h.setAttribute('x2', '640');
@@ -38,13 +40,13 @@ orientation: x+" data-x="0.3" data-y="0.1" cx="459.84461709211996" cy="343.30743
38
40
  // y' = (y - ty) / sy
39
41
  const sx = matrix.a;
40
42
  const sy = matrix.d;
41
- const tx = matrix.e;
43
+ const tx = matrix.e;
42
44
  const ty = matrix.f;
43
45
  const realPoint = {
44
46
  x: (x - tx) / sx,
45
47
  y: (y - ty) / sy // Flip y back since we used negative scale
46
48
  }
47
-
49
+
48
50
  coords.textContent = `(${realPoint.x.toFixed(2)}, ${realPoint.y.toFixed(2)})`;
49
51
  coords.setAttribute('x', (x + 5).toString());
50
52
  coords.setAttribute('y', (y - 5).toString());
@@ -52,4 +54,41 @@ orientation: x+" data-x="0.3" data-y="0.1" cx="459.84461709211996" cy="343.30743
52
54
  document.currentScript.parentElement.addEventListener('mouseleave', () => {
53
55
  document.currentScript.parentElement.getElementById('crosshair').style.display = 'none';
54
56
  });
55
- ]]></script></svg>
57
+ ]]></script>
58
+ </g>
59
+ <g transform="translate(1216, 200)">
60
+ <style>
61
+ .boundary { fill: rgb(245, 241, 237); }
62
+ .schematic-boundary { fill: none; stroke: #fff; }
63
+ .component { fill: none; stroke: rgb(132, 0, 0); }
64
+ .chip { fill: rgb(255, 255, 194); stroke: rgb(132, 0, 0); }
65
+ .component-pin { fill: none; stroke: rgb(132, 0, 0); }
66
+ .text { font-family: sans-serif; fill: rgb(0, 150, 0); }
67
+ .pin-number { fill: rgb(169, 0, 0); }
68
+ .port-label { fill: rgb(0, 100, 100); }
69
+ .component-name { fill: rgb(0, 100, 100); }
70
+
71
+ </style><rect class="boundary" x="0" y="0" width="1200" height="800"/><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"><path d="M 533.18154820824 421.58978420118 L 444.09027915260003 421.58978420118 L 444.09027915260003 510.68105325681995 L 533.18154820824 510.68105325681995" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="71.273015244512px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 533.18154820824 421.58978420118 L 444.09027915260003 421.58978420118 L 444.09027915260003 510.68105325681995 L 533.18154820824 510.68105325681995" stroke="rgb(0, 150, 0)" fill="none" stroke-width="8.909126905564px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace sch-trace" data-layer="base" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"><path d="M 533.18154820824 466.135418729 L 399.54464462477995 466.135418729" class="trace-invisible-hover-outline sch-trace-hitbox" stroke="rgb(0, 150, 0)" fill="none" stroke-width="71.273015244512px" stroke-linecap="round" opacity="0" stroke-linejoin="round"/><path class="sch-trace-path" d="M 533.18154820824 466.135418729 L 399.54464462477995 466.135418729" stroke="rgb(0, 150, 0)" fill="none" stroke-width="8.909126905564px" stroke-linecap="round" stroke-linejoin="round"/></g><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_0__stack1"/><g class="trace-overlays sch-trace-overlays" data-layer="overlay" data-circuit-json-type="schematic_trace" data-schematic-trace-id="schematic_trace_1__stack1"/><g class="sch-component" data-circuit-json-type="schematic_component" data-schematic-component-id="schematic_component_0__stack1"><rect class="component chip sch-component-body" x="644.54563452779" y="377.04414967336" width="44.545634527820084" height="178.18253811128005" stroke-width="8.909126905564px" fill="rgb(255, 255, 194)" stroke="rgb(132, 0, 0)"/><rect class="component-overlay sch-component-overlay" x="644.54563452779" y="377.04414967336" width="44.545634527820084" height="178.18253811128005" fill="transparent"/><text class="sch-text" x="666.8184517917" y="466.135418729" fill="#0f172a" text-anchor="middle" dominant-baseline="middle" font-family="sans-serif" font-size="59.39417937042666px" transform="rotate(0, 666.8184517917, 466.135418729)">1</text><line class="component-pin sch-component-pin sch-port-line" x1="644.54563452779" y1="421.58978420118" x2="533.18154820824" y2="421.58978420118" stroke-width="8.909126905564px"/><g class="sch-port" data-schematic-port-id="source_port_0_0__stack1"><rect x="524.272421302676" y="412.680657295616" width="17.818253811128" height="17.818253811128" opacity="0"/></g><text class="pin-number sch-pin-number" x="588.863591368015" y="412.68065729561596" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="66.81845179173px" transform=""></text><text class="pin-number sch-pin-label" x="689.09126905561" y="421.58978420118" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="start" dominant-baseline="middle" font-size="66.81845179173px" transform="">IN</text><line class="component-pin sch-component-pin sch-port-line" x1="644.54563452779" y1="466.135418729" x2="533.18154820824" y2="466.135418729" stroke-width="8.909126905564px"/><g class="sch-port" data-schematic-port-id="source_port_0_1__stack1"><rect x="524.272421302676" y="457.226291823436" width="17.818253811128" height="17.818253811128" opacity="0"/></g><text class="pin-number sch-pin-number" x="588.863591368015" y="457.226291823436" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="66.81845179173px" transform=""></text><text class="pin-number sch-pin-label" x="689.09126905561" y="466.135418729" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="start" dominant-baseline="middle" font-size="66.81845179173px" transform="">GND</text><line class="component-pin sch-component-pin sch-port-line" x1="644.54563452779" y1="510.68105325681995" x2="533.18154820824" y2="510.68105325681995" stroke-width="8.909126905564px"/><g class="sch-port" data-schematic-port-id="source_port_0_2__stack1"><rect x="524.272421302676" y="501.77192635125596" width="17.818253811128" height="17.818253811128" opacity="0"/></g><text class="pin-number sch-pin-number" x="588.863591368015" y="501.77192635125596" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="66.81845179173px" transform=""></text><text class="pin-number sch-pin-label" x="689.09126905561" y="510.68105325681995" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="start" dominant-baseline="middle" font-size="66.81845179173px" transform="">EN</text><line class="component-pin sch-component-pin sch-port-line" x1="689.09126905561" y1="421.58978420118" x2="791.546228469596" y2="421.58978420118" stroke-width="8.909126905564px"/><g class="sch-port" data-schematic-port-id="source_port_0_3__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="800.45535537516" cy="421.58978420118" r="8.909126905564" stroke-width="8.909126905564px"/><rect x="791.546228469596" y="412.680657295616" width="17.818253811128" height="17.818253811128" opacity="0"/></g><text class="pin-number sch-pin-number" x="744.773312215385" y="412.68065729561596" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="66.81845179173px" transform=""></text><text class="pin-number sch-pin-label" x="644.54563452779" y="421.58978420118" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="66.81845179173px" transform="">OUT</text><line class="component-pin sch-component-pin sch-port-line" x1="689.09126905561" y1="466.135418729" x2="791.546228469596" y2="466.135418729" stroke-width="8.909126905564px"/><g class="sch-port" data-schematic-port-id="source_port_0_4__stack1"><circle class="component-pin sch-component-pin sch-port-terminal" cx="800.45535537516" cy="466.135418729" r="8.909126905564" stroke-width="8.909126905564px"/><rect x="791.546228469596" y="457.226291823436" width="17.818253811128" height="17.818253811128" opacity="0"/></g><text class="pin-number sch-pin-number" x="744.773312215385" y="457.226291823436" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="middle" dominant-baseline="auto" font-size="66.81845179173px" transform=""></text><text class="pin-number sch-pin-label" x="644.54563452779" y="466.135418729" style="font-family: sans-serif;" fill="rgb(169, 0, 0)" text-anchor="end" dominant-baseline="middle" font-size="66.81845179173px" transform="">NC</text></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_0__stack1"><circle cx="533.18154820824" cy="421.58978420118" r="17.818253811128" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_1__stack1"><circle cx="533.18154820824" cy="466.135418729" r="17.818253811128" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_2__stack1"><circle cx="533.18154820824" cy="510.68105325681995" r="17.818253811128" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_3__stack1"><circle cx="800.45535537516" cy="421.58978420118" r="17.818253811128" fill="red" opacity="0"/></g><g class="schematic-port-hover sch-port-hover" data-schematic-port-id="source_port_0_4__stack1"><circle cx="800.45535537516" cy="466.135418729" r="17.818253811128" fill="red" opacity="0"/></g><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" d="
72
+ M 488.63591368042,421.58978420118
73
+ L 444.09027915260003,397.5351415561572
74
+ L 444.09027915260003,244.77331221541985
75
+ L 533.18154820824,244.77331221541985
76
+ L 533.18154820824,397.5351415561572
77
+ Z
78
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="8.909126905564px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_0__stack1" x="488.63591368042" y="381.49871312614204" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="80.18214215007599px" transform="rotate(-90 488.63591368042 381.49871312614204)">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" d="
79
+ M 399.54464462477995,466.135418729
80
+ L 375.49000197975715,510.68105325681995
81
+ L 222.7281726390198,510.68105325681995
82
+ L 222.7281726390198,421.58978420117995
83
+ L 375.49000197975715,421.58978420118
84
+ Z
85
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="8.909126905564px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_1__stack1" x="359.453573549742" y="466.135418729" fill="rgb(132, 0, 0)" text-anchor="end" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="80.18214215007599px" transform="">XX</text><path class="net-label sch-net-label" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" d="
86
+ M 800.45535537516,421.58978420118
87
+ L 824.5099980201828,377.04414967336004
88
+ L 977.2718273609202,377.04414967336004
89
+ L 977.2718273609202,466.135418729
90
+ L 824.5099980201828,466.135418729
91
+ Z
92
+ " fill="rgba(255, 255, 255, 0.6)" stroke="rgb(132, 0, 0)" stroke-width="8.909126905564px"/><text class="net-label-text sch-net-label-text" data-circuit-json-type="schematic_net_label" data-schematic-net-label-id="schematic_net_label_2__stack1" x="840.546426450198" y="421.58978420118" fill="rgb(132, 0, 0)" text-anchor="start" dominant-baseline="central" font-family="sans-serif" font-variant-numeric="tabular-nums" font-size="80.18214215007599px" transform="">XX</text>
93
+ </g>
94
+ </svg>