circuit-json-to-lbrn 0.0.42 → 0.0.44

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 (96) hide show
  1. package/dist/index.d.ts +12 -1
  2. package/dist/index.js +238 -15
  3. package/lib/ConvertContext.ts +12 -0
  4. package/lib/createCopperCutFillForLayer.ts +217 -0
  5. package/lib/element-handlers/addPcbTrace/index.ts +35 -13
  6. package/lib/getManifold.ts +31 -0
  7. package/lib/index.ts +72 -4
  8. package/package.json +3 -2
  9. package/site/index.html +24 -1
  10. package/site/main.tsx +8 -0
  11. package/tests/basics/__snapshots__/board-outline-does-not-appear-in soldermask.snap.svg +1 -1
  12. package/tests/basics/__snapshots__/board-outline.snap.svg +1 -1
  13. package/tests/basics/__snapshots__/mixed-soldermask-margins.snap.svg +1 -1
  14. package/tests/basics/addPcbCutout/__snapshots__/pcb-cutout-circle.snap.svg +1 -1
  15. package/tests/basics/addPcbCutout/__snapshots__/pcb-cutout-path.snap.svg +1 -1
  16. package/tests/basics/addPcbCutout/__snapshots__/pcb-cutout-polygon.snap.svg +1 -1
  17. package/tests/basics/addPcbCutout/__snapshots__/pcb-cutout-rect.snap.svg +1 -1
  18. package/tests/basics/addPcbCutout/pcb-cutout-circle.test.ts +1 -1
  19. package/tests/basics/addPcbCutout/pcb-cutout-path.test.ts +1 -1
  20. package/tests/basics/addPcbCutout/pcb-cutout-polygon.test.ts +1 -1
  21. package/tests/basics/addPcbCutout/pcb-cutout-rect.test.ts +1 -1
  22. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-circle.snap.svg +1 -1
  23. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-oval.snap.svg +1 -1
  24. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-pill.snap.svg +1 -1
  25. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-rect.snap.svg +1 -1
  26. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-rotated-pill.snap.svg +1 -1
  27. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-soldermask-margin.snap.svg +1 -1
  28. package/tests/basics/addPcbHole/__snapshots__/pcb-hole-with-soldermask.snap.svg +1 -1
  29. package/tests/basics/addPcbHole/pcb-hole-circle.test.ts +1 -1
  30. package/tests/basics/addPcbHole/pcb-hole-oval.test.ts +1 -1
  31. package/tests/basics/addPcbHole/pcb-hole-pill.test.ts +1 -1
  32. package/tests/basics/addPcbHole/pcb-hole-rect.test.ts +1 -1
  33. package/tests/basics/addPcbHole/pcb-hole-rotated-pill.test.ts +1 -1
  34. package/tests/basics/addPcbHole/pcb-hole-soldermask-margin.test.ts +1 -1
  35. package/tests/basics/addPcbHole/pcb-hole-with-soldermask.test.ts +1 -1
  36. package/tests/basics/addPcbVia/__snapshots__/pcb-via-basic.snap.svg +1 -1
  37. package/tests/basics/addPcbVia/__snapshots__/pcb-via-with-net.snap.svg +1 -1
  38. package/tests/basics/addPcbVia/__snapshots__/pcb-via-with-soldermask.snap.svg +1 -1
  39. package/tests/basics/addPcbVia/pcb-via-basic.test.ts +1 -1
  40. package/tests/basics/addPcbVia/pcb-via-with-net.test.ts +1 -1
  41. package/tests/basics/addPcbVia/pcb-via-with-soldermask.test.ts +1 -1
  42. package/tests/basics/addPlatedHole/__snapshots__/pcb-plated-hole-circular-hole-with-rect-pad.snap.svg +1 -1
  43. package/tests/basics/addPlatedHole/__snapshots__/pcb-plated-hole-oval.snap.svg +1 -1
  44. package/tests/basics/addPlatedHole/__snapshots__/pcb-plated-hole-pill-with-rect-pad.snap.svg +1 -1
  45. package/tests/basics/addPlatedHole/__snapshots__/pcb-plated-hole-pill.snap.svg +1 -1
  46. package/tests/basics/addPlatedHole/__snapshots__/pcb-plated-hole-polygon.snap.svg +1 -1
  47. package/tests/basics/addPlatedHole/__snapshots__/pcb-plated-hole-rotated-pill-with-rect-pad.snap.svg +1 -1
  48. package/tests/basics/addPlatedHole/pcb-plated-hole-circle.test.ts +1 -1
  49. package/tests/basics/addPlatedHole/pcb-plated-hole-circular-hole-with-rect-pad.test.ts +1 -1
  50. package/tests/basics/addPlatedHole/pcb-plated-hole-oval.test.ts +1 -1
  51. package/tests/basics/addPlatedHole/pcb-plated-hole-pill-with-rect-pad.test.ts +1 -1
  52. package/tests/basics/addPlatedHole/pcb-plated-hole-pill.test.ts +1 -1
  53. package/tests/basics/addPlatedHole/pcb-plated-hole-polygon.test.ts +1 -1
  54. package/tests/basics/addPlatedHole/pcb-plated-hole-rotated-pill-with-rect-pad.test.ts +1 -1
  55. package/tests/basics/addSmtPad/__snapshots__/circleSmtPad.snap.svg +1 -1
  56. package/tests/basics/addSmtPad/__snapshots__/pillSmtPad.snap.svg +1 -1
  57. package/tests/basics/addSmtPad/__snapshots__/polygonSmtPad.snap.svg +1 -1
  58. package/tests/basics/addSmtPad/__snapshots__/rotatedPillSmtPad.snap.svg +1 -1
  59. package/tests/basics/addSmtPad/__snapshots__/rotatedRectSmtPad.snap.svg +1 -1
  60. package/tests/basics/addSmtPad/circleSmtPad.test.ts +1 -1
  61. package/tests/basics/addSmtPad/pillSmtPad.test.ts +1 -1
  62. package/tests/basics/addSmtPad/polygonSmtPad.test.ts +1 -1
  63. package/tests/basics/addSmtPad/rotatedPillSmtPad.test.ts +1 -1
  64. package/tests/basics/addSmtPad/rotatedRectSmtPad.test.ts +1 -1
  65. package/tests/basics/board-outline-does-not-appear-in soldermask.test.ts +1 -1
  66. package/tests/basics/board-outline.test.ts +1 -1
  67. package/tests/basics/copper-cut-fill/__snapshots__/copper-cut-fill-basic.snap.svg +8 -0
  68. package/tests/basics/copper-cut-fill/__snapshots__/copper-cut-fill-with-pads.snap.svg +8 -0
  69. package/tests/basics/copper-cut-fill/copper-cut-fill-basic.test.ts +73 -0
  70. package/tests/basics/copper-cut-fill/copper-cut-fill-with-pads.test.ts +128 -0
  71. package/tests/basics/keyboard-defaul60/keyboard-both-layer-includeSoldermask.test.ts +1 -1
  72. package/tests/basics/keyboard-defaul60/keyboard-both-layers.test.ts +1 -1
  73. package/tests/basics/keyboard-defaul60/keyboard-bottom-layer.test.ts +1 -1
  74. package/tests/basics/keyboard-defaul60/keyboard-top-layer.test.ts +1 -1
  75. package/tests/basics/laser-profile.test.ts +4 -4
  76. package/tests/basics/lga-interconnect.test.ts +1 -1
  77. package/tests/basics/mixed-soldermask-margins.test.ts +1 -1
  78. package/tests/basics/single-trace.test.ts +1 -1
  79. package/tests/basics/soldermask/copper-and-soldermask.test.ts +1 -1
  80. package/tests/basics/soldermask/copper-only.test.ts +1 -1
  81. package/tests/basics/soldermask/soldermask-only.test.ts +1 -1
  82. package/tests/basics/soldermask-margin/__snapshots__/percent-soldermask-margin.snap.svg +1 -1
  83. package/tests/basics/soldermask-margin/negative-soldermask-margin.test.ts +1 -1
  84. package/tests/basics/soldermask-margin/percent-soldermask-margin.test.ts +1 -1
  85. package/tests/basics/soldermask-margin/positive-soldermask-margin.test.ts +1 -1
  86. package/tests/basics/trace-margin/pico-w-3x5-led-matrix-trace-margin.test.ts +1 -1
  87. package/tests/basics/trace-margin/trace-margin-basic.test.ts +1 -1
  88. package/tests/basics/trace-margin/trace-margin-error.test.ts +4 -4
  89. package/tests/examples/example01/__snapshots__/example01.snap.svg +1 -1
  90. package/tests/examples/example01/example01.test.ts +1 -1
  91. package/tests/examples/example02/example02.test.ts +1 -1
  92. package/tests/examples/example03/example03.test.ts +1 -1
  93. package/tests/examples/example04/example04.test.ts +1 -1
  94. package/tests/examples/example05/__snapshots__/example05.snap.svg +1 -0
  95. package/tests/examples/example05/example05.circuit.json +9562 -0
  96. package/tests/examples/example05/example05.test.ts +31 -0
