diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..3c9a7fb
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,13 @@
+# These are supported funding model platforms
+
+github: [mrzealot] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/23creus.yaml b/23creus.yaml
index d063d21..54e288b 100644
--- a/23creus.yaml
+++ b/23creus.yaml
@@ -1,3 +1,4 @@
+# yaml-language-server: $schema=./meta/schema.json
units:
kx: cx
ky: cy
@@ -67,6 +68,78 @@ points:
outlines:
# outer border
+ farouter:
+ - what: polygon
+ points:
+ - ref: matrix_inner_num
+ shift: [13, 13]
+ - ref: matrix_middle_num
+ shift: [13, 13]
+ - ref: matrix_middle_num
+ shift: [-13, 13]
+ - ref: matrix_pinky_num
+ shift: [-13, 13]
+ - ref: matrix_pinky_bottom
+ shift: [-13, -13]
+ - ref: matrix_pinky_bottom
+ shift: [13, -13]
+ - ref: matrix_inner_bottom
+ shift: [-13, -13]
+ - ref: matrix_inner_bottom
+ shift: [13, -13]
+ - ref: mirror_matrix_inner_bottom
+ shift: [13, -13]
+ - ref: mirror_matrix_inner_bottom
+ shift: [-13, -13]
+ - ref: mirror_matrix_pinky_bottom
+ shift: [13, -13]
+ - ref: mirror_matrix_pinky_bottom
+ shift: [-13, -13]
+ - ref: mirror_matrix_pinky_num
+ shift: [-13, 13]
+ - ref: mirror_matrix_middle_num
+ shift: [-13, 13]
+ - ref: mirror_matrix_middle_num
+ shift: [13, 13]
+ - ref: mirror_matrix_inner_num
+ shift: [13, 13]
+
+ compatouter:
+ - what: polygon
+ points:
+ - ref: matrix_inner_num
+ shift: [11, 11]
+ - ref: matrix_middle_num
+ shift: [11, 11]
+ - ref: matrix_middle_num
+ shift: [-11, 11]
+ - ref: matrix_pinky_num
+ shift: [-11, 11]
+ - ref: matrix_pinky_bottom
+ shift: [-11, -11]
+ - ref: matrix_pinky_bottom
+ shift: [11, -11]
+ - ref: matrix_inner_bottom
+ shift: [-11, -11]
+ - ref: matrix_inner_bottom
+ shift: [11, -11]
+ - ref: mirror_matrix_inner_bottom
+ shift: [11, -11]
+ - ref: mirror_matrix_inner_bottom
+ shift: [-11, -11]
+ - ref: mirror_matrix_pinky_bottom
+ shift: [11, -11]
+ - ref: mirror_matrix_pinky_bottom
+ shift: [-11, -11]
+ - ref: mirror_matrix_pinky_num
+ shift: [-11, 11]
+ - ref: mirror_matrix_middle_num
+ shift: [-11, 11]
+ - ref: mirror_matrix_middle_num
+ shift: [11, 11]
+ - ref: mirror_matrix_inner_num
+ shift: [11, 11]
+
outer:
- what: polygon
points:
@@ -112,14 +185,14 @@ outlines:
aggregate.parts:
- matrix_inner_bottom
- mirror_matrix_inner_bottom
- shift: [0, 0]
+ shift: [0, 40]
# 14mm holes for cherry switches
keyholes:
- what: rectangle
where: true
asym: source
- size: 13.5
+ size: 13.8
# keycaps
keycaps:
@@ -134,6 +207,21 @@ outlines:
- -keyholes
- -chip
+ # far outer switchplate
+ farouterswitchplate:
+ - farouter
+ - -keyholes
+ - -chip
+
+cases:
+ laser:
+ - name: farouterswitchplate
+ extrude: 6.5
+ - name: compatouter
+ extrude: 5.2
+ shift: [0, 0, 1.3]
+ operation: subtract
+
pcbs:
main:
outlines:
@@ -149,14 +237,7 @@ pcbs:
to: "{{column_net}}"
keycaps: true
hotswap: true
- #led:
- # what: rgb
- # where: true
- # adjust:
- # shift: [0, -5]
- # params:
- # din: "{{label}}"
- # dout: P02
+
diode:
what: diode
where: true
@@ -164,8 +245,9 @@ pcbs:
from: "{{colrow}}"
to: "{{row_net}}"
adjust:
- shift: [-8, -0]
- rotate: 90
+ shift: [0, -5]
+ rotate: 180
+
reset:
what: button
params:
@@ -177,6 +259,7 @@ pcbs:
- matrix_inner_bottom
- mirror_matrix_inner_bottom
rotate: 90
+
mcu:
what: promicro
where:
diff --git a/23treus.yaml b/23treus.yaml
index 56ffaaf..2984107 100644
--- a/23treus.yaml
+++ b/23treus.yaml
@@ -145,6 +145,8 @@ outlines:
- -keyholes
- -chip
+cases:
+
pcbs:
main:
outlines:
diff --git a/license.md b/LICENSE
similarity index 100%
rename from license.md
rename to LICENSE
diff --git a/Makefile b/Makefile
index e732de1..60e09c0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
all: node_modules
- node src/cli.js 23creus.yaml -o output
- cp output/pcbs/main.kicad_pcb kicad/45treus/
+ node src/cli.js 23creus.yaml -d -o output
+ cp output/pcbs/main.kicad_pcb kicad/23creus/
node_modules:
npm ci
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ae404e1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,111 @@
+
+# Ergogen
+
+***Ergonomic Keyboard Generator***
+
+
+
+
+
+The project aims to provide a common configuration format to describe ***ergonomic*** 2D layouts and generate automatic plates, cases, as well as un-routed PCBs for them. The project grew out of (and is an integral part of) the [Absolem keyboard], and shares its [Discord] server as well.
+
+
+
+
+
+
+
+---
+
+[![Button WebUI]][WebUI]
+[![Button Documentation]][Documentation]
+[![Button Discord]][Discord]
+[![Button Donate]][Donate]
+
+---
+
+
+
+
+
+
+## Getting Started
+
+Until there's a proper "Getting started" guide, try getting acquainted with **Ergogen** by following these steps in order:
+
+
+
+1. Read the **[Documentation]**.
+
+ D'uuh.
+ They're not complete by any measure, but should give you a fairly good idea what you're dealing with here.
+
+
+
+2. Try one of the web-based deployments.
+
+ [![Button Official]][WebUI]
+ [![Button Unofficial]][Unofficial]
+
+ The unofficial deployment is probably better, tbh, and will soon be replacing the official one.
+ Choose either one, then click things, look at outputs and see if things start to make sense.
+
+ There is no need for you to download the **CLI** unless you want to do one of the following:
+
+ - Preview in-development features
+ - Use custom modifications
+ - Contribute code
+
+
+
+3. Search the [`ergogen`][Topic] topic on GitHub.
+
+ There, you can look at (and reverse engineer) a variety of real life configs using **Ergogen**.
+ Pop them into the web UI to see what they do, tinker with them and things should start to make more sense.
+
+
+
+4. If a question persists after all of the above, feel free to ask it over on **[Discord]** and we'll do our best to help you out.
+
+
+
+## Contributions
+
+Feature ideas, documentation improvements, examples, tests, or pull requests welcome!
+Get in touch on our **[Discord]**, and we can definitely find something you can help with, if you'd like to.
+
+
+
+## Sponsors
+
+Huge thanks go to everyone who chooses to support my work!
+But even huger thanks are due to the following, *distinguished* sponsors:
+
+- [perce](https://madebyperce.com/)
+- [Cache](https://github.com/MvEerd)
+- [Neil Gilmour](https://github.com/neilgilmour)
+- [ochief](https://github.com/ochief)
+- [Alyx Brett](https://github.com/alyx-brett)
+
+
+
+[Absolem keyboard]: https://zealot.hu/absolem
+[Documentation]: https://docs.ergogen.xyz
+[Discord]: http://discord.ergogen.xyz
+[WebUI]: https://ergogen.xyz
+[Unofficial]: https://ergogen.cache.works/
+[Topic]: https://github.com/topics/ergogen
+[Donate]: https://github.com/sponsors/mrzealot
+
+
+
+[Button WebUI]: https://img.shields.io/badge/Deployment-37a779?style=for-the-badge&logoColor=white&logo=AppleArcade
+[Button Unofficial]: https://img.shields.io/badge/Unofficial-yellow?style=for-the-badge
+[Button Official]: https://img.shields.io/badge/Official-37a779?style=for-the-badge
+[Button Documentation]: https://img.shields.io/badge/Documentation-1793D1?style=for-the-badge&logoColor=white&logo=GitBook
+[Button Discord]: https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logoColor=white&logo=Discord
+[Button Donate]: https://img.shields.io/badge/Donate-EA4AAA?style=for-the-badge&logoColor=white&logo=githubsponsors
diff --git a/kicad/23creus/23creus.kicad_prl b/kicad/23creus/23creus.kicad_prl
index ac5a5b3..4beb8e5 100644
--- a/kicad/23creus/23creus.kicad_prl
+++ b/kicad/23creus/23creus.kicad_prl
@@ -1,12 +1,14 @@
{
"board": {
- "active_layer": 0,
+ "active_layer": 37,
"active_layer_preset": "All Layers",
"auto_track_width": true,
+ "hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
+ "images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
diff --git a/kicad/23creus/23creus.kicad_pro b/kicad/23creus/23creus.kicad_pro
index c75a0d5..65fc3e8 100644
--- a/kicad/23creus/23creus.kicad_pro
+++ b/kicad/23creus/23creus.kicad_pro
@@ -1,5 +1,6 @@
{
"board": {
+ "3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.049999999999999996,
@@ -44,7 +45,6 @@
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
- "45_degree_only": false,
"min_clearance": 0.508
}
},
@@ -57,32 +57,43 @@
"rule_severities": {
"annular_width": "error",
"clearance": "error",
+ "connection_width": "warning",
"copper_edge_clearance": "error",
+ "copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
- "footprint_type_mismatch": "error",
+ "footprint": "error",
+ "footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
+ "isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
+ "lib_footprint_issues": "warning",
+ "lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
- "padstack": "error",
+ "padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
+ "silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
+ "solder_mask_bridge": "error",
+ "starved_thermal": "error",
+ "text_height": "warning",
+ "text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
@@ -91,32 +102,75 @@
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
- "zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
- "allow_blind_buried_vias": false,
- "allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
+ "min_connection": 0.0,
"min_copper_edge_clearance": 0.075,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
+ "min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
+ "min_text_height": 0.7999999999999999,
+ "min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.19999999999999998,
- "min_via_annular_width": 0.049999999999999996,
+ "min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.39999999999999997,
+ "solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
+ "teardrop_options": [
+ {
+ "td_allow_use_two_tracks": true,
+ "td_curve_segcount": 5,
+ "td_on_pad_in_zone": false,
+ "td_onpadsmd": true,
+ "td_onroundshapesonly": false,
+ "td_ontrackend": false,
+ "td_onviapad": true
+ }
+ ],
+ "teardrop_parameters": [
+ {
+ "td_curve_segcount": 0,
+ "td_height_ratio": 1.0,
+ "td_length_ratio": 0.5,
+ "td_maxheight": 2.0,
+ "td_maxlen": 1.0,
+ "td_target_name": "td_round_shape",
+ "td_width_to_size_filter_ratio": 0.9
+ },
+ {
+ "td_curve_segcount": 0,
+ "td_height_ratio": 1.0,
+ "td_length_ratio": 0.5,
+ "td_maxheight": 2.0,
+ "td_maxlen": 1.0,
+ "td_target_name": "td_rect_shape",
+ "td_width_to_size_filter_ratio": 0.9
+ },
+ {
+ "td_curve_segcount": 0,
+ "td_height_ratio": 1.0,
+ "td_length_ratio": 0.5,
+ "td_maxheight": 2.0,
+ "td_maxlen": 1.0,
+ "td_target_name": "td_track_end",
+ "td_width_to_size_filter_ratio": 0.9
+ }
+ ],
"track_widths": [],
"via_dimensions": [],
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
- "layer_presets": []
+ "layer_presets": [],
+ "viewports": []
},
"boards": [],
"cvpcb": {
@@ -338,7 +392,7 @@
"net_settings": {
"classes": [
{
- "bus_width": 12.0,
+ "bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
@@ -352,13 +406,276 @@
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
- "wire_width": 6.0
+ "wire_width": 6
}
],
"meta": {
- "version": 2
+ "version": 3
},
- "net_colors": null
+ "net_colors": null,
+ "netclass_assignments": null,
+ "netclass_patterns": [
+ {
+ "netclass": "Default",
+ "pattern": ""
+ },
+ {
+ "netclass": "Default",
+ "pattern": "pinky_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P21"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "pinky_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "pinky_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "pinky_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "ring_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P20"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "ring_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "ring_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "ring_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "middle_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P19"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "middle_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "middle_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "middle_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "index_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P18"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "index_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "index_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "index_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "inner_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P15"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "inner_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "inner_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "inner_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "thumb_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P14"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_pinky_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P2"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_pinky_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_pinky_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_pinky_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_ring_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P3"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_ring_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_ring_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_ring_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_middle_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P4"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_middle_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_middle_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_middle_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_index_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P5"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_index_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_index_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_index_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_inner_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P6"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_inner_home"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_inner_top"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_inner_num"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "mirror_thumb_bottom"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P7"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P16"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P10"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P9"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P8"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "RST"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "GND"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "RAW"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "VCC"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P1"
+ },
+ {
+ "netclass": "Default",
+ "pattern": "P0"
+ }
+ ]
},
"pcbnew": {
"last_paths": {
diff --git a/kicad/23creus/main.kicad_pcb b/kicad/23creus/main.kicad_pcb
new file mode 100644
index 0000000..ee475df
--- /dev/null
+++ b/kicad/23creus/main.kicad_pcb
@@ -0,0 +1,7254 @@
+
+
+(kicad_pcb (version 20171130) (host pcbnew 5.1.6)
+
+ (page A3)
+ (title_block
+ (title main)
+ (rev v1.0.0)
+ (company Unknown)
+ )
+
+ (general
+ (thickness 1.6)
+ )
+
+ (layers
+ (0 F.Cu signal)
+ (31 B.Cu signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.25)
+ (trace_clearance 0.2)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2)
+ (via_size 0.8)
+ (via_drill 0.4)
+ (via_min_size 0.4)
+ (via_min_drill 0.3)
+ (uvia_size 0.3)
+ (uvia_drill 0.1)
+ (uvias_allowed no)
+ (uvia_min_size 0.2)
+ (uvia_min_drill 0.1)
+ (edge_width 0.05)
+ (segment_width 0.2)
+ (pcb_text_width 0.3)
+ (pcb_text_size 1.5 1.5)
+ (mod_edge_width 0.12)
+ (mod_text_size 1 1)
+ (mod_text_width 0.15)
+ (pad_size 1.524 1.524)
+ (pad_drill 0.762)
+ (pad_to_mask_clearance 0.05)
+ (aux_axis_origin 0 0)
+ (visible_elements FFFFFF7F)
+ (pcbplotparams
+ (layerselection 0x010fc_ffffffff)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (usegerberadvancedattributes true)
+ (creategerberjobfile true)
+ (excludeedgelayer true)
+ (linewidth 0.100000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15.000000)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+(net 1 "pinky_bottom")
+(net 2 "P21")
+(net 3 "pinky_home")
+(net 4 "pinky_top")
+(net 5 "pinky_num")
+(net 6 "ring_bottom")
+(net 7 "P20")
+(net 8 "ring_home")
+(net 9 "ring_top")
+(net 10 "ring_num")
+(net 11 "middle_bottom")
+(net 12 "P19")
+(net 13 "middle_home")
+(net 14 "middle_top")
+(net 15 "middle_num")
+(net 16 "index_bottom")
+(net 17 "P18")
+(net 18 "index_home")
+(net 19 "index_top")
+(net 20 "index_num")
+(net 21 "inner_bottom")
+(net 22 "P15")
+(net 23 "inner_home")
+(net 24 "inner_top")
+(net 25 "inner_num")
+(net 26 "thumb_bottom")
+(net 27 "P14")
+(net 28 "mirror_pinky_bottom")
+(net 29 "P2")
+(net 30 "mirror_pinky_home")
+(net 31 "mirror_pinky_top")
+(net 32 "mirror_pinky_num")
+(net 33 "mirror_ring_bottom")
+(net 34 "P3")
+(net 35 "mirror_ring_home")
+(net 36 "mirror_ring_top")
+(net 37 "mirror_ring_num")
+(net 38 "mirror_middle_bottom")
+(net 39 "P4")
+(net 40 "mirror_middle_home")
+(net 41 "mirror_middle_top")
+(net 42 "mirror_middle_num")
+(net 43 "mirror_index_bottom")
+(net 44 "P5")
+(net 45 "mirror_index_home")
+(net 46 "mirror_index_top")
+(net 47 "mirror_index_num")
+(net 48 "mirror_inner_bottom")
+(net 49 "P6")
+(net 50 "mirror_inner_home")
+(net 51 "mirror_inner_top")
+(net 52 "mirror_inner_num")
+(net 53 "mirror_thumb_bottom")
+(net 54 "P7")
+(net 55 "P16")
+(net 56 "P10")
+(net 57 "P9")
+(net 58 "P8")
+(net 59 "RST")
+(net 60 "GND")
+(net 61 "RAW")
+(net 62 "VCC")
+(net 63 "P1")
+(net 64 "P0")
+
+ (net_class Default "This is the default net class."
+ (clearance 0.2)
+ (trace_width 0.25)
+ (via_dia 0.8)
+ (via_drill 0.4)
+ (uvia_dia 0.3)
+ (uvia_drill 0.1)
+ (add_net "")
+(add_net "pinky_bottom")
+(add_net "P21")
+(add_net "pinky_home")
+(add_net "pinky_top")
+(add_net "pinky_num")
+(add_net "ring_bottom")
+(add_net "P20")
+(add_net "ring_home")
+(add_net "ring_top")
+(add_net "ring_num")
+(add_net "middle_bottom")
+(add_net "P19")
+(add_net "middle_home")
+(add_net "middle_top")
+(add_net "middle_num")
+(add_net "index_bottom")
+(add_net "P18")
+(add_net "index_home")
+(add_net "index_top")
+(add_net "index_num")
+(add_net "inner_bottom")
+(add_net "P15")
+(add_net "inner_home")
+(add_net "inner_top")
+(add_net "inner_num")
+(add_net "thumb_bottom")
+(add_net "P14")
+(add_net "mirror_pinky_bottom")
+(add_net "P2")
+(add_net "mirror_pinky_home")
+(add_net "mirror_pinky_top")
+(add_net "mirror_pinky_num")
+(add_net "mirror_ring_bottom")
+(add_net "P3")
+(add_net "mirror_ring_home")
+(add_net "mirror_ring_top")
+(add_net "mirror_ring_num")
+(add_net "mirror_middle_bottom")
+(add_net "P4")
+(add_net "mirror_middle_home")
+(add_net "mirror_middle_top")
+(add_net "mirror_middle_num")
+(add_net "mirror_index_bottom")
+(add_net "P5")
+(add_net "mirror_index_home")
+(add_net "mirror_index_top")
+(add_net "mirror_index_num")
+(add_net "mirror_inner_bottom")
+(add_net "P6")
+(add_net "mirror_inner_home")
+(add_net "mirror_inner_top")
+(add_net "mirror_inner_num")
+(add_net "mirror_thumb_bottom")
+(add_net "P7")
+(add_net "P16")
+(add_net "P10")
+(add_net "P9")
+(add_net "P8")
+(add_net "RST")
+(add_net "GND")
+(add_net "RAW")
+(add_net "VCC")
+(add_net "P1")
+(add_net "P0")
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 0 0 -23)
+
+
+ (fp_text reference "S1" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 1 "pinky_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 7.4238914 -17.4895922 -23)
+
+
+ (fp_text reference "S2" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 3 "pinky_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 14.8477829 -34.9791844 -23)
+
+
+ (fp_text reference "S3" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 4 "pinky_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 22.2716743 -52.4687766 -23)
+
+
+ (fp_text reference "S4" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 5 "pinky_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 18.5922643 3.5465065 -23)
+
+
+ (fp_text reference "S5" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 6 "ring_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 26.0161557 -13.9430858 -23)
+
+
+ (fp_text reference "S6" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 8 "ring_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 33.4400472 -31.432678 -23)
+
+
+ (fp_text reference "S7" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 9 "ring_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 40.8639386 -48.9222702 -23)
+
+
+ (fp_text reference "S8" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 10 "ring_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 37.5752597 6.1725081 -23)
+
+
+ (fp_text reference "S9" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 11 "middle_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 44.9991512 -11.3170841 -23)
+
+
+ (fp_text reference "S10" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 13 "middle_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 52.4230426 -28.8066764 -23)
+
+
+ (fp_text reference "S11" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 14 "middle_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 59.8469341 -46.2962686 -23)
+
+
+ (fp_text reference "S12" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 15 "middle_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 52.6509439 18.0035582 -23)
+
+
+ (fp_text reference "S13" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 16 "index_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 60.0748353 0.513966 -23)
+
+
+ (fp_text reference "S14" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 18 "index_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 67.4987268 -16.9756262 -23)
+
+
+ (fp_text reference "S15" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 19 "index_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 74.9226182 -34.4652184 -23)
+
+
+ (fp_text reference "S16" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 20 "index_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 67.3358969 30.7551132 -23)
+
+
+ (fp_text reference "S17" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 21 "inner_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 74.7597883 13.265521 -23)
+
+
+ (fp_text reference "S18" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 23 "inner_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 82.1836798 -4.2240712 -23)
+
+
+ (fp_text reference "S19" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 24 "inner_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 89.6075712 -21.7136634 -23)
+
+
+ (fp_text reference "S20" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 25 "inner_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 88.272548 28.7785906 -23)
+
+
+ (fp_text reference "S21" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 26 "thumb_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 27 "P14"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 218.545096 0 23)
+
+
+ (fp_text reference "S22" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 28 "mirror_pinky_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 211.1212046 -17.4895922 23)
+
+
+ (fp_text reference "S23" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 30 "mirror_pinky_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 203.6973131 -34.9791844 23)
+
+
+ (fp_text reference "S24" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 31 "mirror_pinky_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 196.2734217 -52.4687766 23)
+
+
+ (fp_text reference "S25" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 32 "mirror_pinky_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 199.9528317 3.5465065 23)
+
+
+ (fp_text reference "S26" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 33 "mirror_ring_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 192.5289403 -13.9430858 23)
+
+
+ (fp_text reference "S27" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 35 "mirror_ring_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 185.1050488 -31.432678 23)
+
+
+ (fp_text reference "S28" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 36 "mirror_ring_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 177.68115740000002 -48.9222702 23)
+
+
+ (fp_text reference "S29" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 37 "mirror_ring_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 180.9698363 6.1725081 23)
+
+
+ (fp_text reference "S30" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 38 "mirror_middle_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 173.5459448 -11.3170841 23)
+
+
+ (fp_text reference "S31" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 40 "mirror_middle_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 166.1220534 -28.8066764 23)
+
+
+ (fp_text reference "S32" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 41 "mirror_middle_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 158.6981619 -46.2962686 23)
+
+
+ (fp_text reference "S33" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 42 "mirror_middle_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 165.89415209999999 18.0035582 23)
+
+
+ (fp_text reference "S34" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 43 "mirror_index_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 158.4702607 0.513966 23)
+
+
+ (fp_text reference "S35" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 45 "mirror_index_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 151.04636920000002 -16.9756262 23)
+
+
+ (fp_text reference "S36" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 46 "mirror_index_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 143.6224778 -34.4652184 23)
+
+
+ (fp_text reference "S37" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 47 "mirror_index_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 151.2091991 30.7551132 23)
+
+
+ (fp_text reference "S38" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 48 "mirror_inner_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 143.7853077 13.265521 23)
+
+
+ (fp_text reference "S39" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 50 "mirror_inner_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 136.3614162 -4.2240712 23)
+
+
+ (fp_text reference "S40" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 51 "mirror_inner_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 128.9375248 -21.7136634 23)
+
+
+ (fp_text reference "S41" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 52 "mirror_inner_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 130.272548 28.7785906 23)
+
+
+ (fp_text reference "S42" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 53 "mirror_thumb_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 54 "P7"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 218.545096 0 23)
+
+
+ (fp_text reference "S43" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 28 "mirror_pinky_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 211.1212046 -17.4895922 23)
+
+
+ (fp_text reference "S44" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 30 "mirror_pinky_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 203.6973131 -34.9791844 23)
+
+
+ (fp_text reference "S45" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 31 "mirror_pinky_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 196.2734217 -52.4687766 23)
+
+
+ (fp_text reference "S46" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 32 "mirror_pinky_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 29 "P2"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 199.9528317 3.5465065 23)
+
+
+ (fp_text reference "S47" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 33 "mirror_ring_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 192.5289403 -13.9430858 23)
+
+
+ (fp_text reference "S48" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 35 "mirror_ring_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 185.1050488 -31.432678 23)
+
+
+ (fp_text reference "S49" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 36 "mirror_ring_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 177.68115740000002 -48.9222702 23)
+
+
+ (fp_text reference "S50" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 37 "mirror_ring_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 34 "P3"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 180.9698363 6.1725081 23)
+
+
+ (fp_text reference "S51" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 38 "mirror_middle_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 173.5459448 -11.3170841 23)
+
+
+ (fp_text reference "S52" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 40 "mirror_middle_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 166.1220534 -28.8066764 23)
+
+
+ (fp_text reference "S53" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 41 "mirror_middle_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 158.6981619 -46.2962686 23)
+
+
+ (fp_text reference "S54" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 42 "mirror_middle_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 39 "P4"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 165.89415209999999 18.0035582 23)
+
+
+ (fp_text reference "S55" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 43 "mirror_index_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 158.4702607 0.513966 23)
+
+
+ (fp_text reference "S56" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 45 "mirror_index_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 151.04636920000002 -16.9756262 23)
+
+
+ (fp_text reference "S57" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 46 "mirror_index_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 143.6224778 -34.4652184 23)
+
+
+ (fp_text reference "S58" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 47 "mirror_index_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 44 "P5"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 151.2091991 30.7551132 23)
+
+
+ (fp_text reference "S59" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 48 "mirror_inner_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 143.7853077 13.265521 23)
+
+
+ (fp_text reference "S60" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 50 "mirror_inner_home"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 136.3614162 -4.2240712 23)
+
+
+ (fp_text reference "S61" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 51 "mirror_inner_top"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 128.9375248 -21.7136634 23)
+
+
+ (fp_text reference "S62" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 52 "mirror_inner_num"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 49 "P6"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 130.272548 28.7785906 23)
+
+
+ (fp_text reference "S63" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 53 "mirror_thumb_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 54 "P7"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 0 0 -23)
+
+
+ (fp_text reference "S64" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 1 "pinky_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 7.4238914 -17.4895922 -23)
+
+
+ (fp_text reference "S65" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 3 "pinky_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 14.8477829 -34.9791844 -23)
+
+
+ (fp_text reference "S66" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 4 "pinky_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 22.2716743 -52.4687766 -23)
+
+
+ (fp_text reference "S67" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 5 "pinky_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "P21"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 18.5922643 3.5465065 -23)
+
+
+ (fp_text reference "S68" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 6 "ring_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 26.0161557 -13.9430858 -23)
+
+
+ (fp_text reference "S69" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 8 "ring_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 33.4400472 -31.432678 -23)
+
+
+ (fp_text reference "S70" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 9 "ring_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 40.8639386 -48.9222702 -23)
+
+
+ (fp_text reference "S71" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 10 "ring_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 7 "P20"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 37.5752597 6.1725081 -23)
+
+
+ (fp_text reference "S72" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 11 "middle_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 44.9991512 -11.3170841 -23)
+
+
+ (fp_text reference "S73" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 13 "middle_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 52.4230426 -28.8066764 -23)
+
+
+ (fp_text reference "S74" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 14 "middle_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 59.8469341 -46.2962686 -23)
+
+
+ (fp_text reference "S75" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 15 "middle_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 12 "P19"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 52.6509439 18.0035582 -23)
+
+
+ (fp_text reference "S76" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 16 "index_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 60.0748353 0.513966 -23)
+
+
+ (fp_text reference "S77" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 18 "index_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 67.4987268 -16.9756262 -23)
+
+
+ (fp_text reference "S78" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 19 "index_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 74.9226182 -34.4652184 -23)
+
+
+ (fp_text reference "S79" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 20 "index_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 17 "P18"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 67.3358969 30.7551132 -23)
+
+
+ (fp_text reference "S80" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 21 "inner_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 74.7597883 13.265521 -23)
+
+
+ (fp_text reference "S81" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 23 "inner_home"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 82.1836798 -4.2240712 -23)
+
+
+ (fp_text reference "S82" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 24 "inner_top"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 89.6075712 -21.7136634 -23)
+
+
+ (fp_text reference "S83" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 25 "inner_num"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 22 "P15"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 88.272548 28.7785906 -23)
+
+
+ (fp_text reference "S84" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 26 "thumb_bottom"))
+ (pad 2 smd rect (at 8.275 -3.75 -23) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 27 "P14"))
+ )
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at -1.9536556 4.6025243 157)
+
+
+ (fp_text reference "D1" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 1 "pinky_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 1 "pinky_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 1 "pinky_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 5.470235799999999 -12.887067900000002 157)
+
+
+ (fp_text reference "D2" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 3 "pinky_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 3 "pinky_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 3 "pinky_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 12.894127300000001 -30.376660100000002 157)
+
+
+ (fp_text reference "D3" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 4 "pinky_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 4 "pinky_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 4 "pinky_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 20.3180187 -47.8662523 157)
+
+
+ (fp_text reference "D4" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 5 "pinky_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 5 "pinky_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 5 "pinky_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 16.6386087 8.1490308 157)
+
+
+ (fp_text reference "D5" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 6 "ring_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 6 "ring_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 6 "ring_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 24.062500099999998 -9.3405615 157)
+
+
+ (fp_text reference "D6" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 8 "ring_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 8 "ring_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 8 "ring_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 31.4863916 -26.8301537 157)
+
+
+ (fp_text reference "D7" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 9 "ring_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 9 "ring_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 9 "ring_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 38.910283 -44.3197459 157)
+
+
+ (fp_text reference "D8" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 10 "ring_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 10 "ring_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 10 "ring_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 35.6216041 10.7750324 157)
+
+
+ (fp_text reference "D9" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 11 "middle_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 11 "middle_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 11 "middle_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 43.0454956 -6.714559800000001 157)
+
+
+ (fp_text reference "D10" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 13 "middle_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 13 "middle_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 13 "middle_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 50.469387000000005 -24.2041521 157)
+
+
+ (fp_text reference "D11" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 14 "middle_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 14 "middle_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 14 "middle_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 57.8932785 -41.6937443 157)
+
+
+ (fp_text reference "D12" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 15 "middle_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 15 "middle_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 15 "middle_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 50.697288300000004 22.6060825 157)
+
+
+ (fp_text reference "D13" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 16 "index_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 16 "index_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 16 "index_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 58.1211797 5.1164903 157)
+
+
+ (fp_text reference "D14" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 18 "index_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 18 "index_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 18 "index_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 65.5450712 -12.373101900000002 157)
+
+
+ (fp_text reference "D15" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 19 "index_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 19 "index_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 19 "index_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 72.9689626 -29.8626941 157)
+
+
+ (fp_text reference "D16" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 20 "index_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 20 "index_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 20 "index_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 65.38224129999999 35.3576375 157)
+
+
+ (fp_text reference "D17" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 21 "inner_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 21 "inner_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 21 "inner_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 72.80613269999999 17.8680453 157)
+
+
+ (fp_text reference "D18" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 23 "inner_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 23 "inner_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 23 "inner_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 80.23002419999999 0.37845309999999976 157)
+
+
+ (fp_text reference "D19" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 24 "inner_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 24 "inner_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 24 "inner_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 87.65391559999999 -17.111139100000003 157)
+
+
+ (fp_text reference "D20" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 25 "inner_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 25 "inner_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 25 "inner_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 86.3188924 33.3811149 157)
+
+
+ (fp_text reference "D21" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 26 "thumb_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 26 "thumb_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 26 "thumb_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 220.4987516 4.6025243 -157)
+
+
+ (fp_text reference "D22" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 28 "mirror_pinky_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 28 "mirror_pinky_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 28 "mirror_pinky_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 213.0748602 -12.887067900000002 -157)
+
+
+ (fp_text reference "D23" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 30 "mirror_pinky_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 30 "mirror_pinky_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 30 "mirror_pinky_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 205.6509687 -30.376660100000002 -157)
+
+
+ (fp_text reference "D24" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 31 "mirror_pinky_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 31 "mirror_pinky_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 31 "mirror_pinky_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 198.2270773 -47.8662523 -157)
+
+
+ (fp_text reference "D25" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 32 "mirror_pinky_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 32 "mirror_pinky_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 32 "mirror_pinky_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 201.90648729999998 8.1490308 -157)
+
+
+ (fp_text reference "D26" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 33 "mirror_ring_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 33 "mirror_ring_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 33 "mirror_ring_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 194.48259589999998 -9.3405615 -157)
+
+
+ (fp_text reference "D27" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 35 "mirror_ring_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 35 "mirror_ring_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 35 "mirror_ring_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 187.05870439999998 -26.8301537 -157)
+
+
+ (fp_text reference "D28" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 36 "mirror_ring_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 36 "mirror_ring_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 36 "mirror_ring_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 179.634813 -44.3197459 -157)
+
+
+ (fp_text reference "D29" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 37 "mirror_ring_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 37 "mirror_ring_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 37 "mirror_ring_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 182.9234919 10.7750324 -157)
+
+
+ (fp_text reference "D30" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 38 "mirror_middle_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 38 "mirror_middle_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 38 "mirror_middle_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 175.4996004 -6.714559800000001 -157)
+
+
+ (fp_text reference "D31" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 40 "mirror_middle_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 40 "mirror_middle_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 40 "mirror_middle_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 168.075709 -24.2041521 -157)
+
+
+ (fp_text reference "D32" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 41 "mirror_middle_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 41 "mirror_middle_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 41 "mirror_middle_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 160.6518175 -41.6937443 -157)
+
+
+ (fp_text reference "D33" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 42 "mirror_middle_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 42 "mirror_middle_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 42 "mirror_middle_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 167.84780769999998 22.6060825 -157)
+
+
+ (fp_text reference "D34" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 43 "mirror_index_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 43 "mirror_index_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 43 "mirror_index_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 160.4239163 5.1164903 -157)
+
+
+ (fp_text reference "D35" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 45 "mirror_index_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 45 "mirror_index_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 45 "mirror_index_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 153.0000248 -12.373101900000002 -157)
+
+
+ (fp_text reference "D36" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 46 "mirror_index_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 46 "mirror_index_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 46 "mirror_index_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 145.5761334 -29.8626941 -157)
+
+
+ (fp_text reference "D37" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 47 "mirror_index_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 47 "mirror_index_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 47 "mirror_index_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 153.1628547 35.3576375 -157)
+
+
+ (fp_text reference "D38" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 48 "mirror_inner_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 48 "mirror_inner_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 48 "mirror_inner_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 145.7389633 17.8680453 -157)
+
+
+ (fp_text reference "D39" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 50 "mirror_inner_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 50 "mirror_inner_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 50 "mirror_inner_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 138.3150718 0.37845309999999976 -157)
+
+
+ (fp_text reference "D40" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 51 "mirror_inner_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 51 "mirror_inner_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 51 "mirror_inner_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 130.8911804 -17.111139100000003 -157)
+
+
+ (fp_text reference "D41" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 52 "mirror_inner_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 52 "mirror_inner_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 52 "mirror_inner_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 132.2262036 33.3811149 -157)
+
+
+ (fp_text reference "D42" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 53 "mirror_thumb_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 53 "mirror_thumb_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 53 "mirror_thumb_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 220.4987516 4.6025243 -157)
+
+
+ (fp_text reference "D43" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 28 "mirror_pinky_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 28 "mirror_pinky_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 28 "mirror_pinky_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 213.0748602 -12.887067900000002 -157)
+
+
+ (fp_text reference "D44" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 30 "mirror_pinky_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 30 "mirror_pinky_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 30 "mirror_pinky_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 205.6509687 -30.376660100000002 -157)
+
+
+ (fp_text reference "D45" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 31 "mirror_pinky_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 31 "mirror_pinky_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 31 "mirror_pinky_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 198.2270773 -47.8662523 -157)
+
+
+ (fp_text reference "D46" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 32 "mirror_pinky_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 32 "mirror_pinky_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 32 "mirror_pinky_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 201.90648729999998 8.1490308 -157)
+
+
+ (fp_text reference "D47" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 33 "mirror_ring_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 33 "mirror_ring_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 33 "mirror_ring_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 194.48259589999998 -9.3405615 -157)
+
+
+ (fp_text reference "D48" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 35 "mirror_ring_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 35 "mirror_ring_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 35 "mirror_ring_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 187.05870439999998 -26.8301537 -157)
+
+
+ (fp_text reference "D49" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 36 "mirror_ring_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 36 "mirror_ring_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 36 "mirror_ring_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 179.634813 -44.3197459 -157)
+
+
+ (fp_text reference "D50" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 37 "mirror_ring_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 37 "mirror_ring_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 37 "mirror_ring_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 182.9234919 10.7750324 -157)
+
+
+ (fp_text reference "D51" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 38 "mirror_middle_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 38 "mirror_middle_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 38 "mirror_middle_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 175.4996004 -6.714559800000001 -157)
+
+
+ (fp_text reference "D52" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 40 "mirror_middle_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 40 "mirror_middle_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 40 "mirror_middle_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 168.075709 -24.2041521 -157)
+
+
+ (fp_text reference "D53" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 41 "mirror_middle_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 41 "mirror_middle_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 41 "mirror_middle_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 160.6518175 -41.6937443 -157)
+
+
+ (fp_text reference "D54" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 42 "mirror_middle_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 42 "mirror_middle_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 42 "mirror_middle_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 167.84780769999998 22.6060825 -157)
+
+
+ (fp_text reference "D55" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 43 "mirror_index_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 43 "mirror_index_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 43 "mirror_index_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 160.4239163 5.1164903 -157)
+
+
+ (fp_text reference "D56" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 45 "mirror_index_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 45 "mirror_index_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 45 "mirror_index_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 153.0000248 -12.373101900000002 -157)
+
+
+ (fp_text reference "D57" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 46 "mirror_index_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 46 "mirror_index_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 46 "mirror_index_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 145.5761334 -29.8626941 -157)
+
+
+ (fp_text reference "D58" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 47 "mirror_index_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 47 "mirror_index_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 47 "mirror_index_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 153.1628547 35.3576375 -157)
+
+
+ (fp_text reference "D59" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 48 "mirror_inner_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 48 "mirror_inner_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 48 "mirror_inner_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 145.7389633 17.8680453 -157)
+
+
+ (fp_text reference "D60" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 50 "mirror_inner_home"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 50 "mirror_inner_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 50 "mirror_inner_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 138.3150718 0.37845309999999976 -157)
+
+
+ (fp_text reference "D61" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 51 "mirror_inner_top"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 51 "mirror_inner_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 51 "mirror_inner_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 130.8911804 -17.111139100000003 -157)
+
+
+ (fp_text reference "D62" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 52 "mirror_inner_num"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 52 "mirror_inner_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 52 "mirror_inner_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 132.2262036 33.3811149 -157)
+
+
+ (fp_text reference "D63" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 53 "mirror_thumb_bottom"))
+ (pad 1 smd rect (at -1.65 0 -157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 -157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 53 "mirror_thumb_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 -157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 -157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 53 "mirror_thumb_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at -1.9536556 4.6025243 157)
+
+
+ (fp_text reference "D64" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 1 "pinky_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 1 "pinky_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 1 "pinky_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 5.470235799999999 -12.887067900000002 157)
+
+
+ (fp_text reference "D65" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 3 "pinky_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 3 "pinky_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 3 "pinky_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 12.894127300000001 -30.376660100000002 157)
+
+
+ (fp_text reference "D66" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 4 "pinky_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 4 "pinky_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 4 "pinky_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 20.3180187 -47.8662523 157)
+
+
+ (fp_text reference "D67" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 5 "pinky_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 5 "pinky_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 5 "pinky_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 16.6386087 8.1490308 157)
+
+
+ (fp_text reference "D68" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 6 "ring_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 6 "ring_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 6 "ring_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 24.062500099999998 -9.3405615 157)
+
+
+ (fp_text reference "D69" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 8 "ring_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 8 "ring_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 8 "ring_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 31.4863916 -26.8301537 157)
+
+
+ (fp_text reference "D70" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 9 "ring_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 9 "ring_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 9 "ring_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 38.910283 -44.3197459 157)
+
+
+ (fp_text reference "D71" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 10 "ring_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 10 "ring_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 10 "ring_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 35.6216041 10.7750324 157)
+
+
+ (fp_text reference "D72" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 11 "middle_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 11 "middle_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 11 "middle_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 43.0454956 -6.714559800000001 157)
+
+
+ (fp_text reference "D73" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 13 "middle_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 13 "middle_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 13 "middle_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 50.469387000000005 -24.2041521 157)
+
+
+ (fp_text reference "D74" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 14 "middle_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 14 "middle_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 14 "middle_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 57.8932785 -41.6937443 157)
+
+
+ (fp_text reference "D75" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 15 "middle_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 15 "middle_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 15 "middle_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 50.697288300000004 22.6060825 157)
+
+
+ (fp_text reference "D76" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 16 "index_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 16 "index_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 16 "index_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 58.1211797 5.1164903 157)
+
+
+ (fp_text reference "D77" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 18 "index_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 18 "index_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 18 "index_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 65.5450712 -12.373101900000002 157)
+
+
+ (fp_text reference "D78" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 19 "index_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 19 "index_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 19 "index_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 72.9689626 -29.8626941 157)
+
+
+ (fp_text reference "D79" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 20 "index_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 20 "index_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 20 "index_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 65.38224129999999 35.3576375 157)
+
+
+ (fp_text reference "D80" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 21 "inner_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 21 "inner_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 21 "inner_bottom"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 72.80613269999999 17.8680453 157)
+
+
+ (fp_text reference "D81" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 23 "inner_home"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 56 "P10"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 23 "inner_home"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 56 "P10"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 23 "inner_home"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 80.23002419999999 0.37845309999999976 157)
+
+
+ (fp_text reference "D82" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 24 "inner_top"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 57 "P9"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 24 "inner_top"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 57 "P9"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 24 "inner_top"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 87.65391559999999 -17.111139100000003 157)
+
+
+ (fp_text reference "D83" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 25 "inner_num"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 58 "P8"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 25 "inner_num"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 58 "P8"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 25 "inner_num"))
+ )
+
+
+
+
+ (module ComboDiode (layer F.Cu) (tedit 5B24D78E)
+
+
+ (at 86.3188924 33.3811149 157)
+
+
+ (fp_text reference "D84" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 0.25 0) (end 0.75 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer F.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer F.SilkS) (width 0.1))
+ (fp_line (start 0.25 0) (end 0.75 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 0.4) (end -0.35 0) (layer B.SilkS) (width 0.1))
+ (fp_line (start 0.25 -0.4) (end 0.25 0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end 0.25 -0.4) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.35 0) (end -0.35 -0.55) (layer B.SilkS) (width 0.1))
+ (fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
+
+
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 26 "thumb_bottom"))
+ (pad 1 smd rect (at -1.65 0 157) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) (net 55 "P16"))
+ (pad 2 smd rect (at 1.65 0 157) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) (net 26 "thumb_bottom"))
+
+
+ (pad 1 thru_hole rect (at -3.81 0 157) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) (net 55 "P16"))
+ (pad 2 thru_hole circle (at 3.81 0 157) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) (net 26 "thumb_bottom"))
+ )
+
+
+
+
+ (module E73:SW_TACT_ALPS_SKQGABE010 (layer F.Cu) (tstamp 5BF2CC94)
+
+ (descr "Low-profile SMD Tactile Switch, https://www.e-switch.com/product-catalog/tact/product-lines/tl3342-series-low-profile-smt-tact-switch")
+ (tags "SPST Tactile Switch")
+
+ (at 109.272548 30.7551132 90)
+
+ (fp_text reference "B1" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 2.75 1.25) (end 1.25 2.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.75 -1.25) (end 1.25 -2.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start 2.75 -1.25) (end 2.75 1.25) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.25 2.75) (end 1.25 2.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start -1.25 -2.75) (end 1.25 -2.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.75 1.25) (end -1.25 2.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.75 -1.25) (end -1.25 -2.75) (layer F.SilkS) (width 0.15))
+ (fp_line (start -2.75 -1.25) (end -2.75 1.25) (layer F.SilkS) (width 0.15))
+
+
+ (pad 1 smd rect (at -3.1 -1.85 90) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask) (net 59 "RST"))
+ (pad 1 smd rect (at 3.1 -1.85 90) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask) (net 59 "RST"))
+ (pad 2 smd rect (at -3.1 1.85 90) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask) (net 60 "GND"))
+ (pad 2 smd rect (at 3.1 1.85 90) (size 1.8 1.1) (layers F.Cu F.Paste F.Mask) (net 60 "GND"))
+ )
+
+
+
+
+ (module ProMicro (layer F.Cu) (tedit 5B307E4C)
+ (at 109.272548 34.7551132 270)
+
+
+ (fp_text reference "MCU1" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -19.304 -3.81) (end -14.224 -3.81) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -19.304 3.81) (end -19.304 -3.81) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -14.224 3.81) (end -19.304 3.81) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -14.224 -3.81) (end -14.224 3.81) (layer Dwgs.User) (width 0.15))
+
+
+ (fp_line (start -17.78 8.89) (end 15.24 8.89) (layer F.SilkS) (width 0.15))
+ (fp_line (start 15.24 8.89) (end 15.24 -8.89) (layer F.SilkS) (width 0.15))
+ (fp_line (start 15.24 -8.89) (end -17.78 -8.89) (layer F.SilkS) (width 0.15))
+ (fp_line (start -17.78 -8.89) (end -17.78 8.89) (layer F.SilkS) (width 0.15))
+
+
+
+ (fp_line (start -15.24 6.35) (end -12.7 6.35) (layer F.SilkS) (width 0.15))
+ (fp_line (start -15.24 6.35) (end -15.24 8.89) (layer F.SilkS) (width 0.15))
+ (fp_line (start -12.7 6.35) (end -12.7 8.89) (layer F.SilkS) (width 0.15))
+
+
+ (fp_text user RAW (at -13.97 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user GND (at -11.43 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user RST (at -8.89 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user VCC (at -6.35 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P21 (at -3.81 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P20 (at -1.27 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P19 (at 1.27 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P18 (at 3.81 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P15 (at 6.35 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P14 (at 8.89 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P16 (at 11.43 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P10 (at 13.97 4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+
+ (fp_text user P01 (at -13.97 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P00 (at -11.43 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user GND (at -8.89 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user GND (at -6.35 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P02 (at -3.81 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P03 (at -1.27 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P04 (at 1.27 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P05 (at 3.81 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P06 (at 6.35 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P07 (at 8.89 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P08 (at 11.43 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P09 (at 13.97 -4.8 360) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+
+
+ (pad 1 thru_hole rect (at -13.97 7.62 270) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 61 "RAW"))
+ (pad 2 thru_hole circle (at -11.43 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 60 "GND"))
+ (pad 3 thru_hole circle (at -8.89 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 59 "RST"))
+ (pad 4 thru_hole circle (at -6.35 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 62 "VCC"))
+ (pad 5 thru_hole circle (at -3.81 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 2 "P21"))
+ (pad 6 thru_hole circle (at -1.27 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 7 "P20"))
+ (pad 7 thru_hole circle (at 1.27 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 12 "P19"))
+ (pad 8 thru_hole circle (at 3.81 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 17 "P18"))
+ (pad 9 thru_hole circle (at 6.35 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 22 "P15"))
+ (pad 10 thru_hole circle (at 8.89 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 27 "P14"))
+ (pad 11 thru_hole circle (at 11.43 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 55 "P16"))
+ (pad 12 thru_hole circle (at 13.97 7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 56 "P10"))
+
+ (pad 13 thru_hole circle (at -13.97 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 63 "P1"))
+ (pad 14 thru_hole circle (at -11.43 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 64 "P0"))
+ (pad 15 thru_hole circle (at -8.89 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 60 "GND"))
+ (pad 16 thru_hole circle (at -6.35 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 60 "GND"))
+ (pad 17 thru_hole circle (at -3.81 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 29 "P2"))
+ (pad 18 thru_hole circle (at -1.27 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 34 "P3"))
+ (pad 19 thru_hole circle (at 1.27 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 39 "P4"))
+ (pad 20 thru_hole circle (at 3.81 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 44 "P5"))
+ (pad 21 thru_hole circle (at 6.35 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 49 "P6"))
+ (pad 22 thru_hole circle (at 8.89 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 54 "P7"))
+ (pad 23 thru_hole circle (at 11.43 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 58 "P8"))
+ (pad 24 thru_hole circle (at 13.97 -7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) (net 57 "P9"))
+ )
+
+ (gr_line (start 115.825165 -27.0114006) (end 102.719931 -27.0114006) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 102.719931 -27.0114006) (end 72.9592939 -51.5940058) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 72.9592939 -51.5940058) (end 54.5491969 -59.4086284) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 54.5491969 -59.4086284) (end 16.9739371 -65.58113639999999) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 16.9739371 -65.58113639999999) (end -13.1123598 5.2977372) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start -13.1123598 5.2977372) (end 5.2977372 13.1123598) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 5.2977372 13.1123598) (end 54.223537099999994 36.0528504) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 54.223537099999994 36.0528504) (end 72.6336341 43.867473000000004) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 72.6336341 43.867473000000004) (end 145.9114619 43.867473000000004) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 145.9114619 43.867473000000004) (end 164.3215589 36.0528504) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 164.3215589 36.0528504) (end 213.2473588 13.1123598) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 213.2473588 13.1123598) (end 231.6574558 5.2977372) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 231.6574558 5.2977372) (end 201.5711589 -65.58113639999999) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 201.5711589 -65.58113639999999) (end 163.9958991 -59.4086284) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 163.9958991 -59.4086284) (end 145.5858021 -51.5940058) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 145.5858021 -51.5940058) (end 115.825165 -27.0114006) (angle 90) (layer Edge.Cuts) (width 0.15))
+
+)
+
+
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 8ea82ff..35bdcc7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,86 +1,164 @@
{
"name": "ergogen",
- "version": "4.0.0",
- "lockfileVersion": 2,
+ "version": "4.0.5",
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ergogen",
- "version": "4.0.0",
+ "version": "4.0.5",
"license": "MIT",
"dependencies": {
- "fs-extra": "^10.0.1",
+ "fs-extra": "^11.1.0",
"js-yaml": "^3.14.1",
"jszip": "^3.10.1",
"kle-serial": "github:ergogen/kle-serial#ergogen",
"makerjs": "github:ergogen/maker.js#ergogen",
- "mathjs": "^10.1.1",
- "yargs": "^17.3.1"
+ "mathjs": "^11.5.0",
+ "yargs": "^17.6.2"
},
"bin": {
"ergogen": "src/cli.js"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^21.0.2",
- "@rollup/plugin-json": "^4.1.0",
- "chai": "^4.3.6",
+ "@rollup/plugin-commonjs": "^24.0.1",
+ "@rollup/plugin-json": "^6.0.0",
+ "chai": "^4.3.7",
"chai-as-promised": "^7.1.1",
"dir-compare": "^4.0.0",
- "glob": "^7.2.0",
- "mocha": "^9.2.1",
+ "glob": "^8.1.0",
+ "mocha": "^10.2.0",
"nyc": "^15.1.0",
- "rollup": "^2.68.0"
+ "rollup": "^3.10.1",
+ "sinon": "^15.0.1"
}
},
"node_modules/@ampproject/remapping": {
- "version": "2.1.2",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.0"
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.16.7",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/compat-data": {
- "version": "7.17.7",
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.20.10",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz",
+ "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.17.9",
+ "version": "7.20.12",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz",
+ "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.9",
- "@babel/helper-compilation-targets": "^7.17.7",
- "@babel/helper-module-transforms": "^7.17.7",
- "@babel/helpers": "^7.17.9",
- "@babel/parser": "^7.17.9",
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.17.9",
- "@babel/types": "^7.17.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.20.7",
+ "@babel/helper-compilation-targets": "^7.20.7",
+ "@babel/helper-module-transforms": "^7.20.11",
+ "@babel/helpers": "^7.20.7",
+ "@babel/parser": "^7.20.7",
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.20.12",
+ "@babel/types": "^7.20.7",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
+ "json5": "^2.2.2",
"semver": "^6.3.0"
},
"engines": {
@@ -92,26 +170,44 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.17.9",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/types": "^7.17.0",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.23.6",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.17.7",
+ "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.17.7",
- "@babel/helper-validator-option": "^7.16.7",
- "browserslist": "^4.17.5",
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
+ "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.20.5",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.21.3",
+ "lru-cache": "^5.1.1",
"semver": "^6.3.0"
},
"engines": {
@@ -122,126 +218,143 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.16.7",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.16.7"
- },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.17.9",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/template": "^7.16.7",
- "@babel/types": "^7.17.0"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.16.7",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.16.7",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.17.7",
+ "version": "7.20.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
+ "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-module-imports": "^7.16.7",
- "@babel/helper-simple-access": "^7.17.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/helper-validator-identifier": "^7.16.7",
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.17.3",
- "@babel/types": "^7.17.0"
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-simple-access": "^7.20.2",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.20.10",
+ "@babel/types": "^7.20.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.17.7",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/types": "^7.17.0"
+ "@babel/types": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.16.7",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.16.7",
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.16.7",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.17.9",
+ "version": "7.20.13",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz",
+ "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.17.9",
- "@babel/types": "^7.17.0"
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.20.13",
+ "@babel/types": "^7.20.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.17.9",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@@ -250,8 +363,9 @@
},
"node_modules/@babel/highlight/node_modules/ansi-styles": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -261,8 +375,9 @@
},
"node_modules/@babel/highlight/node_modules/chalk": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -274,37 +389,42 @@
},
"node_modules/@babel/highlight/node_modules/color-convert": {
"version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
},
"node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/highlight/node_modules/supports-color": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
- "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -313,9 +433,10 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.17.9",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
- "license": "MIT",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -324,42 +445,45 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.17.9",
- "license": "MIT",
+ "version": "7.20.13",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
+ "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==",
"dependencies": {
- "regenerator-runtime": "^0.13.4"
+ "regenerator-runtime": "^0.13.11"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template": {
- "version": "7.16.7",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/parser": "^7.16.7",
- "@babel/types": "^7.16.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.17.9",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
+ "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.9",
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.17.9",
- "@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/parser": "^7.17.9",
- "@babel/types": "^7.17.0",
- "debug": "^4.1.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -367,11 +491,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.17.0",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -380,12 +506,14 @@
},
"node_modules/@danmarshall/jscad-typings": {
"version": "1.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/@danmarshall/jscad-typings/-/jscad-typings-1.0.0.tgz",
+ "integrity": "sha512-MGGIGDItK2UQSsz7yTrXErQXDAFXR3UPxyQ7WZ5RHOwnv60CBXjmkJlXYMYPkSvo+7fUuQL2/ODcvECtc/fi9g=="
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
- "license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
@@ -399,8 +527,9 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -411,8 +540,9 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -422,8 +552,9 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -436,8 +567,9 @@
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -447,119 +579,196 @@
},
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.0.5",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.11",
- "dev": true,
- "license": "MIT"
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.4",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "21.1.0",
+ "version": "24.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz",
+ "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@rollup/pluginutils": "^3.1.0",
+ "@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
- "estree-walker": "^2.0.1",
- "glob": "^7.1.6",
- "is-reference": "^1.2.1",
- "magic-string": "^0.25.7",
- "resolve": "^1.17.0"
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.27.0"
},
"engines": {
- "node": ">= 8.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^2.38.3"
+ "rollup": "^2.68.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
"node_modules/@rollup/plugin-json": {
- "version": "4.1.0",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.0.0.tgz",
+ "integrity": "sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@rollup/pluginutils": "^3.0.8"
+ "@rollup/pluginutils": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^1.20.0 || ^2.0.0"
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
"node_modules/@rollup/pluginutils": {
- "version": "3.1.0",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
+ "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@types/estree": "0.0.39",
- "estree-walker": "^1.0.1",
- "picomatch": "^2.2.2"
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
},
"engines": {
- "node": ">= 8.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^1.20.0||^2.0.0"
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
- "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
- "version": "1.0.1",
+ "node_modules/@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
"dev": true,
- "license": "MIT"
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
+ "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0"
+ }
+ },
+ "node_modules/@sinonjs/samsam": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz",
+ "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
+ "dev": true
},
"node_modules/@types/bezier-js": {
"version": "0.0.6",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/@types/bezier-js/-/bezier-js-0.0.6.tgz",
+ "integrity": "sha512-kXsAlt8e8N6zt9R6LcMYWB1HkBw3q2g+M9BdI/UE+s4agIONuIscQaRCoInH22+Jas3rw8yLUehL2InaZjyNSA=="
},
"node_modules/@types/estree": {
- "version": "0.0.39",
- "dev": true,
- "license": "MIT"
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
+ "dev": true
},
"node_modules/@types/node": {
"version": "7.10.14",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.14.tgz",
+ "integrity": "sha512-29GS75BE8asnTno3yB6ubOJOO0FboExEqNJy4bpz0GSmW/8wPTNL4h9h63c6s1uTrOopCmJYe/4yJLh5r92ZUA=="
},
"node_modules/@types/opentype.js": {
"version": "0.7.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/@types/opentype.js/-/opentype.js-0.7.2.tgz",
+ "integrity": "sha512-Riz6WyBUBEFs7YqSsJya3SbDHJZ6BmMkY7bzNoue6rtwj+RNilLc+mgOX/eJ0Y0asq16FSU6DatBeOg8ZMy2UQ=="
},
"node_modules/@types/pdfkit": {
"version": "0.7.36",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.7.36.tgz",
+ "integrity": "sha512-9eRA6MuW+n78yU3HhoIrDxjyAX2++B5MpLDYqHOnaRTquCw+5sYXT+QN8E1eSaxvNUwlRfU3tOm4UzTeGWmBqg==",
"dependencies": {
"@types/node": "*"
}
},
- "node_modules/@ungap/promise-all-settled": {
- "version": "1.1.2",
- "dev": true,
- "license": "ISC"
- },
"node_modules/aggregate-error": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
@@ -570,22 +779,25 @@
},
"node_modules/ansi-colors": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -597,9 +809,10 @@
}
},
"node_modules/anymatch": {
- "version": "3.1.2",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
- "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -610,8 +823,9 @@
},
"node_modules/append-transform": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"default-require-extensions": "^3.0.0"
},
@@ -621,45 +835,52 @@
},
"node_modules/archy": {
"version": "1.0.0",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
+ "dev": true
},
"node_modules/argparse": {
"version": "1.0.10",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/assertion-error": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
},
"node_modules/bezier-js": {
"version": "2.6.1",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.6.1.tgz",
+ "integrity": "sha512-jelZM33eNzcZ9snJ/5HqJLw3IzXvA8RFcBjkdOB8SDYyOvW8Y2tTosojAiBTnD1MhbHoWUYNbxUXxBl61TxbRg=="
},
"node_modules/binary-extensions": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/brace-expansion": {
"version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -667,8 +888,9 @@
},
"node_modules/braces": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -678,11 +900,14 @@
},
"node_modules/browser-stdout": {
"version": "1.3.1",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
},
"node_modules/browserslist": {
- "version": "4.20.2",
+ "version": "4.21.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+ "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
"dev": true,
"funding": [
{
@@ -694,13 +919,11 @@
"url": "https://tidelift.com/funding/github/npm/browserslist"
}
],
- "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001317",
- "electron-to-chromium": "^1.4.84",
- "escalade": "^3.1.1",
- "node-releases": "^2.0.2",
- "picocolors": "^1.0.0"
+ "caniuse-lite": "^1.0.30001400",
+ "electron-to-chromium": "^1.4.251",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.9"
},
"bin": {
"browserslist": "cli.js"
@@ -711,8 +934,9 @@
},
"node_modules/caching-transform": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"hasha": "^5.0.0",
"make-dir": "^3.0.0",
@@ -725,14 +949,17 @@
},
"node_modules/camelcase": {
"version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001332",
+ "version": "1.0.30001447",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001447.tgz",
+ "integrity": "sha512-bdKU1BQDPeEXe9A39xJnGtY0uRq/z5osrnXUw0TcK+EYno45Y+U7QU9HhHEyzvMDffpYadFXi3idnSNkcwLkTw==",
"dev": true,
"funding": [
{
@@ -743,17 +970,17 @@
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
}
- ],
- "license": "CC-BY-4.0"
+ ]
},
"node_modules/chai": {
- "version": "4.3.6",
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
+ "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
+ "deep-eql": "^4.1.2",
"get-func-name": "^2.0.0",
"loupe": "^2.3.1",
"pathval": "^1.1.1",
@@ -765,8 +992,9 @@
},
"node_modules/chai-as-promised": {
"version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
+ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==",
"dev": true,
- "license": "WTFPL",
"dependencies": {
"check-error": "^1.0.2"
},
@@ -776,8 +1004,9 @@
},
"node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -791,8 +1020,9 @@
},
"node_modules/chalk/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -802,14 +1032,17 @@
},
"node_modules/check-error": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/chokidar": {
"version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [
{
@@ -817,7 +1050,6 @@
"url": "https://paulmillr.com/funding/"
}
],
- "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -836,31 +1068,38 @@
},
"node_modules/clean-stack": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/cliui": {
- "version": "7.0.4",
- "license": "ISC",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/clone": {
"version": "1.0.4",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -870,16 +1109,19 @@
},
"node_modules/color-name": {
"version": "1.1.4",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/commondir": {
"version": "1.0.1",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
},
"node_modules/complex.js": {
"version": "2.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.1.1.tgz",
+ "integrity": "sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==",
"engines": {
"node": "*"
},
@@ -890,25 +1132,26 @@
},
"node_modules/concat-map": {
"version": "0.0.1",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
},
"node_modules/convert-source-map": {
- "version": "1.8.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
},
"node_modules/core-util-is": {
"version": "1.0.3",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/cross-spawn": {
"version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -919,9 +1162,10 @@
}
},
"node_modules/debug": {
- "version": "4.3.3",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
@@ -936,89 +1180,105 @@
},
"node_modules/debug/node_modules/ms": {
"version": "2.1.2",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
},
"node_modules/decamelize": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/decimal.js": {
- "version": "10.3.1",
- "license": "MIT"
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA=="
},
"node_modules/deep-eql": {
- "version": "3.0.1",
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
+ "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
- "node": ">=0.12"
+ "node": ">=6"
}
},
"node_modules/default-require-extensions": {
- "version": "3.0.0",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz",
+ "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"strip-bom": "^4.0.0"
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/diff": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
"dev": true,
- "license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dir-compare": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.0.0.tgz",
+ "integrity": "sha512-wC7thVKL3V656tO61rbEDE4LTeeYrUC2pAUL00AaXYghBhjjVNRyBlpH6POzb44ZuK23OSrqF6TbSC/QYeqfAg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"minimatch": "^3.0.4",
"p-limit": "^3.1.0 "
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.111",
- "dev": true,
- "license": "ISC"
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
+ "dev": true
},
"node_modules/emoji-regex": {
"version": "8.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/es6-error": {
"version": "4.1.1",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
},
"node_modules/escalade": {
"version": "3.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"engines": {
"node": ">=6"
}
},
"node_modules/escape-latex": {
"version": "1.2.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz",
+ "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw=="
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -1028,7 +1288,8 @@
},
"node_modules/esprima": {
"version": "4.0.1",
- "license": "BSD-2-Clause",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -1039,13 +1300,15 @@
},
"node_modules/estree-walker": {
"version": "2.0.2",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
},
"node_modules/fill-range": {
"version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -1055,8 +1318,9 @@
},
"node_modules/find-cache-dir": {
"version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
"dev": true,
- "license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
@@ -1071,8 +1335,9 @@
},
"node_modules/find-up": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
- "license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -1086,16 +1351,18 @@
},
"node_modules/flat": {
"version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
- "license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"node_modules/foreground-child": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
"dev": true,
- "license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^3.0.2"
@@ -1106,7 +1373,8 @@
},
"node_modules/fraction.js": {
"version": "4.2.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
+ "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
"engines": {
"node": "*"
},
@@ -1117,6 +1385,8 @@
},
"node_modules/fromentries": {
"version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
+ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==",
"dev": true,
"funding": [
{
@@ -1131,76 +1401,90 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ],
- "license": "MIT"
+ ]
},
"node_modules/fs-extra": {
- "version": "10.0.1",
- "license": "MIT",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
+ "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14.14"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
},
- "node_modules/function-bind": {
- "version": "1.1.1",
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
- "license": "MIT"
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-func-name": {
- "version": "2.0.0",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
+ "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/get-package-type": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/glob": {
- "version": "7.2.0",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dev": true,
- "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
},
"engines": {
- "node": "*"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -1208,8 +1492,9 @@
},
"node_modules/glob-parent": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
- "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1217,53 +1502,60 @@
"node": ">= 6"
}
},
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/globals": {
"version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/graceful-fs": {
"version": "4.2.10",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
"node_modules/graham_scan": {
"version": "1.0.4",
- "license": "MIT"
- },
- "node_modules/growl": {
- "version": "1.10.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4.x"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
+ "resolved": "https://registry.npmjs.org/graham_scan/-/graham_scan-1.0.4.tgz",
+ "integrity": "sha512-jL+zq9xTYXxsDIf+qy9aaudRXx/X4sqrOlbFkg1ElqCznhYAQ/wXv8cifgzRvzFopStDeIvny5sIu6jgSjnRww=="
},
"node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/hasha": {
"version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"is-stream": "^2.0.0",
"type-fest": "^0.8.0"
@@ -1277,41 +1569,47 @@
},
"node_modules/he": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true,
- "license": "MIT",
"bin": {
"he": "bin/he"
}
},
"node_modules/html-escaper": {
"version": "2.0.2",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
},
"node_modules/immediate": {
"version": "3.0.6",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
},
"node_modules/imurmurhash": {
"version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"node_modules/indent-string": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/inflight": {
"version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
- "license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -1319,12 +1617,14 @@
},
"node_modules/inherits": {
"version": "2.0.4",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/is-binary-path": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -1332,36 +1632,28 @@
"node": ">=8"
}
},
- "node_modules/is-core-module": {
- "version": "2.8.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-extglob": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"engines": {
"node": ">=8"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -1371,32 +1663,36 @@
},
"node_modules/is-number": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-plain-obj": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-reference": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"@types/estree": "*"
}
},
"node_modules/is-stream": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -1406,13 +1702,15 @@
},
"node_modules/is-typedarray": {
"version": "1.0.0",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "dev": true
},
"node_modules/is-unicode-supported": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -1422,33 +1720,38 @@
},
"node_modules/is-windows": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/isarray": {
"version": "1.0.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/isexe": {
"version": "2.0.0",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true,
- "license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-hook": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"append-transform": "^2.0.0"
},
@@ -1458,8 +1761,9 @@
},
"node_modules/istanbul-lib-instrument": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
@@ -1471,17 +1775,17 @@
}
},
"node_modules/istanbul-lib-processinfo": {
- "version": "2.0.2",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz",
+ "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==",
"dev": true,
- "license": "ISC",
"dependencies": {
"archy": "^1.0.0",
- "cross-spawn": "^7.0.0",
- "istanbul-lib-coverage": "^3.0.0-alpha.1",
- "make-dir": "^3.0.0",
+ "cross-spawn": "^7.0.3",
+ "istanbul-lib-coverage": "^3.2.0",
"p-map": "^3.0.0",
"rimraf": "^3.0.0",
- "uuid": "^3.3.3"
+ "uuid": "^8.3.2"
},
"engines": {
"node": ">=8"
@@ -1489,8 +1793,9 @@
},
"node_modules/istanbul-lib-report": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
@@ -1502,8 +1807,9 @@
},
"node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -1513,8 +1819,9 @@
},
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
@@ -1524,18 +1831,11 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-source-maps/node_modules/source-map": {
- "version": "0.6.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/istanbul-reports": {
- "version": "3.1.4",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -1546,16 +1846,19 @@
},
"node_modules/javascript-natural-sort": {
"version": "0.7.1",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
+ "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="
},
"node_modules/js-tokens": {
"version": "4.0.0",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -1566,8 +1869,9 @@
},
"node_modules/jsesc": {
"version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
- "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
@@ -1576,8 +1880,9 @@
}
},
"node_modules/json5": {
- "version": "2.2.1",
- "license": "MIT",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"bin": {
"json5": "lib/cli.js"
},
@@ -1587,7 +1892,8 @@
},
"node_modules/jsonfile": {
"version": "6.1.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
"universalify": "^2.0.0"
},
@@ -1597,7 +1903,8 @@
},
"node_modules/jszip": {
"version": "3.10.1",
- "license": "(MIT OR GPL-3.0-or-later)",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
@@ -1605,9 +1912,16 @@
"setimmediate": "^1.0.5"
}
},
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
"node_modules/kdbush": {
"version": "2.0.1",
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz",
+ "integrity": "sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ=="
},
"node_modules/kle-serial": {
"name": "@ijprest/kle-serial",
@@ -1620,15 +1934,17 @@
},
"node_modules/lie": {
"version": "3.3.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/locate-path": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -1641,13 +1957,21 @@
},
"node_modules/lodash.flattendeep": {
"version": "4.4.0",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
+ "dev": true
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
+ "dev": true
},
"node_modules/log-symbols": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
@@ -1660,25 +1984,40 @@
}
},
"node_modules/loupe": {
- "version": "2.3.4",
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
+ "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"get-func-name": "^2.0.0"
}
},
- "node_modules/magic-string": {
- "version": "0.25.9",
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "sourcemap-codec": "^1.4.8"
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
+ "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
@@ -1706,30 +2045,32 @@
}
},
"node_modules/mathjs": {
- "version": "10.4.3",
- "license": "Apache-2.0",
+ "version": "11.5.0",
+ "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.5.0.tgz",
+ "integrity": "sha512-vJ/+SqWtxjW6/aeDRt8xL3TlOVKqwN15BIyTGVqGbIWuiqgY4SxZ0yLuna82YH9CB757iFP7uJ4m3KvVBX7Qcg==",
"dependencies": {
- "@babel/runtime": "^7.17.8",
- "complex.js": "^2.1.0",
- "decimal.js": "^10.3.1",
+ "@babel/runtime": "^7.20.6",
+ "complex.js": "^2.1.1",
+ "decimal.js": "^10.4.3",
"escape-latex": "^1.2.0",
"fraction.js": "^4.2.0",
"javascript-natural-sort": "^0.7.1",
"seedrandom": "^3.0.5",
"tiny-emitter": "^2.1.0",
- "typed-function": "^2.1.0"
+ "typed-function": "^4.1.0"
},
"bin": {
"mathjs": "bin/cli.js"
},
"engines": {
- "node": ">= 12"
+ "node": ">= 14"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
- "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -1738,41 +2079,39 @@
}
},
"node_modules/mocha": {
- "version": "9.2.2",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz",
+ "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@ungap/promise-all-settled": "1.1.2",
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
"chokidar": "3.5.3",
- "debug": "4.3.3",
+ "debug": "4.3.4",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
"glob": "7.2.0",
- "growl": "1.10.5",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
- "minimatch": "4.2.1",
+ "minimatch": "5.0.1",
"ms": "2.1.3",
- "nanoid": "3.3.1",
+ "nanoid": "3.3.3",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.2.0",
+ "workerpool": "6.2.1",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
- "mocha": "bin/mocha"
+ "mocha": "bin/mocha.js"
},
"engines": {
- "node": ">= 12.0.0"
+ "node": ">= 14.0.0"
},
"funding": {
"type": "opencollective",
@@ -1781,13 +2120,58 @@
},
"node_modules/mocha/node_modules/argparse": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/mocha/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
- "license": "Python-2.0"
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
},
"node_modules/mocha/node_modules/js-yaml": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -1796,20 +2180,31 @@
}
},
"node_modules/mocha/node_modules/minimatch": {
- "version": "4.2.1",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
"dev": true,
- "license": "ISC",
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
+ "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
"node_modules/mocha/node_modules/yargs": {
"version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
@@ -1825,13 +2220,15 @@
},
"node_modules/ms": {
"version": "2.1.3",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
},
"node_modules/nanoid": {
- "version": "3.3.1",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
"dev": true,
- "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -1839,10 +2236,24 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/nise": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
+ "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
"node_modules/node-preload": {
"version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"process-on-spawn": "^1.0.0"
},
@@ -1851,22 +2262,25 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT"
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
+ "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==",
+ "dev": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/nyc": {
"version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
"dev": true,
- "license": "ISC",
"dependencies": {
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
@@ -1905,8 +2319,9 @@
},
"node_modules/nyc/node_modules/cliui": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
- "license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
@@ -1915,8 +2330,9 @@
},
"node_modules/nyc/node_modules/find-up": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -1925,10 +2341,31 @@
"node": ">=8"
}
},
+ "node_modules/nyc/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/nyc/node_modules/locate-path": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -1938,8 +2375,9 @@
},
"node_modules/nyc/node_modules/p-limit": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -1952,8 +2390,9 @@
},
"node_modules/nyc/node_modules/p-locate": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -1963,8 +2402,9 @@
},
"node_modules/nyc/node_modules/wrap-ansi": {
"version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -1976,13 +2416,15 @@
},
"node_modules/nyc/node_modules/y18n": {
"version": "4.0.3",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
},
"node_modules/nyc/node_modules/yargs": {
"version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
@@ -2002,8 +2444,9 @@
},
"node_modules/nyc/node_modules/yargs-parser": {
"version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
"dev": true,
- "license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
@@ -2014,16 +2457,18 @@
},
"node_modules/once": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
- "license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/p-limit": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -2036,8 +2481,9 @@
},
"node_modules/p-locate": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
@@ -2050,8 +2496,9 @@
},
"node_modules/p-map": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
@@ -2061,16 +2508,18 @@
},
"node_modules/p-try": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/package-hash": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
"dev": true,
- "license": "ISC",
"dependencies": {
"graceful-fs": "^4.1.15",
"hasha": "^5.0.0",
@@ -2083,54 +2532,71 @@
},
"node_modules/pako": {
"version": "1.0.11",
- "license": "(MIT AND Zlib)"
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"node_modules/path-exists": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-key": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/path-parse": {
- "version": "1.0.7",
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
"dev": true,
- "license": "MIT"
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/path-to-regexp/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
},
"node_modules/pathval": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
},
"node_modules/picomatch": {
"version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -2140,8 +2606,9 @@
},
"node_modules/pkg-dir": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
@@ -2151,8 +2618,9 @@
},
"node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
- "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -2163,8 +2631,9 @@
},
"node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -2174,8 +2643,9 @@
},
"node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -2188,8 +2658,9 @@
},
"node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
- "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -2199,12 +2670,14 @@
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"node_modules/process-on-spawn": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"fromentries": "^1.2.0"
},
@@ -2214,15 +2687,17 @@
},
"node_modules/randombytes": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -2235,8 +2710,9 @@
},
"node_modules/readdirp": {
"version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -2245,13 +2721,15 @@
}
},
"node_modules/regenerator-runtime": {
- "version": "0.13.9",
- "license": "MIT"
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
"node_modules/release-zalgo": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==",
"dev": true,
- "license": "ISC",
"dependencies": {
"es6-error": "^4.0.1"
},
@@ -2261,44 +2739,32 @@
},
"node_modules/require-directory": {
"version": "2.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-main-filename": {
"version": "2.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/resolve": {
- "version": "1.22.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.8.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
},
"node_modules/resolve-from": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
- "license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
@@ -2309,15 +2775,37 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/rollup": {
- "version": "2.70.2",
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.1.tgz",
+ "integrity": "sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==",
"dev": true,
- "license": "MIT",
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=10.0.0"
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
@@ -2325,41 +2813,48 @@
},
"node_modules/safe-buffer": {
"version": "5.1.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/seedrandom": {
"version": "3.0.5",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
+ "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg=="
},
"node_modules/semver": {
- "version": "6.3.0",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/serialize-javascript": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
"dev": true,
- "license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"node_modules/set-blocking": {
"version": "2.0.0",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+ "dev": true
},
"node_modules/setimmediate": {
"version": "1.0.5",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
},
"node_modules/shebang-command": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -2369,34 +2864,63 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/signal-exit": {
"version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/sinon": {
+ "version": "15.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.1.tgz",
+ "integrity": "sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg==",
"dev": true,
- "license": "ISC"
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0",
+ "@sinonjs/fake-timers": "10.0.2",
+ "@sinonjs/samsam": "^7.0.1",
+ "diff": "^5.0.0",
+ "nise": "^5.1.2",
+ "supports-color": "^7.2.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/sinon"
+ }
+ },
+ "node_modules/sinon/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/source-map": {
- "version": "0.5.7",
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
- "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/sourcemap-codec": {
- "version": "1.4.8",
- "dev": true,
- "license": "MIT"
- },
"node_modules/spawn-wrap": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
"dev": true,
- "license": "ISC",
"dependencies": {
"foreground-child": "^2.0.0",
"is-windows": "^1.0.2",
@@ -2411,18 +2935,21 @@
},
"node_modules/sprintf-js": {
"version": "1.0.3",
- "license": "BSD-3-Clause"
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
"node_modules/string_decoder": {
"version": "1.1.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/string-width": {
"version": "4.2.3",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -2434,7 +2961,8 @@
},
"node_modules/strip-ansi": {
"version": "6.0.1",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -2444,16 +2972,18 @@
},
"node_modules/strip-bom": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -2463,8 +2993,9 @@
},
"node_modules/supports-color": {
"version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -2475,21 +3006,11 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/test-exclude": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
- "license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
@@ -2499,22 +3020,45 @@
"node": ">=8"
}
},
+ "node_modules/test-exclude/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/tiny-emitter": {
"version": "2.1.0",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
+ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/to-regex-range": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -2524,57 +3068,92 @@
},
"node_modules/type-detect": {
"version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/type-fest": {
"version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
"dev": true,
- "license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"node_modules/typed-function": {
- "version": "2.1.0",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz",
+ "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==",
"engines": {
- "node": ">= 10"
+ "node": ">= 14"
}
},
"node_modules/typedarray-to-buffer": {
"version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"dev": true,
- "license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"node_modules/universalify": {
"version": "2.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"engines": {
"node": ">= 10.0.0"
}
},
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/uuid": {
- "version": "3.4.0",
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
- "license": "MIT",
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
"node_modules/which": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
- "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -2587,17 +3166,20 @@
},
"node_modules/which-module": {
"version": "2.0.0",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==",
+ "dev": true
},
"node_modules/workerpool": {
- "version": "6.2.0",
- "dev": true,
- "license": "Apache-2.0"
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+ "dev": true
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
- "license": "MIT",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -2612,13 +3194,15 @@
},
"node_modules/wrappy": {
"version": "1.0.2",
- "dev": true,
- "license": "ISC"
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
"dev": true,
- "license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
@@ -2628,22 +3212,30 @@
},
"node_modules/y18n": {
"version": "5.0.8",
- "license": "ISC",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"engines": {
"node": ">=10"
}
},
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
"node_modules/yargs": {
- "version": "17.4.1",
- "license": "MIT",
+ "version": "17.6.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
+ "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
"dependencies": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
+ "yargs-parser": "^21.1.1"
},
"engines": {
"node": ">=12"
@@ -2651,16 +3243,18 @@
},
"node_modules/yargs-parser": {
"version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true,
- "license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/yargs-unparser": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
@@ -2673,8 +3267,9 @@
},
"node_modules/yargs-unparser/node_modules/camelcase": {
"version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -2684,8 +3279,9 @@
},
"node_modules/yargs-unparser/node_modules/decamelize": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -2694,16 +3290,18 @@
}
},
"node_modules/yargs/node_modules/yargs-parser": {
- "version": "21.0.1",
- "license": "ISC",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"engines": {
"node": ">=12"
}
},
"node_modules/yocto-queue": {
"version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -2711,1701 +3309,5 @@
"url": "https://github.com/sponsors/sindresorhus"
}
}
- },
- "dependencies": {
- "@ampproject/remapping": {
- "version": "2.1.2",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.0"
- }
- },
- "@babel/code-frame": {
- "version": "7.16.7",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.16.7"
- }
- },
- "@babel/compat-data": {
- "version": "7.17.7",
- "dev": true
- },
- "@babel/core": {
- "version": "7.17.9",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.9",
- "@babel/helper-compilation-targets": "^7.17.7",
- "@babel/helper-module-transforms": "^7.17.7",
- "@babel/helpers": "^7.17.9",
- "@babel/parser": "^7.17.9",
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.17.9",
- "@babel/types": "^7.17.0",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.1",
- "semver": "^6.3.0"
- }
- },
- "@babel/generator": {
- "version": "7.17.9",
- "dev": true,
- "requires": {
- "@babel/types": "^7.17.0",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.17.7",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.17.7",
- "@babel/helper-validator-option": "^7.16.7",
- "browserslist": "^4.17.5",
- "semver": "^6.3.0"
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.16.7",
- "dev": true,
- "requires": {
- "@babel/types": "^7.16.7"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.17.9",
- "dev": true,
- "requires": {
- "@babel/template": "^7.16.7",
- "@babel/types": "^7.17.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.16.7",
- "dev": true,
- "requires": {
- "@babel/types": "^7.16.7"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.16.7",
- "dev": true,
- "requires": {
- "@babel/types": "^7.16.7"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.17.7",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-module-imports": "^7.16.7",
- "@babel/helper-simple-access": "^7.17.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/helper-validator-identifier": "^7.16.7",
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.17.3",
- "@babel/types": "^7.17.0"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.17.7",
- "dev": true,
- "requires": {
- "@babel/types": "^7.17.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.16.7",
- "dev": true,
- "requires": {
- "@babel/types": "^7.16.7"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.16.7",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.16.7",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.17.9",
- "dev": true,
- "requires": {
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.17.9",
- "@babel/types": "^7.17.0"
- }
- },
- "@babel/highlight": {
- "version": "7.17.9",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.17.9",
- "dev": true
- },
- "@babel/runtime": {
- "version": "7.17.9",
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/template": {
- "version": "7.16.7",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.16.7",
- "@babel/parser": "^7.16.7",
- "@babel/types": "^7.16.7"
- }
- },
- "@babel/traverse": {
- "version": "7.17.9",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.9",
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.17.9",
- "@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/parser": "^7.17.9",
- "@babel/types": "^7.17.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.17.0",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.16.7",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@danmarshall/jscad-typings": {
- "version": "1.0.0"
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.3",
- "dev": true
- },
- "@jridgewell/resolve-uri": {
- "version": "3.0.5",
- "dev": true
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.11",
- "dev": true
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.4",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@rollup/plugin-commonjs": {
- "version": "21.1.0",
- "dev": true,
- "requires": {
- "@rollup/pluginutils": "^3.1.0",
- "commondir": "^1.0.1",
- "estree-walker": "^2.0.1",
- "glob": "^7.1.6",
- "is-reference": "^1.2.1",
- "magic-string": "^0.25.7",
- "resolve": "^1.17.0"
- }
- },
- "@rollup/plugin-json": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "@rollup/pluginutils": "^3.0.8"
- }
- },
- "@rollup/pluginutils": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "@types/estree": "0.0.39",
- "estree-walker": "^1.0.1",
- "picomatch": "^2.2.2"
- },
- "dependencies": {
- "estree-walker": {
- "version": "1.0.1",
- "dev": true
- }
- }
- },
- "@types/bezier-js": {
- "version": "0.0.6"
- },
- "@types/estree": {
- "version": "0.0.39",
- "dev": true
- },
- "@types/node": {
- "version": "7.10.14"
- },
- "@types/opentype.js": {
- "version": "0.7.2"
- },
- "@types/pdfkit": {
- "version": "0.7.36",
- "requires": {
- "@types/node": "*"
- }
- },
- "@ungap/promise-all-settled": {
- "version": "1.1.2",
- "dev": true
- },
- "aggregate-error": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1"
- },
- "ansi-styles": {
- "version": "4.3.0",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "append-transform": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "default-require-extensions": "^3.0.0"
- }
- },
- "archy": {
- "version": "1.0.0",
- "dev": true
- },
- "argparse": {
- "version": "1.0.10",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "dev": true
- },
- "bezier-js": {
- "version": "2.6.1"
- },
- "binary-extensions": {
- "version": "2.2.0",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "dev": true
- },
- "browserslist": {
- "version": "4.20.2",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001317",
- "electron-to-chromium": "^1.4.84",
- "escalade": "^3.1.1",
- "node-releases": "^2.0.2",
- "picocolors": "^1.0.0"
- }
- },
- "caching-transform": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "hasha": "^5.0.0",
- "make-dir": "^3.0.0",
- "package-hash": "^4.0.0",
- "write-file-atomic": "^3.0.0"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001332",
- "dev": true
- },
- "chai": {
- "version": "4.3.6",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "loupe": "^2.3.1",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chai-as-promised": {
- "version": "7.1.1",
- "dev": true,
- "requires": {
- "check-error": "^1.0.2"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "check-error": {
- "version": "1.0.2",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.3",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "clone": {
- "version": "1.0.4"
- },
- "color-convert": {
- "version": "2.0.1",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4"
- },
- "commondir": {
- "version": "1.0.1",
- "dev": true
- },
- "complex.js": {
- "version": "2.1.1"
- },
- "concat-map": {
- "version": "0.0.1",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.8.0",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "core-util-is": {
- "version": "1.0.3"
- },
- "cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "debug": {
- "version": "4.3.3",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "dev": true
- }
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "dev": true
- },
- "decimal.js": {
- "version": "10.3.1"
- },
- "deep-eql": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "default-require-extensions": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "strip-bom": "^4.0.0"
- }
- },
- "diff": {
- "version": "5.0.0",
- "dev": true
- },
- "dir-compare": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "minimatch": "^3.0.4",
- "p-limit": "^3.1.0 "
- }
- },
- "electron-to-chromium": {
- "version": "1.4.111",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0"
- },
- "es6-error": {
- "version": "4.1.1",
- "dev": true
- },
- "escalade": {
- "version": "3.1.1"
- },
- "escape-latex": {
- "version": "1.2.0"
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "dev": true
- },
- "esprima": {
- "version": "4.0.1"
- },
- "estree-walker": {
- "version": "2.0.2",
- "dev": true
- },
- "fill-range": {
- "version": "7.0.1",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-cache-dir": {
- "version": "3.3.2",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "dev": true
- },
- "foreground-child": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^3.0.2"
- }
- },
- "fraction.js": {
- "version": "4.2.0"
- },
- "fromentries": {
- "version": "1.3.2",
- "dev": true
- },
- "fs-extra": {
- "version": "10.0.1",
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "dev": true
- },
- "function-bind": {
- "version": "1.1.1",
- "dev": true
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5"
- },
- "get-func-name": {
- "version": "2.0.0",
- "dev": true
- },
- "get-package-type": {
- "version": "0.1.0",
- "dev": true
- },
- "glob": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "11.12.0",
- "dev": true
- },
- "graceful-fs": {
- "version": "4.2.10"
- },
- "graham_scan": {
- "version": "1.0.4"
- },
- "growl": {
- "version": "1.10.5",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "dev": true
- },
- "hasha": {
- "version": "5.2.2",
- "dev": true,
- "requires": {
- "is-stream": "^2.0.0",
- "type-fest": "^0.8.0"
- }
- },
- "he": {
- "version": "1.2.0",
- "dev": true
- },
- "html-escaper": {
- "version": "2.0.2",
- "dev": true
- },
- "immediate": {
- "version": "3.0.6"
- },
- "imurmurhash": {
- "version": "0.1.4",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4"
- },
- "is-binary-path": {
- "version": "2.1.0",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-core-module": {
- "version": "2.8.1",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0"
- },
- "is-glob": {
- "version": "4.0.3",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "dev": true
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "dev": true
- },
- "is-reference": {
- "version": "1.2.1",
- "dev": true,
- "requires": {
- "@types/estree": "*"
- }
- },
- "is-stream": {
- "version": "2.0.1",
- "dev": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0"
- },
- "isexe": {
- "version": "2.0.0",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "3.2.0",
- "dev": true
- },
- "istanbul-lib-hook": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "append-transform": "^2.0.0"
- }
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-processinfo": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "archy": "^1.0.0",
- "cross-spawn": "^7.0.0",
- "istanbul-lib-coverage": "^3.0.0-alpha.1",
- "make-dir": "^3.0.0",
- "p-map": "^3.0.0",
- "rimraf": "^3.0.0",
- "uuid": "^3.3.3"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.1",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "dev": true
- }
- }
- },
- "istanbul-reports": {
- "version": "3.1.4",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "javascript-natural-sort": {
- "version": "0.7.1"
- },
- "js-tokens": {
- "version": "4.0.0",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.1",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "dev": true
- },
- "json5": {
- "version": "2.2.1"
- },
- "jsonfile": {
- "version": "6.1.0",
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "jszip": {
- "version": "3.10.1",
- "requires": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "setimmediate": "^1.0.5"
- }
- },
- "kdbush": {
- "version": "2.0.1"
- },
- "kle-serial": {
- "version": "git+ssh://git@github.com/ergogen/kle-serial.git#61f29f317d87bbfed0b0b7e646e1b91d4384ac02",
- "from": "kle-serial@github:ergogen/kle-serial#ergogen",
- "requires": {
- "json5": "^2.1.0"
- }
- },
- "lie": {
- "version": "3.3.0",
- "requires": {
- "immediate": "~3.0.5"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "dev": true
- },
- "log-symbols": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "loupe": {
- "version": "2.3.4",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.0"
- }
- },
- "magic-string": {
- "version": "0.25.9",
- "dev": true,
- "requires": {
- "sourcemap-codec": "^1.4.8"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "makerjs": {
- "version": "git+ssh://git@github.com/ergogen/maker.js.git#a0ca32948845efe8ad5c9ca454f1285926853138",
- "from": "makerjs@github:ergogen/maker.js#ergogen",
- "requires": {
- "@danmarshall/jscad-typings": "^1.0.0",
- "@types/bezier-js": "^0.0.6",
- "@types/node": "^7.0.5",
- "@types/opentype.js": "^0.7.0",
- "@types/pdfkit": "^0.7.34",
- "bezier-js": "^2.1.0",
- "clone": "^1.0.2",
- "graham_scan": "^1.0.4",
- "kdbush": "^2.0.1"
- }
- },
- "mathjs": {
- "version": "10.4.3",
- "requires": {
- "@babel/runtime": "^7.17.8",
- "complex.js": "^2.1.0",
- "decimal.js": "^10.3.1",
- "escape-latex": "^1.2.0",
- "fraction.js": "^4.2.0",
- "javascript-natural-sort": "^0.7.1",
- "seedrandom": "^3.0.5",
- "tiny-emitter": "^2.1.0",
- "typed-function": "^2.1.0"
- }
- },
- "minimatch": {
- "version": "3.1.2",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "mocha": {
- "version": "9.2.2",
- "dev": true,
- "requires": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.3",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "4.2.1",
- "ms": "2.1.3",
- "nanoid": "3.3.1",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.2.0",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "2.0.1",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "minimatch": {
- "version": "4.2.1",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "yargs": {
- "version": "16.2.0",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- }
- }
- },
- "ms": {
- "version": "2.1.3",
- "dev": true
- },
- "nanoid": {
- "version": "3.3.1",
- "dev": true
- },
- "node-preload": {
- "version": "0.2.1",
- "dev": true,
- "requires": {
- "process-on-spawn": "^1.0.0"
- }
- },
- "node-releases": {
- "version": "2.0.3",
- "dev": true
- },
- "normalize-path": {
- "version": "3.0.0",
- "dev": true
- },
- "nyc": {
- "version": "15.1.0",
- "dev": true,
- "requires": {
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "caching-transform": "^4.0.0",
- "convert-source-map": "^1.7.0",
- "decamelize": "^1.2.0",
- "find-cache-dir": "^3.2.0",
- "find-up": "^4.1.0",
- "foreground-child": "^2.0.0",
- "get-package-type": "^0.1.0",
- "glob": "^7.1.6",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-hook": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.0",
- "istanbul-lib-processinfo": "^2.0.2",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "make-dir": "^3.0.0",
- "node-preload": "^0.2.1",
- "p-map": "^3.0.0",
- "process-on-spawn": "^1.0.0",
- "resolve-from": "^5.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "spawn-wrap": "^2.0.0",
- "test-exclude": "^6.0.0",
- "yargs": "^15.0.2"
- },
- "dependencies": {
- "cliui": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
- }
- },
- "once": {
- "version": "1.4.0",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "dev": true
- },
- "package-hash": {
- "version": "4.0.0",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.15",
- "hasha": "^5.0.0",
- "lodash.flattendeep": "^4.4.0",
- "release-zalgo": "^1.0.0"
- }
- },
- "pako": {
- "version": "1.0.11"
- },
- "path-exists": {
- "version": "4.0.0",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "dev": true
- },
- "pathval": {
- "version": "1.1.1",
- "dev": true
- },
- "picocolors": {
- "version": "1.0.0",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "process-nextick-args": {
- "version": "2.0.1"
- },
- "process-on-spawn": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "fromentries": "^1.2.0"
- }
- },
- "randombytes": {
- "version": "2.1.0",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.9"
- },
- "release-zalgo": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "es6-error": "^4.0.1"
- }
- },
- "require-directory": {
- "version": "2.1.1"
- },
- "require-main-filename": {
- "version": "2.0.0",
- "dev": true
- },
- "resolve": {
- "version": "1.22.0",
- "dev": true,
- "requires": {
- "is-core-module": "^2.8.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "rollup": {
- "version": "2.70.2",
- "dev": true,
- "requires": {
- "fsevents": "~2.3.2"
- }
- },
- "safe-buffer": {
- "version": "5.1.2"
- },
- "seedrandom": {
- "version": "3.0.5"
- },
- "semver": {
- "version": "6.3.0",
- "dev": true
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "dev": true
- },
- "setimmediate": {
- "version": "1.0.5"
- },
- "shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.7",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "dev": true
- },
- "sourcemap-codec": {
- "version": "1.4.8",
- "dev": true
- },
- "spawn-wrap": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "foreground-child": "^2.0.0",
- "is-windows": "^1.0.2",
- "make-dir": "^3.0.0",
- "rimraf": "^3.0.0",
- "signal-exit": "^3.0.2",
- "which": "^2.0.1"
- }
- },
- "sprintf-js": {
- "version": "1.0.3"
- },
- "string_decoder": {
- "version": "1.1.1",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true
- },
- "test-exclude": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "tiny-emitter": {
- "version": "2.1.0"
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "type-detect": {
- "version": "4.0.8",
- "dev": true
- },
- "type-fest": {
- "version": "0.8.1",
- "dev": true
- },
- "typed-function": {
- "version": "2.1.0"
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0"
- },
- "util-deprecate": {
- "version": "1.0.2"
- },
- "uuid": {
- "version": "3.4.0",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "dev": true
- },
- "workerpool": {
- "version": "6.2.0",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "dev": true
- },
- "write-file-atomic": {
- "version": "3.0.3",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "y18n": {
- "version": "5.0.8"
- },
- "yargs": {
- "version": "17.4.1",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
- },
- "dependencies": {
- "yargs-parser": {
- "version": "21.0.1"
- }
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "6.3.0",
- "dev": true
- },
- "decamelize": {
- "version": "4.0.0",
- "dev": true
- }
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "dev": true
- }
}
}
diff --git a/package.json b/package.json
index 8c71779..8cd2a34 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ergogen",
- "version": "4.0.0",
+ "version": "4.0.5",
"description": "Ergonomic keyboard layout generator",
"author": "Bán Dénes ",
"license": "MIT",
@@ -15,24 +15,25 @@
"coverage": "nyc --reporter=html --reporter=text npm test"
},
"dependencies": {
- "fs-extra": "^10.0.1",
+ "fs-extra": "^11.1.0",
"js-yaml": "^3.14.1",
"jszip": "^3.10.1",
"kle-serial": "github:ergogen/kle-serial#ergogen",
"makerjs": "github:ergogen/maker.js#ergogen",
- "mathjs": "^10.1.1",
- "yargs": "^17.3.1"
+ "mathjs": "^11.5.0",
+ "yargs": "^17.6.2"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^21.0.2",
- "@rollup/plugin-json": "^4.1.0",
- "chai": "^4.3.6",
+ "@rollup/plugin-commonjs": "^24.0.1",
+ "@rollup/plugin-json": "^6.0.0",
+ "chai": "^4.3.7",
"chai-as-promised": "^7.1.1",
"dir-compare": "^4.0.0",
- "glob": "^7.2.0",
- "mocha": "^9.2.1",
+ "glob": "^8.1.0",
+ "mocha": "^10.2.0",
"nyc": "^15.1.0",
- "rollup": "^2.68.0"
+ "rollup": "^3.10.1",
+ "sinon": "^15.0.1"
},
"nyc": {
"all": true,
diff --git a/readme.md b/readme.md
deleted file mode 100644
index 8151102..0000000
--- a/readme.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Ergogen
-
-Ergogen is a keyboard generator that aims to provide a common configuration format to describe **ergonomic** 2D layouts, and generate automatic plates, cases, and (un-routed) PCBs for them.
-The project grew out of (and is an integral part of) the [Absolem keyboard](https://zealot.hu/absolem), and shares its [Discord server](https://discord.gg/nbKcAZB) as well.
-
-## Getting started
-
-Until there's a proper "Getting started" guide, try getting acquainted with ergogen by following these steps in order:
-
-1. Read the [docs](https://docs.ergogen.xyz). D'uuh. They're not complete by any measure, but should give you a fairly good idea what you're dealing with here.
-
-1. Try one of the web-based deployments ([official](https://ergogen.xyz); [unofficial](https://ergogen.cache.works/) but probably better and soon to be official) - no need to download the CLI unless you want to A) preview in-development features, B) use custom modifications, or C) contribute code. Click things, look at outputs; see if things start to make sense.
-
-1. Search the [`#ergogen`](https://github.com/topics/ergogen) topic on GitHub to look at (and reverse engineer) a variety of real life configs using ergogen. Pop them into the web UI, see what they do, tinker with them; things should start to make more and more sense.
-
-1. If a question persists after all of the above, feel free to ask it over on [Discord](https://discord.gg/nbKcAZB) and we'll do our best to help you out.
-
-
-## Contributions
-
-Feature ideas, documentation improvements, examples, tests, or pull requests welcome!
-Get in touch [on Discord](https://discord.gg/nbKcAZB), and we can definitely find something you can help with, if you'd like to.
diff --git a/roadmap.md b/roadmap.md
index 3629cf0..aa1c837 100644
--- a/roadmap.md
+++ b/roadmap.md
@@ -14,6 +14,10 @@
### Minor
+- Support "direct" anchors, as in, recognize num arrays and parse them as x/y/r
+- Add `origin` to zone-wide and global rotation in points
+- Handle unnecessary (but seemingly consistent, so easy to confuse) `key` subfield of row-level overrides
+- Allow footprints to access raw array/object fields from points with templating
- Include raw kicad footprint integrations
- pull torik's script to be able to convert raw kicad footprints into positionable ergogen ones
- have a `dummy` footprint which can just be updated from schematic
diff --git a/rollup.config.js b/rollup.config.mjs
similarity index 90%
rename from rollup.config.js
rename to rollup.config.mjs
index 95bc171..002aff5 100644
--- a/rollup.config.js
+++ b/rollup.config.mjs
@@ -1,4 +1,4 @@
-import pkg from './package.json'
+import pkg from './package.json' assert { type: 'json' }
import json from '@rollup/plugin-json'
import commonjs from '@rollup/plugin-commonjs'
diff --git a/showcase.png b/showcase.png
new file mode 100644
index 0000000..f3b928f
Binary files /dev/null and b/showcase.png differ
diff --git a/src/anchor.js b/src/anchor.js
index e00c612..3d892ee 100644
--- a/src/anchor.js
+++ b/src/anchor.js
@@ -1,6 +1,7 @@
const u = require('./utils')
const a = require('./assert')
const Point = require('./point')
+const m = require('makerjs')
const mirror_ref = exports.mirror = (ref, mirror=true) => {
if (mirror) {
@@ -17,15 +18,52 @@ const aggregator_common = ['parts', 'method']
const aggregators = {
average: (config, name, parts) => {
a.unexpected(config, name, aggregator_common)
- let x = 0, y = 0, r = 0
const len = parts.length
+ if (len == 0) {
+ return new Point()
+ }
+ let x = 0, y = 0, r = 0
for (const part of parts) {
x += part.x
y += part.y
r += part.r
}
return new Point(x / len, y / len, r / len)
- }
+ },
+ intersect: (config, name, parts) => {
+ // a line is generated from a point by taking their
+ // (rotated) Y axis. The line is not extended to
+ // +/- Infinity as that doesn't work with makerjs.
+ // An arbitrary offset of 1 meter is considered
+ // sufficient for practical purposes, and the point
+ // coordinates are used as pivot point for the rotation.
+ const get_line_from_point = (point, offset=1000) => {
+ const origin = [point.x, point.y]
+ const p1 = [point.x, point.y - offset]
+ const p2 = [point.x, point.y + offset]
+
+ let line = new m.paths.Line(p1, p2)
+ line = m.path.rotate(line, point.r, origin)
+
+ return line
+ }
+
+ a.unexpected(config, name, aggregator_common)
+ a.assert(parts.length==2, `Intersect expects exactly two parts, but it got ${parts.length}!`)
+
+ const line1 = get_line_from_point(parts[0])
+ const line2 = get_line_from_point(parts[1])
+ const intersection = m.path.intersection(line1, line2)
+
+ a.assert(intersection, `The points under "${name}.parts" do not intersect!`)
+
+ const intersection_point_arr = intersection.intersectionPoints[0]
+ const intersection_point = new Point(
+ intersection_point_arr[0], intersection_point_arr[1], 0
+ )
+
+ return intersection_point
+ },
}
const anchor = exports.parse = (raw, name, points={}, start=new Point(), mirror=false) => units => {
@@ -53,7 +91,7 @@ const anchor = exports.parse = (raw, name, points={}, start=new Point(), mirror=
//
// Reference or aggregate handling
//
-
+
let point = start.clone()
if (raw.ref !== undefined && raw.aggregate !== undefined) {
throw new Error(`Fields "ref" and "aggregate" cannot appear together in anchor "${name}"!`)
diff --git a/src/cases.js b/src/cases.js
index f6342fc..7fabbb1 100644
--- a/src/cases.js
+++ b/src/cases.js
@@ -69,15 +69,19 @@ exports.parse = (config, outlines, units) => {
const extrude = a.sane(part.extrude || 1, `${part_qname}.extrude`, 'number')(units)
const outline = outlines[name]
a.assert(outline, `Field "${part_qname}.name" does not name a valid outline!`)
- if (!scripts[name]) {
- scripts[name] = m.exporter.toJscadScript(outline, {
- functionName: `${name}_outline_fn`,
+ // This is a hack to separate multiple calls to the same outline with different extrude values
+ // I know it needlessly duplicates a lot of code, but it's the quickest fix in the short term
+ // And on the long run, we'll probably be moving to CADQuery anyway...
+ const extruded_name = `${name}_extrude_` + ('' + extrude).replace(/\D/g, '_')
+ if (!scripts[extruded_name]) {
+ scripts[extruded_name] = m.exporter.toJscadScript(outline, {
+ functionName: `${extruded_name}_outline_fn`,
extrude: extrude,
indent: 4
})
}
- outline_dependencies.push(name)
- base = `${name}_outline_fn()`
+ outline_dependencies.push(extruded_name)
+ base = `${extruded_name}_outline_fn()`
} else {
a.assert(part.extrude === undefined, `Field "${part_qname}.extrude" should not be used when what=case!`)
a.in(name, `${part_qname}.name`, Object.keys(cases))
diff --git a/src/cli.js b/src/cli.js
index bdaeac0..fe0615b 100755
--- a/src/cli.js
+++ b/src/cli.js
@@ -132,12 +132,14 @@ try {
// output helpers
+const yamldump = data => yaml.dump(data, {indent: 4, noRefs: true})
+
const single = (data, rel) => {
if (!data) return
const abs = path.join(args.o, rel)
fs.mkdirpSync(path.dirname(abs))
if (abs.endsWith('.yaml')) {
- fs.writeFileSync(abs, yaml.dump(data, {indent: 4}))
+ fs.writeFileSync(abs, yamldump(data))
} else {
fs.writeFileSync(abs, data)
}
@@ -148,7 +150,7 @@ const composite = (data, rel) => {
const abs = path.join(args.o, rel)
if (data.yaml) {
fs.mkdirpSync(path.dirname(abs))
- fs.writeFileSync(abs + '.yaml', yaml.dump(data.yaml, {indent: 4}))
+ fs.writeFileSync(abs + '.yaml', yamldump(data.yaml))
}
for (const format of ['svg', 'dxf', 'jscad']) {
if (data[format]) {
diff --git a/src/filter.js b/src/filter.js
index ca1ef01..ca091b6 100644
--- a/src/filter.js
+++ b/src/filter.js
@@ -9,9 +9,8 @@ const _false = () => false
const _and = arr => p => arr.map(e => e(p)).reduce((a, b) => a && b)
const _or = arr => p => arr.map(e => e(p)).reduce((a, b) => a || b)
-const similar = (key, reference, name, units) => {
+const similar = (keys, reference, name, units) => {
let neg = false
-
if (reference.startsWith('-')) {
neg = true
reference = reference.slice(1)
@@ -20,15 +19,19 @@ const similar = (key, reference, name, units) => {
// support both string or regex as reference
let internal_tester = val => (''+val) == reference
if (reference.startsWith('/')) {
- const regex_parts = reference.split('/')
- regex_parts.shift() // remove starting slash
- const flags = regex_parts.pop()
- const regex = new RegExp(regex_parts.join('/'), flags)
- internal_tester = val => regex.test(''+val)
+ try {
+ const regex_parts = reference.split('/')
+ regex_parts.shift() // remove starting slash
+ const flags = regex_parts.pop()
+ const regex = new RegExp(regex_parts.join('/'), flags)
+ internal_tester = val => regex.test(''+val)
+ } catch (ex) {
+ throw new Error(`Invalid regex "${reference}" found at filter "${name}"!`)
+ }
}
// support strings, arrays, or objects as key
- const external_tester = point => {
+ const external_tester = (point, key) => {
const value = u.deep(point, key)
if (a.type(value)() == 'array') {
return value.some(subkey => internal_tester(subkey))
@@ -39,11 +42,12 @@ const similar = (key, reference, name, units) => {
}
}
- // negation happens at the end
+ // consider negation
if (neg) {
- return point => !external_tester(point)
+ return point => keys.every(key => !external_tester(point, key))
+ } else {
+ return point => keys.some(key => external_tester(point, key))
}
- return external_tester
}
const comparators = {
@@ -75,7 +79,7 @@ const simple = (exp, name, units) => {
value = exp
}
- return point => keys.some(key => comparators[op](key, value, name, units)(point))
+ return point => comparators[op](keys, value, name, units)(point)
}
const complex = (config, name, units, aggregator=_or) => {
@@ -109,7 +113,7 @@ const contains_object = (val) => {
}
exports.parse = (config, name, points={}, units={}, asym='source') => {
-
+
let result = []
// if a filter decl is undefined, it's just the default point at [0, 0]
@@ -123,7 +127,11 @@ exports.parse = (config, name, points={}, units={}, asym='source') => {
}
if (['clone', 'both'].includes(asym)) {
// this is strict: if the ref of the anchor doesn't have a mirror pair, it will error out
- result.push(anchor(config, name, points, undefined, true)(units))
+ // also, we check for duplicates as ref-less anchors mirror to themselves
+ const clone = anchor(config, name, points, undefined, true)(units)
+ if (result.every(p => !p.equals(clone))) {
+ result.push(clone)
+ }
}
// otherwise, it is treated as a condition to filter all available points
@@ -132,9 +140,15 @@ exports.parse = (config, name, points={}, units={}, asym='source') => {
if (['source', 'both'].includes(asym)) {
result = result.concat(source)
}
- if (['source', 'both'].includes(asym)) {
+ if (['clone', 'both'].includes(asym)) {
// this is permissive: we only include mirrored versions if they exist, and don't fuss if they don't
- result = result.concat(source.map(p => points[anchor_lib.mirror(p.meta.name)]).filter(p => !!p))
+ // also, we check for duplicates as clones can potentially refer back to their sources, too
+ const pool = result.map(p => p.meta.name)
+ result = result.concat(
+ source.map(p => points[anchor_lib.mirror(p.meta.name)])
+ .filter(p => !!p)
+ .filter(p => !pool.includes(p.meta.name))
+ )
}
}
diff --git a/src/footprints/alps.js b/src/footprints/alps.js
index 9ab6218..e998a99 100644
--- a/src/footprints/alps.js
+++ b/src/footprints/alps.js
@@ -25,8 +25,8 @@ module.exports = {
(fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
${''/* pins */}
- (pad 1 thru_hole circle (at 2.5 -4.5) (size 2.25 2.25) (drill 1.47) (layers *.Cu *.Mask) ${p.from.str})
- (pad 2 thru_hole circle (at -2.5 -4) (size 2.25 2.25) (drill 1.47) (layers *.Cu *.Mask) ${p.to.str})
+ (pad 1 thru_hole circle (at 2.5 -4.5) (size 2.25 2.25) (drill 1.47) (layers *.Cu *.Mask) ${p.from})
+ (pad 2 thru_hole circle (at -2.5 -4) (size 2.25 2.25) (drill 1.47) (layers *.Cu *.Mask) ${p.to})
)
`
diff --git a/src/footprints/button.js b/src/footprints/button.js
index bbf7786..25fc333 100644
--- a/src/footprints/button.js
+++ b/src/footprints/button.js
@@ -28,10 +28,10 @@ module.exports = {
(fp_line (start -2.75 -1.25) (end -2.75 1.25) (layer ${p.side}.SilkS) (width 0.15))
${'' /* pins */}
- (pad 1 smd rect (at -3.1 -1.85 ${p.rot}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from.str})
- (pad 1 smd rect (at 3.1 -1.85 ${p.rot}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from.str})
- (pad 2 smd rect (at -3.1 1.85 ${p.rot}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to.str})
- (pad 2 smd rect (at 3.1 1.85 ${p.rot}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to.str})
+ (pad 1 smd rect (at -3.1 -1.85 ${p.r}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from})
+ (pad 1 smd rect (at 3.1 -1.85 ${p.r}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from})
+ (pad 2 smd rect (at -3.1 1.85 ${p.r}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to})
+ (pad 2 smd rect (at 3.1 1.85 ${p.r}) (size 1.8 1.1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to})
)
`
diff --git a/src/footprints/choc.js b/src/footprints/choc.js
index 792b1c8..52484e5 100644
--- a/src/footprints/choc.js
+++ b/src/footprints/choc.js
@@ -62,14 +62,14 @@ module.exports = {
(pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
${'' /* net pads */}
- (pad 1 smd rect (at ${def_neg}3.275 -5.95 ${p.rot}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.from.str})
- (pad 2 smd rect (at ${def_pos}8.275 -3.75 ${p.rot}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.to.str})
+ (pad 1 smd rect (at ${def_neg}3.275 -5.95 ${p.r}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.from})
+ (pad 2 smd rect (at ${def_pos}8.275 -3.75 ${p.r}) (size 2.6 2.6) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.to})
`
} else {
return `
${''/* pins */}
- (pad 1 thru_hole circle (at ${def_pos}5 -3.8) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.from.str})
- (pad 2 thru_hole circle (at ${def_pos}0 -5.9) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.to.str})
+ (pad 1 thru_hole circle (at ${def_pos}5 -3.8) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.from})
+ (pad 2 thru_hole circle (at ${def_pos}0 -5.9) (size 2.032 2.032) (drill 1.27) (layers *.Cu *.Mask) ${p.to})
`
}
}
diff --git a/src/footprints/chocmini.js b/src/footprints/chocmini.js
index b09b865..060bc52 100644
--- a/src/footprints/chocmini.js
+++ b/src/footprints/chocmini.js
@@ -69,8 +69,8 @@ module.exports = {
function pins(def_neg, def_pos) {
return `
${''/* pins */}
- (pad 1 thru_hole circle (at ${def_neg}4.58 5.1) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) ${p.from.str} (clearance 0.2))
- (pad 2 thru_hole circle (at ${def_pos}2 5.4) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) ${p.to.str} (clearance 0.2))
+ (pad 1 thru_hole circle (at ${def_neg}4.58 5.1) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) ${p.from} (clearance 0.2))
+ (pad 2 thru_hole circle (at ${def_pos}2 5.4) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) ${p.to} (clearance 0.2))
`
}
if(p.reverse){
diff --git a/src/footprints/diode.js b/src/footprints/diode.js
index 741b747..16d4288 100644
--- a/src/footprints/diode.js
+++ b/src/footprints/diode.js
@@ -32,14 +32,14 @@ module.exports = {
(fp_line (start -0.75 0) (end -0.35 0) (layer B.SilkS) (width 0.1))
${''/* SMD pads on both sides */}
- (pad 1 smd rect (at -1.65 0 ${p.rot}) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) ${p.to.str})
- (pad 2 smd rect (at 1.65 0 ${p.rot}) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) ${p.from.str})
- (pad 1 smd rect (at -1.65 0 ${p.rot}) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) ${p.to.str})
- (pad 2 smd rect (at 1.65 0 ${p.rot}) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) ${p.from.str})
+ (pad 1 smd rect (at -1.65 0 ${p.r}) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) ${p.to})
+ (pad 2 smd rect (at 1.65 0 ${p.r}) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) ${p.from})
+ (pad 1 smd rect (at -1.65 0 ${p.r}) (size 0.9 1.2) (layers B.Cu B.Paste B.Mask) ${p.to})
+ (pad 2 smd rect (at 1.65 0 ${p.r}) (size 0.9 1.2) (layers F.Cu F.Paste F.Mask) ${p.from})
${''/* THT terminals */}
- (pad 1 thru_hole rect (at -3.81 0 ${p.rot}) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) ${p.to.str})
- (pad 2 thru_hole circle (at 3.81 0 ${p.rot}) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) ${p.from.str})
+ (pad 1 thru_hole rect (at -3.81 0 ${p.r}) (size 1.778 1.778) (drill 0.9906) (layers *.Cu *.Mask) ${p.to})
+ (pad 2 thru_hole circle (at 3.81 0 ${p.r}) (size 1.905 1.905) (drill 0.9906) (layers *.Cu *.Mask) ${p.from})
)
`
diff --git a/src/footprints/jstph.js b/src/footprints/jstph.js
index c93bb6a..7bdac1d 100644
--- a/src/footprints/jstph.js
+++ b/src/footprints/jstph.js
@@ -30,8 +30,8 @@ module.exports = {
(fp_line (start -1 1.5) (end -1 2.0) (layer ${p.side}.SilkS) (width 0.15))
(fp_line (start -1.25 1.75) (end -0.75 1.75) (layer ${p.side}.SilkS) (width 0.15))
- (pad 1 thru_hole rect (at -1 0 ${p.rot}) (size 1.2 1.7) (drill 0.75) (layers *.Cu *.Mask) ${p.pos.str})
- (pad 2 thru_hole oval (at 1 0 ${p.rot}) (size 1.2 1.7) (drill 0.75) (layers *.Cu *.Mask) ${p.neg.str})
+ (pad 1 thru_hole rect (at -1 0 ${p.r}) (size 1.2 1.7) (drill 0.75) (layers *.Cu *.Mask) ${p.pos})
+ (pad 2 thru_hole oval (at 1 0 ${p.r}) (size 1.2 1.7) (drill 0.75) (layers *.Cu *.Mask) ${p.neg})
)
diff --git a/src/footprints/jumper.js b/src/footprints/jumper.js
index 22b7d40..f5203e2 100644
--- a/src/footprints/jumper.js
+++ b/src/footprints/jumper.js
@@ -14,9 +14,9 @@ module.exports = {
(fp_text value Jumper (at 0 -7.3) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
${'' /* pins */}
- (pad 1 smd rect (at -0.50038 0 ${p.rot}) (size 0.635 1.143) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- (clearance 0.1905) ${p.from.str})
- (pad 2 smd rect (at 0.50038 0 ${p.rot}) (size 0.635 1.143) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- (clearance 0.1905) ${p.to.str}))
+ (pad 1 smd rect (at -0.50038 0 ${p.r}) (size 0.635 1.143) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ (clearance 0.1905) ${p.from})
+ (pad 2 smd rect (at 0.50038 0 ${p.r}) (size 0.635 1.143) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ (clearance 0.1905) ${p.to}))
`
}
\ No newline at end of file
diff --git a/src/footprints/mx.js b/src/footprints/mx.js
index 11d8de8..458b999 100644
--- a/src/footprints/mx.js
+++ b/src/footprints/mx.js
@@ -62,14 +62,14 @@ module.exports = {
(pad "" np_thru_hole circle (at ${def_neg}3.81 -2.54) (size 3 3) (drill 3) (layers *.Cu *.Mask))
${'' /* net pads */}
- (pad 1 smd rect (at ${def_neg}7.085 -2.54 ${p.rot}) (size 2.55 2.5) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.from.str})
- (pad 2 smd rect (at ${def_pos}5.842 -5.08 ${p.rot}) (size 2.55 2.5) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.to.str})
+ (pad 1 smd rect (at ${def_neg}7.085 -2.54 ${p.r}) (size 2.55 2.5) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.from})
+ (pad 2 smd rect (at ${def_pos}5.842 -5.08 ${p.r}) (size 2.55 2.5) (layers ${def_side}.Cu ${def_side}.Paste ${def_side}.Mask) ${p.to})
`
} else {
return `
${''/* pins */}
- (pad 1 thru_hole circle (at ${def_pos}2.54 -5.08) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.from.str})
- (pad 2 thru_hole circle (at ${def_neg}3.81 -2.54) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.to.str})
+ (pad 1 thru_hole circle (at ${def_pos}2.54 -5.08) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.from})
+ (pad 2 thru_hole circle (at ${def_neg}3.81 -2.54) (size 2.286 2.286) (drill 1.4986) (layers *.Cu *.Mask) ${p.to})
`
}
}
diff --git a/src/footprints/oled.js b/src/footprints/oled.js
index 5a8a536..3addacf 100644
--- a/src/footprints/oled.js
+++ b/src/footprints/oled.js
@@ -16,14 +16,14 @@ module.exports = {
(fp_text value OLED (at 0 -7.3) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
${'' /* pins */}
- (pad 4 thru_hole oval (at 1.6 2.18 ${p.rot+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- ${p.SDA.str})
- (pad 3 thru_hole oval (at 1.6 4.72 ${p.rot+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- ${p.SCL.str})
- (pad 2 thru_hole oval (at 1.6 7.26 ${p.rot+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- ${p.VCC.str})
- (pad 1 thru_hole rect (at 1.6 9.8 ${p.rot+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
- ${p.GND.str})
+ (pad 4 thru_hole oval (at 1.6 2.18 ${p.r+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ ${p.SDA})
+ (pad 3 thru_hole oval (at 1.6 4.72 ${p.r+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ ${p.SCL})
+ (pad 2 thru_hole oval (at 1.6 7.26 ${p.r+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ ${p.VCC})
+ (pad 1 thru_hole rect (at 1.6 9.8 ${p.r+270}) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)
+ ${p.GND})
)
`
}
\ No newline at end of file
diff --git a/src/footprints/omron.js b/src/footprints/omron.js
index 7669c6c..ff95eba 100644
--- a/src/footprints/omron.js
+++ b/src/footprints/omron.js
@@ -24,10 +24,10 @@ module.exports = {
(fp_line (start -6 6) (end -6 -6) (layer Dwgs.User) (width 0.15))
${'' /* pins */}
- (pad 1 np_thru_hole circle (at 6.25 -2.5) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.from.str})
- (pad 2 np_thru_hole circle (at -6.25 -2.5) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.from.str})
- (pad 3 np_thru_hole circle (at 6.25 2.5) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.to.str})
- (pad 4 np_thru_hole circle (at -6.25 2.5 ) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.to.str})
+ (pad 1 np_thru_hole circle (at 6.25 -2.5) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.from})
+ (pad 2 np_thru_hole circle (at -6.25 -2.5) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.from})
+ (pad 3 np_thru_hole circle (at 6.25 2.5) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.to})
+ (pad 4 np_thru_hole circle (at -6.25 2.5 ) (size 1.2 1.2) (drill 1.2) (layers *.Cu *.Mask) ${p.to})
)
`
diff --git a/src/footprints/pad.js b/src/footprints/pad.js
index debfe8b..34d5cb9 100644
--- a/src/footprints/pad.js
+++ b/src/footprints/pad.js
@@ -28,9 +28,9 @@ module.exports = {
if (align == 'down') y -= p.height / 2 + plus
let text = ''
if (p.text.length) {
- text = `(fp_text user ${p.text} (at ${x} ${y} ${p.rot}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))`
+ text = `(fp_text user ${p.text} (at ${x} ${y} ${p.r}) (layer ${side}.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15)) ${mirror}))`
}
- return `(pad 1 smd rect (at 0 0 ${p.rot}) (size ${p.width} ${p.height}) (layers ${side}.Cu ${side}.Paste ${side}.Mask) ${p.net.str})\n${text}`
+ return `(pad 1 smd rect (at 0 0 ${p.r}) (size ${p.width} ${p.height}) (layers ${side}.Cu ${side}.Paste ${side}.Mask) ${p.net})\n${text}`
}
return `
diff --git a/src/footprints/promicro.js b/src/footprints/promicro.js
index 6d55c0c..fc11a5c 100644
--- a/src/footprints/promicro.js
+++ b/src/footprints/promicro.js
@@ -60,58 +60,58 @@ module.exports = {
(fp_line (start -12.7 ${def_pos}6.35) (end -12.7 ${def_pos}8.89) (layer F.SilkS) (width 0.15))
${''/* pin names */}
- (fp_text user RAW (at -13.97 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user GND (at -11.43 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user RST (at -8.89 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user VCC (at -6.35 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P21 (at -3.81 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P20 (at -1.27 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P19 (at 1.27 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P18 (at 3.81 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P15 (at 6.35 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P14 (at 8.89 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P16 (at 11.43 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P10 (at 13.97 ${def_pos}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user RAW (at -13.97 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user GND (at -11.43 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user RST (at -8.89 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user VCC (at -6.35 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P21 (at -3.81 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P20 (at -1.27 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P19 (at 1.27 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P18 (at 3.81 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P15 (at 6.35 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P14 (at 8.89 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P16 (at 11.43 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P10 (at 13.97 ${def_pos}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P01 (at -13.97 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P00 (at -11.43 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user GND (at -8.89 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user GND (at -6.35 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P02 (at -3.81 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P03 (at -1.27 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P04 (at 1.27 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P05 (at 3.81 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P06 (at 6.35 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P07 (at 8.89 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P08 (at 11.43 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
- (fp_text user P09 (at 13.97 ${def_neg}4.8 ${p.rot + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P01 (at -13.97 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P00 (at -11.43 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user GND (at -8.89 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user GND (at -6.35 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P02 (at -3.81 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P03 (at -1.27 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P04 (at 1.27 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P05 (at 3.81 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P06 (at 6.35 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P07 (at 8.89 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P08 (at 11.43 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
+ (fp_text user P09 (at 13.97 ${def_neg}4.8 ${p.r + 90}) (layer F.SilkS) (effects (font (size 0.8 0.8) (thickness 0.15))))
${''/* and now the actual pins */}
- (pad 1 thru_hole rect (at -13.97 ${def_pos}7.62 ${p.rot}) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.RAW.str})
- (pad 2 thru_hole circle (at -11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND.str})
- (pad 3 thru_hole circle (at -8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.RST.str})
- (pad 4 thru_hole circle (at -6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.VCC.str})
- (pad 5 thru_hole circle (at -3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P21.str})
- (pad 6 thru_hole circle (at -1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P20.str})
- (pad 7 thru_hole circle (at 1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P19.str})
- (pad 8 thru_hole circle (at 3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P18.str})
- (pad 9 thru_hole circle (at 6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P15.str})
- (pad 10 thru_hole circle (at 8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P14.str})
- (pad 11 thru_hole circle (at 11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P16.str})
- (pad 12 thru_hole circle (at 13.97 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P10.str})
+ (pad 1 thru_hole rect (at -13.97 ${def_pos}7.62 ${p.r}) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.RAW})
+ (pad 2 thru_hole circle (at -11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND})
+ (pad 3 thru_hole circle (at -8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.RST})
+ (pad 4 thru_hole circle (at -6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.VCC})
+ (pad 5 thru_hole circle (at -3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P21})
+ (pad 6 thru_hole circle (at -1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P20})
+ (pad 7 thru_hole circle (at 1.27 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P19})
+ (pad 8 thru_hole circle (at 3.81 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P18})
+ (pad 9 thru_hole circle (at 6.35 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P15})
+ (pad 10 thru_hole circle (at 8.89 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P14})
+ (pad 11 thru_hole circle (at 11.43 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P16})
+ (pad 12 thru_hole circle (at 13.97 ${def_pos}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P10})
- (pad 13 thru_hole circle (at -13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P1.str})
- (pad 14 thru_hole circle (at -11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P0.str})
- (pad 15 thru_hole circle (at -8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND.str})
- (pad 16 thru_hole circle (at -6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND.str})
- (pad 17 thru_hole circle (at -3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P2.str})
- (pad 18 thru_hole circle (at -1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P3.str})
- (pad 19 thru_hole circle (at 1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P4.str})
- (pad 20 thru_hole circle (at 3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P5.str})
- (pad 21 thru_hole circle (at 6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P6.str})
- (pad 22 thru_hole circle (at 8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P7.str})
- (pad 23 thru_hole circle (at 11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P8.str})
- (pad 24 thru_hole circle (at 13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P9.str})
+ (pad 13 thru_hole circle (at -13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P1})
+ (pad 14 thru_hole circle (at -11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P0})
+ (pad 15 thru_hole circle (at -8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND})
+ (pad 16 thru_hole circle (at -6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.GND})
+ (pad 17 thru_hole circle (at -3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P2})
+ (pad 18 thru_hole circle (at -1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P3})
+ (pad 19 thru_hole circle (at 1.27 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P4})
+ (pad 20 thru_hole circle (at 3.81 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P5})
+ (pad 21 thru_hole circle (at 6.35 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P6})
+ (pad 22 thru_hole circle (at 8.89 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P7})
+ (pad 23 thru_hole circle (at 11.43 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P8})
+ (pad 24 thru_hole circle (at 13.97 ${def_neg}7.62 0) (size 1.7526 1.7526) (drill 1.0922) (layers *.Cu *.SilkS *.Mask) ${p.P9})
`
}
if(p.orientation == 'down') {
diff --git a/src/footprints/rgb.js b/src/footprints/rgb.js
index 45be1b0..12e19ff 100644
--- a/src/footprints/rgb.js
+++ b/src/footprints/rgb.js
@@ -29,15 +29,15 @@ module.exports = {
(fp_poly (pts (xy 4 2.2) (xy 4 0.375) (xy 5 1.2875)) (layer ${p.side}.SilkS) (width 0.1))
- (pad 1 smd rect (at -2.2 -0.875 ${p.rot}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.VCC.str})
- (pad 2 smd rect (at -2.2 0.875 ${p.rot}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.dout.str})
- (pad 3 smd rect (at 2.2 0.875 ${p.rot}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.GND.str})
- (pad 4 smd rect (at 2.2 -0.875 ${p.rot}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.din.str})
+ (pad 1 smd rect (at -2.2 -0.875 ${p.r}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.VCC})
+ (pad 2 smd rect (at -2.2 0.875 ${p.r}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.dout})
+ (pad 3 smd rect (at 2.2 0.875 ${p.r}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.GND})
+ (pad 4 smd rect (at 2.2 -0.875 ${p.r}) (size 2.6 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.din})
- (pad 11 smd rect (at -2.5 -1.6 ${p.rot}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.VCC.str})
- (pad 22 smd rect (at -2.5 1.6 ${p.rot}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.dout.str})
- (pad 33 smd rect (at 2.5 1.6 ${p.rot}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.GND.str})
- (pad 44 smd rect (at 2.5 -1.6 ${p.rot}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.din.str})
+ (pad 11 smd rect (at -2.5 -1.6 ${p.r}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.VCC})
+ (pad 22 smd rect (at -2.5 1.6 ${p.r}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.dout})
+ (pad 33 smd rect (at 2.5 1.6 ${p.r}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.GND})
+ (pad 44 smd rect (at 2.5 -1.6 ${p.r}) (size 2 1.2) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.din})
)
diff --git a/src/footprints/rotary.js b/src/footprints/rotary.js
index 60092bf..771eeea 100644
--- a/src/footprints/rotary.js
+++ b/src/footprints/rotary.js
@@ -56,15 +56,15 @@ module.exports = {
(fp_circle (center -0.12 -0.04) (end 2.88 -0.04) (layer F.Fab) (width 0.12))
${''/* pin names */}
- (pad A thru_hole rect (at -7.62 -2.54 ${p.rot}) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.A.str})
- (pad C thru_hole circle (at -7.62 -0.04) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.C.str})
- (pad B thru_hole circle (at -7.62 2.46) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.B.str})
- (pad 1 thru_hole circle (at 6.88 -2.54) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${p.from.str})
- (pad 2 thru_hole circle (at 6.88 2.46) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${p.to.str})
+ (pad A thru_hole rect (at -7.62 -2.54 ${p.r}) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.A})
+ (pad C thru_hole circle (at -7.62 -0.04) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.C})
+ (pad B thru_hole circle (at -7.62 2.46) (size 2 2) (drill 1) (layers *.Cu *.Mask) ${p.B})
+ (pad 1 thru_hole circle (at 6.88 -2.54) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${p.from})
+ (pad 2 thru_hole circle (at 6.88 2.46) (size 1.5 1.5) (drill 1) (layers *.Cu *.Mask) ${p.to})
${''/* Legs */}
- (pad "" thru_hole rect (at -0.12 -5.64 ${p.rot}) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Cu *.Mask))
- (pad "" thru_hole rect (at -0.12 5.56 ${p.rot}) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Cu *.Mask))
+ (pad "" thru_hole rect (at -0.12 -5.64 ${p.r}) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Cu *.Mask))
+ (pad "" thru_hole rect (at -0.12 5.56 ${p.r}) (size 3.2 2) (drill oval 2.8 1.5) (layers *.Cu *.Mask))
)
`
}
diff --git a/src/footprints/scrollwheel.js b/src/footprints/scrollwheel.js
index 3024d29..e7cc2de 100644
--- a/src/footprints/scrollwheel.js
+++ b/src/footprints/scrollwheel.js
@@ -35,8 +35,8 @@ module.exports = {
const standard = `
(module RollerEncoder_Panasonic_EVQWGD001 (layer F.Cu) (tedit 6040A10C)
${p.at /* parametric position */}
- (fp_text reference REF** (at 0 0 ${p.rot}) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
- (fp_text value RollerEncoder_Panasonic_EVQWGD001 (at -0.1 9 ${p.rot}) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
+ (fp_text reference REF** (at 0 0 ${p.r}) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
+ (fp_text value RollerEncoder_Panasonic_EVQWGD001 (at -0.1 9 ${p.r}) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
${'' /* corner marks */}
(fp_line (start -8.4 -6.4) (end 8.4 -6.4) (layer Dwgs.User) (width 0.12))
@@ -57,15 +57,15 @@ module.exports = {
(fp_arc (start ${def_pos}9.5 -6.3) (end ${def_pos}9.8 -6.3) (angle ${def_neg}90) (layer Edge.Cuts) (width 0.15))
${'' /* pins */}
- (pad S1 thru_hole circle (at ${def_neg}6.85 -6.2 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.from.str})
- (pad S2 thru_hole circle (at ${def_neg}5 -6.2 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.to.str})
- (pad A thru_hole circle (at ${def_neg}5.625 -3.81 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.A.str})
- (pad B thru_hole circle (at ${def_neg}5.625 -1.27 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.B.str})
- (pad C thru_hole circle (at ${def_neg}5.625 1.27 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.C.str})
- (pad D thru_hole circle (at ${def_neg}5.625 3.81 ${p.rot}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.D.str})
+ (pad S1 thru_hole circle (at ${def_neg}6.85 -6.2 ${p.r}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.from})
+ (pad S2 thru_hole circle (at ${def_neg}5 -6.2 ${p.r}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.to})
+ (pad A thru_hole circle (at ${def_neg}5.625 -3.81 ${p.r}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.A})
+ (pad B thru_hole circle (at ${def_neg}5.625 -1.27 ${p.r}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.B})
+ (pad C thru_hole circle (at ${def_neg}5.625 1.27 ${p.r}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.C})
+ (pad D thru_hole circle (at ${def_neg}5.625 3.81 ${p.r}) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) ${p.D})
${'' /* stabilizer */}
- (pad "" np_thru_hole circle (at ${def_neg}5.625 6.3 ${p.rot}) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at ${def_neg}5.625 6.3 ${p.r}) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
`
}
if(p.reverse) {
diff --git a/src/footprints/slider.js b/src/footprints/slider.js
index fa117fd..12b3fd9 100644
--- a/src/footprints/slider.js
+++ b/src/footprints/slider.js
@@ -38,15 +38,15 @@ module.exports = {
(pad "" np_thru_hole circle (at -1.5 0) (size 1 1) (drill 0.9) (layers *.Cu *.Mask))
${'' /* pins */}
- (pad 1 smd rect (at ${right}2.25 2.075 ${p.rot}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from.str})
- (pad 2 smd rect (at ${left}0.75 2.075 ${p.rot}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to.str})
- (pad 3 smd rect (at ${left}2.25 2.075 ${p.rot}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
+ (pad 1 smd rect (at ${right}2.25 2.075 ${p.r}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.from})
+ (pad 2 smd rect (at ${left}0.75 2.075 ${p.r}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask) ${p.to})
+ (pad 3 smd rect (at ${left}2.25 2.075 ${p.r}) (size 0.9 1.25) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
${'' /* side mounts */}
- (pad "" smd rect (at 3.7 -1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
- (pad "" smd rect (at 3.7 1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
- (pad "" smd rect (at -3.7 1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
- (pad "" smd rect (at -3.7 -1.1 ${p.rot}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
+ (pad "" smd rect (at 3.7 -1.1 ${p.r}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
+ (pad "" smd rect (at 3.7 1.1 ${p.r}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
+ (pad "" smd rect (at -3.7 1.1 ${p.r}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
+ (pad "" smd rect (at -3.7 -1.1 ${p.r}) (size 0.9 0.9) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask))
)
`
diff --git a/src/footprints/trrs.js b/src/footprints/trrs.js
index 6728e7b..ede0002 100644
--- a/src/footprints/trrs.js
+++ b/src/footprints/trrs.js
@@ -71,10 +71,10 @@ module.exports = {
}
function pins(def_neg, def_pos) {
return `
- (pad 1 thru_hole oval (at ${def_neg} 11.3 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.A.str})
- (pad 2 thru_hole oval (at ${def_pos} 10.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.B.str})
- (pad 3 thru_hole oval (at ${def_pos} 6.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.C.str})
- (pad 4 thru_hole oval (at ${def_pos} 3.2 ${p.rot}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.D.str})
+ (pad 1 thru_hole oval (at ${def_neg} 11.3 ${p.r}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.A})
+ (pad 2 thru_hole oval (at ${def_pos} 10.2 ${p.r}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.B})
+ (pad 3 thru_hole oval (at ${def_pos} 6.2 ${p.r}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.C})
+ (pad 4 thru_hole oval (at ${def_pos} 3.2 ${p.r}) (size 1.6 2.2) (drill oval 0.9 1.5) (layers *.Cu *.Mask) ${p.D})
`
}
if(p.reverse & p.symmetric) {
diff --git a/src/footprints/via.js b/src/footprints/via.js
index c83924a..1b6dc5c 100644
--- a/src/footprints/via.js
+++ b/src/footprints/via.js
@@ -14,7 +14,7 @@ module.exports = {
(fp_text value VIA-0.6mm (at 0 -1.4) (layer F.Fab) hide (effects (font (size 1 1) (thickness 0.15))))
${'' /* via */}
- (pad 1 thru_hole circle (at 0 0) (size 0.6 0.6) (drill 0.3) (layers *.Cu) (zone_connect 2) ${p.net.str})
+ (pad 1 thru_hole circle (at 0 0) (size 0.6 0.6) (drill 0.3) (layers *.Cu) (zone_connect 2) ${p.net})
)
`
}
\ No newline at end of file
diff --git a/src/outlines.js b/src/outlines.js
index c1e675e..f837cde 100644
--- a/src/outlines.js
+++ b/src/outlines.js
@@ -136,20 +136,15 @@ const whats = {
outline
}
-const expand_shorthand = (config, units) => {
+const expand_shorthand = (config, name, units) => {
if (a.type(config.expand)(units) == 'string') {
const prefix = config.expand.slice(0, -1)
const suffix = config.expand.slice(-1)
- let expand = suffix
- let joints = 0
-
- if (suffix == ')') ; // noop
- else if (suffix == '>') joints = 1
- else if (suffix == ']') joints = 2
- else expand = config.expand
-
- config.expand = parseFloat(expand)
- config.joints = config.joints || joints
+ const valid_suffixes = [')', '>', ']']
+ a.assert(valid_suffixes.includes(suffix), `If field "${name}" is a string, ` +
+ `it should end with one of [${valid_suffixes.map(s => `'${s}'`).join(', ')}]!`)
+ config.expand = prefix
+ config.joints = config.joints || valid_suffixes.indexOf(suffix)
}
if (a.type(config.joints)(units) == 'string') {
@@ -159,7 +154,7 @@ const expand_shorthand = (config, units) => {
}
}
-exports.parse = (config = {}, points = {}, units = {}) => {
+exports.parse = (config, points, units) => {
// output outlines will be collected here
const outlines = {}
@@ -199,9 +194,8 @@ exports.parse = (config = {}, points = {}, units = {}) => {
const where = units => filter(original_where, `${name}.where`, points, units, asym)
const original_adjust = part.adjust // same as above
- const adjust = start => anchor(original_adjust || {}, `${name}.adjust`, points, start)(units)
const fillet = a.sane(part.fillet || 0, `${name}.fillet`, 'number')(units)
- expand_shorthand(part, units)
+ expand_shorthand(part, `${name}.expand`, units)
const expand = a.sane(part.expand || 0, `${name}.expand`, 'number')(units)
const joints = a.in(a.sane(part.joints || 0, `${name}.joints`, 'number')(units), `${name}.joints`, [0, 1, 2])
const scale = a.sane(part.scale || 1, `${name}.scale`, 'number')(units)
@@ -220,6 +214,7 @@ exports.parse = (config = {}, points = {}, units = {}) => {
// a prototype "shape" maker (and its units) are computed
const [shape_maker, shape_units] = whats[what](part, name, points, outlines, units)
+ const adjust = start => anchor(original_adjust || {}, `${name}.adjust`, points, start)(shape_units)
// and then the shape is repeated for all where positions
for (const w of where(shape_units)) {
diff --git a/src/pcbs.js b/src/pcbs.js
index 3289d12..59515d7 100644
--- a/src/pcbs.js
+++ b/src/pcbs.js
@@ -1,4 +1,6 @@
const m = require('makerjs')
+const yaml = require('js-yaml')
+
const u = require('./utils')
const a = require('./assert')
const prep = require('./prepare')
@@ -115,7 +117,7 @@ const kicad_netclass = `
)
`
-const makerjs2kicad = exports._makerjs2kicad = (model, layer='Edge.Cuts') => {
+const makerjs2kicad = exports._makerjs2kicad = (model, layer) => {
const grs = []
const xy = val => `${val[0]} ${-val[1]}`
m.model.walk(model, {
@@ -151,6 +153,24 @@ exports.inject_footprint = (name, fp) => {
footprint_types[name] = fp
}
+const xy_obj = (x, y) => {
+ return {
+ x,
+ y,
+ str: `${x} ${y}`,
+ toString: function() { return this.str }
+ }
+}
+
+const net_obj = (name, index) => {
+ return {
+ name,
+ index,
+ str: `(net ${index} "${name}")`,
+ toString: function() { return this.str }
+ }
+}
+
const footprint = exports._footprint = (points, net_indexer, component_indexer, units, extra) => (config, name, point) => {
// config sanitization
@@ -169,7 +189,7 @@ const footprint = exports._footprint = (points, net_indexer, component_indexer,
params = prep.extend(params, mirror_overrides)
}
a.unexpected(params, `${name}.params`, Object.keys(fp.params))
-
+
// parsing parameters
const parsed_params = {}
for (const [param_name, param_def] of Object.entries(fp.params)) {
@@ -183,40 +203,51 @@ const footprint = exports._footprint = (points, net_indexer, component_indexer,
parsed_def = {type: 'number', value: a.mathnum(param_def)(units)}
} else if (def_type == 'boolean') {
parsed_def = {type: 'boolean', value: param_def}
- } else if (def_type == 'undefined') {
+ } else if (def_type == 'array') {
+ parsed_def = {type: 'array', value: param_def}
+ } else if (def_type == 'object') {
+ // parsed param definitions also expand to an object
+ // so to detect whether this is an arbitrary object,
+ // we first have to make sure it's not an expanded param def
+ // (this has to be a heuristic, but should be pretty reliable)
+ const defarr = Object.keys(param_def)
+ const already_expanded = defarr.length == 2 && defarr.includes('type') && defarr.includes('value')
+ if (!already_expanded) {
+ parsed_def = {type: 'object', value: param_def}
+ }
+ } else {
parsed_def = {type: 'net', value: undefined}
}
// combine default value with potential user override
- let value = prep.extend(parsed_def.value, params[param_name])
- let type = parsed_def.type
-
+ let value = params[param_name] !== undefined ? params[param_name] : parsed_def.value
+ const type = parsed_def.type
+
// templating support, with conversion back to raw datatypes
const converters = {
string: v => v,
number: v => a.sane(v, `${name}.params.${param_name}`, 'number')(units),
boolean: v => v === 'true',
+ array: v => yaml.load(v),
+ object: v => yaml.load(v),
net: v => v,
- anchor: v => v
+ anchor: v => yaml.load(v)
}
+ a.in(type, `${name}.params.${param_name}.type`, Object.keys(converters))
if (a.type(value)() == 'string') {
value = u.template(value, point.meta)
value = converters[type](value)
}
- // type-specific processing
- if (['string', 'number', 'boolean'].includes(type)) {
+ // type-specific postprocessing
+ if (['string', 'number', 'boolean', 'array', 'object'].includes(type)) {
parsed_params[param_name] = value
} else if (type == 'net') {
const net = a.sane(value, `${name}.params.${param_name}`, 'string')(units)
const index = net_indexer(net)
- parsed_params[param_name] = {
- name: net,
- index: index,
- str: `(net ${index} "${net}")`
- }
- } else if (type == 'anchor') {
- let parsed_anchor = anchor(value || {}, `${name}.params.${param_name}`, points, point)(units)
+ parsed_params[param_name] = net_obj(net, index)
+ } else { // anchor
+ let parsed_anchor = anchor(value, `${name}.params.${param_name}`, points, point)(units)
parsed_anchor.y = -parsed_anchor.y // kicad mirror, as per usual
parsed_params[param_name] = parsed_anchor
}
@@ -227,31 +258,35 @@ const footprint = exports._footprint = (points, net_indexer, component_indexer,
parsed_params.ref_hide = extra.references ? '' : 'hide'
// footprint positioning
+ parsed_params.x = point.x
+ parsed_params.y = -point.y
+ parsed_params.r = point.r
+ parsed_params.rot = point.r // to be deprecated
+ parsed_params.xy = `${point.x} ${-point.y}`
parsed_params.at = `(at ${point.x} ${-point.y} ${point.r})`
- parsed_params.rot = point.r
- parsed_params.ixy = (x, y) => {
- const sign = point.meta.mirrored ? -1 : 1
- return `${sign * x} ${y}`
+
+ const internal_xyfunc = (x, y, resist) => {
+ const sign = resist ? 1 : (point.meta.mirrored ? -1 : 1)
+ return xy_obj(sign * x, y)
}
- const xyfunc = (x, y, resist=true) => {
+ parsed_params.isxy = (x, y) => internal_xyfunc(x, y, false)
+ parsed_params.iaxy = (x, y) => internal_xyfunc(x, y, true)
+
+ const external_xyfunc = (x, y, resist) => {
const new_anchor = anchor({
shift: [x, -y],
resist: resist
}, '_internal_footprint_xy', points, point)(units)
- return `${new_anchor.x} ${-new_anchor.y}`
+ return xy_obj(new_anchor.x, -new_anchor.y)
}
- parsed_params.xy = (x, y) => xyfunc(x, y, true)
- parsed_params.sxy = (x, y) => xyfunc(x, y, false)
+ parsed_params.esxy = (x, y) => external_xyfunc(x, y, false)
+ parsed_params.eaxy = (x, y) => external_xyfunc(x, y, true)
// allowing footprints to add dynamic nets
parsed_params.local_net = suffix => {
const net = `${component_ref}_${suffix}`
const index = net_indexer(net)
- return {
- name: net,
- index: index,
- str: `(net ${index} "${net}")`
- }
+ return net_obj(net, index)
}
return fp.body(parsed_params)
diff --git a/src/point.js b/src/point.js
index 160e1fa..27e538a 100644
--- a/src/point.js
+++ b/src/point.js
@@ -76,4 +76,11 @@ module.exports = class Point {
const dy = other.y - this.y
return -Math.atan2(dx, dy) * (180 / Math.PI)
}
+
+ equals(other) {
+ return this.x === other.x
+ && this.y === other.y
+ && this.r === other.r
+ && JSON.stringify(this.meta) === JSON.stringify(other.meta)
+ }
}
diff --git a/src/points.js b/src/points.js
index d20bf40..8f50904 100644
--- a/src/points.js
+++ b/src/points.js
@@ -21,7 +21,7 @@ const render_zone = exports._render_zone = (zone_name, zone, anchor, global_key,
a.unexpected(zone, `points.zones.${zone_name}`, ['columns', 'rows', 'key'])
// the anchor comes from "above", because it needs other zones too (for references)
- const cols = a.sane(zone.columns || {}, `points.zones.${zone_name}.columns`, 'object')()
+ const cols = zone.columns = a.sane(zone.columns || {}, `points.zones.${zone_name}.columns`, 'object')()
const zone_wide_rows = a.sane(zone.rows || {}, `points.zones.${zone_name}.rows`, 'object')()
for (const [key, val] of Object.entries(zone_wide_rows)) {
zone_wide_rows[key] = val || {} // no check yet, as it will be extended later
@@ -43,7 +43,6 @@ const render_zone = exports._render_zone = (zone_name, zone, anchor, global_key,
// column layout
- const col_minmax = {}
if (!Object.keys(cols).length) {
cols.default = {}
}
@@ -53,7 +52,6 @@ const render_zone = exports._render_zone = (zone_name, zone, anchor, global_key,
// column-level sanitization
col = col || {}
- col_minmax[col_name] = {min: Infinity, max: -Infinity}
a.unexpected(
col,
@@ -92,6 +90,7 @@ const render_zone = exports._render_zone = (zone_name, zone, anchor, global_key,
orient: 0,
shift: [0, 0],
rotate: 0,
+ adjust: {},
width: units.$default_width,
height: units.$default_height,
padding: units.$default_padding,
@@ -117,7 +116,7 @@ const render_zone = exports._render_zone = (zone_name, zone, anchor, global_key,
key.col.name = col_name
key.row = row
- key.stagger = a.sane(key.stagger, `${key.name}.shift`, 'number')(units)
+ key.stagger = a.sane(key.stagger, `${key.name}.stagger`, 'number')(units)
key.spread = a.sane(key.spread, `${key.name}.spread`, 'number')(units)
key.splay = a.sane(key.splay, `${key.name}.splay`, 'number')(units)
key.origin = a.xy(key.origin, `${key.name}.origin`)(units)
@@ -168,83 +167,34 @@ const render_zone = exports._render_zone = (zone_name, zone, anchor, global_key,
// copy the current column anchor
let point = running_anchor.clone()
- // apply per-key adjustments
+ // apply cumulative per-key adjustments
point.r += key.orient
point.shift(key.shift)
point.r += key.rotate
+ // commit running anchor
+ running_anchor = point.clone()
+
+ // apply independent adjustments
+ point = anchor_lib.parse(key.adjust, `${key.name}.adjust`, {}, point)(units)
+
// save new key
point.meta = key
points[key.name] = point
- // collect minmax stats for autobind
- col_minmax[col_name].min = Math.min(col_minmax[col_name].min, point.y)
- col_minmax[col_name].max = Math.max(col_minmax[col_name].max, point.y)
-
// advance the running anchor to the next position
- running_anchor = point.clone()
running_anchor.shift([0, key.padding])
}
first_col = false
}
- // autobind
-
- let col_names = Object.keys(col_minmax)
- let col_index = 0
- for (const [col_name, bounds] of Object.entries(col_minmax)) {
- for (const point of Object.values(points)) {
- if (point.meta.col.name != col_name) continue
- if (!point.meta.autobind) continue
- const autobind = a.sane(point.meta.autobind, `${point.meta.name}.autobind`, 'number')(units)
- // specify default as -1, so we can recognize where it was left undefined even after number-ification
- const bind = point.meta.bind = a.trbl(point.meta.bind, `${point.meta.name}.bind`, -1)(units)
-
- // up
- if (bind[0] == -1) {
- if (point.y < bounds.max) bind[0] = autobind
- else bind[0] = 0
-
- }
-
- // right
- if (bind[1] == -1) {
- bind[1] = 0
- if (col_index < col_names.length - 1) {
- const right = col_minmax[col_names[col_index + 1]]
- if (point.y >= right.min && point.y <= right.max) {
- bind[1] = autobind
- }
- }
- }
-
- // down
- if (bind[2] == -1) {
- if (point.y > bounds.min) bind[2] = autobind
- else bind[2] = 0
- }
-
- // left
- if (bind[3] == -1) {
- bind[3] = 0
- if (col_index > 0) {
- const left = col_minmax[col_names[col_index - 1]]
- if (point.y >= left.min && point.y <= left.max) {
- bind[3] = autobind
- }
- }
- }
- }
- col_index++
- }
-
return points
}
const parse_axis = exports._parse_axis = (config, name, points, units) => {
if (!['number', 'undefined'].includes(a.type(config)(units))) {
- const mirror_obj = a.sane(config || {}, name, 'object')()
+ const mirror_obj = a.sane(config, name, 'object')()
const distance = a.sane(mirror_obj.distance || 0, `${name}.distance`, 'number')(units)
delete mirror_obj.distance
let axis = anchor_lib.parse(mirror_obj, name, points)(units).x
@@ -254,21 +204,91 @@ const parse_axis = exports._parse_axis = (config, name, points, units) => {
}
const perform_mirror = exports._perform_mirror = (point, axis) => {
- if (axis !== undefined) {
- point.meta.mirrored = false
- if (point.meta.asym == 'source') return ['', null]
- const mp = point.clone().mirror(axis)
- const mirrored_name = `mirror_${point.meta.name}`
- mp.meta = prep.extend(mp.meta, mp.meta.mirror || {})
- mp.meta.name = mirrored_name
- mp.meta.colrow = `mirror_${mp.meta.colrow}`
- mp.meta.mirrored = true
- if (point.meta.asym == 'clone') {
- point.meta.skip = true
- }
- return [mirrored_name, mp]
+ point.meta.mirrored = false
+ if (point.meta.asym == 'source') return ['', null]
+ const mp = point.clone().mirror(axis)
+ const mirrored_name = `mirror_${point.meta.name}`
+ mp.meta = prep.extend(mp.meta, mp.meta.mirror || {})
+ mp.meta.name = mirrored_name
+ mp.meta.colrow = `mirror_${mp.meta.colrow}`
+ mp.meta.mirrored = true
+ if (point.meta.asym == 'clone') {
+ point.meta.skip = true
+ }
+ return [mirrored_name, mp]
+}
+
+const perform_autobind = exports._perform_autobind = (points, units) => {
+
+ const bounds = {}
+ const col_lists = {}
+ const mirrorzone = p => (p.meta.mirrored ? 'mirror_' : '') + p.meta.zone.name
+
+ // round one: get column upper/lower bounds and per-zone column lists
+ for (const p of Object.values(points)) {
+
+ const zone = mirrorzone(p)
+ const col = p.meta.col.name
+
+ if (!bounds[zone]) bounds[zone] = {}
+ if (!bounds[zone][col]) bounds[zone][col] = {min: Infinity, max: -Infinity}
+ if (!col_lists[zone]) col_lists[zone] = Object.keys(p.meta.zone.columns)
+
+ bounds[zone][col].min = Math.min(bounds[zone][col].min, p.y)
+ bounds[zone][col].max = Math.max(bounds[zone][col].max, p.y)
+ }
+
+ // round two: apply autobind as appropriate
+ for (const p of Object.values(points)) {
+
+ const autobind = a.sane(p.meta.autobind, `${p.meta.name}.autobind`, 'number')(units)
+ if (!autobind) continue
+
+ const zone = mirrorzone(p)
+ const col = p.meta.col.name
+ const col_list = col_lists[zone]
+ const col_bounds = bounds[zone][col]
+
+
+ // specify default as -1, so we can recognize where it was left undefined even after number-ification
+ const bind = p.meta.bind = a.trbl(p.meta.bind, `${p.meta.name}.bind`, -1)(units)
+
+ // up
+ if (bind[0] == -1) {
+ if (p.y < col_bounds.max) bind[0] = autobind
+ else bind[0] = 0
+ }
+
+ // down
+ if (bind[2] == -1) {
+ if (p.y > col_bounds.min) bind[2] = autobind
+ else bind[2] = 0
+ }
+
+ // left
+ if (bind[3] == -1) {
+ bind[3] = 0
+ const col_index = col_list.indexOf(col)
+ if (col_index > 0) {
+ const left = bounds[zone][col_list[col_index - 1]]
+ if (left && p.y >= left.min && p.y <= left.max) {
+ bind[3] = autobind
+ }
+ }
+ }
+
+ // right
+ if (bind[1] == -1) {
+ bind[1] = 0
+ const col_index = col_list.indexOf(col)
+ if (col_index < col_list.length - 1) {
+ const right = bounds[zone][col_list[col_index + 1]]
+ if (right && p.y >= right.min && p.y <= right.max) {
+ bind[1] = autobind
+ }
+ }
+ }
}
- return ['', null]
}
exports.parse = (config, units) => {
@@ -300,13 +320,11 @@ exports.parse = (config, units) => {
// simplifying the names in individual point "zones" and single-key columns
while (Object.keys(new_points).some(k => k.endsWith('_default'))) {
- for (const key of Object.keys(new_points)) {
- if (key.endsWith('_default')) {
- const new_key = key.slice(0, -8)
- new_points[new_key] = new_points[key]
- new_points[new_key].meta.name = new_key
- delete new_points[key]
- }
+ for (const key of Object.keys(new_points).filter(k => k.endsWith('_default'))) {
+ const new_key = key.slice(0, -8)
+ new_points[new_key] = new_points[key]
+ new_points[new_key].meta.name = new_key
+ delete new_points[key]
}
}
@@ -352,7 +370,7 @@ exports.parse = (config, units) => {
const global_axis = parse_axis(global_mirror, `points.mirror`, points, units)
const global_mirrored_points = {}
for (const point of Object.values(points)) {
- if (global_axis !== undefined && point.mirrored === undefined) {
+ if (global_axis !== undefined && point.meta.mirrored === undefined) {
const [mname, mp] = perform_mirror(point, global_axis)
if (mp) {
global_mirrored_points[mname] = mp
@@ -368,6 +386,9 @@ exports.parse = (config, units) => {
filtered[k] = p
}
+ // apply autobind
+ perform_autobind(filtered, units)
+
// done
return filtered
}
diff --git a/src/prepare.js b/src/prepare.js
index 2314542..48edd7f 100644
--- a/src/prepare.js
+++ b/src/prepare.js
@@ -42,11 +42,14 @@ const traverse = exports.traverse = (config, root, breadcrumbs, op) => {
}
return result
} else if (a.type(config)() == 'array') {
+ // needed so that arrays can set output the same way as objects within ops
+ const dummy = {}
const result = []
let index = 0
for (const val of config) {
breadcrumbs.push(`[${index}]`)
- result[index] = traverse(val, root, breadcrumbs, op)
+ op(dummy, 'dummykey', traverse(val, root, breadcrumbs, op), root, breadcrumbs)
+ result[index] = dummy.dummykey
breadcrumbs.pop()
index++
}
diff --git a/src/utils.js b/src/utils.js
index de9cb5f..34a852d 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -23,7 +23,7 @@ exports.template = (str, vals={}) => {
let res = str
let shift = 0
for (const match of str.matchAll(regex)) {
- const replacement = deep(vals, match[1]) || ''
+ const replacement = (deep(vals, match[1]) || '') + ''
res = res.substring(0, match.index + shift)
+ replacement
+ res.substring(match.index + shift + match[0].length)
diff --git a/test/cases/cube___cases_cube_jscad.jscad b/test/cases/cube___cases_cube_jscad.jscad
index bb9cda8..349bb42 100644
--- a/test/cases/cube___cases_cube_jscad.jscad
+++ b/test/cases/cube___cases_cube_jscad.jscad
@@ -1,4 +1,4 @@
-function square_outline_fn(){
+function square_extrude_5_outline_fn(){
return new CSG.Path2D([[-2.5,-2.5],[2.5,-2.5]]).appendPoint([2.5,2.5]).appendPoint([-2.5,2.5]).appendPoint([-2.5,-2.5]).close().innerToCAG()
.extrude({ offset: [0, 0, 5] });
}
@@ -10,7 +10,7 @@ function square_outline_fn(){
// creating part 0 of case cube
- let cube__part_0 = square_outline_fn();
+ let cube__part_0 = square_extrude_5_outline_fn();
// make sure that rotations are relative
let cube__part_0_bounds = cube__part_0.getBounds();
diff --git a/test/cases/operations.yaml b/test/cases/operations.yaml
new file mode 100644
index 0000000..47984f1
--- /dev/null
+++ b/test/cases/operations.yaml
@@ -0,0 +1,36 @@
+points.zones.matrix: {}
+outlines:
+ _square:
+ - what: rectangle
+ where: true
+ size: [8, 8]
+ _circle:
+ - what: circle
+ where: true
+ radius: 3
+cases:
+ _cube:
+ - name: _square
+ extrude: 8
+ _cylinder_one:
+ - name: _circle
+ extrude: 8
+ _subtract:
+ target:
+ name: _cube
+ what: case
+ tool:
+ name: _cylinder_one
+ what: case
+ operation: subtract
+ _cylinder_two:
+ - name: _circle
+ extrude: 8
+ shift: [0,4,4]
+ rotate: [90,0,0]
+ _flat_square:
+ - "_square"
+ combination:
+ - "_subtract"
+ - "~_cylinder_two"
+ - "+_flat_square"
diff --git a/test/cases/operations___cases_combination_jscad.jscad b/test/cases/operations___cases_combination_jscad.jscad
new file mode 100644
index 0000000..1fb8cb8
--- /dev/null
+++ b/test/cases/operations___cases_combination_jscad.jscad
@@ -0,0 +1,211 @@
+function _square_extrude_8_outline_fn(){
+ return new CSG.Path2D([[-4,-4],[4,-4]]).appendPoint([4,4]).appendPoint([-4,4]).appendPoint([-4,-4]).close().innerToCAG()
+.extrude({ offset: [0, 0, 8] });
+}
+
+
+function _circle_extrude_8_outline_fn(){
+ return CAG.circle({"center":[0,0],"radius":3})
+.extrude({ offset: [0, 0, 8] });
+}
+
+
+function _square_extrude_1_outline_fn(){
+ return new CSG.Path2D([[-4,-4],[4,-4]]).appendPoint([4,4]).appendPoint([-4,4]).appendPoint([-4,-4]).close().innerToCAG()
+.extrude({ offset: [0, 0, 1] });
+}
+
+
+
+
+ function _subtract_case_fn() {
+
+
+ // creating part target of case _subtract
+ let _subtract__part_target = _cube_case_fn();
+
+ // make sure that rotations are relative
+ let _subtract__part_target_bounds = _subtract__part_target.getBounds();
+ let _subtract__part_target_x = _subtract__part_target_bounds[0].x + (_subtract__part_target_bounds[1].x - _subtract__part_target_bounds[0].x) / 2
+ let _subtract__part_target_y = _subtract__part_target_bounds[0].y + (_subtract__part_target_bounds[1].y - _subtract__part_target_bounds[0].y) / 2
+ _subtract__part_target = translate([-_subtract__part_target_x, -_subtract__part_target_y, 0], _subtract__part_target);
+ _subtract__part_target = rotate([0,0,0], _subtract__part_target);
+ _subtract__part_target = translate([_subtract__part_target_x, _subtract__part_target_y, 0], _subtract__part_target);
+
+ _subtract__part_target = translate([0,0,0], _subtract__part_target);
+ let result = _subtract__part_target;
+
+
+
+ // creating part tool of case _subtract
+ let _subtract__part_tool = _cylinder_one_case_fn();
+
+ // make sure that rotations are relative
+ let _subtract__part_tool_bounds = _subtract__part_tool.getBounds();
+ let _subtract__part_tool_x = _subtract__part_tool_bounds[0].x + (_subtract__part_tool_bounds[1].x - _subtract__part_tool_bounds[0].x) / 2
+ let _subtract__part_tool_y = _subtract__part_tool_bounds[0].y + (_subtract__part_tool_bounds[1].y - _subtract__part_tool_bounds[0].y) / 2
+ _subtract__part_tool = translate([-_subtract__part_tool_x, -_subtract__part_tool_y, 0], _subtract__part_tool);
+ _subtract__part_tool = rotate([0,0,0], _subtract__part_tool);
+ _subtract__part_tool = translate([_subtract__part_tool_x, _subtract__part_tool_y, 0], _subtract__part_tool);
+
+ _subtract__part_tool = translate([0,0,0], _subtract__part_tool);
+ result = result.subtract(_subtract__part_tool);
+
+
+ return result;
+ }
+
+
+
+ function _cube_case_fn() {
+
+
+ // creating part 0 of case _cube
+ let _cube__part_0 = _square_extrude_8_outline_fn();
+
+ // make sure that rotations are relative
+ let _cube__part_0_bounds = _cube__part_0.getBounds();
+ let _cube__part_0_x = _cube__part_0_bounds[0].x + (_cube__part_0_bounds[1].x - _cube__part_0_bounds[0].x) / 2
+ let _cube__part_0_y = _cube__part_0_bounds[0].y + (_cube__part_0_bounds[1].y - _cube__part_0_bounds[0].y) / 2
+ _cube__part_0 = translate([-_cube__part_0_x, -_cube__part_0_y, 0], _cube__part_0);
+ _cube__part_0 = rotate([0,0,0], _cube__part_0);
+ _cube__part_0 = translate([_cube__part_0_x, _cube__part_0_y, 0], _cube__part_0);
+
+ _cube__part_0 = translate([0,0,0], _cube__part_0);
+ let result = _cube__part_0;
+
+
+ return result;
+ }
+
+
+
+ function _cylinder_one_case_fn() {
+
+
+ // creating part 0 of case _cylinder_one
+ let _cylinder_one__part_0 = _circle_extrude_8_outline_fn();
+
+ // make sure that rotations are relative
+ let _cylinder_one__part_0_bounds = _cylinder_one__part_0.getBounds();
+ let _cylinder_one__part_0_x = _cylinder_one__part_0_bounds[0].x + (_cylinder_one__part_0_bounds[1].x - _cylinder_one__part_0_bounds[0].x) / 2
+ let _cylinder_one__part_0_y = _cylinder_one__part_0_bounds[0].y + (_cylinder_one__part_0_bounds[1].y - _cylinder_one__part_0_bounds[0].y) / 2
+ _cylinder_one__part_0 = translate([-_cylinder_one__part_0_x, -_cylinder_one__part_0_y, 0], _cylinder_one__part_0);
+ _cylinder_one__part_0 = rotate([0,0,0], _cylinder_one__part_0);
+ _cylinder_one__part_0 = translate([_cylinder_one__part_0_x, _cylinder_one__part_0_y, 0], _cylinder_one__part_0);
+
+ _cylinder_one__part_0 = translate([0,0,0], _cylinder_one__part_0);
+ let result = _cylinder_one__part_0;
+
+
+ return result;
+ }
+
+
+
+ function _cylinder_two_case_fn() {
+
+
+ // creating part 0 of case _cylinder_two
+ let _cylinder_two__part_0 = _circle_extrude_8_outline_fn();
+
+ // make sure that rotations are relative
+ let _cylinder_two__part_0_bounds = _cylinder_two__part_0.getBounds();
+ let _cylinder_two__part_0_x = _cylinder_two__part_0_bounds[0].x + (_cylinder_two__part_0_bounds[1].x - _cylinder_two__part_0_bounds[0].x) / 2
+ let _cylinder_two__part_0_y = _cylinder_two__part_0_bounds[0].y + (_cylinder_two__part_0_bounds[1].y - _cylinder_two__part_0_bounds[0].y) / 2
+ _cylinder_two__part_0 = translate([-_cylinder_two__part_0_x, -_cylinder_two__part_0_y, 0], _cylinder_two__part_0);
+ _cylinder_two__part_0 = rotate([90,0,0], _cylinder_two__part_0);
+ _cylinder_two__part_0 = translate([_cylinder_two__part_0_x, _cylinder_two__part_0_y, 0], _cylinder_two__part_0);
+
+ _cylinder_two__part_0 = translate([0,4,4], _cylinder_two__part_0);
+ let result = _cylinder_two__part_0;
+
+
+ return result;
+ }
+
+
+
+ function _flat_square_case_fn() {
+
+
+ // creating part 0 of case _flat_square
+ let _flat_square__part_0 = _square_extrude_1_outline_fn();
+
+ // make sure that rotations are relative
+ let _flat_square__part_0_bounds = _flat_square__part_0.getBounds();
+ let _flat_square__part_0_x = _flat_square__part_0_bounds[0].x + (_flat_square__part_0_bounds[1].x - _flat_square__part_0_bounds[0].x) / 2
+ let _flat_square__part_0_y = _flat_square__part_0_bounds[0].y + (_flat_square__part_0_bounds[1].y - _flat_square__part_0_bounds[0].y) / 2
+ _flat_square__part_0 = translate([-_flat_square__part_0_x, -_flat_square__part_0_y, 0], _flat_square__part_0);
+ _flat_square__part_0 = rotate([0,0,0], _flat_square__part_0);
+ _flat_square__part_0 = translate([_flat_square__part_0_x, _flat_square__part_0_y, 0], _flat_square__part_0);
+
+ _flat_square__part_0 = translate([0,0,0], _flat_square__part_0);
+ let result = _flat_square__part_0;
+
+
+ return result;
+ }
+
+
+
+ function combination_case_fn() {
+
+
+ // creating part 0 of case combination
+ let combination__part_0 = _subtract_case_fn();
+
+ // make sure that rotations are relative
+ let combination__part_0_bounds = combination__part_0.getBounds();
+ let combination__part_0_x = combination__part_0_bounds[0].x + (combination__part_0_bounds[1].x - combination__part_0_bounds[0].x) / 2
+ let combination__part_0_y = combination__part_0_bounds[0].y + (combination__part_0_bounds[1].y - combination__part_0_bounds[0].y) / 2
+ combination__part_0 = translate([-combination__part_0_x, -combination__part_0_y, 0], combination__part_0);
+ combination__part_0 = rotate([0,0,0], combination__part_0);
+ combination__part_0 = translate([combination__part_0_x, combination__part_0_y, 0], combination__part_0);
+
+ combination__part_0 = translate([0,0,0], combination__part_0);
+ let result = combination__part_0;
+
+
+
+ // creating part 1 of case combination
+ let combination__part_1 = _cylinder_two_case_fn();
+
+ // make sure that rotations are relative
+ let combination__part_1_bounds = combination__part_1.getBounds();
+ let combination__part_1_x = combination__part_1_bounds[0].x + (combination__part_1_bounds[1].x - combination__part_1_bounds[0].x) / 2
+ let combination__part_1_y = combination__part_1_bounds[0].y + (combination__part_1_bounds[1].y - combination__part_1_bounds[0].y) / 2
+ combination__part_1 = translate([-combination__part_1_x, -combination__part_1_y, 0], combination__part_1);
+ combination__part_1 = rotate([0,0,0], combination__part_1);
+ combination__part_1 = translate([combination__part_1_x, combination__part_1_y, 0], combination__part_1);
+
+ combination__part_1 = translate([0,0,0], combination__part_1);
+ result = result.intersect(combination__part_1);
+
+
+
+ // creating part 2 of case combination
+ let combination__part_2 = _flat_square_case_fn();
+
+ // make sure that rotations are relative
+ let combination__part_2_bounds = combination__part_2.getBounds();
+ let combination__part_2_x = combination__part_2_bounds[0].x + (combination__part_2_bounds[1].x - combination__part_2_bounds[0].x) / 2
+ let combination__part_2_y = combination__part_2_bounds[0].y + (combination__part_2_bounds[1].y - combination__part_2_bounds[0].y) / 2
+ combination__part_2 = translate([-combination__part_2_x, -combination__part_2_y, 0], combination__part_2);
+ combination__part_2 = rotate([0,0,0], combination__part_2);
+ combination__part_2 = translate([combination__part_2_x, combination__part_2_y, 0], combination__part_2);
+
+ combination__part_2 = translate([0,0,0], combination__part_2);
+ result = result.union(combination__part_2);
+
+
+ return result;
+ }
+
+
+
+ function main() {
+ return combination_case_fn();
+ }
+
+
\ No newline at end of file
diff --git a/test/cli/big/reference/cases/_export.jscad b/test/cli/big/reference/cases/_export.jscad
index a98416f..bb85f72 100644
--- a/test/cli/big/reference/cases/_export.jscad
+++ b/test/cli/big/reference/cases/_export.jscad
@@ -1,4 +1,4 @@
-function export_outline_fn(){
+function export_extrude_1_outline_fn(){
return new CSG.Path2D([[-9,-9],[9,-9]]).appendPoint([9,9]).appendPoint([-9,9]).appendPoint([-9,-9]).close().innerToCAG()
.extrude({ offset: [0, 0, 1] });
}
@@ -10,7 +10,7 @@ function export_outline_fn(){
// creating part 0 of case _export
- let _export__part_0 = export_outline_fn();
+ let _export__part_0 = export_extrude_1_outline_fn();
// make sure that rotations are relative
let _export__part_0_bounds = _export__part_0.getBounds();
diff --git a/test/cli/big/reference/cases/export.jscad b/test/cli/big/reference/cases/export.jscad
index 6ccb677..19511e7 100644
--- a/test/cli/big/reference/cases/export.jscad
+++ b/test/cli/big/reference/cases/export.jscad
@@ -1,4 +1,4 @@
-function export_outline_fn(){
+function export_extrude_1_outline_fn(){
return new CSG.Path2D([[-9,-9],[9,-9]]).appendPoint([9,9]).appendPoint([-9,9]).appendPoint([-9,-9]).close().innerToCAG()
.extrude({ offset: [0, 0, 1] });
}
@@ -10,7 +10,7 @@ function export_outline_fn(){
// creating part 0 of case export
- let export__part_0 = export_outline_fn();
+ let export__part_0 = export_extrude_1_outline_fn();
// make sure that rotations are relative
let export__part_0_bounds = export__part_0.getBounds();
diff --git a/test/cli/big/reference/pcbs/_export.kicad_pcb b/test/cli/big/reference/pcbs/_export.kicad_pcb
index 8644559..53faa54 100644
--- a/test/cli/big/reference/pcbs/_export.kicad_pcb
+++ b/test/cli/big/reference/pcbs/_export.kicad_pcb
@@ -5,8 +5,8 @@
(page A3)
(title_block
(title _export)
- (rev v1.0.0)
- (company Unknown)
+ (rev v3.14)
+ (company MrZealot)
)
(general
diff --git a/test/cli/big/reference/pcbs/export.kicad_pcb b/test/cli/big/reference/pcbs/export.kicad_pcb
index d2e5a7b..e52b3b8 100644
--- a/test/cli/big/reference/pcbs/export.kicad_pcb
+++ b/test/cli/big/reference/pcbs/export.kicad_pcb
@@ -5,8 +5,8 @@
(page A3)
(title_block
(title export)
- (rev v1.0.0)
- (company Unknown)
+ (rev v3.14)
+ (company MrZealot)
)
(general
diff --git a/test/cli/big/reference/points/points.yaml b/test/cli/big/reference/points/points.yaml
index 911c06d..fc6b036 100644
--- a/test/cli/big/reference/points/points.yaml
+++ b/test/cli/big/reference/points/points.yaml
@@ -14,6 +14,7 @@ matrix:
- 0
- 0
rotate: 0
+ adjust: {}
width: 18
height: 18
padding: 19
@@ -23,6 +24,11 @@ matrix:
colrow: default_default
name: matrix
zone:
+ columns:
+ default:
+ rows: {}
+ key: {}
+ name: default
name: matrix
col:
rows: {}
diff --git a/test/cli/big/reference/source/canonical.yaml b/test/cli/big/reference/source/canonical.yaml
index 41858d8..409691a 100644
--- a/test/cli/big/reference/source/canonical.yaml
+++ b/test/cli/big/reference/source/canonical.yaml
@@ -1,3 +1,6 @@
+meta:
+ author: MrZealot
+ version: v3.14
units:
a: 28 + u
points:
diff --git a/test/cli/big/reference/source/raw.txt b/test/cli/big/reference/source/raw.txt
index 9d6d2e7..843cf13 100644
--- a/test/cli/big/reference/source/raw.txt
+++ b/test/cli/big/reference/source/raw.txt
@@ -1,3 +1,6 @@
+meta:
+ author: MrZealot
+ version: v3.14
units:
a: 28 + u
points.zones.matrix:
diff --git a/test/cli/minimal/reference/points/points.yaml b/test/cli/minimal/reference/points/points.yaml
index 63b3d11..a2c7bb5 100644
--- a/test/cli/minimal/reference/points/points.yaml
+++ b/test/cli/minimal/reference/points/points.yaml
@@ -14,6 +14,7 @@ matrix_col_row:
- 0
- 0
rotate: 0
+ adjust: {}
width: 18
height: 18
padding: 19
@@ -24,14 +25,17 @@ matrix_col_row:
name: matrix_col_row
zone:
columns:
- col: &ref_0
+ col:
rows: {}
key: {}
name: col
rows:
row: {}
name: matrix
- col: *ref_0
+ col:
+ rows: {}
+ key: {}
+ name: col
row: row
bind:
- 0
diff --git a/test/fixtures/big.yaml b/test/fixtures/big.yaml
index 9d6d2e7..843cf13 100644
--- a/test/fixtures/big.yaml
+++ b/test/fixtures/big.yaml
@@ -1,3 +1,6 @@
+meta:
+ author: MrZealot
+ version: v3.14
units:
a: 28 + u
points.zones.matrix:
diff --git a/test/fixtures/minimal_kle.json b/test/fixtures/minimal_kle.json
new file mode 100644
index 0000000..0e60b85
--- /dev/null
+++ b/test/fixtures/minimal_kle.json
@@ -0,0 +1,15 @@
+[
+ [
+ "0_0",
+ "0_1"
+ ],
+ [
+ "1_0",
+ "1_1"
+ ],
+ [
+ "",
+ ""
+ ]
+]
+
diff --git a/test/footprints/choc.yaml b/test/footprints/choc.yaml
index 2c3e39e..016eeae 100644
--- a/test/footprints/choc.yaml
+++ b/test/footprints/choc.yaml
@@ -38,4 +38,14 @@ pcbs.pcb.footprints:
to: to
reverse: true
hotswap: true
- adjust.shift: [200, 0]
\ No newline at end of file
+ adjust.shift: [200, 0]
+
+ # all of keycaps, reverse and hotswap
+ - what: choc
+ params:
+ from: from
+ to: to
+ keycaps: true
+ reverse: true
+ hotswap: true
+ adjust.shift: [250, 0]
diff --git a/test/footprints/choc___pcbs_pcb.kicad_pcb b/test/footprints/choc___pcbs_pcb.kicad_pcb
index 3fabc5e..43736fd 100644
--- a/test/footprints/choc___pcbs_pcb.kicad_pcb
+++ b/test/footprints/choc___pcbs_pcb.kicad_pcb
@@ -284,6 +284,58 @@
+ (pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -3.275 -5.95 0) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 1 "from"))
+ (pad 2 smd rect (at 8.275 -3.75 0) (size 2.6 2.6) (layers B.Cu B.Paste B.Mask) (net 2 "to"))
+
+
+
+ (pad "" np_thru_hole circle (at -5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at 3.275 -5.95 0) (size 2.6 2.6) (layers F.Cu F.Paste F.Mask) (net 1 "from"))
+ (pad 2 smd rect (at -8.275 -3.75 0) (size 2.6 2.6) (layers F.Cu F.Paste F.Mask) (net 2 "to"))
+ )
+
+
+
+ (module PG1350 (layer F.Cu) (tedit 5DD50112)
+ (at 250 0 0)
+
+
+ (fp_text reference "S6" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.429 3.429) (drill 3.429) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.5 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
(pad "" np_thru_hole circle (at 5 -3.75) (size 3 3) (drill 3) (layers *.Cu *.Mask))
(pad "" np_thru_hole circle (at 0 -5.95) (size 3 3) (drill 3) (layers *.Cu *.Mask))
diff --git a/test/footprints/chocmini.yaml b/test/footprints/chocmini.yaml
index 2cadb43..5312a0d 100644
--- a/test/footprints/chocmini.yaml
+++ b/test/footprints/chocmini.yaml
@@ -22,3 +22,12 @@ pcbs.pcb.footprints:
to: to
reverse: true
adjust.shift: [100, 0]
+
+ # reverse with keycap visualization
+ - what: chocmini
+ params:
+ from: from
+ to: to
+ keycaps: true
+ reverse: true
+ adjust.shift: [150, 0]
diff --git a/test/footprints/chocmini___pcbs_pcb.kicad_pcb b/test/footprints/chocmini___pcbs_pcb.kicad_pcb
index 650ceb0..784556a 100644
--- a/test/footprints/chocmini___pcbs_pcb.kicad_pcb
+++ b/test/footprints/chocmini___pcbs_pcb.kicad_pcb
@@ -267,6 +267,67 @@
)
+
+
+ (module lib:Kailh_PG1232 (layer F.Cu) (tedit 5E1ADAC2)
+ (at 150 0 0)
+
+
+ (fp_text reference "S4" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value Kailh_PG1232 (at 0 -7.3) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
+
+
+ (fp_line (start -7.25 -6.75) (end -6.25 -6.75) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7.25 -6.75) (end -7.25 -5.75) (layer Dwgs.User) (width 0.15))
+
+ (fp_line (start -7.25 6.75) (end -6.25 6.75) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7.25 6.75) (end -7.25 5.75) (layer Dwgs.User) (width 0.15))
+
+ (fp_line (start 7.25 -6.75) (end 6.25 -6.75) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7.25 -6.75) (end 7.25 -5.75) (layer Dwgs.User) (width 0.15))
+
+ (fp_line (start 7.25 6.75) (end 6.25 6.75) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7.25 6.75) (end 7.25 5.75) (layer Dwgs.User) (width 0.15))
+
+
+ (fp_line (start 2.8 -5.35) (end -2.8 -5.35) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -2.8 -3.2) (end 2.8 -3.2) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 2.8 -3.2) (end 2.8 -5.35) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -2.8 -3.2) (end -2.8 -5.35) (layer Dwgs.User) (width 0.15))
+
+
+ (fp_line (start 2.25 2.6) (end 5.8 2.6) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start -2.25 2.6) (end -5.8 2.6) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start 2.25 3.6) (end 2.25 2.6) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start -2.25 3.6) (end 2.25 3.6) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start -2.25 2.6) (end -2.25 3.6) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start -5.8 2.6) (end -5.8 -2.95) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start 5.8 -2.95) (end 5.8 2.6) (layer Edge.Cuts) (width 0.12))
+ (fp_line (start -5.8 -2.95) (end 5.8 -2.95) (layer Edge.Cuts) (width 0.12))
+
+
+ (pad 3 thru_hole circle (at 5.3 -4.75) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (clearance 0.2))
+ (pad 4 thru_hole circle (at -5.3 -4.75) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (clearance 0.2))
+
+
+
+ (fp_line (start -9 -8.5) (end 9 -8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 -8.5) (end 9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9 8.5) (end -9 8.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9 8.5) (end -9 -8.5) (layer Dwgs.User) (width 0.15))
+
+
+
+ (pad 1 thru_hole circle (at -4.58 5.1) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (net 1 "from") (clearance 0.2))
+ (pad 2 thru_hole circle (at 2 5.4) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (net 2 "to") (clearance 0.2))
+
+
+
+ (pad 1 thru_hole circle (at 4.58 5.1) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (net 1 "from") (clearance 0.2))
+ (pad 2 thru_hole circle (at -2 5.4) (size 1.6 1.6) (drill 1.1) (layers *.Cu *.Mask) (net 2 "to") (clearance 0.2))
+ )
+
+
)
diff --git a/test/footprints/mx.yaml b/test/footprints/mx.yaml
index ee4a5dc..d1f200b 100644
--- a/test/footprints/mx.yaml
+++ b/test/footprints/mx.yaml
@@ -38,4 +38,14 @@ pcbs.pcb.footprints:
to: to
reverse: true
hotswap: true
- adjust.shift: [200, 0]
\ No newline at end of file
+ adjust.shift: [200, 0]
+
+ # all of keycaps, reverse and hotswap
+ - what: mx
+ params:
+ from: from
+ to: to
+ keycaps: true
+ reverse: true
+ hotswap: true
+ adjust.shift: [250, 0]
diff --git a/test/footprints/mx___pcbs_pcb.kicad_pcb b/test/footprints/mx___pcbs_pcb.kicad_pcb
index dbb3d65..01d7823 100644
--- a/test/footprints/mx___pcbs_pcb.kicad_pcb
+++ b/test/footprints/mx___pcbs_pcb.kicad_pcb
@@ -284,6 +284,58 @@
+ (pad "" np_thru_hole circle (at 2.54 -5.08) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -3.81 -2.54) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -7.085 -2.54 0) (size 2.55 2.5) (layers B.Cu B.Paste B.Mask) (net 1 "from"))
+ (pad 2 smd rect (at 5.842 -5.08 0) (size 2.55 2.5) (layers B.Cu B.Paste B.Mask) (net 2 "to"))
+
+
+
+ (pad "" np_thru_hole circle (at -2.54 -5.08) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at 3.81 -2.54) (size 3 3) (drill 3) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at 7.085 -2.54 0) (size 2.55 2.5) (layers F.Cu F.Paste F.Mask) (net 1 "from"))
+ (pad 2 smd rect (at -5.842 -5.08 0) (size 2.55 2.5) (layers F.Cu F.Paste F.Mask) (net 2 "to"))
+ )
+
+
+
+ (module MX (layer F.Cu) (tedit 5DD4F656)
+ (at 250 0 0)
+
+
+ (fp_text reference "S6" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start -7 -6) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -6 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -6 -7) (end -7 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -7 7) (end -7 6) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 6) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 6 -7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 6 7) (end 7 7) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 7 -7) (end 7 -6) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask))
+
+
+ (pad "" np_thru_hole circle (at 5.08 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -5.08 0) (size 1.7018 1.7018) (drill 1.7018) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9.5 -9.5) (end 9.5 -9.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9.5 -9.5) (end 9.5 9.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 9.5 9.5) (end -9.5 9.5) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -9.5 9.5) (end -9.5 -9.5) (layer Dwgs.User) (width 0.15))
+
+
+
(pad "" np_thru_hole circle (at 2.54 -5.08) (size 3 3) (drill 3) (layers *.Cu *.Mask))
(pad "" np_thru_hole circle (at -3.81 -2.54) (size 3 3) (drill 3) (layers *.Cu *.Mask))
diff --git a/test/footprints/pad.yaml b/test/footprints/pad.yaml
index 3d05355..43ed2d9 100644
--- a/test/footprints/pad.yaml
+++ b/test/footprints/pad.yaml
@@ -25,3 +25,17 @@ pcbs.pcb.footprints:
align: down
mirrored: true
adjust.shift: [50, 50]
+
+ - what: pad
+ params:
+ net: net
+ align: right
+ mirrored: true
+ adjust.shift: [100, 0]
+
+ - what: pad
+ params:
+ net: net
+ align: left
+ mirrored: true
+ adjust.shift: [100, 50]
diff --git a/test/footprints/pad___pcbs_pcb.kicad_pcb b/test/footprints/pad___pcbs_pcb.kicad_pcb
index d34827d..997b2f6 100644
--- a/test/footprints/pad___pcbs_pcb.kicad_pcb
+++ b/test/footprints/pad___pcbs_pcb.kicad_pcb
@@ -181,6 +181,44 @@
)
+
+
+ (module SMDPad (layer F.Cu) (tedit 5B24D78E)
+
+ (at 100 0 0)
+
+
+ (fp_text reference "PAD5" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (pad 1 smd rect (at 0 0 0) (size 1 1) (layers F.Cu F.Paste F.Mask) (net 1 "net"))
+
+ (pad 1 smd rect (at 0 0 0) (size 1 1) (layers B.Cu B.Paste B.Mask) (net 1 "net"))
+
+
+ )
+
+
+
+
+ (module SMDPad (layer F.Cu) (tedit 5B24D78E)
+
+ (at 100 -50 0)
+
+
+ (fp_text reference "PAD6" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (pad 1 smd rect (at 0 0 0) (size 1 1) (layers F.Cu F.Paste F.Mask) (net 1 "net"))
+
+ (pad 1 smd rect (at 0 0 0) (size 1 1) (layers B.Cu B.Paste B.Mask) (net 1 "net"))
+
+
+ )
+
+
)
diff --git a/test/footprints/rest.yaml b/test/footprints/rest.yaml
index 769682a..7e24468 100644
--- a/test/footprints/rest.yaml
+++ b/test/footprints/rest.yaml
@@ -64,4 +64,22 @@ pcbs.pcb.footprints:
- what: via
params:
net: net
- adjust.shift: [0, 150]
\ No newline at end of file
+ adjust.shift: [0, 150]
+
+ - what: scrollwheel
+ params:
+ from: from
+ to: to
+ A: A
+ B: B
+ C: C
+ D: D
+ reverse: true
+ adjust.shift: [50, 150]
+
+ - what: slider
+ params:
+ from: from
+ to: to
+ side: B
+ adjust.shift: [100, 150]
diff --git a/test/footprints/rest___pcbs_pcb.kicad_pcb b/test/footprints/rest___pcbs_pcb.kicad_pcb
index db1fbf7..506f4fd 100644
--- a/test/footprints/rest___pcbs_pcb.kicad_pcb
+++ b/test/footprints/rest___pcbs_pcb.kicad_pcb
@@ -424,6 +424,104 @@
(pad 1 thru_hole circle (at 0 0) (size 0.6 0.6) (drill 0.3) (layers *.Cu) (zone_connect 2) (net 15 "net"))
)
+
+
+ (module RollerEncoder_Panasonic_EVQWGD001 (layer F.Cu) (tedit 6040A10C)
+ (at 50 -150 0)
+ (fp_text reference REF** (at 0 0 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
+ (fp_text value RollerEncoder_Panasonic_EVQWGD001 (at -0.1 9 0) (layer F.Fab) (effects (font (size 1 1) (thickness 0.15))))
+
+
+ (fp_line (start -8.4 -6.4) (end 8.4 -6.4) (layer Dwgs.User) (width 0.12))
+ (fp_line (start 8.4 -6.4) (end 8.4 7.4) (layer Dwgs.User) (width 0.12))
+ (fp_line (start 8.4 7.4) (end -8.4 7.4) (layer Dwgs.User) (width 0.12))
+ (fp_line (start -8.4 7.4) (end -8.4 -6.4) (layer Dwgs.User) (width 0.12))
+
+
+
+ (fp_line (start 9.8 7.3) (end 9.8 -6.3) (layer Edge.Cuts) (width 0.15))
+ (fp_line (start 7.4 -6.3) (end 7.4 7.3) (layer Edge.Cuts) (width 0.15))
+ (fp_line (start 9.5 -6.6) (end 7.7 -6.6) (layer Edge.Cuts) (width 0.15))
+ (fp_line (start 7.7 7.6) (end 9.5 7.6) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start 7.7 7.3) (end 7.4 7.3) (angle -90) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start 9.5 7.3) (end 9.5 7.6) (angle -90) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start 7.7 -6.3) (end 7.7 -6.6) (angle -90) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start 9.5 -6.3) (end 9.8 -6.3) (angle -90) (layer Edge.Cuts) (width 0.15))
+
+
+ (pad S1 thru_hole circle (at -6.85 -6.2 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 1 "from"))
+ (pad S2 thru_hole circle (at -5 -6.2 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 2 "to"))
+ (pad A thru_hole circle (at -5.625 -3.81 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 11 "A"))
+ (pad B thru_hole circle (at -5.625 -1.27 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 12 "B"))
+ (pad C thru_hole circle (at -5.625 1.27 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 13 "C"))
+ (pad D thru_hole circle (at -5.625 3.81 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 14 "D"))
+
+
+ (pad "" np_thru_hole circle (at -5.625 6.3 0) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
+
+
+
+ (fp_line (start -9.8 7.3) (end -9.8 -6.3) (layer Edge.Cuts) (width 0.15))
+ (fp_line (start -7.4 -6.3) (end -7.4 7.3) (layer Edge.Cuts) (width 0.15))
+ (fp_line (start -9.5 -6.6) (end -7.7 -6.6) (layer Edge.Cuts) (width 0.15))
+ (fp_line (start -7.7 7.6) (end -9.5 7.6) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start -7.7 7.3) (end -7.4 7.3) (angle 90) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start -9.5 7.3) (end -9.5 7.6) (angle 90) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start -7.7 -6.3) (end -7.7 -6.6) (angle 90) (layer Edge.Cuts) (width 0.15))
+ (fp_arc (start -9.5 -6.3) (end -9.8 -6.3) (angle 90) (layer Edge.Cuts) (width 0.15))
+
+
+ (pad S1 thru_hole circle (at 6.85 -6.2 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 1 "from"))
+ (pad S2 thru_hole circle (at 5 -6.2 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 2 "to"))
+ (pad A thru_hole circle (at 5.625 -3.81 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 11 "A"))
+ (pad B thru_hole circle (at 5.625 -1.27 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 12 "B"))
+ (pad C thru_hole circle (at 5.625 1.27 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 13 "C"))
+ (pad D thru_hole circle (at 5.625 3.81 0) (size 1.6 1.6) (drill 0.9) (layers *.Cu *.Mask) (net 14 "D"))
+
+
+ (pad "" np_thru_hole circle (at 5.625 6.3 0) (size 1.5 1.5) (drill 1.5) (layers *.Cu *.Mask))
+ )
+
+
+
+ (module E73:SPDT_C128955 (layer F.Cu) (tstamp 5BF2CC3C)
+
+ (at 100 -150 0)
+
+
+ (fp_text reference "T2" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+ (fp_text value "" (at 0 0) (layer F.SilkS) hide (effects (font (size 1.27 1.27) (thickness 0.15))))
+
+
+ (fp_line (start 1.95 -1.35) (end -1.95 -1.35) (layer B.SilkS) (width 0.15))
+ (fp_line (start 0 -1.35) (end -3.3 -1.35) (layer B.SilkS) (width 0.15))
+ (fp_line (start -3.3 -1.35) (end -3.3 1.5) (layer B.SilkS) (width 0.15))
+ (fp_line (start -3.3 1.5) (end 3.3 1.5) (layer B.SilkS) (width 0.15))
+ (fp_line (start 3.3 1.5) (end 3.3 -1.35) (layer B.SilkS) (width 0.15))
+ (fp_line (start 0 -1.35) (end 3.3 -1.35) (layer B.SilkS) (width 0.15))
+
+
+ (fp_line (start -1.95 -3.85) (end 1.95 -3.85) (layer Dwgs.User) (width 0.15))
+ (fp_line (start 1.95 -3.85) (end 1.95 -1.35) (layer Dwgs.User) (width 0.15))
+ (fp_line (start -1.95 -1.35) (end -1.95 -3.85) (layer Dwgs.User) (width 0.15))
+
+
+ (pad "" np_thru_hole circle (at 1.5 0) (size 1 1) (drill 0.9) (layers *.Cu *.Mask))
+ (pad "" np_thru_hole circle (at -1.5 0) (size 1 1) (drill 0.9) (layers *.Cu *.Mask))
+
+
+ (pad 1 smd rect (at -2.25 2.075 0) (size 0.9 1.25) (layers B.Cu B.Paste B.Mask) (net 1 "from"))
+ (pad 2 smd rect (at 0.75 2.075 0) (size 0.9 1.25) (layers B.Cu B.Paste B.Mask) (net 2 "to"))
+ (pad 3 smd rect (at 2.25 2.075 0) (size 0.9 1.25) (layers B.Cu B.Paste B.Mask))
+
+
+ (pad "" smd rect (at 3.7 -1.1 0) (size 0.9 0.9) (layers B.Cu B.Paste B.Mask))
+ (pad "" smd rect (at 3.7 1.1 0) (size 0.9 0.9) (layers B.Cu B.Paste B.Mask))
+ (pad "" smd rect (at -3.7 1.1 0) (size 0.9 0.9) (layers B.Cu B.Paste B.Mask))
+ (pad "" smd rect (at -3.7 -1.1 0) (size 0.9 0.9) (layers B.Cu B.Paste B.Mask))
+ )
+
+
)
diff --git a/test/helpers/mock_footprints.js b/test/helpers/mock_footprints.js
index 749d26c..14edaf3 100644
--- a/test/helpers/mock_footprints.js
+++ b/test/helpers/mock_footprints.js
@@ -3,6 +3,7 @@ exports.inject = (ergogen) => {
params: {
designator: 'T',
side: 'F',
+ width: 0.25,
P1: {type: 'net', value: 'P1'}
},
body: p => {
@@ -12,15 +13,15 @@ exports.inject = (ergogen) => {
${p.at /* parametric position */}
- (pad 1 smd rect (at ${p.ixy(0, 0)} ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.P1.str} (solder_mask_margin 0.2))
+ (pad 1 smd rect (at ${p.isxy(0, 0)} ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.P1} (solder_mask_margin 0.2))
- (pad 2 smd rect (at ${p.ixy(5, 5)} ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.P1.str} (solder_mask_margin 0.2))
+ (pad 2 smd rect (at ${p.isxy(5, 5)} ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.P1} (solder_mask_margin 0.2))
)
- (segment (start ${p.sxy(0, 0)}) (end ${p.sxy(5, 5)}) (width 0.25) (layer ${p.side}.Cu) (net ${p.P1.index}))
+ (segment (start ${p.esxy(0, 0)}) (end ${p.esxy(5, 5)}) (width ${p.width}) (layer ${p.side}.Cu) (net ${p.P1.index}))
`
}
@@ -39,11 +40,11 @@ exports.inject = (ergogen) => {
${p.at /* parametric position */}
- (pad 1 smd rect (at 0 0 ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.P1.str} (solder_mask_margin 0.2))
+ (pad 1 smd rect (at 0 0 ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.P1} (solder_mask_margin 0.2))
- (pad 2 smd rect (at 5 5 ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.P1.str} (solder_mask_margin 0.2))
+ (pad 2 smd rect (at ${p.iaxy(5, 5)} ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.P1} (solder_mask_margin 0.2))
)
@@ -51,7 +52,7 @@ exports.inject = (ergogen) => {
(connect_pads (clearance 0.508))
(min_thickness 0.254)
(fill yes (arc_segments 32) (thermal_gap 0.508) (thermal_bridge_width 0.508))
- (polygon (pts (xy ${p.xy(5, 5)}) (xy ${p.xy(5, -5)}) (xy ${p.xy(-5, -5)}) (xy ${p.xy(-5, 5)})))
+ (polygon (pts (xy ${p.eaxy(5, 5)}) (xy ${p.eaxy(5, -5)}) (xy ${p.eaxy(-5, -5)}) (xy ${p.eaxy(-5, 5)})))
)
`
@@ -70,14 +71,14 @@ exports.inject = (ergogen) => {
${p.at /* parametric position */}
- (pad 1 smd rect (at 0 0 ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.local_net('1').str} (solder_mask_margin 0.2))
+ (pad 1 smd rect (at 0 0 ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.local_net('1')} (solder_mask_margin 0.2))
- (pad 1 smd rect (at 0 0 ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.local_net('2').str} (solder_mask_margin 0.2))
+ (pad 1 smd rect (at 0 0 ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.local_net('2')} (solder_mask_margin 0.2))
- (pad 1 smd rect (at 0 0 ${p.rot}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
- ${p.local_net('3').str} (solder_mask_margin 0.2))
+ (pad 1 smd rect (at 0 0 ${p.r}) (size 1 1) (layers ${p.side}.Cu ${p.side}.Paste ${p.side}.Mask)
+ ${p.local_net('3')} (solder_mask_margin 0.2))
)
@@ -106,7 +107,33 @@ exports.inject = (ergogen) => {
}
})
- ergogen.inject('footprint', 'references_test', {
+ ergogen.inject('footprint', 'arrobj_test', {
+ params: {
+ designator: 'T',
+ side: 'F',
+ start: {x: 0, y: 0},
+ end: [[1, 0], [0, 1]]
+ },
+ body: p => {
+ lines = ''
+ for (const item of p.end) {
+ lines += `(fp_line (start ${p.start.x} ${p.start.y}) (end ${item[0]} ${item[1]}) (layer Dwgs.User) (width 0.05))\n`
+ }
+ return `
+
+ (module arrobj_test (layer ${p.side}.Cu) (tedit 5CF31DEF)
+
+ ${p.at /* parametric position */}
+
+ ${lines}
+
+ )
+
+ `
+ }
+ })
+
+ ergogen.inject('references_test', {
params: {},
body: p => {
return `references ${p.ref_hide ? 'hidden' : 'shown'}`
diff --git a/test/helpers/register.js b/test/helpers/register.js
index 8007d73..36a7e79 100644
--- a/test/helpers/register.js
+++ b/test/helpers/register.js
@@ -1,4 +1,12 @@
global.chai = require('chai')
global.chai.use(require('chai-as-promised'))
global.expect = global.chai.expect
-global.should = global.chai.should()
\ No newline at end of file
+global.should = global.chai.should()
+global.sinon = require('sinon')
+
+// Restore the default sandbox after every test
+exports.mochaHooks = {
+ afterEach() {
+ sinon.restore()
+ }
+}
\ No newline at end of file
diff --git a/test/index.js b/test/index.js
index e1fc995..fc0444b 100644
--- a/test/index.js
+++ b/test/index.js
@@ -9,7 +9,15 @@ require('./helpers/mock_footprints').inject(ergogen)
let what = process.env.npm_config_what
const dump = process.env.npm_config_dump
+const lineends = /(?:\r\n|\r|\n)/g
+const handle_slash = (() => {
+ if (path.sep == '\\') {
+ return str => str.replace(/\\/g,'/')
+ } else {
+ return str => str
+ }
+})()
// Unit tests
@@ -17,7 +25,7 @@ const dump = process.env.npm_config_dump
// the --dump switch does nothing here
what = what ? what.split(',') : false
-for (const unit of glob.sync(path.join(__dirname, 'unit', '*.js'))) {
+for (const unit of glob.sync(handle_slash(path.join(__dirname, 'unit', '*.js')))) {
const base = path.basename(unit, '.js')
if (what && !what.includes(base)) continue
require(`./unit/${base}.js`)
@@ -30,6 +38,19 @@ for (const unit of glob.sync(path.join(__dirname, 'unit', '*.js'))) {
// as well as individual tests using slash-notation (like `points/default`)
// the --dump switch can output the new results, overriding the old reference
+const dump_structure = (obj, depth=-1, prefix='', breadcrumbs=[]) => {
+ if (a.type(obj)() != 'object') {
+ console.log(prefix + breadcrumbs.join('_'))
+ return
+ }
+ if (depth == 0) return
+ for (const [key, val] of Object.entries(obj)) {
+ breadcrumbs.push(key)
+ dump_structure(val, depth-1, prefix, breadcrumbs)
+ breadcrumbs.pop()
+ }
+}
+
const cap = s => s.charAt(0).toUpperCase() + s.slice(1)
const test = function(input_path) {
@@ -37,27 +58,52 @@ const test = function(input_path) {
this.slow(120000)
title = path.basename(input_path, '.yaml').split('_').join(' ')
it(title, async function() {
+
const input = yaml.load(fs.readFileSync(input_path).toString())
+ const base = path.join(path.dirname(input_path), path.basename(input_path, '.yaml'))
+ const references = glob.sync(handle_slash(base) + '___*')
+
+ // handle deliberately wrong inputs
+ const exception = base + '___EXCEPTION.txt'
+ if (fs.existsSync(exception)) {
+ const exception_snippet = fs.readFileSync(exception).toString()
+ return await ergogen.process(input, true).should.be.rejectedWith(exception_snippet)
+ }
+
const output = await ergogen.process(input, true)
// compare output vs. reference
- const base = path.join(path.dirname(input_path), path.basename(input_path, '.yaml'))
- for (const expected_path of glob.sync(base + '___*')) {
- let expected = fs.readFileSync(expected_path).toString()
- if (expected_path.endsWith('.json')) {
- expected = JSON.parse(expected)
- }
- const comp_path = expected_path.split('___')[1].split('.')[0].split('_').join('.')
- const output_part = u.deep(output, comp_path)
- if (dump) {
- if (a.type(output_part)() == 'string') {
- fs.writeFileSync(expected_path, output_part)
- } else {
- fs.writeJSONSync(expected_path, output_part, {spaces: 4})
+ if (references.length) {
+ for (const expected_path of references) {
+ let expected = fs.readFileSync(expected_path).toString()
+ if (expected_path.endsWith('.json')) {
+ expected = JSON.parse(expected)
+ }
+ const comp_path = expected_path.split('___')[1].split('.')[0].split('_').join('.')
+ const output_part = u.deep(output, comp_path)
+ if (dump) {
+ if (a.type(output_part)() == 'string') {
+ fs.writeFileSync(expected_path, output_part)
+ } else {
+ fs.writeJSONSync(expected_path, output_part, {spaces: 4})
+ }
+ } else {
+ if (a.type(output_part)() == 'string') {
+ const parse_out = output_part.replace(lineends, '\n')
+ const parse_exp = expected.replace(lineends, '\n')
+ parse_out.should.deep.equal(parse_exp)
+ } else {
+ // JSON can hide negative zeroes, for example, so we canonical-ize first
+ const canonical_part = JSON.parse(JSON.stringify(output_part))
+ canonical_part.should.deep.equal(expected)
+ }
}
- } else {
- output_part.should.deep.equal(expected)
}
+
+ // explicit dump-ing above only works, if there are already files with the right name
+ // if there aren't, dump now outputs a list of candidates that could be referenced
+ } else if (dump) {
+ dump_structure(output, 3, base + '___')
}
})
}
@@ -74,7 +120,7 @@ if (what) {
regex = path.join(__dirname, w, '*.yaml')
}
describe(title, function() {
- for (const i of glob.sync(regex)) {
+ for (const i of glob.sync(handle_slash(regex))) {
test.call(this, i)
}
})
@@ -82,7 +128,7 @@ if (what) {
} else {
for (const part of ['points', 'outlines', 'cases', 'pcbs', 'footprints']) {
describe(cap(part), function() {
- for (const i of glob.sync(path.join(__dirname, part, '*.yaml'))) {
+ for (const i of glob.sync(handle_slash(path.join(__dirname, part, '*.yaml')))) {
test.call(this, i)
}
})
@@ -109,7 +155,7 @@ for (let w of cli_what) {
describe('CLI', function() {
this.timeout(120000)
this.slow(120000)
- for (const t of glob.sync(path.join(__dirname, w))) {
+ for (const t of glob.sync(handle_slash(path.join(__dirname, w)))) {
it(path.basename(t).split('_').join(' '), function() {
const command = read(t, 'command')
const output_path = exists(t, 'path') ? read(t, 'path') : 'output'
@@ -133,14 +179,19 @@ for (let w of cli_what) {
ref_path = path.resolve(path.join(t, read(ref_path).trim()))
}
const comp_res = dircompare.compareSync(output_path, ref_path, {
- compareContent: true
+ compareContent: true,
+ ignoreLineEnding: true,
+ compareFileSync: dircompare.fileCompareHandlers.lineBasedFileCompare.compareSync,
+ compareFileAsync: dircompare.fileCompareHandlers.lineBasedFileCompare.compareAsync
})
if (dump) {
fs.moveSync(output_path, ref_path, {overwrite: true})
} else {
fs.removeSync(output_path)
}
- actual_log.should.equal(ref_log)
+ const parse_act_log = actual_log.replace(lineends, '\n')
+ const parse_ref_log = ref_log.replace(lineends, '\n')
+ parse_act_log.should.equal(parse_ref_log)
comp_res.same.should.be.true
// deliberately incorrect execution
} else {
@@ -162,4 +213,4 @@ for (let w of cli_what) {
})
}
})
-}
\ No newline at end of file
+}
diff --git a/test/outlines/binding.yaml b/test/outlines/binding.yaml
new file mode 100644
index 0000000..6fba506
--- /dev/null
+++ b/test/outlines/binding.yaml
@@ -0,0 +1,18 @@
+points:
+ zones:
+ matrix:
+ mirror:
+ ref: matrix_only_first
+ distance: 30
+ columns:
+ only.rows:
+ first.bind: 0
+ second.bind: [0,10,0,10]
+ third.bind: [10,0,10,0]
+ fourth.bind: [u, u/2, u/3, u/4]
+outlines:
+ bound:
+ - what: rectangle
+ where: true
+ size: 20
+ bound: true
diff --git a/test/outlines/binding___outlines_bound_dxf.dxf b/test/outlines/binding___outlines_bound_dxf.dxf
new file mode 100644
index 0000000..433dd5d
--- /dev/null
+++ b/test/outlines/binding___outlines_bound_dxf.dxf
@@ -0,0 +1,338 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-10
+20
+-10
+11
+10
+21
+-10
+0
+LINE
+8
+0
+10
+10
+20
+-10
+11
+10
+21
+9
+0
+LINE
+8
+0
+10
+-10
+20
+9
+11
+-10
+21
+-10
+0
+LINE
+8
+0
+10
+10
+20
+29
+11
+20
+21
+29
+0
+LINE
+8
+0
+10
+20
+20
+9
+11
+10
+21
+9
+0
+LINE
+8
+0
+10
+-10
+20
+9
+11
+-20
+21
+9
+0
+LINE
+8
+0
+10
+-20
+20
+9
+11
+-20
+21
+29
+0
+LINE
+8
+0
+10
+-20
+20
+29
+11
+-10
+21
+29
+0
+LINE
+8
+0
+10
+10
+20
+29
+11
+10
+21
+40.6666667
+0
+LINE
+8
+0
+10
+-10
+20
+29
+11
+-10
+21
+40.6666667
+0
+LINE
+8
+0
+10
+-14.75
+20
+86
+11
+44.75
+21
+86
+0
+LINE
+8
+0
+10
+10
+20
+40.6666667
+11
+20
+21
+40.6666667
+0
+LINE
+8
+0
+10
+-10
+20
+40.6666667
+11
+-14.75
+21
+40.6666667
+0
+LINE
+8
+0
+10
+-14.75
+20
+40.6666667
+11
+-14.75
+21
+86
+0
+LINE
+8
+0
+10
+20
+20
+-10
+11
+40
+21
+-10
+0
+LINE
+8
+0
+10
+40
+20
+-10
+11
+40
+21
+9
+0
+LINE
+8
+0
+10
+20
+20
+9
+11
+20
+21
+-10
+0
+LINE
+8
+0
+10
+40
+20
+29
+11
+50
+21
+29
+0
+LINE
+8
+0
+10
+50
+20
+9
+11
+50
+21
+29
+0
+LINE
+8
+0
+10
+50
+20
+9
+11
+40
+21
+9
+0
+LINE
+8
+0
+10
+40
+20
+29
+11
+40
+21
+40.6666667
+0
+LINE
+8
+0
+10
+20
+20
+29
+11
+20
+21
+40.6666667
+0
+LINE
+8
+0
+10
+44.75
+20
+40.6666667
+11
+44.75
+21
+86
+0
+LINE
+8
+0
+10
+44.75
+20
+40.6666667
+11
+40
+21
+40.6666667
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/outlines/expand.yaml b/test/outlines/expand.yaml
new file mode 100644
index 0000000..160f737
--- /dev/null
+++ b/test/outlines/expand.yaml
@@ -0,0 +1,46 @@
+points:
+ zones:
+ matrix: {}
+outlines:
+ base:
+ - what: rectangle
+ where: true
+ size: 20
+ bound: false
+ sh_beveled:
+ - what: outline
+ name: base
+ expand: "5]"
+ sh_round:
+ - what: outline
+ name: base
+ expand: "6)"
+ sh_pointy:
+ - what: outline
+ name: base
+ expand: "7>"
+ shorthand-combo:
+ - "sh_pointy"
+ - "-sh_round"
+ - "+sh_beveled"
+ - "-base"
+ jnt_beveled:
+ - what: outline
+ name: base
+ expand: 8
+ joints: beveled
+ jnt_round:
+ - what: outline
+ name: base
+ expand: 9
+ joints: round
+ jnt_pointy:
+ - what: outline
+ name: base
+ expand: 10
+ joints: pointy
+ joint-name-combo:
+ - "jnt_pointy"
+ - "-jnt_round"
+ - "+jnt_beveled"
+ - "-base"
diff --git a/test/outlines/expand___outlines_joint-name-combo_dxf.dxf b/test/outlines/expand___outlines_joint-name-combo_dxf.dxf
new file mode 100644
index 0000000..f8b2a82
--- /dev/null
+++ b/test/outlines/expand___outlines_joint-name-combo_dxf.dxf
@@ -0,0 +1,346 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-20
+20
+-20
+11
+20
+21
+-20
+0
+LINE
+8
+0
+10
+20
+20
+-20
+11
+20
+21
+20
+0
+LINE
+8
+0
+10
+-20
+20
+20
+11
+20
+21
+20
+0
+LINE
+8
+0
+10
+-20
+20
+-20
+11
+-20
+21
+20
+0
+LINE
+8
+0
+10
+-10
+20
+-19
+11
+10
+21
+-19
+0
+ARC
+8
+0
+10
+10
+20
+-10
+40
+9
+50
+270
+51
+360
+0
+LINE
+8
+0
+10
+19
+20
+-10
+11
+19
+21
+10
+0
+ARC
+8
+0
+10
+10
+20
+10
+40
+9
+50
+0
+51
+90
+0
+LINE
+8
+0
+10
+10
+20
+19
+11
+-10
+21
+19
+0
+ARC
+8
+0
+10
+-10
+20
+10
+40
+9
+50
+90
+51
+180
+0
+LINE
+8
+0
+10
+-19
+20
+10
+11
+-19
+21
+-10
+0
+ARC
+8
+0
+10
+-10
+20
+-10
+40
+9
+50
+180
+51
+270
+0
+LINE
+8
+0
+10
+-13.3137085
+20
+-18
+11
+13.3137085
+21
+-18
+0
+LINE
+8
+0
+10
+13.3137085
+20
+-18
+11
+18
+21
+-13.3137085
+0
+LINE
+8
+0
+10
+18
+20
+-13.3137085
+11
+18
+21
+13.3137085
+0
+LINE
+8
+0
+10
+13.3137085
+20
+18
+11
+18
+21
+13.3137085
+0
+LINE
+8
+0
+10
+-13.3137085
+20
+18
+11
+13.3137085
+21
+18
+0
+LINE
+8
+0
+10
+-18
+20
+13.3137085
+11
+-13.3137085
+21
+18
+0
+LINE
+8
+0
+10
+-18
+20
+-13.3137085
+11
+-18
+21
+13.3137085
+0
+LINE
+8
+0
+10
+-18
+20
+-13.3137085
+11
+-13.3137085
+21
+-18
+0
+LINE
+8
+0
+10
+-10
+20
+-10
+11
+10
+21
+-10
+0
+LINE
+8
+0
+10
+10
+20
+-10
+11
+10
+21
+10
+0
+LINE
+8
+0
+10
+10
+20
+10
+11
+-10
+21
+10
+0
+LINE
+8
+0
+10
+-10
+20
+10
+11
+-10
+21
+-10
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/outlines/expand___outlines_shorthand-combo_dxf.dxf b/test/outlines/expand___outlines_shorthand-combo_dxf.dxf
new file mode 100644
index 0000000..6a9b92d
--- /dev/null
+++ b/test/outlines/expand___outlines_shorthand-combo_dxf.dxf
@@ -0,0 +1,346 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-17
+20
+-17
+11
+17
+21
+-17
+0
+LINE
+8
+0
+10
+17
+20
+-17
+11
+17
+21
+17
+0
+LINE
+8
+0
+10
+-17
+20
+17
+11
+17
+21
+17
+0
+LINE
+8
+0
+10
+-17
+20
+-17
+11
+-17
+21
+17
+0
+LINE
+8
+0
+10
+-10
+20
+-16
+11
+10
+21
+-16
+0
+ARC
+8
+0
+10
+10
+20
+-10
+40
+6
+50
+270
+51
+360
+0
+LINE
+8
+0
+10
+16
+20
+-10
+11
+16
+21
+10
+0
+ARC
+8
+0
+10
+10
+20
+10
+40
+6
+50
+0
+51
+90
+0
+LINE
+8
+0
+10
+10
+20
+16
+11
+-10
+21
+16
+0
+ARC
+8
+0
+10
+-10
+20
+10
+40
+6
+50
+90
+51
+180
+0
+LINE
+8
+0
+10
+-16
+20
+10
+11
+-16
+21
+-10
+0
+ARC
+8
+0
+10
+-10
+20
+-10
+40
+6
+50
+180
+51
+270
+0
+LINE
+8
+0
+10
+-12.0710678
+20
+-15
+11
+12.0710678
+21
+-15
+0
+LINE
+8
+0
+10
+12.0710678
+20
+-15
+11
+15
+21
+-12.0710678
+0
+LINE
+8
+0
+10
+15
+20
+-12.0710678
+11
+15
+21
+12.0710678
+0
+LINE
+8
+0
+10
+12.0710678
+20
+15
+11
+15
+21
+12.0710678
+0
+LINE
+8
+0
+10
+-12.0710678
+20
+15
+11
+12.0710678
+21
+15
+0
+LINE
+8
+0
+10
+-15
+20
+12.0710678
+11
+-12.0710678
+21
+15
+0
+LINE
+8
+0
+10
+-15
+20
+-12.0710678
+11
+-15
+21
+12.0710678
+0
+LINE
+8
+0
+10
+-15
+20
+-12.0710678
+11
+-12.0710678
+21
+-15
+0
+LINE
+8
+0
+10
+-10
+20
+-10
+11
+10
+21
+-10
+0
+LINE
+8
+0
+10
+10
+20
+-10
+11
+10
+21
+10
+0
+LINE
+8
+0
+10
+10
+20
+10
+11
+-10
+21
+10
+0
+LINE
+8
+0
+10
+-10
+20
+10
+11
+-10
+21
+-10
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/outlines/outlines.yaml b/test/outlines/outlines.yaml
index 351fff7..99a70b6 100644
--- a/test/outlines/outlines.yaml
+++ b/test/outlines/outlines.yaml
@@ -16,11 +16,22 @@ outlines:
where: true
size: cy
bound: true
+ adjust:
+ - what: circle
+ where: true
+ radius: 2
+ # adjust works, and it can use shape-specific units
+ adjust.shift: [0, r]
fillet:
- - what: outline
- name: base
+ - name: base
fillet: 2
scale:
- - what: outline
- name: fillet
- scale: 0.5
\ No newline at end of file
+ - name: fillet
+ scale: 0.5
+ combination:
+ - "base"
+ - "-scale"
+ - "~fillet"
+ expand:
+ - name: combination
+ expand: 1
diff --git a/test/outlines/outlines___outlines_adjust_dxf.dxf b/test/outlines/outlines___outlines_adjust_dxf.dxf
new file mode 100644
index 0000000..5a902b7
--- /dev/null
+++ b/test/outlines/outlines___outlines_adjust_dxf.dxf
@@ -0,0 +1,90 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+CIRCLE
+8
+0
+10
+0
+20
+2
+40
+2
+0
+CIRCLE
+8
+0
+10
+0
+20
+19
+40
+2
+0
+CIRCLE
+8
+0
+10
+19
+20
+2
+40
+2
+0
+CIRCLE
+8
+0
+10
+19
+20
+19
+40
+2
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/outlines/outlines___outlines_combination_dxf.dxf b/test/outlines/outlines___outlines_combination_dxf.dxf
new file mode 100644
index 0000000..557f735
--- /dev/null
+++ b/test/outlines/outlines___outlines_combination_dxf.dxf
@@ -0,0 +1,514 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+8.6
+20
+-6.6
+11
+8.6
+21
+-4.3
+0
+LINE
+8
+0
+10
+8.6
+20
+12.8
+11
+8.6
+21
+23.6
+0
+LINE
+8
+0
+10
+-6.6
+20
+-8.6
+11
+6.6
+21
+-8.6
+0
+LINE
+8
+0
+10
+-8.6
+20
+-6.6
+11
+-8.6
+21
+23.6
+0
+LINE
+8
+0
+10
+-6.6
+20
+25.6
+11
+6.6
+21
+25.6
+0
+LINE
+8
+0
+10
+27.6
+20
+-6.6
+11
+27.6
+21
+23.6
+0
+LINE
+8
+0
+10
+12.4
+20
+-8.6
+11
+25.6
+21
+-8.6
+0
+LINE
+8
+0
+10
+10.4
+20
+-6.6
+11
+10.4
+21
+-4.3
+0
+LINE
+8
+0
+10
+10.4
+20
+12.8
+11
+10.4
+21
+23.6
+0
+LINE
+8
+0
+10
+12.4
+20
+25.6
+11
+25.6
+21
+25.6
+0
+LINE
+8
+0
+10
+4.3
+20
+-3.3
+11
+4.3
+21
+11.8
+0
+LINE
+8
+0
+10
+-3.3
+20
+-4.3
+11
+3.3
+21
+-4.3
+0
+LINE
+8
+0
+10
+-4.3
+20
+-3.3
+11
+-4.3
+21
+11.8
+0
+LINE
+8
+0
+10
+-3.3
+20
+12.8
+11
+3.3
+21
+12.8
+0
+LINE
+8
+0
+10
+13.8
+20
+-3.3
+11
+13.8
+21
+11.8
+0
+LINE
+8
+0
+10
+6.2
+20
+-4.3
+11
+8.6
+21
+-4.3
+0
+LINE
+8
+0
+10
+10.4
+20
+-4.3
+11
+12.8
+21
+-4.3
+0
+LINE
+8
+0
+10
+5.2
+20
+-3.3
+11
+5.2
+21
+11.8
+0
+LINE
+8
+0
+10
+6.2
+20
+12.8
+11
+8.6
+21
+12.8
+0
+LINE
+8
+0
+10
+10.4
+20
+12.8
+11
+12.8
+21
+12.8
+0
+ARC
+8
+0
+10
+3.3
+20
+11.8
+40
+1
+50
+0
+51
+90
+0
+ARC
+8
+0
+10
+-3.3
+20
+11.8
+40
+1
+50
+90
+51
+180
+0
+ARC
+8
+0
+10
+-3.3
+20
+-3.3
+40
+1
+50
+180
+51
+270
+0
+ARC
+8
+0
+10
+3.3
+20
+-3.3
+40
+1
+50
+270
+51
+0
+0
+ARC
+8
+0
+10
+12.8
+20
+11.8
+40
+1
+50
+0
+51
+90
+0
+ARC
+8
+0
+10
+6.2
+20
+11.8
+40
+1
+50
+90
+51
+180
+0
+ARC
+8
+0
+10
+6.2
+20
+-3.3
+40
+1
+50
+180
+51
+270
+0
+ARC
+8
+0
+10
+12.8
+20
+-3.3
+40
+1
+50
+270
+51
+0
+0
+ARC
+8
+0
+10
+6.6
+20
+23.6
+40
+2
+50
+0
+51
+90
+0
+ARC
+8
+0
+10
+-6.6
+20
+23.6
+40
+2
+50
+90
+51
+180
+0
+ARC
+8
+0
+10
+-6.6
+20
+-6.6
+40
+2
+50
+180
+51
+270
+0
+ARC
+8
+0
+10
+6.6
+20
+-6.6
+40
+2
+50
+270
+51
+0
+0
+ARC
+8
+0
+10
+25.6
+20
+23.6
+40
+2
+50
+0
+51
+90
+0
+ARC
+8
+0
+10
+12.4
+20
+23.6
+40
+2
+50
+90
+51
+180
+0
+ARC
+8
+0
+10
+12.4
+20
+-6.6
+40
+2
+50
+180
+51
+270
+0
+ARC
+8
+0
+10
+25.6
+20
+-6.6
+40
+2
+50
+270
+51
+0
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/outlines/outlines___outlines_expand_dxf.dxf b/test/outlines/outlines___outlines_expand_dxf.dxf
new file mode 100644
index 0000000..b129818
--- /dev/null
+++ b/test/outlines/outlines___outlines_expand_dxf.dxf
@@ -0,0 +1,410 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-6.6
+20
+-9.6
+11
+6.6
+21
+-9.6
+0
+ARC
+8
+0
+10
+6.6
+20
+-6.6
+40
+3
+50
+270
+51
+345.164888
+0
+ARC
+8
+0
+10
+12.4
+20
+-6.6
+40
+3
+50
+194.835112
+51
+270
+0
+LINE
+8
+0
+10
+12.4
+20
+-9.6
+11
+25.6
+21
+-9.6
+0
+ARC
+8
+0
+10
+25.6
+20
+-6.6
+40
+3
+50
+270
+51
+360
+0
+LINE
+8
+0
+10
+28.6
+20
+-6.6
+11
+28.6
+21
+23.6
+0
+ARC
+8
+0
+10
+25.6
+20
+23.6
+40
+3
+50
+0
+51
+90
+0
+LINE
+8
+0
+10
+12.4
+20
+26.6
+11
+25.6
+21
+26.6
+0
+ARC
+8
+0
+10
+12.4
+20
+23.6
+40
+3
+50
+90
+51
+165.164888
+0
+ARC
+8
+0
+10
+6.6
+20
+23.6
+40
+3
+50
+14.835112
+51
+90
+0
+LINE
+8
+0
+10
+-6.6
+20
+26.6
+11
+6.6
+21
+26.6
+0
+ARC
+8
+0
+10
+-6.6
+20
+23.6
+40
+3
+50
+90
+51
+180
+0
+LINE
+8
+0
+10
+-9.6
+20
+-6.6
+11
+-9.6
+21
+23.6
+0
+ARC
+8
+0
+10
+-6.6
+20
+-6.6
+40
+3
+50
+180
+51
+270
+0
+LINE
+8
+0
+10
+12.8
+20
+-3.3
+11
+12.8
+21
+11.8
+0
+LINE
+8
+0
+10
+10.4
+20
+11.8
+11
+12.8
+21
+11.8
+0
+ARC
+8
+0
+10
+10.4
+20
+12.8
+40
+1
+50
+205.8419331
+51
+270
+0
+ARC
+8
+0
+10
+8.6
+20
+12.8
+40
+1
+50
+270
+51
+334.1580669
+0
+LINE
+8
+0
+10
+6.2
+20
+11.8
+11
+8.6
+21
+11.8
+0
+LINE
+8
+0
+10
+6.2
+20
+-3.3
+11
+6.2
+21
+11.8
+0
+LINE
+8
+0
+10
+6.2
+20
+-3.3
+11
+8.6
+21
+-3.3
+0
+ARC
+8
+0
+10
+8.6
+20
+-4.3
+40
+1
+50
+25.8419331
+51
+90
+0
+ARC
+8
+0
+10
+10.4
+20
+-4.3
+40
+1
+50
+90
+51
+154.1580669
+0
+LINE
+8
+0
+10
+10.4
+20
+-3.3
+11
+12.8
+21
+-3.3
+0
+LINE
+8
+0
+10
+3.3
+20
+-3.3
+11
+3.3
+21
+11.8
+0
+LINE
+8
+0
+10
+-3.3
+20
+11.8
+11
+3.3
+21
+11.8
+0
+LINE
+8
+0
+10
+-3.3
+20
+-3.3
+11
+-3.3
+21
+11.8
+0
+LINE
+8
+0
+10
+-3.3
+20
+-3.3
+11
+3.3
+21
+-3.3
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/outlines/rectangles.yaml b/test/outlines/rectangles.yaml
index 2982e5e..6cd7c2f 100644
--- a/test/outlines/rectangles.yaml
+++ b/test/outlines/rectangles.yaml
@@ -17,6 +17,7 @@ outlines:
- mirror_matrix
shift: [0, sy/2]
size: [20, 40]
+ corner: 5
outside_rects:
what: rectangle
where:
diff --git a/test/outlines/rectangles___outlines_outline_dxf.dxf b/test/outlines/rectangles___outlines_outline_dxf.dxf
index 8de0346..101992d 100644
--- a/test/outlines/rectangles___outlines_outline_dxf.dxf
+++ b/test/outlines/rectangles___outlines_outline_dxf.dxf
@@ -67,7 +67,7 @@ LINE
11
10
21
-0
+5
0
LINE
8
@@ -135,7 +135,7 @@ LINE
10
30
20
-0
+5
11
30
21
@@ -145,14 +145,28 @@ LINE
8
0
10
-10
+15
20
0
11
-30
+25
21
0
0
+ARC
+8
+0
+10
+25
+20
+5
+40
+5
+50
+270
+51
+360
+0
LINE
8
0
@@ -163,32 +177,74 @@ LINE
11
30
21
+35
+0
+ARC
+8
+0
+10
+25
+20
+35
40
+5
+50
+0
+51
+90
0
LINE
8
0
10
-30
+25
20
40
11
-10
+15
21
40
0
+ARC
+8
+0
+10
+15
+20
+35
+40
+5
+50
+90
+51
+180
+0
LINE
8
0
10
10
20
-40
+35
11
10
21
10
0
+ARC
+8
+0
+10
+15
+20
+5
+40
+5
+50
+180
+51
+270
+0
LINE
8
0
diff --git a/test/pcbs/mock_footprints.yaml b/test/pcbs/mock_footprints.yaml
index ddce5b0..14e9821 100644
--- a/test/pcbs/mock_footprints.yaml
+++ b/test/pcbs/mock_footprints.yaml
@@ -1,5 +1,7 @@
points.zones.matrix:
mirror: 10
+ key:
+ magic_value: 5
outlines:
edge:
- what: rectangle
@@ -18,6 +20,7 @@ pcbs:
shift: [1, 1]
rotate: 30
params:
+ width: u/40
side: F
mirror:
side: B
@@ -28,9 +31,25 @@ pcbs:
rotate: 30
dyn:
what: dynamic_net_test
- anc:
+ anc1:
what: anchor_test
params:
end:
ref: matrix
- shift: [10, 10]
\ No newline at end of file
+ shift: [10, 10]
+ anc2:
+ what: anchor_test
+ params:
+ end: matrix
+ arrobj:
+ what: arrobj_test
+ params:
+ start: {x: 5, y: 5}
+ end: [[6, 6], [7, 7]]
+ arrobj_templated:
+ what: arrobj_test
+ where:
+ ref: matrix
+ params:
+ start: '{x: {{magic_value}}, y: {{magic_value}}}'
+ end: '[[6, 6], [7, {{magic_value}}]]'
diff --git a/test/pcbs/mock_footprints___pcbs_main.kicad_pcb b/test/pcbs/mock_footprints___pcbs_main.kicad_pcb
index d9b38b3..463dd01 100644
--- a/test/pcbs/mock_footprints___pcbs_main.kicad_pcb
+++ b/test/pcbs/mock_footprints___pcbs_main.kicad_pcb
@@ -94,9 +94,9 @@
(net 0 "")
(net 1 "P1")
-(net 2 "T6_1")
-(net 3 "T6_2")
-(net 4 "T6_3")
+(net 2 "T4_1")
+(net 3 "T4_2")
+(net 4 "T4_3")
(net_class Default "This is the default net class."
(clearance 0.2)
@@ -107,9 +107,9 @@
(uvia_drill 0.1)
(add_net "")
(add_net "P1")
-(add_net "T6_1")
-(add_net "T6_2")
-(add_net "T6_3")
+(add_net "T4_1")
+(add_net "T4_2")
+(add_net "T4_3")
)
@@ -126,7 +126,7 @@
)
- (segment (start 1 -1) (end 7.830127 0.8301270000000001) (width 0.25) (layer F.Cu) (net 1))
+ (segment (start 1 -1) (end 7.830127 0.8301270000000001) (width 0.475) (layer F.Cu) (net 1))
@@ -143,41 +143,7 @@
)
- (segment (start 19 -1) (end 12.169872999999999 0.8301270000000001) (width 0.25) (layer B.Cu) (net 1))
-
-
-
-
- (module trace_test (layer B.Cu) (tedit 5CF31DEF)
-
- (at 19 -1 -30)
-
- (pad 1 smd rect (at 0 0 -30) (size 1 1) (layers B.Cu B.Paste B.Mask)
- (net 1 "P1") (solder_mask_margin 0.2))
-
- (pad 2 smd rect (at -5 5 -30) (size 1 1) (layers B.Cu B.Paste B.Mask)
- (net 1 "P1") (solder_mask_margin 0.2))
-
- )
-
- (segment (start 19 -1) (end 12.169872999999999 0.8301270000000001) (width 0.25) (layer B.Cu) (net 1))
-
-
-
-
- (module trace_test (layer F.Cu) (tedit 5CF31DEF)
-
- (at 1 -1 30)
-
- (pad 1 smd rect (at 0 0 30) (size 1 1) (layers F.Cu F.Paste F.Mask)
- (net 1 "P1") (solder_mask_margin 0.2))
-
- (pad 2 smd rect (at 5 5 30) (size 1 1) (layers F.Cu F.Paste F.Mask)
- (net 1 "P1") (solder_mask_margin 0.2))
-
- )
-
- (segment (start 1 -1) (end 7.830127 0.8301270000000001) (width 0.25) (layer F.Cu) (net 1))
+ (segment (start 19 -1) (end 12.169872999999999 0.8301270000000001) (width 0.475) (layer B.Cu) (net 1))
@@ -209,13 +175,13 @@
(at 0 0 0)
(pad 1 smd rect (at 0 0 0) (size 1 1) (layers F.Cu F.Paste F.Mask)
- (net 2 "T6_1") (solder_mask_margin 0.2))
+ (net 2 "T4_1") (solder_mask_margin 0.2))
(pad 1 smd rect (at 0 0 0) (size 1 1) (layers F.Cu F.Paste F.Mask)
- (net 3 "T6_2") (solder_mask_margin 0.2))
+ (net 3 "T4_2") (solder_mask_margin 0.2))
(pad 1 smd rect (at 0 0 0) (size 1 1) (layers F.Cu F.Paste F.Mask)
- (net 4 "T6_3") (solder_mask_margin 0.2))
+ (net 4 "T4_3") (solder_mask_margin 0.2))
)
@@ -231,6 +197,43 @@
)
+
+
+ (module anchor_test (layer F.Cu) (tedit 5CF31DEF)
+
+ (at 0 0 0)
+
+ (fp_line (start 0 0) (end 0 0) (layer Dwgs.User) (width 0.05))
+
+ )
+
+
+
+
+ (module arrobj_test (layer F.Cu) (tedit 5CF31DEF)
+
+ (at 0 0 0)
+
+ (fp_line (start 5 5) (end 6 6) (layer Dwgs.User) (width 0.05))
+(fp_line (start 5 5) (end 7 7) (layer Dwgs.User) (width 0.05))
+
+
+ )
+
+
+
+
+ (module arrobj_test (layer F.Cu) (tedit 5CF31DEF)
+
+ (at 0 0 0)
+
+ (fp_line (start 5 5) (end 6 6) (layer Dwgs.User) (width 0.05))
+(fp_line (start 5 5) (end 7 5) (layer Dwgs.User) (width 0.05))
+
+
+ )
+
+
(gr_line (start -9.5 9.5) (end 9.5 9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
(gr_line (start 9.5 9.5) (end 9.5 -9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
(gr_line (start 9.5 -9.5) (end -9.5 -9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
diff --git a/test/pcbs/outlines.yaml b/test/pcbs/outlines.yaml
new file mode 100644
index 0000000..7a7cd82
--- /dev/null
+++ b/test/pcbs/outlines.yaml
@@ -0,0 +1,34 @@
+points.zones.matrix:
+ columns:
+ left:
+ right:
+ rows.only:
+outlines:
+ left:
+ out:
+ what: rectangle
+ where: matrix_left_only
+ size: u
+ fillet: u/5
+ in:
+ what: circle
+ where: matrix_left_only
+ radius: u/4
+ operation: subtract
+ right:
+ out:
+ what: rectangle
+ where: matrix_right_only
+ size: u
+ bevel: u/5
+ in:
+ what: rectangle
+ where: matrix_right_only
+ size: u/2
+ bevel: u/4
+ operation: subtract
+pcbs:
+ main:
+ outlines:
+ - outline: 'left'
+ - outline: 'right'
diff --git a/test/pcbs/outlines___pcbs_main.kicad_pcb b/test/pcbs/outlines___pcbs_main.kicad_pcb
new file mode 100644
index 0000000..8e92c54
--- /dev/null
+++ b/test/pcbs/outlines___pcbs_main.kicad_pcb
@@ -0,0 +1,132 @@
+
+
+(kicad_pcb (version 20171130) (host pcbnew 5.1.6)
+
+ (page A3)
+ (title_block
+ (title main)
+ (rev v1.0.0)
+ (company Unknown)
+ )
+
+ (general
+ (thickness 1.6)
+ )
+
+ (layers
+ (0 F.Cu signal)
+ (31 B.Cu signal)
+ (32 B.Adhes user)
+ (33 F.Adhes user)
+ (34 B.Paste user)
+ (35 F.Paste user)
+ (36 B.SilkS user)
+ (37 F.SilkS user)
+ (38 B.Mask user)
+ (39 F.Mask user)
+ (40 Dwgs.User user)
+ (41 Cmts.User user)
+ (42 Eco1.User user)
+ (43 Eco2.User user)
+ (44 Edge.Cuts user)
+ (45 Margin user)
+ (46 B.CrtYd user)
+ (47 F.CrtYd user)
+ (48 B.Fab user)
+ (49 F.Fab user)
+ )
+
+ (setup
+ (last_trace_width 0.25)
+ (trace_clearance 0.2)
+ (zone_clearance 0.508)
+ (zone_45_only no)
+ (trace_min 0.2)
+ (via_size 0.8)
+ (via_drill 0.4)
+ (via_min_size 0.4)
+ (via_min_drill 0.3)
+ (uvia_size 0.3)
+ (uvia_drill 0.1)
+ (uvias_allowed no)
+ (uvia_min_size 0.2)
+ (uvia_min_drill 0.1)
+ (edge_width 0.05)
+ (segment_width 0.2)
+ (pcb_text_width 0.3)
+ (pcb_text_size 1.5 1.5)
+ (mod_edge_width 0.12)
+ (mod_text_size 1 1)
+ (mod_text_width 0.15)
+ (pad_size 1.524 1.524)
+ (pad_drill 0.762)
+ (pad_to_mask_clearance 0.05)
+ (aux_axis_origin 0 0)
+ (visible_elements FFFFFF7F)
+ (pcbplotparams
+ (layerselection 0x010fc_ffffffff)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (usegerberadvancedattributes true)
+ (creategerberjobfile true)
+ (excludeedgelayer true)
+ (linewidth 0.100000)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15.000000)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (padsonsilk false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 1)
+ (scaleselection 1)
+ (outputdirectory ""))
+ )
+
+ (net 0 "")
+
+ (net_class Default "This is the default net class."
+ (clearance 0.2)
+ (trace_width 0.25)
+ (via_dia 0.8)
+ (via_drill 0.4)
+ (uvia_dia 0.3)
+ (uvia_drill 0.1)
+ (add_net "")
+ )
+
+
+ (gr_line (start -5.7 9.5) (end 5.699999999999999 9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 9.5 5.7) (end 9.5 -5.699999999999999) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 5.699999999999999 -9.5) (end -5.7 -9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start -9.5 -5.699999999999999) (end -9.5 5.7) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_arc (start 5.7 5.7) (end 5.7 9.5) (angle -90) (layer Edge.Cuts) (width 0.15))
+(gr_arc (start 5.7 -5.7) (end 9.5 -5.7) (angle -90) (layer Edge.Cuts) (width 0.15))
+(gr_arc (start -5.7 -5.7) (end -5.7 -9.5) (angle -90) (layer Edge.Cuts) (width 0.15))
+(gr_arc (start -5.7 5.7) (end -9.5 5.7) (angle -90) (layer Edge.Cuts) (width 0.15))
+(gr_circle (center 0 0) (end 4.75 0) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 13.3 9.5) (end 9.5 5.7) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 9.5 5.7) (end 9.5 -5.7) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 9.5 -5.7) (end 13.3 -9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 13.3 -9.5) (end 24.700000000000003 -9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 24.700000000000003 -9.5) (end 28.5 -5.7) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 28.5 -5.7) (end 28.5 5.7) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 28.5 5.7) (end 24.700000000000003 9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 24.700000000000003 9.5) (end 13.3 9.5) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 19 4.75) (end 14.25 0) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 14.25 0) (end 19 -4.75) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 19 -4.75) (end 23.75 0) (angle 90) (layer Edge.Cuts) (width 0.15))
+(gr_line (start 23.75 0) (end 19 4.75) (angle 90) (layer Edge.Cuts) (width 0.15))
+
+)
+
+
\ No newline at end of file
diff --git a/test/points/adjustments.yaml b/test/points/adjustments.yaml
index 77850a8..8b1063d 100644
--- a/test/points/adjustments.yaml
+++ b/test/points/adjustments.yaml
@@ -3,17 +3,21 @@ points:
matrix:
columns:
left:
+ middle.rows.home.adjust:
+ shift: [-2u, 0]
+ rotate: 45
right:
key:
stagger: 5
spread: 25
- splay: 5
+ splay: -5
origin: [-9, -9]
rows:
- top:
+ home:
orient: -90
shift: [0, 10]
rotate: 90
rows:
bottom:
+ home:
top:
\ No newline at end of file
diff --git a/test/points/adjustments___demo_dxf.dxf b/test/points/adjustments___demo_dxf.dxf
index 6f18f2b..f23b53e 100644
--- a/test/points/adjustments___demo_dxf.dxf
+++ b/test/points/adjustments___demo_dxf.dxf
@@ -145,35 +145,227 @@ LINE
8
0
10
-14.4311966
+-9
+20
+47
+11
+9
+21
+47
+0
+LINE
+8
+0
+10
+9
+20
+47
+11
+9
+21
+29
+0
+LINE
+8
+0
+10
+9
+20
+29
+11
+-9
+21
+29
+0
+LINE
+8
+0
+10
+-9
+20
+29
+11
+-9
+21
+47
+0
+LINE
+8
+0
+10
+10
+20
+9
+11
+28
+21
+9
+0
+LINE
+8
+0
+10
+28
+20
+9
+11
+28
+21
+-9
+0
+LINE
+8
+0
+10
+28
+20
+-9
+11
+10
+21
+-9
+0
+LINE
+8
+0
+10
+10
+20
+-9
+11
+10
+21
+9
+0
+LINE
+8
+0
+10
+-31.7279221
+20
+19
+11
+-19
+21
+31.7279221
+0
+LINE
+8
+0
+10
+-19
+20
+31.7279221
+11
+-6.2720779
+21
+19
+0
+LINE
+8
+0
+10
+-6.2720779
+20
+19
+11
+-19
+21
+6.2720779
+0
+LINE
+8
+0
+10
+-19
+20
+6.2720779
+11
+-31.7279221
+21
+19
+0
+LINE
+8
+0
+10
+10
+20
+47
+11
+28
+21
+47
+0
+LINE
+8
+0
+10
+28
+20
+47
+11
+28
+21
+29
+0
+LINE
+8
+0
+10
+28
+20
+29
+11
+10
+21
+29
+0
+LINE
+8
+0
+10
+10
+20
+29
+11
+10
+21
+47
+0
+LINE
+8
+0
+10
+36.5688034
20
13.9315046
11
-32.3627012
+54.500308
21
-15.500308
+12.3627012
0
LINE
8
0
10
-32.3627012
+54.500308
20
-15.500308
+12.3627012
11
-33.9315046
+52.9315046
21
--2.4311966
+-5.5688034
0
LINE
8
0
10
-33.9315046
+52.9315046
20
--2.4311966
+-5.5688034
11
-16
+35
21
-4
0
@@ -181,11 +373,11 @@ LINE
8
0
10
-16
+35
20
-4
11
-14.4311966
+36.5688034
21
13.9315046
0
@@ -193,49 +385,97 @@ LINE
8
0
10
-22.7371845
+48.1867095
20
-33.7307613
+31.9876465
11
-40.6686891
+66.1182141
21
-35.2995647
+30.4188431
0
LINE
8
0
10
-40.6686891
+66.1182141
20
-35.2995647
+30.4188431
11
-42.2374925
+64.5494107
21
-17.3680601
+12.4873385
0
LINE
8
0
10
-42.2374925
+64.5494107
20
-17.3680601
+12.4873385
11
-24.3059879
+46.6179061
21
-15.7992567
+14.0561419
0
LINE
8
0
10
-24.3059879
+46.6179061
20
-15.7992567
+14.0561419
11
-22.7371845
+48.1867095
21
-33.7307613
+31.9876465
+0
+LINE
+8
+0
+10
+49.8426686
+20
+50.9153458
+11
+67.7741732
+21
+49.3465424
+0
+LINE
+8
+0
+10
+67.7741732
+20
+49.3465424
+11
+66.2053698
+21
+31.4150378
+0
+LINE
+8
+0
+10
+66.2053698
+20
+31.4150378
+11
+48.2738652
+21
+32.9838412
+0
+LINE
+8
+0
+10
+48.2738652
+20
+32.9838412
+11
+49.8426686
+21
+50.9153458
0
ENDSEC
0
diff --git a/test/points/adjustments___points.json b/test/points/adjustments___points.json
index 92f7b09..ff8bd04 100644
--- a/test/points/adjustments___points.json
+++ b/test/points/adjustments___points.json
@@ -17,6 +17,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -28,18 +29,33 @@
"zone": {
"columns": {
"left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
"right": {
"key": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
]
},
"rows": {
- "top": {
+ "home": {
"orient": -90,
"shift": [
0,
@@ -53,6 +69,7 @@
},
"rows": {
"bottom": {},
+ "home": {},
"top": {}
},
"name": "matrix"
@@ -65,13 +82,13 @@
"row": "bottom",
"bind": [
10,
- 0,
+ 10,
0,
0
]
}
},
- "matrix_left_top": {
+ "matrix_left_home": {
"x": 0,
"y": 19,
"r": 0,
@@ -89,29 +106,45 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
"autobind": 10,
"skip": false,
"asym": "both",
- "colrow": "left_top",
- "name": "matrix_left_top",
+ "colrow": "left_home",
+ "name": "matrix_left_home",
"zone": {
"columns": {
"left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
"right": {
"key": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
]
},
"rows": {
- "top": {
+ "home": {
"orient": -90,
"shift": [
0,
@@ -125,6 +158,96 @@
},
"rows": {
"bottom": {},
+ "home": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "left"
+ },
+ "row": "home",
+ "bind": [
+ 10,
+ 10,
+ 10,
+ 0
+ ]
+ }
+ },
+ "matrix_left_top": {
+ "x": 0,
+ "y": 38,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "left_top",
+ "name": "matrix_left_top",
+ "zone": {
+ "columns": {
+ "left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "right": {
+ "key": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ]
+ },
+ "rows": {
+ "home": {
+ "orient": -90,
+ "shift": [
+ 0,
+ 10
+ ],
+ "rotate": 90
+ }
+ },
+ "name": "right"
+ }
+ },
+ "rows": {
+ "bottom": {},
+ "home": {},
"top": {}
},
"name": "matrix"
@@ -143,17 +266,17 @@
]
}
},
- "matrix_right_bottom": {
- "x": 24.181350600000002,
- "y": 5.750154,
- "r": 5,
+ "matrix_middle_bottom": {
+ "x": 19,
+ "y": 0,
+ "r": 0,
"meta": {
- "stagger": 5,
- "spread": 25,
- "splay": 5,
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
"origin": [
- -9,
- -9
+ 0,
+ 0
],
"orient": 0,
"shift": [
@@ -161,29 +284,45 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
"autobind": 10,
"skip": false,
"asym": "both",
- "colrow": "right_bottom",
- "name": "matrix_right_bottom",
+ "colrow": "middle_bottom",
+ "name": "matrix_middle_bottom",
"zone": {
"columns": {
"left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
"right": {
"key": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
]
},
"rows": {
- "top": {
+ "home": {
"orient": -90,
"shift": [
0,
@@ -197,6 +336,310 @@
},
"rows": {
"bottom": {},
+ "home": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "row": "bottom",
+ "bind": [
+ 10,
+ 0,
+ 0,
+ 10
+ ]
+ }
+ },
+ "matrix_middle_home": {
+ "x": -19,
+ "y": 19,
+ "r": 45,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ },
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "middle_home",
+ "name": "matrix_middle_home",
+ "zone": {
+ "columns": {
+ "left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "right": {
+ "key": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ]
+ },
+ "rows": {
+ "home": {
+ "orient": -90,
+ "shift": [
+ 0,
+ 10
+ ],
+ "rotate": 90
+ }
+ },
+ "name": "right"
+ }
+ },
+ "rows": {
+ "bottom": {},
+ "home": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "row": "home",
+ "bind": [
+ 10,
+ 10,
+ 10,
+ 10
+ ]
+ }
+ },
+ "matrix_middle_top": {
+ "x": 19,
+ "y": 38,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "middle_top",
+ "name": "matrix_middle_top",
+ "zone": {
+ "columns": {
+ "left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "right": {
+ "key": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ]
+ },
+ "rows": {
+ "home": {
+ "orient": -90,
+ "shift": [
+ 0,
+ 10
+ ],
+ "rotate": 90
+ }
+ },
+ "name": "right"
+ }
+ },
+ "rows": {
+ "bottom": {},
+ "home": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "row": "top",
+ "bind": [
+ 0,
+ 10,
+ 10,
+ 10
+ ]
+ }
+ },
+ "matrix_right_bottom": {
+ "x": 44.750154,
+ "y": 4.1813506,
+ "r": -5,
+ "meta": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "right_bottom",
+ "name": "matrix_right_bottom",
+ "zone": {
+ "columns": {
+ "left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "right": {
+ "key": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ]
+ },
+ "rows": {
+ "home": {
+ "orient": -90,
+ "shift": [
+ 0,
+ 10
+ ],
+ "rotate": 90
+ }
+ },
+ "name": "right"
+ }
+ },
+ "rows": {
+ "bottom": {},
+ "home": {},
"top": {}
},
"name": "matrix"
@@ -205,14 +648,14 @@
"key": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
]
},
"rows": {
- "top": {
+ "home": {
"orient": -90,
"shift": [
0,
@@ -232,14 +675,14 @@
]
}
},
- "matrix_right_top": {
- "x": 32.4873385,
- "y": 25.549410700000003,
- "r": 5,
+ "matrix_right_home": {
+ "x": 56.3680601,
+ "y": 22.237492500000002,
+ "r": -5,
"meta": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
@@ -250,29 +693,45 @@
10
],
"rotate": 90,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
"autobind": 10,
"skip": false,
"asym": "both",
- "colrow": "right_top",
- "name": "matrix_right_top",
+ "colrow": "right_home",
+ "name": "matrix_right_home",
"zone": {
"columns": {
"left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
"right": {
"key": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
]
},
"rows": {
- "top": {
+ "home": {
"orient": -90,
"shift": [
0,
@@ -286,6 +745,7 @@
},
"rows": {
"bottom": {},
+ "home": {},
"top": {}
},
"name": "matrix"
@@ -294,14 +754,120 @@
"key": {
"stagger": 5,
"spread": 25,
- "splay": 5,
+ "splay": -5,
"origin": [
-9,
-9
]
},
"rows": {
- "top": {
+ "home": {
+ "orient": -90,
+ "shift": [
+ 0,
+ 10
+ ],
+ "rotate": 90
+ }
+ },
+ "name": "right"
+ },
+ "row": "home",
+ "bind": [
+ 10,
+ 0,
+ 10,
+ 10
+ ]
+ }
+ },
+ "matrix_right_top": {
+ "x": 58.0240192,
+ "y": 41.1651918,
+ "r": -5,
+ "meta": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "right_top",
+ "name": "matrix_right_top",
+ "zone": {
+ "columns": {
+ "left": null,
+ "middle": {
+ "rows": {
+ "home": {
+ "adjust": {
+ "shift": [
+ "-2u",
+ 0
+ ],
+ "rotate": 45
+ }
+ }
+ },
+ "key": {},
+ "name": "middle"
+ },
+ "right": {
+ "key": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ]
+ },
+ "rows": {
+ "home": {
+ "orient": -90,
+ "shift": [
+ 0,
+ 10
+ ],
+ "rotate": 90
+ }
+ },
+ "name": "right"
+ }
+ },
+ "rows": {
+ "bottom": {},
+ "home": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "key": {
+ "stagger": 5,
+ "spread": 25,
+ "splay": -5,
+ "origin": [
+ -9,
+ -9
+ ]
+ },
+ "rows": {
+ "home": {
"orient": -90,
"shift": [
0,
diff --git a/test/points/autobind.yaml b/test/points/autobind.yaml
new file mode 100644
index 0000000..0e61c63
--- /dev/null
+++ b/test/points/autobind.yaml
@@ -0,0 +1,24 @@
+points.zones:
+ none:
+ key:
+ autobind: 0
+ columns:
+ a:
+ b:
+ some:
+ key:
+ autobind: 1
+ columns:
+ a:
+ b:
+outlines:
+ none:
+ - what: rectangle
+ where: /none_.*/
+ size: 5
+ bound: true
+ some:
+ - what: rectangle
+ where: /some_.*/
+ size: 5
+ bound: true
\ No newline at end of file
diff --git a/test/points/autobind___outlines_none_dxf.dxf b/test/points/autobind___outlines_none_dxf.dxf
new file mode 100644
index 0000000..93a857b
--- /dev/null
+++ b/test/points/autobind___outlines_none_dxf.dxf
@@ -0,0 +1,146 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-2.5
+20
+-2.5
+11
+2.5
+21
+-2.5
+0
+LINE
+8
+0
+10
+2.5
+20
+-2.5
+11
+2.5
+21
+2.5
+0
+LINE
+8
+0
+10
+2.5
+20
+2.5
+11
+-2.5
+21
+2.5
+0
+LINE
+8
+0
+10
+-2.5
+20
+2.5
+11
+-2.5
+21
+-2.5
+0
+LINE
+8
+0
+10
+16.5
+20
+-2.5
+11
+21.5
+21
+-2.5
+0
+LINE
+8
+0
+10
+21.5
+20
+-2.5
+11
+21.5
+21
+2.5
+0
+LINE
+8
+0
+10
+21.5
+20
+2.5
+11
+16.5
+21
+2.5
+0
+LINE
+8
+0
+10
+16.5
+20
+2.5
+11
+16.5
+21
+-2.5
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/points/autobind___outlines_some_dxf.dxf b/test/points/autobind___outlines_some_dxf.dxf
new file mode 100644
index 0000000..46d46c2
--- /dev/null
+++ b/test/points/autobind___outlines_some_dxf.dxf
@@ -0,0 +1,146 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-2.5
+20
+-2.5
+11
+3.5
+21
+-2.5
+0
+LINE
+8
+0
+10
+-2.5
+20
+2.5
+11
+3.5
+21
+2.5
+0
+LINE
+8
+0
+10
+-2.5
+20
+2.5
+11
+-2.5
+21
+-2.5
+0
+LINE
+8
+0
+10
+3.5
+20
+-2.5
+11
+3.5
+21
+2.5
+0
+LINE
+8
+0
+10
+15.5
+20
+-2.5
+11
+21.5
+21
+-2.5
+0
+LINE
+8
+0
+10
+21.5
+20
+-2.5
+11
+21.5
+21
+2.5
+0
+LINE
+8
+0
+10
+15.5
+20
+2.5
+11
+21.5
+21
+2.5
+0
+LINE
+8
+0
+10
+15.5
+20
+-2.5
+11
+15.5
+21
+2.5
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/points/basic_2x2___points.json b/test/points/basic_2x2___points.json
index 61d9968..140cf1a 100644
--- a/test/points/basic_2x2___points.json
+++ b/test/points/basic_2x2___points.json
@@ -17,6 +17,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -68,6 +69,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -119,6 +121,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -170,6 +173,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
diff --git a/test/points/default___points.json b/test/points/default___points.json
index 60e486d..4536086 100644
--- a/test/points/default___points.json
+++ b/test/points/default___points.json
@@ -17,6 +17,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -26,6 +27,13 @@
"colrow": "default_default",
"name": "matrix",
"zone": {
+ "columns": {
+ "default": {
+ "rows": {},
+ "key": {},
+ "name": "default"
+ }
+ },
"name": "matrix"
},
"col": {
@@ -60,6 +68,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
diff --git a/test/points/mirrors.yaml b/test/points/mirrors.yaml
new file mode 100644
index 0000000..eb95a42
--- /dev/null
+++ b/test/points/mirrors.yaml
@@ -0,0 +1,30 @@
+points:
+ mirror:
+ ref: matrix_right_top
+ distance: U
+ zones:
+ matrix:
+ columns:
+ left:
+ rows:
+ bottom.asym: source
+ top.asym: clone
+ right:
+ rows:
+ bottom:
+ top:
+ other:
+ anchor:
+ ref: matrix_right_top
+ shift: [100, 100]
+ # default mirror object, ref = [0, 0], distance = 0
+ mirror: {}
+ columns:
+ left:
+ rows:
+ bottom.asym: source
+ top.asym: clone
+ right:
+ rows:
+ bottom:
+ top:
diff --git a/test/points/mirrors___demo_dxf.dxf b/test/points/mirrors___demo_dxf.dxf
new file mode 100644
index 0000000..e1c7ea2
--- /dev/null
+++ b/test/points/mirrors___demo_dxf.dxf
@@ -0,0 +1,626 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-9
+20
+9
+11
+9
+21
+9
+0
+LINE
+8
+0
+10
+9
+20
+9
+11
+9
+21
+-9
+0
+LINE
+8
+0
+10
+9
+20
+-9
+11
+-9
+21
+-9
+0
+LINE
+8
+0
+10
+-9
+20
+-9
+11
+-9
+21
+9
+0
+LINE
+8
+0
+10
+10
+20
+9
+11
+28
+21
+9
+0
+LINE
+8
+0
+10
+28
+20
+9
+11
+28
+21
+-9
+0
+LINE
+8
+0
+10
+28
+20
+-9
+11
+10
+21
+-9
+0
+LINE
+8
+0
+10
+10
+20
+-9
+11
+10
+21
+9
+0
+LINE
+8
+0
+10
+10
+20
+28
+11
+28
+21
+28
+0
+LINE
+8
+0
+10
+28
+20
+28
+11
+28
+21
+10
+0
+LINE
+8
+0
+10
+28
+20
+10
+11
+10
+21
+10
+0
+LINE
+8
+0
+10
+10
+20
+10
+11
+10
+21
+28
+0
+LINE
+8
+0
+10
+110
+20
+128
+11
+128
+21
+128
+0
+LINE
+8
+0
+10
+128
+20
+128
+11
+128
+21
+110
+0
+LINE
+8
+0
+10
+128
+20
+110
+11
+110
+21
+110
+0
+LINE
+8
+0
+10
+110
+20
+110
+11
+110
+21
+128
+0
+LINE
+8
+0
+10
+129
+20
+128
+11
+147
+21
+128
+0
+LINE
+8
+0
+10
+147
+20
+128
+11
+147
+21
+110
+0
+LINE
+8
+0
+10
+147
+20
+110
+11
+129
+21
+110
+0
+LINE
+8
+0
+10
+129
+20
+110
+11
+129
+21
+128
+0
+LINE
+8
+0
+10
+129
+20
+147
+11
+147
+21
+147
+0
+LINE
+8
+0
+10
+147
+20
+147
+11
+147
+21
+129
+0
+LINE
+8
+0
+10
+147
+20
+129
+11
+129
+21
+129
+0
+LINE
+8
+0
+10
+129
+20
+129
+11
+129
+21
+147
+0
+LINE
+8
+0
+10
+-128
+20
+147
+11
+-110
+21
+147
+0
+LINE
+8
+0
+10
+-110
+20
+147
+11
+-110
+21
+129
+0
+LINE
+8
+0
+10
+-110
+20
+129
+11
+-128
+21
+129
+0
+LINE
+8
+0
+10
+-128
+20
+129
+11
+-128
+21
+147
+0
+LINE
+8
+0
+10
+-147
+20
+128
+11
+-129
+21
+128
+0
+LINE
+8
+0
+10
+-129
+20
+128
+11
+-129
+21
+110
+0
+LINE
+8
+0
+10
+-129
+20
+110
+11
+-147
+21
+110
+0
+LINE
+8
+0
+10
+-147
+20
+110
+11
+-147
+21
+128
+0
+LINE
+8
+0
+10
+-147
+20
+147
+11
+-129
+21
+147
+0
+LINE
+8
+0
+10
+-129
+20
+147
+11
+-129
+21
+129
+0
+LINE
+8
+0
+10
+-129
+20
+129
+11
+-147
+21
+129
+0
+LINE
+8
+0
+10
+-147
+20
+129
+11
+-147
+21
+147
+0
+LINE
+8
+0
+10
+48.05
+20
+28
+11
+66.05
+21
+28
+0
+LINE
+8
+0
+10
+66.05
+20
+28
+11
+66.05
+21
+10
+0
+LINE
+8
+0
+10
+66.05
+20
+10
+11
+48.05
+21
+10
+0
+LINE
+8
+0
+10
+48.05
+20
+10
+11
+48.05
+21
+28
+0
+LINE
+8
+0
+10
+29.05
+20
+9
+11
+47.05
+21
+9
+0
+LINE
+8
+0
+10
+47.05
+20
+9
+11
+47.05
+21
+-9
+0
+LINE
+8
+0
+10
+47.05
+20
+-9
+11
+29.05
+21
+-9
+0
+LINE
+8
+0
+10
+29.05
+20
+-9
+11
+29.05
+21
+9
+0
+LINE
+8
+0
+10
+29.05
+20
+28
+11
+47.05
+21
+28
+0
+LINE
+8
+0
+10
+47.05
+20
+28
+11
+47.05
+21
+10
+0
+LINE
+8
+0
+10
+47.05
+20
+10
+11
+29.05
+21
+10
+0
+LINE
+8
+0
+10
+29.05
+20
+10
+11
+29.05
+21
+28
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/points/mirrors___points.json b/test/points/mirrors___points.json
new file mode 100644
index 0000000..96b7841
--- /dev/null
+++ b/test/points/mirrors___points.json
@@ -0,0 +1,798 @@
+{
+ "matrix_left_bottom": {
+ "x": 0,
+ "y": 0,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "source",
+ "colrow": "left_bottom",
+ "name": "matrix_left_bottom",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "row": "bottom",
+ "mirrored": false,
+ "bind": [
+ 0,
+ 10,
+ 0,
+ 0
+ ]
+ }
+ },
+ "matrix_right_bottom": {
+ "x": 19,
+ "y": 0,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "right_bottom",
+ "name": "matrix_right_bottom",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "bottom",
+ "mirrored": false,
+ "bind": [
+ 10,
+ 0,
+ 0,
+ 10
+ ]
+ }
+ },
+ "matrix_right_top": {
+ "x": 19,
+ "y": 19,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "right_top",
+ "name": "matrix_right_top",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "top",
+ "mirrored": false,
+ "bind": [
+ 0,
+ 0,
+ 10,
+ 0
+ ]
+ }
+ },
+ "other_left_bottom": {
+ "x": 119,
+ "y": 119,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "source",
+ "colrow": "left_bottom",
+ "name": "other_left_bottom",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "other"
+ },
+ "col": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "row": "bottom",
+ "mirrored": false,
+ "bind": [
+ 0,
+ 10,
+ 0,
+ 0
+ ]
+ }
+ },
+ "other_right_bottom": {
+ "x": 138,
+ "y": 119,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "right_bottom",
+ "name": "other_right_bottom",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "other"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "bottom",
+ "mirrored": false,
+ "bind": [
+ 10,
+ 0,
+ 0,
+ 10
+ ]
+ }
+ },
+ "other_right_top": {
+ "x": 138,
+ "y": 138,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "right_top",
+ "name": "other_right_top",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "other"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "top",
+ "mirrored": false,
+ "bind": [
+ 0,
+ 0,
+ 10,
+ 0
+ ]
+ }
+ },
+ "mirror_other_left_top": {
+ "x": -119,
+ "y": 138,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "clone",
+ "colrow": "mirror_left_top",
+ "name": "mirror_other_left_top",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "other"
+ },
+ "col": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "row": "top",
+ "mirrored": true,
+ "bind": [
+ 0,
+ 10,
+ 0,
+ 0
+ ]
+ }
+ },
+ "mirror_other_right_bottom": {
+ "x": -138,
+ "y": 119,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "mirror_right_bottom",
+ "name": "mirror_other_right_bottom",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "other"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "bottom",
+ "mirrored": true,
+ "bind": [
+ 10,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ },
+ "mirror_other_right_top": {
+ "x": -138,
+ "y": 138,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "mirror_right_top",
+ "name": "mirror_other_right_top",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "other"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "top",
+ "mirrored": true,
+ "bind": [
+ 0,
+ 0,
+ 10,
+ 10
+ ]
+ }
+ },
+ "mirror_matrix_left_top": {
+ "x": 57.05,
+ "y": 19,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "clone",
+ "colrow": "mirror_left_top",
+ "name": "mirror_matrix_left_top",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "row": "top",
+ "mirrored": true,
+ "bind": [
+ 0,
+ 10,
+ 0,
+ 0
+ ]
+ }
+ },
+ "mirror_matrix_right_bottom": {
+ "x": 38.05,
+ "y": 0,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "mirror_right_bottom",
+ "name": "mirror_matrix_right_bottom",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "bottom",
+ "mirrored": true,
+ "bind": [
+ 10,
+ 0,
+ 0,
+ 0
+ ]
+ }
+ },
+ "mirror_matrix_right_top": {
+ "x": 38.05,
+ "y": 19,
+ "r": 0,
+ "meta": {
+ "stagger": 0,
+ "spread": 19,
+ "splay": 0,
+ "origin": [
+ 0,
+ 0
+ ],
+ "orient": 0,
+ "shift": [
+ 0,
+ 0
+ ],
+ "rotate": 0,
+ "adjust": {},
+ "width": 18,
+ "height": 18,
+ "padding": 19,
+ "autobind": 10,
+ "skip": false,
+ "asym": "both",
+ "colrow": "mirror_right_top",
+ "name": "mirror_matrix_right_top",
+ "zone": {
+ "columns": {
+ "left": {
+ "rows": {
+ "bottom": {
+ "asym": "source"
+ },
+ "top": {
+ "asym": "clone"
+ }
+ },
+ "key": {},
+ "name": "left"
+ },
+ "right": null
+ },
+ "rows": {
+ "bottom": {},
+ "top": {}
+ },
+ "name": "matrix"
+ },
+ "col": {
+ "rows": {},
+ "key": {},
+ "name": "right"
+ },
+ "row": "top",
+ "mirrored": true,
+ "bind": [
+ 0,
+ 0,
+ 10,
+ 10
+ ]
+ }
+ }
+}
diff --git a/test/points/overrides___points.json b/test/points/overrides___points.json
index 2a763b7..88fbfe6 100644
--- a/test/points/overrides___points.json
+++ b/test/points/overrides___points.json
@@ -17,6 +17,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -85,6 +86,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -153,6 +155,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -223,6 +226,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -293,6 +297,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -363,6 +368,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
@@ -437,6 +443,7 @@
0
],
"rotate": 0,
+ "adjust": {},
"width": 18,
"height": 18,
"padding": 19,
diff --git a/test/points/rotations.yaml b/test/points/rotations.yaml
new file mode 100644
index 0000000..50ffa01
--- /dev/null
+++ b/test/points/rotations.yaml
@@ -0,0 +1,16 @@
+points:
+ rotate: 22.5
+ zones:
+ matrix:
+ rotate: 22.5
+ key:
+ origin: [-u/2, -u/2]
+ columns:
+ left:
+ right.key:
+ rotate: -45
+ padding: (1+sqrt(2))/2 * u
+ spread: (1+sqrt(2))/2 * u
+ rows:
+ bottom:
+ top:
diff --git a/test/points/rotations___demo_dxf.dxf b/test/points/rotations___demo_dxf.dxf
new file mode 100644
index 0000000..657e493
--- /dev/null
+++ b/test/points/rotations___demo_dxf.dxf
@@ -0,0 +1,242 @@
+0
+SECTION
+2
+HEADER
+9
+$INSUNITS
+70
+4
+0
+ENDSEC
+0
+SECTION
+2
+TABLES
+0
+TABLE
+2
+LTYPE
+0
+LTYPE
+72
+65
+70
+64
+2
+CONTINUOUS
+3
+______
+73
+0
+40
+0
+0
+ENDTAB
+0
+TABLE
+2
+LAYER
+0
+ENDTAB
+0
+ENDSEC
+0
+SECTION
+2
+ENTITIES
+0
+LINE
+8
+0
+10
+-12.7279221
+20
+0
+11
+0
+21
+12.7279221
+0
+LINE
+8
+0
+10
+0
+20
+12.7279221
+11
+12.7279221
+21
+0
+0
+LINE
+8
+0
+10
+12.7279221
+20
+0
+11
+0
+21
+-12.7279221
+0
+LINE
+8
+0
+10
+0
+20
+-12.7279221
+11
+-12.7279221
+21
+0
+0
+LINE
+8
+0
+10
+-26.1629509
+20
+13.4350288
+11
+-13.4350288
+21
+26.1629509
+0
+LINE
+8
+0
+10
+-13.4350288
+20
+26.1629509
+11
+-0.7071067
+21
+13.4350288
+0
+LINE
+8
+0
+10
+-0.7071067
+20
+13.4350288
+11
+-13.4350288
+21
+0.7071067
+0
+LINE
+8
+0
+10
+-13.4350288
+20
+0.7071067
+11
+-26.1629509
+21
+13.4350288
+0
+LINE
+8
+0
+10
+7.2175144
+20
+25.2175144
+11
+25.2175144
+21
+25.2175144
+0
+LINE
+8
+0
+10
+25.2175144
+20
+25.2175144
+11
+25.2175144
+21
+7.2175144
+0
+LINE
+8
+0
+10
+25.2175144
+20
+7.2175144
+11
+7.2175144
+21
+7.2175144
+0
+LINE
+8
+0
+10
+7.2175144
+20
+7.2175144
+11
+7.2175144
+21
+25.2175144
+0
+LINE
+8
+0
+10
+16.2175144
+20
+51.8804653
+11
+28.9454365
+21
+39.1525432
+0
+LINE
+8
+0
+10
+28.9454365
+20
+39.1525432
+11
+16.2175144
+21
+26.4246211
+0
+LINE
+8
+0
+10
+16.2175144
+20
+26.4246211
+11
+3.4895923
+21
+39.1525432
+0
+LINE
+8
+0
+10
+3.4895923
+20
+39.1525432
+11
+16.2175144
+21
+51.8804653
+0
+ENDSEC
+0
+EOF
\ No newline at end of file
diff --git a/test/points/samename.yaml b/test/points/samename.yaml
new file mode 100644
index 0000000..0e365ae
--- /dev/null
+++ b/test/points/samename.yaml
@@ -0,0 +1,2 @@
+points.zones.matrix.key.name: samename
+points.zones.other.key.name: samename
diff --git a/test/points/samename___EXCEPTION.txt b/test/points/samename___EXCEPTION.txt
new file mode 100644
index 0000000..daec189
--- /dev/null
+++ b/test/points/samename___EXCEPTION.txt
@@ -0,0 +1 @@
+defined more than once
\ No newline at end of file
diff --git a/test/unit/anchor.js b/test/unit/anchor.js
index c9b3dd1..342d59a 100644
--- a/test/unit/anchor.js
+++ b/test/unit/anchor.js
@@ -6,6 +6,10 @@ describe('Anchor', function() {
const points = {
o: new Point(0, 0, 0, {label: 'o'}),
+ rotated_o: new Point(0, 0, 90, {label: 'rotated_o'}),
+ o_five: new Point(0, 5, 0, {label: 'o_five'}),
+ five_o: new Point(5, 0, 0, {label: 'five_o'}),
+ five: new Point(5, 5, 90, {label: 'five'}),
ten: new Point(10, 10, -90, {label: 'ten'}),
mirror_ten: new Point(-10, 10, 90, {mirrored: true})
}
@@ -56,6 +60,94 @@ describe('Anchor', function() {
}, 'name', points)(),
[5, 5, -45, {}]
)
+ // empty parts
+ check(
+ parse({
+ aggregate: {
+ }
+ }, 'name', points)(),
+ [0, 0, 0, {}]
+ )
+ // can't have aggregate and ref together
+ parse({
+ aggregate: {
+ parts: ['o', 'ten']
+ },
+ ref : 'ten'
+ }, 'name', points).should.throw()
+ })
+ it('intersect', function() {
+ // points that intersect on a negative Y axis
+ check(
+ parse({
+ aggregate: {
+ parts: ['o','ten'],
+ method: 'intersect'
+ }
+ }, 'name', points)(),
+ [0,10,0,{}]
+ )
+
+ // points that have parallel Y axis, i.e. never intersect
+ parse({
+ aggregate: {
+ parts: ['o','five_o'],
+ method: 'intersect'
+ }
+ }, 'name', points).should.throw(`The points under "name.aggregate.parts" do not intersect!`)
+
+ // points intersect on their positive Y axis
+ check(
+ parse({
+ aggregate: {
+ parts: ['o','five'],
+ method: 'intersect'
+ }
+ }, 'name', points)(),
+ [0, 5, 0, {}]
+ )
+
+ // intersecting points with the same coordinates, but different rotations
+ check(
+ parse({
+ aggregate: {
+ parts: ['o','rotated_o'],
+ method: 'intersect'
+ }
+ }, 'name', points)(),
+ [0, 0, 0, {}]
+ )
+
+ // points with overlapping Y axis
+ parse({
+ aggregate: {
+ parts: ['o','o_five'],
+ method: 'intersect'
+ }
+ }, 'name', points).should.throw(`The points under "name.aggregate.parts" do not intersect!`)
+
+ // more than two parts
+ parse({
+ aggregate: {
+ parts: ['o', `five`, `ten`],
+ method: 'intersect'
+ }
+ }, 'name', points).should.throw(`Intersect expects exactly two parts, but it got 3!`)
+
+ // only one part
+ parse({
+ aggregate: {
+ parts: ['o'],
+ method: 'intersect'
+ }
+ }, 'name', points).should.throw(`Intersect expects exactly two parts, but it got 1!`)
+
+ // no parts
+ parse({
+ aggregate: {
+ method: 'intersect'
+ }
+ }, 'name', points).should.throw(`Intersect expects exactly two parts, but it got 0!`)
})
it('shift', function() {
diff --git a/test/unit/filter.js b/test/unit/filter.js
index 5481949..3972e93 100644
--- a/test/unit/filter.js
+++ b/test/unit/filter.js
@@ -4,42 +4,67 @@ const Point = require('../../src/point')
describe('Filter', function() {
+ it('without points', function() {
+ filter(undefined, '').should.deep.equal([new Point()])
+ filter(true, '').should.deep.equal([])
+ filter(false, '').should.deep.equal([])
+ filter({}, '').should.deep.equal([anchor({}, '', points)()])
+ })
+
const points = {
one: new Point(0, 1, 0, {name: 'one', tags: ['odd']}),
two: new Point(0, 2, 0, {name: 'two', tags: ['even', 'prime']}),
- three: new Point(0, 3, 0, {name: 'three', tags: {odd: 'yes', prime: 'yupp'}})
+ three: new Point(0, 3, 0, {name: 'three', tags: {odd: 'yes', prime: 'yupp'}}),
+ mirror_one: new Point(0, 1, 0, {name: 'mirror_one', tags: ['odd'], mirrored: true})
}
- const names = points => points.map(p => p.meta.name)
-
- it('similar', function() {
+ it('empty filter', function() {
// an undefined config leads to a default point
filter(undefined, '', points).should.deep.equal([new Point()])
// true shouldn't filter anything, while false should filter everything
filter(true, '', points).should.deep.equal(Object.values(points))
filter(false, '', points).should.deep.equal([])
+ // points should only be returned on their respective halves
+ // - so `source` is every match
+ filter(true, '', points, undefined, 'source').should.deep.equal(Object.values(points))
+ // - `clone` is the mirror image of every match, which maps one to mirror_one, mirror_one to one, and two/three to nothing (as they don't have mirror parts)
+ filter(true, '', points, undefined, 'clone').should.deep.equal([points.mirror_one, points.one])
+ // - and `both` is every match plus its mirror image as well
+ filter(true, '', points, undefined, 'both').should.deep.equal(Object.values(points))
// objects just propagate to anchor (and then wrap in array for consistency)
filter({}, '', points).should.deep.equal([anchor({}, '', points)()])
+ filter({}, '', points, undefined, 'source').should.deep.equal([anchor({}, '', points)()])
+ filter({}, '', points, undefined, 'clone').should.deep.equal([anchor({}, '', points)()])
+ filter({}, '', points, undefined, 'both').should.deep.equal([anchor({}, '', points)()])
+ })
+
+ const names = points => points.map(p => p.meta.name)
+
+ it('similar', function() {
// simple name string
names(filter('one', '', points)).should.deep.equal(['one'])
// simple name regex
names(filter('/^t/', '', points)).should.deep.equal(['two', 'three'])
- // tags should count, too (one for the name, three for the odd tag)
- names(filter('/^o/', '', points)).should.deep.equal(['one', 'three'])
+ // tags should count, too (one and mirror_one for the name, three for the odd tag)
+ names(filter('/^o/', '', points)).should.deep.equal(['one', 'three', 'mirror_one'])
// middle spec, should be the same as above, only explicit
- names(filter('~ /^o/', '', points)).should.deep.equal(['one', 'three'])
- // full spec (n would normally match both one and even, but on the tags level, it's just even)
+ names(filter('~ /^o/', '', points)).should.deep.equal(['one', 'three', 'mirror_one'])
+ // full spec (/n/ would normally match both "one" and "even", but on the tags level, it's just even)
names(filter('meta.tags ~ /n/', '', points)).should.deep.equal(['two'])
+ names(filter('meta.name,meta.tags ~ /n/', '', points)).should.deep.equal(['one', 'two', 'mirror_one'])
// negation
- names(filter('meta.tags ~ -/n/', '', points)).should.deep.equal(['one', 'three'])
- // arrays OR by default at odd levels levels (including top level)...
+ names(filter('meta.tags ~ -/n/', '', points)).should.deep.equal(['one', 'three', 'mirror_one'])
+ names(filter('meta.name,meta.tags ~ -/n/', '', points)).should.deep.equal(['three'])
+ // arrays OR by default at odd levels (including top level)...
names(filter(['one', 'two'], '', points)).should.deep.equal(['one', 'two'])
// ...and AND at even levels
names(filter([['even', 'prime']], '', points)).should.deep.equal(['two'])
// arbitrary nesting should be possible
names(filter([[['even', 'odd'], 'prime']], '', points)).should.deep.equal(['two', 'three'])
- // anything other than string/array/object/undefined is an error
+ // invalid regexes should throw meaningful errors
+ filter.bind(this, '/\\/', '', points).should.throw('Invalid regex')
+ // anything other than string/array/object/undefined is also an error
filter.bind(this, 28, '', points).should.throw('Unexpected type')
})
-})
\ No newline at end of file
+})
diff --git a/test/unit/interface.js b/test/unit/interface.js
index ddae923..af93712 100644
--- a/test/unit/interface.js
+++ b/test/unit/interface.js
@@ -10,7 +10,8 @@ const load = name => yaml.safeLoad(fs.readFileSync(
).toString())
const minimal = load('minimal.yaml')
const big = load('big.yaml')
-const kle = load('atreus_kle.json')
+const minimal_kle = load('minimal_kle.json')
+const atreus_kle = load('atreus_kle.json')
describe('Interface', function() {
@@ -49,7 +50,8 @@ describe('Interface', function() {
//:
return 'not an object';
`, true, logger).should.be.rejectedWith('not valid'),
- ergogen.process(kle, true, logger).should.be.rejectedWith('KLE'),
+ ergogen.process(minimal_kle, true, logger).should.be.rejectedWith('KLE'),
+ ergogen.process(atreus_kle, true, logger).should.be.rejectedWith('KLE'),
ergogen.process('not an object', true, logger).should.be.rejectedWith('object'),
ergogen.process({}, true, logger).should.be.rejectedWith('empty'),
ergogen.process({not_points: {}}, true, () => {}).should.be.rejectedWith('points clause'),
diff --git a/test/unit/internals.js b/test/unit/internals.js
new file mode 100644
index 0000000..2449d34
--- /dev/null
+++ b/test/unit/internals.js
@@ -0,0 +1,22 @@
+const m = require('makerjs')
+const pcb_lib = require('../../src/pcbs')
+const ergogen = require('../../src/ergogen')
+
+describe('Internals', function() {
+
+ it('makerjs2kicad', function() {
+ // warn on unknown path type
+ sinon.stub(m.model, 'walk').callsFake(function(model, config) {
+ config.onPath({pathContext: {type: 'nonexistent'}})
+ })
+ pcb_lib._makerjs2kicad.bind(this).should.throw("Can't convert path type")
+ })
+
+ it('injection', function() {
+ // warn on unknown injection type
+ ergogen.inject.bind(this, 'nonexistent', 'name', 'value').should.throw('Unknown injection type')
+ })
+})
+
+
+
diff --git a/test/unit/prepare.js b/test/unit/prepare.js
index 225e0da..0b416f5 100644
--- a/test/unit/prepare.js
+++ b/test/unit/prepare.js
@@ -24,6 +24,7 @@ describe('Prepare', function() {
})
it('inherit', function() {
+ // normal case
p.inherit({
a: {
x: 1,
@@ -43,6 +44,23 @@ describe('Prepare', function() {
z: 3,
w: 4
})
+ // should apply to objects within arrays as well!
+ p.inherit({
+ a: {
+ x: 1,
+ y: 2
+ },
+ b: [
+ {
+ $extends: 'a',
+ z: 3
+ }
+ ]
+ }).b[0].should.deep.equal({
+ x: 1,
+ y: 2,
+ z: 3
+ })
})
it('parameterize', function() {
diff --git a/test/unit/units.js b/test/unit/units.js
index 2da81dc..ac1e947 100644
--- a/test/unit/units.js
+++ b/test/unit/units.js
@@ -5,12 +5,19 @@ describe('Units', function() {
it('defaults', function() {
// check that an empty config has the default units (and nothing more)
- const def = u.parse({})
- Object.keys(def).filter(public).length.should.equal(4)
- def.U.should.equal(19.05)
- def.u.should.equal(19)
- def.cx.should.equal(18)
- def.cy.should.equal(17)
+ const def1 = u.parse({})
+ Object.keys(def1).filter(public).length.should.equal(4)
+ def1.U.should.equal(19.05)
+ def1.u.should.equal(19)
+ def1.cx.should.equal(18)
+ def1.cy.should.equal(17)
+ // check that an empty config has the default units (and nothing more)
+ const def2 = u.parse()
+ Object.keys(def2).filter(public).length.should.equal(4)
+ def2.U.should.equal(19.05)
+ def2.u.should.equal(19)
+ def2.cx.should.equal(18)
+ def2.cy.should.equal(17)
})
it('units', function() {
@@ -47,4 +54,4 @@ describe('Units', function() {
res.a.should.equal(20.05)
})
-})
\ No newline at end of file
+})
diff --git a/test/unit/utils.js b/test/unit/utils.js
index e702791..7ac48b8 100644
--- a/test/unit/utils.js
+++ b/test/unit/utils.js
@@ -33,6 +33,7 @@ describe('Utils', function() {
{longlonglong: 'long', short: 'shortshortshort'}
).should.equal('long_shortshortshort')
u.template('{{a.b.c}}', {a: {b: {c: 'deep'}}}).should.equal('deep')
+ u.template('{x: {{number}}, y: {{number}}}', {number: 5}).should.equal('{x: 5, y: 5}')
})
it('eq', function() {