@@ -0,0 +1,31 @@
1
+ // Lazy-load the manifold WASM module
2
+ // Supports both Node.js and browser environments with CDN fallback
3
+
4
+ let manifoldInstance: any = null
5
+
6
+ export const getManifold = async () => {
7
+ if (!manifoldInstance) {
8
+ let ManifoldModule: any
9
+
10
+ // Try Node.js import first (for CLI/tests)
11
+ try {
12
+ const moduleName = "manifold-3d"
13
+ ManifoldModule = (await import(/* @vite-ignore */ moduleName)).default
14
+ } catch {
15
+ // Fallback to CDN for browser environments
16
+ try {
17
+ const cdnUrl =
18
+ "https://cdn.jsdelivr.net/npm/manifold-3d@3.0.0/manifold.js"
19
+ ManifoldModule = (await import(/* @vite-ignore */ cdnUrl)).default
20
+ } catch (cdnError) {
21
+ throw new Error(
22
+ `Failed to load manifold-3d: not available in Node.js or via CDN. ${cdnError}`,
23
+ )
24
+ }
25
+ }
26
+
27
+ manifoldInstance = await ManifoldModule()
28
+ manifoldInstance.setup() // Initialize the JS-friendly API
29
+ }
30
+ return manifoldInstance
31
+ }
package/lib/index.ts CHANGED
@@ -16,6 +16,7 @@ import { addPcbHole } from "./element-handlers/addPcbHole"
16
16
  import { addPcbCutout } from "./element-handlers/addPcbCutout"
17
17
  import { createCopperShapesForLayer } from "./createCopperShapesForLayer"
18
18
  import { createTraceClearanceAreasForLayer } from "./createTraceClearanceAreasForLayer"
19
+ import { createCopperCutFillForLayer } from "./createCopperCutFillForLayer"
19
20
 
20
21
  export interface ConvertCircuitJsonToLbrnOptions {
21
22
  includeSilkscreen?: boolean
@@ -28,6 +29,17 @@ export interface ConvertCircuitJsonToLbrnOptions {
28
29
  includeLayers?: Array<"top" | "bottom">
29
30
  traceMargin?: number
30
31
  laserSpotSize?: number
32
+ /**
33
+ * Whether to generate copper cut fill layers.
34
+ * Creates a ring/band around traces and pads that will be laser cut
35
+ * to remove copper, without cutting into the traces or pads themselves.
36
+ */
37
+ includeCopperCutFill?: boolean
38
+ /**
39
+ * Margin to expand the copper outline for the cut fill band (in mm).
40
+ * This determines how wide the band of copper removal will be around traces/pads.
41
+ */
42
+ copperCutFillMargin?: number
31
43
  laserProfile?: {
32
44
  copper?: {
33
45
  speed?: number
@@ -43,10 +55,10 @@ export interface ConvertCircuitJsonToLbrnOptions {
43
55
  }
44
56
  }
45
57
  }
46
- export const convertCircuitJsonToLbrn = (
58
+ export const convertCircuitJsonToLbrn = async (
47
59
  circuitJson: CircuitJson,
48
60
  options: ConvertCircuitJsonToLbrnOptions = {},
49
- ): LightBurnProject => {
61
+ ): Promise<LightBurnProject> => {
50
62
  const db = cju(circuitJson)
51
63
  const project = new LightBurnProject({
52
64
  appVersion: "1.7.03",
@@ -63,6 +75,8 @@ export const convertCircuitJsonToLbrn = (
63
75
  options.globalCopperSoldermaskMarginAdjustment ?? 0
64
76
  const solderMaskMarginPercent = options.solderMaskMarginPercent ?? 0
65
77
  const laserProfile = options.laserProfile
78
+ const includeCopperCutFill = options.includeCopperCutFill ?? false
79
+ const copperCutFillMargin = options.copperCutFillMargin ?? 0.5
66
80
 
67
81
  // Default laser settings from GitHub issue
68
82
  const defaultCopperSettings = {
@@ -134,6 +148,9 @@ export const convertCircuitJsonToLbrn = (
134
148
  })
135
149
  project.children.push(soldermaskCutSetting)
136
150
 
151
+ // Track the next available cut setting index
152
+ let nextCutIndex = 4
153
+
137
154
  // Create trace clearance cut settings if needed
138
155
  let topTraceClearanceAreaCutSetting: CutSetting | undefined
139
156
  let bottomTraceClearanceAreaCutSetting: CutSetting | undefined
@@ -142,7 +159,7 @@ export const convertCircuitJsonToLbrn = (
142
159
  if (includeLayers.includes("top")) {
143
160
  topTraceClearanceAreaCutSetting = new CutSetting({
144
161
  type: "Scan",
145
- index: 4,
162
+ index: nextCutIndex++,
146
163
  name: "Clear Top Trace Clearance Areas",
147
164
  numPasses: 12,
148
165
  speed: 100,
@@ -157,7 +174,7 @@ export const convertCircuitJsonToLbrn = (
157
174
  if (includeLayers.includes("bottom")) {
158
175
  bottomTraceClearanceAreaCutSetting = new CutSetting({
159
176
  type: "Scan",
160
- index: 5,
177
+ index: nextCutIndex++,
161
178
  name: "Clear Bottom Trace Clearance Areas",
162
179
  numPasses: 12,
163
180
  speed: 100,
@@ -170,6 +187,42 @@ export const convertCircuitJsonToLbrn = (
170
187
  }
171
188
  }
172
189
 
190
+ // Create copper cut fill cut settings if needed
191
+ let topCopperCutFillCutSetting: CutSetting | undefined
192
+ let bottomCopperCutFillCutSetting: CutSetting | undefined
193
+
194
+ if (includeCopperCutFill && includeCopper) {
195
+ if (includeLayers.includes("top")) {
196
+ topCopperCutFillCutSetting = new CutSetting({
197
+ type: "Scan",
198
+ index: nextCutIndex++,
199
+ name: "Top Copper Cut Fill",
200
+ numPasses: copperSettings.numPasses,
201
+ speed: copperSettings.speed,
202
+ scanOpt: "individual",
203
+ interval: laserSpotSize,
204
+ angle: 45,
205
+ crossHatch: true,
206
+ })
207
+ project.children.push(topCopperCutFillCutSetting)
208
+ }
209
+
210
+ if (includeLayers.includes("bottom")) {
211
+ bottomCopperCutFillCutSetting = new CutSetting({
212
+ type: "Scan",
213
+ index: nextCutIndex++,
214
+ name: "Bottom Copper Cut Fill",
215
+ numPasses: copperSettings.numPasses,
216
+ speed: copperSettings.speed,
217
+ scanOpt: "individual",
218
+ interval: laserSpotSize,
219
+ angle: 45,
220
+ crossHatch: true,
221
+ })
222
+ project.children.push(bottomCopperCutFillCutSetting)
223
+ }
224
+ }
225
+
173
226
  // Build connectivity map and origin
174
227
  const connMap = getFullConnectivityMapFromCircuitJson(circuitJson)
175
228
  let origin = options.origin
@@ -201,6 +254,11 @@ export const convertCircuitJsonToLbrn = (
201
254
  topTraceClearanceAreaCutSetting,
202
255
  bottomTraceClearanceAreaCutSetting,
203
256
  solderMaskMarginPercent,
257
+ topCopperCutFillCutSetting,
258
+ bottomCopperCutFillCutSetting,
259
+ copperCutFillMargin,
260
+ topTraceEndpoints: new Set(),
261
+ bottomTraceEndpoints: new Set(),
204
262
  }
205
263
 
206
264
  // Initialize net geometry maps
@@ -260,5 +318,15 @@ export const convertCircuitJsonToLbrn = (
260
318
  }
261
319
  }
262
320
 
321
+ // Create copper cut fill for each layer
322
+ if (includeCopperCutFill && includeCopper) {
323
+ if (includeLayers.includes("top")) {
324
+ await createCopperCutFillForLayer({ layer: "top", ctx })
325
+ }
326
+ if (includeLayers.includes("bottom")) {
327
+ await createCopperCutFillForLayer({ layer: "bottom", ctx })
328
+ }
329
+ }
330
+
263
331
  return project
264
332
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "circuit-json-to-lbrn",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.42",
4
+ "version": "0.0.44",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "bun run site/index.html",
@@ -28,6 +28,7 @@
28
28
  "typescript": "^5"
29
29
  },
30
30
  "dependencies": {
31
- "lbrnts": "^0.0.12"
31
+ "lbrnts": "^0.0.13",
32
+ "manifold-3d": "^3.3.2"
32
33
  }
33
34
  }
package/site/index.html CHANGED
@@ -98,6 +98,19 @@
98
98
  class="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-blue-500"
99
99
  />
100
100
  </div>
101
+ <div>
102
+ <label class="block text-sm font-medium text-gray-300 mb-2">
103
+ Copper Cut Fill Margin (mm)
104
+ </label>
105
+ <input
106
+ type="number"
107
+ id="copperCutFillMargin"
108
+ value="0.5"
109
+ step="0.01"
110
+ class="w-full px-4 py-2 bg-gray-700 border border-gray-600 rounded-lg text-white focus:outline-none focus:ring-2 focus:ring-blue-500"
111
+ />
112
+ <p class="text-xs text-gray-500 mt-1">Ring width around traces/pads for copper removal fill</p>
113
+ </div>
101
114
  <div>
102
115
  <label class="block text-sm font-medium text-gray-300 mb-2">
103
116
  Soldermask Margin (mm)
@@ -249,7 +262,7 @@
249
262
  </div>
250
263
  </details>
251
264
  </div>
252
- <div class="md:col-span-2 grid grid-cols-1 md:grid-cols-3 gap-4">
265
+ <div class="md:col-span-2 grid grid-cols-1 md:grid-cols-4 gap-4">
253
266
  <label class="flex items-center cursor-pointer">
254
267
  <input
255
268
  type="checkbox"
@@ -261,6 +274,16 @@
261
274
  Include Copper
262
275
  </span>
263
276
  </label>
277
+ <label class="flex items-center cursor-pointer">
278
+ <input
279
+ type="checkbox"
280
+ id="includeCopperCutFill"
281
+ class="w-5 h-5 text-blue-500 bg-gray-700 border-gray-600 rounded focus:ring-blue-500 focus:ring-2"
282
+ />
283
+ <span class="ml-3 text-sm font-medium text-gray-300">
284
+ Include Copper Cut Fill
285
+ </span>
286
+ </label>
264
287
  <label class="flex items-center cursor-pointer">
265
288
  <input
266
289
  type="checkbox"
package/site/main.tsx CHANGED
@@ -48,6 +48,12 @@ const laserSpotSizeInput = document.getElementById(
48
48
  const includeCopperInput = document.getElementById(
49
49
  "includeCopper",
50
50
  ) as HTMLInputElement
51
+ const includeCopperCutFillInput = document.getElementById(
52
+ "includeCopperCutFill",
53
+ ) as HTMLInputElement
54
+ const copperCutFillMarginInput = document.getElementById(
55
+ "copperCutFillMargin",
56
+ ) as HTMLInputElement
51
57
  const includeSoldermaskInput = document.getElementById(
52
58
  "includeSoldermask",
53
59
  ) as HTMLInputElement
@@ -164,6 +170,8 @@ function getConversionOptions() {
164
170
  y: parseFloat(originYInput.value) || 0,
165
171
  },
166
172
  includeCopper: includeCopperInput.checked,
173
+ includeCopperCutFill: includeCopperCutFillInput.checked,
174
+ copperCutFillMargin: parseFloat(copperCutFillMarginInput.value) || 0.5,
167
175
  includeSoldermask: includeSoldermaskInput.checked,
168
176
  globalCopperSoldermaskMarginAdjustment:
169
177
  parseFloat(globalCopperSoldermaskMarginAdjustmentInput.value) || 0,
@@ -3,6 +3,6 @@
3
3
  <style></style><rect class="boundary" x="0" y="0" fill="#000" width="800" height="600" data-type="pcb_background" data-pcb-layer="global"/><rect class="pcb-boundary" fill="none" stroke="#fff" stroke-width="0.3" x="150" y="50" width="500" height="500" data-type="pcb_boundary" data-pcb-layer="global"/><path class="pcb-board" d="M 150 550 L 650 550 L 650 50 L 150 50 Z" fill="none" stroke="rgba(255, 255, 255, 0.5)" stroke-width="5" data-type="pcb_board" data-pcb-layer="board"/><circle class="pcb-pad" fill="rgb(200, 52, 52)" cx="400" cy="300" r="50" data-type="pcb_smtpad" data-pcb-layer="top"/>
4
4
  </g>
5
5
  <g transform="translate(0, 600) scale(36.199095022624434, 36.199095022624434) translate(10, 10)">
6
- <rect x="-10" y="-10" width="22.1" height="22.1" fill="white"/><g transform="matrix(1 0 0 -1 0 2.0999999999999996)"><g transform="matrix(1,0,0,1,0,0)"><clipPath id="clip-1767470315814-w2ylbxf1o__stack1"><path d="M 2.1 1.1 L 2.095184726672197 1.1980171403295607 L 2.0807852804032305 1.2950903220161283 L 2.056940335732209 1.3902846772544624 L 2.0238795325112866 1.48268343236509 L 1.981921264348355 1.5713967368259978 L 1.9314696123025454 1.6555702330196023 L 1.873010453362737 1.7343932841636456 L 1.8071067811865476 1.8071067811865476 L 1.7343932841636456 1.873010453362737 L 1.6555702330196023 1.9314696123025454 L 1.571396736825998 1.981921264348355 L 1.48268343236509 2.0238795325112866 L 1.3902846772544624 2.056940335732209 L 1.2950903220161285 2.0807852804032305 L 1.198017140329561 2.095184726672197 L 1.1 2.1 L 1.0019828596704394 2.095184726672197 L 0.9049096779838719 2.0807852804032305 L 0.8097153227455379 2.056940335732209 L 0.7173165676349104 2.0238795325112866 L 0.6286032631740024 1.981921264348355 L 0.5444297669803981 1.9314696123025454 L 0.4656067158363547 1.8730104533627372 L 0.3928932188134526 1.8071067811865476 L 0.3269895466372631 1.7343932841636456 L 0.26853038769745474 1.6555702330196023 L 0.21807873565164515 1.571396736825998 L 0.17612046748871335 1.48268343236509 L 0.14305966426779126 1.3902846772544626 L 0.11921471959676966 1.2950903220161287 L 0.10481527332780327 1.198017140329561 L 0.10000000000000009 1.1000000000000003 L 0.10481527332780316 1.0019828596704394 L 0.11921471959676966 0.9049096779838717 L 0.14305966426779115 0.809715322745538 L 0.17612046748871324 0.7173165676349105 L 0.21807873565164504 0.6286032631740024 L 0.26853038769745463 0.5444297669803981 L 0.326989546637263 0.4656067158363548 L 0.3928932188134524 0.3928932188134526 L 0.46560671583635427 0.32698954663726343 L 0.5444297669803979 0.26853038769745485 L 0.6286032631740022 0.21807873565164515 L 0.7173165676349098 0.17612046748871357 L 0.8097153227455376 0.14305966426779126 L 0.9049096779838715 0.11921471959676977 L 1.0019828596704397 0.10481527332780316 L 1.0999999999999999 0.10000000000000009 L 1.19801714032956 0.10481527332780316 L 1.2950903220161285 0.11921471959676966 L 1.3902846772544621 0.14305966426779115 L 1.4826834323650901 0.17612046748871346 L 1.5713967368259976 0.21807873565164504 L 1.6555702330196018 0.26853038769745463 L 1.7343932841636458 0.3269895466372632 L 1.8071067811865476 0.3928932188134524 L 1.8730104533627367 0.46560671583635416 L 1.9314696123025454 0.5444297669803979 L 1.981921264348355 0.6286032631740022 L 2.0238795325112866 0.7173165676349097 L 2.056940335732209 0.8097153227455376 L 2.0807852804032305 0.9049096779838713 L 2.095184726672197 1.0019828596704397 L 2.1 1.1 L 2.1 1.1 Z"/></clipPath><g clip-path="url(#clip-1767470315814-w2ylbxf1o__stack1)"><line x1="1.8819090885900998" y1="0.10000000000000009" x2="2.1" y2="0.3180909114099004" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.6273506473629429" y1="0.10000000000000009" x2="2.1" y2="0.5726493526370571" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.3727922061357856" y1="0.10000000000000009" x2="2.1" y2="0.8272077938642143" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.1182337649086285" y1="0.10000000000000009" x2="2.1" y2="1.0817662350913715" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.8636753236814712" y1="0.10000000000000009" x2="2.1" y2="1.3363246763185288" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.6091168824543141" y1="0.10000000000000009" x2="2.1" y2="1.5908831175456861" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.3545584412271572" y1="0.10000000000000009" x2="2.1" y2="1.8454415587728423" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.10000000000000031" x2="2.1" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.3545584412271576" x2="1.8454415587728428" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.6091168824543145" x2="1.590883117545686" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.8636753236814715" x2="1.336324676318529" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.1182337649086287" x2="1.0817662350913717" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.3727922061357856" x2="0.8272077938642147" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.6273506473629427" x2="0.5726493526370575" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.8819090885901" x2="0.3180909114099002" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.8819090885900998" x2="1.8819090885900998" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.6273506473629427" x2="1.6273506473629429" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.3727922061357856" x2="1.3727922061357858" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.1182337649086282" x2="1.1182337649086285" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="0.8636753236814709" x2="0.8636753236814714" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="0.6091168824543141" x2="0.6091168824543147" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="0.354558441227157" x2="0.3545584412271574" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.0999999999999996" y1="0.10000000000000009" x2="0.10000000000000031" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.8454415587728425" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.8454415587728428" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.590883117545686" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.5908831175456861" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.3363246763185288" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.336324676318529" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.0817662350913717" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.081766235091372" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.8272077938642146" y1="0.10000000000000009" x2="0.10000000000000009" y2="0.8272077938642147" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.5726493526370573" y1="0.10000000000000009" x2="0.10000000000000009" y2="0.5726493526370574" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.3180909114099002" y1="0.10000000000000009" x2="0.10000000000000009" y2="0.31809091140990026" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/></g><path d="M 2.1 1.1 L 2.095184726672197 1.1980171403295607 L 2.0807852804032305 1.2950903220161283 L 2.056940335732209 1.3902846772544624 L 2.0238795325112866 1.48268343236509 L 1.981921264348355 1.5713967368259978 L 1.9314696123025454 1.6555702330196023 L 1.873010453362737 1.7343932841636456 L 1.8071067811865476 1.8071067811865476 L 1.7343932841636456 1.873010453362737 L 1.6555702330196023 1.9314696123025454 L 1.571396736825998 1.981921264348355 L 1.48268343236509 2.0238795325112866 L 1.3902846772544624 2.056940335732209 L 1.2950903220161285 2.0807852804032305 L 1.198017140329561 2.095184726672197 L 1.1 2.1 L 1.0019828596704394 2.095184726672197 L 0.9049096779838719 2.0807852804032305 L 0.8097153227455379 2.056940335732209 L 0.7173165676349104 2.0238795325112866 L 0.6286032631740024 1.981921264348355 L 0.5444297669803981 1.9314696123025454 L 0.4656067158363547 1.8730104533627372 L 0.3928932188134526 1.8071067811865476 L 0.3269895466372631 1.7343932841636456 L 0.26853038769745474 1.6555702330196023 L 0.21807873565164515 1.571396736825998 L 0.17612046748871335 1.48268343236509 L 0.14305966426779126 1.3902846772544626 L 0.11921471959676966 1.2950903220161287 L 0.10481527332780327 1.198017140329561 L 0.10000000000000009 1.1000000000000003 L 0.10481527332780316 1.0019828596704394 L 0.11921471959676966 0.9049096779838717 L 0.14305966426779115 0.809715322745538 L 0.17612046748871324 0.7173165676349105 L 0.21807873565164504 0.6286032631740024 L 0.26853038769745463 0.5444297669803981 L 0.326989546637263 0.4656067158363548 L 0.3928932188134524 0.3928932188134526 L 0.46560671583635427 0.32698954663726343 L 0.5444297669803979 0.26853038769745485 L 0.6286032631740022 0.21807873565164515 L 0.7173165676349098 0.17612046748871357 L 0.8097153227455376 0.14305966426779126 L 0.9049096779838715 0.11921471959676977 L 1.0019828596704397 0.10481527332780316 L 1.0999999999999999 0.10000000000000009 L 1.19801714032956 0.10481527332780316 L 1.2950903220161285 0.11921471959676966 L 1.3902846772544621 0.14305966426779115 L 1.4826834323650901 0.17612046748871346 L 1.5713967368259976 0.21807873565164504 L 1.6555702330196018 0.26853038769745463 L 1.7343932841636458 0.3269895466372632 L 1.8071067811865476 0.3928932188134524 L 1.8730104533627367 0.46560671583635416 L 1.9314696123025454 0.5444297669803979 L 1.981921264348355 0.6286032631740022 L 2.0238795325112866 0.7173165676349097 L 2.056940335732209 0.8097153227455376 L 2.0807852804032305 0.9049096779838713 L 2.095184726672197 1.0019828596704397 L 2.1 1.1 L 2.1 1.1 Z" fill="none" stroke="#00FF00" stroke-width="0.1"/></g></g>
6
+ <rect x="-10" y="-10" width="22.1" height="22.1" fill="white"/><g transform="matrix(1 0 0 -1 0 2.0999999999999996)"><g transform="matrix(1,0,0,1,0,0)"><clipPath id="clip-1768711599583-i48y917cs__stack1"><path d="M 2.1 1.1 L 2.095184726672197 1.1980171403295607 L 2.0807852804032305 1.2950903220161283 L 2.056940335732209 1.3902846772544624 L 2.0238795325112866 1.48268343236509 L 1.981921264348355 1.5713967368259978 L 1.9314696123025454 1.6555702330196023 L 1.873010453362737 1.7343932841636456 L 1.8071067811865476 1.8071067811865476 L 1.7343932841636456 1.873010453362737 L 1.6555702330196023 1.9314696123025454 L 1.571396736825998 1.981921264348355 L 1.48268343236509 2.0238795325112866 L 1.3902846772544624 2.056940335732209 L 1.2950903220161285 2.0807852804032305 L 1.198017140329561 2.095184726672197 L 1.1 2.1 L 1.0019828596704394 2.095184726672197 L 0.9049096779838719 2.0807852804032305 L 0.8097153227455379 2.056940335732209 L 0.7173165676349104 2.0238795325112866 L 0.6286032631740024 1.981921264348355 L 0.5444297669803981 1.9314696123025454 L 0.4656067158363547 1.8730104533627372 L 0.3928932188134526 1.8071067811865476 L 0.3269895466372631 1.7343932841636456 L 0.26853038769745474 1.6555702330196023 L 0.21807873565164515 1.571396736825998 L 0.17612046748871335 1.48268343236509 L 0.14305966426779126 1.3902846772544626 L 0.11921471959676966 1.2950903220161287 L 0.10481527332780327 1.198017140329561 L 0.10000000000000009 1.1000000000000003 L 0.10481527332780316 1.0019828596704394 L 0.11921471959676966 0.9049096779838717 L 0.14305966426779115 0.809715322745538 L 0.17612046748871324 0.7173165676349105 L 0.21807873565164504 0.6286032631740024 L 0.26853038769745463 0.5444297669803981 L 0.326989546637263 0.4656067158363548 L 0.3928932188134524 0.3928932188134526 L 0.46560671583635427 0.32698954663726343 L 0.5444297669803979 0.26853038769745485 L 0.6286032631740022 0.21807873565164515 L 0.7173165676349098 0.17612046748871357 L 0.8097153227455376 0.14305966426779126 L 0.9049096779838715 0.11921471959676977 L 1.0019828596704397 0.10481527332780316 L 1.0999999999999999 0.10000000000000009 L 1.19801714032956 0.10481527332780316 L 1.2950903220161285 0.11921471959676966 L 1.3902846772544621 0.14305966426779115 L 1.4826834323650901 0.17612046748871346 L 1.5713967368259976 0.21807873565164504 L 1.6555702330196018 0.26853038769745463 L 1.7343932841636458 0.3269895466372632 L 1.8071067811865476 0.3928932188134524 L 1.8730104533627367 0.46560671583635416 L 1.9314696123025454 0.5444297669803979 L 1.981921264348355 0.6286032631740022 L 2.0238795325112866 0.7173165676349097 L 2.056940335732209 0.8097153227455376 L 2.0807852804032305 0.9049096779838713 L 2.095184726672197 1.0019828596704397 L 2.1 1.1 L 2.1 1.1 Z"/></clipPath><g clip-path="url(#clip-1768711599583-i48y917cs__stack1)"><line x1="1.8819090885900998" y1="0.10000000000000009" x2="2.1" y2="0.3180909114099004" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.6273506473629429" y1="0.10000000000000009" x2="2.1" y2="0.5726493526370571" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.3727922061357856" y1="0.10000000000000009" x2="2.1" y2="0.8272077938642143" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.1182337649086285" y1="0.10000000000000009" x2="2.1" y2="1.0817662350913715" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.8636753236814712" y1="0.10000000000000009" x2="2.1" y2="1.3363246763185288" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.6091168824543141" y1="0.10000000000000009" x2="2.1" y2="1.5908831175456861" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.3545584412271572" y1="0.10000000000000009" x2="2.1" y2="1.8454415587728423" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.10000000000000031" x2="2.1" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.3545584412271576" x2="1.8454415587728428" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.6091168824543145" x2="1.590883117545686" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="0.8636753236814715" x2="1.336324676318529" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.1182337649086287" x2="1.0817662350913717" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.3727922061357856" x2="0.8272077938642147" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.6273506473629427" x2="0.5726493526370575" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.10000000000000009" y1="1.8819090885901" x2="0.3180909114099002" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.8819090885900998" x2="1.8819090885900998" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.6273506473629427" x2="1.6273506473629429" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.3727922061357856" x2="1.3727922061357858" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="1.1182337649086282" x2="1.1182337649086285" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="0.8636753236814709" x2="0.8636753236814714" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="0.6091168824543141" x2="0.6091168824543147" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.1" y1="0.354558441227157" x2="0.3545584412271574" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="2.0999999999999996" y1="0.10000000000000009" x2="0.10000000000000031" y2="2.1" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.8454415587728425" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.8454415587728428" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.590883117545686" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.5908831175456861" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.3363246763185288" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.336324676318529" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="1.0817662350913717" y1="0.10000000000000009" x2="0.10000000000000009" y2="1.081766235091372" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.8272077938642146" y1="0.10000000000000009" x2="0.10000000000000009" y2="0.8272077938642147" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.5726493526370573" y1="0.10000000000000009" x2="0.10000000000000009" y2="0.5726493526370574" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/><line x1="0.3180909114099002" y1="0.10000000000000009" x2="0.10000000000000009" y2="0.31809091140990026" stroke="#00FF00" stroke-width="0.1" stroke-opacity="0.8"/></g><path d="M 2.1 1.1 L 2.095184726672197 1.1980171403295607 L 2.0807852804032305 1.2950903220161283 L 2.056940335732209 1.3902846772544624 L 2.0238795325112866 1.48268343236509 L 1.981921264348355 1.5713967368259978 L 1.9314696123025454 1.6555702330196023 L 1.873010453362737 1.7343932841636456 L 1.8071067811865476 1.8071067811865476 L 1.7343932841636456 1.873010453362737 L 1.6555702330196023 1.9314696123025454 L 1.571396736825998 1.981921264348355 L 1.48268343236509 2.0238795325112866 L 1.3902846772544624 2.056940335732209 L 1.2950903220161285 2.0807852804032305 L 1.198017140329561 2.095184726672197 L 1.1 2.1 L 1.0019828596704394 2.095184726672197 L 0.9049096779838719 2.0807852804032305 L 0.8097153227455379 2.056940335732209 L 0.7173165676349104 2.0238795325112866 L 0.6286032631740024 1.981921264348355 L 0.5444297669803981 1.9314696123025454 L 0.4656067158363547 1.8730104533627372 L 0.3928932188134526 1.8071067811865476 L 0.3269895466372631 1.7343932841636456 L 0.26853038769745474 1.6555702330196023 L 0.21807873565164515 1.571396736825998 L 0.17612046748871335 1.48268343236509 L 0.14305966426779126 1.3902846772544626 L 0.11921471959676966 1.2950903220161287 L 0.10481527332780327 1.198017140329561 L 0.10000000000000009 1.1000000000000003 L 0.10481527332780316 1.0019828596704394 L 0.11921471959676966 0.9049096779838717 L 0.14305966426779115 0.809715322745538 L 0.17612046748871324 0.7173165676349105 L 0.21807873565164504 0.6286032631740024 L 0.26853038769745463 0.5444297669803981 L 0.326989546637263 0.4656067158363548 L 0.3928932188134524 0.3928932188134526 L 0.46560671583635427 0.32698954663726343 L 0.5444297669803979 0.26853038769745485 L 0.6286032631740022 0.21807873565164515 L 0.7173165676349098 0.17612046748871357 L 0.8097153227455376 0.14305966426779126 L 0.9049096779838715 0.11921471959676977 L 1.0019828596704397 0.10481527332780316 L 1.0999999999999999 0.10000000000000009 L 1.19801714032956 0.10481527332780316 L 1.2950903220161285 0.11921471959676966 L 1.3902846772544621 0.14305966426779115 L 1.4826834323650901 0.17612046748871346 L 1.5713967368259976 0.21807873565164504 L 1.6555702330196018 0.26853038769745463 L 1.7343932841636458 0.3269895466372632 L 1.8071067811865476 0.3928932188134524 L 1.8730104533627367 0.46560671583635416 L 1.9314696123025454 0.5444297669803979 L 1.981921264348355 0.6286032631740022 L 2.0238795325112866 0.7173165676349097 L 2.056940335732209 0.8097153227455376 L 2.0807852804032305 0.9049096779838713 L 2.095184726672197 1.0019828596704397 L 2.1 1.1 L 2.1 1.1 Z" fill="none" stroke="#00FF00" stroke-width="0.1" stroke-linecap="round" stroke-linejoin="round"/></g></g>
7
7
  </g>
8
8
  </svg>
@@ -3,6 +3,6 @@
3
3
  <style></style><rect class="boundary" x="0" y="0" fill="#000" width="800" height="600" data-type="pcb_background" data-pcb-layer="global"/><rect class="pcb-boundary" fill="none" stroke="#fff" stroke-width="0.3" x="19.047619047619047" y="157.14285714285717" width="761.9047619047619" height="285.7142857142857" data-type="pcb_boundary" data-pcb-layer="global"/><path class="pcb-board" d="M 19.047619047619047 442.8571428571429 L 780.952380952381 442.8571428571429 L 780.952380952381 157.14285714285717 L 114.28571428571429 157.14285714285717 L 19.047619047619047 252.3809523809524 Z" fill="none" stroke="rgba(255, 255, 255, 0.5)" stroke-width="1.9047619047619049" data-type="pcb_board" data-pcb-layer="board"/><rect class="pcb-pad" fill="rgb(200, 52, 52)" x="190.47619047619048" y="319.0476190476191" width="38.095238095238095" height="57.14285714285714" data-type="pcb_smtpad" data-pcb-layer="top"/><path class="pcb-trace" stroke="rgb(200, 52, 52)" fill="none" d="M 209.52380952380952 347.61904761904765 L 590.4761904761905 347.61904761904765" stroke-width="9.523809523809524" stroke-linecap="round" stroke-linejoin="round" shape-rendering="crispEdges" data-type="pcb_trace" data-pcb-layer="top"/>
4
4
  </g>
5
5
  <g transform="translate(0, 600) scale(13.333333333333334, 13.333333333333334) translate(10, 10)">
6
- <rect x="-10" y="-10" width="60" height="35" fill="white"/><g transform="matrix(1 0 0 -1 0 15)"><g transform="matrix(1,0,0,1,0,0)"><path d="M 0 0 L 40 0 L 40 15 L 5 15 L 0 10 L 0 0 L 0 0 Z" fill="none" stroke="#FF0000" stroke-width="0.1"/></g><g transform="matrix(1,0,0,1,0,0)"><path d="M 29.888675552865575 4.75 L 29.8947620560996 4.745933128559396 L 30 4.725 L 30.1052379439004 4.745933128559396 L 30.1944543648263 4.805545635173699 L 30.254066871440603 4.8947620560996 L 30.275 5 L 30.254066871440603 5.105237943900399 L 30.1944543648263 5.1944543648263 L 30.1052379439004 5.254066871440604 L 30 5.275 L 29.8947620560996 5.254066871440604 L 29.888675552865575 5.25 L 11 5.25 L 11 6.5 L 9 6.5 L 9 3.5 L 11 3.5 L 11 4.75 L 29.888675552865575 4.75 L 29.888675552865575 4.75" fill="none" stroke="#000000" stroke-width="0.1"/></g></g>
6
+ <rect x="-10" y="-10" width="60" height="35" fill="white"/><g transform="matrix(1 0 0 -1 0 15)"><g transform="matrix(1,0,0,1,0,0)"><path d="M 0 0 L 40 0 L 40 15 L 5 15 L 0 10 L 0 0 L 0 0 Z" fill="none" stroke="#FF0000" stroke-width="0.1" stroke-linecap="round" stroke-linejoin="round"/></g><g transform="matrix(1,0,0,1,0,0)"><path d="M 29.888675552865575 4.75 L 29.8947620560996 4.745933128559396 L 30 4.725 L 30.1052379439004 4.745933128559396 L 30.1944543648263 4.805545635173699 L 30.254066871440603 4.8947620560996 L 30.275 5 L 30.254066871440603 5.105237943900399 L 30.1944543648263 5.1944543648263 L 30.1052379439004 5.254066871440604 L 30 5.275 L 29.8947620560996 5.254066871440604 L 29.888675552865575 5.25 L 11 5.25 L 11 6.5 L 9 6.5 L 9 3.5 L 11 3.5 L 11 4.75 L 29.888675552865575 4.75 L 29.888675552865575 4.75" fill="none" stroke="#000000" stroke-width="0.1" stroke-linecap="round" stroke-linejoin="round"/></g></g>
7
7
  </g>
8
8
  </svg>