commit 784805adc775f626c831f934506e4b677b9d0078 Author: Dave Date: Thu Dec 12 14:46:29 2019 -0600 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ab8620 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +## Universal ASCII Keyboard + +This project aims to provide a (near) universal ASCII keyboard for vintage computers. Home computers of the 1970's typically either polled a switch matrix, or interfaced to a parallel ASCII keyboard via a parallel port. + +The keyboard will allow use of Cherry MX keys, or Futaba MD-4PCS keys. + +The keyboard supports diodes per-switch for true N-key rollover, or +per-row (like the OSI). + +The keyboard is designed using KiCad in order to be the most useful for anybody wishing to modify the keyboard for more specific uses, or to add to the project. + +Goals for the keyboard: + +- Drop in replacement for Ohio Scientific polled keyboards +-- Done: drop in for OSI 542 (untested). +-- Done: keycap set available +-- To do: module for advanced 542B/C features + +- Drop in replacement for Apple II keyboard +--To do: Add-in ASCII module required +--To do: Add power light and power light cover +--To do: Special Apple keycaps needed. + +- Standard ASCII parallel keyboard +-- Done: Keycap set available +-- To do: Add-in ASCII keyboard diff --git a/firmware/asdf/README.md b/firmware/asdf/README.md new file mode 100644 index 0000000..246b007 --- /dev/null +++ b/firmware/asdf/README.md @@ -0,0 +1,126 @@ +-*- text -*- +- asdf Keyboard scanning firmware + +The ASDF (Auto Scan by DF) firmware is a key matrix scanner that can detect and +debounce keypress and release events on a key matrix and either send codes or +perform actions on keypress or release. Keymaps are defined per application and +may, for example, generate ASCII codes, special keyscan codes, etc. The code is +modular and may be integrated into a larger system easily. + + + +By default, the code supports any number of rows by 8 columns, which will give +the bestperformance on an 8-bit microcontroller. For more than 8 columns per +row, the row datatype would need to be changed to uint16_t to support 16 +columns, etc. + +The first supported application is a parallel ASCII output keyboard. If you want +serial or USB output, you can supply your own routines. + +ASDF supports basic keyboard functionality and is configurable via a few +boolean variables, and via the key maps. The key maps are organized in +row,column format, with separate keymaps shift, capslock, and control-key modes. + +Features: + +* modifiers: A set of modifier keys may be specified. When only a few modifiers + are used, this mechanism is a low-overhead alternative to a keymap overlay for + keyboard states that only change the key value, such as SHIFT, CAPS LOCK, CONTROL, + etc. The state of each modifier key is kept in a state variable. In most + cases, pressing the key will set the value to a "pressed" state, and releasing + will reset the value to an "unpressed" state. However some functions interact. + For example, Shift Lock is sticky, so pressing Shift Lock toggles the Shift + Lock state, and Releasing Shift Lock does nothing; but pressing "Shift" will + reset the "Shift Lock" state. + + All modifier state variables are kept in a modifier state variable array. On a + regular keypress, all of the modifier state variables are OR'ed together to + produce an index into a value array for the standard key, to determine the + value sent by the standard keypress. + +* DIP switches: DIP switches are implemented by adding them into the key + matrix, and providing activate() and deactivate() functions for the on and off + positions. + +* Spinners/rotary encoders: Rotary encoders can be implemented by adding the + encoder switches into the matrix, and driving the encoder state machine via + the activate() and deactivate() functions. + +* sticky keys: Stick keys remain active until another key is pressed. This + functionality is supported by the per-key activate() and deactivate() functions. + + For example, for sticky "control", replace control_deactivate() with + null_deactivate() as the deactivate function for the control key, and add a + call to "control_deactivate()" in the "standard_keypress_postprocess_hook()" function. + +* Indicators: Controlled via activate() and deactivate() functions for the various keys. + +* Debounce and Repeat functions: The main keyscan logic implements key + debouncing. Multiple keys may be debounced simultaneously using a separate + debounce counter for each key in the matrix. + +* Repeat key and Autorepeat: This is provided by the repeat module. Autorepeat + may be disabled or enabled either by configuration, by activate()/deactivate() + functions, or other keyboard logic. Repeat and autorepeat only apply to the + most recently pressed key. + +* (Future feature) NVRAM: For architectures that support EEPROM or other non-volatile storage, + configuration parameters are stored in non-volatile storage to survive a power + cycle. + +* ASCII output - supported via output_value function. + +* (Future feature) Serial, USB CDC, USB HID interfaces - supportable via output_value function. + +* Indicator LEDs and other direct logic-level hardware controls: supported via + per-key activate/deactivate functions, and also via hooks to standard key + functions. + +Compiling and configuration + +The source files are in the ./src directory. The final build files go in the ./build directory. + +To build, enter the ./src directory. You should be able to build a binary and +hex file suitable for programming a microcontroller by typing "Make". You may +edit the Makefile to specify your target platform (default is Atmega328P ASCII +controller). You may also wish to edit your preferences in "asdf_config.h" to +specify repeat timings, optimize the debounce setting (if you have very bounce +keys), and specify the character output buffer size (if you are implementing +macros, etc.) + +Porting + +This firmware was written in modular, portable C99, to be compiled with GCC +(avr-gcc for the Atmega). The hardware-sepecific files are in Arch/*.[ch]. To +adapt the Atmega port for additional hardware, enter the ./src/Arch directory, +and copy the files asdf_arch_atmega328p.c and asdf_arch_astmega328p.h to new +filenames, and edit them to suit the hardware changes. + +The firmware is designed to run from ROM on a slow vintage processor, with a +small RAM footprint, and is not re-entrant. It is designed to compile on small +architectures, or to be hand-translated to assembly on small processors, or to +an HDL for a CPLD or FPGA. + +The code was written to favor readability over cleverness. While tempted to +optimize bit testing via bithacks, I opted for code simplicity since the +performance benefit was not there for 8-bit values. + +To port to a new processor architecture, you may use the atmega328p files as an +example, and create a pair of architecture-specific .c and .h files for the new +hardware, exporting the following functions: + +- asdf_arch_init: initializes the CPU and hardware + +- asdf_arch_read_row: given a row number, output the row to the matrix, and read + all the columns on that row asdf_arch_send_code + +- asdf_arch_send_code: given a key code, output the code to the computer, via + serial, parallel, I2C, whatever is appropriate. + +- asdf_arch_tick: true once every 1ms. This tests a flag set in an interrupt + routine that is triggered every 1ms. The function return value is polled and a + keyscan initiated when true. An alternative, if you have an RTOS, or even just + a scheduler, would be to schedule the keyscan every 1 ms, rather than poll. In + that case, this function is not needed, and the "superloop" in main.c would + contain a call to the scheduler. + diff --git a/firmware/asdf/build/README.md b/firmware/asdf/build/README.md new file mode 100644 index 0000000..7495afc --- /dev/null +++ b/firmware/asdf/build/README.md @@ -0,0 +1 @@ +This directory contains the files resulting from the build process diff --git a/firmware/asdf/src/Arch/asdf_arch_atmega328p.c b/firmware/asdf/src/Arch/asdf_arch_atmega328p.c new file mode 100644 index 0000000..7c0126f --- /dev/null +++ b/firmware/asdf/src/Arch/asdf_arch_atmega328p.c @@ -0,0 +1,448 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_arch.c +// +// This file contains all the architecture dependent code, including register +// setup, I/O, timers, etc. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + + +// Wiring Information: +// Chip: {Microcontroller type and version} +// +// Example: +// PIN NAME FUNCTION +// 14-19,9,10 PORTB COLUMN inputs (1 bit per column) +// 23-25 PORTC0-2 ROW outputs (row number) +// 27 PORTC4 + + +#include +#include +#include +#include + +#include "asdf_arch.h" + +static volatile uint8_t tick = 0; + +static uint8_t data_polarity = 0; // normally positive polarity +static uint8_t strobe_polarity = 0; // normally positive polarity + + +// PROCEDURE: ISR for Timer 0 overflow +// INPUTS: none +// OUTPUTS:none +// +// DESCRIPTION: Occurs every 1 ms. Set tick flag, kick watchdog. +// +// SIDE EFFECTS: +// +// NOTES: +// +// SCOPE: +// +// COMPLEXITY: +// +ISR(TIMER0_COMPA_vect) +{ + tick = 1; +} + +// PROCEDURE: set_bit +// INPUTS: port: pointer to a (uint8) port +// bit: bit position to be set +// OUTPUTS: none +// +// DESCRIPTION: Give a port address and bit position, set the bit position. +// +// SIDE EFFECTS: See DESCRIPTION +// +// NOTES: Declared inline. Will only be inlined for functions in this module, so +// also declared static. +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static inline void set_bit(volatile uint8_t *port, uint8_t bit) +{ + *port |= (1 << bit); +} + +// PROCEDURE: clear_bit +// INPUTS: port: pointer to a (uint8) port +// bit: bit position to be cleared +// OUTPUTS: none +// +// DESCRIPTION: Give a port address and bit position, clear the bit position. +// +// SIDE EFFECTS: See DESCRIPTION +// +// NOTES: Declared inline. Will only be inlined for functions in this module, so +// also declared static. +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static inline void clear_bit(volatile uint8_t *port, uint8_t bit) +{ + *port &= ~(1 << bit); +} + +// PROCEDURE: arch_timer0_config +// +// INPUTS: bits: a 4 byte field containing the configuration values for the +// 8-bit timer0 A and B control registers, and the interrupt mask register. +// +// OUTPUTS: none +// +// DESCRIPTION: Takes a 4 byte value with settings for all the control +// registers for the 8-bit counter/timer (timer 0), and writes them all +// to the respective registers. +// +// SIDE EFFECTS: see above +// +// NOTES: Setting all the bits together, and writing all the registers from a +// single word permits more clear initialization of control fields that are +// spread across more than one word. +// +// COMPLEXITY: 1 +// +// SCOPE: private +// +static void arch_timer0_config(uint32_t bits) +{ + TCCR0B = 0; // first turn off timer. + TCCR0A = (bits >> TMR0A_POS) & 0xff; + TIMSK0 = (bits >> TMR0IMSK_POS) & 0xff; + TCCR0B = (bits >> TMR0B_POS) & 0xff; // Set the mode (and turn on timer) last +} + +// PROCEDURE: arch_tick_timer_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Sets up 1ms tick timer. +// +// SIDE EFFECTS: +// +// NOTES: Set up Timer 0 in CTC mode for 1 ms overflow. +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_arch_tick_timer_init(void) +{ + tick = 0; + + // set compare register first, so timer can operate correctly as soon as it is + // enabled. + OCR0A = TICK_COUNT; + + // operate in CTC mode to overflow at exactly 1 ms + // prescaler = 64 and output compare value is 250 + arch_timer0_config(TIMER0_WFM_CTC | TIMER0_DIV64 | TIMER0_INT_ON_COMA); +} + +// PROCEDURE: asdf_arch_tick +// INPUTS: none +// OUTPUTS: returns a 1 if the 1ms timer timed out, 0 otherwise +// +// DESCRIPTION: See Outputs. +// +// SIDE EFFECTS: Zeroes out the 1 ms timer flag. +// +// NOTES: +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +uint8_t asdf_arch_tick(void) +{ + uint8_t retval = tick; + tick = 0; + return retval; +} + +// PROCEDURE: asdf_arch_init_timers +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Sets up timer for 1 ms intervals +// +// SIDE EFFECTS: See DESCRIPTION +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_arch_init_clock(void) +{ + CLKPR = (CLKPCE | SYSCLK_DIV1); +} + +// PROCEDURE: asdf_arch_init_special_outputs +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Sets up special output lines for LED indicator(s), System RESET +// and SCREEN CLEAR, etc. +// +// SIDE EFFECTS: See DESCRIPTION +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_arch_init_special_outputs(void) +{ + + // initialize CAPS LED to OFF + clear_bit(&ASDF_CAPS_LED_PORT, ASDF_CAPS_LED_BIT); + set_bit(&ASDF_CAPS_LED_DDR, ASDF_CAPS_LED_BIT); + + + // initialize SCREEN_CLEAR output line to LOW (inactive) + clear_bit(&ASDF_SCREEN_CLEAR_PORT, ASDF_SCREEN_CLEAR_BIT); + set_bit(&ASDF_SCREEN_CLEAR_DDR, ASDF_SCREEN_CLEAR_BIT); + + + // initialize /SYS_RESET output line to HIGH (inactive) + set_bit(&ASDF_SYS_RESET_PORT, ASDF_SYS_RESET_BIT); + set_bit(&ASDF_SYS_RESET_DDR, ASDF_SYS_RESET_BIT); + + + // initialize /STROBE output to inactive. Must test before set/clear to avoid spurious strobe + if (strobe_polarity) { + set_bit(&ASDF_STROBE_PORT, ASDF_STROBE_BIT); + } + else { + clear_bit(&ASDF_STROBE_PORT, ASDF_STROBE_BIT); + } + + set_bit(&ASDF_STROBE_DDR, ASDF_STROBE_BIT); +} + +// PROCEDURE: asdf_arch_init_ascii_output +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Sets up output port for ASCII output +// +// SIDE EFFECTS: See DESCRIPTION +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_arch_init_ascii_output(void) +{ + + // set all outputs + ASDF_ASCII_PORT = 0; + ASDF_ASCII_DDR = ALL_OUTPUTS; +} + +// PROCEDURE: asdf_arch_init_column_inputs +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: configure the shift register control lines. The MODE control is +// LOW for shift and HIGH for load. Shift or Load occurs when CLK goes high. +// +// SIDE EFFECTS: Cont +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_arch_init_column_control(void) +{ + + // COLCLK is output and initialized LOW + clear_bit(&ASDF_COLCLK_PORT, ASDF_COLCLK_BIT); + set_bit(&ASDF_COLCLK_DDR, ASDF_COLCLK_BIT); + + // COLMODE is output and initialized HIGH + set_bit(&ASDF_COLMODE_PORT, ASDF_COLMODE_BIT); + set_bit(&ASDF_COLMODE_DDR, ASDF_COLMODE_BIT); + + // COL is input, no weak pullup. + clear_bit(&ASDF_COL_DDR, ASDF_COL_BIT); + clear_bit(&ASDF_COL_PORT, ASDF_COL_BIT); +} + +// PROCEDURE: asdf_arch_init_row_outputs +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Sets up output port to latch keyboard matrix row for scanning. +// +// SIDE EFFECTS: See DESCRIPTION +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_arch_init_row_outputs(void) +{ + ASDF_ROW_PORT &= ~ASDF_ROW_MASK; + ASDF_ROW_DDR |= ASDF_ROW_MASK; +} + +// PROCEDURE: asdf_arch_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: sets up all the hardware for the keyboard +// +// SIDE EFFECTS: see DESCRIPTION +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +void asdf_arch_init(void) +{ + // disable interrupts: + cli(); + + // clear the 1ms timer flag; + tick = 0; + + // set up timers for 1 msec intervals + asdf_arch_init_clock(); + asdf_arch_tick_timer_init(); + + // set up ASCII output port + asdf_arch_init_ascii_output(); + + // initialize keyboard data and strobe to positive polairy + data_polarity = 0; + strobe_polarity = 0; + + // set up strobe output + // set up indicator output + // set up RESET output + // set up CLEAR output + asdf_arch_init_special_outputs(); + + // set up row output port + asdf_arch_init_row_outputs(); + + // set up column control lines + asdf_arch_init_column_control(); + + // enable interrupts: + sei(); +} + +// PROCEDURE: asdf_arch_read_row +// INPUTS: (uint8_t) row: the row number to be scanned +// OUTPUTS: returns a word containing the active (pressed) columns +// +// DESCRIPTION: Outputs the argument to the ROW port, then reads the column port +// and returns the value. The value is a binary representation of the keys +// pressed within the row, with 1=pressed, 0=released. +// +// SIDE EFFECTS: Sets ROW output port. +// +// NOTES: +// +// 1) The keymap represents an unpressed key as a "0" and a pressed key as a +// "1". So, if a keypress pulls the column line low, then the reading of the +// physical bits must be inverted. +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +asdf_cols_t asdf_arch_read_row(uint8_t row) +{ + asdf_cols_t cols = 0; + + // first, output the new row value: + ASDF_ROW_PORT = (ASDF_ROW_PORT & ~ASDF_ROW_MASK) | row << ASDF_ROW_OFFSET; + + + // read in the columns. Set LOAD mode and pulse clock. + clear_bit(&ASDF_COLMODE_PORT, ASDF_COLMODE_BIT); + + set_bit(&ASDF_COLCLK_PORT, ASDF_COLCLK_BIT); + clear_bit(&ASDF_COLCLK_PORT, ASDF_COLCLK_BIT); + + // set back to SHIFT mode + set_bit(&ASDF_COLMODE_PORT, ASDF_COLMODE_BIT); + + // After the load operation, the LSB is already at the output pin, so there + // will be one fewer read than clock pulse. Continue reading the bits until + // the leader bit is in the boundary position. + for (uint8_t i = 0; i < ASDF_NUM_COLS; i++) { + + // invert the bits as they are read (see note 1) + cols |= (((~(ASDF_COL_PIN) >> ASDF_COL_BIT) & 1) << i); + + set_bit(&ASDF_COLCLK_PORT, ASDF_COLCLK_BIT); + clear_bit(&ASDF_COLCLK_PORT, ASDF_COLCLK_BIT); + } + + return cols; +} + + +// PROCEDURE: asdf_arch_send_code +// INPUTS: (keycode_t) code - the 7-bit ASCII code to be output by the keyboard +// OUTPUTS: none +// +// DESCRIPTION: Takes a character code and outputs the code on a parallel ASCII +// port, with a strobe. This routine could be replaced with UART, I2C, USB, or +// other output mechanism, of course. +// +// SIDE EFFECTS: See above. +// +// NOTES: The strobe is set by the ASDF_STROBE_LENGTH definition. The data +// output and strobe polarity are set by the static data_polarity and static +// strobe_polarity variables. +// +// SCOPE: +// +// COMPLEXITY: +// + +void asdf_arch_send_code(asdf_keycode_t code) +{ + ASDF_ASCII_PORT = (code ^ data_polarity); + + + // toggle strobe. Must test before setting to avoid spurious strobe + set_bit(&ASDF_STROBE_PINS, ASDF_STROBE_BIT); + + _delay_us(ASDF_STROBE_LENGTH_US); + + set_bit(&ASDF_STROBE_PINS, ASDF_STROBE_BIT); +} + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. +// diff --git a/firmware/asdf/src/Arch/asdf_arch_atmega328p.h b/firmware/asdf/src/Arch/asdf_arch_atmega328p.h new file mode 100644 index 0000000..1f68af2 --- /dev/null +++ b/firmware/asdf/src/Arch/asdf_arch_atmega328p.h @@ -0,0 +1,267 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_arch_atmega328p.h +// +// Contains architecture-specific definitions for the atmega 328p. +// +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#if !defined(ASDF_ARCH_H) +#define ASDF_ARCH_H + +#include +#include + +#include "asdf.h" + +// ASDF keyboard definitions: + +#define ASDF_STROBE_LENGTH_US 10 // strobe length in microseconds + + +// Clock definitions: +#define SYSCLK_DIV1 0 +#define SYSCLK_DIV2 (CLKPS0) +#define SYCCLK_DIV4 (CLKPS1) +#define SYSCLK_DIV8 (CLKPS1 | CLKPS0) +#define SYSCLK_DIV16 (CLKPS2) +#define SYSCLK_DIV32 (CLKPS2 | CLKPS0) +#define SYSCLK_DIV64 (CLKPS2 | CLKPS1) +#define SYSCLK_DIV128 (CLKPS2 | CLKPS1 | CLKPS0) +#define SYSCLK_DIV256 (CLKPS3) + +// Define fields for register A, B, interrupt mask as 8-bit masks, and +// as masks offset into a combined config word +#define TMR0A_POS 0 +#define TMR0B_POS 8 +#define TMR0IMSK_POS 16 +#define TMR0A (1L << TMR0A_POS) +#define TMR0B (1L << TMR0B_POS) +#define TMR0IMSK (1L << TMR0IMSK_POS) + +#define TIMER0_COM_A_DISCONNECTED 0 +#define TIMER0_COM_B_DISCONNECTED 0 +#define TIMER0_WFM_CTC (TMR0A << WGM01) +#define TIMER0_DIV64 ((TMR0B << CS01) | (TMR0B << CS00)) +#define TIMER0_INT_ON_COMA (TMR0IMSK << OCIE0A) +#define TIMER0_INT_ON_COMB (TMR0IMSK << OCIE0B) +#define TIMER0_INT_OV_ENABLE (TMR0IMSK << TOIE0) + +// Macros for 16-bit timer 1. ATmega328P datasheet section 15, p. 108 +// +// Define fields for Registers A, B, C, INT Mask registers as 8-bit +// masks, and as masks offset into a 32-bit combined config word. +// +// Macro definitions for individual registers are named TMR1A_*, +// TMR1B_*, and TMR1C_*. +// +// Macros for the one-step combined timer config functions are named +// TMR1_*. +// +// +// Examples: +// // Use TMR1B_* definition to set TCCR1B register +// TCCR1B |= TMR1B_DIV1; +// +// // Use TMR1_* definitions to configure timer with config function +// timer1_config(TMR1_WFM_CTC | TMR1_INT_ON_CMPA); +// +#define TMR1A_POS 0 +#define TMR1B_POS 8 +#define TMR1C_POS 16 +#define TMR1IMSK_POS 24 +#define TMR1A (1L << TMR1A_POS) +#define TMR1B (1L << TMR1B_POS) +#define TMR1C (1L << TMR1C_POS) +#define TMR1IMSK (1L << TMR1IMSK_POS) + +// 16-bit timer reg A - Datasheet 17.11.1, p. 154 +#define TMR1A_CMPA_CLR_MATCH_SET_BOTTOM (1 << COM1A1) +#define TMR1A_CMPB_CLR_MATCH_SET_BOTTOM (1 << COM1B1) +#define TMR1A_CMPC_CLR_MATCH_SET_BOTTOM (1 << COM1C1) +#define TMR1_CMPA_CLR_MATCH_SET_BOTTOM (TMR1A << COM1A1) +#define TMR1_CMPB_CLR_MATCH_SET_BOTTOM (TMR1A << COM1B1) +#define TMR1_CMPC_CLR_MATCH_SET_BOTTOM (TMR1A << COM1C1) + +// 16-bit timer reg B - Datasheet 17.11.6, p. 156 + +#define TMR1B_IN_CAP_POS 0x40L +#define TMR1B_IN_CAP_NEG 0L +#define TMR1B_IN_CAP_NOISE_CANCEL 0x80L + +// 16-bit timer reg C -- see datasheet, 17.11.9, p. 157 +#define TMR1C_FOCA 0x80L +#define TMR1C_FOCB 0x40L +#define TMR1C_FOCC 0x20L + +// 16-bit timer int mask -- see datasheet 17.11.33, p. 161. +#define TMR1IM_INT_CMP_MATCH_A (1L << OCIE1A) +#define TMR1IM_INT_CMP_MATCH_B (1L << OCIE1B) +#define TMR1IM_INT_CMP_MATCH_C (1L << OCIE1C) + +// 16-bit timer all registers: +#define TMR1_CMPA_DISCONNECTED 0L +#define TMR1_CMPB_DISCONNECTED 0L +#define TMR1_CMPC_DISCONNECTED 0L +#define TMR1_INT_ON_CMPA (TMR1IM_INT_CMP_MATCH_A << TMR1IMSK_POS) + +// 16-bit timer clock modes - see Datasheet table 17-6, p. 157 +#define TMR1B_OFF 0 +#define TMR1_OFF 0 +#define TMR1B_DIV1 (0x01L << CS10) +#define TMR1B_DIV8 (0x02L << CS10) +#define TMR1B_DIV64 (0x03L << CS10) +#define TMR1B_DIV256 (0x04L << CS10) +#define TMR1B_DIV1024 (0x05L << CS10) +#define TMR1B_EXT_FALLING_EDGE (0x06L << CS10) +#define TMR1B_EXT_RISING_EDGE (0x07L << CS10) +#define TMR1B_CLK_MASK 0x07L +#define TMR1_DIV1 (TMR1B_DIV1 << TMR1B_POS) +#define TMR1_DIV8 (TMR1B_DIV8 << TMR1B_POS) +#define TMR1_DIV64 (TMR1B_DIV64 << TMR1B_POS) +#define TMR1_DIV256 (TMR1B_DIV256 << TMR1B_POS) +#define TMR1_DIV1024 (TMR1B_DIV1024 << TMR1B_POS) +#define TMR1_EXT_FALLING_EDGE (TMR1B_EXT_FALLING_EDGE << TMR1B_POS) +#define TMR1_EXT_RISING_EDGE (TMR1B_EXT_RISING_EDGE << TMR1B_POS) + +#define TMR1B_EDGE_SEL_POSITIVE (1 << ICES1) +#define TMR1B_EDGE_SEL_NEGATIVE 0L +#define TMR1_EDGE_SEL_POSITIVE (TMR1B << ICES1) +#define TMR1_EDGE_SEL_NEGATIVE 0L + +// 16-bit waveform modes (across reg A and B) Datasheet Table 17.2, p 145 +#define TMR1_WFM_NORMAL 0L +#define TMR1_WFM_PWM_PC8 (TMR1A << WGM10) // PWM Phase Correct 8-bit +#define TMR1_WFM_PWM_PC9 (TMR1A << WGM11) // PWM Phase COrrect 9-bit +#define TMR1_WFM_PWM_PC10 ((TMR1A << WGM11) | (TMR1A << WGM10)) // PWM Phase Correct 10-bit +#define TMR1_WFM_CTC (TMR1B << WGM12) // CTC +#define TMR1_WFM_PWM_FAST8 ((TMR1B << WGM12) | (TMR1A << WGM10)) // PWM Fast 8-bit +#define TMR1_WFM_PWM_FAST9 ((TMR1B << WGM12) | (TMR1A << WGM11)) // PWM Fast 9-bit +#define TMR1_WFM_PWM_FAST10 \ + ((TMR1B << WGM12) | (TMR1A << WGM11) | (TMR1A << WGM10)) // PWM Fast 10-bit +#define TMR1_WFM_PWM_PFC_ICR (TMR1B << WGM13) // PWM Phase and Freq Correct, TpOP=ICR +#define TMR1_WFM_PWM_PFC_OCRA \ + ((TMR1B << WGM13) | (TMR1A << WGM10)) // PWM Phase and Freq Correct, TOP = OCRA +#define TMR1_WFM_PWM_PC_ICR ((TMR1B << WGM13) | (TMR1A << WGM11)) // PWM PhaseCorrect, TOP = ICR +#define TMR1_WFM_PWM_PC_OCRA \ + ((TMR1B << WGM13) | (TMR1A << WGM11) | (TMR1A << WGM12)) // PWM PhaseCorrect, TOP=OCRA +#define TMR1_WFM_CTC_ICR ((TMR1B << WGM13) | (TMR1B << WGM12)) // CTC, TOP = ICR +#define TMR1_WFM_PWM_FAST_ICR \ + ((TMR1B << WGM13) | (TMR1B << WGM12) | (TMR1A << WGM11)) // PWM Fast, TOP = ICR +#define TMR1_WFM_PWM_FAST_OCRA \ + ((TMR1B << WGM13) | (TMR1B << WGM12) | (TMR1A << WGM11) \ + | (TMR1A << WGM10)) // PWM Fast, TOP = OCRA + + +// I/O port definitions: + +#define PIN_INPUT 0 +#define PIN_OUTPUT 1 +#define ALL_INPUTS 0 +#define ALL_OUTPUTS 0xff + +#define ASDF_ROW_PORT PORTC +#define ASDF_ROW_DDR DDRC +#define ASDF_ROW_MASK 0x07 +#define ASDF_ROW_OFFSET 0 + +#define ASDF_COL_PORT PORTB +#define ASDF_COL_PIN PINB +#define ASDF_COL_DDR DDRB +#define ASDF_COL_BIT 0 +#define ASDF_COL_PULLUPS 0 // disable weak pullup + +#define ASDF_COLCLK_PORT PORTB +#define ASDF_COLCLK_PINS PINB +#define ASDF_COLCLK_DDR DDRB +#define ASDF_COLCLK_BIT 2 + +#define ASDF_COLMODE_PORT PORTB +#define ASDF_COLMODE_PINS PINB +#define ASDF_COLMODE_DDR DDRB +#define ASDF_COLMODE_BIT 1 + +#define ASDF_ASCII_PORT PORTD +#define ASDF_ASCII_DDR DDRD + +#define ASDF_CAPS_LED_PORT PORTC +#define ASDF_CAPS_LED_DDR DDRC +#define ASDF_CAPS_LED_BIT 3 + +#define ASDF_SCREEN_CLEAR_PORT PORTC +#define ASDF_SCREEN_CLEAR_DDR DDRC +#define ASDF_SCREEN_CLEAR_BIT 4 + +#define ASDF_SYS_RESET_PORT PORTC +#define ASDF_SYS_RESET_DDR DDRC +#define ASDF_SYS_RESET_BIT 5 + +#define ASDF_STROBE_PORT PORTB +#define ASDF_STROBE_PINS PINB +#define ASDF_STROBE_DDR DDRB +#define ASDF_STROBE_BIT 6 + +#define FUSE_INTERNAL_8MHZ_OSC_0MS (FUSE_CKSEL0 | FUSE_CKSEL2 | FUSE_CKSEL3 | FUSE_SUT0 | FUSE_SUT1) +#define FUSE_INTERNAL_8MHZ_OSC_4MS (FUSE_CKSEL0 | FUSE_CKSEL2 | FUSE_CKSEL3 | FUSE_SUT1) +#define FUSE_INTERNAL_8MHZ_OSC_65MS (FUSE_CKSEL0 | FUSE_CKSEL2 | FUSE_CKSEL3 | FUSE_SUT0) + +#define FLASH PROGMEM + +// not implemented with do-while(0) because this is a function call that returns +// a value, and parameters are expanded inside the parameter list, so this will +// be valid when substituting for function-like syntax. +#define FLASH_READ (a) pgm_read_byte((a)) +#define FLASH_READ_MATRIX_ELEMENT(matrix, row, col) pgm_read_byte(&((matrix)[(row)][(col)])) + +// For 1 ms tick, (8000000 / 64(prescale)) / 1000(usec) - 1 = 124 +#define TICK_COUNT 124 + + +// PROCEDURE: asdf_arch_read_row +// INPUTS: (uint8_t) row: the row number to be scanned +// OUTPUTS: returns a word containing the active (pressed) columns +// DESCRIPTION: Outputs the argument to the ROW port, then reads the column port +// and returns the value. The value is a binary representation of the keys +// pressed within the row, with 1=pressed, 0=released. +asdf_cols_t asdf_arch_read_row(uint8_t row); + +// PROCEDURE: asdf_arch_tick +// INPUTS: none +// OUTPUTS: returns a 1 if the 1ms timer timed out, 0 otherwise +uint8_t asdf_arch_tick(void); + +// PROCEDURE: asdf_arch_send_code +// INPUTS: (keycode_t) code - the code to be output by the keyboard +// OUTPUTS: none +// DESCRIPTION: Takes a character code and outputs the code on a parallel ASCII +// port, with a strobe. This routine could be replaced with UART, I2C, USB, or +// other output mechanism, of course. +void asdf_arch_send_code(asdf_keycode_t code); + +// PROCEDURE: asdf_arch_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: sets up all the hardware for the keyboard +void asdf_arch_init(void); + +#endif /* !defined (ASDF_ARCH_H) */ + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/Arch/asdf_arch_test.h b/firmware/asdf/src/Arch/asdf_arch_test.h new file mode 100644 index 0000000..7f20079 --- /dev/null +++ b/firmware/asdf/src/Arch/asdf_arch_test.h @@ -0,0 +1,43 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_arch_test.h +// +// Architecture-dependent definitions for the unit-testing ASDF software. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + + +#if !defined (ASDF_ARCH_H) +#define ASDF_ARCH_H + +#define FLASH +#define FLASH_READ (a) (*(a)) +#define FLASH_READ_MATRIX_ELEMENT(mat,row,col) (mat)[(row)][(col)] + +void asdf_arch_init(void); +void asdf_arch_tick(void); +uint8_t asdf_arch_read_row(uint8_t row); + +#endif // !defined (ASDF_ARCH_H) + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + + + diff --git a/firmware/asdf/src/Keymaps/asdf_keymaps_ascii.h b/firmware/asdf/src/Keymaps/asdf_keymaps_ascii.h new file mode 100644 index 0000000..cf4e547 --- /dev/null +++ b/firmware/asdf/src/Keymaps/asdf_keymaps_ascii.h @@ -0,0 +1,128 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_keymaps.h +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + + +#if !defined(ASDF_KEYMAPS_H) +#define ASDF_KEYMAPS_H + +#include "asdf.h" +#include "asdf_ascii.h" +#include "asdf_modifiers.h" + +#define ASCII_PLAIN_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \ + { ASCII_DEL, 'p', ';', '/', ASCII_SPACE, 'z', 'a', 'q' }, \ + { ACTION_BREAK, ASCII_COMMA, 'm', 'n', 'b', 'v', 'c', 'x' }, \ + { ACTION_NOTHING, 'k', 'j', 'h', 'g', 'f', 'd', 's' }, \ + { ACTION_CLEAR, 'i', 'u', 'y', 't', 'r', 'e', 'w' }, { ACTION_REPEAT, \ + ACTION_HERE_IS, \ + ACTION_SHIFT_LOCK, \ + ASCII_CR, \ + ASCII_LF, \ + 'o', \ + 'l', \ + ASCII_PERIOD }, \ + { ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \ + { \ + ASCII_AT, '7', '6', '5', '4', '3', '2', '1' \ + } \ + } + +#define ASCII_CAPS_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \ + { ASCII_DEL, 'P', ';', '/', ASCII_SPACE, 'Z', 'A', 'Q' }, \ + { ACTION_BREAK, ASCII_COMMA, 'M', 'N', 'B', 'V', 'C', 'X' }, \ + { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \ + { ACTION_CLEAR, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, { ACTION_REPEAT, \ + ACTION_HERE_IS, \ + ACTION_SHIFT_LOCK, \ + ASCII_CR, \ + ASCII_LF, \ + 'O', \ + 'L', \ + ASCII_PERIOD }, \ + { ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \ + { \ + ASCII_AT, '7', '6', '5', '4', '3', '2', '1' \ + } \ + } + +#define ASCII_SHIFT_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_VERT_BAR }, \ + { ASCII_DEL, 'P', '+', '?', ASCII_SPACE, 'Z', 'A', 'Q' }, \ + { ACTION_BREAK, '>', 'M', 'N', 'B', 'V', 'C', 'X' }, \ + { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \ + { ACTION_CLEAR, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \ + { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFT_LOCK, ASCII_CR, ASCII_LF, 'O', 'L', '<' }, \ + { ASCII_TILDE, ASCII_RT_CURLY_BRACE, ASCII_LT_CURLY_BRACE, '=', '*', \ + '0', ASCII_RT_PAREN, ASCII_LT_PAREN }, \ + { \ + ASCII_GRAVE_ACCENT, ASCII_SINGLE_QUOTE, '&', '%', '$', '#', ASCII_DOUBLE_QUOTE, '!' \ + } \ + } + +#define ASCII_CTRL_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, 0x1c }, \ + { ACTION_NOTHING, ASCII_CTRL_P, ACTION_NOTHING, ACTION_NOTHING, \ + ASCII_SPACE, ASCII_CTRL_Z, ASCII_CTRL_A, ASCII_CTRL_Q }, \ + { ACTION_BREAK, ASCII_COMMA, ASCII_CTRL_M, ASCII_CTRL_N, \ + ASCII_CTRL_B, ASCII_CTRL_V, ASCII_CTRL_C, ASCII_CTRL_X }, \ + { ACTION_CLEAR, ASCII_CTRL_I, ASCII_CTRL_U, ASCII_CTRL_Y, \ + ASCII_CTRL_T, ASCII_CTRL_R, ASCII_CTRL_E, ASCII_CTRL_W }, \ + { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFT_LOCK, ASCII_CR, \ + ASCII_LF, ASCII_CTRL_O, ASCII_CTRL_L, ACTION_NOTHING }, \ + { ACTION_NOTHING, 0x1d, ASCII_ESC, ACTION_NOTHING, \ + ACTION_NOTHING, ACTION_FN_1, ACTION_FN_9, ACTION_FN_8 }, \ + { \ + ACTION_NOTHING, ACTION_FN_7, ACTION_FN_6, ACTION_FN_5, ACTION_FN_4, ACTION_FN_3, \ + ACTION_FN_2, ACTION_FN_2 \ + } \ + } + +// PROCEDURE: asdf_keymaps_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Assigns the keymaps to the indices specified by the modifier +// index, to avoid hard-coding constant index values. +void asdf_keymaps_init(void); + +// PROCEDURE: asdf_keymaps_get_code +// INPUTS: row, col: row and column of key that has been pressed +// modifiers_index: index into the keymap array, based on modifier state +// OUTPUTS: returns a key code. +// DESCRIPTION: Given a key row and column, and an index based on modifier +// state, return the appropriate keycode. +asdf_keycode_t asdf_keymaps_get_code(uint8_t row, uint8_t col, uint8_t modifier_index); + + +#endif /* !defined (ASDF_KEYMAPS_H) */ + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/Keymaps/asdf_keymaps_test.h b/firmware/asdf/src/Keymaps/asdf_keymaps_test.h new file mode 100644 index 0000000..88fd8e6 --- /dev/null +++ b/firmware/asdf/src/Keymaps/asdf_keymaps_test.h @@ -0,0 +1,131 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_keymaps.h +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +// While there is nothing preventing a standard keyboard from having both a +// "Shift Lock" key and a "Caps Lock" key, usually only one will be present. For +// testing, both must be present to test their functionality. + +#if !defined(ASDF_KEYMAPS_H) +#define ASDF_KEYMAPS_H + +#include "asdf.h" +#include "asdf_ascii.h" +#include "asdf_modifiers.h" + +#define ASCII_PLAIN_MAP \ + { \ + { ACTION_CAPS, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \ + { ACTION_NOTHING, 'p', ';', '/', ASCII_SPACE, 'z', 'a', 'q' }, \ + { ACTION_BREAK, ASCII_COMMA, 'm', 'n', 'b', 'v', 'c', 'x' }, \ + { ACTION_NOTHING, 'k', 'j', 'h', 'g', 'f', 'd', 's' }, \ + { ACTION_CLEAR, 'i', 'u', 'y', 't', 'r', 'e', 'w' }, { ACTION_REPEAT, \ + ACTION_HERE_IS, \ + ACTION_SHIFT_LOCK, \ + ASCII_CR, \ + ASCII_LF, \ + 'o', \ + 'l', \ + ASCII_PERIOD }, \ + { ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \ + { \ + ACTION_NOTHING, '7', '6', '5', '4', '3', '2', '1' \ + } \ + } + +#define ASCII_CAPS_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \ + { ACTION_NOTHING, 'P', ';', '/', ASCII_SPACE, 'Z', 'A', 'Q' }, \ + { ACTION_BREAK, ASCII_COMMA, 'M', 'N', 'B', 'V', 'C', 'X' }, \ + { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \ + { ACTION_CLEAR, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, { ACTION_REPEAT, \ + ACTION_HERE_IS, \ + ACTION_SHIFT_LOCK, \ + ASCII_CR, \ + ASCII_LF, \ + 'O', \ + 'L', \ + ASCII_PERIOD }, \ + { ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \ + { \ + ACTION_NOTHING, '7', '6', '5', '4', '3', '2', '1' \ + } \ + } + +#define ASCII_SHIFT_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_VERT_BAR }, \ + { ACTION_NOTHING, 'P', '+', '?', ASCII_SPACE, 'Z', 'A', 'Q' }, \ + { ACTION_BREAK, '>', 'M', 'N', 'B', 'V', 'C', 'X' }, \ + { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \ + { ACTION_CLEAR, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \ + { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFT_LOCK, ASCII_CR, ASCII_LF, 'O', 'L', '<' }, \ + { ASCII_TILDE, ASCII_RT_CURLY_BRACE, ASCII_LT_CURLY_BRACE, '=', '*', \ + '0', ASCII_RT_PAREN, ASCII_LT_PAREN }, \ + { \ + ACTION_NOTHING, ASCII_SINGLE_QUOTE, '&', '%', '$', '#', ASCII_DOUBLE_QUOTE, '!' \ + } \ + } + +#define ASCII_CTRL_MAP \ + { \ + { ACTION_NOTHING, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \ + ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, 0x1c }, \ + { ACTION_NOTHING, ASCII_CTRL_P, ACTION_NOTHING, ACTION_NOTHING, \ + ASCII_SPACE, ASCII_CTRL_Z, ASCII_CTRL_A, ASCII_CTRL_Q }, \ + { ACTION_BREAK, ASCII_COMMA, ASCII_CTRL_M, ASCII_CTRL_N, \ + ASCII_CTRL_B, ASCII_CTRL_V, ASCII_CTRL_C, ASCII_CTRL_X }, \ + { ACTION_CLEAR, ASCII_CTRL_I, ASCII_CTRL_U, ASCII_CTRL_Y, \ + ASCII_CTRL_T, ASCII_CTRL_R, ASCII_CTRL_E, ASCII_CTRL_W }, \ + { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFT_LOCK, ASCII_CR, \ + ASCII_LF, ASCII_CTRL_O, ASCII_CTRL_L, ACTION_NOTHING }, \ + { ACTION_NOTHING, 0x1d, ASCII_ESC, ACTION_NOTHING, \ + ACTION_NOTHING, ACTION_FN_1, ACTION_FN_9, ACTION_FN_8 }, \ + { \ + ACTION_NOTHING, ACTION_FN_7, ACTION_FN_6, ACTION_FN_5, ACTION_FN_4, ACTION_FN_3, \ + ACTION_FN_2, ACTION_FN_2 \ + } \ + } + +// PROCEDURE: asdf_keymaps_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Assigns the keymaps to the indices specified by the modifier +// index, to avoid hard-coding constant index values. +void asdf_keymaps_init(void); + +// PROCEDURE: asdf_keymaps_get_code +// INPUTS: row, col: row and column of key that has been pressed +// modifiers_index: index into the keymap array, based on modifier state +// OUTPUTS: returns a key code. +// DESCRIPTION: Given a key row and column, and an index based on modifier +// state, return the appropriate keycode. +asdf_keycode_t asdf_keymaps_get_code(uint8_t row, uint8_t col, uint8_t modifier_index); + + +#endif /* !defined (ASDF_KEYMAPS_H) */ + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/Makefile b/firmware/asdf/src/Makefile new file mode 100644 index 0000000..8e7c57b --- /dev/null +++ b/firmware/asdf/src/Makefile @@ -0,0 +1,21 @@ +ARCH ?= atmega328p +KEYMAP ?= ascii + +BUILD_DIR = ../build + +all: app + +app: + make -f Makefile.app + +test: + make -f Makefile.test + +clean: + make -f Makefile.app clean + make -f Makefile.test clean + +cleanall: + make -f Makefile.app cleanall + make -f Makefile.test cleanall + diff --git a/firmware/asdf/src/Makefile.app b/firmware/asdf/src/Makefile.app new file mode 100644 index 0000000..20c4e49 --- /dev/null +++ b/firmware/asdf/src/Makefile.app @@ -0,0 +1,157 @@ +ARCH ?= atmega328p +KEYMAP ?= ascii + +ARCH_TOKEN = _Arch_$(ARCH) + +TARGET = asdf + +TEST_DIR = ../test +UNITY_DIR = $(TEST_DIR)/unity +BUILD_DIR = ../build +DEP_DIR := ./.deps + +TARGET_BIN := $(BUILD_DIR)/$(TARGET).elf +TARGET_HEX := $(BUILD_DIR)/$(TARGET).hex +TARGET_MAP := $(BUILD_DIR)/$(TARGET).map + +UNITY_SCRIPTS = $(UNITY_DIR)/auto +ARCH_DIR = Arch +KEYMAPS_DIR = Keymaps +VERSION = +RELEASE= +SIZE_COMMAND = avr-size + +CLOCK = 8000000L + +CLEAN_FILES = +CLEANALL_FILES = + +CC = avr-gcc + +CFLAGS = -std=c99 +CFLAGS += -Wall +CFLAGS += -funsigned-char +CFLAGS += -funsigned-bitfields +CFLAGS += -ffunction-sections +CFLAGS += -fdata-sections +CFLAGS += -fpack-struct +CFLAGS += -fshort-enums +CFLAGS += -O2 +CFLAGS += -Wall +CFLAGS += -Wextra +CFLAGS += -Wpointer-arith +CFLAGS += -Wcast-align +CFLAGS += -Wwrite-strings +CFLAGS += -Wswitch-default +CFLAGS += -Wunreachable-code +CFLAGS += -Winit-self +CFLAGS += -Wmissing-field-initializers +CFLAGS += -Wno-unknown-pragmas +CFLAGS += -Wstrict-prototypes +CFLAGS += -Wundef +CFLAGS += -Wold-style-definition +CFLAGS += -mmcu=$(ARCH) +CFLAGS += -DF_CPU=$(CLOCK) + +LDFLAGS = -Wl,-Map=$(TARGET_MAP) +LDFLAGS += -Wl,--start-group +LDFLAGS += -Wl,-lm +LDFLAGS += -Wl,--end-group +LDFLAGS += -Wl,--gc-sections + +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d + +MAKEDEPEND = $(CPP) $(DEPFLAGS) $(CPPFLAGS) $< \ + | sed -n 's,^\# *[0-9][0-9]* *"\([^"<]*\)".*,$@: \1\n\1:,p' \ + | sort -u > $*.d + +SRC_FILES = main.c asdf.c asdf_modifiers.c asdf_repeat.c asdf_keymaps.c asdf_buffer.c asdf_arch.c +OBJ_FILES := $(SRC_FILES:.c=.o) +DEP_FILES := $(SRC_FILES:%.c=$(DEP_DIR)/%.d) +MAP_FILE = $(TARGET).map + +CLEAN_FILES += $(MAP_FILE) + +CLEAN_FILES += $(TARGET_BIN) +CLEAN_FILES += $(TARGET_MAP) +CLEANALL_FILES += $(TARGET_HEX) + +MAKEFILES = Makefile +GENERATED_FILES = conventions.h machine.h +ALL_FILES = $(MAKEFILES) $(SRC_FILES) $(TXTFILES) $(GENERATED_FILES) + +.SUFFIXES: +.SUFFIXES: .c .o .bin .hex + + +all: $(TARGET_HEX) + +%.d : %.c $(DEP_DIR)/%.d | $(DEP_DIR) + @$(MAKEDEPEND) + +$(DEP_DIR): ; @mkdir -p $@ + +$(DEPFILES): + +include $(wildcard $(DEPFILES)) + +%.o: %.c $(DEP_DIR)/%.d | $(DEP_DIR) + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEPFLAGS) $< + +asdf_keymaps.h: $(KEYMAPS_DIR)/asdf_keymaps_$(KEYMAP).h $(KEYMAP_H_TOKEN) + cp $< $@ +GENERATED_FILES += asdf_keymaps.h + + +asdf_arch.c: $(ARCH_DIR)/asdf_arch_$(ARCH).c $(ARCH_C_TOKEN) + cp $< $@ +GENERATED_FILES += asdf_arch.c + + +asdf_arch.h: $(ARCH_DIR)/asdf_arch_$(ARCH).h $(ARCH_H_TOKEN) + cp $< $@ +GENERATED_FILES += asdf_arch.h + +$(ARCH_H_TOKEN): + touch $@ + +$(ARCH_C_TOKEN): + touch $@ + +$(KEYMAP_H_TOKEN): + touch $@ + +size: + $(SIZE_COMMAND) $(TARGET_BIN) + +$(TARGET_HEX): $(TARGET_BIN) + avr-objcopy -j .text -j .data -j .fuses -O ihex $< $@ + +$(TARGET_BIN): $(OBJ_FILES) + $(CC) $(CFLAGS) -o $@ $(LDFLAGS) $^ + $(SIZE_COMMAND) $(TARGET_BIN) + +asdf_keymaps.o: asdf_keymaps.c asdf.h asdf_ascii.h asdf_modifiers.h asdf_arch.h asdf_keymaps.h +main.o: main.c asdf.h asdf_arch.h +asdf.o: asdf.c asdf.h asdf_arch.h asdf_keymaps.h asdf_config.h +asdf_repeat.o: asdf_repeat.c asdf_repeat.h asdf_config.h +asdf_buffer.o: asdf_buffer.c asdf.h asdf_config.h +asdf_modifiers.o: asdf_modifiers.c asdf_modifiers.h + +tags: $(SRC_FILES) + etags $(SRC_FILES) + +CLEAN_FILES += $(TEST_BUILD_FILES) _Arch_* *.o +CLEAN_FILES += ~* *\# + +CLEANALL_FILES += $(GENERATED_FILES) $(TARGET_BUILD_FILES) $(TEST_BUILD_FILES) + +.PHONY: clean +clean: + rm -f $(CLEAN_FILES) + +.PHONY: cleanall +cleanall: + rm -f $(CLEAN_FILES) $(CLEANALL_FILES) + + diff --git a/firmware/asdf/src/Makefile.deps b/firmware/asdf/src/Makefile.deps new file mode 100644 index 0000000..d841704 --- /dev/null +++ b/firmware/asdf/src/Makefile.deps @@ -0,0 +1,21 @@ +# -*- makefile -*- + +DEP_DIR := .deps + +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.d + +MAKEDEPEND = $(CPP) $(DEPFLAGS) $(CPPFLAGS) $< \ + | sed -n 's,^\# *[0-9][0-9]* *"\([^"<]*\)".*,$@: \1\n\1:,p' \ + | sort -u > $*.d + + +%.d : %.c $(DEP_DIR)/%.d | $(DEPDIR) + @$(MAKEDEPEND) + +$(DEP_DIR): ; @mkdir -p $@ + +DEPFILES := $(SRC_FILES:%.c=$(DEP_DIR)/%.d) + +$(DEPFILES): + +include $(wildcard $(DEPFILES)) diff --git a/firmware/asdf/src/Makefile.test b/firmware/asdf/src/Makefile.test new file mode 100644 index 0000000..c133407 --- /dev/null +++ b/firmware/asdf/src/Makefile.test @@ -0,0 +1,155 @@ +ARCH = test +ARCH = test +KEYMAP = test + +ARCH_TOKEN = _Arch_$(ARCH) + +TEST_DIR = ../test +UNITY_DIR = $(TEST_DIR)/unity +BUILD_DIR = ../build +UNITY_SCRIPTS = $(UNITY_DIR)/auto +ARCH_DIR = ./Arch +KEYMAPS_DIR = ./Keymaps + +CC = gcc +VERSION = +RELEASE= + +CLEAN_FILES = +CLEANALL_FILES = + +CFLAGS=-std=c99 +CFLAGS += -Wall +CFLAGS += -Wextra +CFLAGS += -Wpointer-arith +CFLAGS += -Wcast-align +CFLAGS += -Wwrite-strings +CFLAGS += -Wswitch-default +CFLAGS += -Wunreachable-code +CFLAGS += -Winit-self +CFLAGS += -Wmissing-field-initializers +CFLAGS += -Wno-unknown-pragmas +CFLAGS += -Wstrict-prototypes +CFLAGS += -Wundef +CFLAGS += -Wold-style-definition + +SRC_FILES = main.c asdf.c asdf_modifiers.c asdf_repeat.c asdf_keymaps.c asdf_buffer.c asdf_arch.c +OBJ_FILES = $(SRC_FILES:.c=.o) + + +ARCH_FILES = asdf_arch.c asdf_arch.h +CLEAN_FILES += ARCH_FILES + +TESTS = repeat modifiers keymaps interface keyscan + +TEST1 = asdf_repeat +TEST1_SRC = $(TEST_DIR)/test_$(TEST1).c +TEST1_DEPS = ./$(TEST1).c $(UNITY_DIR)/unity.c +TEST1_BUILD = $(BUILD_DIR)/test_$(TEST1) + +TEST2 = asdf_modifiers +TEST2_SRC = $(TEST_DIR)/test_$(TEST2).c +TEST2_DEPS = ./$(TEST2).c $(UNITY_DIR)/unity.c +TEST2_BUILD = $(BUILD_DIR)/test_$(TEST2) + +TEST3 = asdf_keymaps +TEST3_SRC = $(TEST_DIR)/test_$(TEST3).c +TEST3_DEPS = ./$(TEST3).c $(UNITY_DIR)/unity.c +TEST3_BUILD = $(BUILD_DIR)/test_$(TEST3) + +TEST4 = asdf_buffer +TEST4_SRC = $(TEST_DIR)/test_$(TEST4).c +TEST4_DEPS = ./$(TEST4).c $(UNITY_DIR)/unity.c +TEST4_BUILD = $(BUILD_DIR)/test_$(TEST4) + +TEST5 = asdf +TEST5_SRC = $(TEST_DIR)/test_$(TEST5).c +TEST5_DEPS = ./$(TEST5).c $(UNITY_DIR)/unity.c ./$(TEST1).c $(TEST2).c $(TEST3).c $(TEST4).c +TEST5_BUILD = $(BUILD_DIR)/test_$(TEST5) + +.SUFFIXES: +.SUFFIXES: .c .o .bin .hex + +%.o: %.c + $(TARGET_CC) -c $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $< + +all: test + +asdf_keymaps.h: Keymaps/asdf_keymaps_$(KEYMAP).h + cp $< $@ +GENERATED_FILES += asdf_keymaps.h + + +asdf_arch.c: $(ARCH_DIR)/asdf_arch_$(ARCH).c _Arch_$(ARCH) + cp $< $@ +GENERATED_FILES += asdf_arch.c + + +asdf_arch.h: $(ARCH_DIR)/asdf_arch_$(ARCH).h _Arch_$(ARCH) + cp $< $@ +GENERATED_FILES += asdf_arch.h + +$(ARCH_TOKEN): + touch $(ARCH_TOKEN) + +asdf_keymaps.c: asdf.h asdf_ascii.h asdf_modifiers.h asdf_arch.h asdf_keymaps.h + +tags: $(SRC_FILES) + etags $(SRC_FILES) + +.PHONY: test +test: test1 test2 test3 test4 test5 + +.PHONY: test1 +test1: $(TEST1_BUILD) + $(TEST1_BUILD) + +.PHONY: test2 +test2: $(TEST2_BUILD) + $(TEST2_BUILD) + +.PHONY: test3 +test3: $(TEST3_BUILD) + $(TEST3_BUILD) + +.PHONY: test4 +test4: $(TEST4_BUILD) + $(TEST4_BUILD) + +.PHONY: test5 +test5: $(TEST5_BUILD) + $(TEST5_BUILD) + + +$(TEST1_BUILD): $(TEST1_SRC) $(TEST1_DEPS) + $(CC) -o $@ -I. -I$(TEST_DIR) -I$(UNITY_DIR) $(CFLAGS) $(TEST1_SRC) $(TEST1_DEPS) + +$(TEST2_BUILD): $(TEST2_SRC) $(TEST2_DEPS) + $(CC) -o $@ -I. -I$(TEST_DIR) -I$(UNITY_DIR) $(CFLAGS) $(TEST2_SRC) $(TEST2_DEPS) + +$(TEST3_BUILD): $(TEST3_SRC) $(TEST3_DEPS) + $(CC) -o $@ -I. -I$(TEST_DIR) -I$(UNITY_DIR) $(CFLAGS) $(TEST3_SRC) $(TEST3_DEPS) + +$(TEST4_BUILD): $(TEST4_SRC) $(TEST4_DEPS) + $(CC) -o $@ -I. -I$(TEST_DIR) -I$(UNITY_DIR) $(CFLAGS) $(TEST4_SRC) $(TEST4_DEPS) + +$(TEST5_BUILD): $(TEST5_SRC) $(TEST5_DEPS) + $(CC) -o $@ -I. -I$(TEST_DIR) -I$(UNITY_DIR) $(CFLAGS) $(TEST5_SRC) $(TEST5_DEPS) + +TEST_BUILD_FILES += $(TEST1_BUILD) $(TEST2_BUILD) $(TEST3_BUILD) $(TEST4_BUILD) $(TEST5_BUILD) + +CLEAN_FILES += $(TEST_BUILD_FILES) _Arch_* *.o +CLEAN_FILES += ~* *\# + +CLEANALL_FILES += $(GENERATED_FILES) $(TARGET_BUILD_FILES) $(TEST_BUILD_FILES) + +.PHONY: clean +clean: + rm -f $(CLEAN_FILES) + +.PHONY: cleanall +cleanall: + rm -f $(CLEAN_FILES) $(CLEANALL_FILES) + + +include Makefile.deps diff --git a/firmware/asdf/src/Templates/template.c b/firmware/asdf/src/Templates/template.c new file mode 100644 index 0000000..01d79b5 --- /dev/null +++ b/firmware/asdf/src/Templates/template.c @@ -0,0 +1,125 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// .c +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// + + +//iring Information: +// Chip: {Microcontroller type and version} +// +// Example: +// PIN NAME FUNCTION +// 3 AN1 ADC INPUT: Line sense analog input +// +// 6 A4 INPUT: (T0CK) COUNT DOWN from quadrature decoder. +// configured to count on rising edge, synced with xtal +// + + +// +// Headers +// + +#include + + + +// +// Global Variable declarations: Use very sparingly. Used for communication +// with ISR's. Exceptions should be documented. +// + +// Examples: + +// run_clock_thread (global uns 8) when this is set to TRUE (by the +// clock_tick() ISR every 20 ms), the main loop performs certain +// actions, and resets the value to FALSE (see main loop comments) +// +uint8 send_count = FALSE; + + +// +// ISR routines +// + +// PROCEDURE: +// INPUTS: +// OUTPUTS: +// +// DESCRIPTION: +// +// SIDE EFFECTS: +// +// NOTES: +// +// COMPLEXITY: +// + +// +// Regular functions +// + +// PROCEDURE: +// INPUTS: +// OUTPUTS: +// +// DESCRIPTION: +// +// SIDE EFFECTS: +// +// NOTES: +// +// SCOPE: +// +// COMPLEXITY: +// + + + + + +// PROCEDURE: main() +// +// Main program loop; invoked at processor startup. +// + +main() +{ + // INITIALIZATION SECTION + +cold_start: + + + // re-initialize variables and re-enter control loop, when the "R" command + // is received + + warm_start: + + // END OF INITIALIZATION SECTION + + // Main Section: + +} + + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/Templates/template.h b/firmware/asdf/src/Templates/template.h new file mode 100644 index 0000000..ae5d32c --- /dev/null +++ b/firmware/asdf/src/Templates/template.h @@ -0,0 +1,41 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// .h +// +// Copyright 2019 David Fenyes +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// + +#if !defined (FILENAME_H) +#define FILENAME_H + +// +// Headers +// + + + +// +// Device and peripheral definitions, comments should include use of devices. +// Please +// + +#endif /* !defined (FILENAME_H) */ + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/_clang-format b/firmware/asdf/src/_clang-format new file mode 100644 index 0000000..878ce29 --- /dev/null +++ b/firmware/asdf/src/_clang-format @@ -0,0 +1,46 @@ +--- +BasedOnStyle: Mozilla +AlignAfterOpenBracket: Align +AlignOperands: 'true' +AlignTrailingComments: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AllowShortBlocksOnASingleLine: 'false' +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: 'false' +AllowShortLoopsOnASingleLine: 'true' +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'true' +BinPackArguments: 'true' +BinPackParameters: 'true' +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Stroustrup +ColumnLimit: '100' +ConstructorInitializerIndentWidth: '2' +ContinuationIndentWidth: '2' +DerivePointerAlignment: 'false' +DisableFormat: 'false' +IncludeBlocks: Preserve +IndentCaseLabels: 'true' +IndentPPDirectives: None +IndentWidth: '2' +IndentWrappedFunctionNames: 'false' +KeepEmptyLinesAtTheStartOfBlocks: 'true' +Language: Cpp +MaxEmptyLinesToKeep: '2' +PointerAlignment: Right +ReflowComments: 'true' +SortIncludes: 'false' +SpaceAfterCStyleCast: 'true' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: 'false' +SpacesBeforeTrailingComments: '1' +SpacesInCStyleCastParentheses: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' +TabWidth: '8' +UseTab: Never + +... diff --git a/firmware/asdf/src/asdf.c b/firmware/asdf/src/asdf.c new file mode 100644 index 0000000..ef20650 --- /dev/null +++ b/firmware/asdf/src/asdf.c @@ -0,0 +1,450 @@ +// File recommented by recomment.cpp +// on Dec 9 2019 at 10:14:05. +// +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF firmware - small, fast, and simple keyboard encoder. +// +// asdf.c +// +// This file contains code for: +// - the main scan code and key handler routines +// - key matrix declarations and keyboard state variables not delegated +// elsewhere. +// - Key debouncing logic and data stuctures +// - dispatch of special functions bound to keys. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#include +#include "asdf.h" +#include "asdf_ascii.h" +#include "asdf_keymaps.h" +#include "asdf_repeat.h" +#include "asdf_modifiers.h" +#include "asdf_buffer.h" +#include "asdf_arch.h" + +static asdf_cols_t last_stable_key_state[ASDF_NUM_ROWS]; + +// Each key is debounced separately, supporting true N-key rollover, allowing a +// new key to be pressed when the previously pressed key is still debouncing. +// This requires a debounce counter for each key. This is is a large RAM +// footprint, 64 bytes for an 8 x 8 key matrix. It would be possible to only +// debounce the most recently pressed key and reduce the RAM usage to a single +// debounce counuter. However, this would probably require different handling of +// key presses and releases, and special handling for modifier keys, perhaps +// including separate debounce logic in the handlers for toggle keys such as +// CAPS_LOCK. +static uint8_t debounce_counters[ASDF_NUM_ROWS][ASDF_NUM_COLS]; + +// store the last key pressed +static asdf_keycode_t last_key; + +// handle for the char output buffer +static asdf_buffer_handle_t asdf_keycode_buffer; + + +// PROCEDURE: asdf_put_code +// INPUTS: (asdf_keycode_t) code: code to be buffered for output +// OUTPUTS: none +// +// DESCRIPTION: Takes a keycode argument and buffers for output. +// +// SIDE EFFECTS: modifies buffer state. +// +// NOTES: If buffer is full, silently drop the code. +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +void asdf_put_code(asdf_keycode_t code) +{ + asdf_buffer_put(asdf_keycode_buffer, code); +} + +// PROCEDURE: asdf_get_code +// INPUTS: none +// OUTPUTS: (asdf_keycode_t) returns next value in buffer. +// +// DESCRIPTION: Takes a keycode argument and buffers for output. +// +// SIDE EFFECTS: modifies buffer state. +// +// NOTES: If buffer is full, silently drop the code. +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +asdf_keycode_t asdf_get_code(void) +{ + return asdf_buffer_get(asdf_keycode_buffer); +} + +// PROCEDURE: asdf_lookup_keycode +// INPUTS: row, col: specify a row and column in the keyboard matrix +// OUTPUTS: returns a keycode +// +// DESCRIPTION: Given a row and column in the keyboard matrix, returns the +// corresponding keycode, depending on the state of the modifier keys. +// +// SIDE EFFECTS: none +// +// NOTES: +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +asdf_keycode_t asdf_lookup_keycode(uint8_t row, uint8_t col) +{ + return asdf_keymaps_get_code(row, col, asdf_modifier_index()); +} + +// PROCEDURE: asdf_activate_action +// INPUTS: keycode: an action key code +// OUTPUTS: none +// +// DESCRIPTION: This routine is called when a key bound to an action code is +// pressed, and maps the action code to a function call, or other action +// appropriate for activation of the function. +// +// SIDE EFFECTS: All the actions may have side effects, depending on the function called. +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_activate_action(action_t keycode) +{ + switch (keycode) { + case ACTION_SHIFT: { + asdf_modifier_shift_activate(); + break; + } + case ACTION_SHIFT_LOCK: { + asdf_modifier_shiftlock_activate(); + break; + } + case ACTION_CAPS: { + asdf_modifier_capslock_activate(); + break; + } + case ACTION_CTRL: { + asdf_modifier_ctrl_activate(); + break; + } + case ACTION_REPEAT: { + asdf_repeat_activate(); + break; + } + case ACTION_NOTHING: + case ACTION_LOCAL: + case ACTION_BREAK: + case ACTION_HERE_IS: + case ACTION_FN_1: + case ACTION_FN_2: + case ACTION_FN_3: + case ACTION_FN_4: + case ACTION_FN_5: + case ACTION_FN_6: + case ACTION_FN_7: + case ACTION_FN_8: + case ACTION_FN_9: + case ACTION_FN_10: + case ACTION_CLEAR: + default: break; + } +} + +// PROCEDURE: asdf_deactivate_action +// INPUTS: keycode: an action key code +// OUTPUTS: none +// +// DESCRIPTION: This routine is called when a key bound to an action code is +// released, and maps the action code to a function call, or other action +// appropriate for deactivation of the function. +// +// SIDE EFFECTS: All the actions may have side effects, depending on the function called. +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +static void asdf_deactivate_action(action_t keycode) +{ + switch (keycode) { + case ACTION_SHIFT: { + asdf_modifier_shift_deactivate(); + break; + } + case ACTION_SHIFT_LOCK: { + asdf_modifier_shiftlock_deactivate(); + break; + } + case ACTION_CAPS: { + asdf_modifier_capslock_deactivate(); + break; + } + + case ACTION_CTRL: { + asdf_modifier_ctrl_deactivate(); + break; + } + case ACTION_REPEAT: { + asdf_repeat_deactivate(); + } + case ACTION_NOTHING: + case ACTION_LOCAL: + case ACTION_BREAK: + case ACTION_HERE_IS: + case ACTION_FN_1: + case ACTION_FN_2: + case ACTION_FN_3: + case ACTION_FN_4: + case ACTION_FN_5: + case ACTION_FN_6: + case ACTION_FN_7: + case ACTION_FN_8: + case ACTION_FN_9: + case ACTION_FN_10: + case ACTION_CLEAR: + default: break; + } +} + +// PROCEDURE: asdf_activate_key +// INPUTS: keycode - the code for a key that has been pressed. +// OUTPUTS: none +// +// DESCRIPTION: Called when a key has been pressed. If the key is bound to a +// value, output the value. If the key is bound to an action, call the activate action +// handler with the keycode. +// +// SIDE EFFECTS: If the code is a value, the last key is updated to the current +// value, and repeat timer is reset. If the code is an action code, the activate +// action dispatcher produces side effects. See asdf_activate_action() +// +// SCOPE: private +// +// COMPLEXITY: 2 +// +static void asdf_activate_key(asdf_keycode_t keycode) +{ + if (keycode & ASDF_ACTION) { + asdf_activate_action((action_t) keycode); + } + else { + + // activate a new codable keypress + asdf_put_code(keycode); + if (last_key != keycode) { + last_key = keycode; + asdf_repeat_reset_count(); + } + } +} + +// PROCEDURE: asdf_deactivate_key +// INPUTS: keycode - the code for a key that has been released +// OUTPUTS: none +// +// DESCRIPTION: Called when a key has been released. If the key is bound to a +// value, output the value. If the key is bound to an action, call the deactivate +// action handler with the keycode. +// +// SIDE EFFECTS: If the code is a value, the last key is set to ACTION_NOTHING, +// which is effectively a NOP. If the code is an action code, the deactivate action +// dispatcher produces side effects. See asdf_deactivate_action() +// +// SCOPE: private +// +// COMPLEXITY: 2 +// +static void asdf_deactivate_key(asdf_keycode_t keycode) +{ + if (keycode & ASDF_ACTION) { + asdf_deactivate_action((action_t) keycode); + } + else { + + // deactivate a released keypress + if (last_key == keycode) { + last_key = ACTION_NOTHING; + } + } +} + +// PROCEDURE: asdf_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Reserve an output buffer to hold keycodes to be sent, and +// initialize the keyboard state and debounce counters +// +// SIDE EFFECTS: see DESCRIPTION +// +// SCOPE: public +// +// COMPLEXITY: 3 +// +void asdf_init(void) +{ + + last_key = ACTION_NOTHING; + + asdf_modifiers_init(); + asdf_repeat_init(); + asdf_keymaps_init(); + asdf_buffer_init(); + + // reserve a buffer: + asdf_keycode_buffer = asdf_buffer_new(ASDF_KEYCODE_BUFFER_SIZE); + + for (uint8_t row = 0; row < ASDF_NUM_ROWS; row++) { + last_stable_key_state[row] = 0; + for (uint8_t col = 0; col < ASDF_NUM_COLS; col++) { + debounce_counters[row][col] = ASDF_DEBOUNCE_TIME_MS; + } + } +} + +// PROCEDURE: asdf_handle_key_press_or_release +// INPUTS: row, col: the row and column number of the key that has changed. +// OUTPUTS: none +// +// DESCRIPTION: Given a row and column of a key that has changed: +// +// 1) Debounce the key by decrementing a debounce timer. If not yet debounced, +// return. +// 2) When the key is debounced, if the key is pressed, then call the activation +// function associated with the key. Otherwise, if the key is released, call +// the deactivation function for the key. +// +// SIDE EFFECTS: - Modifies debounce counter for the row and column +// - After key debounces, modifies the table of stable key states +// - Activate/deactivate functions have side effects +// +// NOTES: +// +// SCOPE: private +// +// COMPLEXITY: 3 +// +static void asdf_handle_key_press_or_release(uint8_t row, uint8_t col, uint8_t key_was_pressed) +{ + uint8_t *debounce_count = &debounce_counters[row][col]; + + if (!(--(*debounce_count))) { + + // debounce timed out. Set new stable state and activate or + + // deactivate key. + *debounce_count = ASDF_DEBOUNCE_TIME_MS; + if (key_was_pressed) { + last_stable_key_state[row] |= 1 << col; + asdf_activate_key(asdf_lookup_keycode(row, col)); + } + else { + // key was released + + last_stable_key_state[row] &= ~(1 << col); + asdf_deactivate_key(asdf_lookup_keycode(row, col)); + } + } +} + +// PROCEDURE: asdf_handle_key_held_pressed +// INPUTS: row, col: The row and column of a key that is being held down +// OUTPUTS: none +// +// DESCRIPTION: Given a row and column of a key that has been debounced and +// continues to be pressed: +// 1) Determine if this is the last key pressed. +// 2) If it's the most recent key, then check to see if it's time to repeat the key code. +// 3) If it's time to repeat, then do the repeat and reset the repeat timer. +// +// SIDE EFFECTS: +// - Causes repeat timer to tick, and may reset the repeat timer. +// - activate_key() will send a key code. +// +// NOTES: last_key is always a key code, never an action function, so only valid +// key codes will be repeated. +// +// SCOPE: private +// +// COMPLEXITY: 3 +// +static void asdf_handle_key_held_pressed(uint8_t row, uint8_t col) +{ + if (asdf_lookup_keycode(row, col) == last_key) { + + // if last debounced code-producing key is still pressed, handle repeat + if (asdf_repeat()) { + asdf_activate_key(last_key); + } + } +} + +// PROCEDURE: asdf_keyscan +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Scans the key matrix. For each row, read the columns and compare +// with last stable state. For each changed key, call a key-change handler +// function. For each stable pressed key, call a "continued press" handler +// function. +// +// SIDE EFFECTS: +// +// NOTES: 1) The keyboard state is stored as an array of words, with one word +// per row, and each bit in a word representing one key in the row. +// +// 2) While it is tempting to use bit hacks to reduce the number of +// cycles through the inner loop, I have opted to just loop over all +// the bits (as long as there are some changed or pressed keys). For +// an 8-bit word, bit tricks don't deliver much performance boost, +// but do decrease code clarity. +// +// COMPLEXITY: 5 +// +void asdf_keyscan(void) +{ + for (uint8_t row = 0; row < ASDF_NUM_ROWS; row++) { + asdf_cols_t row_key_state = asdf_arch_read_row(row); + asdf_cols_t changed = row_key_state ^ last_stable_key_state[row]; + + // loop over the bits until all changed or pressed keys in the row are handled. + for (uint8_t col = 0; (changed | row_key_state) && col < ASDF_NUM_COLS; col++) { + if (changed & 1) { + // key state is different from last stable state + asdf_handle_key_press_or_release(row, col, row_key_state & 1); + } + else if (row_key_state & 1) { + asdf_handle_key_held_pressed(row, col); + } + changed >>= 1; + row_key_state >>= 1; + } + } +} + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/asdf.h b/firmware/asdf/src/asdf.h new file mode 100644 index 0000000..e7f58cc --- /dev/null +++ b/firmware/asdf/src/asdf.h @@ -0,0 +1,100 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf.h +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// + +#if !defined(ASDF_H) +#define ASDF_H + +#define ASDF_NUM_ROWS 8 +#define ASDF_NUM_COLS 8 +#define ASDF_ACTION 0x80 +#define ASDF_INVALID_CODE 0x80 +// an action code is not a valid keycode. + +// for efficiency on 8-bit machines, use 8 columns per row. For 16 columns per +// row, change cols_t to uint16_t and increase ASDF_NUM_COLS. +typedef uint8_t asdf_cols_t; + +// ASCII keycodes are 7 bits. An 8-bit datatype encodes ASCII, plus a flag for a +// key function. For longer codes, such as extended ASCII or unicode, change +// keycode_t appropriately, and also change ASDF_ACTION so that the action key +// codes (enumerated in action_t) do not conflict with the encoding scheme. +typedef uint8_t asdf_keycode_t; + +typedef enum { + ACTION_NOTHING = ASDF_ACTION, + ACTION_SHIFT = ASDF_ACTION + 0x01, + ACTION_SHIFT_LOCK = ASDF_ACTION + 0x02, + ACTION_CAPS = ASDF_ACTION + 0x03, + ACTION_CTRL = ASDF_ACTION + 0x04, + ACTION_REPEAT = ASDF_ACTION + 0x05, + ACTION_LOCAL = ASDF_ACTION + 0x06, + ACTION_BREAK = ASDF_ACTION + 0x07, + ACTION_HERE_IS = ASDF_ACTION + 0x08, + ACTION_CLEAR = ASDF_ACTION + 0x09, + ACTION_FN_1 = ASDF_ACTION + 0x11, + ACTION_FN_2 = ASDF_ACTION + 0x12, + ACTION_FN_3 = ASDF_ACTION + 0x13, + ACTION_FN_4 = ASDF_ACTION + 0x14, + ACTION_FN_5 = ASDF_ACTION + 0x15, + ACTION_FN_6 = ASDF_ACTION + 0x16, + ACTION_FN_7 = ASDF_ACTION + 0x17, + ACTION_FN_8 = ASDF_ACTION + 0x18, + ACTION_FN_9 = ASDF_ACTION + 0x19, + ACTION_FN_10 = ASDF_ACTION + 0x1a +} action_t; + + +// PROCEDURE: asdf_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: initialize the keyboard state and debounce counters +void asdf_init(void); + +// PROCEDURE: asdf_keyscan +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Scans the key matrix. For each row, read the columns and compare +// with last stable state. For each changed key, call a key-change handler +// function. For each stable pressed key, call a "continued press" handler +// function. +void asdf_keyscan(void); + +// PROCEDURE: asdf_put_code +// INPUTS: (asdf_keycode_t) code: code to be buffered for output +// OUTPUTS: none +// DESCRIPTION: Takes a keycode argument and buffers for output. +// NOTES: If buffer is full, silently drop the code. +void asdf_put_code(asdf_keycode_t code); + +// PROCEDURE: asdf_get_code +// INPUTS: none +// OUTPUTS: (asdf_keycode_t) returns next value in buffer. +// DESCRIPTION: Takes a keycode argument and buffers for output. +asdf_keycode_t asdf_get_code(void); + +#endif // !defined (ASDF_H) + + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/asdf_ascii.h b/firmware/asdf/src/asdf_ascii.h new file mode 100644 index 0000000..b3c6f0a --- /dev/null +++ b/firmware/asdf/src/asdf_ascii.h @@ -0,0 +1,90 @@ +// File recommented by recomment.cpp +// on Dec 9 2019 at 10:14:05. +// +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_ascii.h +// +// This file contains definitions of ASCII control cods and certain symbols, in +// order to avoid escaping special characters in the keymap definitions, and to +// improve keymap readability. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// + +#if !defined(ASDF_ASCII_H) +#define ASDF_ASCII_H + +typedef enum { + ASCII_CTRL_A = 0x01, + ASCII_CTRL_B = 0x02, + ASCII_CTRL_C = 0x03, + ASCII_CTRL_D = 0x04, + ASCII_CTRL_E = 0x05, + ASCII_CTRL_F = 0x06, + ASCII_CTRL_G = 0x07, + ASCII_CTRL_H = 0x08, + ASCII_CTRL_I = 0x09, + ASCII_CTRL_J = 0x0a, + ASCII_CTRL_K = 0x0b, + ASCII_CTRL_L = 0x0c, + ASCII_CTRL_M = 0x0d, + ASCII_CTRL_N = 0x0e, + ASCII_CTRL_O = 0x0f, + ASCII_CTRL_P = 0x10, + ASCII_CTRL_Q = 0x11, + ASCII_CTRL_R = 0x12, + ASCII_CTRL_S = 0x13, + ASCII_CTRL_T = 0x14, + ASCII_CTRL_U = 0x15, + ASCII_CTRL_V = 0x16, + ASCII_CTRL_W = 0x17, + ASCII_CTRL_X = 0x18, + ASCII_CTRL_Y = 0x19, + ASCII_CTRL_Z = 0x1a, + ASCII_ESC = 0x1b, + + ASCII_SPACE = 0x20, + ASCII_AT = 0x40, + ASCII_COMMA = 0x44, + ASCII_LT_CURLY_BRACE = 0x7b, + ASCII_RT_CURLY_BRACE = 0x7d, + ASCII_LT_SQUARE_BRACE = 0x5b, + ASCII_RT_SQUARE_BRACE = 0x5d, + ASCII_LT_PAREN = 0x28, + ASCII_RT_PAREN = 0x29, + ASCII_SINGLE_QUOTE = 0x27, + ASCII_DOUBLE_QUOTE = 0x22, + ASCII_BACKSLASH = 0x5c, + ASCII_GRAVE_ACCENT = 0x60, + ASCII_PERIOD = 0x2e, + ASCII_TILDE = 0x7e, + ASCII_VERT_BAR = 0x7c, + ASCII_DEL = 0x7f +} ascii; + +#define ASCII_LF ASCII_CTRL_J +#define ASCII_CR ASCII_CTRL_M +#define ASCII_TAB ASCII_CTRL_I + +#endif // !defined (ASDF_ASCII_H) + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/asdf_buffer.c b/firmware/asdf/src/asdf_buffer.c new file mode 100644 index 0000000..40f7ab5 --- /dev/null +++ b/firmware/asdf/src/asdf_buffer.c @@ -0,0 +1,183 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_buffer.c +// +// Provides an interface between the generation of keycodes and the +// hardware-level keycode transmission. Any buffering, etcc. occurs here. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + + +#include +#include +#include "asdf.h" +#include "asdf_buffer.h" + +typedef struct { + asdf_keycode_t *buf; + int16_t size; + uint8_t head; + uint8_t tail; + uint8_t count; +} asdf_buffer_t; + + +static asdf_keycode_t buffer_pool[ASDF_BUFFER_POOL_SIZE]; +static asdf_buffer_t buffers[ASDF_BUFFER_NUM_HANDLES]; + +static int16_t buffer_free; +static asdf_buffer_handle_t next_handle; + + +// PROCEDURE: asdf_buffer_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Initialize the buffer pool and handles +// +// SIDE EFFECTS: See description +// +// NOTES: +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +void asdf_buffer_init(void) +{ + buffer_free = 0; + next_handle = 0; +} + +// PROCEDURE: buffer_handle_valid +// INPUTS: (uint8_t) handle - handle to be checked +// OUTPUTS: returns TRUE if the handle is a valid allocated handle. +// +// DESCRIPTION: Returns TRUE if the handle is one that has been allocated. +// +// SIDE EFFECTS: none +// +// NOTES: +// +// SCOPE: private +// +// COMPLEXITY: 1 +// +uint8_t buffer_handle_valid(asdf_buffer_handle_t handle) +{ + return ((handle >= 0) && (handle < next_handle)); +} + +// PROCEDURE: asdf_buffer_new +// INPUTS: (uint16_t) size: size of the buffer to allocate. +// +// OUTPUTS: returns a uint8_t handle to identify the buffer allocated from the +// pool. +// +// DESCRIPTION: Receives a request to allocate a fixed-size buffer from the +// pool. If there is enough room in the buffer pool, and if a buffer handle is +// available, then allocate space from the pool, initialize the next available +// buffer struct, and return the handle. +// +// SIDE EFFECTS: see above +// +// SCOPE: public +// +// COMPLEXITY: 3 +// +asdf_buffer_handle_t asdf_buffer_new(int16_t size) +{ + asdf_buffer_handle_t handle = ASDF_BUFFER_INVALID; + + if (next_handle < ASDF_BUFFER_NUM_HANDLES) { + if (size <= (ASDF_BUFFER_POOL_SIZE - buffer_free)) { + handle = next_handle++; + + buffers[handle].size = size; + buffers[handle].buf = &buffer_pool[buffer_free]; + buffers[handle].head = 0; + buffers[handle].tail = 0; + buffers[handle].count = 0; + + buffer_free += size; + } + } + return handle; +} + + +// PROCEDURE: asdf_buffer_put +// +// INPUTS:(asdf_buffer_t) buffer_handle: pointer to the buffer struct. +// (asdf_keycode_t) code: code to be added to the queue. +// +// OUTPUTS: None +// +// DESCRIPTION: Add the keycode to the head of the output buffer. If the buffer +// is full, quietly drop the keycode. +// +// SIDE EFFECTS: See DESCRIPTION +// +// NOTES: +// +// COMPLEXITY: 3 +// +// SCOPE: public +// +void asdf_buffer_put(asdf_buffer_handle_t handle, asdf_keycode_t code) +{ + if (buffer_handle_valid(handle)) { + if (buffers[handle].count < buffers[handle].size) { + buffers[handle].buf[buffers[handle].head] = code; + buffers[handle].head = (buffers[handle].head + 1) % buffers[handle].size; + buffers[handle].count++; + } + } +} + +// PROCEDURE: asdf_buffer_get +// +// INPUTS: None +// +// OUTPUTS: returns next code in the buffer. +// +// DESCRIPTION: Gets the next queued code in the output buffer and return the +// value. +// +// SIDE EFFECTS: Removes a code from the queue. +// +// NOTES: If the buffer is empty, the code ASDF_INVALID_CODE is returned. +// +// COMPLEXITY: 2 +// +// SCOPE: Public +// +asdf_keycode_t asdf_buffer_get(asdf_buffer_handle_t handle) +{ + asdf_keycode_t code = ASDF_INVALID_CODE; + if (buffers[handle].count) { + code = buffers[handle].buf[buffers[handle].tail]; + buffers[handle].tail = (buffers[handle].tail + 1) % buffers[handle].size; + buffers[handle].count--; + } + return code; +} + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/asdf_buffer.h b/firmware/asdf/src/asdf_buffer.h new file mode 100644 index 0000000..56aa4c1 --- /dev/null +++ b/firmware/asdf/src/asdf_buffer.h @@ -0,0 +1,76 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_buffer.h +// +// Contains definitions and prototypes for the asdf keycode output buffer. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// + +#if !defined(ASDF_BUFFER_H) +#define ASDF_BUFFER_H + +#include "asdf_config.h" + +#define ASDF_BUFFER_POOL_SIZE ASDF_KEYCODE_BUFFER_SIZE +#define ASDF_BUFFER_INVALID -1 + +// Setting the number of handles to 1 will work if only one buffer is requrired, +// and will save a few bytes of RAM. But the test code needs at least 2 buffer +// handles to test the module, so we leave it at 2. +#define ASDF_BUFFER_NUM_HANDLES 2 + +typedef int16_t asdf_buffer_handle_t; + +// PROCEDURE: asdf_buffer_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Initialize the buffer pool and handles +void asdf_buffer_init(void); + +// PROCEDURE: asdf_buffer_new +// INPUTS: (uint16_t) size: size of the buffer to allocate. +// OUTPUTS: returns (asdf_buffer_handle_t) handle to identify the buffer allocated from the +// pool. +// DESCRIPTION: Receives a request to allocate a fixed-size buffer from the +// pool. If there is enough room in the buffer pool, and if a buffer handle is +// available, then allocate space from the pool, initialize the next available +// buffer struct, and return the handle. +asdf_buffer_handle_t asdf_buffer_new(int16_t size); + +// PROCEDURE: asdf_buffer_put +// INPUTS:(asdf_buffer_t) buffer_handle: pointer to the buffer struct. +// (asdf_keycode_t) code: code to be added to the queue. +// OUTPUTS: None +// DESCRIPTION: Add the keycode to the head of the output buffer. If the buffer +// is full, quietly drop the keycode. +void asdf_buffer_put(asdf_buffer_handle_t handle, asdf_keycode_t code); + +// PROCEDURE: asdf_buffer_get +// INPUTS: None +// OUTPUTS: returns next code in the buffer. +// DESCRIPTION: Gets the next queued code in the output buffer and return the +// value. +asdf_keycode_t asdf_buffer_get(asdf_buffer_handle_t handle); + +#endif // !defined (ASDF_BUFFER_H) + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/asdf_config.h b/firmware/asdf/src/asdf_config.h new file mode 100644 index 0000000..be96b00 --- /dev/null +++ b/firmware/asdf/src/asdf_config.h @@ -0,0 +1,54 @@ +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_config.h +// +// This file gathers configuration parameters related to the user-detectable +// keyboard experience. For example, put key debounce times, repeat rates, +// buffer sized, baud rates, etc. here. Details such as processor clock speed, +// etc. should go in the architecture-dependent files. System details such as +// number of buffer handles, etc. should go with the appropriate module, but +// certain buffer sized may go here if they can affect the user experience (such +// as how long a macro can be). +// +// Copyright 2019 David Fenyes +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// + +#if !defined (CONFIG_H) +#define CONFIG_H + +// size of the keycode output buffer. +#define ASDF_KEYCODE_BUFFER_SIZE 16 + +// key debounce period (in msec) +#define ASDF_DEBOUNCE_TIME_MS 10 + +// Autorepeat default behavior. Set to REPEAT_AUTO for default autorepeat. +// Set to REPEAT_OFF for default no autorepeat by default. +#define ASDF_DEFAULT_REPEAT_STATE REPEAT_AUTO + +// time to hold down a key in milliseconds before autorepeat starts +#define ASDF_AUTOREPEAT_TIME_MS 525 // 525 msec. + +// time between repeats of a character with repeat key held, or in autorepeat (milliseconds) +#define ASDF_REPEAT_TIME_MS (1000 / 15) // l5 characters per sec. + +#endif /* !defined (CONFIG_H) */ + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. + diff --git a/firmware/asdf/src/asdf_keymaps.c b/firmware/asdf/src/asdf_keymaps.c new file mode 100644 index 0000000..4cbc8bf --- /dev/null +++ b/firmware/asdf/src/asdf_keymaps.c @@ -0,0 +1,82 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_keymaps.c +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#include +#include "asdf.h" +#include "asdf_arch.h" +#include "asdf_keymaps.h" + +typedef asdf_keycode_t keycode_matrix_t[ASDF_NUM_ROWS][ASDF_NUM_COLS]; + +static const FLASH keycode_matrix_t plain_matrix = ASCII_PLAIN_MAP; +static const FLASH keycode_matrix_t shift_matrix = ASCII_SHIFT_MAP; +static const FLASH keycode_matrix_t caps_matrix = ASCII_CAPS_MAP; +static const FLASH keycode_matrix_t ctrl_matrix = ASCII_CTRL_MAP; + +static keycode_matrix_t const *modifier_matrix[MOD_NUM_MAPS]; + + +// PROCEDURE: asdf_keymaps_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Assigns the keymaps to the indices specified by the modifier +// index, to avoid hard-coding constant index values. +// +// SIDE EFFECTS: builds up the private map table. +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +void asdf_keymaps_init(void) +{ + modifier_matrix[MOD_PLAIN_MAP] = &plain_matrix; + modifier_matrix[MOD_SHIFT_MAP] = &shift_matrix; + modifier_matrix[MOD_CAPS_MAP] = &caps_matrix; + modifier_matrix[MOD_CTRL_MAP] = &ctrl_matrix; +} + +// PROCEDURE: asdf_keymaps_get_code +// INPUTS: row, col: row and column of key that has been pressed +// modifiers_index: index into the keymap array, based on modifier state +// OUTPUTS: returns a key code. +// +// DESCRIPTION: Given a key row and column, and an index based on modifier +// state, return the appropriate keycode. +// +// SIDE EFFECTS: none +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +asdf_keycode_t asdf_keymaps_get_code(const uint8_t row, const uint8_t col, + const uint8_t modifier_index) +{ + const keycode_matrix_t *matrix = modifier_matrix[modifier_index]; + + return FLASH_READ_MATRIX_ELEMENT(*matrix, row, col); +} + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/asdf_modifiers.c b/firmware/asdf/src/asdf_modifiers.c new file mode 100644 index 0000000..7e930b6 --- /dev/null +++ b/firmware/asdf/src/asdf_modifiers.c @@ -0,0 +1,220 @@ +// File recommented by recomment.cpp +// on Dec 9 2019 at 10:14:05. +// +// -*-mode : C; +// tab - width : 2; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_modifiers.c +// +// This file contains the logic for the modifier keys. Any new modifiers or +// special handling goes here. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#include +#include "asdf_modifiers.h" + +static shift_state_t shift_state; +static caps_state_t caps_state; +static ctrl_state_t ctrl_state; + +static shiftlock_mode_t asdf_toggle_shiftlock; + +static const modifier_index_t modifier_indices[] = { + + MOD_PLAIN_MAP, // 0x00: no modifiers + MOD_SHIFT_MAP, // 0x01: only SHIFT active + MOD_CAPS_MAP, // 0x02: only CAPS active + MOD_SHIFT_MAP, // 0x03: CAPS and SHIFT active + MOD_CTRL_MAP, // CTRL overrides SHIFT and CAPS + MOD_CTRL_MAP, MOD_CTRL_MAP, MOD_CTRL_MAP +}; + +// PROCEDURE: asdf_modifier_shift_activate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: sets SHIFT state to ON +// +// SIDE EFFECTS: see DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_modifier_shift_activate(void) +{ + shift_state = SHIFT_ON_ST; +} + +// PROCEDURE: asdf_modifier_shiftlock_activate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: sets SHIFTLOCK state depending on the mode. +// +// SHIFTLOCK normal mode: +// - SHIFTLOCK always activates shift mode +// - Pressing and Relasing SHIFT deactivates shift mode. +// +// SHIFTLOCK toggle mode: +// - Pressing SHIFTLOCK toggles the shift mode on and off +// - Pressing and Relasing SHIFT deactivates shift mode. +// +// NOTES: The test of the shiftlock mode constant always has the same result and +// will therefore be optimized by the compiler, so technically no added +// cyclometric complexity, but count it anyway, in case this is made into a +// user-definable behavior later. +// +// SIDE EFFECTS: affects shift_state as described. +// +// COMPLEXITY: 2 +// +void asdf_modifier_shiftlock_activate(void) +{ + if (asdf_toggle_shiftlock) { + shift_state ^= SHIFT_LOCKED_ST; + } + else { + shift_state |= SHIFT_LOCKED_ST; + } +} + +// PROCEDURE: asdf_modifier_capslock_activate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Turns on Capslock state +// +// SIDE EFFECTS: see DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_modifier_capslock_activate(void) +{ + caps_state ^= CAPS_ON_ST; +} + +// PROCEDURE: asdf_modifier_ctrl_activate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Turns on CTRL mode +// +// SIDE EFFECTS: see DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_modifier_ctrl_activate(void) +{ + ctrl_state = CTRL_ON_ST; +} + +// PROCEDURE: asdf_modifier_shift_deactivate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Turns off shift mode. +// +// SIDE EFFECTS: See DESCRIPTION +// +// NOTES: this also clears any SHIFT_LOCK condition. +// +// COMPLEXITY: 1 +// +void asdf_modifier_shift_deactivate(void) +{ + shift_state = SHIFT_OFF_ST; +} + +// PROCEDURE: asdf_modifier_ctrl_deactivate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Turns off CTRL mode +// +// SIDE EFFECTS: See DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_modifier_ctrl_deactivate(void) +{ + ctrl_state = CTRL_OFF_ST; +} + +// PROCEDURE: asdf_modifier_shiftlock_deactivate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Does nothing. This is called when releasing the SHIFT LOCK key, +// and no action is performed on releasing a SHIFT LOCK key +// +// SIDE EFFECTS: none +// +// COMPLEXITY: 1 +// +void asdf_modifier_shiftlock_deactivate(void) {} + +// PROCEDURE: asdf_modifier_capslock_deactivate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Does nothing. This is called when releasing the CAPS LOCK key, +// and no action is performed on releasing the CAPS LOCK key. +// +// SIDE EFFECTS: none +// +// COMPLEXITY: 1 +// +void asdf_modifier_capslock_deactivate(void) {} + +// PROCEDURE: asdf_modifiers_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Initialize the modifier key state variables to OFF state +// +// SIDE EFFECTS: see DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_modifiers_init(void) +{ + shift_state = SHIFT_OFF_ST; + caps_state = CAPS_OFF_ST; + ctrl_state = CTRL_OFF_ST; + + asdf_toggle_shiftlock = HOLD_SHIFTLOCK; +} + +// PROCEDURE: asdf_modifier_index +// INPUTS: none +// OUTPUTS: returns uint8_t index into key map, based on modifier key status +// +// DESCRIPTION: See OUTPUTS +// +// SIDE EFFECTS: none +// +// COMPLEXITY: 1 +// +modifier_index_t asdf_modifier_index(void) +{ + return modifier_indices[((uint8_t)(shift_state & 1) // shift active + | ((uint8_t)(shift_state >> 1)) // shiftlock active + | (uint8_t) caps_state // caps active + | (uint8_t) ctrl_state)]; // ctrl active +} diff --git a/firmware/asdf/src/asdf_modifiers.h b/firmware/asdf/src/asdf_modifiers.h new file mode 100644 index 0000000..cc5d8e4 --- /dev/null +++ b/firmware/asdf/src/asdf_modifiers.h @@ -0,0 +1,116 @@ +// File recommented by recomment.cpp +// on Dec 9 2019 at 10:14:05. +// +// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_modifiers.h +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#if !defined(ASDF_MODIFIERS_H) +#define ASDF_MODIFIERS_H + +typedef enum { SHIFT_OFF_ST = 0, SHIFT_ON_ST = 0x01, SHIFT_LOCKED_ST = 0x02 } shift_state_t; +typedef enum { CAPS_OFF_ST = 0, CAPS_ON_ST = 0x02 } caps_state_t; +typedef enum { CTRL_OFF_ST = 0, CTRL_ON_ST = 0x04 } ctrl_state_t; +typedef enum { + MOD_PLAIN_MAP = 0, + MOD_SHIFT_MAP, + MOD_CAPS_MAP, + MOD_CTRL_MAP, + MOD_NUM_MAPS +} modifier_index_t; + +typedef enum { TOGGLE_SHIFTLOCK = 0, HOLD_SHIFTLOCK = 1 } shiftlock_mode_t; + + +// PROCEDURE: asdf_modifier_shift_activate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: sets SHIFT state to ON +// +void asdf_modifier_shift_activate(void); + +// PROCEDURE: asdf_modifier_shiftlock_activate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: sets SHIFTLOCK state if in NORMAL mode, and toggle shiftlock if in TOGGLE mode. +// +void asdf_modifier_shiftlock_activate(void); + +// PROCEDURE: asdf_modifier_capslock_activate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Turns on Capslock state +// +void asdf_modifier_capslock_activate(void); + +// PROCEDURE: asdf_modifier_ctrl_activate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Turns on CTRL mode +// +void asdf_modifier_ctrl_activate(void); + +// PROCEDURE: asdf_modifier_shift_deactivate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Turns off shift mode. +// +void asdf_modifier_shift_deactivate(void); + +// PROCEDURE: asdf_modifier_ctrl_deactivate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Turns off CTRL mode +// +void asdf_modifier_ctrl_deactivate(void); + +// PROCEDURE: asdf_modifier_shiftlock_deactivate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: No action. This is called when releasing the SHIFT LOCK key, +// +void asdf_modifier_shiftlock_deactivate(void); + +// PROCEDURE: asdf_modifier_capslock_deactivate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: No action. Called when releasing the CAPS LOCK key. +// +void asdf_modifier_capslock_deactivate(void); + +// PROCEDURE: asdf_modifiers_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Initialize the modifier key state variables to OFF state +// +void asdf_modifiers_init(void); + +// PROCEDURE: asdf_modifier_index +// INPUTS: none +// OUTPUTS: returns uint8_t index into key map, based on modifier key status +// DESCRIPTION: See OUTPUTS +// +modifier_index_t asdf_modifier_index(void); + +#endif // !defined (ASDF_MODIFIERS_H) + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/asdf_repeat.c b/firmware/asdf/src/asdf_repeat.c new file mode 100644 index 0000000..863a9cf --- /dev/null +++ b/firmware/asdf/src/asdf_repeat.c @@ -0,0 +1,180 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_repeat.c +// +// This file contains the key repeat logic. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#include +#include "asdf_repeat.h" + +typedef uint16_t key_timer_t; + +static repeat_state_t repeat_state; +static repeat_state_t base_repeat_state; + +static key_timer_t key_repeat_timer; + + +// PROCEDURE: asdf_repeat_init +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Initialize the repeat state state machine +// +// SIDE EFFECTS: see DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_repeat_init(void) +{ + repeat_state = base_repeat_state = ASDF_DEFAULT_REPEAT_STATE; + key_repeat_timer = (uint16_t) repeat_state; +} + +// PROCEDURE: asdf_repeast_reset_count +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: resets the repeat counter for the current key, to begin a new +// repeat cycle. Resest is based on repeat state (no repeat, autorepeat, normal repeat). +// +// SIDE EFFECTS: see DESCRIPTION +// +// COMPLEXITY: 1 +// +void asdf_repeat_reset_count(void) +{ + key_repeat_timer = (key_timer_t) repeat_state; +} + +// PROCEDURE: asdf_repeat_auto_off +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Turns Autorepeat mode off by setting the base state to +// autorepeat. If key is repeating, then the new behavior will be realized after +// the repeat key is released. +// +// SIDE EFFECTS: See DESCRIPTION +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +void asdf_repeat_auto_off(void) +{ + base_repeat_state = REPEAT_OFF; + if (REPEAT_ON != repeat_state) { + key_repeat_timer = repeat_state = base_repeat_state; + } +} + +// PROCEDURE: asdf_repeat_auto_on +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Turns Autorepeat mode on by setting the base state to +// autorepeat. If key is repeating, then the new behavior will be realized after +// the repeat key is released. +// +// SIDE EFFECTS: see above +// +// SCOPE: public +// +// COMPLEXITY: 1 +// +void asdf_repeat_auto_on(void) +{ + base_repeat_state = REPEAT_AUTO; + if (REPEAT_ON != repeat_state) { + key_repeat_timer = repeat_state = base_repeat_state; + } +} + +// PROCEDURE: asdf_repeat_activate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: set repeat state machine to repeat mode. Called when REPEAT key +// is pressed. +// +// SIDE EFFECTS: see DESCRIPTION +// +// NOTES: If a key is pressed and the key timer is less than or equal to the +// normal repeat rate, then don't change the timing, to avoid appearance of +// stuttering. +// +// COMPLEXITY: 1 +// +void asdf_repeat_activate(void) +{ + if (key_repeat_timer > REPEAT_ON || REPEAT_OFF == repeat_state) { + key_repeat_timer = repeat_state = REPEAT_ON; + } +} + +// PROCEDURE: asdf_repeat_deactivate +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Reset repeat state machine to default state. Called when REPEAT +// key is released. +// +// SIDE EFFECTS: See DESCRIPTION +// +// NOTES: Releasing repeat disrupts any repeat timers. aIf a key is still held +// down after REPEAT is released, and autorepeat mode is enabled, then restart +// the autorepeat timer. Otherwise disable repeat. +// +// COMPLEXITY: 1 +// +void asdf_repeat_deactivate(void) +{ + key_repeat_timer = repeat_state = base_repeat_state; +} + +// PROCEDURE: asdf_repeat +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: counts down the repeat timer (if activated) and returns a TRUE +// value when the counter times out. A true values indicates that the last value +// should be repeated to the output. +// +// SIDE EFFECTS: none +// +// NOTES: The key_repeat_timer is only decremented if it is nonzero. +// +// COMPLEXITY: 2 +// +uint8_t asdf_repeat(void) +{ + uint8_t timeout = (key_repeat_timer && !(--key_repeat_timer)); + + if (timeout) { + key_repeat_timer = REPEAT_ON; + } + + return timeout; +} + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/asdf_repeat.h b/firmware/asdf/src/asdf_repeat.h new file mode 100644 index 0000000..7bb65a8 --- /dev/null +++ b/firmware/asdf/src/asdf_repeat.h @@ -0,0 +1,87 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// asdf_repeat.h +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation, either version 3 of the License, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . +// +// + +#if !defined(ASDF_REPEAT_H) +#define ASDF_REPEAT_H + +#include "asdf_config.h" + +typedef enum { + REPEAT_OFF = 0, + REPEAT_ON = ASDF_REPEAT_TIME_MS, + REPEAT_AUTO = ASDF_AUTOREPEAT_TIME_MS +} repeat_state_t; + + +// PROCEDURE: asdf_repeat_init +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Initialize the repeat state state machine +void asdf_repeat_init(void); + +// PROCEDURE: asdf_repeast_reset_count +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: resets the repeat counter for the current key, to begin a new +// repeat cycle. Resest is based on repeat state (no repeat, autorepeat, normal repeat). +void asdf_repeat_reset_count(void); + +// PROCEDURE: asdf_repeat_auto_off +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Turns Autorepeat mode off +void asdf_repeat_auto_off(void); + +// PROCEDURE: asdf_repeat_auto_on +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Turns Autorepeat mode on +void asdf_repeat_auto_on(void); + +// PROCEDURE: asdf_repeat_activate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: set repeat state machine to repeat mode. Called when REPEAT key +// is pressed. +void asdf_repeat_activate(void); + +// PROCEDURE: asdf_repeat_deactivate +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: Reset repeat state machine to default state. Called when REPEAT +// key is released. +void asdf_repeat_deactivate(void); + +// PROCEDURE: asdf_repeat +// INPUTS: none +// OUTPUTS: none +// DESCRIPTION: counts down the repeat timer (if activated) and returns a TRUE +// value when the counter times out. A true values indicates that the last value +// should be repeated to the output. +uint8_t asdf_repeat(void); + +#endif // !defined (FILENAME_H) + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/src/main.c b/firmware/asdf/src/main.c new file mode 100644 index 0000000..5df4741 --- /dev/null +++ b/firmware/asdf/src/main.c @@ -0,0 +1,84 @@ +// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*- +// +// Universal Keyboard Project +// ASDF keyboard firmware +// +// main.c +// +// main program loop. Initialize hardware. Schedule key scans and i/o. +// +// Copyright 2019 David Fenyes +// +// This program is free software: you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation, either version 3 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program. If not, see . + +#include +#include "asdf.h" +#include "asdf_arch.h" +#include "asdf_buffer.h" + +// PROCEDURE: main +// INPUTS: none +// OUTPUTS: none +// +// DESCRIPTION: Initialize hardware, Schedule key scans and i/o +// +// SIDE EFFECTS: See above +// +// NOTES: This code just initializes the hardware, and then loops. The loop +// includes: +// +// - Check every 1 ms (or whatever the tick is set to), calls the keyboard +// scan routine. +// +// - Check every pass through if any characters are buffered to send. If so, +// send them. +// +// This is not the most efficient use of the hardware, but is an example of how +// the keyboard scanner is used. Of course, this loop can be replaced with an +// RTOS process as well. If an RTOS is used, then asdf_buffer can be modified +// to use RTOS message queues instead of an internal buffer, or to keep the +// internal buffer and use a counting semaphore to indicate characters in the +// buffer. +// +// If you are adding special functions when using an RTOS, make sure the +// functions do not block, or do any heavy computation. Rather, they should be +// small and pass messages to appropriate processes to handle the activities. +// +// COMPLEXITY: 2 +// +int main(void) +{ + // initialize the hardware: + asdf_arch_init(); + + // initialize the keyboard logic: + asdf_init(); + + while (1) { + + if (asdf_arch_tick()) { + asdf_keycode_t code = asdf_get_code(); + + if (code != ASDF_INVALID_CODE) { + asdf_arch_send_code(code); + } + + asdf_keyscan(); + } + } +} + + +//-------|---------|---------+---------+---------+---------+---------+---------+ +// Above line is 80 columns, and should display completely in the editor. diff --git a/firmware/asdf/test/_clang-format b/firmware/asdf/test/_clang-format new file mode 100644 index 0000000..878ce29 --- /dev/null +++ b/firmware/asdf/test/_clang-format @@ -0,0 +1,46 @@ +--- +BasedOnStyle: Mozilla +AlignAfterOpenBracket: Align +AlignOperands: 'true' +AlignTrailingComments: 'true' +AllowAllParametersOfDeclarationOnNextLine: 'false' +AllowShortBlocksOnASingleLine: 'false' +AllowShortCaseLabelsOnASingleLine: 'true' +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: 'false' +AllowShortLoopsOnASingleLine: 'true' +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: 'true' +BinPackArguments: 'true' +BinPackParameters: 'true' +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Stroustrup +ColumnLimit: '100' +ConstructorInitializerIndentWidth: '2' +ContinuationIndentWidth: '2' +DerivePointerAlignment: 'false' +DisableFormat: 'false' +IncludeBlocks: Preserve +IndentCaseLabels: 'true' +IndentPPDirectives: None +IndentWidth: '2' +IndentWrappedFunctionNames: 'false' +KeepEmptyLinesAtTheStartOfBlocks: 'true' +Language: Cpp +MaxEmptyLinesToKeep: '2' +PointerAlignment: Right +ReflowComments: 'true' +SortIncludes: 'false' +SpaceAfterCStyleCast: 'true' +SpaceBeforeAssignmentOperators: 'true' +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: 'false' +SpacesBeforeTrailingComments: '1' +SpacesInCStyleCastParentheses: 'false' +SpacesInParentheses: 'false' +SpacesInSquareBrackets: 'false' +TabWidth: '8' +UseTab: Never + +... diff --git a/firmware/asdf/test/test_asdf.c b/firmware/asdf/test/test_asdf.c new file mode 100644 index 0000000..2e99576 --- /dev/null +++ b/firmware/asdf/test/test_asdf.c @@ -0,0 +1,508 @@ +#include +#include +#include + +#include "unity.h" +#include "asdf.h" +#include "asdf_ascii.h" +#include "asdf_modifiers.h" +#include "asdf_keymaps.h" +#include "asdf_buffer.h" +#include "asdf_repeat.h" + +#define A 'a' +#define B 'b' + +#define TEST_STRING "abcdefghijklmnop" + +#define NUM_REPEATS (ASDF_KEYCODE_BUFFER_SIZE - 2) + +#define TESTMAP(row, col, mapname, mapname2) \ + do { \ + asdf_keycode_t expected = mapname##_matrix[(row)][(col)]; \ + asdf_keycode_t result = asdf_keymaps_get_code((row), (col), MOD_##mapname2##_MAP); \ + TEST_ASSERT_EQUAL_INT(expected, result); \ + } while (0); + +#define TESTPLAIN(row, col, n) TESTMAP((row), (col), PLAIN, n) +#define TESTSHIFT(row, col, n) TESTMAP((row), (col), SHIFT, n) +#define TESTCAPS(row, col, n) TESTMAP((row), (col), CAPS, n) +#define TESTCTRL(row, col, n) TESTMAP((row), (col), CTRL, n) + +typedef asdf_keycode_t keycode_matrix_t[ASDF_NUM_ROWS][ASDF_NUM_COLS]; + +const char test_string[] = TEST_STRING; + +const asdf_keycode_t key_a = A; +const asdf_keycode_t key_b = B; + +typedef struct { + int32_t row; + int32_t col; +} coord_t; + + +static const keycode_matrix_t PLAIN_matrix = ASCII_PLAIN_MAP; +static const keycode_matrix_t SHIFT_matrix = ASCII_SHIFT_MAP; +static const keycode_matrix_t CAPS_matrix = ASCII_CAPS_MAP; +static const keycode_matrix_t CTRL_matrix = ASCII_CTRL_MAP; + +static uint32_t key_matrix[ASDF_NUM_ROWS]; + + +void setUp(void) +{ + asdf_buffer_init(); + asdf_init(); + + // initialize simulated key matrix + for (uint32_t i = 0; i < ASDF_NUM_ROWS; i++) { + key_matrix[i] = 0; + } +} + +void tearDown(void) {} + +coord_t *find_code(asdf_keycode_t code) +{ + uint32_t done = 0; + static coord_t location = { .row = -1, .col = -1 }; + + for (uint32_t row = 0; !done && (row < ASDF_NUM_ROWS); row++) { + for (uint32_t col = 0; !done && (col < ASDF_NUM_COLS); col++) { + if (PLAIN_matrix[row][col] == code) { + done = 1; + location.row = row; + location.col = col; + } + } + } + return &location; +} + + +asdf_keycode_t shifted(asdf_keycode_t code) +{ + coord_t *location = find_code(code); + return SHIFT_matrix[location->row][location->col]; +} + +asdf_keycode_t caps(asdf_keycode_t code) +{ + coord_t *xy = find_code(code); + return CAPS_matrix[xy->row][xy->col]; +} + +asdf_keycode_t ctrl(asdf_keycode_t code) +{ + coord_t *xy = find_code(code); + return CTRL_matrix[xy->row][xy->col]; +} + + +void keyscan_delay(int32_t ticks) +{ + for (; ticks; ticks--) { + asdf_keyscan(); + } +} + + +void press_no_debounce(asdf_keycode_t code) +{ + coord_t *location = find_code(code); + key_matrix[location->row] |= (1 << location->col); +} + +void release_no_debounce(asdf_keycode_t code) +{ + coord_t *location = find_code(code); + key_matrix[location->row] &= ~(1 << location->col); +} + +void press(asdf_keycode_t code) +{ + press_no_debounce(code); + keyscan_delay(ASDF_DEBOUNCE_TIME_MS); +} + +void release(asdf_keycode_t code) +{ + release_no_debounce(code); + keyscan_delay(ASDF_DEBOUNCE_TIME_MS); +} + + +asdf_cols_t asdf_arch_read_row(uint8_t row) +{ + return key_matrix[row]; +} + + + +// No repsonse to a keypress before it is debounced. +void pressing_a_gives_nothing_before_debounce(void) +{ + press_no_debounce(key_a); + + // no keypress after only ASDF_DEBOUNCE_TIME_MS -1 ticks (not yet debounced): + keyscan_delay(ASDF_DEBOUNCE_TIME_MS - 1); + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + +// pressing 'A' gives 'a' +void pressing_a_gives_a(void) +{ + press_no_debounce(key_a); + + // no keypress after only ASDF_DEBOUNCE_TIME_MS -1 ticks (not yet debounced): + keyscan_delay(ASDF_DEBOUNCE_TIME_MS - 1); + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_get_code()); + + // allow the key to finish debounce + keyscan_delay(1); + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (int32_t) asdf_get_code()); + + // no more codes in the buffer. + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + +// pressing SHIFT+A gives 'A' +void pressing_shift_a_gives_shifted_a(void) +{ + press(ACTION_SHIFT); + press(key_a); + TEST_ASSERT_EQUAL_INT32((int32_t) shifted(key_a), (int32_t) asdf_get_code()); +} + +// pressing CAPS+A gives 'A' +void pressing_caps_a_gives_caps_a(void) +{ + press(ACTION_CAPS); + release(ACTION_CAPS); + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) caps(key_a), (int32_t) asdf_get_code()); +} + +// pressing CTRL+A gives 0x01 (Ctrl-A) +void pressing_ctrl_a_gives_ctrl_a(void) +{ + press(ACTION_CTRL); + press(key_a); + TEST_ASSERT_EQUAL_INT32((int32_t) ctrl(key_a), (int32_t) asdf_get_code()); +} + +// pressing REPT+A repeats 'a' +void pressing_rept_a_repeats_a(void) +{ + press(ACTION_REPEAT); + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// pressing REPT+SHIFT+A repeats 'A' +void pressing_shift_rept_a_repeats_shifted_a(void) +{ + press(ACTION_REPEAT); + press(ACTION_SHIFT); + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) shifted(key_a), (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) shifted(key_a), (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// pressing REPT+CAPS+A repeats 'A' +void pressing_caps_rept_a_repeats_caps_a(void) +{ + press(ACTION_REPEAT); + press(ACTION_CAPS); + + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) caps(key_a), (uint32_t) asdf_get_code()); + + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) caps(key_a), (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + +// pressing REPT+CTRL+A repeats CTRL-A +void pressing_ctrl_rept_a_repeats_ctrl_a(void) +{ + press(ACTION_REPEAT); + press(ACTION_CTRL); + + press(key_a); + TEST_ASSERT_EQUAL_INT32((int32_t) ctrl(key_a), (uint32_t) asdf_get_code()); + + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + for (int i = 0; i < NUM_REPEATS + 1; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) ctrl(key_a), (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + +// pressing and holding 'A' autorepeats 'A' +void holding_a_autorepeats_a(void) +{ + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(ASDF_AUTOREPEAT_TIME_MS); + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// pressing and holding 'A' autorepeats 'A' +void holding_a_autorepeats_slow_then_fast(void) +{ + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(ASDF_AUTOREPEAT_TIME_MS); + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// pressing and holding 'A' and 'B' within less than debounce interval +// eventually returns 'A' then 'B' +void pressing_a_then_b_before_debounce_gives_a_then_b(void) +{ + press_no_debounce(key_a); + + // press B very quickly after a + keyscan_delay(1); + + press(key_b); + + // first get back A + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // next get back B + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + + // and then verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// pressing and holding a series of keys (up to buffer size) in rapid +// succession, allowing each key to debounce, before sending the next, sends all +// the keys in order. (n-key rollover) +void test_key_sequence_nkro(void) +{ + for (int i = 0; i < (int32_t) strlen(test_string); i++) { + press((asdf_keycode_t) test_string[i]); + } + + for (int i = 0; i < (int32_t) strlen(test_string); i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) test_string[i], (int32_t) asdf_get_code()); + } + + // and then verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// pressing and holding a series of keys (up to buffer size) in rapid succession +// without waiting for prior keys to debounce, eventually debounces and sends +// all the keys in order. (n-key rollover) +void test_key_sequence_nkro_simultaneous_debounce(void) +{ + for (int i = 0; i < (int32_t) strlen(test_string); i++) { + press_no_debounce((asdf_keycode_t) test_string[i]); + keyscan_delay(1); + } + + // several keys are already debounced, but now make sure they all are: + keyscan_delay(ASDF_DEBOUNCE_TIME_MS); + + for (int i = 0; i < (int32_t) strlen(test_string); i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) test_string[i], (int32_t) asdf_get_code()); + } + + // and then verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// holding 'A' then pressing 'B' before autorepeat interval and holding 'B' gives 'A', then repeats +// 'B' +void holding_a_briefly_then_holding_b_gives_a_and_repeats_b(void) +{ + press(key_a); + keyscan_delay(ASDF_AUTOREPEAT_TIME_MS / 2); + press(key_b); + + // hold "a" and "b" for autorepeat delay: + keyscan_delay(ASDF_AUTOREPEAT_TIME_MS); + + // hold "a" and "b" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + // should get "a" back, then "b" + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + + // now get back NUM_REEPEATS repetitions of "b" + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + } + + // and then verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +// holding 'B' while repeating 'A' starts autorepeat delay, then starts repeating 'B' +void holding_a_then_holding_b_autorepeats_a_then_autorepeats_b(void) +{ + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for AUTOREPEAT delay + keyscan_delay(ASDF_AUTOREPEAT_TIME_MS); + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + // empty the buffer to make room for 'B' + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + } + + // now press "b" while "a" is autorepeating: + + press(key_b); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + + // hold "a" for autorepeat delay + keyscan_delay(ASDF_AUTOREPEAT_TIME_MS); + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + // empty the buffer to make room for 'B' + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + +// Pressing and holding 'A' then holding 'B' with repeat key held repeats 'A' then 'B' +void repeating_with_a_then_adding_b_repeats_a_then_repeats_b(void) +{ + press(ACTION_REPEAT); + press(key_a); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + // empty the buffer to make room for 'B' + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_a, (uint32_t) asdf_get_code()); + } + + // now press "b" while "a" is autorepeating: + + press(key_b); + + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + + // hold "a" for NUM_REPEATS repeat cycles: + keyscan_delay(NUM_REPEATS * ASDF_REPEAT_TIME_MS); + + // empty the buffer to make room for 'B' + for (int i = 0; i < NUM_REPEATS; i++) { + TEST_ASSERT_EQUAL_INT32((int32_t) key_b, (uint32_t) asdf_get_code()); + } + + // and verify there are no more codes in buffer: + TEST_ASSERT_EQUAL_INT32((int32_t) ASDF_INVALID_CODE, (int32_t) asdf_get_code()); +} + + +int main(void) +{ + UNITY_BEGIN(); + RUN_TEST(pressing_a_gives_nothing_before_debounce); + RUN_TEST(pressing_a_gives_a); + RUN_TEST(pressing_shift_a_gives_shifted_a); + RUN_TEST(pressing_caps_a_gives_caps_a); + RUN_TEST(pressing_ctrl_a_gives_ctrl_a); + RUN_TEST(pressing_rept_a_repeats_a); + RUN_TEST(pressing_shift_rept_a_repeats_shifted_a); + RUN_TEST(pressing_caps_rept_a_repeats_caps_a); + RUN_TEST(holding_a_autorepeats_a); + RUN_TEST(holding_a_autorepeats_slow_then_fast); + RUN_TEST(pressing_a_then_b_before_debounce_gives_a_then_b); + RUN_TEST(test_key_sequence_nkro); + RUN_TEST(test_key_sequence_nkro_simultaneous_debounce); + RUN_TEST(holding_a_briefly_then_holding_b_gives_a_and_repeats_b); + RUN_TEST(holding_a_then_holding_b_autorepeats_a_then_autorepeats_b); + RUN_TEST(repeating_with_a_then_adding_b_repeats_a_then_repeats_b); + + + + return UNITY_END(); +} diff --git a/firmware/asdf/test/test_asdf_buffer.c b/firmware/asdf/test/test_asdf_buffer.c new file mode 100644 index 0000000..cd20f8e --- /dev/null +++ b/firmware/asdf/test/test_asdf_buffer.c @@ -0,0 +1,201 @@ +#include +#include + +#include "unity.h" +#include "asdf.h" +#include "asdf_buffer.h" + + +#define TEST_VALUE 'a' +#define MAX_BUFFER ASDF_BUFFER_POOL_SIZE +#define HALF_BUFFER (ASDF_BUFFER_POOL_SIZE / 2) + +static const char test_string[] = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +static const char * const more_strings[] = { + "abcdefghijkl", + "12345", + "ABCDEFG", + "The quick brown", + "We the people", + "+" +}; + +static asdf_buffer_handle_t handle; + +void setUp(void) +{ + asdf_buffer_init(); + handle = asdf_buffer_new(MAX_BUFFER); +} +void tearDown(void) {} + + +// allocating first buffer returns handle 0 +void test_allocating_first_buffer_returns_handle_0(void) +{ + TEST_ASSERT_EQUAL_INT32(0, (int32_t) handle); +} + +// allocating second buffer returns handle 1 +void test_allocating_second_buffer_returns_handle_1(void) +{ + asdf_buffer_handle_t handle_1; + asdf_buffer_handle_t handle_2; + + asdf_buffer_init(); + handle_1 = asdf_buffer_new(HALF_BUFFER); + TEST_ASSERT_EQUAL_INT32(0, (int32_t) handle_1); + + handle_2 = asdf_buffer_new(HALF_BUFFER); + TEST_ASSERT_EQUAL_INT32(1, (int32_t) handle_2); +} + +// allocating more buffers than available returns invalid buffer handle +void test_allocating_too_many_buffers_returns_invalid(void) +{ + asdf_buffer_init(); + + for (int i = 0; i <= ASDF_BUFFER_NUM_HANDLES; i++) { + handle = asdf_buffer_new(1); + } + + TEST_ASSERT_EQUAL_INT32(ASDF_BUFFER_INVALID, (int32_t) handle); +} + +// all of the alloted handles can be allocated +void test_all_handles_are_allocated(void) +{ + asdf_buffer_init(); + + for (int i = 0; i < ASDF_BUFFER_NUM_HANDLES; i++) { + handle = asdf_buffer_new(1); + TEST_ASSERT_EQUAL_INT32(i, (int32_t) handle); + } + + // and one more should be an invalid handle: + handle = asdf_buffer_new(1); + TEST_ASSERT_EQUAL_INT32(ASDF_BUFFER_INVALID, (int32_t) handle); +} + +// allocating more space than available returns invalid buffer handle +void test_allocating_too_much_space_returns_invalid(void) +{ + asdf_buffer_init(); + handle = asdf_buffer_new(MAX_BUFFER + 1); + TEST_ASSERT_EQUAL_INT32(ASDF_BUFFER_INVALID, (int32_t) handle); +} +// get from an invalid buffer returns invalid code +void test_get_from_invalid_handle_returns_invalid_code(void) +{ + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_buffer_get(ASDF_BUFFER_INVALID)); +} + +void test_get_from_unallocated_handle_returns_invalid_code(void) +{ + asdf_keycode_t code = asdf_buffer_get(ASDF_BUFFER_NUM_HANDLES-1); + + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) code); +} + + + +// retrieving from empty queue gives invalid code +void get_from_empty_queue_returns_error(void) +{ + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_buffer_get(handle)); +} + +// adding and retrieving give the same code back. +void sending_code_and_retrieve_returns_same_code(void) +{ + asdf_buffer_put(handle, TEST_VALUE); + TEST_ASSERT_EQUAL_INT32(TEST_VALUE, (int32_t) asdf_buffer_get(handle)); +} + + +// adding then fetching a string of codes one-by-one gives the same string back in order +void test_adding_and_retrieving_string_one_by_one(void) +{ + + for (int i = 0; i < (int) sizeof(test_string); i++) { + asdf_buffer_put(handle, (asdf_keycode_t) test_string[i]); + TEST_ASSERT_EQUAL_INT32((int32_t) test_string[i], (int32_t) asdf_buffer_get(handle)); + } +} + +// Filling the buffer first, then retrieving the characters from the buffer +// should return the same string. +void test_fill_buffer_then_retrieve_string(void) +{ + for (int sent = 0; sent < MAX_BUFFER; sent++) { + asdf_buffer_put(handle, (asdf_keycode_t) test_string[sent]); + } + for (int received = 0; received < MAX_BUFFER; received++) { + int32_t code = (int32_t) asdf_buffer_get(handle); + TEST_ASSERT_EQUAL_INT32((int32_t) test_string[received],code); + } + // assert that next code request returns invalid code: + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_buffer_get(handle)); +} + + +// adding a string longer than the buffer length gives the first BUFFER_LENGTH +// characters back, quietly dropping the overflow. +void test_overfilling_buffer_and_retrieve_drops_overflow(void) +{ + // send the entire test string to overflow the buffer. + for (int i = 0; i < (int) sizeof(test_string); i++) { + asdf_buffer_put(handle, (asdf_keycode_t) test_string[i]); + } + // read until invalid character is received, testing that each character is + // correct. + for (int i = 0; i < MAX_BUFFER; i++) { + asdf_keycode_t code = asdf_buffer_get(handle); + TEST_ASSERT_EQUAL_INT32((int32_t) test_string[i], (int32_t) code); + } + + // the next code request returns invalid code: + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_buffer_get(handle)); +} + +// with an alternating pattern of adding and retrieving codes, the sent code string matches the retrieved string. +void test_send_get_multiple_strings(void) +{ + + for (int i = 0; '+' != more_strings[i][0]; i++) { + for (const char * chrptr = (const char *) &more_strings[i][0]; *chrptr; chrptr++) { + asdf_buffer_put(handle, (asdf_keycode_t) *chrptr); + } + // read until invalid character is received, testing that each character is + // correct. + for (const char * chrptr = (const char *) &more_strings[i][0]; *chrptr; chrptr++) { + asdf_keycode_t code = asdf_buffer_get(handle); + TEST_ASSERT_EQUAL_INT32((int32_t) *chrptr, (int32_t) code); + } + // the next code request returns invalid code: + TEST_ASSERT_EQUAL_INT32(ASDF_INVALID_CODE, (int32_t) asdf_buffer_get(handle)); + + } +} + + + +int main(void) +{ + UNITY_BEGIN(); + RUN_TEST(test_allocating_first_buffer_returns_handle_0); + RUN_TEST(test_allocating_second_buffer_returns_handle_1); + RUN_TEST(test_allocating_too_many_buffers_returns_invalid); + RUN_TEST(test_all_handles_are_allocated); + RUN_TEST(test_allocating_too_much_space_returns_invalid); + RUN_TEST(test_get_from_invalid_handle_returns_invalid_code); + RUN_TEST(test_get_from_unallocated_handle_returns_invalid_code); + RUN_TEST(get_from_empty_queue_returns_error); + RUN_TEST(sending_code_and_retrieve_returns_same_code); + RUN_TEST(test_adding_and_retrieving_string_one_by_one); + RUN_TEST(test_fill_buffer_then_retrieve_string); + RUN_TEST(test_overfilling_buffer_and_retrieve_drops_overflow); + RUN_TEST(test_send_get_multiple_strings); + + return UNITY_END(); +} diff --git a/firmware/asdf/test/test_asdf_keymaps.c b/firmware/asdf/test/test_asdf_keymaps.c new file mode 100644 index 0000000..a17faba --- /dev/null +++ b/firmware/asdf/test/test_asdf_keymaps.c @@ -0,0 +1,118 @@ +#include +#include "unity.h" +#include "asdf.h" +#include "asdf_ascii.h" +#include "asdf_modifiers.h" +#include "asdf_keymaps.h" + +#define TESTALPHA 'a' +#define TESTNUM '2' + +#define TESTMAP(row, col, mapname, mapname2) \ + do { \ + asdf_keycode_t expected = mapname##_matrix[(row)][(col)]; \ + asdf_keycode_t result = asdf_keymaps_get_code((row), (col), MOD_ ## mapname2 ## _MAP); \ + TEST_ASSERT_EQUAL_INT(expected, result); \ + } while (0); + +#define TEST_VALID_CODE(position) do { \ + coord_t pos = position; \ + TEST_ASSERT_FALSE(pos.row == -1); \ + TEST_ASSERT_FALSE(pos.col == -1); \ + } while (0); + +#define TESTPLAIN(row, col, n) TESTMAP((row), (col), PLAIN, n) +#define TESTSHIFT(row, col, n) TESTMAP((row), (col), SHIFT, n) +#define TESTCAPS(row, col, n) TESTMAP((row), (col), CAPS, n) +#define TESTCTRL(row, col, n) TESTMAP((row), (col), CTRL, n) + +typedef asdf_keycode_t keycode_matrix_t[ASDF_NUM_ROWS][ASDF_NUM_COLS]; + +typedef struct { + int32_t row; + int32_t col; +} coord_t; + + +static const keycode_matrix_t PLAIN_matrix = ASCII_PLAIN_MAP; +static const keycode_matrix_t SHIFT_matrix = ASCII_SHIFT_MAP; +static const keycode_matrix_t CAPS_matrix = ASCII_CAPS_MAP; +static const keycode_matrix_t CTRL_matrix = ASCII_CTRL_MAP; + + static coord_t alpha_sample; + +static coord_t num_sample; + +coord_t *find_code(asdf_keycode_t code) +{ + uint32_t done = 0; + static coord_t location = { .row = -1, .col = -1 }; + + for (uint32_t row = 0; !done && (row < ASDF_NUM_ROWS); row++) { + for (uint32_t col = 0; !done && (col < ASDF_NUM_COLS); col++) { + if (PLAIN_matrix[row][col] == code) { + done = 1; + location.row = row; + location.col = col; + } + } + } + return &location; +} + + +void setUp(void) +{ + coord_t *temp; + + asdf_keymaps_init(); + + temp = find_code(TESTALPHA); + alpha_sample = *temp; + + temp = find_code(TESTNUM); + num_sample = *temp; +} + +void tearDown(void) {} + + +void test_chars_are_in_map(void) { + TEST_VALID_CODE(alpha_sample); + TEST_VALID_CODE(num_sample); +} + +void plain_map_gives_plain_values(void) +{ + TESTPLAIN(alpha_sample.row, alpha_sample.col, PLAIN); + TESTPLAIN(num_sample.row, num_sample.col, PLAIN); +} + +void shift_map_gives_shift_values(void) +{ + TESTSHIFT(alpha_sample.row, alpha_sample.col, SHIFT); + TESTSHIFT(num_sample.row, num_sample.col, SHIFT); +} +void caps_map_gives_caps_values(void) +{ + TESTCAPS(alpha_sample.row, alpha_sample.col, CAPS); + TESTCAPS(num_sample.row, num_sample.col, CAPS); +} +void ctrl_map_gives_ctrl_values(void) +{ + TESTCTRL(alpha_sample.row, alpha_sample.col, CTRL); + TESTCTRL(num_sample.row, num_sample.col, CTRL); +} + + +int main(void) +{ + UNITY_BEGIN(); + RUN_TEST(test_chars_are_in_map); + RUN_TEST(plain_map_gives_plain_values); + RUN_TEST(shift_map_gives_shift_values); + RUN_TEST(caps_map_gives_caps_values); + RUN_TEST(ctrl_map_gives_ctrl_values); + + return UNITY_END(); +} diff --git a/firmware/asdf/test/test_asdf_modifiers.c b/firmware/asdf/test/test_asdf_modifiers.c new file mode 100644 index 0000000..ece90c4 --- /dev/null +++ b/firmware/asdf/test/test_asdf_modifiers.c @@ -0,0 +1,315 @@ +#include + +#include "unity.h" +#include "asdf_modifiers.h" + + +#define TESTMAP(a) \ + do { \ + uint32_t map = (uint32_t) asdf_modifier_index(); \ + TEST_ASSERT_EQUAL_INT((a), map); \ + } while (0); + +void setUp(void) +{ + asdf_modifiers_init(); +} +void tearDown(void) {} + + +// initial map is plain +void initial_map_is_plain(void) +{ + TESTMAP(MOD_PLAIN_MAP); +} + + +// SHIFT gives shift map +void shift_gives_shiftmap(void) +{ + asdf_modifier_shift_activate(); + TESTMAP(MOD_SHIFT_MAP); +} + +// SHIFT press & release gives plain map +void shift_and_release_gives_plain(void) +{ + asdf_modifier_shift_activate(); + TESTMAP(MOD_SHIFT_MAP); + + asdf_modifier_shift_deactivate(); + TESTMAP(MOD_PLAIN_MAP); +} + +// CAPSLOCK gives caps map +void capslock_gives_caps(void) +{ + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CAPS_MAP); +} + +// CAPLOCK press and release gives caps map +void capslock_and_release_gives_caps(void) +{ + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); +} + +// CAPS-release-CAPS give plain +void caps_release_caps_gives_plain(void) +{ + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_activate(); + TESTMAP(MOD_PLAIN_MAP); +} + +// CAPS-release-CAPS-release will first activate CAPS mode then deactivation, +// resulting in final plain map. +void caps_release_caps_release_gives_plain(void) +{ + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_activate(); + TESTMAP(MOD_PLAIN_MAP); + + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_PLAIN_MAP); +} + +// If SHIFT and CAPS are activated, the SHIFT map results +void shift_and_caps_gives_shift(void) +{ + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_shift_activate(); + TESTMAP(MOD_SHIFT_MAP); +} + +// IF CAPS map is active, pressing and releasing SHIFT reverts to CAPS +void caps_shift_unshift_gives_caps(void) +{ + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_shift_activate(); + TESTMAP(MOD_SHIFT_MAP); + + asdf_modifier_shift_deactivate(); + TESTMAP(MOD_CAPS_MAP); +} + +// Capslock and SHiftlock gives SHIFT +void capslock_shiftlock_gives_shift(void) +{ + asdf_modifier_capslock_activate(); + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); +} + +// Pressing CAPSLOCK and SHIFTLOCK, then CAPSLOCK again gives shift map. +void capslock_shiftlock_capslock_gives_shift(void) +{ + asdf_modifier_capslock_activate(); + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); + + asdf_modifier_capslock_activate(); + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); +} + +// Pressing CAPSLOCK and SHIFTLOCK, then press and releast SHIFT (to deactivate +// the shiftlock) again gives shift map. +void capslock_shiftlock_shift_gives_caps(void) +{ + asdf_modifier_capslock_activate(); + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CAPS_MAP); + + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); + + asdf_modifier_shift_activate(); + asdf_modifier_shift_deactivate(); + TESTMAP(MOD_CAPS_MAP); +} + +// SHIFTLOCK press gives shift map +void shiftlock_gives_shift(void) +{ + asdf_modifier_shiftlock_activate(); + TESTMAP(MOD_SHIFT_MAP); +} + +// SHIFTLOCK press and release gives shift map +void shiftlock_and_release_gives_shift(void) +{ + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); +} + + +// SHIFTLOCK and SHIFT gives shift map +void shiftlock_shift_gives_shift(void) +{ + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); + + asdf_modifier_shift_activate(); + TESTMAP(MOD_SHIFT_MAP); +} + +// SHIFTLOCK and SHIFT press and release gives plain map +void shiftlock_shift_release_gives_plain(void) +{ + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_SHIFT_MAP); + + asdf_modifier_shift_activate(); + asdf_modifier_shift_deactivate(); + TESTMAP(MOD_PLAIN_MAP); +} + +// CTRL gives ctrl map +void ctrl_gives_ctrl_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); +} + +// CTRL press and release gives plain map +void ctrl_release_gives_plain_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_ctrl_activate(); + asdf_modifier_ctrl_deactivate(); + TESTMAP(MOD_PLAIN_MAP); +} + + +// SHIFT + CTRL is ctrl map +void ctrl_shift_gives_ctrl_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_shift_activate(); + TESTMAP(MOD_CTRL_MAP); +} + +// CAPSLOCK and CTRL is ctrl map +void ctrl_caps_gives_ctrl_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_capslock_activate(); + TESTMAP(MOD_CTRL_MAP); +} + + +// SHIFTLOCK and CTRL is ctrl map +void ctrl_shiftlock_gives_ctrl_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_shiftlock_activate(); + TESTMAP(MOD_CTRL_MAP); +} + +void ctrl_double_caps_returns_to_ctrl_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_capslock_activate(); + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_capslock_activate(); + asdf_modifier_capslock_deactivate(); + TESTMAP(MOD_CTRL_MAP); +} + +void ctrl_double_shiftlock_returns_to_ctrl_map(void) +{ + asdf_modifier_ctrl_activate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_CTRL_MAP); + + asdf_modifier_shiftlock_activate(); + asdf_modifier_shiftlock_deactivate(); + TESTMAP(MOD_CTRL_MAP); +} + + +int main(void) +{ + UNITY_BEGIN(); + RUN_TEST(initial_map_is_plain); + RUN_TEST(shift_gives_shiftmap); + RUN_TEST(shift_and_release_gives_plain); + RUN_TEST(capslock_gives_caps); + RUN_TEST(capslock_and_release_gives_caps); + RUN_TEST(caps_release_caps_gives_plain); + RUN_TEST(caps_release_caps_release_gives_plain); + RUN_TEST(shift_and_caps_gives_shift); + RUN_TEST(caps_shift_unshift_gives_caps); + RUN_TEST(capslock_shiftlock_gives_shift); + RUN_TEST(capslock_shiftlock_capslock_gives_shift); + RUN_TEST(capslock_shiftlock_shift_gives_caps); + RUN_TEST(shiftlock_gives_shift); + RUN_TEST(shiftlock_and_release_gives_shift); + RUN_TEST(shiftlock_shift_gives_shift); + RUN_TEST(shiftlock_shift_release_gives_plain); + RUN_TEST(ctrl_gives_ctrl_map); + RUN_TEST(ctrl_release_gives_plain_map); + RUN_TEST(ctrl_shift_gives_ctrl_map); + RUN_TEST(ctrl_caps_gives_ctrl_map); + RUN_TEST(ctrl_shiftlock_gives_ctrl_map); + RUN_TEST(ctrl_double_caps_returns_to_ctrl_map); + RUN_TEST(ctrl_double_shiftlock_returns_to_ctrl_map); + + // toggle shiftlock_mode switches the shiftlock behavior to toggle_mode + // calling toggle_shiftlock_mode twice leaves shiftlock behavior in hold mode + // calling toggle_shiftlock_mode three times leaves shiftlock behavior in toggle mode + + return UNITY_END(); +} diff --git a/firmware/asdf/test/test_asdf_repeat.c b/firmware/asdf/test/test_asdf_repeat.c new file mode 100644 index 0000000..733cd32 --- /dev/null +++ b/firmware/asdf/test/test_asdf_repeat.c @@ -0,0 +1,448 @@ +#include +#include +#include "unity.h" +#include "asdf_repeat.h" + +#define REPEAT_TIMED_OUT 10000 +#define NUM_REPETITIONS 10 + +uint32_t count_repeat_ticks(uint32_t timeout) +{ + uint32_t count = 0; + uint32_t test; + + do { + test = asdf_repeat(); + count++; + } while (!test && count < timeout); + + return count; +} + + +void setUp(void) +{ + asdf_repeat_init(); +} +void tearDown(void) {} + + +// On initialization, autorepeat should be enabled by default. +void test_asdf_repeat_init_resets_to_autorepeat_default(void) +{ + + uint32_t delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} + +// If autorepeat is turned off, then holding down a simulated key should not +// cause a repeat event. +void test_asdf_repeat_no_repeat_if_auto_turned_off(void) +{ + uint32_t delay; + asdf_repeat_auto_off(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(REPEAT_TIMED_OUT, delay); +} + +// If autorepeat is turned on, then holding down a simulated key should cause a +// repeat event after the autorepeat interval. +void test_asdf_repeat_autorepeat_if_auto_turned_on(void) +{ + uint32_t delay; + asdf_repeat_auto_off(); + asdf_repeat_auto_on(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} + +// After the autorepeat interval, subsequent repeat events should occur at the +// regular repeat interval. +void test_asf_repeat_autorepeat_fast_repeat_after_delay(void) +{ + uint32_t delay; + + // wait out the autorepeat delay + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); + + + // now verify the next repeat interval is short: + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + + +// If autorepeat is turned on, then holding down a key should cause a repeat +// event at the autorepeat interval. This should be true if autorepeat was +// previously off, or if it was already on, so test both cases here. +void test_asdf_repeat_auto_repeat_if_auto_turned_on(void) +{ + uint32_t delay; + asdf_repeat_auto_on(); + asdf_repeat_auto_on(); + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); + + asdf_repeat_auto_off(); + asdf_repeat_auto_on(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} + +// When in autorepeat mode, calling asdf_repeat_reset_count() should reset the +// repeat timer to the autorepeat interval. +void test_asdf_repeat_reset_count_works_in_autorepeat_mode(void) +{ + uint32_t delay; + // wait 1/2 of autorepeat time and release a key + delay = count_repeat_ticks(ASDF_AUTOREPEAT_TIME_MS / 2); + + TEST_ASSERT_EQUAL_INT((ASDF_AUTOREPEAT_TIME_MS / 2), delay); + + asdf_repeat_reset_count(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} + +// When in repeat mode (repeat key held down), calling asdf_repeat_reset_count() +// should reset the repeat timer to the repeat interval. +void test_asdf_repeat_reset_count_works_in_repeat_mode(void) +{ + uint32_t delay; + // wait 1/2 of autorepeat time and release a key + + asdf_repeat_activate(); + + delay = count_repeat_ticks(ASDF_REPEAT_TIME_MS / 2); + + TEST_ASSERT_EQUAL_INT((ASDF_REPEAT_TIME_MS / 2), delay); + + asdf_repeat_reset_count(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + + +// When Autoreat is enabled, activating repeat mode (pressing the repeat key) +// should cause repeat events to occur at the fast repeat rate, skipping the +// autorepeat interval. +void test_asdf_repeat_activate_with_auto_on(void) +{ + uint32_t delay; + asdf_repeat_auto_on(); + + asdf_repeat_activate(); + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + +// When Autoreat is off, activating repeat mode (pressing the repeat key) +// should cause repeat events to occur at the fast repeat rate +void test_asdf_repeat_activate_with_auto_off(void) +{ + uint32_t delay; + asdf_repeat_auto_off(); + asdf_repeat_activate(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + +// If autorepeat is disabled, then activating and deactivating repeat mode +// (pressing and releasing the repeat key) should return to the autorepeat +// disabled mode. +void test_asdf_repeat_deactivate_returns_to_baseline_no_repeat(void) +{ + uint32_t delay; + + asdf_repeat_auto_off(); + + // simulate a brief REPEAT key press (3 repeat cycles) + + + asdf_repeat_activate(); + + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + asdf_repeat_deactivate(); + + // now that repeat is deactivated, we should time out before hitting a repeat + // event: + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(REPEAT_TIMED_OUT, delay); +} + +// If autorepeat is enabled, then activating and deactivating repeat mode +// (pressing and releasing the repeat key) should return to the autorepeat +// enabled mode. +void test_asdf_repeat_deactivate_returns_to_baseline_autorepeat(void) +{ + uint32_t delay; + + // simulate a brief REPEAT key press (1/2 autorepeat time) + asdf_repeat_activate(); + + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + asdf_repeat_deactivate(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} + +// When Autoreat is enabled, and the autorepeat timer is activated by holding +// down a key, then activating repeat (pressing the repeat key) should skip the +// rest of the autorepeat interval, and cause repeat events to occur at the fast +// repeat rate. +void test_asdf_repeat_repeat_key_circumvents_initial_autorepeat_delay(void) +{ + uint32_t delay; + + // simulate a brief keypress (1/2 autorepeat time) + delay = count_repeat_ticks(ASDF_AUTOREPEAT_TIME_MS / 2); + + TEST_ASSERT_EQUAL_INT((ASDF_AUTOREPEAT_TIME_MS / 2), delay); + + // simulate pressing the REPEAT key in the middle of an autorepeat interval + asdf_repeat_activate(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + +// If autorepeat is on, and a key is being held down to start the autorepeat +// interval, then turning off autorepeat mode should prevent the key from +// repeating. +void test_asdf_repeat_turning_off_auto_cancels_autorepeat_delay_in_progress(void) +{ + uint32_t delay; + asdf_repeat_auto_on(); + // simulate a brief keypress (1/2 autorepeat time) + delay = count_repeat_ticks(ASDF_AUTOREPEAT_TIME_MS / 2); + + TEST_ASSERT_EQUAL_INT((ASDF_AUTOREPEAT_TIME_MS / 2), delay); + + asdf_repeat_auto_off(); + + // simulate continued holding down key + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(REPEAT_TIMED_OUT, delay); +} + +// If a key is autorepeating (held down until it repeats, without the repeat key +// being held down), then turning off autorepeat mode should stop the key from +// repeating. +void test_asdf_repeat_turning_off_auto_cancels_autorepeating_keypress(void) +{ + uint32_t delay; + + asdf_repeat_auto_on(); + // simulate an autorepeating key. Wait out entire autorepeat delay. + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); + + // wait NUM_REPETITIONS repeat cycles: + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + asdf_repeat_auto_off(); + + for (delay = 0; !asdf_repeat() && (delay < REPEAT_TIMED_OUT); delay++) { + } + + TEST_ASSERT_EQUAL_INT(REPEAT_TIMED_OUT, delay); +} + + +// If you press the REPEAT key while a key is already autorepeating (i.e., after +// the autorepeat delay interval), then the repeat timing shall not be affected. +void test_asdf_repeat_activate_while_autorepeating_wont_affect_timing(void) +{ + uint32_t delay; + + asdf_repeat_auto_on(); + // simulate an autorepeating key. Wait out entire autorepeat delay. + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); + + // wait 1/2 fast repeat cycle: + // simulate an autorepeating key. Wait out entire autorepeat delay. + delay = count_repeat_ticks(ASDF_REPEAT_TIME_MS / 2); + + TEST_ASSERT_EQUAL_INT((ASDF_REPEAT_TIME_MS / 2), delay); + + // turn on repeat mode (press REPEAT key) + asdf_repeat_activate(); + + // now verify the repeat interval was not affected. Finish the current repeat + // interval + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + +// If in autorepeat mode and the repeat key is released while a key is +// repeating, the next repeat event should occur after a new autorepeat delay +// interval. +void test_asdf_repeat_deactivate_while_repeating_resets_autorepeat_counter(void) +{ + uint32_t delay; + + asdf_repeat_auto_on(); + asdf_repeat_activate(); + + // wait NUM_REPETITIONS repeat cycles: + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + // releast REPEAT key: + asdf_repeat_deactivate(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + // should have waited entire autorepeat delay interval + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} + +// If autorepeat is disabled and the repeat key is released while a key is +// repeating, then the key should stop repeating. +void test_asdf_repeat_deactivate_while_repeating_stops_repeating(void) +{ + uint32_t delay; + + asdf_repeat_auto_off(); + asdf_repeat_activate(); + + // wait NUM_REPETITIONS repeat cycles: + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + // releast REPEAT key: + asdf_repeat_deactivate(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + // should have waited entire autorepeat delay interval + TEST_ASSERT_EQUAL_INT(REPEAT_TIMED_OUT, delay); +} + +// pressing a new value key when REPEAT is active should start repeating right +// away. +void test_asdf_repeat_new_key_while_repeat_active_keeps_repeating(void) +{ + uint32_t delay; + + asdf_repeat_activate(); + + // wait NUM_REPETITIONS repeat cycles: + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + // simulate half a repeat interval + delay = count_repeat_ticks(ASDF_REPEAT_TIME_MS / 2); + + // simulate a new key press: + asdf_repeat_reset_count(); + + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + // should have waited the key repeat interval + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay); +} + +// pressing a new value key when autorepeating should start new autorepeat +// delay. +void test_asdf_repeat_new_key_while_autorepeating_starts_new_autorepeat(void) +{ + uint32_t delay; + + asdf_repeat_auto_on(); + + // simulate an autorepeating key. Wait out entire autorepeat delay. + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); + + // wait NUM_REPETITIONS repeat cycles: + delay = 0; + for (uint32_t i = 0; i < NUM_REPETITIONS; i++) { + delay += count_repeat_ticks(REPEAT_TIMED_OUT); + } + TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay); + + // simulate new keypress: + asdf_repeat_reset_count(); + + // now measure interval until next repeat event. + delay = count_repeat_ticks(REPEAT_TIMED_OUT); + + TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay); +} +int main(void) +{ + UNITY_BEGIN(); + RUN_TEST(test_asdf_repeat_init_resets_to_autorepeat_default); + RUN_TEST(test_asdf_repeat_no_repeat_if_auto_turned_off); + RUN_TEST(test_asdf_repeat_auto_repeat_if_auto_turned_on); + RUN_TEST(test_asf_repeat_autorepeat_fast_repeat_after_delay); + RUN_TEST(test_asdf_repeat_reset_count_works_in_autorepeat_mode); + RUN_TEST(test_asdf_repeat_reset_count_works_in_repeat_mode); + RUN_TEST(test_asdf_repeat_activate_with_auto_on); + RUN_TEST(test_asdf_repeat_activate_with_auto_off); + RUN_TEST(test_asdf_repeat_deactivate_returns_to_baseline_autorepeat); + RUN_TEST(test_asdf_repeat_deactivate_returns_to_baseline_no_repeat); + RUN_TEST(test_asdf_repeat_repeat_key_circumvents_initial_autorepeat_delay); + RUN_TEST(test_asdf_repeat_activate_while_autorepeating_wont_affect_timing); + RUN_TEST(test_asdf_repeat_turning_off_auto_cancels_autorepeating_keypress); + RUN_TEST(test_asdf_repeat_turning_off_auto_cancels_autorepeat_delay_in_progress); + RUN_TEST(test_asdf_repeat_deactivate_while_repeating_resets_autorepeat_counter); + RUN_TEST(test_asdf_repeat_deactivate_while_repeating_stops_repeating); + RUN_TEST(test_asdf_repeat_new_key_while_repeat_active_keeps_repeating); + RUN_TEST(test_asdf_repeat_new_key_while_autorepeating_starts_new_autorepeat); + return UNITY_END(); +} diff --git a/firmware/asdf/test/unity/auto/colour_prompt.rb b/firmware/asdf/test/unity/auto/colour_prompt.rb new file mode 100644 index 0000000..bf09d02 --- /dev/null +++ b/firmware/asdf/test/unity/auto/colour_prompt.rb @@ -0,0 +1,118 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +if RUBY_PLATFORM =~ /(win|w)32$/ + begin + require 'Win32API' + rescue LoadError + puts 'ERROR! "Win32API" library not found' + puts '"Win32API" is required for colour on a windows machine' + puts ' try => "gem install Win32API" on the command line' + puts + end + # puts + # puts 'Windows Environment Detected...' + # puts 'Win32API Library Found.' + # puts +end + +class ColourCommandLine + def initialize + return unless RUBY_PLATFORM =~ /(win|w)32$/ + get_std_handle = Win32API.new('kernel32', 'GetStdHandle', ['L'], 'L') + @set_console_txt_attrb = + Win32API.new('kernel32', 'SetConsoleTextAttribute', %w[L N], 'I') + @hout = get_std_handle.call(-11) + end + + def change_to(new_colour) + if RUBY_PLATFORM =~ /(win|w)32$/ + @set_console_txt_attrb.call(@hout, win32_colour(new_colour)) + else + "\033[30;#{posix_colour(new_colour)};22m" + end + end + + def win32_colour(colour) + case colour + when :black then 0 + when :dark_blue then 1 + when :dark_green then 2 + when :dark_cyan then 3 + when :dark_red then 4 + when :dark_purple then 5 + when :dark_yellow, :narrative then 6 + when :default_white, :default, :dark_white then 7 + when :silver then 8 + when :blue then 9 + when :green, :success then 10 + when :cyan, :output then 11 + when :red, :failure then 12 + when :purple then 13 + when :yellow then 14 + when :white then 15 + else + 0 + end + end + + def posix_colour(colour) + # ANSI Escape Codes - Foreground colors + # | Code | Color | + # | 39 | Default foreground color | + # | 30 | Black | + # | 31 | Red | + # | 32 | Green | + # | 33 | Yellow | + # | 34 | Blue | + # | 35 | Magenta | + # | 36 | Cyan | + # | 37 | Light gray | + # | 90 | Dark gray | + # | 91 | Light red | + # | 92 | Light green | + # | 93 | Light yellow | + # | 94 | Light blue | + # | 95 | Light magenta | + # | 96 | Light cyan | + # | 97 | White | + + case colour + when :black then 30 + when :red, :failure then 31 + when :green, :success then 32 + when :yellow then 33 + when :blue, :narrative then 34 + when :purple, :magenta then 35 + when :cyan, :output then 36 + when :white, :default_white then 37 + when :default then 39 + else + 39 + end + end + + def out_c(mode, colour, str) + case RUBY_PLATFORM + when /(win|w)32$/ + change_to(colour) + $stdout.puts str if mode == :puts + $stdout.print str if mode == :print + change_to(:default_white) + else + $stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts + $stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print + end + end +end + +def colour_puts(role, str) + ColourCommandLine.new.out_c(:puts, role, str) +end + +def colour_print(role, str) + ColourCommandLine.new.out_c(:print, role, str) +end diff --git a/firmware/asdf/test/unity/auto/colour_reporter.rb b/firmware/asdf/test/unity/auto/colour_reporter.rb new file mode 100644 index 0000000..1c3bc21 --- /dev/null +++ b/firmware/asdf/test/unity/auto/colour_reporter.rb @@ -0,0 +1,39 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require_relative 'colour_prompt' + +$colour_output = true + +def report(message) + if !$colour_output + $stdout.puts(message) + else + message = message.join('\n') if message.class == Array + message.each_line do |line| + line.chomp! + colour = case line + when /(?:total\s+)?tests:?\s+(\d+)\s+(?:total\s+)?failures:?\s+\d+\s+Ignored:?/i + Regexp.last_match(1).to_i.zero? ? :green : :red + when /PASS/ + :green + when /^OK$/ + :green + when /(?:FAIL|ERROR)/ + :red + when /IGNORE/ + :yellow + when /^(?:Creating|Compiling|Linking)/ + :white + else + :silver + end + colour_puts(colour, line) + end + end + $stdout.flush + $stderr.flush +end diff --git a/firmware/asdf/test/unity/auto/generate_config.yml b/firmware/asdf/test/unity/auto/generate_config.yml new file mode 100644 index 0000000..4a5e474 --- /dev/null +++ b/firmware/asdf/test/unity/auto/generate_config.yml @@ -0,0 +1,36 @@ +#this is a sample configuration file for generate_module +#you would use it by calling generate_module with the -ygenerate_config.yml option +#files like this are useful for customizing generate_module to your environment +:generate_module: + :defaults: + #these defaults are used in place of any missing options at the command line + :path_src: ../src/ + :path_inc: ../src/ + :path_tst: ../test/ + :update_svn: true + :includes: + #use [] for no additional includes, otherwise list the includes on separate lines + :src: + - Defs.h + - Board.h + :inc: [] + :tst: + - Defs.h + - Board.h + - Exception.h + :boilerplates: + #these are inserted at the top of generated files. + #just comment out or remove if not desired. + #use %1$s where you would like the file name to appear (path/extension not included) + :src: | + //------------------------------------------- + // %1$s.c + //------------------------------------------- + :inc: | + //------------------------------------------- + // %1$s.h + //------------------------------------------- + :tst: | + //------------------------------------------- + // Test%1$s.c : Units tests for %1$s.c + //------------------------------------------- diff --git a/firmware/asdf/test/unity/auto/generate_module.rb b/firmware/asdf/test/unity/auto/generate_module.rb new file mode 100644 index 0000000..fb8c7ac --- /dev/null +++ b/firmware/asdf/test/unity/auto/generate_module.rb @@ -0,0 +1,306 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +# This script creates all the files with start code necessary for a new module. +# A simple module only requires a source file, header file, and test file. +# Triad modules require a source, header, and test file for each triad type (like model, conductor, and hardware). + +require 'rubygems' +require 'fileutils' +require 'pathname' + +# TEMPLATE_TST +TEMPLATE_TST ||= '#include "unity.h" +%2$s#include "%1$s.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_%1$s_NeedToImplement(void) +{ + TEST_IGNORE_MESSAGE("Need to Implement %1$s"); +} +'.freeze + +# TEMPLATE_SRC +TEMPLATE_SRC ||= '%2$s#include "%1$s.h" +'.freeze + +# TEMPLATE_INC +TEMPLATE_INC ||= '#ifndef _%3$s_H +#define _%3$s_H +%2$s + +#endif // _%3$s_H +'.freeze + +class UnityModuleGenerator + ############################ + def initialize(options = nil) + @options = UnityModuleGenerator.default_options + case options + when NilClass then @options + when String then @options.merge!(UnityModuleGenerator.grab_config(options)) + when Hash then @options.merge!(options) + else raise 'If you specify arguments, it should be a filename or a hash of options' + end + + # Create default file paths if none were provided + @options[:path_src] = "#{__dir__}/../src/" if @options[:path_src].nil? + @options[:path_inc] = @options[:path_src] if @options[:path_inc].nil? + @options[:path_tst] = "#{__dir__}/../test/" if @options[:path_tst].nil? + @options[:path_src] += '/' unless @options[:path_src][-1] == 47 + @options[:path_inc] += '/' unless @options[:path_inc][-1] == 47 + @options[:path_tst] += '/' unless @options[:path_tst][-1] == 47 + + # Built in patterns + @patterns = { + 'src' => { + '' => { inc: [] } + }, + 'test' => { + '' => { inc: [] } + }, + 'dh' => { + 'Driver' => { inc: [create_filename('%1$s', 'Hardware.h')] }, + 'Hardware' => { inc: [] } + }, + 'dih' => { + 'Driver' => { inc: [create_filename('%1$s', 'Hardware.h'), create_filename('%1$s', 'Interrupt.h')] }, + 'Interrupt' => { inc: [create_filename('%1$s', 'Hardware.h')] }, + 'Hardware' => { inc: [] } + }, + 'mch' => { + 'Model' => { inc: [] }, + 'Conductor' => { inc: [create_filename('%1$s', 'Model.h'), create_filename('%1$s', 'Hardware.h')] }, + 'Hardware' => { inc: [] } + }, + 'mvp' => { + 'Model' => { inc: [] }, + 'Presenter' => { inc: [create_filename('%1$s', 'Model.h'), create_filename('%1$s', 'View.h')] }, + 'View' => { inc: [] } + } + } + end + + ############################ + def self.default_options + { + pattern: 'src', + includes: { + src: [], + inc: [], + tst: [] + }, + update_svn: false, + boilerplates: {}, + test_prefix: 'Test', + mock_prefix: 'Mock' + } + end + + ############################ + def self.grab_config(config_file) + options = default_options + unless config_file.nil? || config_file.empty? + require 'yaml' + yaml_guts = YAML.load_file(config_file) + options.merge!(yaml_guts[:unity] || yaml_guts[:cmock]) + raise "No :unity or :cmock section found in #{config_file}" unless options + end + options + end + + ############################ + def files_to_operate_on(module_name, pattern = nil) + # strip any leading path information from the module name and save for later + subfolder = File.dirname(module_name) + module_name = File.basename(module_name) + + # create triad definition + prefix = @options[:test_prefix] || 'Test' + triad = [{ ext: '.c', path: @options[:path_src], prefix: '', template: TEMPLATE_SRC, inc: :src, boilerplate: @options[:boilerplates][:src] }, + { ext: '.h', path: @options[:path_inc], prefix: '', template: TEMPLATE_INC, inc: :inc, boilerplate: @options[:boilerplates][:inc] }, + { ext: '.c', path: @options[:path_tst], prefix: prefix, template: TEMPLATE_TST, inc: :tst, boilerplate: @options[:boilerplates][:tst] }] + + # prepare the pattern for use + pattern = (pattern || @options[:pattern] || 'src').downcase + patterns = @patterns[pattern] + raise "ERROR: The design pattern '#{pattern}' specified isn't one that I recognize!" if patterns.nil? + + # single file patterns (currently just 'test') can reject the other parts of the triad + triad.select! { |v| v[:inc] == :tst } if pattern == 'test' + + # Assemble the path/names of the files we need to work with. + files = [] + triad.each do |cfg| + patterns.each_pair do |pattern_file, pattern_traits| + submodule_name = create_filename(module_name, pattern_file) + filename = cfg[:prefix] + submodule_name + cfg[:ext] + files << { + path: (Pathname.new("#{cfg[:path]}#{subfolder}") + filename).cleanpath, + name: submodule_name, + template: cfg[:template], + boilerplate: cfg[:boilerplate], + includes: case (cfg[:inc]) + when :src then (@options[:includes][:src] || []) | (pattern_traits[:inc].map { |f| format(f, module_name) }) + when :inc then (@options[:includes][:inc] || []) + when :tst then (@options[:includes][:tst] || []) | (pattern_traits[:inc].map { |f| format("#{@options[:mock_prefix]}#{f}", module_name) }) + end + } + end + end + + files + end + + ############################ + def create_filename(part1, part2 = '') + if part2.empty? + case (@options[:naming]) + when 'bumpy' then part1 + when 'camel' then part1 + when 'snake' then part1.downcase + when 'caps' then part1.upcase + else part1 + end + else + case (@options[:naming]) + when 'bumpy' then part1 + part2 + when 'camel' then part1 + part2 + when 'snake' then part1.downcase + '_' + part2.downcase + when 'caps' then part1.upcase + '_' + part2.upcase + else part1 + '_' + part2 + end + end + end + + ############################ + def generate(module_name, pattern = nil) + files = files_to_operate_on(module_name, pattern) + + # Abort if all of the module files already exist + all_files_exist = true + files.each do |file| + all_files_exist = false unless File.exist?(file[:path]) + end + raise "ERROR: File #{files[0][:name]} already exists. Exiting." if all_files_exist + + # Create Source Modules + files.each_with_index do |file, _i| + # If this file already exists, don't overwrite it. + if File.exist?(file[:path]) + puts "File #{file[:path]} already exists!" + next + end + # Create the path first if necessary. + FileUtils.mkdir_p(File.dirname(file[:path]), verbose: false) + File.open(file[:path], 'w') do |f| + f.write("#{file[:boilerplate]}\n" % [file[:name]]) unless file[:boilerplate].nil? + f.write(file[:template] % [file[:name], + file[:includes].map { |ff| "#include \"#{ff}\"\n" }.join, + file[:name].upcase]) + end + if @options[:update_svn] + `svn add \"#{file[:path]}\"` + if $!.exitstatus.zero? + puts "File #{file[:path]} created and added to source control" + else + puts "File #{file[:path]} created but FAILED adding to source control!" + end + else + puts "File #{file[:path]} created" + end + end + puts 'Generate Complete' + end + + ############################ + def destroy(module_name, pattern = nil) + files_to_operate_on(module_name, pattern).each do |filespec| + file = filespec[:path] + if File.exist?(file) + if @options[:update_svn] + `svn delete \"#{file}\" --force` + puts "File #{file} deleted and removed from source control" + else + FileUtils.remove(file) + puts "File #{file} deleted" + end + else + puts "File #{file} does not exist so cannot be removed." + end + end + puts 'Destroy Complete' + end +end + +############################ +# Handle As Command Line If Called That Way +if $0 == __FILE__ + destroy = false + options = {} + module_name = nil + + # Parse the command line parameters. + ARGV.each do |arg| + case arg + when /^-d/ then destroy = true + when /^-u/ then options[:update_svn] = true + when /^-p\"?(\w+)\"?/ then options[:pattern] = Regexp.last_match(1) + when /^-s\"?(.+)\"?/ then options[:path_src] = Regexp.last_match(1) + when /^-i\"?(.+)\"?/ then options[:path_inc] = Regexp.last_match(1) + when /^-t\"?(.+)\"?/ then options[:path_tst] = Regexp.last_match(1) + when /^-n\"?(.+)\"?/ then options[:naming] = Regexp.last_match(1) + when /^-y\"?(.+)\"?/ then options = UnityModuleGenerator.grab_config(Regexp.last_match(1)) + when /^(\w+)/ + raise "ERROR: You can't have more than one Module name specified!" unless module_name.nil? + module_name = arg + when /^-(h|-help)/ + ARGV = [].freeze + else + raise "ERROR: Unknown option specified '#{arg}'" + end + end + + unless ARGV[0] + puts ["\nGENERATE MODULE\n-------- ------", + "\nUsage: ruby generate_module [options] module_name", + " -i\"include\" sets the path to output headers to 'include' (DEFAULT ../src)", + " -s\"../src\" sets the path to output source to '../src' (DEFAULT ../src)", + " -t\"C:/test\" sets the path to output source to 'C:/test' (DEFAULT ../test)", + ' -p"MCH" sets the output pattern to MCH.', + ' dh - driver hardware.', + ' dih - driver interrupt hardware.', + ' mch - model conductor hardware.', + ' mvp - model view presenter.', + ' src - just a source module, header and test. (DEFAULT)', + ' test - just a test file.', + ' -d destroy module instead of creating it.', + ' -n"camel" sets the file naming convention.', + ' bumpy - BumpyCaseFilenames.', + ' camel - camelCaseFilenames.', + ' snake - snake_case_filenames.', + ' caps - CAPS_CASE_FILENAMES.', + ' -u update subversion too (requires subversion command line)', + ' -y"my.yml" selects a different yaml config file for module generation', + ''].join("\n") + exit + end + + raise 'ERROR: You must have a Module name specified! (use option -h for help)' if module_name.nil? + if destroy + UnityModuleGenerator.new(options).destroy(module_name) + else + UnityModuleGenerator.new(options).generate(module_name) + end + +end diff --git a/firmware/asdf/test/unity/auto/generate_test_runner.rb b/firmware/asdf/test/unity/auto/generate_test_runner.rb new file mode 100644 index 0000000..2acda0f --- /dev/null +++ b/firmware/asdf/test/unity/auto/generate_test_runner.rb @@ -0,0 +1,471 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +class UnityTestRunnerGenerator + def initialize(options = nil) + @options = UnityTestRunnerGenerator.default_options + case options + when NilClass then @options + when String then @options.merge!(UnityTestRunnerGenerator.grab_config(options)) + when Hash then @options.merge!(options) + else raise 'If you specify arguments, it should be a filename or a hash of options' + end + require_relative 'type_sanitizer' + end + + def self.default_options + { + includes: [], + defines: [], + plugins: [], + framework: :unity, + test_prefix: 'test|spec|should', + mock_prefix: 'Mock', + mock_suffix: '', + setup_name: 'setUp', + teardown_name: 'tearDown', + main_name: 'main', # set to :auto to automatically generate each time + main_export_decl: '', + cmdline_args: false, + use_param_tests: false + } + end + + def self.grab_config(config_file) + options = default_options + unless config_file.nil? || config_file.empty? + require 'yaml' + yaml_guts = YAML.load_file(config_file) + options.merge!(yaml_guts[:unity] || yaml_guts[:cmock]) + raise "No :unity or :cmock section found in #{config_file}" unless options + end + options + end + + def run(input_file, output_file, options = nil) + @options.merge!(options) unless options.nil? + + # pull required data from source file + source = File.read(input_file) + source = source.force_encoding('ISO-8859-1').encode('utf-8', replace: nil) + tests = find_tests(source) + headers = find_includes(source) + testfile_includes = (headers[:local] + headers[:system]) + used_mocks = find_mocks(testfile_includes) + testfile_includes = (testfile_includes - used_mocks) + testfile_includes.delete_if { |inc| inc =~ /(unity|cmock)/ } + + # build runner file + generate(input_file, output_file, tests, used_mocks, testfile_includes) + + # determine which files were used to return them + all_files_used = [input_file, output_file] + all_files_used += testfile_includes.map { |filename| filename + '.c' } unless testfile_includes.empty? + all_files_used += @options[:includes] unless @options[:includes].empty? + all_files_used += headers[:linkonly] unless headers[:linkonly].empty? + all_files_used.uniq + end + + def generate(input_file, output_file, tests, used_mocks, testfile_includes) + File.open(output_file, 'w') do |output| + create_header(output, used_mocks, testfile_includes) + create_externs(output, tests, used_mocks) + create_mock_management(output, used_mocks) + create_suite_setup(output) + create_suite_teardown(output) + create_reset(output, used_mocks) + create_main(output, input_file, tests, used_mocks) + end + + return unless @options[:header_file] && !@options[:header_file].empty? + + File.open(@options[:header_file], 'w') do |output| + create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks) + end + end + + def find_tests(source) + tests_and_line_numbers = [] + + # contains characters which will be substituted from within strings, doing + # this prevents these characters from interferring with scrubbers + # @ is not a valid C character, so there should be no clashes with files genuinely containing these markers + substring_subs = { '{' => '@co@', '}' => '@cc@', ';' => '@ss@', '/' => '@fs@' } + substring_re = Regexp.union(substring_subs.keys) + substring_unsubs = substring_subs.invert # the inverse map will be used to fix the strings afterwords + substring_unsubs['@quote@'] = '\\"' + substring_unsubs['@apos@'] = '\\\'' + substring_unre = Regexp.union(substring_unsubs.keys) + source_scrubbed = source.clone + source_scrubbed = source_scrubbed.gsub(/\\"/, '@quote@') # hide escaped quotes to allow capture of the full string/char + source_scrubbed = source_scrubbed.gsub(/\\'/, '@apos@') # hide escaped apostrophes to allow capture of the full string/char + source_scrubbed = source_scrubbed.gsub(/("[^"\n]*")|('[^'\n]*')/) { |s| s.gsub(substring_re, substring_subs) } # temporarily hide problematic + # characters within strings + source_scrubbed = source_scrubbed.gsub(/\/\/.*$/, '') # remove line comments + source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments + lines = source_scrubbed.split(/(^\s*\#.*$) # Treat preprocessor directives as a logical line + | (;|\{|\}) /x) # Match ;, {, and } as end of lines + .map { |line| line.gsub(substring_unre, substring_unsubs) } # unhide the problematic characters previously removed + + lines.each_with_index do |line, _index| + # find tests + next unless line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/ + arguments = Regexp.last_match(1) + name = Regexp.last_match(2) + call = Regexp.last_match(3) + params = Regexp.last_match(4) + args = nil + if @options[:use_param_tests] && !arguments.empty? + args = [] + arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) { |a| args << a[0] } + end + tests_and_line_numbers << { test: name, args: args, call: call, params: params, line_number: 0 } + end + tests_and_line_numbers.uniq! { |v| v[:test] } + + # determine line numbers and create tests to run + source_lines = source.split("\n") + source_index = 0 + tests_and_line_numbers.size.times do |i| + source_lines[source_index..-1].each_with_index do |line, index| + next unless line =~ /\s+#{tests_and_line_numbers[i][:test]}(?:\s|\()/ + source_index += index + tests_and_line_numbers[i][:line_number] = source_index + 1 + break + end + end + + tests_and_line_numbers + end + + def find_includes(source) + # remove comments (block and line, in three steps to ensure correct precedence) + source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks + source.gsub!(/\/\*.*?\*\//m, '') # remove block comments + source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain) + + # parse out includes + includes = { + local: source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten, + system: source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" }, + linkonly: source.scan(/^TEST_FILE\(\s*\"\s*(.+)\.[cC]\w*\s*\"/).flatten + } + includes + end + + def find_mocks(includes) + mock_headers = [] + includes.each do |include_path| + include_file = File.basename(include_path) + mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}.*#{@options[:mock_suffix]}$/i + end + mock_headers + end + + def create_header(output, mocks, testfile_includes = []) + output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */') + create_runtest(output, mocks) + output.puts("\n/*=======Automagically Detected Files To Include=====*/") + output.puts('#ifdef __WIN32__') + output.puts('#define UNITY_INCLUDE_SETUP_STUBS') + output.puts('#endif') + output.puts("#include \"#{@options[:framework]}.h\"") + output.puts('#include "cmock.h"') unless mocks.empty? + output.puts('#ifndef UNITY_EXCLUDE_SETJMP_H') + output.puts('#include ') + output.puts('#endif') + output.puts('#include ') + if @options[:defines] && !@options[:defines].empty? + @options[:defines].each { |d| output.puts("#ifndef #{d}\n#define #{d}\n#endif /* #{d} */") } + end + if @options[:header_file] && !@options[:header_file].empty? + output.puts("#include \"#{File.basename(@options[:header_file])}\"") + else + @options[:includes].flatten.uniq.compact.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}") + end + testfile_includes.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}") + end + end + mocks.each do |mock| + output.puts("#include \"#{mock.gsub('.h', '')}.h\"") + end + output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception) + + return unless @options[:enforce_strict_ordering] + + output.puts('') + output.puts('int GlobalExpectCount;') + output.puts('int GlobalVerifyOrder;') + output.puts('char* GlobalOrderError;') + end + + def create_externs(output, tests, _mocks) + output.puts("\n/*=======External Functions This Runner Calls=====*/") + output.puts("extern void #{@options[:setup_name]}(void);") + output.puts("extern void #{@options[:teardown_name]}(void);") + output.puts("\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif") if @options[:externc] + tests.each do |test| + output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});") + end + output.puts("#ifdef __cplusplus\n}\n#endif") if @options[:externc] + output.puts('') + end + + def create_mock_management(output, mock_headers) + return if mock_headers.empty? + + output.puts("\n/*=======Mock Management=====*/") + output.puts('static void CMock_Init(void)') + output.puts('{') + + if @options[:enforce_strict_ordering] + output.puts(' GlobalExpectCount = 0;') + output.puts(' GlobalVerifyOrder = 0;') + output.puts(' GlobalOrderError = NULL;') + end + + mocks = mock_headers.map { |mock| File.basename(mock) } + mocks.each do |mock| + mock_clean = TypeSanitizer.sanitize_c_identifier(mock) + output.puts(" #{mock_clean}_Init();") + end + output.puts("}\n") + + output.puts('static void CMock_Verify(void)') + output.puts('{') + mocks.each do |mock| + mock_clean = TypeSanitizer.sanitize_c_identifier(mock) + output.puts(" #{mock_clean}_Verify();") + end + output.puts("}\n") + + output.puts('static void CMock_Destroy(void)') + output.puts('{') + mocks.each do |mock| + mock_clean = TypeSanitizer.sanitize_c_identifier(mock) + output.puts(" #{mock_clean}_Destroy();") + end + output.puts("}\n") + end + + def create_suite_setup(output) + output.puts("\n/*=======Suite Setup=====*/") + output.puts('static void suite_setup(void)') + output.puts('{') + if @options[:suite_setup].nil? + # New style, call suiteSetUp() if we can use weak symbols + output.puts('#if defined(UNITY_WEAK_ATTRIBUTE) || defined(UNITY_WEAK_PRAGMA)') + output.puts(' suiteSetUp();') + output.puts('#endif') + else + # Old style, C code embedded in the :suite_setup option + output.puts(@options[:suite_setup]) + end + output.puts('}') + end + + def create_suite_teardown(output) + output.puts("\n/*=======Suite Teardown=====*/") + output.puts('static int suite_teardown(int num_failures)') + output.puts('{') + if @options[:suite_teardown].nil? + # New style, call suiteTearDown() if we can use weak symbols + output.puts('#if defined(UNITY_WEAK_ATTRIBUTE) || defined(UNITY_WEAK_PRAGMA)') + output.puts(' return suiteTearDown(num_failures);') + output.puts('#else') + output.puts(' return num_failures;') + output.puts('#endif') + else + # Old style, C code embedded in the :suite_teardown option + output.puts(@options[:suite_teardown]) + end + output.puts('}') + end + + def create_runtest(output, used_mocks) + cexception = @options[:plugins].include? :cexception + va_args1 = @options[:use_param_tests] ? ', ...' : '' + va_args2 = @options[:use_param_tests] ? '__VA_ARGS__' : '' + output.puts("\n/*=======Test Runner Used To Run Each Test Below=====*/") + output.puts('#define RUN_TEST_NO_ARGS') if @options[:use_param_tests] + output.puts("#define RUN_TEST(TestFunc, TestLineNum#{va_args1}) \\") + output.puts('{ \\') + output.puts(" Unity.CurrentTestName = #TestFunc#{va_args2.empty? ? '' : " \"(\" ##{va_args2} \")\""}; \\") + output.puts(' Unity.CurrentTestLineNumber = TestLineNum; \\') + output.puts(' if (UnityTestMatches()) { \\') if @options[:cmdline_args] + output.puts(' Unity.NumberOfTests++; \\') + output.puts(' CMock_Init(); \\') unless used_mocks.empty? + output.puts(' UNITY_CLR_DETAILS(); \\') unless used_mocks.empty? + output.puts(' if (TEST_PROTECT()) \\') + output.puts(' { \\') + output.puts(' CEXCEPTION_T e; \\') if cexception + output.puts(' Try { \\') if cexception + output.puts(" #{@options[:setup_name]}(); \\") + output.puts(" TestFunc(#{va_args2}); \\") + output.puts(' } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \\') if cexception + output.puts(' } \\') + output.puts(' if (TEST_PROTECT()) \\') + output.puts(' { \\') + output.puts(" #{@options[:teardown_name]}(); \\") + output.puts(' CMock_Verify(); \\') unless used_mocks.empty? + output.puts(' } \\') + output.puts(' CMock_Destroy(); \\') unless used_mocks.empty? + output.puts(' UnityConcludeTest(); \\') + output.puts(' } \\') if @options[:cmdline_args] + output.puts("}\n") + end + + def create_reset(output, used_mocks) + output.puts("\n/*=======Test Reset Option=====*/") + output.puts('void resetTest(void);') + output.puts('void resetTest(void)') + output.puts('{') + output.puts(' CMock_Verify();') unless used_mocks.empty? + output.puts(' CMock_Destroy();') unless used_mocks.empty? + output.puts(" #{@options[:teardown_name]}();") + output.puts(' CMock_Init();') unless used_mocks.empty? + output.puts(" #{@options[:setup_name]}();") + output.puts('}') + end + + def create_main(output, filename, tests, used_mocks) + output.puts("\n\n/*=======MAIN=====*/") + main_name = @options[:main_name].to_sym == :auto ? "main_#{filename.gsub('.c', '')}" : (@options[:main_name]).to_s + if @options[:cmdline_args] + if main_name != 'main' + output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv);") + end + output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv)") + output.puts('{') + output.puts(' int parse_status = UnityParseOptions(argc, argv);') + output.puts(' if (parse_status != 0)') + output.puts(' {') + output.puts(' if (parse_status < 0)') + output.puts(' {') + output.puts(" UnityPrint(\"#{filename.gsub('.c', '')}.\");") + output.puts(' UNITY_PRINT_EOL();') + if @options[:use_param_tests] + tests.each do |test| + if test[:args].nil? || test[:args].empty? + output.puts(" UnityPrint(\" #{test[:test]}(RUN_TEST_NO_ARGS)\");") + output.puts(' UNITY_PRINT_EOL();') + else + test[:args].each do |args| + output.puts(" UnityPrint(\" #{test[:test]}(#{args})\");") + output.puts(' UNITY_PRINT_EOL();') + end + end + end + else + tests.each { |test| output.puts(" UnityPrint(\" #{test[:test]}\");\n UNITY_PRINT_EOL();") } + end + output.puts(' return 0;') + output.puts(' }') + output.puts(' return parse_status;') + output.puts(' }') + else + if main_name != 'main' + output.puts("#{@options[:main_export_decl]} int #{main_name}(void);") + end + output.puts("int #{main_name}(void)") + output.puts('{') + end + output.puts(' suite_setup();') + output.puts(" UnityBegin(\"#{filename.gsub(/\\/, '\\\\\\')}\");") + if @options[:use_param_tests] + tests.each do |test| + if test[:args].nil? || test[:args].empty? + output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);") + else + test[:args].each { |args| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, #{args});") } + end + end + else + tests.each { |test| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]});") } + end + output.puts + output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty? + output.puts(' return suite_teardown(UnityEnd());') + output.puts('}') + end + + def create_h_file(output, filename, tests, testfile_includes, used_mocks) + filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, '_').upcase + output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */') + output.puts("#ifndef _#{filename}") + output.puts("#define _#{filename}\n\n") + output.puts("#include \"#{@options[:framework]}.h\"") + output.puts('#include "cmock.h"') unless used_mocks.empty? + @options[:includes].flatten.uniq.compact.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}") + end + testfile_includes.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}") + end + output.puts "\n" + tests.each do |test| + if test[:params].nil? || test[:params].empty? + output.puts("void #{test[:test]}(void);") + else + output.puts("void #{test[:test]}(#{test[:params]});") + end + end + output.puts("#endif\n\n") + end +end + +if $0 == __FILE__ + options = { includes: [] } + + # parse out all the options first (these will all be removed as we go) + ARGV.reject! do |arg| + case arg + when '-cexception' + options[:plugins] = [:cexception] + true + when /\.*\.ya?ml/ + options = UnityTestRunnerGenerator.grab_config(arg) + true + when /--(\w+)=\"?(.*)\"?/ + options[Regexp.last_match(1).to_sym] = Regexp.last_match(2) + true + when /\.*\.h/ + options[:includes] << arg + true + else false + end + end + + # make sure there is at least one parameter left (the input file) + unless ARGV[0] + puts ["\nusage: ruby #{__FILE__} (files) (options) input_test_file (output)", + "\n input_test_file - this is the C file you want to create a runner for", + ' output - this is the name of the runner file to generate', + ' defaults to (input_test_file)_Runner', + ' files:', + ' *.yml / *.yaml - loads configuration from here in :unity or :cmock', + ' *.h - header files are added as #includes in runner', + ' options:', + ' -cexception - include cexception support', + ' -externc - add extern "C" for cpp support', + ' --setup_name="" - redefine setUp func name to something else', + ' --teardown_name="" - redefine tearDown func name to something else', + ' --main_name="" - redefine main func name to something else', + ' --test_prefix="" - redefine test prefix from default test|spec|should', + ' --suite_setup="" - code to execute for setup of entire suite', + ' --suite_teardown="" - code to execute for teardown of entire suite', + ' --use_param_tests=1 - enable parameterized tests (disabled by default)', + ' --header_file="" - path/name of test header file to generate too'].join("\n") + exit 1 + end + + # create the default test runner name if not specified + ARGV[1] = ARGV[0].gsub('.c', '_Runner.c') unless ARGV[1] + + UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1]) +end diff --git a/firmware/asdf/test/unity/auto/parse_output.rb b/firmware/asdf/test/unity/auto/parse_output.rb new file mode 100644 index 0000000..fa07b7d --- /dev/null +++ b/firmware/asdf/test/unity/auto/parse_output.rb @@ -0,0 +1,322 @@ +#============================================================ +# Author: John Theofanopoulos +# A simple parser. Takes the output files generated during the +# build process and extracts information relating to the tests. +# +# Notes: +# To capture an output file under VS builds use the following: +# devenv [build instructions] > Output.txt & type Output.txt +# +# To capture an output file under Linux builds use the following: +# make | tee Output.txt +# +# This script can handle the following output formats: +# - normal output (raw unity) +# - fixture output (unity_fixture.h/.c) +# - fixture output with verbose flag set ("-v") +# +# To use this parser use the following command +# ruby parseOutput.rb [options] [file] +# options: -xml : produce a JUnit compatible XML file +# file: file to scan for results +#============================================================ + +# Parser class for handling the input file +class ParseOutput + def initialize + # internal data + @class_name_idx = 0 + @path_delim = nil + + # xml output related + @xml_out = false + @array_list = false + + # current suite name and statistics + @test_suite = nil + @total_tests = 0 + @test_passed = 0 + @test_failed = 0 + @test_ignored = 0 + end + + # Set the flag to indicate if there will be an XML output file or not + def set_xml_output + @xml_out = true + end + + # If write our output to XML + def write_xml_output + output = File.open('report.xml', 'w') + output << "\n" + @array_list.each do |item| + output << item << "\n" + end + end + + # Pushes the suite info as xml to the array list, which will be written later + def push_xml_output_suite_info + # Insert opening tag at front + heading = '' + @array_list.insert(0, heading) + # Push back the closing tag + @array_list.push '' + end + + # Pushes xml output data to the array list, which will be written later + def push_xml_output_passed(test_name) + @array_list.push ' ' + end + + # Pushes xml output data to the array list, which will be written later + def push_xml_output_failed(test_name, reason) + @array_list.push ' ' + @array_list.push ' ' + reason + '' + @array_list.push ' ' + end + + # Pushes xml output data to the array list, which will be written later + def push_xml_output_ignored(test_name, reason) + @array_list.push ' ' + @array_list.push ' ' + reason + '' + @array_list.push ' ' + end + + # This function will try and determine when the suite is changed. This is + # is the name that gets added to the classname parameter. + def test_suite_verify(test_suite_name) + # Split the path name + test_name = test_suite_name.split(@path_delim) + + # Remove the extension and extract the base_name + base_name = test_name[test_name.size - 1].split('.')[0] + + # Return if the test suite hasn't changed + return unless base_name.to_s != @test_suite.to_s + + @test_suite = base_name + printf "New Test: %s\n", @test_suite + end + + # Prepares the line for verbose fixture output ("-v") + def prepare_fixture_line(line) + line = line.sub('IGNORE_TEST(', '') + line = line.sub('TEST(', '') + line = line.sub(')', ',') + line = line.chomp + array = line.split(',') + array.map { |x| x.to_s.lstrip.chomp } + end + + # Test was flagged as having passed so format the output. + # This is using the Unity fixture output and not the original Unity output. + def test_passed_unity_fixture(array) + class_name = array[0] + test_name = array[1] + test_suite_verify(class_name) + printf "%-40s PASS\n", test_name + + push_xml_output_passed(test_name) if @xml_out + end + + # Test was flagged as having failed so format the output. + # This is using the Unity fixture output and not the original Unity output. + def test_failed_unity_fixture(array) + class_name = array[0] + test_name = array[1] + test_suite_verify(class_name) + reason_array = array[2].split(':') + reason = reason_array[-1].lstrip.chomp + ' at line: ' + reason_array[-4] + + printf "%-40s FAILED\n", test_name + + push_xml_output_failed(test_name, reason) if @xml_out + end + + # Test was flagged as being ignored so format the output. + # This is using the Unity fixture output and not the original Unity output. + def test_ignored_unity_fixture(array) + class_name = array[0] + test_name = array[1] + reason = 'No reason given' + if array.size > 2 + reason_array = array[2].split(':') + tmp_reason = reason_array[-1].lstrip.chomp + reason = tmp_reason == 'IGNORE' ? 'No reason given' : tmp_reason + end + test_suite_verify(class_name) + printf "%-40s IGNORED\n", test_name + + push_xml_output_ignored(test_name, reason) if @xml_out + end + + # Test was flagged as having passed so format the output + def test_passed(array) + last_item = array.length - 1 + test_name = array[last_item - 1] + test_suite_verify(array[@class_name_idx]) + printf "%-40s PASS\n", test_name + + return unless @xml_out + + push_xml_output_passed(test_name) if @xml_out + end + + # Test was flagged as having failed so format the line + def test_failed(array) + last_item = array.length - 1 + test_name = array[last_item - 2] + reason = array[last_item].chomp.lstrip + ' at line: ' + array[last_item - 3] + class_name = array[@class_name_idx] + + if test_name.start_with? 'TEST(' + array2 = test_name.split(' ') + + test_suite = array2[0].sub('TEST(', '') + test_suite = test_suite.sub(',', '') + class_name = test_suite + + test_name = array2[1].sub(')', '') + end + + test_suite_verify(class_name) + printf "%-40s FAILED\n", test_name + + push_xml_output_failed(test_name, reason) if @xml_out + end + + # Test was flagged as being ignored so format the output + def test_ignored(array) + last_item = array.length - 1 + test_name = array[last_item - 2] + reason = array[last_item].chomp.lstrip + class_name = array[@class_name_idx] + + if test_name.start_with? 'TEST(' + array2 = test_name.split(' ') + + test_suite = array2[0].sub('TEST(', '') + test_suite = test_suite.sub(',', '') + class_name = test_suite + + test_name = array2[1].sub(')', '') + end + + test_suite_verify(class_name) + printf "%-40s IGNORED\n", test_name + + push_xml_output_ignored(test_name, reason) if @xml_out + end + + # Adjusts the os specific members according to the current path style + # (Windows or Unix based) + def detect_os_specifics(line) + if line.include? '\\' + # Windows X:\Y\Z + @class_name_idx = 1 + @path_delim = '\\' + else + # Unix Based /X/Y/Z + @class_name_idx = 0 + @path_delim = '/' + end + end + + # Main function used to parse the file that was captured. + def process(file_name) + @array_list = [] + + puts 'Parsing file: ' + file_name + + @test_passed = 0 + @test_failed = 0 + @test_ignored = 0 + puts '' + puts '=================== RESULTS =====================' + puts '' + File.open(file_name).each do |line| + # Typical test lines look like these: + # ---------------------------------------------------- + # 1. normal output: + # /.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0 + # /.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented + # /.c:115:test_tc5100_initCanVoidPtrs:PASS + # + # 2. fixture output + # /.c:63:TEST(, ):FAIL: Expected 0x00001234 Was 0x00005A5A + # /.c:36:TEST(, ):IGNORE + # Note: "PASS" information won't be generated in this mode + # + # 3. fixture output with verbose information ("-v") + # TEST()/:168::FAIL: Expected 0x8D Was 0x8C + # TEST(, )/:22::IGNORE: This Test Was Ignored On Purpose + # IGNORE_TEST() + # TEST() PASS + # + # Note: Where path is different on Unix vs Windows devices (Windows leads with a drive letter)! + detect_os_specifics(line) + line_array = line.split(':') + + # If we were able to split the line then we can look to see if any of our target words + # were found. Case is important. + next unless (line_array.size >= 4) || (line.start_with? 'TEST(') || (line.start_with? 'IGNORE_TEST(') + + # check if the output is fixture output (with verbose flag "-v") + if (line.start_with? 'TEST(') || (line.start_with? 'IGNORE_TEST(') + line_array = prepare_fixture_line(line) + if line.include? ' PASS' + test_passed_unity_fixture(line_array) + @test_passed += 1 + elsif line.include? 'FAIL' + test_failed_unity_fixture(line_array) + @test_failed += 1 + elsif line.include? 'IGNORE' + test_ignored_unity_fixture(line_array) + @test_ignored += 1 + end + # normal output / fixture output (without verbose "-v") + elsif line.include? ':PASS' + test_passed(line_array) + @test_passed += 1 + elsif line.include? ':FAIL' + test_failed(line_array) + @test_failed += 1 + elsif line.include? ':IGNORE:' + test_ignored(line_array) + @test_ignored += 1 + elsif line.include? ':IGNORE' + line_array.push('No reason given') + test_ignored(line_array) + @test_ignored += 1 + end + @total_tests = @test_passed + @test_failed + @test_ignored + end + puts '' + puts '=================== SUMMARY =====================' + puts '' + puts 'Tests Passed : ' + @test_passed.to_s + puts 'Tests Failed : ' + @test_failed.to_s + puts 'Tests Ignored : ' + @test_ignored.to_s + + return unless @xml_out + + # push information about the suite + push_xml_output_suite_info + # write xml output file + write_xml_output + end +end + +# If the command line has no values in, used a default value of Output.txt +parse_my_file = ParseOutput.new + +if ARGV.size >= 1 + ARGV.each do |arg| + if arg == '-xml' + parse_my_file.set_xml_output + else + parse_my_file.process(arg) + break + end + end +end diff --git a/firmware/asdf/test/unity/auto/stylize_as_junit.rb b/firmware/asdf/test/unity/auto/stylize_as_junit.rb new file mode 100755 index 0000000..a53f85f --- /dev/null +++ b/firmware/asdf/test/unity/auto/stylize_as_junit.rb @@ -0,0 +1,248 @@ +#!/usr/bin/ruby +# +# unity_to_junit.rb +# +require 'fileutils' +require 'optparse' +require 'ostruct' +require 'set' + +require 'pp' + +VERSION = 1.0 + +class ArgvParser + # + # Return a structure describing the options. + # + def self.parse(args) + # The options specified on the command line will be collected in *options*. + # We set default values here. + options = OpenStruct.new + options.results_dir = '.' + options.root_path = '.' + options.out_file = 'results.xml' + + opts = OptionParser.new do |o| + o.banner = 'Usage: unity_to_junit.rb [options]' + + o.separator '' + o.separator 'Specific options:' + + o.on('-r', '--results ', 'Look for Unity Results files here.') do |results| + # puts "results #{results}" + options.results_dir = results + end + + o.on('-p', '--root_path ', 'Prepend this path to files in results.') do |root_path| + options.root_path = root_path + end + + o.on('-o', '--output ', 'XML file to generate.') do |out_file| + # puts "out_file: #{out_file}" + options.out_file = out_file + end + + o.separator '' + o.separator 'Common options:' + + # No argument, shows at tail. This will print an options summary. + o.on_tail('-h', '--help', 'Show this message') do + puts o + exit + end + + # Another typical switch to print the version. + o.on_tail('--version', 'Show version') do + puts "unity_to_junit.rb version #{VERSION}" + exit + end + end + + opts.parse!(args) + options + end +end + +class UnityToJUnit + include FileUtils::Verbose + attr_reader :report, :total_tests, :failures, :ignored + attr_writer :targets, :root, :out_file + + def initialize + @report = '' + @unit_name = '' + end + + def run + # Clean up result file names + results = @targets.map { |target| target.tr('\\', '/') } + # puts "Output File: #{@out_file}" + f = File.new(@out_file, 'w') + write_xml_header(f) + write_suites_header(f) + results.each do |result_file| + lines = File.readlines(result_file).map(&:chomp) + + raise "Empty test result file: #{result_file}" if lines.empty? + + result_output = get_details(result_file, lines) + tests, failures, ignored = parse_test_summary(lines) + result_output[:counts][:total] = tests + result_output[:counts][:failed] = failures + result_output[:counts][:ignored] = ignored + result_output[:counts][:passed] = (result_output[:counts][:total] - result_output[:counts][:failed] - result_output[:counts][:ignored]) + + # use line[0] from the test output to get the test_file path and name + test_file_str = lines[0].tr('\\', '/') + test_file_str = test_file_str.split(':') + test_file = if test_file_str.length < 2 + result_file + else + test_file_str[0] + ':' + test_file_str[1] + end + result_output[:source][:path] = File.dirname(test_file) + result_output[:source][:file] = File.basename(test_file) + + # save result_output + @unit_name = File.basename(test_file, '.*') + + write_suite_header(result_output[:counts], f) + write_failures(result_output, f) + write_tests(result_output, f) + write_ignored(result_output, f) + write_suite_footer(f) + end + write_suites_footer(f) + f.close + end + + def usage(err_msg = nil) + puts "\nERROR: " + puts err_msg if err_msg + puts 'Usage: unity_to_junit.rb [options]' + puts '' + puts 'Specific options:' + puts ' -r, --results Look for Unity Results files here.' + puts ' -p, --root_path Prepend this path to files in results.' + puts ' -o, --output XML file to generate.' + puts '' + puts 'Common options:' + puts ' -h, --help Show this message' + puts ' --version Show version' + + exit 1 + end + + protected + + def get_details(_result_file, lines) + results = results_structure + lines.each do |line| + line = line.tr('\\', '/') + _src_file, src_line, test_name, status, msg = line.split(/:/) + case status + when 'IGNORE' then results[:ignores] << { test: test_name, line: src_line, message: msg } + when 'FAIL' then results[:failures] << { test: test_name, line: src_line, message: msg } + when 'PASS' then results[:successes] << { test: test_name, line: src_line, message: msg } + end + end + results + end + + def parse_test_summary(summary) + raise "Couldn't parse test results: #{summary}" unless summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ } + [Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i] + end + + private + + def results_structure + { + source: { path: '', file: '' }, + successes: [], + failures: [], + ignores: [], + counts: { total: 0, passed: 0, failed: 0, ignored: 0 }, + stdout: [] + } + end + + def write_xml_header(stream) + stream.puts "" + end + + def write_suites_header(stream) + stream.puts '' + end + + def write_suite_header(counts, stream) + stream.puts "\t" + end + + def write_failures(results, stream) + result = results[:failures] + result.each do |item| + filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*')) + stream.puts "\t\t" + stream.puts "\t\t\t" + stream.puts "\t\t\t [File] #{filename} [Line] #{item[:line]} " + stream.puts "\t\t" + end + end + + def write_tests(results, stream) + result = results[:successes] + result.each do |item| + stream.puts "\t\t" + end + end + + def write_ignored(results, stream) + result = results[:ignores] + result.each do |item| + filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*')) + puts "Writing ignored tests for test harness: #{filename}" + stream.puts "\t\t" + stream.puts "\t\t\t" + stream.puts "\t\t\t [File] #{filename} [Line] #{item[:line]} " + stream.puts "\t\t" + end + end + + def write_suite_footer(stream) + stream.puts "\t" + end + + def write_suites_footer(stream) + stream.puts '' + end +end + +if $0 == __FILE__ + # parse out the command options + options = ArgvParser.parse(ARGV) + + # create an instance to work with + utj = UnityToJUnit.new + begin + # look in the specified or current directory for result files + targets = "#{options.results_dir.tr('\\', '/')}**/*.test*" + + results = Dir[targets] + raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty? + utj.targets = results + + # set the root path + utj.root = options.root_path + + # set the output XML file name + # puts "Output File from options: #{options.out_file}" + utj.out_file = options.out_file + + # run the summarizer + puts utj.run + rescue StandardError => e + utj.usage e.message + end +end diff --git a/firmware/asdf/test/unity/auto/test_file_filter.rb b/firmware/asdf/test/unity/auto/test_file_filter.rb new file mode 100644 index 0000000..5c3a79f --- /dev/null +++ b/firmware/asdf/test/unity/auto/test_file_filter.rb @@ -0,0 +1,25 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require'yaml' + +module RakefileHelpers + class TestFileFilter + def initialize(all_files = false) + @all_files = all_files + + return unless @all_files + return unless File.exist?('test_file_filter.yml') + + filters = YAML.load_file('test_file_filter.yml') + @all_files = filters[:all_files] + @only_files = filters[:only_files] + @exclude_files = filters[:exclude_files] + end + + attr_accessor :all_files, :only_files, :exclude_files + end +end diff --git a/firmware/asdf/test/unity/auto/type_sanitizer.rb b/firmware/asdf/test/unity/auto/type_sanitizer.rb new file mode 100644 index 0000000..dafb882 --- /dev/null +++ b/firmware/asdf/test/unity/auto/type_sanitizer.rb @@ -0,0 +1,6 @@ +module TypeSanitizer + def self.sanitize_c_identifier(unsanitized) + # convert filename to valid C identifier by replacing invalid chars with '_' + unsanitized.gsub(/[-\/\\\.\,\s]/, '_') + end +end diff --git a/firmware/asdf/test/unity/auto/unity_test_summary.py b/firmware/asdf/test/unity/auto/unity_test_summary.py new file mode 100644 index 0000000..4c20e52 --- /dev/null +++ b/firmware/asdf/test/unity/auto/unity_test_summary.py @@ -0,0 +1,139 @@ +#! python3 +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2015 Alexander Mueller / XelaRellum@web.de +# [Released under MIT License. Please refer to license.txt for details] +# Based on the ruby script by Mike Karlesky, Mark VanderVoord, Greg Williams +# ========================================== +import sys +import os +import re +from glob import glob + +class UnityTestSummary: + def __init__(self): + self.report = '' + self.total_tests = 0 + self.failures = 0 + self.ignored = 0 + + def run(self): + # Clean up result file names + results = [] + for target in self.targets: + results.append(target.replace('\\', '/')) + + # Dig through each result file, looking for details on pass/fail: + failure_output = [] + ignore_output = [] + + for result_file in results: + lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n'))) + if len(lines) == 0: + raise Exception("Empty test result file: %s" % result_file) + + details = self.get_details(result_file, lines) + failures = details['failures'] + ignores = details['ignores'] + if len(failures) > 0: failure_output.append('\n'.join(failures)) + if len(ignores) > 0: ignore_output.append('n'.join(ignores)) + tests,failures,ignored = self.parse_test_summary('\n'.join(lines)) + self.total_tests += tests + self.failures += failures + self.ignored += ignored + + if self.ignored > 0: + self.report += "\n" + self.report += "--------------------------\n" + self.report += "UNITY IGNORED TEST SUMMARY\n" + self.report += "--------------------------\n" + self.report += "\n".join(ignore_output) + + if self.failures > 0: + self.report += "\n" + self.report += "--------------------------\n" + self.report += "UNITY FAILED TEST SUMMARY\n" + self.report += "--------------------------\n" + self.report += '\n'.join(failure_output) + + self.report += "\n" + self.report += "--------------------------\n" + self.report += "OVERALL UNITY TEST SUMMARY\n" + self.report += "--------------------------\n" + self.report += "{total_tests} TOTAL TESTS {failures} TOTAL FAILURES {ignored} IGNORED\n".format(total_tests = self.total_tests, failures=self.failures, ignored=self.ignored) + self.report += "\n" + + return self.report + + def set_targets(self, target_array): + self.targets = target_array + + def set_root_path(self, path): + self.root = path + + def usage(self, err_msg=None): + print("\nERROR: ") + if err_msg: + print(err_msg) + print("\nUsage: unity_test_summary.py result_file_directory/ root_path/") + print(" result_file_directory - The location of your results files.") + print(" Defaults to current directory if not specified.") + print(" Should end in / if specified.") + print(" root_path - Helpful for producing more verbose output if using relative paths.") + sys.exit(1) + + def get_details(self, result_file, lines): + results = { 'failures': [], 'ignores': [], 'successes': [] } + for line in lines: + parts = line.split(':') + if len(parts) == 5: + src_file,src_line,test_name,status,msg = parts + elif len(parts) == 4: + src_file,src_line,test_name,status = parts + msg = '' + else: + continue + if len(self.root) > 0: + line_out = "%s%s" % (self.root, line) + else: + line_out = line + if status == 'IGNORE': + results['ignores'].append(line_out) + elif status == 'FAIL': + results['failures'].append(line_out) + elif status == 'PASS': + results['successes'].append(line_out) + return results + + def parse_test_summary(self, summary): + m = re.search(r"([0-9]+) Tests ([0-9]+) Failures ([0-9]+) Ignored", summary) + if not m: + raise Exception("Couldn't parse test results: %s" % summary) + + return int(m.group(1)), int(m.group(2)), int(m.group(3)) + + +if __name__ == '__main__': + uts = UnityTestSummary() + try: + #look in the specified or current directory for result files + if len(sys.argv) > 1: + targets_dir = sys.argv[1] + else: + targets_dir = './' + targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*'))) + if len(targets) == 0: + raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir) + uts.set_targets(targets) + + #set the root path + if len(sys.argv) > 2: + root_path = sys.argv[2] + else: + root_path = os.path.split(__file__)[0] + uts.set_root_path(root_path) + + #run the summarizer + print(uts.run()) + except Exception as e: + uts.usage(e) diff --git a/firmware/asdf/test/unity/auto/unity_test_summary.rb b/firmware/asdf/test/unity/auto/unity_test_summary.rb new file mode 100644 index 0000000..810fdbd --- /dev/null +++ b/firmware/asdf/test/unity/auto/unity_test_summary.rb @@ -0,0 +1,132 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +# !/usr/bin/ruby +# +# unity_test_summary.rb +# +require 'fileutils' +require 'set' + +class UnityTestSummary + include FileUtils::Verbose + + attr_reader :report, :total_tests, :failures, :ignored + attr_writer :targets, :root + + def initialize(_opts = {}) + @report = '' + @total_tests = 0 + @failures = 0 + @ignored = 0 + end + + def run + # Clean up result file names + results = @targets.map { |target| target.tr('\\', '/') } + + # Dig through each result file, looking for details on pass/fail: + failure_output = [] + ignore_output = [] + + results.each do |result_file| + lines = File.readlines(result_file).map(&:chomp) + + raise "Empty test result file: #{result_file}" if lines.empty? + + output = get_details(result_file, lines) + failure_output << output[:failures] unless output[:failures].empty? + ignore_output << output[:ignores] unless output[:ignores].empty? + tests, failures, ignored = parse_test_summary(lines) + @total_tests += tests + @failures += failures + @ignored += ignored + end + + if @ignored > 0 + @report += "\n" + @report += "--------------------------\n" + @report += "UNITY IGNORED TEST SUMMARY\n" + @report += "--------------------------\n" + @report += ignore_output.flatten.join("\n") + end + + if @failures > 0 + @report += "\n" + @report += "--------------------------\n" + @report += "UNITY FAILED TEST SUMMARY\n" + @report += "--------------------------\n" + @report += failure_output.flatten.join("\n") + end + + @report += "\n" + @report += "--------------------------\n" + @report += "OVERALL UNITY TEST SUMMARY\n" + @report += "--------------------------\n" + @report += "#{@total_tests} TOTAL TESTS #{@failures} TOTAL FAILURES #{@ignored} IGNORED\n" + @report += "\n" + end + + def usage(err_msg = nil) + puts "\nERROR: " + puts err_msg if err_msg + puts "\nUsage: unity_test_summary.rb result_file_directory/ root_path/" + puts ' result_file_directory - The location of your results files.' + puts ' Defaults to current directory if not specified.' + puts ' Should end in / if specified.' + puts ' root_path - Helpful for producing more verbose output if using relative paths.' + exit 1 + end + + protected + + def get_details(_result_file, lines) + results = { failures: [], ignores: [], successes: [] } + lines.each do |line| + _src_file, _src_line, _test_name, status, _msg = line.split(/:/) + line_out = (@root && (@root != 0) ? "#{@root}#{line}" : line).gsub(/\//, '\\') + case status + when 'IGNORE' then results[:ignores] << line_out + when 'FAIL' then results[:failures] << line_out + when 'PASS' then results[:successes] << line_out + end + end + results + end + + def parse_test_summary(summary) + raise "Couldn't parse test results: #{summary}" unless summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ } + [Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i] + end +end + +if $0 == __FILE__ + + # parse out the command options + opts, args = ARGV.partition { |v| v =~ /^--\w+/ } + opts.map! { |v| v[2..-1].to_sym } + + # create an instance to work with + uts = UnityTestSummary.new(opts) + + begin + # look in the specified or current directory for result files + args[0] ||= './' + targets = "#{ARGV[0].tr('\\', '/')}**/*.test*" + results = Dir[targets] + raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty? + uts.targets = results + + # set the root path + args[1] ||= Dir.pwd + '/' + uts.root = ARGV[1] + + # run the summarizer + puts uts.run + rescue StandardError => e + uts.usage e.message + end +end diff --git a/firmware/asdf/test/unity/auto/unity_to_junit.py b/firmware/asdf/test/unity/auto/unity_to_junit.py new file mode 100644 index 0000000..71dd568 --- /dev/null +++ b/firmware/asdf/test/unity/auto/unity_to_junit.py @@ -0,0 +1,146 @@ +import sys +import os +from glob import glob + +from pyparsing import * +from junit_xml import TestSuite, TestCase + + +class UnityTestSummary: + def __init__(self): + self.report = '' + self.total_tests = 0 + self.failures = 0 + self.ignored = 0 + self.targets = 0 + self.root = None + self.test_suites = dict() + + def run(self): + # Clean up result file names + results = [] + for target in self.targets: + results.append(target.replace('\\', '/')) + + # Dig through each result file, looking for details on pass/fail: + for result_file in results: + lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n'))) + if len(lines) == 0: + raise Exception("Empty test result file: %s" % result_file) + + # define an expression for your file reference + entry_one = Combine( + oneOf(list(alphas)) + ':/' + + Word(alphanums + '_-./')) + + entry_two = Word(printables + ' ', excludeChars=':') + entry = entry_one | entry_two + + delimiter = Literal(':').suppress() + tc_result_line = Group(entry.setResultsName('tc_file_name') + delimiter + entry.setResultsName( + 'tc_line_nr') + delimiter + entry.setResultsName('tc_name') + delimiter + entry.setResultsName( + 'tc_status') + Optional( + delimiter + entry.setResultsName('tc_msg'))).setResultsName("tc_line") + + eol = LineEnd().suppress() + sol = LineStart().suppress() + blank_line = sol + eol + + tc_summary_line = Group(Word(nums).setResultsName("num_of_tests") + "Tests" + Word(nums).setResultsName( + "num_of_fail") + "Failures" + Word(nums).setResultsName("num_of_ignore") + "Ignored").setResultsName( + "tc_summary") + tc_end_line = Or(Literal("FAIL"), Literal('Ok')).setResultsName("tc_result") + + # run it and see... + pp1 = tc_result_line | Optional(tc_summary_line | tc_end_line) + pp1.ignore(blank_line | OneOrMore("-")) + + result = list() + for l in lines: + result.append((pp1.parseString(l)).asDict()) + # delete empty results + result = filter(None, result) + + tc_list = list() + for r in result: + if 'tc_line' in r: + tmp_tc_line = r['tc_line'] + + # get only the file name which will be used as the classname + file_name = tmp_tc_line['tc_file_name'].split('\\').pop().split('/').pop().rsplit('.', 1)[0] + tmp_tc = TestCase(name=tmp_tc_line['tc_name'], classname=file_name) + if 'tc_status' in tmp_tc_line: + if str(tmp_tc_line['tc_status']) == 'IGNORE': + if 'tc_msg' in tmp_tc_line: + tmp_tc.add_skipped_info(message=tmp_tc_line['tc_msg'], + output=r'[File]={0}, [Line]={1}'.format( + tmp_tc_line['tc_file_name'], tmp_tc_line['tc_line_nr'])) + else: + tmp_tc.add_skipped_info(message=" ") + elif str(tmp_tc_line['tc_status']) == 'FAIL': + if 'tc_msg' in tmp_tc_line: + tmp_tc.add_failure_info(message=tmp_tc_line['tc_msg'], + output=r'[File]={0}, [Line]={1}'.format( + tmp_tc_line['tc_file_name'], tmp_tc_line['tc_line_nr'])) + else: + tmp_tc.add_failure_info(message=" ") + + tc_list.append((str(result_file), tmp_tc)) + + for k, v in tc_list: + try: + self.test_suites[k].append(v) + except KeyError: + self.test_suites[k] = [v] + ts = [] + for suite_name in self.test_suites: + ts.append(TestSuite(suite_name, self.test_suites[suite_name])) + + with open('result.xml', 'w') as f: + TestSuite.to_file(f, ts, prettyprint='True', encoding='utf-8') + + return self.report + + def set_targets(self, target_array): + self.targets = target_array + + def set_root_path(self, path): + self.root = path + + @staticmethod + def usage(err_msg=None): + print("\nERROR: ") + if err_msg: + print(err_msg) + print("\nUsage: unity_test_summary.py result_file_directory/ root_path/") + print(" result_file_directory - The location of your results files.") + print(" Defaults to current directory if not specified.") + print(" Should end in / if specified.") + print(" root_path - Helpful for producing more verbose output if using relative paths.") + sys.exit(1) + + +if __name__ == '__main__': + uts = UnityTestSummary() + try: + # look in the specified or current directory for result files + if len(sys.argv) > 1: + targets_dir = sys.argv[1] + else: + targets_dir = './' + targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*'))) + if len(targets) == 0: + raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir) + uts.set_targets(targets) + + # set the root path + if len(sys.argv) > 2: + root_path = sys.argv[2] + else: + root_path = os.path.split(__file__)[0] + uts.set_root_path(root_path) + + # run the summarizer + print(uts.run()) + except Exception as e: + UnityTestSummary.usage(e) diff --git a/firmware/asdf/test/unity/unity.c b/firmware/asdf/test/unity/unity.c new file mode 100644 index 0000000..c7be02c --- /dev/null +++ b/firmware/asdf/test/unity/unity.c @@ -0,0 +1,2085 @@ +/* ========================================================================= + Unity Project - A Test Framework for C + Copyright (c) 2007-19 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +============================================================================ */ + +#include "unity.h" +#include + +#ifdef AVR +#include +#else +#define PROGMEM +#endif + +/* If omitted from header, declare overrideable prototypes here so they're ready for use */ +#ifdef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION +void UNITY_OUTPUT_CHAR(int); +#endif + +/* Helpful macros for us to use here in Assert functions */ +#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); } +#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; UNITY_OUTPUT_FLUSH(); TEST_ABORT(); } +#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return + +struct UNITY_STORAGE_T Unity; + +#ifdef UNITY_OUTPUT_COLOR +const char PROGMEM UnityStrOk[] = "\033[42mOK\033[00m"; +const char PROGMEM UnityStrPass[] = "\033[42mPASS\033[00m"; +const char PROGMEM UnityStrFail[] = "\033[41mFAIL\033[00m"; +const char PROGMEM UnityStrIgnore[] = "\033[43mIGNORE\033[00m"; +#else +const char PROGMEM UnityStrOk[] = "OK"; +const char PROGMEM UnityStrPass[] = "PASS"; +const char PROGMEM UnityStrFail[] = "FAIL"; +const char PROGMEM UnityStrIgnore[] = "IGNORE"; +#endif +static const char PROGMEM UnityStrNull[] = "NULL"; +static const char PROGMEM UnityStrSpacer[] = ". "; +static const char PROGMEM UnityStrExpected[] = " Expected "; +static const char PROGMEM UnityStrWas[] = " Was "; +static const char PROGMEM UnityStrGt[] = " to be greater than "; +static const char PROGMEM UnityStrLt[] = " to be less than "; +static const char PROGMEM UnityStrOrEqual[] = "or equal to "; +static const char PROGMEM UnityStrElement[] = " Element "; +static const char PROGMEM UnityStrByte[] = " Byte "; +static const char PROGMEM UnityStrMemory[] = " Memory Mismatch."; +static const char PROGMEM UnityStrDelta[] = " Values Not Within Delta "; +static const char PROGMEM UnityStrPointless[] = " You Asked Me To Compare Nothing, Which Was Pointless."; +static const char PROGMEM UnityStrNullPointerForExpected[] = " Expected pointer to be NULL"; +static const char PROGMEM UnityStrNullPointerForActual[] = " Actual pointer was NULL"; +#ifndef UNITY_EXCLUDE_FLOAT +static const char PROGMEM UnityStrNot[] = "Not "; +static const char PROGMEM UnityStrInf[] = "Infinity"; +static const char PROGMEM UnityStrNegInf[] = "Negative Infinity"; +static const char PROGMEM UnityStrNaN[] = "NaN"; +static const char PROGMEM UnityStrDet[] = "Determinate"; +static const char PROGMEM UnityStrInvalidFloatTrait[] = "Invalid Float Trait"; +#endif +const char PROGMEM UnityStrErrShorthand[] = "Unity Shorthand Support Disabled"; +const char PROGMEM UnityStrErrFloat[] = "Unity Floating Point Disabled"; +const char PROGMEM UnityStrErrDouble[] = "Unity Double Precision Disabled"; +const char PROGMEM UnityStrErr64[] = "Unity 64-bit Support Disabled"; +static const char PROGMEM UnityStrBreaker[] = "-----------------------"; +static const char PROGMEM UnityStrResultsTests[] = " Tests "; +static const char PROGMEM UnityStrResultsFailures[] = " Failures "; +static const char PROGMEM UnityStrResultsIgnored[] = " Ignored "; +static const char PROGMEM UnityStrDetail1Name[] = UNITY_DETAIL1_NAME " "; +static const char PROGMEM UnityStrDetail2Name[] = " " UNITY_DETAIL2_NAME " "; + +/*----------------------------------------------- + * Pretty Printers & Test Result Output Handlers + *-----------------------------------------------*/ + +/*-----------------------------------------------*/ +/* Local helper function to print characters. */ +static void UnityPrintChar(const char* pch) +{ + /* printable characters plus CR & LF are printed */ + if ((*pch <= 126) && (*pch >= 32)) + { + UNITY_OUTPUT_CHAR(*pch); + } + /* write escaped carriage returns */ + else if (*pch == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (*pch == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)*pch, 2); + } +} + +/*-----------------------------------------------*/ +/* Local helper function to print ANSI escape strings e.g. "\033[42m". */ +#ifdef UNITY_OUTPUT_COLOR +static UNITY_UINT UnityPrintAnsiEscapeString(const char* string) +{ + const char* pch = string; + UNITY_UINT count = 0; + + while (*pch && (*pch != 'm')) + { + UNITY_OUTPUT_CHAR(*pch); + pch++; + count++; + } + UNITY_OUTPUT_CHAR('m'); + count++; + + return count; +} +#endif + +/*-----------------------------------------------*/ +void UnityPrint(const char* string) +{ + const char* pch = string; + + if (pch != NULL) + { + while (*pch) + { +#ifdef UNITY_OUTPUT_COLOR + /* print ANSI escape code */ + if ((*pch == 27) && (*(pch + 1) == '[')) + { + pch += UnityPrintAnsiEscapeString(pch); + continue; + } +#endif + UnityPrintChar(pch); + pch++; + } + } +} + +/*-----------------------------------------------*/ +#ifdef UNITY_INCLUDE_PRINT_FORMATTED +void UnityPrintFormatted(const char* format, ...) +{ + const char* pch = format; + va_list va; + va_start(va, format); + + if (pch != NULL) + { + while (*pch) + { + /* format identification character */ + if (*pch == '%') + { + pch++; + + if (pch != NULL) + { + switch (*pch) + { + case 'd': + case 'i': + { + const int number = va_arg(va, int); + UnityPrintNumber((UNITY_INT)number); + break; + } +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + case 'f': + case 'g': + { + const double number = va_arg(va, double); + UnityPrintFloat((UNITY_DOUBLE)number); + break; + } +#endif + case 'u': + { + const unsigned int number = va_arg(va, unsigned int); + UnityPrintNumberUnsigned((UNITY_UINT)number); + break; + } + case 'b': + { + const unsigned int number = va_arg(va, unsigned int); + const UNITY_UINT mask = (UNITY_UINT)0 - (UNITY_UINT)1; + UNITY_OUTPUT_CHAR('0'); + UNITY_OUTPUT_CHAR('b'); + UnityPrintMask(mask, (UNITY_UINT)number); + break; + } + case 'x': + case 'X': + case 'p': + { + const unsigned int number = va_arg(va, unsigned int); + UNITY_OUTPUT_CHAR('0'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)number, 8); + break; + } + case 'c': + { + const int ch = va_arg(va, int); + UnityPrintChar((const char *)&ch); + break; + } + case 's': + { + const char * string = va_arg(va, const char *); + UnityPrint(string); + break; + } + case '%': + { + UnityPrintChar(pch); + break; + } + default: + { + /* print the unknown format character */ + UNITY_OUTPUT_CHAR('%'); + UnityPrintChar(pch); + break; + } + } + } + } +#ifdef UNITY_OUTPUT_COLOR + /* print ANSI escape code */ + else if ((*pch == 27) && (*(pch + 1) == '[')) + { + pch += UnityPrintAnsiEscapeString(pch); + continue; + } +#endif + else if (*pch == '\n') + { + UNITY_PRINT_EOL(); + } + else + { + UnityPrintChar(pch); + } + + pch++; + } + } + + va_end(va); +} +#endif /* ! UNITY_INCLUDE_PRINT_FORMATTED */ + +/*-----------------------------------------------*/ +void UnityPrintLen(const char* string, const UNITY_UINT32 length) +{ + const char* pch = string; + + if (pch != NULL) + { + while (*pch && ((UNITY_UINT32)(pch - string) < length)) + { + /* printable characters plus CR & LF are printed */ + if ((*pch <= 126) && (*pch >= 32)) + { + UNITY_OUTPUT_CHAR(*pch); + } + /* write escaped carriage returns */ + else if (*pch == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (*pch == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)*pch, 2); + } + pch++; + } + } +} + +/*-----------------------------------------------*/ +void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style) +{ + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + if (style == UNITY_DISPLAY_STYLE_CHAR) + { + /* printable characters plus CR & LF are printed */ + UNITY_OUTPUT_CHAR('\''); + if ((number <= 126) && (number >= 32)) + { + UNITY_OUTPUT_CHAR((int)number); + } + /* write escaped carriage returns */ + else if (number == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (number == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)number, 2); + } + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrintNumber(number); + } + } + else if ((style & UNITY_DISPLAY_RANGE_UINT) == UNITY_DISPLAY_RANGE_UINT) + { + UnityPrintNumberUnsigned((UNITY_UINT)number); + } + else + { + UNITY_OUTPUT_CHAR('0'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)number, (char)((style & 0xF) * 2)); + } +} + +/*-----------------------------------------------*/ +void UnityPrintNumber(const UNITY_INT number_to_print) +{ + UNITY_UINT number = (UNITY_UINT)number_to_print; + + if (number_to_print < 0) + { + /* A negative number, including MIN negative */ + UNITY_OUTPUT_CHAR('-'); + number = (~number) + 1; + } + UnityPrintNumberUnsigned(number); +} + +/*----------------------------------------------- + * basically do an itoa using as little ram as possible */ +void UnityPrintNumberUnsigned(const UNITY_UINT number) +{ + UNITY_UINT divisor = 1; + + /* figure out initial divisor */ + while (number / divisor > 9) + { + divisor *= 10; + } + + /* now mod and print, then divide divisor */ + do + { + UNITY_OUTPUT_CHAR((char)('0' + (number / divisor % 10))); + divisor /= 10; + } while (divisor > 0); +} + +/*-----------------------------------------------*/ +void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles_to_print) +{ + int nibble; + char nibbles = nibbles_to_print; + + if ((unsigned)nibbles > UNITY_MAX_NIBBLES) + { + nibbles = UNITY_MAX_NIBBLES; + } + + while (nibbles > 0) + { + nibbles--; + nibble = (int)(number >> (nibbles * 4)) & 0x0F; + if (nibble <= 9) + { + UNITY_OUTPUT_CHAR((char)('0' + nibble)); + } + else + { + UNITY_OUTPUT_CHAR((char)('A' - 10 + nibble)); + } + } +} + +/*-----------------------------------------------*/ +void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number) +{ + UNITY_UINT current_bit = (UNITY_UINT)1 << (UNITY_INT_WIDTH - 1); + UNITY_INT32 i; + + for (i = 0; i < UNITY_INT_WIDTH; i++) + { + if (current_bit & mask) + { + if (current_bit & number) + { + UNITY_OUTPUT_CHAR('1'); + } + else + { + UNITY_OUTPUT_CHAR('0'); + } + } + else + { + UNITY_OUTPUT_CHAR('X'); + } + current_bit = current_bit >> 1; + } +} + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_FLOAT_PRINT +/* + * This function prints a floating-point value in a format similar to + * printf("%.7g") on a single-precision machine or printf("%.9g") on a + * double-precision machine. The 7th digit won't always be totally correct + * in single-precision operation (for that level of accuracy, a more + * complicated algorithm would be needed). + */ +void UnityPrintFloat(const UNITY_DOUBLE input_number) +{ +#ifdef UNITY_INCLUDE_DOUBLE + static const int sig_digits = 9; + static const UNITY_INT32 min_scaled = 100000000; + static const UNITY_INT32 max_scaled = 1000000000; +#else + static const int sig_digits = 7; + static const UNITY_INT32 min_scaled = 1000000; + static const UNITY_INT32 max_scaled = 10000000; +#endif + + UNITY_DOUBLE number = input_number; + + /* print minus sign (does not handle negative zero) */ + if (number < 0.0f) + { + UNITY_OUTPUT_CHAR('-'); + number = -number; + } + + /* handle zero, NaN, and +/- infinity */ + if (number == 0.0f) + { + UnityPrint("0"); + } + else if (isnan(number)) + { + UnityPrint("nan"); + } + else if (isinf(number)) + { + UnityPrint("inf"); + } + else + { + UNITY_INT32 n_int = 0, n; + int exponent = 0; + int decimals, digits; + char buf[16] = {0}; + + /* + * Scale up or down by powers of 10. To minimize rounding error, + * start with a factor/divisor of 10^10, which is the largest + * power of 10 that can be represented exactly. Finally, compute + * (exactly) the remaining power of 10 and perform one more + * multiplication or division. + */ + if (number < 1.0f) + { + UNITY_DOUBLE factor = 1.0f; + + while (number < (UNITY_DOUBLE)max_scaled / 1e10f) { number *= 1e10f; exponent -= 10; } + while (number * factor < (UNITY_DOUBLE)min_scaled) { factor *= 10.0f; exponent--; } + + number *= factor; + } + else if (number > (UNITY_DOUBLE)max_scaled) + { + UNITY_DOUBLE divisor = 1.0f; + + while (number > (UNITY_DOUBLE)min_scaled * 1e10f) { number /= 1e10f; exponent += 10; } + while (number / divisor > (UNITY_DOUBLE)max_scaled) { divisor *= 10.0f; exponent++; } + + number /= divisor; + } + else + { + /* + * In this range, we can split off the integer part before + * doing any multiplications. This reduces rounding error by + * freeing up significant bits in the fractional part. + */ + UNITY_DOUBLE factor = 1.0f; + n_int = (UNITY_INT32)number; + number -= (UNITY_DOUBLE)n_int; + + while (n_int < min_scaled) { n_int *= 10; factor *= 10.0f; exponent--; } + + number *= factor; + } + + /* round to nearest integer */ + n = ((UNITY_INT32)(number + number) + 1) / 2; + +#ifndef UNITY_ROUND_TIES_AWAY_FROM_ZERO + /* round to even if exactly between two integers */ + if ((n & 1) && (((UNITY_DOUBLE)n - number) == 0.5f)) + n--; +#endif + + n += n_int; + + if (n >= max_scaled) + { + n = min_scaled; + exponent++; + } + + /* determine where to place decimal point */ + decimals = ((exponent <= 0) && (exponent >= -(sig_digits + 3))) ? (-exponent) : (sig_digits - 1); + exponent += decimals; + + /* truncate trailing zeroes after decimal point */ + while ((decimals > 0) && ((n % 10) == 0)) + { + n /= 10; + decimals--; + } + + /* build up buffer in reverse order */ + digits = 0; + while ((n != 0) || (digits < (decimals + 1))) + { + buf[digits++] = (char)('0' + n % 10); + n /= 10; + } + while (digits > 0) + { + if (digits == decimals) { UNITY_OUTPUT_CHAR('.'); } + UNITY_OUTPUT_CHAR(buf[--digits]); + } + + /* print exponent if needed */ + if (exponent != 0) + { + UNITY_OUTPUT_CHAR('e'); + + if (exponent < 0) + { + UNITY_OUTPUT_CHAR('-'); + exponent = -exponent; + } + else + { + UNITY_OUTPUT_CHAR('+'); + } + + digits = 0; + while ((exponent != 0) || (digits < 2)) + { + buf[digits++] = (char)('0' + exponent % 10); + exponent /= 10; + } + while (digits > 0) + { + UNITY_OUTPUT_CHAR(buf[--digits]); + } + } + } +} +#endif /* ! UNITY_EXCLUDE_FLOAT_PRINT */ + +/*-----------------------------------------------*/ +static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line) +{ +#ifdef UNITY_OUTPUT_FOR_ECLIPSE + UNITY_OUTPUT_CHAR('('); + UnityPrint(file); + UNITY_OUTPUT_CHAR(':'); + UnityPrintNumber((UNITY_INT)line); + UNITY_OUTPUT_CHAR(')'); + UNITY_OUTPUT_CHAR(' '); + UnityPrint(Unity.CurrentTestName); + UNITY_OUTPUT_CHAR(':'); +#else +#ifdef UNITY_OUTPUT_FOR_IAR_WORKBENCH + UnityPrint("'); + UnityPrint(Unity.CurrentTestName); + UnityPrint(" "); +#else +#ifdef UNITY_OUTPUT_FOR_QT_CREATOR + UnityPrint("file://"); + UnityPrint(file); + UNITY_OUTPUT_CHAR(':'); + UnityPrintNumber((UNITY_INT)line); + UNITY_OUTPUT_CHAR(' '); + UnityPrint(Unity.CurrentTestName); + UNITY_OUTPUT_CHAR(':'); +#else + UnityPrint(file); + UNITY_OUTPUT_CHAR(':'); + UnityPrintNumber((UNITY_INT)line); + UNITY_OUTPUT_CHAR(':'); + UnityPrint(Unity.CurrentTestName); + UNITY_OUTPUT_CHAR(':'); +#endif +#endif +#endif +} + +/*-----------------------------------------------*/ +static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line) +{ + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrFail); + UNITY_OUTPUT_CHAR(':'); +} + +/*-----------------------------------------------*/ +void UnityConcludeTest(void) +{ + if (Unity.CurrentTestIgnored) + { + Unity.TestIgnores++; + } + else if (!Unity.CurrentTestFailed) + { + UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber); + UnityPrint(UnityStrPass); + } + else + { + Unity.TestFailures++; + } + + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; + UNITY_PRINT_EXEC_TIME(); + UNITY_PRINT_EOL(); + UNITY_FLUSH_CALL(); +} + +/*-----------------------------------------------*/ +static void UnityAddMsgIfSpecified(const char* msg) +{ + if (msg) + { + UnityPrint(UnityStrSpacer); +#ifndef UNITY_EXCLUDE_DETAILS + if (Unity.CurrentDetail1) + { + UnityPrint(UnityStrDetail1Name); + UnityPrint(Unity.CurrentDetail1); + if (Unity.CurrentDetail2) + { + UnityPrint(UnityStrDetail2Name); + UnityPrint(Unity.CurrentDetail2); + } + UnityPrint(UnityStrSpacer); + } +#endif + UnityPrint(msg); + } +} + +/*-----------------------------------------------*/ +static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual) +{ + UnityPrint(UnityStrExpected); + if (expected != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrint(expected); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } + UnityPrint(UnityStrWas); + if (actual != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrint(actual); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } +} + +/*-----------------------------------------------*/ +static void UnityPrintExpectedAndActualStringsLen(const char* expected, + const char* actual, + const UNITY_UINT32 length) +{ + UnityPrint(UnityStrExpected); + if (expected != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrintLen(expected, length); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } + UnityPrint(UnityStrWas); + if (actual != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrintLen(actual, length); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } +} + +/*----------------------------------------------- + * Assertion & Control Helpers + *-----------------------------------------------*/ + +/*-----------------------------------------------*/ +static int UnityIsOneArrayNull(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_LINE_TYPE lineNumber, + const char* msg) +{ + /* Both are NULL or same pointer */ + if (expected == actual) { return 0; } + + /* print and return true if just expected is NULL */ + if (expected == NULL) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrNullPointerForExpected); + UnityAddMsgIfSpecified(msg); + return 1; + } + + /* print and return true if just actual is NULL */ + if (actual == NULL) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrNullPointerForActual); + UnityAddMsgIfSpecified(msg); + return 1; + } + + return 0; /* return false if neither is NULL */ +} + +/*----------------------------------------------- + * Assertion Functions + *-----------------------------------------------*/ + +/*-----------------------------------------------*/ +void UnityAssertBits(const UNITY_INT mask, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if ((mask & expected) != (mask & actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintMask((UNITY_UINT)mask, (UNITY_UINT)expected); + UnityPrint(UnityStrWas); + UnityPrintMask((UNITY_UINT)mask, (UNITY_UINT)actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualNumber(const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if (expected != actual) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expected, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertGreaterOrLessOrEqualNumber(const UNITY_INT threshold, + const UNITY_INT actual, + const UNITY_COMPARISON_T compare, + const char *msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + int failed = 0; + RETURN_IF_FAIL_OR_IGNORE; + + if ((threshold == actual) && (compare & UNITY_EQUAL_TO)) { return; } + if ((threshold == actual)) { failed = 1; } + + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + if ((actual > threshold) && (compare & UNITY_SMALLER_THAN)) { failed = 1; } + if ((actual < threshold) && (compare & UNITY_GREATER_THAN)) { failed = 1; } + } + else /* UINT or HEX */ + { + if (((UNITY_UINT)actual > (UNITY_UINT)threshold) && (compare & UNITY_SMALLER_THAN)) { failed = 1; } + if (((UNITY_UINT)actual < (UNITY_UINT)threshold) && (compare & UNITY_GREATER_THAN)) { failed = 1; } + } + + if (failed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(actual, style); + if (compare & UNITY_GREATER_THAN) { UnityPrint(UnityStrGt); } + if (compare & UNITY_SMALLER_THAN) { UnityPrint(UnityStrLt); } + if (compare & UNITY_EQUAL_TO) { UnityPrint(UnityStrOrEqual); } + UnityPrintNumberByStyle(threshold, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#define UnityPrintPointlessAndBail() \ +{ \ + UnityTestResultsFailBegin(lineNumber); \ + UnityPrint(UnityStrPointless); \ + UnityAddMsgIfSpecified(msg); \ + UNITY_FAIL_AND_BAIL; } + +/*-----------------------------------------------*/ +void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style, + const UNITY_FLAGS_T flags) +{ + UNITY_UINT32 elements = num_elements; + unsigned int length = style & 0xF; + unsigned int increment = 0; + + RETURN_IF_FAIL_OR_IGNORE; + + if (num_elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) + { + return; /* Both are NULL or same pointer */ + } + + if (UnityIsOneArrayNull(expected, actual, lineNumber, msg)) + { + UNITY_FAIL_AND_BAIL; + } + + while ((elements > 0) && (elements--)) + { + UNITY_INT expect_val; + UNITY_INT actual_val; + + switch (length) + { + case 1: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT8*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT8*)actual; + increment = sizeof(UNITY_INT8); + break; + + case 2: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT16*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT16*)actual; + increment = sizeof(UNITY_INT16); + break; + +#ifdef UNITY_SUPPORT_64 + case 8: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT64*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT64*)actual; + increment = sizeof(UNITY_INT64); + break; +#endif + + default: /* default is length 4 bytes */ + case 4: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT32*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT32*)actual; + increment = sizeof(UNITY_INT32); + length = 4; + break; + } + + if (expect_val != actual_val) + { + if ((style & UNITY_DISPLAY_RANGE_UINT) && (length < (UNITY_INT_WIDTH / 8))) + { /* For UINT, remove sign extension (padding 1's) from signed type casts above */ + UNITY_INT mask = 1; + mask = (mask << 8 * length) - 1; + expect_val &= mask; + actual_val &= mask; + } + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expect_val, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual_val, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + /* Walk through array by incrementing the pointers */ + if (flags == UNITY_ARRAY_TO_ARRAY) + { + expected = (UNITY_INTERNAL_PTR)((const char*)expected + increment); + } + actual = (UNITY_INTERNAL_PTR)((const char*)actual + increment); + } +} + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_FLOAT +/* Wrap this define in a function with variable types as float or double */ +#define UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff) \ + if (isinf(expected) && isinf(actual) && (((expected) < 0) == ((actual) < 0))) return 1; \ + if (UNITY_NAN_CHECK) return 1; \ + (diff) = (actual) - (expected); \ + if ((diff) < 0) (diff) = -(diff); \ + if ((delta) < 0) (delta) = -(delta); \ + return !(isnan(diff) || isinf(diff) || ((diff) > (delta))) + /* This first part of this condition will catch any NaN or Infinite values */ +#ifndef UNITY_NAN_NOT_EQUAL_NAN + #define UNITY_NAN_CHECK isnan(expected) && isnan(actual) +#else + #define UNITY_NAN_CHECK 0 +#endif + +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + #define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \ + { \ + UnityPrint(UnityStrExpected); \ + UnityPrintFloat(expected); \ + UnityPrint(UnityStrWas); \ + UnityPrintFloat(actual); } +#else + #define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \ + UnityPrint(UnityStrDelta) +#endif /* UNITY_EXCLUDE_FLOAT_PRINT */ + +/*-----------------------------------------------*/ +static int UnityFloatsWithin(UNITY_FLOAT delta, UNITY_FLOAT expected, UNITY_FLOAT actual) +{ + UNITY_FLOAT diff; + UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff); +} + +/*-----------------------------------------------*/ +void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected, + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags) +{ + UNITY_UINT32 elements = num_elements; + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* ptr_expected = expected; + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* ptr_actual = actual; + + RETURN_IF_FAIL_OR_IGNORE; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) + { + return; /* Both are NULL or same pointer */ + } + + if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg)) + { + UNITY_FAIL_AND_BAIL; + } + + while (elements--) + { + if (!UnityFloatsWithin(*ptr_expected * UNITY_FLOAT_PRECISION, *ptr_expected, *ptr_actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT((UNITY_DOUBLE)*ptr_expected, (UNITY_DOUBLE)*ptr_actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + if (flags == UNITY_ARRAY_TO_ARRAY) + { + ptr_expected++; + } + ptr_actual++; + } +} + +/*-----------------------------------------------*/ +void UnityAssertFloatsWithin(const UNITY_FLOAT delta, + const UNITY_FLOAT expected, + const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + RETURN_IF_FAIL_OR_IGNORE; + + + if (!UnityFloatsWithin(delta, expected, actual)) + { + UnityTestResultsFailBegin(lineNumber); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT((UNITY_DOUBLE)expected, (UNITY_DOUBLE)actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertFloatSpecial(const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style) +{ + const char* trait_names[] = {UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet}; + UNITY_INT should_be_trait = ((UNITY_INT)style & 1); + UNITY_INT is_trait = !should_be_trait; + UNITY_INT trait_index = (UNITY_INT)(style >> 1); + + RETURN_IF_FAIL_OR_IGNORE; + + switch (style) + { + case UNITY_FLOAT_IS_INF: + case UNITY_FLOAT_IS_NOT_INF: + is_trait = isinf(actual) && (actual > 0); + break; + case UNITY_FLOAT_IS_NEG_INF: + case UNITY_FLOAT_IS_NOT_NEG_INF: + is_trait = isinf(actual) && (actual < 0); + break; + + case UNITY_FLOAT_IS_NAN: + case UNITY_FLOAT_IS_NOT_NAN: + is_trait = isnan(actual) ? 1 : 0; + break; + + case UNITY_FLOAT_IS_DET: /* A determinate number is non infinite and not NaN. */ + case UNITY_FLOAT_IS_NOT_DET: + is_trait = !isinf(actual) && !isnan(actual); + break; + + default: + trait_index = 0; + trait_names[0] = UnityStrInvalidFloatTrait; + break; + } + + if (is_trait != should_be_trait) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + if (!should_be_trait) + { + UnityPrint(UnityStrNot); + } + UnityPrint(trait_names[trait_index]); + UnityPrint(UnityStrWas); +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + UnityPrintFloat((UNITY_DOUBLE)actual); +#else + if (should_be_trait) + { + UnityPrint(UnityStrNot); + } + UnityPrint(trait_names[trait_index]); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#endif /* not UNITY_EXCLUDE_FLOAT */ + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_DOUBLE +static int UnityDoublesWithin(UNITY_DOUBLE delta, UNITY_DOUBLE expected, UNITY_DOUBLE actual) +{ + UNITY_DOUBLE diff; + UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff); +} + +/*-----------------------------------------------*/ +void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expected, + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags) +{ + UNITY_UINT32 elements = num_elements; + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* ptr_expected = expected; + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* ptr_actual = actual; + + RETURN_IF_FAIL_OR_IGNORE; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) + { + return; /* Both are NULL or same pointer */ + } + + if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg)) + { + UNITY_FAIL_AND_BAIL; + } + + while (elements--) + { + if (!UnityDoublesWithin(*ptr_expected * UNITY_DOUBLE_PRECISION, *ptr_expected, *ptr_actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(*ptr_expected, *ptr_actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + if (flags == UNITY_ARRAY_TO_ARRAY) + { + ptr_expected++; + } + ptr_actual++; + } +} + +/*-----------------------------------------------*/ +void UnityAssertDoublesWithin(const UNITY_DOUBLE delta, + const UNITY_DOUBLE expected, + const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if (!UnityDoublesWithin(delta, expected, actual)) + { + UnityTestResultsFailBegin(lineNumber); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style) +{ + const char* trait_names[] = {UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet}; + UNITY_INT should_be_trait = ((UNITY_INT)style & 1); + UNITY_INT is_trait = !should_be_trait; + UNITY_INT trait_index = (UNITY_INT)(style >> 1); + + RETURN_IF_FAIL_OR_IGNORE; + + switch (style) + { + case UNITY_FLOAT_IS_INF: + case UNITY_FLOAT_IS_NOT_INF: + is_trait = isinf(actual) && (actual > 0); + break; + case UNITY_FLOAT_IS_NEG_INF: + case UNITY_FLOAT_IS_NOT_NEG_INF: + is_trait = isinf(actual) && (actual < 0); + break; + + case UNITY_FLOAT_IS_NAN: + case UNITY_FLOAT_IS_NOT_NAN: + is_trait = isnan(actual) ? 1 : 0; + break; + + case UNITY_FLOAT_IS_DET: /* A determinate number is non infinite and not NaN. */ + case UNITY_FLOAT_IS_NOT_DET: + is_trait = !isinf(actual) && !isnan(actual); + break; + + default: + trait_index = 0; + trait_names[0] = UnityStrInvalidFloatTrait; + break; + } + + if (is_trait != should_be_trait) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + if (!should_be_trait) + { + UnityPrint(UnityStrNot); + } + UnityPrint(trait_names[trait_index]); + UnityPrint(UnityStrWas); +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + UnityPrintFloat(actual); +#else + if (should_be_trait) + { + UnityPrint(UnityStrNot); + } + UnityPrint(trait_names[trait_index]); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#endif /* not UNITY_EXCLUDE_DOUBLE */ + +/*-----------------------------------------------*/ +void UnityAssertNumbersWithin(const UNITY_UINT delta, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + if (actual > expected) + { + Unity.CurrentTestFailed = (((UNITY_UINT)actual - (UNITY_UINT)expected) > delta); + } + else + { + Unity.CurrentTestFailed = (((UNITY_UINT)expected - (UNITY_UINT)actual) > delta); + } + } + else + { + if ((UNITY_UINT)actual > (UNITY_UINT)expected) + { + Unity.CurrentTestFailed = (((UNITY_UINT)actual - (UNITY_UINT)expected) > delta); + } + else + { + Unity.CurrentTestFailed = (((UNITY_UINT)expected - (UNITY_UINT)actual) > delta); + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrDelta); + UnityPrintNumberByStyle((UNITY_INT)delta, style); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expected, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertNumbersArrayWithin(const UNITY_UINT delta, + UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style, + const UNITY_FLAGS_T flags) +{ + UNITY_UINT32 elements = num_elements; + unsigned int length = style & 0xF; + unsigned int increment = 0; + + RETURN_IF_FAIL_OR_IGNORE; + + if (num_elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) + { + return; /* Both are NULL or same pointer */ + } + + if (UnityIsOneArrayNull(expected, actual, lineNumber, msg)) + { + UNITY_FAIL_AND_BAIL; + } + + while ((elements > 0) && (elements--)) + { + UNITY_INT expect_val; + UNITY_INT actual_val; + + switch (length) + { + case 1: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT8*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT8*)actual; + increment = sizeof(UNITY_INT8); + break; + + case 2: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT16*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT16*)actual; + increment = sizeof(UNITY_INT16); + break; + +#ifdef UNITY_SUPPORT_64 + case 8: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT64*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT64*)actual; + increment = sizeof(UNITY_INT64); + break; +#endif + + default: /* default is length 4 bytes */ + case 4: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT32*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT32*)actual; + increment = sizeof(UNITY_INT32); + length = 4; + break; + } + + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + if (actual_val > expect_val) + { + Unity.CurrentTestFailed = (((UNITY_UINT)actual_val - (UNITY_UINT)expect_val) > delta); + } + else + { + Unity.CurrentTestFailed = (((UNITY_UINT)expect_val - (UNITY_UINT)actual_val) > delta); + } + } + else + { + if ((UNITY_UINT)actual_val > (UNITY_UINT)expect_val) + { + Unity.CurrentTestFailed = (((UNITY_UINT)actual_val - (UNITY_UINT)expect_val) > delta); + } + else + { + Unity.CurrentTestFailed = (((UNITY_UINT)expect_val - (UNITY_UINT)actual_val) > delta); + } + } + + if (Unity.CurrentTestFailed) + { + if ((style & UNITY_DISPLAY_RANGE_UINT) && (length < (UNITY_INT_WIDTH / 8))) + { /* For UINT, remove sign extension (padding 1's) from signed type casts above */ + UNITY_INT mask = 1; + mask = (mask << 8 * length) - 1; + expect_val &= mask; + actual_val &= mask; + } + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrDelta); + UnityPrintNumberByStyle((UNITY_INT)delta, style); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expect_val, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual_val, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + /* Walk through array by incrementing the pointers */ + if (flags == UNITY_ARRAY_TO_ARRAY) + { + expected = (UNITY_INTERNAL_PTR)((const char*)expected + increment); + } + actual = (UNITY_INTERNAL_PTR)((const char*)actual + increment); + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualString(const char* expected, + const char* actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 i; + + RETURN_IF_FAIL_OR_IGNORE; + + /* if both pointers not null compare the strings */ + if (expected && actual) + { + for (i = 0; expected[i] || actual[i]; i++) + { + if (expected[i] != actual[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected != actual) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrintExpectedAndActualStrings(expected, actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualStringLen(const char* expected, + const char* actual, + const UNITY_UINT32 length, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 i; + + RETURN_IF_FAIL_OR_IGNORE; + + /* if both pointers not null compare the strings */ + if (expected && actual) + { + for (i = 0; (i < length) && (expected[i] || actual[i]); i++) + { + if (expected[i] != actual[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected != actual) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrintExpectedAndActualStringsLen(expected, actual, length); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualStringArray(UNITY_INTERNAL_PTR expected, + const char** actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags) +{ + UNITY_UINT32 i = 0; + UNITY_UINT32 j = 0; + const char* expd = NULL; + const char* act = NULL; + + RETURN_IF_FAIL_OR_IGNORE; + + /* if no elements, it's an error */ + if (num_elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if ((const void*)expected == (const void*)actual) + { + return; /* Both are NULL or same pointer */ + } + + if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg)) + { + UNITY_FAIL_AND_BAIL; + } + + if (flags != UNITY_ARRAY_TO_ARRAY) + { + expd = (const char*)expected; + } + + do + { + act = actual[j]; + if (flags == UNITY_ARRAY_TO_ARRAY) + { + expd = ((const char* const*)expected)[j]; + } + + /* if both pointers not null compare the strings */ + if (expd && act) + { + for (i = 0; expd[i] || act[i]; i++) + { + if (expd[i] != act[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expd != act) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + if (num_elements > 1) + { + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(j); + } + UnityPrintExpectedAndActualStrings(expd, act); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + } while (++j < num_elements); +} + +/*-----------------------------------------------*/ +void UnityAssertEqualMemory(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 length, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags) +{ + UNITY_PTR_ATTRIBUTE const unsigned char* ptr_exp = (UNITY_PTR_ATTRIBUTE const unsigned char*)expected; + UNITY_PTR_ATTRIBUTE const unsigned char* ptr_act = (UNITY_PTR_ATTRIBUTE const unsigned char*)actual; + UNITY_UINT32 elements = num_elements; + UNITY_UINT32 bytes; + + RETURN_IF_FAIL_OR_IGNORE; + + if ((elements == 0) || (length == 0)) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) + { + return; /* Both are NULL or same pointer */ + } + + if (UnityIsOneArrayNull(expected, actual, lineNumber, msg)) + { + UNITY_FAIL_AND_BAIL; + } + + while (elements--) + { + bytes = length; + while (bytes--) + { + if (*ptr_exp != *ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrMemory); + if (num_elements > 1) + { + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + } + UnityPrint(UnityStrByte); + UnityPrintNumberUnsigned(length - bytes - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*ptr_exp, UNITY_DISPLAY_STYLE_HEX8); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*ptr_act, UNITY_DISPLAY_STYLE_HEX8); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp++; + ptr_act++; + } + if (flags == UNITY_ARRAY_TO_VAL) + { + ptr_exp = (UNITY_PTR_ATTRIBUTE const unsigned char*)expected; + } + } +} + +/*-----------------------------------------------*/ + +static union +{ + UNITY_INT8 i8; + UNITY_INT16 i16; + UNITY_INT32 i32; +#ifdef UNITY_SUPPORT_64 + UNITY_INT64 i64; +#endif +#ifndef UNITY_EXCLUDE_FLOAT + float f; +#endif +#ifndef UNITY_EXCLUDE_DOUBLE + double d; +#endif +} UnityQuickCompare; + +UNITY_INTERNAL_PTR UnityNumToPtr(const UNITY_INT num, const UNITY_UINT8 size) +{ + switch(size) + { + case 1: + UnityQuickCompare.i8 = (UNITY_INT8)num; + return (UNITY_INTERNAL_PTR)(&UnityQuickCompare.i8); + + case 2: + UnityQuickCompare.i16 = (UNITY_INT16)num; + return (UNITY_INTERNAL_PTR)(&UnityQuickCompare.i16); + +#ifdef UNITY_SUPPORT_64 + case 8: + UnityQuickCompare.i64 = (UNITY_INT64)num; + return (UNITY_INTERNAL_PTR)(&UnityQuickCompare.i64); +#endif + + default: /* 4 bytes */ + UnityQuickCompare.i32 = (UNITY_INT32)num; + return (UNITY_INTERNAL_PTR)(&UnityQuickCompare.i32); + } +} + +#ifndef UNITY_EXCLUDE_FLOAT +/*-----------------------------------------------*/ +UNITY_INTERNAL_PTR UnityFloatToPtr(const float num) +{ + UnityQuickCompare.f = num; + return (UNITY_INTERNAL_PTR)(&UnityQuickCompare.f); +} +#endif + +#ifndef UNITY_EXCLUDE_DOUBLE +/*-----------------------------------------------*/ +UNITY_INTERNAL_PTR UnityDoubleToPtr(const double num) +{ + UnityQuickCompare.d = num; + return (UNITY_INTERNAL_PTR)(&UnityQuickCompare.d); +} +#endif + +/*----------------------------------------------- + * Control Functions + *-----------------------------------------------*/ + +/*-----------------------------------------------*/ +void UnityFail(const char* msg, const UNITY_LINE_TYPE line) +{ + RETURN_IF_FAIL_OR_IGNORE; + + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrFail); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + +#ifndef UNITY_EXCLUDE_DETAILS + if (Unity.CurrentDetail1) + { + UnityPrint(UnityStrDetail1Name); + UnityPrint(Unity.CurrentDetail1); + if (Unity.CurrentDetail2) + { + UnityPrint(UnityStrDetail2Name); + UnityPrint(Unity.CurrentDetail2); + } + UnityPrint(UnityStrSpacer); + } +#endif + if (msg[0] != ' ') + { + UNITY_OUTPUT_CHAR(' '); + } + UnityPrint(msg); + } + + UNITY_FAIL_AND_BAIL; +} + +/*-----------------------------------------------*/ +void UnityIgnore(const char* msg, const UNITY_LINE_TYPE line) +{ + RETURN_IF_FAIL_OR_IGNORE; + + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrIgnore); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + UNITY_OUTPUT_CHAR(' '); + UnityPrint(msg); + } + UNITY_IGNORE_AND_BAIL; +} + +/*-----------------------------------------------*/ +void UnityMessage(const char* msg, const UNITY_LINE_TYPE line) +{ + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint("INFO"); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + UNITY_OUTPUT_CHAR(' '); + UnityPrint(msg); + } + UNITY_PRINT_EOL(); +} + +/*-----------------------------------------------*/ +void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum) +{ + Unity.CurrentTestName = FuncName; + Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)FuncLineNum; + Unity.NumberOfTests++; + UNITY_CLR_DETAILS(); + UNITY_EXEC_TIME_START(); + if (TEST_PROTECT()) + { + setUp(); + Func(); + } + if (TEST_PROTECT()) + { + tearDown(); + } + UNITY_EXEC_TIME_STOP(); + UnityConcludeTest(); +} + +/*-----------------------------------------------*/ +void UnitySetTestFile(const char* filename) +{ + Unity.TestFile = filename; +} + +/*-----------------------------------------------*/ +void UnityBegin(const char* filename) +{ + Unity.TestFile = filename; + Unity.CurrentTestName = NULL; + Unity.CurrentTestLineNumber = 0; + Unity.NumberOfTests = 0; + Unity.TestFailures = 0; + Unity.TestIgnores = 0; + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; + + UNITY_CLR_DETAILS(); + UNITY_OUTPUT_START(); +} + +/*-----------------------------------------------*/ +int UnityEnd(void) +{ + UNITY_PRINT_EOL(); + UnityPrint(UnityStrBreaker); + UNITY_PRINT_EOL(); + UnityPrintNumber((UNITY_INT)(Unity.NumberOfTests)); + UnityPrint(UnityStrResultsTests); + UnityPrintNumber((UNITY_INT)(Unity.TestFailures)); + UnityPrint(UnityStrResultsFailures); + UnityPrintNumber((UNITY_INT)(Unity.TestIgnores)); + UnityPrint(UnityStrResultsIgnored); + UNITY_PRINT_EOL(); + if (Unity.TestFailures == 0U) + { + UnityPrint(UnityStrOk); + } + else + { + UnityPrint(UnityStrFail); +#ifdef UNITY_DIFFERENTIATE_FINAL_FAIL + UNITY_OUTPUT_CHAR('E'); UNITY_OUTPUT_CHAR('D'); +#endif + } + UNITY_PRINT_EOL(); + UNITY_FLUSH_CALL(); + UNITY_OUTPUT_COMPLETE(); + return (int)(Unity.TestFailures); +} + +/*----------------------------------------------- + * Command Line Argument Support + *-----------------------------------------------*/ +#ifdef UNITY_USE_COMMAND_LINE_ARGS + +char* UnityOptionIncludeNamed = NULL; +char* UnityOptionExcludeNamed = NULL; +int UnityVerbosity = 1; + +/*-----------------------------------------------*/ +int UnityParseOptions(int argc, char** argv) +{ + int i; + UnityOptionIncludeNamed = NULL; + UnityOptionExcludeNamed = NULL; + + for (i = 1; i < argc; i++) + { + if (argv[i][0] == '-') + { + switch (argv[i][1]) + { + case 'l': /* list tests */ + return -1; + case 'n': /* include tests with name including this string */ + case 'f': /* an alias for -n */ + if (argv[i][2] == '=') + { + UnityOptionIncludeNamed = &argv[i][3]; + } + else if (++i < argc) + { + UnityOptionIncludeNamed = argv[i]; + } + else + { + UnityPrint("ERROR: No Test String to Include Matches For"); + UNITY_PRINT_EOL(); + return 1; + } + break; + case 'q': /* quiet */ + UnityVerbosity = 0; + break; + case 'v': /* verbose */ + UnityVerbosity = 2; + break; + case 'x': /* exclude tests with name including this string */ + if (argv[i][2] == '=') + { + UnityOptionExcludeNamed = &argv[i][3]; + } + else if (++i < argc) + { + UnityOptionExcludeNamed = argv[i]; + } + else + { + UnityPrint("ERROR: No Test String to Exclude Matches For"); + UNITY_PRINT_EOL(); + return 1; + } + break; + default: + UnityPrint("ERROR: Unknown Option "); + UNITY_OUTPUT_CHAR(argv[i][1]); + UNITY_PRINT_EOL(); + return 1; + } + } + } + + return 0; +} + +/*-----------------------------------------------*/ +int IsStringInBiggerString(const char* longstring, const char* shortstring) +{ + const char* lptr = longstring; + const char* sptr = shortstring; + const char* lnext = lptr; + + if (*sptr == '*') + { + return 1; + } + + while (*lptr) + { + lnext = lptr + 1; + + /* If they current bytes match, go on to the next bytes */ + while (*lptr && *sptr && (*lptr == *sptr)) + { + lptr++; + sptr++; + + /* We're done if we match the entire string or up to a wildcard */ + if (*sptr == '*') + return 1; + if (*sptr == ',') + return 1; + if (*sptr == '"') + return 1; + if (*sptr == '\'') + return 1; + if (*sptr == ':') + return 2; + if (*sptr == 0) + return 1; + } + + /* Otherwise we start in the long pointer 1 character further and try again */ + lptr = lnext; + sptr = shortstring; + } + + return 0; +} + +/*-----------------------------------------------*/ +int UnityStringArgumentMatches(const char* str) +{ + int retval; + const char* ptr1; + const char* ptr2; + const char* ptrf; + + /* Go through the options and get the substrings for matching one at a time */ + ptr1 = str; + while (ptr1[0] != 0) + { + if ((ptr1[0] == '"') || (ptr1[0] == '\'')) + { + ptr1++; + } + + /* look for the start of the next partial */ + ptr2 = ptr1; + ptrf = 0; + do + { + ptr2++; + if ((ptr2[0] == ':') && (ptr2[1] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ',')) + { + ptrf = &ptr2[1]; + } + } while ((ptr2[0] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ',')); + + while ((ptr2[0] != 0) && ((ptr2[0] == ':') || (ptr2[0] == '\'') || (ptr2[0] == '"') || (ptr2[0] == ','))) + { + ptr2++; + } + + /* done if complete filename match */ + retval = IsStringInBiggerString(Unity.TestFile, ptr1); + if (retval == 1) + { + return retval; + } + + /* done if testname match after filename partial match */ + if ((retval == 2) && (ptrf != 0)) + { + if (IsStringInBiggerString(Unity.CurrentTestName, ptrf)) + { + return 1; + } + } + + /* done if complete testname match */ + if (IsStringInBiggerString(Unity.CurrentTestName, ptr1) == 1) + { + return 1; + } + + ptr1 = ptr2; + } + + /* we couldn't find a match for any substrings */ + return 0; +} + +/*-----------------------------------------------*/ +int UnityTestMatches(void) +{ + /* Check if this test name matches the included test pattern */ + int retval; + if (UnityOptionIncludeNamed) + { + retval = UnityStringArgumentMatches(UnityOptionIncludeNamed); + } + else + { + retval = 1; + } + + /* Check if this test name matches the excluded test pattern */ + if (UnityOptionExcludeNamed) + { + if (UnityStringArgumentMatches(UnityOptionExcludeNamed)) + { + retval = 0; + } + } + + return retval; +} + +#endif /* UNITY_USE_COMMAND_LINE_ARGS */ +/*-----------------------------------------------*/ diff --git a/firmware/asdf/test/unity/unity.h b/firmware/asdf/test/unity/unity.h new file mode 100644 index 0000000..34d7f93 --- /dev/null +++ b/firmware/asdf/test/unity/unity.h @@ -0,0 +1,617 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007-19 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#ifndef UNITY_FRAMEWORK_H +#define UNITY_FRAMEWORK_H +#define UNITY + +#define UNITY_VERSION_MAJOR 2 +#define UNITY_VERSION_MINOR 5 +#define UNITY_VERSION_BUILD 0 +#define UNITY_VERSION ((UNITY_VERSION_MAJOR << 16) | (UNITY_VERSION_MINOR << 8) | UNITY_VERSION_BUILD) + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "unity_internals.h" + +/*------------------------------------------------------- + * Test Setup / Teardown + *-------------------------------------------------------*/ + +/* These functions are intended to be called before and after each test. + * If using unity directly, these will need to be provided for each test + * executable built. If you are using the test runner generator and/or + * Ceedling, these are optional. */ +void setUp(void); +void tearDown(void); + +/* These functions are intended to be called at the beginning and end of an + * entire test suite. suiteTearDown() is passed the number of tests that + * failed, and its return value becomes the exit code of main(). If using + * Unity directly, you're in charge of calling these if they are desired. + * If using Ceedling or the test runner generator, these will be called + * automatically if they exist. */ +void suiteSetUp(void); +int suiteTearDown(int num_failures); + +/*------------------------------------------------------- + * Test Reset and Verify + *-------------------------------------------------------*/ + +/* These functions are intended to be called before during tests in order + * to support complex test loops, etc. Both are NOT built into Unity. Instead + * the test runner generator will create them. resetTest will run teardown and + * setup again, verifying any end-of-test needs between. verifyTest will only + * run the verification. */ +void resetTest(void); +void verifyTest(void); + +/*------------------------------------------------------- + * Configuration Options + *------------------------------------------------------- + * All options described below should be passed as a compiler flag to all files using Unity. If you must add #defines, place them BEFORE the #include above. + + * Integers/longs/pointers + * - Unity attempts to automatically discover your integer sizes + * - define UNITY_EXCLUDE_STDINT_H to stop attempting to look in + * - define UNITY_EXCLUDE_LIMITS_H to stop attempting to look in + * - If you cannot use the automatic methods above, you can force Unity by using these options: + * - define UNITY_SUPPORT_64 + * - set UNITY_INT_WIDTH + * - set UNITY_LONG_WIDTH + * - set UNITY_POINTER_WIDTH + + * Floats + * - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons + * - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT + * - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats + * - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons + * - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default) + * - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE + * - define UNITY_DOUBLE_TYPE to specify something other than double + * - define UNITY_EXCLUDE_FLOAT_PRINT to trim binary size, won't print floating point values in errors + + * Output + * - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired + * - define UNITY_DIFFERENTIATE_FINAL_FAIL to print FAILED (vs. FAIL) at test end summary - for automated search for failure + + * Optimization + * - by default, line numbers are stored in unsigned shorts. Define UNITY_LINE_TYPE with a different type if your files are huge + * - by default, test and failure counters are unsigned shorts. Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests. + + * Test Cases + * - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script + + * Parameterized Tests + * - you'll want to create a define of TEST_CASE(...) which basically evaluates to nothing + + * Tests with Arguments + * - you'll want to define UNITY_USE_COMMAND_LINE_ARGS if you have the test runner passing arguments to Unity + + *------------------------------------------------------- + * Basic Fail and Ignore + *-------------------------------------------------------*/ + +#define TEST_FAIL_MESSAGE(message) UNITY_TEST_FAIL(__LINE__, (message)) +#define TEST_FAIL() UNITY_TEST_FAIL(__LINE__, NULL) +#define TEST_IGNORE_MESSAGE(message) UNITY_TEST_IGNORE(__LINE__, (message)) +#define TEST_IGNORE() UNITY_TEST_IGNORE(__LINE__, NULL) +#define TEST_MESSAGE(message) UnityMessage((message), __LINE__) +#define TEST_ONLY() + +/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails. + * This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */ +#define TEST_PASS() TEST_ABORT() +#define TEST_PASS_MESSAGE(message) do { UnityMessage((message), __LINE__); TEST_ABORT(); } while(0) + +/* This macro does nothing, but it is useful for build tools (like Ceedling) to make use of this to figure out + * which files should be linked to in order to perform a test. Use it like TEST_FILE("sandwiches.c") */ +#define TEST_FILE(a) + +/*------------------------------------------------------- + * Test Asserts (simple) + *-------------------------------------------------------*/ + +/* Boolean */ +#define TEST_ASSERT(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expression Evaluated To FALSE") +#define TEST_ASSERT_TRUE(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expected TRUE Was FALSE") +#define TEST_ASSERT_UNLESS(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expression Evaluated To TRUE") +#define TEST_ASSERT_FALSE(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expected FALSE Was TRUE") +#define TEST_ASSERT_NULL(pointer) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, " Expected NULL") +#define TEST_ASSERT_NOT_NULL(pointer) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL") + +/* Integers (of all sizes) */ +#define TEST_ASSERT_EQUAL_INT(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_size_t(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX8(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX16(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX32(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX64(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_CHAR(expected, actual) UNITY_TEST_ASSERT_EQUAL_CHAR((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS(mask, expected, actual) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS_HIGH(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(-1), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS_LOW(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(0), (actual), __LINE__, NULL) +#define TEST_ASSERT_BIT_HIGH(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(-1), (actual), __LINE__, NULL) +#define TEST_ASSERT_BIT_LOW(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(0), (actual), __LINE__, NULL) + +/* Integer Greater Than/ Less Than (of all sizes) */ +#define TEST_ASSERT_GREATER_THAN(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_INT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_INT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_INT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_INT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_INT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_UINT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_UINT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_UINT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_UINT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_HEX16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_HEX32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_HEX64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_THAN_CHAR(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_CHAR((threshold), (actual), __LINE__, NULL) + +#define TEST_ASSERT_LESS_THAN(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_INT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_INT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_INT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_INT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_INT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_UINT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_UINT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_UINT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_UINT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_HEX16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_HEX32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_HEX64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_THAN_CHAR(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_CHAR((threshold), (actual), __LINE__, NULL) + +#define TEST_ASSERT_GREATER_OR_EQUAL(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_GREATER_OR_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, NULL) + +#define TEST_ASSERT_LESS_OR_EQUAL(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, NULL) +#define TEST_ASSERT_LESS_OR_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, NULL) + +/* Integer Ranges (of all sizes) */ +#define TEST_ASSERT_INT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_size_t_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_CHAR_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_CHAR_WITHIN((delta), (expected), (actual), __LINE__, NULL) + +/* Integer Array Ranges (of all sizes) */ +#define TEST_ASSERT_INT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_INT8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_INT16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_INT32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_INT64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_UINT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_UINT8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_UINT16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_UINT32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_UINT64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_size_t_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_HEX_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_HEX8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_HEX16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_HEX32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_HEX64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) +#define TEST_ASSERT_CHAR_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL) + + +/* Structs and Strings */ +#define TEST_ASSERT_EQUAL_PTR(expected, actual) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING(expected, actual) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, NULL) + +/* Arrays */ +#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_size_t_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_CHAR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) + +/* Arrays Compared To Single Value */ +#define TEST_ASSERT_EACH_EQUAL_INT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_INT8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT8((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_INT16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT16((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT32((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_INT64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT64((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_UINT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_UINT8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT8((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_UINT16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT16((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_UINT32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT32((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_UINT64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT64((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_size_t(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_HEX(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_HEX8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX8((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_HEX16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX16((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_HEX32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_HEX64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX64((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_PTR(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_PTR((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_STRING(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_STRING((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_MEMORY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY((expected), (actual), (len), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_CHAR(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_CHAR((expected), (actual), (num_elements), __LINE__, NULL) + +/* Floating Point (If Enabled) */ +#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_FLOAT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, NULL) + +/* Double (If Enabled) */ +#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, NULL) + +/* Shorthand */ +#ifdef UNITY_SHORTHAND_AS_OLD +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal") +#endif +#ifdef UNITY_SHORTHAND_AS_INT +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#endif +#ifdef UNITY_SHORTHAND_AS_MEM +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_MEMORY((&expected), (&actual), sizeof(expected), __LINE__, NULL) +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#endif +#ifdef UNITY_SHORTHAND_AS_RAW +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) == (actual)), __LINE__, " Expected Equal") +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal") +#endif +#ifdef UNITY_SHORTHAND_AS_NONE +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#endif + +/*------------------------------------------------------- + * Test Asserts (with additional messages) + *-------------------------------------------------------*/ + +/* Boolean */ +#define TEST_ASSERT_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message)) +#define TEST_ASSERT_TRUE_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message)) +#define TEST_ASSERT_UNLESS_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message)) +#define TEST_ASSERT_FALSE_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message)) +#define TEST_ASSERT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, (message)) +#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, (message)) + +/* Integers (of all sizes) */ +#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_size_t_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(-1), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(0), (actual), __LINE__, (message)) +#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(-1), (actual), __LINE__, (message)) +#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(0), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_CHAR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_CHAR((expected), (actual), __LINE__, (message)) + +/* Integer Greater Than/ Less Than (of all sizes) */ +#define TEST_ASSERT_GREATER_THAN_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_THAN_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_CHAR((threshold), (actual), __LINE__, (message)) + +#define TEST_ASSERT_LESS_THAN_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_THAN_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_CHAR((threshold), (actual), __LINE__, (message)) + +#define TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_GREATER_OR_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, (message)) + +#define TEST_ASSERT_LESS_OR_EQUAL_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message)) +#define TEST_ASSERT_LESS_OR_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, (message)) + +/* Integer Ranges (of all sizes) */ +#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_size_t_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_CHAR_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_CHAR_WITHIN((delta), (expected), (actual), __LINE__, (message)) + +/* Integer Array Ranges (of all sizes) */ +#define TEST_ASSERT_INT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_INT8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_INT16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_INT32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_INT64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_UINT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_UINT8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_UINT16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_UINT32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_UINT64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_size_t_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_HEX_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_HEX8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_HEX16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_HEX32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_HEX64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) +#define TEST_ASSERT_CHAR_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message)) + + +/* Structs and Strings */ +#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, (message)) + +/* Arrays */ +#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_size_t_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_CHAR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) + +/* Arrays Compared To Single Value*/ +#define TEST_ASSERT_EACH_EQUAL_INT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_INT8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT8((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_INT16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT16((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_INT32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT32((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_INT64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT64((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_UINT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_UINT8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT8((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_UINT16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT16((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_UINT32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT32((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_UINT64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT64((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_size_t_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_HEX_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_HEX8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX8((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_HEX16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX16((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_HEX32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_HEX64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX64((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_PTR_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_PTR((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_STRING_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_STRING((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_MEMORY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY((expected), (actual), (len), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_CHAR_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_CHAR((expected), (actual), (num_elements), __LINE__, (message)) + +/* Floating Point (If Enabled) */ +#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_FLOAT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, (message)) + +/* Double (If Enabled) */ +#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EACH_EQUAL_DOUBLE_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, (message)) + +/* Shorthand */ +#ifdef UNITY_SHORTHAND_AS_OLD +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, (message)) +#endif +#ifdef UNITY_SHORTHAND_AS_INT +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, message) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#endif +#ifdef UNITY_SHORTHAND_AS_MEM +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((&expected), (&actual), sizeof(expected), __LINE__, message) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#endif +#ifdef UNITY_SHORTHAND_AS_RAW +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) == (actual)), __LINE__, message) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, message) +#endif +#ifdef UNITY_SHORTHAND_AS_NONE +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand) +#endif + +/* end of UNITY_FRAMEWORK_H */ +#ifdef __cplusplus +} +#endif +#endif diff --git a/firmware/asdf/test/unity/unity_internals.h b/firmware/asdf/test/unity/unity_internals.h new file mode 100644 index 0000000..a9a7ea2 --- /dev/null +++ b/firmware/asdf/test/unity/unity_internals.h @@ -0,0 +1,1002 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007-19 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#ifndef UNITY_INTERNALS_H +#define UNITY_INTERNALS_H + +#ifdef UNITY_INCLUDE_CONFIG_H +#include "unity_config.h" +#endif + +#ifndef UNITY_EXCLUDE_SETJMP_H +#include +#endif + +#ifndef UNITY_EXCLUDE_MATH_H +#include +#endif + +#ifndef UNITY_EXCLUDE_STDDEF_H +#include +#endif + +#ifdef UNITY_INCLUDE_PRINT_FORMATTED +#include +#endif + +/* Unity Attempts to Auto-Detect Integer Types + * Attempt 1: UINT_MAX, ULONG_MAX in , or default to 32 bits + * Attempt 2: UINTPTR_MAX in , or default to same size as long + * The user may override any of these derived constants: + * UNITY_INT_WIDTH, UNITY_LONG_WIDTH, UNITY_POINTER_WIDTH */ +#ifndef UNITY_EXCLUDE_STDINT_H +#include +#endif + +#ifndef UNITY_EXCLUDE_LIMITS_H +#include +#endif + +/*------------------------------------------------------- + * Guess Widths If Not Specified + *-------------------------------------------------------*/ + +/* Determine the size of an int, if not already specified. + * We cannot use sizeof(int), because it is not yet defined + * at this stage in the translation of the C program. + * Also sizeof(int) does return the size in addressable units on all platforms, + * which may not necessarily be the size in bytes. + * Therefore, infer it from UINT_MAX if possible. */ +#ifndef UNITY_INT_WIDTH + #ifdef UINT_MAX + #if (UINT_MAX == 0xFFFF) + #define UNITY_INT_WIDTH (16) + #elif (UINT_MAX == 0xFFFFFFFF) + #define UNITY_INT_WIDTH (32) + #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_INT_WIDTH (64) + #endif + #else /* Set to default */ + #define UNITY_INT_WIDTH (32) + #endif /* UINT_MAX */ +#endif + +/* Determine the size of a long, if not already specified. */ +#ifndef UNITY_LONG_WIDTH + #ifdef ULONG_MAX + #if (ULONG_MAX == 0xFFFF) + #define UNITY_LONG_WIDTH (16) + #elif (ULONG_MAX == 0xFFFFFFFF) + #define UNITY_LONG_WIDTH (32) + #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_LONG_WIDTH (64) + #endif + #else /* Set to default */ + #define UNITY_LONG_WIDTH (32) + #endif /* ULONG_MAX */ +#endif + +/* Determine the size of a pointer, if not already specified. */ +#ifndef UNITY_POINTER_WIDTH + #ifdef UINTPTR_MAX + #if (UINTPTR_MAX <= 0xFFFF) + #define UNITY_POINTER_WIDTH (16) + #elif (UINTPTR_MAX <= 0xFFFFFFFF) + #define UNITY_POINTER_WIDTH (32) + #elif (UINTPTR_MAX <= 0xFFFFFFFFFFFFFFFF) + #define UNITY_POINTER_WIDTH (64) + #endif + #else /* Set to default */ + #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH + #endif /* UINTPTR_MAX */ +#endif + +/*------------------------------------------------------- + * Int Support (Define types based on detected sizes) + *-------------------------------------------------------*/ + +#if (UNITY_INT_WIDTH == 32) + typedef unsigned char UNITY_UINT8; + typedef unsigned short UNITY_UINT16; + typedef unsigned int UNITY_UINT32; + typedef signed char UNITY_INT8; + typedef signed short UNITY_INT16; + typedef signed int UNITY_INT32; +#elif (UNITY_INT_WIDTH == 16) + typedef unsigned char UNITY_UINT8; + typedef unsigned int UNITY_UINT16; + typedef unsigned long UNITY_UINT32; + typedef signed char UNITY_INT8; + typedef signed int UNITY_INT16; + typedef signed long UNITY_INT32; +#else + #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported) +#endif + +/*------------------------------------------------------- + * 64-bit Support + *-------------------------------------------------------*/ + +/* Auto-detect 64 Bit Support */ +#ifndef UNITY_SUPPORT_64 + #if UNITY_LONG_WIDTH == 64 || UNITY_POINTER_WIDTH == 64 + #define UNITY_SUPPORT_64 + #endif +#endif + +/* 64-Bit Support Dependent Configuration */ +#ifndef UNITY_SUPPORT_64 + /* No 64-bit Support */ + typedef UNITY_UINT32 UNITY_UINT; + typedef UNITY_INT32 UNITY_INT; + #define UNITY_MAX_NIBBLES (8) /* Maximum number of nibbles in a UNITY_(U)INT */ +#else + /* 64-bit Support */ + #if (UNITY_LONG_WIDTH == 32) + typedef unsigned long long UNITY_UINT64; + typedef signed long long UNITY_INT64; + #elif (UNITY_LONG_WIDTH == 64) + typedef unsigned long UNITY_UINT64; + typedef signed long UNITY_INT64; + #else + #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported) + #endif + typedef UNITY_UINT64 UNITY_UINT; + typedef UNITY_INT64 UNITY_INT; + #define UNITY_MAX_NIBBLES (16) /* Maximum number of nibbles in a UNITY_(U)INT */ +#endif + +/*------------------------------------------------------- + * Pointer Support + *-------------------------------------------------------*/ + +#if (UNITY_POINTER_WIDTH == 32) + #define UNITY_PTR_TO_INT UNITY_INT32 + #define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32 +#elif (UNITY_POINTER_WIDTH == 64) + #define UNITY_PTR_TO_INT UNITY_INT64 + #define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64 +#elif (UNITY_POINTER_WIDTH == 16) + #define UNITY_PTR_TO_INT UNITY_INT16 + #define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16 +#else + #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported) +#endif + +#ifndef UNITY_PTR_ATTRIBUTE + #define UNITY_PTR_ATTRIBUTE +#endif + +#ifndef UNITY_INTERNAL_PTR + #define UNITY_INTERNAL_PTR UNITY_PTR_ATTRIBUTE const void* +#endif + +/*------------------------------------------------------- + * Float Support + *-------------------------------------------------------*/ + +#ifdef UNITY_EXCLUDE_FLOAT + +/* No Floating Point Support */ +#ifndef UNITY_EXCLUDE_DOUBLE +#define UNITY_EXCLUDE_DOUBLE /* Remove double when excluding float support */ +#endif +#ifndef UNITY_EXCLUDE_FLOAT_PRINT +#define UNITY_EXCLUDE_FLOAT_PRINT +#endif + +#else + +/* Floating Point Support */ +#ifndef UNITY_FLOAT_PRECISION +#define UNITY_FLOAT_PRECISION (0.00001f) +#endif +#ifndef UNITY_FLOAT_TYPE +#define UNITY_FLOAT_TYPE float +#endif +typedef UNITY_FLOAT_TYPE UNITY_FLOAT; + +/* isinf & isnan macros should be provided by math.h */ +#ifndef isinf +/* The value of Inf - Inf is NaN */ +#define isinf(n) (isnan((n) - (n)) && !isnan(n)) +#endif + +#ifndef isnan +/* NaN is the only floating point value that does NOT equal itself. + * Therefore if n != n, then it is NaN. */ +#define isnan(n) ((n != n) ? 1 : 0) +#endif + +#endif + +/*------------------------------------------------------- + * Double Float Support + *-------------------------------------------------------*/ + +/* unlike float, we DON'T include by default */ +#if defined(UNITY_EXCLUDE_DOUBLE) || !defined(UNITY_INCLUDE_DOUBLE) + + /* No Floating Point Support */ + #ifndef UNITY_EXCLUDE_DOUBLE + #define UNITY_EXCLUDE_DOUBLE + #else + #undef UNITY_INCLUDE_DOUBLE + #endif + + #ifndef UNITY_EXCLUDE_FLOAT + #ifndef UNITY_DOUBLE_TYPE + #define UNITY_DOUBLE_TYPE double + #endif + typedef UNITY_FLOAT UNITY_DOUBLE; + /* For parameter in UnityPrintFloat(UNITY_DOUBLE), which aliases to double or float */ + #endif + +#else + + /* Double Floating Point Support */ + #ifndef UNITY_DOUBLE_PRECISION + #define UNITY_DOUBLE_PRECISION (1e-12) + #endif + + #ifndef UNITY_DOUBLE_TYPE + #define UNITY_DOUBLE_TYPE double + #endif + typedef UNITY_DOUBLE_TYPE UNITY_DOUBLE; + +#endif + +/*------------------------------------------------------- + * Output Method: stdout (DEFAULT) + *-------------------------------------------------------*/ +#ifndef UNITY_OUTPUT_CHAR + /* Default to using putchar, which is defined in stdio.h */ + #include + #define UNITY_OUTPUT_CHAR(a) (void)putchar(a) +#else + /* If defined as something else, make sure we declare it here so it's ready for use */ + #ifdef UNITY_OUTPUT_CHAR_HEADER_DECLARATION + extern void UNITY_OUTPUT_CHAR_HEADER_DECLARATION; + #endif +#endif + +#ifndef UNITY_OUTPUT_FLUSH + #ifdef UNITY_USE_FLUSH_STDOUT + /* We want to use the stdout flush utility */ + #include + #define UNITY_OUTPUT_FLUSH() (void)fflush(stdout) + #else + /* We've specified nothing, therefore flush should just be ignored */ + #define UNITY_OUTPUT_FLUSH() + #endif +#else + /* If defined as something else, make sure we declare it here so it's ready for use */ + #ifdef UNITY_OUTPUT_FLUSH_HEADER_DECLARATION + extern void UNITY_OUTPUT_FLUSH_HEADER_DECLARATION; + #endif +#endif + +#ifndef UNITY_OUTPUT_FLUSH +#define UNITY_FLUSH_CALL() +#else +#define UNITY_FLUSH_CALL() UNITY_OUTPUT_FLUSH() +#endif + +#ifndef UNITY_PRINT_EOL +#define UNITY_PRINT_EOL() UNITY_OUTPUT_CHAR('\n') +#endif + +#ifndef UNITY_OUTPUT_START +#define UNITY_OUTPUT_START() +#endif + +#ifndef UNITY_OUTPUT_COMPLETE +#define UNITY_OUTPUT_COMPLETE() +#endif + +#ifdef UNITY_INCLUDE_EXEC_TIME + #if !defined(UNITY_EXEC_TIME_START) && \ + !defined(UNITY_EXEC_TIME_STOP) && \ + !defined(UNITY_PRINT_EXEC_TIME) && \ + !defined(UNITY_TIME_TYPE) + /* If none any of these macros are defined then try to provide a default implementation */ + + #if defined(UNITY_CLOCK_MS) + /* This is a simple way to get a default implementation on platforms that support getting a millisecond counter */ + #define UNITY_TIME_TYPE UNITY_UINT + #define UNITY_EXEC_TIME_START() Unity.CurrentTestStartTime = UNITY_CLOCK_MS() + #define UNITY_EXEC_TIME_STOP() Unity.CurrentTestStopTime = UNITY_CLOCK_MS() + #define UNITY_PRINT_EXEC_TIME() { \ + UNITY_UINT execTimeMs = (Unity.CurrentTestStopTime - Unity.CurrentTestStartTime); \ + UnityPrint(" ("); \ + UnityPrintNumberUnsigned(execTimeMs); \ + UnityPrint(" ms)"); \ + } + #elif defined(_WIN32) + #include + #define UNITY_TIME_TYPE clock_t + #define UNITY_GET_TIME(t) t = (clock_t)((clock() * 1000) / CLOCKS_PER_SEC) + #define UNITY_EXEC_TIME_START() UNITY_GET_TIME(Unity.CurrentTestStartTime) + #define UNITY_EXEC_TIME_STOP() UNITY_GET_TIME(Unity.CurrentTestStopTime) + #define UNITY_PRINT_EXEC_TIME() { \ + UNITY_UINT execTimeMs = (Unity.CurrentTestStopTime - Unity.CurrentTestStartTime); \ + UnityPrint(" ("); \ + UnityPrintNumberUnsigned(execTimeMs); \ + UnityPrint(" ms)"); \ + } + #elif defined(__unix__) + #include + #define UNITY_TIME_TYPE struct timespec + #define UNITY_GET_TIME(t) clock_gettime(CLOCK_MONOTONIC, &t) + #define UNITY_EXEC_TIME_START() UNITY_GET_TIME(Unity.CurrentTestStartTime) + #define UNITY_EXEC_TIME_STOP() UNITY_GET_TIME(Unity.CurrentTestStopTime) + #define UNITY_PRINT_EXEC_TIME() { \ + UNITY_UINT execTimeMs = ((Unity.CurrentTestStopTime.tv_sec - Unity.CurrentTestStartTime.tv_sec) * 1000L); \ + execTimeMs += ((Unity.CurrentTestStopTime.tv_nsec - Unity.CurrentTestStartTime.tv_nsec) / 1000000L); \ + UnityPrint(" ("); \ + UnityPrintNumberUnsigned(execTimeMs); \ + UnityPrint(" ms)"); \ + } + #endif + #endif +#endif + +#ifndef UNITY_EXEC_TIME_START +#define UNITY_EXEC_TIME_START() do{}while(0) +#endif + +#ifndef UNITY_EXEC_TIME_STOP +#define UNITY_EXEC_TIME_STOP() do{}while(0) +#endif + +#ifndef UNITY_TIME_TYPE +#define UNITY_TIME_TYPE UNITY_UINT +#endif + +#ifndef UNITY_PRINT_EXEC_TIME +#define UNITY_PRINT_EXEC_TIME() do{}while(0) +#endif + +/*------------------------------------------------------- + * Footprint + *-------------------------------------------------------*/ + +#ifndef UNITY_LINE_TYPE +#define UNITY_LINE_TYPE UNITY_UINT +#endif + +#ifndef UNITY_COUNTER_TYPE +#define UNITY_COUNTER_TYPE UNITY_UINT +#endif + +/*------------------------------------------------------- + * Internal Structs Needed + *-------------------------------------------------------*/ + +typedef void (*UnityTestFunction)(void); + +#define UNITY_DISPLAY_RANGE_INT (0x10) +#define UNITY_DISPLAY_RANGE_UINT (0x20) +#define UNITY_DISPLAY_RANGE_HEX (0x40) +#define UNITY_DISPLAY_RANGE_CHAR (0x80) + +typedef enum +{ + UNITY_DISPLAY_STYLE_INT = (UNITY_INT_WIDTH / 8) + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT8 = 1 + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT16 = 2 + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT32 = 4 + UNITY_DISPLAY_RANGE_INT, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_INT64 = 8 + UNITY_DISPLAY_RANGE_INT, +#endif + + UNITY_DISPLAY_STYLE_UINT = (UNITY_INT_WIDTH / 8) + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT8 = 1 + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT16 = 2 + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT32 = 4 + UNITY_DISPLAY_RANGE_UINT, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_UINT64 = 8 + UNITY_DISPLAY_RANGE_UINT, +#endif + + UNITY_DISPLAY_STYLE_HEX8 = 1 + UNITY_DISPLAY_RANGE_HEX, + UNITY_DISPLAY_STYLE_HEX16 = 2 + UNITY_DISPLAY_RANGE_HEX, + UNITY_DISPLAY_STYLE_HEX32 = 4 + UNITY_DISPLAY_RANGE_HEX, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_HEX64 = 8 + UNITY_DISPLAY_RANGE_HEX, +#endif + + UNITY_DISPLAY_STYLE_CHAR = 1 + UNITY_DISPLAY_RANGE_CHAR + UNITY_DISPLAY_RANGE_INT, + + UNITY_DISPLAY_STYLE_UNKNOWN +} UNITY_DISPLAY_STYLE_T; + +typedef enum +{ + UNITY_WITHIN = 0x0, + UNITY_EQUAL_TO = 0x1, + UNITY_GREATER_THAN = 0x2, + UNITY_GREATER_OR_EQUAL = 0x2 + UNITY_EQUAL_TO, + UNITY_SMALLER_THAN = 0x4, + UNITY_SMALLER_OR_EQUAL = 0x4 + UNITY_EQUAL_TO, + UNITY_UNKNOWN +} UNITY_COMPARISON_T; + +#ifndef UNITY_EXCLUDE_FLOAT +typedef enum UNITY_FLOAT_TRAIT +{ + UNITY_FLOAT_IS_NOT_INF = 0, + UNITY_FLOAT_IS_INF, + UNITY_FLOAT_IS_NOT_NEG_INF, + UNITY_FLOAT_IS_NEG_INF, + UNITY_FLOAT_IS_NOT_NAN, + UNITY_FLOAT_IS_NAN, + UNITY_FLOAT_IS_NOT_DET, + UNITY_FLOAT_IS_DET, + UNITY_FLOAT_INVALID_TRAIT +} UNITY_FLOAT_TRAIT_T; +#endif + +typedef enum +{ + UNITY_ARRAY_TO_VAL = 0, + UNITY_ARRAY_TO_ARRAY, + UNITY_ARRAY_UNKNOWN +} UNITY_FLAGS_T; + +struct UNITY_STORAGE_T +{ + const char* TestFile; + const char* CurrentTestName; +#ifndef UNITY_EXCLUDE_DETAILS + const char* CurrentDetail1; + const char* CurrentDetail2; +#endif + UNITY_LINE_TYPE CurrentTestLineNumber; + UNITY_COUNTER_TYPE NumberOfTests; + UNITY_COUNTER_TYPE TestFailures; + UNITY_COUNTER_TYPE TestIgnores; + UNITY_COUNTER_TYPE CurrentTestFailed; + UNITY_COUNTER_TYPE CurrentTestIgnored; +#ifdef UNITY_INCLUDE_EXEC_TIME + UNITY_TIME_TYPE CurrentTestStartTime; + UNITY_TIME_TYPE CurrentTestStopTime; +#endif +#ifndef UNITY_EXCLUDE_SETJMP_H + jmp_buf AbortFrame; +#endif +}; + +extern struct UNITY_STORAGE_T Unity; + +/*------------------------------------------------------- + * Test Suite Management + *-------------------------------------------------------*/ + +void UnityBegin(const char* filename); +int UnityEnd(void); +void UnitySetTestFile(const char* filename); +void UnityConcludeTest(void); +void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum); + +/*------------------------------------------------------- + * Details Support + *-------------------------------------------------------*/ + +#ifdef UNITY_EXCLUDE_DETAILS +#define UNITY_CLR_DETAILS() +#define UNITY_SET_DETAIL(d1) +#define UNITY_SET_DETAILS(d1,d2) +#else +#define UNITY_CLR_DETAILS() { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; } +#define UNITY_SET_DETAIL(d1) { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = 0; } +#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = (d1); Unity.CurrentDetail2 = (d2); } + +#ifndef UNITY_DETAIL1_NAME +#define UNITY_DETAIL1_NAME "Function" +#endif + +#ifndef UNITY_DETAIL2_NAME +#define UNITY_DETAIL2_NAME "Argument" +#endif +#endif + +/*------------------------------------------------------- + * Test Output + *-------------------------------------------------------*/ + +void UnityPrint(const char* string); + +#ifdef UNITY_INCLUDE_PRINT_FORMATTED +void UnityPrintFormatted(const char* format, ...); +#endif + +void UnityPrintLen(const char* string, const UNITY_UINT32 length); +void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number); +void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style); +void UnityPrintNumber(const UNITY_INT number_to_print); +void UnityPrintNumberUnsigned(const UNITY_UINT number); +void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles_to_print); + +#ifndef UNITY_EXCLUDE_FLOAT_PRINT +void UnityPrintFloat(const UNITY_DOUBLE input_number); +#endif + +/*------------------------------------------------------- + * Test Assertion Functions + *------------------------------------------------------- + * Use the macros below this section instead of calling + * these directly. The macros have a consistent naming + * convention and will pull in file and line information + * for you. */ + +void UnityAssertEqualNumber(const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertGreaterOrLessOrEqualNumber(const UNITY_INT threshold, + const UNITY_INT actual, + const UNITY_COMPARISON_T compare, + const char *msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style, + const UNITY_FLAGS_T flags); + +void UnityAssertBits(const UNITY_INT mask, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualString(const char* expected, + const char* actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualStringLen(const char* expected, + const char* actual, + const UNITY_UINT32 length, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualStringArray( UNITY_INTERNAL_PTR expected, + const char** actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags); + +void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 length, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags); + +void UnityAssertNumbersWithin(const UNITY_UINT delta, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertNumbersArrayWithin(const UNITY_UINT delta, + UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style, + const UNITY_FLAGS_T flags); + +void UnityFail(const char* message, const UNITY_LINE_TYPE line); +void UnityIgnore(const char* message, const UNITY_LINE_TYPE line); +void UnityMessage(const char* message, const UNITY_LINE_TYPE line); + +#ifndef UNITY_EXCLUDE_FLOAT +void UnityAssertFloatsWithin(const UNITY_FLOAT delta, + const UNITY_FLOAT expected, + const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected, + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags); + +void UnityAssertFloatSpecial(const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style); +#endif + +#ifndef UNITY_EXCLUDE_DOUBLE +void UnityAssertDoublesWithin(const UNITY_DOUBLE delta, + const UNITY_DOUBLE expected, + const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expected, + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLAGS_T flags); + +void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style); +#endif + +/*------------------------------------------------------- + * Helpers + *-------------------------------------------------------*/ + +UNITY_INTERNAL_PTR UnityNumToPtr(const UNITY_INT num, const UNITY_UINT8 size); +#ifndef UNITY_EXCLUDE_FLOAT +UNITY_INTERNAL_PTR UnityFloatToPtr(const float num); +#endif +#ifndef UNITY_EXCLUDE_DOUBLE +UNITY_INTERNAL_PTR UnityDoubleToPtr(const double num); +#endif + +/*------------------------------------------------------- + * Error Strings We Might Need + *-------------------------------------------------------*/ + +extern const char UnityStrOk[]; +extern const char UnityStrPass[]; +extern const char UnityStrFail[]; +extern const char UnityStrIgnore[]; + +extern const char UnityStrErrFloat[]; +extern const char UnityStrErrDouble[]; +extern const char UnityStrErr64[]; +extern const char UnityStrErrShorthand[]; + +/*------------------------------------------------------- + * Test Running Macros + *-------------------------------------------------------*/ + +#ifndef UNITY_EXCLUDE_SETJMP_H +#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0) +#define TEST_ABORT() longjmp(Unity.AbortFrame, 1) +#else +#define TEST_PROTECT() 1 +#define TEST_ABORT() return +#endif + +/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */ +#ifndef RUN_TEST +#ifdef __STDC_VERSION__ +#if __STDC_VERSION__ >= 199901L +#define UNITY_SUPPORT_VARIADIC_MACROS +#endif +#endif +#ifdef UNITY_SUPPORT_VARIADIC_MACROS +#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__)) +#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway) +#define RUN_TEST_FIRST_HELPER(first, ...) (first), #first +#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway) +#define RUN_TEST_SECOND_HELPER(first, second, ...) (second) +#endif +#endif + +/* If we can't do the tricky version, we'll just have to require them to always include the line number */ +#ifndef RUN_TEST +#ifdef CMOCK +#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num) +#else +#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__) +#endif +#endif + +#define TEST_LINE_NUM (Unity.CurrentTestLineNumber) +#define TEST_IS_IGNORED (Unity.CurrentTestIgnored) +#define UNITY_NEW_TEST(a) \ + Unity.CurrentTestName = (a); \ + Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \ + Unity.NumberOfTests++; + +#ifndef UNITY_BEGIN +#define UNITY_BEGIN() UnityBegin(__FILE__) +#endif + +#ifndef UNITY_END +#define UNITY_END() UnityEnd() +#endif + +#ifndef UNITY_SHORTHAND_AS_INT +#ifndef UNITY_SHORTHAND_AS_MEM +#ifndef UNITY_SHORTHAND_AS_NONE +#ifndef UNITY_SHORTHAND_AS_RAW +#define UNITY_SHORTHAND_AS_OLD +#endif +#endif +#endif +#endif + +/*----------------------------------------------- + * Command Line Argument Support + *-----------------------------------------------*/ + +#ifdef UNITY_USE_COMMAND_LINE_ARGS +int UnityParseOptions(int argc, char** argv); +int UnityTestMatches(void); +#endif + +/*------------------------------------------------------- + * Basic Fail and Ignore + *-------------------------------------------------------*/ + +#define UNITY_TEST_FAIL(line, message) UnityFail( (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)(line)) + +/*------------------------------------------------------- + * Test Asserts + *-------------------------------------------------------*/ + +#define UNITY_TEST_ASSERT(condition, line, message) if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), (message));} +#define UNITY_TEST_ASSERT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) == NULL), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) != NULL), (UNITY_LINE_TYPE)(line), (message)) + +#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_EQUAL_INT8(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT8 )(expected), (UNITY_INT)(UNITY_INT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_EQUAL_INT16(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)(expected), (UNITY_INT)(UNITY_INT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_EQUAL_INT32(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT32)(expected), (UNITY_INT)(UNITY_INT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_EQUAL_UINT(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_EQUAL_UINT8(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_UINT8 )(expected), (UNITY_INT)(UNITY_UINT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_EQUAL_UINT16(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_UINT16)(expected), (UNITY_INT)(UNITY_UINT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_EQUAL_UINT32(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_UINT32)(expected), (UNITY_INT)(UNITY_UINT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_EQUAL_HEX8(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT8 )(expected), (UNITY_INT)(UNITY_INT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_EQUAL_HEX16(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)(expected), (UNITY_INT)(UNITY_INT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_EQUAL_HEX32(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT32)(expected), (UNITY_INT)(UNITY_INT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_EQUAL_CHAR(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT8 )(expected), (UNITY_INT)(UNITY_INT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR) +#define UNITY_TEST_ASSERT_BITS(mask, expected, actual, line, message) UnityAssertBits((UNITY_INT)(mask), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line)) + +#define UNITY_TEST_ASSERT_GREATER_THAN_INT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_GREATER_THAN_INT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 )(threshold), (UNITY_INT)(UNITY_INT8 )(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_GREATER_THAN_INT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT16)(threshold), (UNITY_INT)(UNITY_INT16)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_GREATER_THAN_INT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT32)(threshold), (UNITY_INT)(UNITY_INT32)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_GREATER_THAN_UINT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_GREATER_THAN_UINT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_GREATER_THAN_UINT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_GREATER_THAN_UINT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_GREATER_THAN_HEX8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_GREATER_THAN_HEX16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_GREATER_THAN_HEX32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_GREATER_THAN_CHAR(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 )(threshold), (UNITY_INT)(UNITY_INT8 )(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR) + +#define UNITY_TEST_ASSERT_SMALLER_THAN_INT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_SMALLER_THAN_INT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 )(threshold), (UNITY_INT)(UNITY_INT8 )(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_SMALLER_THAN_INT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT16)(threshold), (UNITY_INT)(UNITY_INT16)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_SMALLER_THAN_INT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT32)(threshold), (UNITY_INT)(UNITY_INT32)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_SMALLER_THAN_UINT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_SMALLER_THAN_UINT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_SMALLER_THAN_UINT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_SMALLER_THAN_UINT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_SMALLER_THAN_HEX8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_SMALLER_THAN_HEX16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_SMALLER_THAN_HEX32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_SMALLER_THAN_CHAR(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 )(threshold), (UNITY_INT)(UNITY_INT8 )(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR) + +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT) (threshold), (UNITY_INT) (actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 ) (threshold), (UNITY_INT)(UNITY_INT8 ) (actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT16) (threshold), (UNITY_INT)(UNITY_INT16) (actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT32) (threshold), (UNITY_INT)(UNITY_INT32) (actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT) (threshold), (UNITY_INT) (actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 ) (threshold), (UNITY_INT)(UNITY_INT8 ) (actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR) + +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT) (threshold), (UNITY_INT) (actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 )(threshold), (UNITY_INT)(UNITY_INT8 ) (actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT16)(threshold), (UNITY_INT)(UNITY_INT16) (actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT32)(threshold), (UNITY_INT)(UNITY_INT32) (actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT) (threshold), (UNITY_INT) (actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT8 )(threshold), (UNITY_INT)(UNITY_UINT8 )(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT16)(threshold), (UNITY_INT)(UNITY_UINT16)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_UINT32)(threshold), (UNITY_INT)(UNITY_UINT32)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(UNITY_INT8 )(threshold), (UNITY_INT)(UNITY_INT8 ) (actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR) + +#define UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin( (delta), (UNITY_INT) (expected), (UNITY_INT) (actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_INT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_INT8 ) (expected), (UNITY_INT)(UNITY_INT8 ) (actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_INT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT16)(delta), (UNITY_INT)(UNITY_INT16) (expected), (UNITY_INT)(UNITY_INT16) (actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_INT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT32)(delta), (UNITY_INT)(UNITY_INT32) (expected), (UNITY_INT)(UNITY_INT32) (actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin( (delta), (UNITY_INT) (expected), (UNITY_INT) (actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_UINT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_UINT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT16)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_UINT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT32)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT16)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT32)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_CHAR_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_INT8 ) (expected), (UNITY_INT)(UNITY_INT8 ) (actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR) + +#define UNITY_TEST_ASSERT_INT_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin( (delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT8 )(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT16)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT32)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin( (delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin( (UNITY_UINT16)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT16)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT32)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT8 )(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT16)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT32)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT8 )(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), ((UNITY_UINT32)(num_elements)), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR, UNITY_ARRAY_TO_ARRAY) + + +#define UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, line, message) UnityAssertEqualNumber((UNITY_PTR_TO_INT)(expected), (UNITY_PTR_TO_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER) +#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message) UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len, line, message) UnityAssertEqualStringLen((const char*)(expected), (const char*)(actual), (UNITY_UINT32)(len), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), 1, (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY) + +#define UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((UNITY_INTERNAL_PTR)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR, UNITY_ARRAY_TO_ARRAY) + +#define UNITY_TEST_ASSERT_EACH_EQUAL_INT(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT) (expected), (UNITY_INT_WIDTH / 8)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_INT8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_INT16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT16 )(expected), 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT32 )(expected), 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT) (expected), (UNITY_INT_WIDTH / 8)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT16)(expected), 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT32)(expected), 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX8(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX16(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT16 )(expected), 2), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX32(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT32 )(expected), 4), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_PTR(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_PTR_TO_INT) (expected), (UNITY_POINTER_WIDTH / 8)), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_STRING(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((UNITY_INTERNAL_PTR)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_CHAR(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT8 )(expected), 1), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_CHAR, UNITY_ARRAY_TO_VAL) + +#ifdef UNITY_SUPPORT_64 +#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EACH_EQUAL_INT64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT64)(expected), 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_UINT64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_UINT64)(expected), 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_EACH_EQUAL_HEX64(expected, actual, num_elements, line, message) UnityAssertEqualIntArray(UnityNumToPtr((UNITY_INT)(UNITY_INT64)(expected), 8), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_GREATER_THAN_INT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_GREATER_THAN_UINT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_GREATER_THAN_HEX64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_GREATER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_SMALLER_THAN_INT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_SMALLER_THAN_UINT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_SMALLER_THAN_HEX64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_THAN, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64(threshold, actual, line, message) UnityAssertGreaterOrLessOrEqualNumber((UNITY_INT)(threshold), (UNITY_INT)(actual), UNITY_SMALLER_OR_EQUAL, (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT64)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT64)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64, UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UnityAssertNumbersArrayWithin((UNITY_UINT64)(delta), (UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64, UNITY_ARRAY_TO_ARRAY) +#else +#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_GREATER_THAN_INT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_GREATER_THAN_UINT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_GREATER_THAN_HEX64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_SMALLER_THAN_INT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_SMALLER_THAN_UINT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_SMALLER_THAN_HEX64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64(threshold, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN(delta, expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#endif + +#ifdef UNITY_EXCLUDE_FLOAT +#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#else +#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((UNITY_FLOAT)(delta), (UNITY_FLOAT)(expected), (UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((UNITY_FLOAT)(expected) * (UNITY_FLOAT)UNITY_FLOAT_PRECISION, (UNITY_FLOAT)(expected), (UNITY_FLOAT)(actual), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((UNITY_FLOAT*)(expected), (UNITY_FLOAT*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray(UnityFloatToPtr(expected), (UNITY_FLOAT*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN) +#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET) +#endif + +#ifdef UNITY_EXCLUDE_DOUBLE +#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#else +#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((UNITY_DOUBLE)(delta), (UNITY_DOUBLE)(expected), (UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((UNITY_DOUBLE)(expected) * (UNITY_DOUBLE)UNITY_DOUBLE_PRECISION, (UNITY_DOUBLE)(expected), (UNITY_DOUBLE)(actual), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((UNITY_DOUBLE*)(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_ARRAY) +#define UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray(UnityDoubleToPtr(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_ARRAY_TO_VAL) +#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN) +#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET) +#endif + +/* End of UNITY_INTERNALS_H */ +#endif diff --git a/hardware/common/unikbd.lib b/hardware/common/unikbd.lib new file mode 100644 index 0000000..487db75 --- /dev/null +++ b/hardware/common/unikbd.lib @@ -0,0 +1,15 @@ +EESchema-LIBRARY Version 2.4 +#encoding utf-8 +# +# Cherry_MX_LED +# +DEF Cherry_MX_LED SW** 0 0 N N 1 F N +F0 "SW**" 0 200 50 H V C CNN +F1 "Cherry_MX_LED" 0 -250 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +DRAW +ENDDRAW +ENDDEF +# +#End Library diff --git a/hardware/common/unikbd.pretty/Cherry aligner.kicad_mod b/hardware/common/unikbd.pretty/Cherry aligner.kicad_mod new file mode 100644 index 0000000..e99b557 --- /dev/null +++ b/hardware/common/unikbd.pretty/Cherry aligner.kicad_mod @@ -0,0 +1,12 @@ +(module "Cherry aligner" (layer F.Cu) (tedit 5DA626D6) + (fp_text reference "REF**" (at -5.0292 -7.7724) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Cherry aligner" (at 0 7.9756) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer Edge.Cuts) (width 0.12)) +) diff --git a/hardware/common/unikbd.pretty/D_DO-35_SOD27_P7.62mm_Horizontal_bypassed.kicad_mod b/hardware/common/unikbd.pretty/D_DO-35_SOD27_P7.62mm_Horizontal_bypassed.kicad_mod new file mode 100644 index 0000000..364e94c --- /dev/null +++ b/hardware/common/unikbd.pretty/D_DO-35_SOD27_P7.62mm_Horizontal_bypassed.kicad_mod @@ -0,0 +1,49 @@ +(module D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (fp_text reference REF** (at 3.81 -2.12) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D_DO-35_SOD27_P7.62mm_Horizontal (at 3.81 2.12) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (pad 2 thru_hole oval (at 7.62 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) + (pad 1 thru_hole rect (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/hardware/common/unikbd.pretty/Futaba-MD-4PCS-aligner.kicad_mod b/hardware/common/unikbd.pretty/Futaba-MD-4PCS-aligner.kicad_mod new file mode 100644 index 0000000..db299d1 --- /dev/null +++ b/hardware/common/unikbd.pretty/Futaba-MD-4PCS-aligner.kicad_mod @@ -0,0 +1,13 @@ +(module "Futaba-MD-4PCS-aligner" (layer F.Cu) (tedit 5DA63068) + (fp_text reference "REF**" (at -3.937 -8.3566) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MD-4PCS-aligner" (at 0.1524 8.8646) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer Edge.Cuts) (width 0.12)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) +) diff --git a/hardware/common/unikbd.pretty/Key_MX.kicad_mod b/hardware/common/unikbd.pretty/Key_MX.kicad_mod new file mode 100644 index 0000000..4470844 --- /dev/null +++ b/hardware/common/unikbd.pretty/Key_MX.kicad_mod @@ -0,0 +1,24 @@ +(module "Key_MX" (layer F.Cu) (tedit 5DA6279D) + (fp_text reference "SW_**" (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Key_MX" (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (pad "4" thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad "3" thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad "1" thru_hole circle (at 0 -4.0005) (size 2.2352 2.2352) (drill 1.397) (layers *.Cu *.Mask)) + (pad "2" thru_hole circle (at 0 4.0005) (size 2.2352 2.2352) (drill 1.397) (layers *.Cu *.Mask)) +) diff --git a/hardware/common/unikbd.pretty/Key_MX_LED.kicad_mod b/hardware/common/unikbd.pretty/Key_MX_LED.kicad_mod new file mode 100644 index 0000000..28d653a --- /dev/null +++ b/hardware/common/unikbd.pretty/Key_MX_LED.kicad_mod @@ -0,0 +1,26 @@ +(module Key_MX_LED (layer F.Cu) (tedit 5DF12B03) + (fp_text reference SW_** (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Key_MX (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (pad 5 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 6 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.0005) (size 2.2352 2.2352) (drill 1.397) (layers *.Cu *.Mask)) + (pad 2 thru_hole circle (at 0 4.0005) (size 1.651 1.651) (drill 1.397) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at 1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask)) + (pad 3 thru_hole circle (at -1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask)) +) diff --git a/hardware/common/unikbd.pretty/MX_space_align.mod b/hardware/common/unikbd.pretty/MX_space_align.mod new file mode 100644 index 0000000..48a4226 --- /dev/null +++ b/hardware/common/unikbd.pretty/MX_space_align.mod @@ -0,0 +1,12 @@ +(module "Cherry aligner" (layer F.Cu) (tedit 5D993F00) + (fp_text reference "REF**" (at -3.81 -6.858) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Cherry aligner" (at -0.508 6.985) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -5.715 -5.715) (end -5.715 5.715) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 5.715 5.715) (end 5.715 -5.715) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -5.715 -5.715) (end 5.715 -5.715) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -5.715 5.715) (end 5.715 5.715) (layer Edge.Cuts) (width 0.12)) +) diff --git a/hardware/common/unikbd.pretty/MX_space_aligner.kicad_mod b/hardware/common/unikbd.pretty/MX_space_aligner.kicad_mod new file mode 100644 index 0000000..3578739 --- /dev/null +++ b/hardware/common/unikbd.pretty/MX_space_aligner.kicad_mod @@ -0,0 +1,44 @@ +(module "MX_space_aligner" (layer F.Cu) (tedit 5DA62851) + (fp_text reference "SW**" (at -5.334 -7.874) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MX_space_aligner" (at -0.6096 7.9248) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 6.985 -6.985) (end 6.985 -1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 6.985 -1.397) (end 63.3476 -1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 63.3476 -1.397) (end 63.3476 -5.6896) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 63.3476 -5.6896) (end 70.0024 -5.6896) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 70.0024 -5.6896) (end 70.0024 -2.286) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 70.0024 -2.286) (end 70.866 -2.286) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 70.866 -2.286) (end 70.866 0.508) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 70.866 0.508) (end 70.0024 0.508) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 70.0024 0.508) (end 70.0024 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 70.0024 6.604) (end 68.199 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 68.199 6.604) (end 68.199 7.7724) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 68.199 7.7724) (end 65.151 7.7724) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 65.151 7.7724) (end 65.151 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 65.151 6.604) (end 63.3476 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 63.3476 6.604) (end 63.3476 1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 63.3476 1.397) (end 6.985 1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 6.985 1.397) (end 6.985 6.985) (layer Edge.Cuts) (width 0.12)) + (fp_line (start 6.985 6.985) (end -6.985 6.985) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -6.985 6.985) (end -6.985 1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -6.985 1.397) (end -63.3476 1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -63.3476 1.397) (end -63.3476 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -63.3476 6.604) (end -65.151 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -65.151 6.604) (end -65.151 7.7724) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -65.151 7.7724) (end -68.199 7.7724) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -68.199 7.7724) (end -68.199 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -68.199 6.604) (end -70.0024 6.604) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -70.0024 6.604) (end -70.0024 0.508) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -70.0024 0.508) (end -70.866 0.508) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -70.866 0.508) (end -70.866 -2.286) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -70.866 -2.286) (end -70.0024 -2.286) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -70.0024 -2.286) (end -70.0024 -5.6896) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -70.0024 -5.6896) (end -63.3476 -5.6896) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -63.3476 -5.6896) (end -63.3476 -1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -63.3476 -1.397) (end -6.985 -1.397) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -6.985 -1.397) (end -6.985 -6.985) (layer Edge.Cuts) (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer Edge.Cuts) (width 0.12)) +) diff --git a/hardware/common/unikbd.pretty/MountingHole_3.5mm.kicad_mod b/hardware/common/unikbd.pretty/MountingHole_3.5mm.kicad_mod new file mode 100644 index 0000000..55ecdee --- /dev/null +++ b/hardware/common/unikbd.pretty/MountingHole_3.5mm.kicad_mod @@ -0,0 +1,17 @@ +(module MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_text user %R (at 0.3 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) +) diff --git a/hardware/common/unikbd.pretty/PinHeader_2x20_P2.54mm_Vertical.kicad_mod b/hardware/common/unikbd.pretty/PinHeader_2x20_P2.54mm_Vertical.kicad_mod new file mode 100644 index 0000000..1248446 --- /dev/null +++ b/hardware/common/unikbd.pretty/PinHeader_2x20_P2.54mm_Vertical.kicad_mod @@ -0,0 +1,75 @@ +(module PinHeader_2x20_P2.54mm_Vertical (layer F.Cu) (tedit 5DEFFCEB) + (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") + (tags "Through hole pin header THT 2x20 2.54mm double row") + (fp_text reference REF** (at 1.2954 -2.5078) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value PinHeader_2x20_P2.54mm_Vertical (at 1.27 50.59) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 2.5654 -1.4478) (end -1.2446 -1.4478) (layer F.Fab) (width 0.1)) + (fp_line (start -1.2446 -1.4478) (end -1.2446 49.3522) (layer F.Fab) (width 0.1)) + (fp_line (start -1.2446 49.3522) (end 3.8354 49.3522) (layer F.Fab) (width 0.1)) + (fp_line (start 3.8354 49.3522) (end 3.8354 -0.1778) (layer F.Fab) (width 0.1)) + (fp_line (start 3.8354 -0.1778) (end 2.5654 -1.4478) (layer F.Fab) (width 0.1)) + (fp_line (start 3.8954 49.4122) (end -1.3046 49.4122) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 1.0922) (end 3.8954 49.4122) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.3046 -1.5078) (end -1.3046 49.4122) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 1.0922) (end 1.2954 1.0922) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.2954 1.0922) (end 1.2954 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.2954 -1.5078) (end -1.3046 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 -0.1778) (end 3.8954 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 -1.5078) (end 2.5654 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.3654 -1.9778) (end 4.3654 49.8722) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3654 49.8722) (end -1.7846 49.8722) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7846 49.8722) (end -1.7846 -1.9778) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7846 -1.9778) (end 4.3654 -1.9778) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 1.2954 23.9522 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 2.5654 -0.1778) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 2 thru_hole oval (at 0.0254 -0.1778) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 3 thru_hole oval (at 2.5654 2.3622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 4 thru_hole oval (at 0.0254 2.3622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 5 thru_hole oval (at 2.5654 4.9022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 6 thru_hole oval (at 0.0254 4.9022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 7 thru_hole oval (at 2.5654 7.4422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 8 thru_hole oval (at 0.0254 7.4422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 9 thru_hole oval (at 2.5654 9.9822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 10 thru_hole oval (at 0.0254 9.9822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 11 thru_hole oval (at 2.5654 12.5222) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 12 thru_hole oval (at 0.0254 12.5222) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 13 thru_hole oval (at 2.5654 15.0622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 14 thru_hole oval (at 0.0254 15.0622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 15 thru_hole oval (at 2.5654 17.6022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 16 thru_hole oval (at 0.0254 17.6022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 17 thru_hole oval (at 2.5654 20.1422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 18 thru_hole oval (at 0.0254 20.1422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 19 thru_hole oval (at 2.5654 22.6822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 20 thru_hole oval (at 0.0254 22.6822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 21 thru_hole oval (at 2.5654 25.2222) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 22 thru_hole oval (at 0.0254 25.2222) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 23 thru_hole oval (at 2.5654 27.7622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 24 thru_hole oval (at 0.0254 27.7622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 25 thru_hole oval (at 2.5654 30.3022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 26 thru_hole oval (at 0.0254 30.3022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 27 thru_hole oval (at 2.5654 32.8422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 28 thru_hole oval (at 0.0254 32.8422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 29 thru_hole oval (at 2.5654 35.3822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 30 thru_hole oval (at 0.0254 35.3822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 31 thru_hole oval (at 2.5654 37.9222) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 32 thru_hole oval (at 0.0254 37.9222) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 33 thru_hole oval (at 2.5654 40.4622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 34 thru_hole oval (at 0.0254 40.4622) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 35 thru_hole oval (at 2.5654 43.0022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 36 thru_hole oval (at 0.0254 43.0022) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 37 thru_hole oval (at 2.5654 45.5422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 38 thru_hole oval (at 0.0254 45.5422) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 39 thru_hole oval (at 2.5654 48.0822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (pad 40 thru_hole oval (at 0.0254 48.0822) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_2x20_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) +) diff --git a/hardware/interface-ascii/interface-ascii.kicad_pcb b/hardware/interface-ascii/interface-ascii.kicad_pcb new file mode 100644 index 0000000..8905f42 --- /dev/null +++ b/hardware/interface-ascii/interface-ascii.kicad_pcb @@ -0,0 +1,4055 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.5-0-10_14)") + + (general + (thickness 1.6) + (drawings 32) + (tracks 861) + (zones 0) + (modules 47) + (nets 97) + ) + + (page B) + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (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 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (grid_origin 209.4 88.8) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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 0) + (scaleselection 1) + (outputdirectory "outputs")) + ) + + (net 0 "") + (net 1 GND) + (net 2 +5V) + (net 3 /Row3) + (net 4 /Row0) + (net 5 /Row1) + (net 6 /Row4) + (net 7 /Row5) + (net 8 /Row7) + (net 9 /D7) + (net 10 /D1) + (net 11 /D2) + (net 12 /D3) + (net 13 /D4) + (net 14 /D5) + (net 15 /D6) + (net 16 /Col0) + (net 17 /Col1) + (net 18 /Col2) + (net 19 /Col3) + (net 20 /Col4) + (net 21 /Col5) + (net 22 /Col6) + (net 23 /Col7) + (net 24 /Row6) + (net 25 /Row2) + (net 26 /D0) + (net 27 "Net-(D1-Pad2)") + (net 28 "Net-(D2-Pad2)") + (net 29 /CAPS_LED) + (net 30 "Net-(U1-Pad25)") + (net 31 "Net-(U1-Pad24)") + (net 32 "Net-(U1-Pad23)") + (net 33 /ClrScr) + (net 34 "Net-(J4-Pad14)") + (net 35 "Net-(J4-Pad16)") + (net 36 /~SYS_RESET) + (net 37 /~STROBE) + (net 38 "Net-(U1-Pad14)") + (net 39 "Net-(U1-Pad26)") + (net 40 "Net-(U1-Pad16)") + (net 41 "Net-(U1-Pad15)") + (net 42 /Row10) + (net 43 /Row9) + (net 44 /Row8) + (net 45 /Row15) + (net 46 /Row14) + (net 47 /Row13) + (net 48 /Row12) + (net 49 /Row11) + (net 50 "Net-(U3-Pad9)") + (net 51 /~RESET) + (net 52 /MOSI) + (net 53 /SCK) + (net 54 /MISO) + (net 55 /Tx) + (net 56 /Rx) + (net 57 "Net-(U4-Pad2)") + (net 58 "Net-(J1-Pad10)") + (net 59 "Net-(J1-Pad11)") + (net 60 "Net-(J1-Pad13)") + (net 61 "Net-(J2-Pad9)") + (net 62 "Net-(J2-Pad4)") + (net 63 "Net-(J2-Pad14)") + (net 64 "Net-(J2-Pad15)") + (net 65 "Net-(J2-Pad16)") + (net 66 "Net-(D3-Pad2)") + (net 67 "Net-(D4-Pad2)") + (net 68 "Net-(D5-Pad2)") + (net 69 "Net-(D6-Pad2)") + (net 70 "Net-(D7-Pad2)") + (net 71 "Net-(D8-Pad2)") + (net 72 "Net-(D9-Pad2)") + (net 73 "Net-(D10-Pad2)") + (net 74 "Net-(J4-Pad26)") + (net 75 "Net-(J4-Pad24)") + (net 76 "Net-(J4-Pad32)") + (net 77 "Net-(J4-Pad30)") + (net 78 "Net-(J4-Pad28)") + (net 79 "Net-(D11-Pad1)") + (net 80 "Net-(D12-Pad1)") + (net 81 "Net-(D13-Pad1)") + (net 82 "Net-(D14-Pad1)") + (net 83 "Net-(D15-Pad1)") + (net 84 "Net-(D16-Pad1)") + (net 85 "Net-(D17-Pad1)") + (net 86 "Net-(D18-Pad1)") + (net 87 "Net-(D19-Pad1)") + (net 88 "Net-(D20-Pad1)") + (net 89 "Net-(D21-Pad1)") + (net 90 "Net-(D22-Pad1)") + (net 91 "Net-(D23-Pad1)") + (net 92 "Net-(D24-Pad1)") + (net 93 "Net-(D25-Pad1)") + (net 94 "Net-(D26-Pad1)") + (net 95 "Net-(D27-Pad2)") + (net 96 "Net-(J4-Pad6)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net /CAPS_LED) + (add_net /ClrScr) + (add_net /Col1) + (add_net /Col2) + (add_net /Col3) + (add_net /Col4) + (add_net /Col5) + (add_net /Col6) + (add_net /Col7) + (add_net /D0) + (add_net /D1) + (add_net /D2) + (add_net /D3) + (add_net /D4) + (add_net /D5) + (add_net /D6) + (add_net /D7) + (add_net /MISO) + (add_net /MOSI) + (add_net /Row0) + (add_net /Row1) + (add_net /Row10) + (add_net /Row11) + (add_net /Row12) + (add_net /Row13) + (add_net /Row14) + (add_net /Row15) + (add_net /Row2) + (add_net /Row3) + (add_net /Row4) + (add_net /Row5) + (add_net /Row6) + (add_net /Row7) + (add_net /Row8) + (add_net /Row9) + (add_net /Rx) + (add_net /SCK) + (add_net /Tx) + (add_net /~RESET) + (add_net /~STROBE) + (add_net /~SYS_RESET) + (add_net "Net-(D1-Pad2)") + (add_net "Net-(D10-Pad2)") + (add_net "Net-(D11-Pad1)") + (add_net "Net-(D12-Pad1)") + (add_net "Net-(D13-Pad1)") + (add_net "Net-(D14-Pad1)") + (add_net "Net-(D15-Pad1)") + (add_net "Net-(D16-Pad1)") + (add_net "Net-(D17-Pad1)") + (add_net "Net-(D18-Pad1)") + (add_net "Net-(D19-Pad1)") + (add_net "Net-(D2-Pad2)") + (add_net "Net-(D20-Pad1)") + (add_net "Net-(D21-Pad1)") + (add_net "Net-(D22-Pad1)") + (add_net "Net-(D23-Pad1)") + (add_net "Net-(D24-Pad1)") + (add_net "Net-(D25-Pad1)") + (add_net "Net-(D26-Pad1)") + (add_net "Net-(D27-Pad2)") + (add_net "Net-(D3-Pad2)") + (add_net "Net-(D4-Pad2)") + (add_net "Net-(D5-Pad2)") + (add_net "Net-(D6-Pad2)") + (add_net "Net-(D7-Pad2)") + (add_net "Net-(D8-Pad2)") + (add_net "Net-(D9-Pad2)") + (add_net "Net-(J1-Pad10)") + (add_net "Net-(J1-Pad11)") + (add_net "Net-(J1-Pad13)") + (add_net "Net-(J2-Pad14)") + (add_net "Net-(J2-Pad15)") + (add_net "Net-(J2-Pad16)") + (add_net "Net-(J2-Pad4)") + (add_net "Net-(J2-Pad9)") + (add_net "Net-(J4-Pad14)") + (add_net "Net-(J4-Pad16)") + (add_net "Net-(J4-Pad24)") + (add_net "Net-(J4-Pad26)") + (add_net "Net-(J4-Pad28)") + (add_net "Net-(J4-Pad30)") + (add_net "Net-(J4-Pad32)") + (add_net "Net-(J4-Pad6)") + (add_net "Net-(U1-Pad14)") + (add_net "Net-(U1-Pad15)") + (add_net "Net-(U1-Pad16)") + (add_net "Net-(U1-Pad23)") + (add_net "Net-(U1-Pad24)") + (add_net "Net-(U1-Pad25)") + (add_net "Net-(U1-Pad26)") + (add_net "Net-(U3-Pad9)") + (add_net "Net-(U4-Pad2)") + ) + + (net_class power1 "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net +5V) + (add_net GND) + ) + + (net_class signal "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net /Col0) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DDB8) + (at 222.25 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E41285F) + (fp_text reference D26 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 94 "Net-(D26-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 46 /Row14)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DCAA) + (at 227.33 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E412877) + (fp_text reference D25 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 93 "Net-(D25-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 48 /Row12)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1E296) + (at 232.41 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E41287D) + (fp_text reference D24 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 92 "Net-(D24-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 /Row10)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1E388) + (at 237.49 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E412853) + (fp_text reference D23 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 91 "Net-(D23-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1F1A4) + (at 242.57 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E412859) + (fp_text reference D22 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 90 "Net-(D22-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 45 /Row15)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DAE8) + (at 224.79 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E412865) + (fp_text reference D21 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 89 "Net-(D21-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 47 /Row13)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DB42) + (at 229.87 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E41286B) + (fp_text reference D20 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 88 "Net-(D20-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 49 /Row11)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1E2F0) + (at 234.95 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E412871) + (fp_text reference D19 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 87 "Net-(D19-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 43 /Row9)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1E67C) + (at 212.4988 144.807 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E32CB02) + (fp_text reference D18 (at 3.9878 -4.4958 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 86 "Net-(D18-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 24 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DB9C) + (at 209.55 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E37FC86) + (fp_text reference D17 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 85 "Net-(D17-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 6 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DBF6) + (at 214.63 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E3942E4) + (fp_text reference D16 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 84 "Net-(D16-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 25 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DC50) + (at 219.71 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E301C34) + (fp_text reference D15 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 83 "Net-(D15-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 4 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1B415) + (at 240.03 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E316F0B) + (fp_text reference D14 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 82 "Net-(D14-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 8 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1E6D6) + (at 215.0642 144.7816 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E34160D) + (fp_text reference D13 (at 4.0132 -3.2004 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 81 "Net-(D13-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 7 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DD04) + (at 212.09 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E357678) + (fp_text reference D12 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 1.828561 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 80 "Net-(D12-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:D_DO-35_SOD27_P7.62mm_Horizontal_bypassed (layer F.Cu) (tedit 5DF278C4) (tstamp 5DF1DD5E) + (at 217.17 160.0724 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5E36B862) + (fp_text reference D11 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 7.239 0.127) (xy 0.381 0.127) (xy 0.381 0) (xy 7.239 0)) (layer F.Cu) (width 0.0508)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 79 "Net-(D11-Pad1)")) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 5 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5DF31A6E) + (at 193.652 165.254) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5EE753E3) + (fp_text reference R4 (at -2.413 0.127) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 330 (at 5.08 2.37) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 10.16 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 75 "Net-(J4-Pad24)")) + (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5DF31305) + (at 203.812 161.571 180) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5EAA5774) + (fp_text reference R3 (at 12.573 -0.381) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 330 (at 5.08 2.37) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 5.08 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 10.16 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 96 "Net-(J4-Pad6)")) + (pad 1 thru_hole circle (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5DF1DF89) (tstamp 5DF30315) + (at 175.999 160.555 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5EB56F93) + (fp_text reference D27 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 95 "Net-(D27-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 5 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:PinHeader_2x20_P2.54mm_Vertical locked (layer F.Cu) (tedit 5DEFFCEB) (tstamp 5D215268) + (at 185.397 175.5918 90) + (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") + (tags "Through hole pin header THT 2x20 2.54mm double row") + (path /5D1EDC84) + (fp_text reference J4 (at 2.6162 -26.8478 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Keyboard (at -4.318 -5.2578 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.27 24.13) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.7846 -1.9778) (end 4.3654 -1.9778) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7846 49.8722) (end -1.7846 -1.9778) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3654 49.8722) (end -1.7846 49.8722) (layer F.CrtYd) (width 0.05)) + (fp_line (start 4.3654 -1.9778) (end 4.3654 49.8722) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.8954 -1.5078) (end 2.5654 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 -0.1778) (end 3.8954 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.2954 -1.5078) (end -1.3046 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.2954 1.0922) (end 1.2954 -1.5078) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 1.0922) (end 1.2954 1.0922) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.3046 -1.5078) (end -1.3046 49.4122) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 1.0922) (end 3.8954 49.4122) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8954 49.4122) (end -1.3046 49.4122) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.8354 -0.1778) (end 2.5654 -1.4478) (layer F.Fab) (width 0.1)) + (fp_line (start 3.8354 49.3522) (end 3.8354 -0.1778) (layer F.Fab) (width 0.1)) + (fp_line (start -1.2446 49.3522) (end 3.8354 49.3522) (layer F.Fab) (width 0.1)) + (fp_line (start -1.2446 -1.4478) (end -1.2446 49.3522) (layer F.Fab) (width 0.1)) + (fp_line (start 2.5654 -1.4478) (end -1.2446 -1.4478) (layer F.Fab) (width 0.1)) + (pad 40 thru_hole oval (at 0.0254 48.0822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 49 /Row11)) + (pad 39 thru_hole oval (at 2.5654 48.0822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 48 /Row12)) + (pad 38 thru_hole oval (at 0.0254 45.5422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 42 /Row10)) + (pad 37 thru_hole oval (at 2.5654 45.5422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 47 /Row13)) + (pad 36 thru_hole oval (at 0.0254 43.0022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 43 /Row9)) + (pad 35 thru_hole oval (at 2.5654 43.0022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 46 /Row14)) + (pad 34 thru_hole oval (at 0.0254 40.4622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 33 thru_hole oval (at 2.5654 40.4622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 45 /Row15)) + (pad 32 thru_hole oval (at 0.0254 37.9222 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 76 "Net-(J4-Pad32)")) + (pad 31 thru_hole oval (at 2.5654 37.9222 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 4 /Row0)) + (pad 30 thru_hole oval (at 0.0254 35.3822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 77 "Net-(J4-Pad30)")) + (pad 29 thru_hole oval (at 2.5654 35.3822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 5 /Row1)) + (pad 28 thru_hole oval (at 0.0254 32.8422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 78 "Net-(J4-Pad28)")) + (pad 27 thru_hole oval (at 2.5654 32.8422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 25 /Row2)) + (pad 26 thru_hole oval (at 0.0254 30.3022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 74 "Net-(J4-Pad26)")) + (pad 25 thru_hole oval (at 2.5654 30.3022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 /Row3)) + (pad 24 thru_hole oval (at 0.0254 27.7622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 75 "Net-(J4-Pad24)")) + (pad 23 thru_hole oval (at 2.5654 27.7622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 6 /Row4)) + (pad 22 thru_hole oval (at 0.0254 25.2222 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 29 /CAPS_LED)) + (pad 21 thru_hole oval (at 2.5654 25.2222 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 7 /Row5)) + (pad 20 thru_hole oval (at 0.0254 22.6822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 95 "Net-(D27-Pad2)")) + (pad 19 thru_hole oval (at 2.5654 22.6822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 24 /Row6)) + (pad 18 thru_hole oval (at 0.0254 20.1422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 /Col0)) + (pad 17 thru_hole oval (at 2.5654 20.1422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 8 /Row7)) + (pad 16 thru_hole oval (at 0.0254 17.6022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 35 "Net-(J4-Pad16)")) + (pad 15 thru_hole oval (at 2.5654 17.6022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 /Col0)) + (pad 14 thru_hole oval (at 0.0254 15.0622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 34 "Net-(J4-Pad14)")) + (pad 13 thru_hole oval (at 2.5654 15.0622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 17 /Col1)) + (pad 12 thru_hole oval (at 0.0254 12.5222 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 28 "Net-(D2-Pad2)")) + (pad 11 thru_hole oval (at 2.5654 12.5222 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 18 /Col2)) + (pad 10 thru_hole oval (at 0.0254 9.9822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 /Col0)) + (pad 9 thru_hole oval (at 2.5654 9.9822 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 19 /Col3)) + (pad 8 thru_hole oval (at 0.0254 7.4422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 7 thru_hole oval (at 2.5654 7.4422 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 20 /Col4)) + (pad 6 thru_hole oval (at 0.0254 4.9022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 96 "Net-(J4-Pad6)")) + (pad 5 thru_hole oval (at 2.5654 4.9022 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 21 /Col5)) + (pad 4 thru_hole oval (at 0.0254 2.3622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 27 "Net-(D1-Pad2)")) + (pad 3 thru_hole oval (at 2.5654 2.3622 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 22 /Col6)) + (pad 2 thru_hole oval (at 0.0254 -0.1778 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 16 /Col0)) + (pad 1 thru_hole rect (at 2.5654 -0.1778 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 /Col7)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_2x20_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal (layer F.Cu) (tedit 59FED5CB) (tstamp 5DEFEAB8) + (at 242.62828 75.70376 90) + (descr "Through hole angled pin header, 1x04, 2.54mm pitch, 6mm pin length, single row") + (tags "Through hole angled pin header THT 1x04 2.54mm single row") + (path /5E4CDDD4) + (fp_text reference J6 (at 4.385 -2.27 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value UART (at 4.385 9.89 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.77 3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 10.55 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 10.55 9.4) (end 10.55 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 9.4) (end 10.55 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 -1.27) (end 0 -1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 0) (end -1.27 -1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 8) (end 1.44 8) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 7.24) (end 1.44 7.24) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 8) (end 4.1 8) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 7.24) (end 10.1 8) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 7.24) (end 10.1 7.24) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 6.35) (end 4.1 6.35) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 5.46) (end 1.44 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 4.7) (end 1.44 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 5.46) (end 4.1 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 4.7) (end 10.1 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 4.7) (end 10.1 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 3.81) (end 4.1 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 2.92) (end 1.44 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 2.16) (end 1.44 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 2.92) (end 4.1 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 2.16) (end 10.1 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 2.16) (end 10.1 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 1.27) (end 4.1 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.11 0.38) (end 1.44 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.11 -0.38) (end 1.44 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 0.28) (end 10.1 0.28) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 0.16) (end 10.1 0.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 0.04) (end 10.1 0.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.08) (end 10.1 -0.08) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.2) (end 10.1 -0.2) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.32) (end 10.1 -0.32) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 0.38) (end 4.1 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 -0.38) (end 10.1 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.38) (end 10.1 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -1.33) (end 1.44 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 8.95) (end 4.1 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 8.95) (end 4.1 8.95) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 -1.33) (end 1.44 8.95) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.04 7.94) (end 10.04 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 7.3) (end 10.04 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 7.3) (end 10.04 7.3) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 7.94) (end 1.5 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 7.3) (end -0.32 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 7.3) (end 1.5 7.3) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 5.4) (end 10.04 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 4.76) (end 10.04 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 4.76) (end 10.04 4.76) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 5.4) (end 1.5 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 4.76) (end -0.32 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 4.76) (end 1.5 4.76) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 2.86) (end 10.04 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 2.22) (end 10.04 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 2.22) (end 10.04 2.22) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.86) (end 1.5 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.22) (end -0.32 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.22) (end 1.5 2.22) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 0.32) (end 10.04 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 -0.32) (end 10.04 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 -0.32) (end 10.04 -0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 0.32) (end 1.5 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end -0.32 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end 1.5 -0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 1.5 -0.635) (end 2.135 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.5 8.89) (end 1.5 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 8.89) (end 1.5 8.89) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 -1.27) (end 4.04 8.89) (layer F.Fab) (width 0.1)) + (fp_line (start 2.135 -1.27) (end 4.04 -1.27) (layer F.Fab) (width 0.1)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 56 /Rx)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 55 /Tx)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Button_Switch_THT:SW_DIP_SPSTx08_Piano_CTS_Series194-8MSTN_W7.62mm_P2.54mm (layer F.Cu) (tedit 5A4E1407) (tstamp 5DF03359) + (at 248.262 124.741 180) + (descr "8x-dip-switch SPST CTS_Series194-8MSTN, Piano, row spacing 7.62 mm (300 mils), body size (see https://www.ctscorp.com/wp-content/uploads/194-195.pdf)") + (tags "DIP Switch SPST Piano 7.62mm 300mil") + (path /5DF0476A) + (fp_text reference SW1 (at 8.7122 -3.6068) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Options (at -3.3782 -5.4864 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.08 -2.36) (end 8.7 -2.36) (layer F.Fab) (width 0.1)) + (fp_line (start 8.7 -2.36) (end 8.7 20.14) (layer F.Fab) (width 0.1)) + (fp_line (start 8.7 20.14) (end -1.08 20.14) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 20.14) (end -1.08 -1.36) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 -1.36) (end -0.08 -2.36) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 -0.76) (end -1.08 0.76) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 0.76) (end -2.22 0.76) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 0.76) (end -2.22 -0.76) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 -0.76) (end -1.08 -0.76) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 1.78) (end -1.08 3.3) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 3.3) (end -2.22 3.3) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 3.3) (end -2.22 1.78) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 1.78) (end -1.08 1.78) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 4.32) (end -1.08 5.84) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 5.84) (end -2.22 5.84) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 5.84) (end -2.22 4.32) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 4.32) (end -1.08 4.32) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 6.86) (end -1.08 8.38) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 8.38) (end -2.22 8.38) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 8.38) (end -2.22 6.86) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 6.86) (end -1.08 6.86) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 9.4) (end -1.08 10.92) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 10.92) (end -2.22 10.92) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 10.92) (end -2.22 9.4) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 9.4) (end -1.08 9.4) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 11.94) (end -1.08 13.46) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 13.46) (end -2.22 13.46) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 13.46) (end -2.22 11.94) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 11.94) (end -1.08 11.94) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 14.48) (end -1.08 16) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 16) (end -2.22 16) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 16) (end -2.22 14.48) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 14.48) (end -1.08 14.48) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 17.02) (end -1.08 18.54) (layer F.Fab) (width 0.1)) + (fp_line (start -1.08 18.54) (end -2.22 18.54) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 18.54) (end -2.22 17.02) (layer F.Fab) (width 0.1)) + (fp_line (start -2.22 17.02) (end -1.08 17.02) (layer F.Fab) (width 0.1)) + (fp_line (start -1.14 -2.42) (end 8.76 -2.42) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 20.201) (end 8.76 20.201) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 -2.42) (end -1.14 20.201) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.76 -2.42) (end 8.76 20.201) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.38 -2.66) (end 0.004 -2.66) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.38 -2.66) (end -1.38 -1.277) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 -0.82) (end -1.14 -0.82) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 0.82) (end -1.14 0.82) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 -0.82) (end -2.34 0.82) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 -0.82) (end -1.14 0.82) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 1.72) (end -1.14 1.72) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 3.361) (end -1.14 3.361) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 1.72) (end -2.34 3.361) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 1.72) (end -1.14 3.361) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 4.261) (end -1.14 4.261) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 5.9) (end -1.14 5.9) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 4.261) (end -2.34 5.9) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 4.261) (end -1.14 5.9) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 6.801) (end -1.14 6.801) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 8.441) (end -1.14 8.441) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 6.801) (end -2.34 8.441) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 6.801) (end -1.14 8.441) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 9.34) (end -1.14 9.34) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 10.98) (end -1.14 10.98) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 9.34) (end -2.34 10.98) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 9.34) (end -1.14 10.98) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 11.88) (end -1.14 11.88) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 13.52) (end -1.14 13.52) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 11.88) (end -2.34 13.52) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 11.88) (end -1.14 13.52) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 14.42) (end -1.14 14.42) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 16.06) (end -1.14 16.06) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 14.42) (end -2.34 16.06) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 14.42) (end -1.14 16.06) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 16.96) (end -1.14 16.96) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 18.6) (end -1.14 18.6) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.34 16.96) (end -2.34 18.6) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.14 16.96) (end -1.14 18.6) (layer F.SilkS) (width 0.12)) + (fp_line (start -2.5 -2.7) (end -2.5 20.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -2.5 20.5) (end 8.95 20.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.95 20.5) (end 8.95 -2.7) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.95 -2.7) (end -2.5 -2.7) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 3.81 8.89) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (pad 1 thru_hole rect (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 9 thru_hole oval (at 7.62 17.78 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 73 "Net-(D10-Pad2)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 10 thru_hole oval (at 7.62 15.24 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 72 "Net-(D9-Pad2)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 11 thru_hole oval (at 7.62 12.7 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 71 "Net-(D8-Pad2)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 12 thru_hole oval (at 7.62 10.16 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 70 "Net-(D7-Pad2)")) + (pad 5 thru_hole oval (at 0 10.16 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 13 thru_hole oval (at 7.62 7.62 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 69 "Net-(D6-Pad2)")) + (pad 6 thru_hole oval (at 0 12.7 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 14 thru_hole oval (at 7.62 5.08 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 68 "Net-(D5-Pad2)")) + (pad 7 thru_hole oval (at 0 15.24 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 15 thru_hole oval (at 7.62 2.54 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 67 "Net-(D4-Pad2)")) + (pad 8 thru_hole oval (at 0 17.78 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /Row8)) + (pad 16 thru_hole oval (at 7.62 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 66 "Net-(D3-Pad2)")) + (model ${KISYS3DMOD}/Button_Switch_THT.3dshapes/SW_DIP_SPSTx08_Piano_CTS_Series194-8MSTN_W7.62mm_P2.54mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 90)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFD6A3) + (at 186.25044 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DFACD33) + (fp_text reference D10 (at 3.11404 -2.3368 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 73 "Net-(D10-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 /Col7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFCA52) + (at 191.68604 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF9A8E3) + (fp_text reference D8 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) hide + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 71 "Net-(D8-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 /Col5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFC8EA) + (at 196.96924 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF87A8E) + (fp_text reference D6 (at -2.09296 0.46736 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 69 "Net-(D6-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 19 /Col3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFCB9D) + (at 202.17624 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF29274) + (fp_text reference D4 (at -2.19456 0.34036 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 67 "Net-(D4-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 /Col1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFC99E) + (at 188.96824 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF6B891) + (fp_text reference D9 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 72 "Net-(D9-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 /Col6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFC9F8) + (at 194.40384 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF5903F) + (fp_text reference D7 (at 3.81 -2.12 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 70 "Net-(D7-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 /Col4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DEFC890) + (at 199.61084 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF31D18) + (fp_text reference D5 (at -2.19456 0.18796 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 68 "Net-(D5-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 18 /Col2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5DF01017) + (at 204.74164 131.20784 90) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DF45137) + (fp_text reference D3 (at 3.31724 2.19456 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.11404 4.07416 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 66 "Net-(D3-Pad2)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 /Col0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Horizontal (layer F.Cu) (tedit 59FED5CB) (tstamp 5DEB1A8C) + (at 177.396 126.646 180) + (descr "Through hole angled pin header, 2x03, 2.54mm pitch, 6mm pin length, double rows") + (tags "Through hole angled pin header THT 2x03 2.54mm double row") + (path /5DA566B2) + (fp_text reference J5 (at 4.4958 -3.4036) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "ISP header" (at -2.6416 2.54 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 4.675 -1.27) (end 6.58 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 -1.27) (end 6.58 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 6.35) (end 4.04 6.35) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 6.35) (end 4.04 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 -0.635) (end 4.675 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end 4.04 -0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end -0.32 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 0.32) (end 4.04 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 -0.32) (end 12.58 -0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 12.58 -0.32) (end 12.58 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 0.32) (end 12.58 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.22) (end 4.04 2.22) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.22) (end -0.32 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.86) (end 4.04 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 2.22) (end 12.58 2.22) (layer F.Fab) (width 0.1)) + (fp_line (start 12.58 2.22) (end 12.58 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 2.86) (end 12.58 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 4.76) (end 4.04 4.76) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 4.76) (end -0.32 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 5.4) (end 4.04 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 4.76) (end 12.58 4.76) (layer F.Fab) (width 0.1)) + (fp_line (start 12.58 4.76) (end 12.58 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 6.58 5.4) (end 12.58 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 3.98 -1.33) (end 3.98 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.98 6.41) (end 6.64 6.41) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 6.41) (end 6.64 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 -1.33) (end 3.98 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 -0.38) (end 12.64 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.64 -0.38) (end 12.64 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.64 0.38) (end 6.64 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 -0.32) (end 12.64 -0.32) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 -0.2) (end 12.64 -0.2) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 -0.08) (end 12.64 -0.08) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 0.04) (end 12.64 0.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 0.16) (end 12.64 0.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 0.28) (end 12.64 0.28) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.582929 -0.38) (end 3.98 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.582929 0.38) (end 3.98 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.11 -0.38) (end 1.497071 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.11 0.38) (end 1.497071 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.98 1.27) (end 6.64 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 2.16) (end 12.64 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.64 2.16) (end 12.64 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.64 2.92) (end 6.64 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.582929 2.16) (end 3.98 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.582929 2.92) (end 3.98 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 2.16) (end 1.497071 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 2.92) (end 1.497071 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.98 3.81) (end 6.64 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.64 4.7) (end 12.64 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.64 4.7) (end 12.64 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 12.64 5.46) (end 6.64 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.582929 4.7) (end 3.98 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 3.582929 5.46) (end 3.98 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 4.7) (end 1.497071 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 5.46) (end 1.497071 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 0) (end -1.27 -1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -1.27) (end 0 -1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.8 -1.8) (end -1.8 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 6.85) (end 13.1 6.85) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13.1 6.85) (end 13.1 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 13.1 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 5.31 2.54 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 6 thru_hole oval (at 2.54 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 5 thru_hole oval (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 51 /~RESET)) + (pad 4 thru_hole oval (at 2.54 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 52 /MOSI)) + (pad 3 thru_hole oval (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 53 /SCK)) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 54 /MISO)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_2x03_P2.54mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5DF007CF) + (at 228.2468 133.1992) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5DD6A5C6) + (fp_text reference C3 (at -0.8382 -1.905) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at 5.9436 0.1016) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -0.5588 -1.9812 180) (layer F.Fab) + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5DEA530F) + (at 239.88 133.1992) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5DF5B37D) + (fp_text reference C4 (at -0.6604 -1.9812) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at 6.3246 0.3302) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 1.25 0) (layer F.Fab) + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5D0D6FB5) + (at 223.751 107.723 270) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5BFE9D13) + (fp_text reference C2 (at 5.969 0.889 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at -1.016 -2.032 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.191 -0.635 180) (layer F.SilkS) hide + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5DD1D837) + (at 207.622 142.394 270) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5BFE9C80) + (fp_text reference C1 (at 4.699 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at -3.81 0.127 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.75006 2.11836 180) (layer F.SilkS) hide + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5DE62624) + (at 244.9092 154.3828 180) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5DE7C3DB) + (fp_text reference U4 (at -1.0922 -2.5908) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 74LS138 (at 6.5786 -2.6924) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.1 -1.55) (end -1.1 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 19.3) (end 8.7 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 19.3) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 3.81 8.89) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 16 thru_hole oval (at 7.62 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 8 thru_hole oval (at 0 17.78 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 15 thru_hole oval (at 7.62 2.54 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 91 "Net-(D23-Pad1)")) + (pad 7 thru_hole oval (at 0 15.24 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 90 "Net-(D22-Pad1)")) + (pad 14 thru_hole oval (at 7.62 5.08 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 87 "Net-(D19-Pad1)")) + (pad 6 thru_hole oval (at 0 12.7 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(U1-Pad26)")) + (pad 13 thru_hole oval (at 7.62 7.62 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 92 "Net-(D24-Pad1)")) + (pad 5 thru_hole oval (at 0 10.16 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 12 thru_hole oval (at 7.62 10.16 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 88 "Net-(D20-Pad1)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 11 thru_hole oval (at 7.62 12.7 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 93 "Net-(D25-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 30 "Net-(U1-Pad25)")) + (pad 10 thru_hole oval (at 7.62 15.24 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 89 "Net-(D21-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 57 "Net-(U4-Pad2)")) + (pad 9 thru_hole oval (at 7.62 17.78 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 94 "Net-(D26-Pad1)")) + (pad 1 thru_hole rect (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 "Net-(U1-Pad23)")) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5DE61B89) + (at 229.7708 154.3828 180) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5DE612EE) + (fp_text reference U2 (at 7.5184 -2.8448) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 74LS138 (at 1.524 -2.8448) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.1 -1.55) (end -1.1 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 19.3) (end 8.7 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 19.3) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 3.81 8.89) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 16 thru_hole oval (at 7.62 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 8 thru_hole oval (at 0 17.78 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 15 thru_hole oval (at 7.62 2.54 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 83 "Net-(D15-Pad1)")) + (pad 7 thru_hole oval (at 0 15.24 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 82 "Net-(D14-Pad1)")) + (pad 14 thru_hole oval (at 7.62 5.08 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 79 "Net-(D11-Pad1)")) + (pad 6 thru_hole oval (at 0 12.7 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 13 thru_hole oval (at 7.62 7.62 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 84 "Net-(D16-Pad1)")) + (pad 5 thru_hole oval (at 0 10.16 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(U1-Pad26)")) + (pad 12 thru_hole oval (at 7.62 10.16 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 80 "Net-(D12-Pad1)")) + (pad 4 thru_hole oval (at 0 7.62 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 11 thru_hole oval (at 7.62 12.7 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 85 "Net-(D17-Pad1)")) + (pad 3 thru_hole oval (at 0 5.08 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 30 "Net-(U1-Pad25)")) + (pad 10 thru_hole oval (at 7.62 15.24 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 81 "Net-(D13-Pad1)")) + (pad 2 thru_hole oval (at 0 2.54 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad24)")) + (pad 9 thru_hole oval (at 7.62 17.78 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 86 "Net-(D18-Pad1)")) + (pad 1 thru_hole rect (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 "Net-(U1-Pad23)")) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5DEFFC80) + (at 244.7568 94.0832 90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5DDA0995) + (fp_text reference R2 (at -2.286 -0.0762 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R_US (at 5.08 2.37 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at -1.9812 2.794 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 10.16 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 55 /Tx)) + (pad 1 thru_hole circle (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 /D1)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5DEFFC3E) + (at 248.3636 94.0832 90) + (descr "Resistor, Axial_DIN0207 series, Axial, Horizontal, pin pitch=10.16mm, 0.25W = 1/4W, length*diameter=6.3*2.5mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0207 series Axial Horizontal pin pitch 10.16mm 0.25W = 1/4W length 6.3mm diameter 2.5mm") + (path /5DD9ECD2) + (fp_text reference R1 (at -2.286 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 220 (at 5.2832 2.3622 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.93 -1.25) (end 1.93 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.93 1.25) (end 8.23 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 1.25) (end 8.23 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 8.23 -1.25) (end 1.93 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.93 0) (layer F.Fab) (width 0.1)) + (fp_line (start 10.16 0) (end 8.23 0) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1.37) (end 1.81 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.81 1.37) (end 8.35 1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 1.37) (end 8.35 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.35 -1.37) (end 1.81 -1.37) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.81 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 9.12 0) (end 8.35 0) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.5) (end -1.05 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.5) (end 11.21 1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 1.5) (end 11.21 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_line (start 11.21 -1.5) (end -1.05 -1.5) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 5.08 0 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 10.16 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 56 /Rx)) + (pad 1 thru_hole circle (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 /D0)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5DD1CEE0) + (at 185.905 147.728 90) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5DD565C9) + (fp_text reference U3 (at 0.254 -2.33 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 74LS166 (at -2.159 16.129) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.81 8.89 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 19.3) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 19.3) (end 8.7 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 -1.55) (end -1.1 19.3) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (pad 16 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 15 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 41 "Net-(U1-Pad15)")) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 40 "Net-(U1-Pad16)")) + (pad 14 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 /Col0)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 13 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 38 "Net-(U1-Pad14)")) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 /Col4)) + (pad 12 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 /Col1)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 /Col5)) + (pad 11 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 18 /Col2)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 /Col6)) + (pad 10 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 19 /Col3)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 /Col7)) + (pad 9 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 50 "Net-(U3-Pad9)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-28_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5DD1CE90) + (at 186.159 113.057 90) + (descr "28-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5DD17F64) + (fp_text reference U1 (at 0 -2.413 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ATmega328P (at 9.906 3.683 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 3.81 16.51 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 34.55) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 34.55) (end 8.7 34.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 -1.55) (end -1.1 34.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 34.35) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 34.35) (end 6.46 34.35) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 34.35) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 34.29) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 34.29) (end 0.635 34.29) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 34.29) (layer F.Fab) (width 0.1)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (pad 28 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /ClrScr)) + (pad 14 thru_hole oval (at 0 33.02 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 38 "Net-(U1-Pad14)")) + (pad 27 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 29 /CAPS_LED)) + (pad 13 thru_hole oval (at 0 30.48 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 /D7)) + (pad 26 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(U1-Pad26)")) + (pad 12 thru_hole oval (at 0 27.94 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 /D6)) + (pad 25 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 30 "Net-(U1-Pad25)")) + (pad 11 thru_hole oval (at 0 25.4 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 /D5)) + (pad 24 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad24)")) + (pad 10 thru_hole oval (at 0 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 /~SYS_RESET)) + (pad 23 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 "Net-(U1-Pad23)")) + (pad 9 thru_hole oval (at 0 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 /~STROBE)) + (pad 22 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 21 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 20 thru_hole oval (at 7.62 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 /D4)) + (pad 19 thru_hole oval (at 7.62 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 53 /SCK)) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 /D3)) + (pad 18 thru_hole oval (at 7.62 25.4 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 54 /MISO)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 /D2)) + (pad 17 thru_hole oval (at 7.62 27.94 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 52 /MOSI)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 55 /Tx)) + (pad 16 thru_hole oval (at 7.62 30.48 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 40 "Net-(U1-Pad16)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 56 /Rx)) + (pad 15 thru_hole oval (at 7.62 33.02 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 41 "Net-(U1-Pad15)")) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 51 /~RESET)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-28_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal (layer F.Cu) (tedit 59FED5CB) (tstamp 5DEB0F99) + (at 166.855 74.576 90) + (descr "Through hole angled pin header, 1x04, 2.54mm pitch, 6mm pin length, single row") + (tags "Through hole angled pin header THT 1x04 2.54mm single row") + (path /5DA5BF6E) + (fp_text reference J3 (at 8.763 10.795 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Reset/Clr (at 4.385 9.89 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.77 3.81) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 10.55 -1.8) (end -1.8 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 10.55 9.4) (end 10.55 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 9.4) (end 10.55 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.8 -1.8) (end -1.8 9.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.27 -1.27) (end 0 -1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 0) (end -1.27 -1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 8) (end 1.44 8) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 7.24) (end 1.44 7.24) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 8) (end 4.1 8) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 7.24) (end 10.1 8) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 7.24) (end 10.1 7.24) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 6.35) (end 4.1 6.35) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 5.46) (end 1.44 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 4.7) (end 1.44 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 5.46) (end 4.1 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 4.7) (end 10.1 5.46) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 4.7) (end 10.1 4.7) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 3.81) (end 4.1 3.81) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 2.92) (end 1.44 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.042929 2.16) (end 1.44 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 2.92) (end 4.1 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 2.16) (end 10.1 2.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 2.16) (end 10.1 2.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 1.27) (end 4.1 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.11 0.38) (end 1.44 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.11 -0.38) (end 1.44 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 0.28) (end 10.1 0.28) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 0.16) (end 10.1 0.16) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 0.04) (end 10.1 0.04) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.08) (end 10.1 -0.08) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.2) (end 10.1 -0.2) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.32) (end 10.1 -0.32) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 0.38) (end 4.1 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 10.1 -0.38) (end 10.1 0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -0.38) (end 10.1 -0.38) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 -1.33) (end 1.44 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.1 8.95) (end 4.1 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 8.95) (end 4.1 8.95) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.44 -1.33) (end 1.44 8.95) (layer F.SilkS) (width 0.12)) + (fp_line (start 4.04 7.94) (end 10.04 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 7.3) (end 10.04 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 7.3) (end 10.04 7.3) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 7.94) (end 1.5 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 7.3) (end -0.32 7.94) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 7.3) (end 1.5 7.3) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 5.4) (end 10.04 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 4.76) (end 10.04 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 4.76) (end 10.04 4.76) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 5.4) (end 1.5 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 4.76) (end -0.32 5.4) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 4.76) (end 1.5 4.76) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 2.86) (end 10.04 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 2.22) (end 10.04 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 2.22) (end 10.04 2.22) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.86) (end 1.5 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.22) (end -0.32 2.86) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 2.22) (end 1.5 2.22) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 0.32) (end 10.04 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 10.04 -0.32) (end 10.04 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 -0.32) (end 10.04 -0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 0.32) (end 1.5 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end -0.32 0.32) (layer F.Fab) (width 0.1)) + (fp_line (start -0.32 -0.32) (end 1.5 -0.32) (layer F.Fab) (width 0.1)) + (fp_line (start 1.5 -0.635) (end 2.135 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.5 8.89) (end 1.5 -0.635) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 8.89) (end 1.5 8.89) (layer F.Fab) (width 0.1)) + (fp_line (start 4.04 -1.27) (end 4.04 8.89) (layer F.Fab) (width 0.1)) + (fp_line (start 2.135 -1.27) (end 4.04 -1.27) (layer F.Fab) (width 0.1)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 33 /ClrScr)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 36 /~SYS_RESET)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_1x04_P2.54mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm_Socket (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D9C751E) + (at 216.561832 77.37 90) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), Socket") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil Socket") + (path /5D9AB54A) + (fp_text reference J2 (at 8.509 -2.335832 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Apple 2" (at 10.795 9.856168) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.15))) + ) + (fp_text user %R (at 3.81 8.89 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.15 -1.6) (end -1.55 -1.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.15 19.4) (end 9.15 -1.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 19.4) (end 9.15 19.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 -1.6) (end -1.55 19.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.95 -1.39) (end -1.33 -1.39) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.95 19.17) (end 8.95 -1.39) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 19.17) (end 8.95 19.17) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.39) (end -1.33 19.17) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.89 -1.33) (end -1.27 -1.33) (layer F.Fab) (width 0.1)) + (fp_line (start 8.89 19.11) (end 8.89 -1.33) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 19.11) (end 8.89 19.11) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -1.33) (end -1.27 19.11) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 9 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 61 "Net-(J2-Pad9)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 /~STROBE)) + (pad 10 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 /D2)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 /~SYS_RESET)) + (pad 11 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 /D3)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 "Net-(J2-Pad4)")) + (pad 12 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 /D0)) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 /D5)) + (pad 13 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 /D1)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 /D4)) + (pad 14 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 "Net-(J2-Pad14)")) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 /D6)) + (pad 15 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 64 "Net-(J2-Pad15)")) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 16 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 65 "Net-(J2-Pad16)")) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm_Socket.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D9C8C4F) + (at 173.205 160.555 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5D9C0280) + (fp_text reference D2 (at -2.286 0.127 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 28 "Net-(D2-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 8 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D9C7403) + (at 178.92 160.555 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5D9CCE74) + (fp_text reference D1 (at -2.286 0 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 27 "Net-(D1-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 4 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Array_SIP9 (layer F.Cu) (tedit 5A14249F) (tstamp 5DF1CB71) + (at 204.2438 154.967 180) + (descr "9-pin Resistor SIP pack") + (tags R) + (path /5C0319BC) + (fp_text reference RN1 (at 20.1803 -2.5654) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7k (at 15.7226 -2.5654) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 22.05 -1.65) (end -1.7 -1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 22.05 1.65) (end 22.05 -1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 1.65) (end 22.05 1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 -1.65) (end -1.7 1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.27 -1.4) (end 1.27 1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start 21.76 -1.4) (end -1.44 -1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start 21.76 1.4) (end 21.76 -1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.44 1.4) (end 21.76 1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.44 -1.4) (end -1.44 1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.27 -1.25) (end 1.27 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 21.61 -1.25) (end -1.29 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 21.61 1.25) (end 21.61 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 1.25) (end 21.61 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 -1.25) (end -1.29 1.25) (layer F.Fab) (width 0.1)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 /Col0)) + (pad 3 thru_hole oval (at 5.08 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 /Col1)) + (pad 4 thru_hole oval (at 7.62 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 18 /Col2)) + (pad 5 thru_hole oval (at 10.16 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 19 /Col3)) + (pad 6 thru_hole oval (at 12.7 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 /Col4)) + (pad 7 thru_hole oval (at 15.24 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 /Col5)) + (pad 8 thru_hole oval (at 17.78 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 /Col6)) + (pad 9 thru_hole oval (at 20.32 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 /Col7)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Array_SIP9.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm_Socket (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D0D78AD) + (at 184.390166 77.37 90) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), Socket") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil Socket") + (path /5BCB9E1D) + (fp_text reference J1 (at 8.255 -2.549166 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Apple 1" (at 10.795 8.372834 180) (layer F.SilkS) + (effects (font (size 1.27 1.27) (thickness 0.15))) + ) + (fp_text user %R (at 9.50214 -0.78486 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.15 -1.6) (end -1.55 -1.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.15 19.4) (end 9.15 -1.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 19.4) (end 9.15 19.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 -1.6) (end -1.55 19.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.95 -1.39) (end -1.33 -1.39) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.95 19.17) (end 8.95 -1.39) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 19.17) (end 8.95 19.17) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.39) (end -1.33 19.17) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.89 -1.33) (end -1.27 -1.33) (layer F.Fab) (width 0.1)) + (fp_line (start 8.89 19.11) (end 8.89 -1.33) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 19.11) (end 8.89 19.11) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -1.33) (end -1.27 19.11) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 /~SYS_RESET)) + (pad 9 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 /D3)) + (pad 10 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 58 "Net-(J1-Pad10)")) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 /D2)) + (pad 11 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 59 "Net-(J1-Pad11)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 /D1)) + (pad 12 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /ClrScr)) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 /D0)) + (pad 13 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 60 "Net-(J1-Pad13)")) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 /D4)) + (pad 14 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 /~STROBE)) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 /D5)) + (pad 15 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 /D7)) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 /D6)) + (pad 16 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm_Socket.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text 1N4148 (at 244.706 171.0452) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text D11-D26 (at 245.2902 169.6736) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 7 (at 251.818 106.9864 90) (layer F.SilkS) (tstamp 5DF0362C) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 6 (at 251.818 109.5264 90) (layer F.SilkS) (tstamp 5DF03614) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 5 (at 251.818 112.0664 90) (layer F.SilkS) (tstamp 5DF03614) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 4 (at 251.818 114.6064 90) (layer F.SilkS) (tstamp 5DF03614) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 3 (at 251.818 117.1464 90) (layer F.SilkS) (tstamp 5DF03614) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 2 (at 251.818 119.6864 90) (layer F.SilkS) (tstamp 5DF03614) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 1 (at 251.818 122.2264 90) (layer F.SilkS) (tstamp 5DF03614) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text 0 (at 251.818 124.7664 90) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text +5V (at 250.4718 78.87368 90) (layer F.SilkS) (tstamp 5DEB324E) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text GND (at 242.6486 78.87368 90) (layer F.SilkS) (tstamp 5DEB3244) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text TX (at 245.26988 78.196346 90) (layer F.SilkS) (tstamp 5DDA6035) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text RX (at 247.6778 78.317299 90) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text "OSIWeb.org 2019" (at 165.4834 95.7342 90) (layer B.SilkS) (tstamp 5DA55EBB) + (effects (font (size 1.524 1.524) (thickness 0.254)) (justify mirror)) + ) + (gr_text "OSIWeb.org 2019" (at 165.3564 95.6072 90) (layer F.SilkS) (tstamp 5DDA62F0) + (effects (font (size 1.524 1.524) (thickness 0.254))) + ) + (gr_text "Universal Keyboard ASCII Interface Rev 2.2" (at 165.7374 155.0178 90) (layer B.SilkS) (tstamp 5DA55E5A) + (effects (font (size 1.524 1.524) (thickness 0.254)) (justify mirror)) + ) + (gr_text "Universal Keyboard ASCII Interface Rev 2.2" (at 165.8136 154.4336 90) (layer F.SilkS) (tstamp 5DEFAA7D) + (effects (font (size 1.524 1.524) (thickness 0.254))) + ) + (gr_text +5V (at 172.06454 78.132 90) (layer F.SilkS) (tstamp 5DA61091) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text CLR (at 174.602 78.011047 90) (layer F.SilkS) (tstamp 5DA61091) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text ~RESET (at 169.52708 78.881904 90) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_text GND (at 166.728 78.132 90) (layer F.SilkS) + (effects (font (size 1.016 1.016) (thickness 0.127))) + ) + (gr_circle (center 233.506 84.1248) (end 235.0935 84.1248) (layer Edge.Cuts) (width 0.1) (tstamp 5D21542F)) + (gr_circle (center 185.246 84.1248) (end 186.8335 84.1248) (layer Edge.Cuts) (width 0.1) (tstamp 5DF18072)) + (gr_circle (center 169.1424 178.1048) (end 170.7299 178.1048) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152E9)) + (gr_circle (center 247.7554 178.1048) (end 249.3429 178.1048) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152E6)) + (gr_line (start 163.83 63.5) (end 252.73 63.5) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 252.73 63.5) (end 252.73 182.88) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152E3)) + (gr_line (start 252.73 182.88) (end 163.83 182.88) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 163.83 182.88) (end 163.83 63.5) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152EC)) + (gr_text "Pin 1 of keyboard connector must be at least 3.5\" from\npin 1 of interface connector in order for interface connector\nto be accessible with keyboard assembled." (at 170.4213 202.3745) (layer Cmts.User) + (effects (font (size 1.524 1.524) (thickness 0.15)) (justify left)) + ) + (gr_text "Mounting holes:\n0.125\" Non-plated\n2.5\" square spacing\nPin 1 of connector 0.31\", 0\" (x,y) relative to center of left lower hole." (at 170.4213 188.6458) (layer Cmts.User) + (effects (font (size 1.524 1.524) (thickness 0.2032)) (justify left)) + ) + + (segment (start 201.399 107.469) (end 203.939 110.009) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 203.939 110.009) (end 203.939 113.017) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 201.399 105.397) (end 201.399 107.469) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 201.78 105.691) (end 201.78 105.818) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 223.751 110.223) (end 206.733 110.223) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 206.733 110.223) (end 203.939 113.017) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 203.812 147.855) (end 203.685 147.728) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 234.419 77.447168) (end 234.341832 77.37) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 234.419 77.497) (end 234.419 77.447168) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 208.75337 144.894) (end 218.036 135.61137) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 207.622 144.894) (end 208.75337 144.894) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 218.036 135.61137) (end 218.036 135.79) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 203.685 147.728) (end 204.81637 147.728) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 204.81637 147.728) (end 207.622 144.92237) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 207.622 144.92237) (end 207.622 144.894) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 200.138166 67.718) (end 202.170166 69.75) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 172.951 67.718) (end 200.138166 67.718) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 166.855 73.814) (end 172.951 67.718) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 166.855 74.576) (end 166.855 73.814) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 198.605 148.85937) (end 198.986 149.24037) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 198.605 147.728) (end 198.605 148.85937) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 202.17263 149.24037) (end 203.685 147.728) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 198.986 149.24037) (end 202.17263 149.24037) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 230.7468 135.6268) (end 229.7708 136.6028) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.7468 133.1992) (end 230.7468 135.6268) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.38 134.0736) (end 244.9092 136.6028) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.38 133.1992) (end 242.38 134.0736) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 244.9092 145.63143) (end 244.9092 144.2228) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 244.9092 146.7628) (end 244.9092 145.63143) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 231.5996 142.0384) (end 231.5996 138.4316) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 228.958 142.9528) (end 230.6852 142.9528) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 230.6852 142.9528) (end 231.5996 142.0384) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 231.5996 138.4316) (end 229.7708 136.6028) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 228.0436 143.8672) (end 228.958 142.9528) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 228.0436 145.0356) (end 228.0436 143.8672) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 229.7708 146.7628) (end 228.0436 145.0356) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 174.856 118.6704) (end 174.856 121.566) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 201.095171 117.032199) (end 176.494201 117.032199) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 176.494201 117.032199) (end 174.856 118.6704) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 203.939 114.18837) (end 201.095171 117.032199) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 203.939 113.057) (end 203.939 114.18837) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 242.38 129.6686) (end 230.9284 129.6686) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.38 133.1992) (end 242.38 129.6686) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 223.751 129.89637) (end 218.036 135.61137) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 223.82129 129.82608) (end 223.751 129.89637) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.9284 129.5016) (end 230.60392 129.82608) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.60392 129.82608) (end 223.82129 129.82608) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.7468 133.1992) (end 230.7468 110.2484) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.696 110.223) (end 223.751 110.223) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.736 110.263) (end 230.696 110.223) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 202.970165 70.549999) (end 202.170166 69.75) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 234.341832 77.37) (end 228.75383 71.781998) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 228.75383 71.781998) (end 204.202164 71.781998) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 204.202164 71.781998) (end 202.970165 70.549999) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 229.847 83.076202) (end 229.807 83.036202) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 229.807 110.223) (end 229.847 110.183) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 223.751 110.223) (end 229.807 110.223) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 229.807 83.036202) (end 234.341832 78.50137) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 229.847 110.183) (end 229.847 83.076202) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 234.341832 78.50137) (end 234.341832 77.37) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 245.849 129.7302) (end 242.38 133.1992) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 239.7276 77.60368) (end 239.7276 97.7916) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 241.62752 75.70376) (end 239.7276 77.60368) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 245.849 103.913) (end 245.849 129.7302) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 239.7276 97.7916) (end 245.849 103.913) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 242.62828 75.70376) (end 241.62752 75.70376) (width 1.27) (layer F.Cu) (net 1)) + (segment (start 243.525012 143.422801) (end 242.4708 142.368589) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 242.4708 139.0412) (end 244.109201 137.402799) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 242.4708 142.368589) (end 242.4708 139.0412) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 244.109201 143.422801) (end 243.525012 143.422801) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 244.9092 144.2228) (end 244.109201 143.422801) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 244.109201 137.402799) (end 244.9092 136.6028) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 194.148199 167.551801) (end 194.16 167.54) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 194.148199 174.257401) (end 194.148199 167.551801) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 192.8392 175.5664) (end 194.148199 174.257401) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 194.16 165.762) (end 194.16 167.54) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 193.652 165.254) (end 194.16 165.762) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 197.843 149.62137) (end 198.605 148.85937) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 193.652 165.254) (end 197.843 161.063) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 198.605 148.85937) (end 198.605 147.728) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 197.843 161.063) (end 197.843 149.62137) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 192.014216 108.231011) (end 174.983011 108.231011) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 192.522227 107.723) (end 192.014216 108.231011) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 223.751 107.723) (end 192.522227 107.723) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 206.479 105.397) (end 203.939 105.397) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 206.352 105.564) (end 206.479 105.437) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 211.697832 74.576) (end 184.508 74.576) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 184.508 74.576) (end 184.390166 74.458166) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 184.390166 74.458166) (end 184.390166 69.75) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 203.939 105.397) (end 203.939 107.85) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 216.561832 77.37) (end 214.491832 77.37) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 214.491832 77.37) (end 211.697832 74.576) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 175.558919 69.75) (end 184.390166 69.75) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 171.935 73.373919) (end 175.558919 69.75) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 171.935 74.576) (end 171.935 73.373919) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 207.876 142.14) (end 207.622 142.394) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 208.003 142.14) (end 207.876 142.14) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 185.905 144.172) (end 185.905 140.108) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 186.032 147.601) (end 185.905 147.728) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 186.032 142.394) (end 186.032 147.601) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 226.3164 135.1296) (end 228.2468 133.1992) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 237.2892 154.3828) (end 239.3212 154.3828) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 239.88 153.824) (end 239.88 133.1992) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 239.3212 154.3828) (end 239.88 153.824) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 226.418 141.6828) (end 229.7708 141.6828) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 226.3164 141.7844) (end 226.418 141.6828) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 226.3164 141.7844) (end 226.3164 135.1296) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 182.222 74.576) (end 184.508 74.576) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 85.752) (end 182.222 74.576) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 108.2564) (end 174.957622 108.2564) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 174.957622 108.2564) (end 174.983011 108.231011) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 108.2564) (end 171.046 85.752) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 115.3176) (end 171.046 108.2564) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 200.26787 115.2795) (end 201.399 114.14837) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 201.399 114.14837) (end 201.399 113.017) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.0841 115.2795) (end 200.26787 115.2795) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 127.0524) (end 171.4524 126.646) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.4524 126.646) (end 174.856 126.646) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 127.0524) (end 171.046 115.3176) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.046 144.0704) (end 171.046 127.0524) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 205.844 144.172) (end 207.622 142.394) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 171.1476 144.172) (end 205.844 144.172) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 243.3852 129.694) (end 239.88 133.1992) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 237.599069 98.634869) (end 243.3852 104.421) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 250.24828 75.70376) (end 247.84036 73.29584) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 241.06872 73.29584) (end 237.599069 76.765491) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 243.3852 104.421) (end 243.3852 129.694) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 247.84036 73.29584) (end 241.06872 73.29584) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 237.599069 76.765491) (end 237.599069 98.634869) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 224.6654 143.4354) (end 226.3164 141.7844) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 224.6654 151.8682) (end 224.6654 143.4354) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 222.1508 154.3828) (end 224.6654 151.8682) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 204.459599 155.182799) (end 204.2438 154.967) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 221.350801 155.182799) (end 204.459599 155.182799) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 222.1508 154.3828) (end 221.350801 155.182799) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 209.6794 142.394) (end 209.6794 155.169998) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 209.6794 155.169998) (end 209.692201 155.182799) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 207.622 142.394) (end 209.6794 142.394) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 204.2438 161.1392) (end 203.812 161.571) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 204.2438 154.967) (end 204.2438 161.1392) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 215.6992 171.3246) (end 212.1432 167.7686) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 215.6992 173.0264) (end 215.6992 171.3246) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 223.346 173.6092) (end 223.346 173.0756) (width 0.254) (layer B.Cu) (net 4)) + (segment (start 223.3192 171.4008) (end 219.687 167.7686) (width 0.254) (layer B.Cu) (net 4)) + (segment (start 223.3192 173.0264) (end 223.3192 171.4008) (width 0.254) (layer B.Cu) (net 4)) + (segment (start 182.006 162.587) (end 179.974 160.555) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 182.006 167.832) (end 182.006 162.587) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 184.127 169.953) (end 182.006 167.832) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 179.974 160.555) (end 178.92 160.555) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 217.4494 169.953) (end 184.127 169.953) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 219.71 167.6924) (end 217.4494 169.953) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 220.7792 171.35) (end 220.7792 173.0264) (width 0.254) (layer B.Cu) (net 5)) + (segment (start 217.1978 167.7686) (end 220.7792 171.35) (width 0.254) (layer B.Cu) (net 5)) + (segment (start 175.999 159.501) (end 175.999 160.555) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 179.981601 159.427999) (end 176.072001 159.427999) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 183.16499 162.611388) (end 179.981601 159.427999) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 183.16499 167.97499) (end 183.16499 162.611388) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 184.68899 169.49899) (end 183.16499 167.97499) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 215.36341 169.49899) (end 184.68899 169.49899) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 176.072001 159.427999) (end 175.999 159.501) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 217.17 167.6924) (end 215.36341 169.49899) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 210.428599 168.568599) (end 210.428599 168.593999) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 209.6286 167.7686) (end 210.428599 168.568599) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 213.1592 171.3246) (end 213.1592 173.0264) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 210.428599 168.593999) (end 213.1592 171.3246) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 207.622 170.0292) (end 210.6192 173.0264) (width 0.254) (layer B.Cu) (net 7)) + (segment (start 214.1244 152.4016) (end 207.622 158.904) (width 0.254) (layer B.Cu) (net 7)) + (segment (start 215.0642 152.4016) (end 214.1244 152.4016) (width 0.254) (layer B.Cu) (net 7)) + (segment (start 207.622 158.904) (end 207.622 170.0292) (width 0.254) (layer B.Cu) (net 7)) + (segment (start 239.230001 168.492399) (end 240.03 167.6924) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 237.315389 170.407011) (end 239.230001 168.492399) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 217.637459 170.407011) (end 237.315389 170.407011) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 208.158589 170.407011) (end 217.637459 170.407011) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 205.5392 173.0264) (end 208.158589 170.407011) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 204.689201 172.176401) (end 205.5392 173.0264) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 203.1008 170.588) (end 204.689201 172.176401) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 183.873 170.588) (end 203.1008 170.588) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 173.548 161.952) (end 175.237 161.952) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 173.205 160.555) (end 173.205 161.609) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 173.205 161.609) (end 173.548 161.952) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 175.237 161.952) (end 183.873 170.588) (width 0.254) (layer F.Cu) (net 8)) + (via (at 220.514831 102.708831) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 9)) + (segment (start 220.514831 109.141169) (end 216.639 113.017) (width 0.254) (layer B.Cu) (net 9)) + (segment (start 220.514831 102.708831) (end 220.514831 109.141169) (width 0.254) (layer B.Cu) (net 9)) + (segment (start 220.3728 102.5668) (end 220.514831 102.708831) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 220.3728 75.6428) (end 220.3728 102.5668) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 217.78201 73.05201) (end 220.3728 75.6428) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 196.192 73.052) (end 217.78201 73.05201) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 195.710128 72.570128) (end 196.192 73.052) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 187.048 69.75) (end 188.445 68.353) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 195.710128 69.242) (end 195.710128 72.570128) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 194.821128 68.353) (end 195.710128 69.242) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 188.445 68.353) (end 194.821128 68.353) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 224.181832 69.75) (end 227.49021 66.441622) (width 0.254) (layer B.Cu) (net 10)) + (via (at 224.1574 73.3314) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 10)) + (segment (start 224.181832 73.306968) (end 224.1574 73.3314) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 192.010166 77.37) (end 196.048766 73.3314) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 224.181832 69.75) (end 224.181832 73.306968) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 196.048766 73.3314) (end 224.1574 73.3314) (width 0.254) (layer B.Cu) (net 10)) + (via (at 225.4528 82.5008) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 10)) + (segment (start 224.563799 73.737799) (end 224.1574 73.3314) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 225.4528 74.6268) (end 224.563799 73.737799) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 225.4528 82.5008) (end 225.4528 74.6268) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 229.72 82.45) (end 225.4528 82.5262) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 225.4528 82.5262) (end 225.4528 82.5008) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 230.7868 81.3832) (end 229.72 82.45) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 244.7568 90.197) (end 237.086 82.5262) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 234.1396 81.3832) (end 230.7868 81.3832) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 235.2826 82.5262) (end 234.1396 81.3832) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 237.086 82.5262) (end 235.2826 82.5262) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 244.7568 94.0832) (end 244.7568 90.197) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 187.889156 75.78899) (end 188.670167 76.570001) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 182.07581 75.78899) (end 187.889156 75.78899) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 181.6632 104.236132) (end 181.6632 76.2016) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 187.617056 110.189988) (end 181.6632 104.236132) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 188.670167 76.570001) (end 189.470166 77.37) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 190.995257 110.189989) (end 187.617056 110.189988) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 193.779 112.973732) (end 190.995257 110.189989) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 181.6632 76.2016) (end 182.07581 75.78899) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 193.779 113.017) (end 193.779 112.973732) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 233.748177 67.803655) (end 236.261451 67.803655) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 236.885989 68.428193) (end 236.885989 79.736077) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 192.537186 80.43702) (end 190.270165 78.169999) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 236.185045 80.43702) (end 192.537186 80.43702) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 231.801832 69.75) (end 233.748177 67.803655) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 190.270165 78.169999) (end 189.470166 77.37) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 236.261451 67.803655) (end 236.885989 68.428193) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 236.885989 79.736077) (end 236.185045 80.43702) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 186.930166 77.37) (end 186.930166 80.808166) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 186.930166 80.808166) (end 186.99401 80.87201) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 182.117211 82.688553) (end 183.933754 80.87201) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 183.933754 80.87201) (end 186.99401 80.87201) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 193.5904 110.2884) (end 192.0264 110.2884) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 196.319 113.017) (end 193.5904 110.2884) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 187.805114 109.735978) (end 182.117211 104.048075) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 191.473978 109.735978) (end 187.805114 109.735978) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 192.0264 110.2884) (end 191.473978 109.735978) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 182.117211 104.048075) (end 182.117211 82.688553) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 229.261832 69.75) (end 231.662188 67.349644) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 237.34 68.240136) (end 237.339999 79.924135) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 187.013031 80.891031) (end 186.99401 80.87201) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 236.449508 67.349644) (end 237.34 68.240136) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 237.339999 79.924135) (end 236.373102 80.891031) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 236.373102 80.891031) (end 187.013031 80.891031) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 231.662188 67.349644) (end 236.449508 67.349644) (width 0.254) (layer B.Cu) (net 12)) + (via (at 196.446 83.008802) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 13)) + (segment (start 197.090166 82.364636) (end 196.446 83.008802) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 197.090166 77.37) (end 197.090166 82.364636) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 195.176001 84.278801) (end 196.039601 83.415201) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 198.859 113.017) (end 198.859 112.168) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 198.859 112.168) (end 195.176001 108.485001) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 195.176001 108.485001) (end 195.176001 84.278801) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 196.039601 83.415201) (end 196.446 83.008802) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 200.115965 74.344201) (end 197.890165 76.570001) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 226.236033 74.344201) (end 200.115965 74.344201) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 197.890165 76.570001) (end 197.090166 77.37) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 229.261832 77.37) (end 226.236033 74.344201) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 199.630166 77.37) (end 199.621 77.379166) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 199.621 77.379166) (end 200.392166 77.379166) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 200.392166 77.379166) (end 215.369 92.356) (width 0.254) (layer F.Cu) (net 14)) + (segment (start 215.369 92.356) (end 215.369 102.77) (width 0.254) (layer F.Cu) (net 14)) + (via (at 215.369 102.77) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 14)) + (segment (start 211.559 109.755) (end 211.559 113.017) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 215.369 105.945) (end 211.559 109.755) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 215.369 102.77) (end 215.369 105.945) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 226.721832 77.37) (end 224.150044 74.798212) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 202.201954 74.798212) (end 200.430165 76.570001) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 224.150044 74.798212) (end 202.201954 74.798212) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 200.430165 76.570001) (end 199.630166 77.37) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 202.170166 77.37) (end 202.170166 78.141166) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 202.170166 78.141166) (end 217.909 93.88) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 217.909 93.88) (end 217.909 102.77) (width 0.254) (layer F.Cu) (net 15)) + (via (at 217.909 102.77) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 15)) + (segment (start 231.801832 77.37) (end 231.801832 78.50137) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 231.801832 78.50137) (end 230.774202 79.529) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 230.774202 79.529) (end 204.329166 79.529) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 204.329166 79.529) (end 202.970165 78.169999) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 202.970165 78.169999) (end 202.170166 77.37) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 214.099 109.882) (end 214.099 113.017) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 217.909 106.072) (end 214.099 109.882) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 217.909 102.77) (end 217.909 106.072) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 204.106172 142.492421) (end 193.369421 142.492421) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 205.615411 135.054418) (end 205.615411 140.983182) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 204.74164 134.180647) (end 205.615411 135.054418) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 204.74164 131.20784) (end 204.74164 134.180647) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 205.615411 140.983182) (end 204.106172 142.492421) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 193.369421 142.492421) (end 191.784999 140.907999) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 191.784999 140.907999) (end 190.985 140.108) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 202.9992 173.0264) (end 201.7038 171.731) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 196.864999 140.907999) (end 196.065 140.108) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 202.17624 132.26184) (end 205.1582 135.2438) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 205.1582 135.2438) (end 205.1582 140.7938) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 203.91679 142.03521) (end 197.99221 142.03521) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 197.99221 142.03521) (end 196.864999 140.907999) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 205.1582 140.7938) (end 203.91679 142.03521) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 202.17624 131.20784) (end 202.17624 132.26184) (width 0.254) (layer F.Cu) (net 17)) + (segment (start 199.1638 171.731) (end 199.1638 168.7338) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 200.4592 173.0264) (end 199.1638 171.731) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 199.404999 140.907999) (end 198.605 140.108) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 200.0528 141.5558) (end 199.404999 140.907999) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 199.61084 131.20784) (end 199.61084 136.54184) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 201.907 141.5558) (end 200.0528 141.5558) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 199.61084 136.54184) (end 202.415 139.346) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 202.415 139.346) (end 202.415 141.0478) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 202.415 141.0478) (end 201.907 141.5558) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 197.9192 173.0264) (end 196.6238 171.731) (width 0.254) (layer B.Cu) (net 18)) + (via (at 197.335 145.696) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 19)) + (segment (start 197.335 145.121264) (end 197.335 145.696) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 197.335 143.918) (end 197.335 145.121264) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 201.145 140.108) (end 197.335 143.918) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 196.96924 135.93224) (end 201.145 140.108) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 196.96924 131.20784) (end 196.96924 135.93224) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 196.065 147.728) (end 191.5438 152.2492) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 193.525 147.728) (end 189.0038 152.2492) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 190.35 148.363) (end 190.985 147.728) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 187.7592 173.0264) (end 186.4638 171.731) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 190.1976 148.363) (end 186.4638 152.0968) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 190.35 148.363) (end 190.1976 148.363) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 187.81 148.363) (end 188.445 147.728) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 185.2192 173.0264) (end 183.9238 171.731) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 188.445 147.728) (end 183.9238 152.2492) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 212.4988 152.427) (end 207.16799 157.75781) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 218.2392 171.35) (end 218.2392 173.0264) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 214.6578 167.7686) (end 218.2392 171.35) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 226.721832 69.75) (end 229.576199 66.895633) (width 0.254) (layer B.Cu) (net 26)) + (via (at 235.7652 79.70362) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 26)) + (segment (start 236.431978 79.036842) (end 235.7652 79.70362) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 236.431978 71.686778) (end 236.431978 79.036842) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 236.0192 71.274) (end 236.431978 71.686778) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 228.245832 71.274) (end 236.0192 71.274) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 226.721832 69.75) (end 228.245832 71.274) (width 0.254) (layer B.Cu) (net 26)) + (via (at 235.765204 81.7896) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 26)) + (segment (start 235.7652 79.70362) (end 235.7652 81.789596) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 235.7652 81.789596) (end 235.765204 81.7896) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 236.33994 81.7896) (end 235.765204 81.7896) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 248.3636 92.2544) (end 237.8988 81.7896) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 197.163175 79.983009) (end 194.550166 77.37) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 237.8988 81.7896) (end 236.33994 81.7896) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 235.7652 79.70362) (end 235.485811 79.983009) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 235.485811 79.983009) (end 197.163175 79.983009) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 248.3636 94.0832) (end 248.3636 92.2544) (width 0.254) (layer B.Cu) (net 26)) + (via (at 176.761 106.326) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 29)) + (segment (start 187.899001 106.236999) (end 188.699 105.437) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 177.65 107.215) (end 186.921 107.215) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 176.761 106.326) (end 177.65 107.215) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 186.921 107.215) (end 187.899001 106.236999) (width 0.254) (layer F.Cu) (net 29)) + (via (at 169.6744 105.9704) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 29)) + (segment (start 176.761 106.326) (end 170.03 106.326) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 170.03 106.326) (end 169.6744 105.9704) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 244.8584 149.3028) (end 244.9092 149.3028) (width 0.254) (layer B.Cu) (net 30)) + (via (at 218.25952 128.21064) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 30)) + (segment (start 218.29 129.719492) (end 218.29 128.24112) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 218.28492 129.724572) (end 218.29 129.719492) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 218.28492 132.615) (end 218.28492 129.724572) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 218.29 128.24112) (end 218.25952 128.21064) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 226.926 136.025666) (end 223.90908 133.008746) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 223.90908 133.008746) (end 218.678666 133.008746) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 218.678666 133.008746) (end 218.28492 132.615) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 226.926 146.458) (end 226.926 136.025666) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 229.7708 149.3028) (end 226.926 146.458) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 214.116637 128.21064) (end 218.25952 128.21064) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 197.731999 112.429518) (end 197.731999 113.597961) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 199.74498 113.838983) (end 214.116637 128.21064) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 197.731999 113.597961) (end 198.318039 114.184001) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 199.399961 114.184001) (end 199.74498 113.838983) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 193.779 105.437) (end 193.779 108.476519) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 198.318039 114.184001) (end 199.399961 114.184001) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 193.779 108.476519) (end 197.731999 112.429518) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 243.6392 148.0836) (end 244.8584 149.3028) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 230.99 148.0836) (end 243.6392 148.0836) (width 0.254) (layer F.Cu) (net 30)) + (segment (start 229.7708 149.3028) (end 230.99 148.0836) (width 0.254) (layer F.Cu) (net 30)) + (via (at 217.4518 126.773) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 31)) + (segment (start 216.877064 126.773) (end 217.4518 126.773) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 213.321064 126.773) (end 216.877064 126.773) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 196.319 105.437) (end 200.129 109.247) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 200.129 113.580936) (end 213.321064 126.773) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 200.129 109.247) (end 200.129 113.580936) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 217.91408 134.0628) (end 217.4518 133.60052) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 226.1132 135.854932) (end 224.321068 134.0628) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 224.321068 134.0628) (end 217.91408 134.0628) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 226.1132 148.1852) (end 226.1132 135.854932) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 217.4518 133.60052) (end 217.4518 126.773) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 229.7708 151.8428) (end 226.1132 148.1852) (width 0.254) (layer F.Cu) (net 31)) + (via (at 216.59836 124.79688) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 32)) + (segment (start 225.2496 150.9156) (end 225.2496 135.6376) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 228.7168 154.3828) (end 225.2496 150.9156) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 217.59404 135.028) (end 216.59836 134.03232) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 229.7708 154.3828) (end 228.7168 154.3828) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 216.59836 125.371616) (end 216.59836 124.79688) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 216.59836 134.03232) (end 216.59836 125.371616) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 225.2496 135.6376) (end 224.64 135.028) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 224.64 135.028) (end 217.59404 135.028) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 243.5884 153.062) (end 244.9092 154.3828) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 233.784 150.5728) (end 241.15 150.5728) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 243.6392 153.062) (end 243.5884 153.062) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 229.974 154.3828) (end 233.784 150.5728) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 241.15 150.5728) (end 243.6392 153.062) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 229.7708 154.3828) (end 229.974 154.3828) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 198.859 106.56837) (end 202.669 110.37837) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 198.859 105.437) (end 198.859 106.56837) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 216.023624 124.79688) (end 216.59836 124.79688) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 213.930998 124.79688) (end 216.023624 124.79688) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 202.669 113.534882) (end 213.930998 124.79688) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 202.669 110.37837) (end 202.669 113.534882) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 185.738 105.397) (end 186.159 105.397) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 174.475 74.576) (end 179.3264 79.4274) (width 0.254) (layer B.Cu) (net 33)) + (via (at 179.3264 81.3832) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 33)) + (segment (start 179.3264 79.4274) (end 179.3264 81.3832) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 183.288801 81.992801) (end 183.6952 82.3992) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 182.6792 81.3832) (end 183.288801 81.992801) (width 0.254) (layer F.Cu) (net 33)) + (via (at 183.6952 82.3992) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 33)) + (segment (start 179.3264 81.3832) (end 182.6792 81.3832) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 183.288801 82.805599) (end 183.6952 82.3992) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 182.5776 83.5168) (end 183.288801 82.805599) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 182.5776 101.8556) (end 182.5776 83.5168) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 186.159 105.437) (end 182.5776 101.8556) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 192.416566 71.8836) (end 194.550166 69.75) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 178.369481 71.8836) (end 192.416566 71.8836) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 175.677081 74.576) (end 178.369481 71.8836) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 174.475 74.576) (end 175.677081 74.576) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 184.254 77.497) (end 184.381 77.497) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 184.860166 75.846) (end 209.908 75.846) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 184.390166 76.316) (end 184.860166 75.846) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 184.390166 77.37) (end 184.390166 76.316) (width 0.254) (layer F.Cu) (net 36)) + (via (at 209.908 75.8714) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 36)) + (segment (start 209.908 75.846) (end 209.908 75.8714) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 220.143232 75.8714) (end 221.641832 77.37) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 209.908 75.8714) (end 220.143232 75.8714) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 209.146 113.057) (end 209.019 113.184) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 207.660001 111.698001) (end 207.660001 85.078999) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 209.019 113.057) (end 207.660001 111.698001) (width 0.254) (layer B.Cu) (net 36)) + (via (at 209.908 82.831) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 36)) + (segment (start 207.660001 85.078999) (end 209.908 82.831) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 209.908 82.831) (end 209.908 75.8714) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 176.1514 81.3324) (end 177.7008 81.3324) (width 0.254) (layer B.Cu) (net 36)) + (via (at 177.7008 81.3324) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 36)) + (segment (start 169.395 74.576) (end 176.1514 81.3324) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 181.6632 77.37) (end 178.107199 80.926001) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 184.390166 77.37) (end 181.6632 77.37) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 178.107199 80.926001) (end 177.7008 81.3324) (width 0.254) (layer F.Cu) (net 36)) + (segment (start 206.479 113.057) (end 206.606 113.057) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 206.479 113.057) (end 208.003 114.581) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 209.44896 114.581) (end 210.431999 113.597961) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 210.431999 113.597961) (end 210.431999 109.231001) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 208.003 114.581) (end 209.44896 114.581) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 212.686001 106.976999) (end 212.686001 97.705999) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 210.431999 109.231001) (end 212.686001 106.976999) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 212.686001 97.705999) (end 213.464 96.928) (width 0.254) (layer B.Cu) (net 37)) + (via (at 219.179 96.928) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 37)) + (segment (start 213.464 96.928) (end 219.179 96.928) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 189.461 70.004) (end 189.461 69.877) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 215.23785 73.506018) (end 218.301833 76.570001) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 218.301833 76.570001) (end 219.101832 77.37) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 193.226184 73.506018) (end 215.23785 73.506018) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 189.470166 69.75) (end 193.226184 73.506018) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 219.179 77.447168) (end 219.101832 77.37) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 219.179 96.928) (end 219.179 77.447168) (width 0.254) (layer F.Cu) (net 37)) + (segment (start 191.37616 137.95916) (end 193.525 140.108) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 182.25248 132.53372) (end 187.67792 137.95916) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 182.25248 121.141266) (end 182.25248 132.53372) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 187.67792 137.95916) (end 191.37616 137.95916) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 213.8958 118.70088) (end 184.692866 118.70088) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 219.179 113.41768) (end 217.31972 115.20076) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 219.179 113.057) (end 219.179 113.41768) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 217.31972 115.20076) (end 217.31972 115.27696) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 217.31972 115.27696) (end 213.8958 118.70088) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 184.692866 118.70088) (end 182.25248 121.141266) (width 0.254) (layer F.Cu) (net 38)) + (segment (start 192.77361 110.83241) (end 192.9916 111.0504) (width 0.254) (layer F.Cu) (net 39)) + (via (at 192.9916 111.0504) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 39)) + (segment (start 192.77361 109.388811) (end 192.77361 110.83241) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 192.77361 106.97161) (end 192.77361 109.388811) (width 0.254) (layer B.Cu) (net 39)) + (via (at 192.77361 109.388811) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 39)) + (segment (start 191.239 105.437) (end 192.77361 106.97161) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 229.7708 144.2228) (end 227.6372 142.0892) (width 0.254) (layer F.Cu) (net 39)) + (via (at 219.23996 129.6178) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 39)) + (segment (start 227.6372 136.0948) (end 221.1602 129.6178) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 221.1602 129.6178) (end 219.814696 129.6178) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 219.814696 129.6178) (end 219.23996 129.6178) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 227.6372 142.0892) (end 227.6372 136.0948) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 218.665224 129.6178) (end 219.23996 129.6178) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 199.719375 114.506655) (end 214.83052 129.6178) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 198.129982 114.638012) (end 199.588018 114.638012) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 197.277989 113.786019) (end 198.129982 114.638012) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 197.277988 113.765974) (end 197.277989 113.786019) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 195.778039 114.184001) (end 196.859961 114.184001) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 195.183534 112.5236) (end 195.191999 112.532065) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 193.6012 111.0504) (end 195.0744 112.5236) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 192.9916 111.0504) (end 193.6012 111.0504) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 199.588018 114.638012) (end 199.719375 114.506655) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 195.191999 112.532065) (end 195.191999 113.597961) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 195.0744 112.5236) (end 195.183534 112.5236) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 195.191999 113.597961) (end 195.778039 114.184001) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 196.859961 114.184001) (end 197.277988 113.765974) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 214.83052 129.6178) (end 218.665224 129.6178) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 232.14677 142.9782) (end 240.9468 142.9782) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 229.7708 144.2228) (end 230.90217 144.2228) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 230.90217 144.2228) (end 232.14677 142.9782) (width 0.254) (layer F.Cu) (net 39)) + (segment (start 240.9468 142.9782) (end 241.4294 142.9782) (width 0.254) (layer F.Cu) (net 39)) + (via (at 241.4294 142.9782) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 39)) + (segment (start 243.77783 141.6828) (end 244.9092 141.6828) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 242.150064 141.6828) (end 243.77783 141.6828) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 241.4294 142.403464) (end 242.150064 141.6828) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 241.4294 142.9782) (end 241.4294 142.403464) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 217.147 100.738) (end 216.639 101.246) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 221.338 100.738) (end 217.147 100.738) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 216.639 101.246) (end 216.639 105.437) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 222.227 101.627) (end 221.338 100.738) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 201.145 147.728) (end 201.145 146.59663) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 222.227 128.932) (end 222.227 101.627) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 213.972 137.187) (end 222.227 128.932) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 210.55463 137.187) (end 213.972 137.187) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 201.145 146.59663) (end 210.55463 137.187) (width 0.254) (layer B.Cu) (net 40)) + (via (at 209.53716 115.53096) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 41)) + (segment (start 213.88564 115.53096) (end 210.111896 115.53096) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 210.111896 115.53096) (end 209.53716 115.53096) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 219.179 106.52837) (end 215.369 110.33837) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 215.369 114.0476) (end 213.88564 115.53096) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 215.369 110.33837) (end 215.369 114.0476) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 219.179 105.397) (end 219.179 106.52837) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 188.445 140.108) (end 181.44984 133.11284) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 181.44984 133.11284) (end 181.44984 121.30184) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 206.821251 118.246869) (end 209.130761 115.937359) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 181.44984 121.30184) (end 184.504809 118.246869) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 184.504809 118.246869) (end 206.821251 118.246869) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 209.130761 115.937359) (end 209.53716 115.53096) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 233.022 177.6492) (end 230.9392 175.5664) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 235.1048 177.6492) (end 233.022 177.6492) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 235.9684 176.7856) (end 235.1048 177.6492) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 235.9684 171.096) (end 235.9684 176.7856) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 232.5902 167.7178) (end 235.9684 171.096) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 230.9392 178.1064) (end 228.3992 175.5664) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 235.7652 178.1064) (end 230.9392 178.1064) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 237.086 176.7856) (end 235.7652 178.1064) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 237.086 169.572) (end 237.086 176.7856) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 235.2318 167.7178) (end 237.086 169.572) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 248.262 108.09237) (end 248.262 109.501) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 106.961) (end 248.262 108.09237) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 110.63237) (end 248.262 112.041) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 109.501) (end 248.262 110.63237) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 112.041) (end 248.262 114.581) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 115.71237) (end 248.262 117.121) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 114.581) (end 248.262 115.71237) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 118.25237) (end 248.262 119.661) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 117.121) (end 248.262 118.25237) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 119.661) (end 248.262 122.201) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 123.33237) (end 248.262 124.741) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 122.201) (end 248.262 123.33237) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 236.47959 178.56041) (end 228.85321 178.56041) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 228.85321 178.56041) (end 225.8592 175.5664) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 237.8988 177.1412) (end 236.47959 178.56041) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 237.8988 167.7178) (end 237.8988 177.1412) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 239.3696 165.8128) (end 237.49 167.6924) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 244.1472 165.8128) (end 239.3696 165.8128) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 249.7098 126.1888) (end 249.7098 160.2502) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 249.7098 160.2502) (end 244.1472 165.8128) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 248.262 124.741) (end 249.7098 126.1888) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 224.7416 170.2578) (end 225.6306 170.2578) (width 0.254) (layer B.Cu) (net 46)) + (segment (start 227.549201 172.176401) (end 228.3992 173.0264) (width 0.254) (layer B.Cu) (net 46)) + (segment (start 225.6306 170.2578) (end 227.549201 172.176401) (width 0.254) (layer B.Cu) (net 46)) + (segment (start 222.2524 167.7686) (end 224.7416 170.2578) (width 0.254) (layer B.Cu) (net 46)) + (segment (start 227.4086 170.3086) (end 228.2214 170.3086) (width 0.254) (layer B.Cu) (net 47)) + (segment (start 228.2214 170.3086) (end 230.9392 173.0264) (width 0.254) (layer B.Cu) (net 47)) + (segment (start 224.8686 167.7686) (end 227.4086 170.3086) (width 0.254) (layer B.Cu) (net 47)) + (segment (start 233.114031 172.661231) (end 233.4792 173.0264) (width 0.254) (layer F.Cu) (net 48)) + (segment (start 227.434 167.7686) (end 229.2882 169.6228) (width 0.254) (layer B.Cu) (net 48)) + (segment (start 230.0756 169.6228) (end 233.4792 173.0264) (width 0.254) (layer B.Cu) (net 48)) + (segment (start 229.2882 169.6228) (end 230.0756 169.6228) (width 0.254) (layer B.Cu) (net 48)) + (segment (start 235.2064 173.8392) (end 233.4792 175.5664) (width 0.254) (layer B.Cu) (net 49)) + (segment (start 235.2064 172.9756) (end 235.2064 173.8392) (width 0.254) (layer B.Cu) (net 49)) + (segment (start 229.9994 167.7686) (end 235.2064 172.9756) (width 0.254) (layer B.Cu) (net 49)) + (segment (start 186.159 113.057) (end 183.7714 113.057) (width 0.254) (layer B.Cu) (net 51)) + (segment (start 177.396 119.4324) (end 177.396 121.566) (width 0.254) (layer B.Cu) (net 51)) + (segment (start 183.7714 113.057) (end 177.396 119.4324) (width 0.254) (layer B.Cu) (net 51)) + (via (at 179.682 100.484) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 52)) + (segment (start 209.146 100.484) (end 180.256736 100.484) (width 0.254) (layer F.Cu) (net 52)) + (segment (start 214.099 105.437) (end 209.146 100.484) (width 0.254) (layer F.Cu) (net 52)) + (segment (start 180.256736 100.484) (end 179.682 100.484) (width 0.254) (layer F.Cu) (net 52)) + (segment (start 173.224022 122.474022) (end 173.224022 118.067178) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 173.224022 118.067178) (end 179.682 111.6092) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 179.682 101.058736) (end 179.682 100.484) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 174.856 124.106) (end 173.224022 122.474022) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 179.682 111.6092) (end 179.682 101.058736) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 205.9456 102.3636) (end 179.6312 102.3636) (width 0.254) (layer F.Cu) (net 53)) + (segment (start 209.019 105.437) (end 205.9456 102.3636) (width 0.254) (layer F.Cu) (net 53)) + (via (at 177.396 102.3636) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 53)) + (segment (start 179.6312 102.3636) (end 177.396 102.3636) (width 0.254) (layer F.Cu) (net 53)) + (segment (start 174.0432 129.0336) (end 172.316 127.3064) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 177.4976 102.4652) (end 177.396 102.3636) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 179.428 127.662) (end 178.0564 129.0336) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 177.4976 112.509464) (end 177.4976 102.4652) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 172.316 117.691064) (end 177.4976 112.509464) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 172.316 127.3064) (end 172.316 117.691064) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 178.0564 129.0336) (end 174.0432 129.0336) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 179.428 125.2236) (end 179.428 127.662) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 178.3104 124.106) (end 179.428 125.2236) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 177.396 124.106) (end 178.3104 124.106) (width 0.254) (layer B.Cu) (net 53)) + (via (at 178.5644 101.3984) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 54)) + (segment (start 179.139136 101.3984) (end 178.5644 101.3984) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 207.5204 101.3984) (end 179.139136 101.3984) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 211.559 105.437) (end 207.5204 101.3984) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 176.566411 128.579589) (end 174.231257 128.579589) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 172.770011 127.118343) (end 172.770011 117.879121) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 178.5644 112.084732) (end 178.5644 101.973136) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 177.396 126.646) (end 177.396 127.75) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 178.5644 101.973136) (end 178.5644 101.3984) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 177.396 127.75) (end 176.566411 128.579589) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 172.770011 117.879121) (end 178.5644 112.084732) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 174.231257 128.579589) (end 172.770011 127.118343) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 218.656259 65.987611) (end 237.946411 65.987611) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 211.79507 72.8488) (end 218.656259 65.987611) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 184.373934 72.8488) (end 211.79507 72.8488) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 181.209191 76.013542) (end 184.373934 72.8488) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 245.16828 73.20948) (end 245.16828 75.70376) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 181.209191 104.424189) (end 181.209191 76.013542) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 188.715001 111.929999) (end 181.209191 104.424189) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 237.946411 65.987611) (end 245.16828 73.20948) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 190.111999 111.929999) (end 188.715001 111.929999) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 191.239 113.057) (end 190.111999 111.929999) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 244.7568 76.11524) (end 245.16828 75.70376) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 244.7568 83.9232) (end 244.7568 76.11524) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 188.6228 113.1332) (end 188.699 113.057) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 188.699 113.184) (end 188.699 113.057) (width 0.254) (layer B.Cu) (net 56) (tstamp 5DDA598E)) + (segment (start 188.699 113.057) (end 180.75518 105.11318) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 184.243056 72.33761) (end 211.664192 72.33761) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 211.664192 72.33761) (end 218.468202 65.5336) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 218.468202 65.5336) (end 239.5752 65.5336) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 180.75518 75.825485) (end 184.243056 72.33761) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 180.75518 105.11318) (end 180.75518 75.825485) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 247.70828 73.66668) (end 247.70828 75.70376) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 247.70066 73.65906) (end 247.70828 73.66668) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 239.5752 65.5336) (end 247.70066 73.65906) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 248.3636 76.35908) (end 247.70828 75.70376) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 248.3636 83.9232) (end 248.3636 76.35908) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 239.48884 123.58784) (end 240.642 124.741) (width 0.254) (layer F.Cu) (net 66)) + (segment (start 204.74164 123.58784) (end 239.48884 123.58784) (width 0.254) (layer F.Cu) (net 66)) + (segment (start 229.80128 122.201) (end 240.642 122.201) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 203.56308 122.201) (end 229.80128 122.201) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 202.17624 123.58784) (end 203.56308 122.201) (width 0.254) (layer F.Cu) (net 67)) + (segment (start 238.76748 121.53552) (end 240.642 119.661) (width 0.254) (layer F.Cu) (net 68)) + (segment (start 201.66316 121.53552) (end 238.76748 121.53552) (width 0.254) (layer F.Cu) (net 68)) + (segment (start 199.61084 123.58784) (end 201.66316 121.53552) (width 0.254) (layer F.Cu) (net 68)) + (segment (start 236.681491 121.081509) (end 240.642 117.121) (width 0.254) (layer F.Cu) (net 69)) + (segment (start 199.475571 121.081509) (end 236.681491 121.081509) (width 0.254) (layer F.Cu) (net 69)) + (segment (start 196.96924 123.58784) (end 199.475571 121.081509) (width 0.254) (layer F.Cu) (net 69)) + (segment (start 234.6476 120.5754) (end 240.642 114.581) (width 0.254) (layer F.Cu) (net 70)) + (segment (start 197.41628 120.5754) (end 234.6476 120.5754) (width 0.254) (layer F.Cu) (net 70)) + (segment (start 194.40384 123.58784) (end 197.41628 120.5754) (width 0.254) (layer F.Cu) (net 70)) + (segment (start 232.57496 120.10804) (end 240.642 112.041) (width 0.254) (layer F.Cu) (net 71)) + (segment (start 195.16584 120.10804) (end 232.57496 120.10804) (width 0.254) (layer F.Cu) (net 71)) + (segment (start 191.68604 123.58784) (end 195.16584 120.10804) (width 0.254) (layer F.Cu) (net 71)) + (segment (start 230.488971 119.654029) (end 240.642 109.501) (width 0.254) (layer F.Cu) (net 72)) + (segment (start 192.902051 119.654029) (end 230.488971 119.654029) (width 0.254) (layer F.Cu) (net 72)) + (segment (start 188.96824 123.58784) (end 192.902051 119.654029) (width 0.254) (layer F.Cu) (net 72)) + (segment (start 240.642 107.977) (end 240.642 106.961) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 240.245001 108.373999) (end 240.642 107.977) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 240.101039 108.373999) (end 240.245001 108.373999) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 239.514999 108.960039) (end 240.101039 108.373999) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 229.4406 119.1784) (end 239.514999 109.104001) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 239.514999 109.104001) (end 239.514999 108.960039) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 229.4406 119.18856) (end 229.4406 119.1784) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 190.64972 119.18856) (end 229.4406 119.18856) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 186.25044 123.58784) (end 190.64972 119.18856) (width 0.254) (layer F.Cu) (net 73)) + (segment (start 219.0648 157.2276) (end 217.1978 159.0946) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 219.1028 157.2276) (end 219.0648 157.2276) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 217.1978 159.0946) (end 217.1978 160.1486) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 219.1028 152.3508) (end 219.1028 157.2276) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 222.1508 149.3028) (end 219.1028 152.3508) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 217.9852 154.3066) (end 212.1432 160.1486) (width 0.254) (layer B.Cu) (net 80)) + (segment (start 217.9852 148.3884) (end 217.9852 154.3066) (width 0.254) (layer B.Cu) (net 80)) + (segment (start 222.1508 144.2228) (end 217.9852 148.3884) (width 0.254) (layer B.Cu) (net 80)) + (segment (start 219.649 139.1428) (end 215.0642 143.7276) (width 0.254) (layer B.Cu) (net 81)) + (segment (start 215.0642 143.7276) (end 215.0642 144.7816) (width 0.254) (layer B.Cu) (net 81)) + (segment (start 222.1508 139.1428) (end 219.649 139.1428) (width 0.254) (layer B.Cu) (net 81)) + (segment (start 247.4746 143.9942) (end 247.5 144.0196) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 240.03 159.0184) (end 240.03 160.0724) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 240.9318 158.1166) (end 240.03 159.0184) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 246.6872 158.1166) (end 240.9318 158.1166) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 247.4746 157.3292) (end 246.6872 158.1166) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 246.7126 134.7486) (end 247.4746 135.5106) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 247.4746 135.5106) (end 247.4746 157.3292) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 234.165 134.7486) (end 246.7126 134.7486) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 229.7708 139.1428) (end 234.165 134.7486) (width 0.254) (layer F.Cu) (net 82)) + (segment (start 219.687 154.3066) (end 219.687 160.1486) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 222.1508 151.8428) (end 219.687 154.3066) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 214.6578 160.047) (end 214.6578 160.1486) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 218.5694 156.1354) (end 214.6578 160.047) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 218.5694 150.3442) (end 218.5694 156.1354) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 222.1508 146.7628) (end 218.5694 150.3442) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 222.1508 141.6828) (end 217.401 146.4326) (width 0.254) (layer B.Cu) (net 85)) + (segment (start 217.401 146.4326) (end 217.401 153.3414) (width 0.254) (layer B.Cu) (net 85)) + (segment (start 217.401 153.3414) (end 212.4734 158.269) (width 0.254) (layer B.Cu) (net 85)) + (segment (start 209.6286 159.0946) (end 209.6286 160.1486) (width 0.254) (layer B.Cu) (net 85)) + (segment (start 210.4542 158.269) (end 209.6286 159.0946) (width 0.254) (layer B.Cu) (net 85)) + (segment (start 212.4734 158.269) (end 210.4542 158.269) (width 0.254) (layer B.Cu) (net 85)) + (segment (start 219.649 136.6028) (end 212.4988 143.753) (width 0.254) (layer B.Cu) (net 86)) + (segment (start 212.4988 143.753) (end 212.4988 144.807) (width 0.254) (layer B.Cu) (net 86)) + (segment (start 222.1508 136.6028) (end 219.649 136.6028) (width 0.254) (layer B.Cu) (net 86)) + (segment (start 235.2318 159.0438) (end 235.2318 160.0978) (width 0.254) (layer B.Cu) (net 87)) + (segment (start 237.2892 149.3028) (end 235.088851 151.503149) (width 0.254) (layer B.Cu) (net 87)) + (segment (start 235.088851 158.900851) (end 235.2318 159.0438) (width 0.254) (layer B.Cu) (net 87)) + (segment (start 235.088851 151.503149) (end 235.088851 158.900851) (width 0.254) (layer B.Cu) (net 87)) + (segment (start 234.18083 147.33117) (end 234.18083 155.375902) (width 0.254) (layer B.Cu) (net 88)) + (segment (start 234.18083 155.375902) (end 229.9994 159.557332) (width 0.254) (layer B.Cu) (net 88)) + (segment (start 237.2892 144.2228) (end 234.18083 147.33117) (width 0.254) (layer B.Cu) (net 88)) + (segment (start 229.9994 159.557332) (end 229.9994 160.1486) (width 0.254) (layer B.Cu) (net 88)) + (segment (start 224.8686 159.0946) (end 224.8686 160.1486) (width 0.254) (layer B.Cu) (net 89)) + (segment (start 231.098985 157.173611) (end 226.789589 157.173611) (width 0.254) (layer B.Cu) (net 89)) + (segment (start 237.2892 139.1428) (end 233.27281 143.15919) (width 0.254) (layer B.Cu) (net 89)) + (segment (start 233.27281 143.15919) (end 233.272809 154.999787) (width 0.254) (layer B.Cu) (net 89)) + (segment (start 233.272809 154.999787) (end 231.098985 157.173611) (width 0.254) (layer B.Cu) (net 89)) + (segment (start 226.789589 157.173611) (end 224.8686 159.0946) (width 0.254) (layer B.Cu) (net 89)) + (segment (start 244.9092 139.1428) (end 248.4398 139.1428) (width 0.254) (layer B.Cu) (net 90)) + (via (at 248.5414 139.0412) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 90)) + (segment (start 248.4398 139.1428) (end 248.5414 139.0412) (width 0.254) (layer B.Cu) (net 90)) + (segment (start 248.5414 139.0412) (end 248.5414 157.7864) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 246.2554 160.0724) (end 242.57 160.0724) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 248.5414 157.7864) (end 246.2554 160.0724) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 237.8988 159.0438) (end 237.8988 160.0978) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 235.542861 156.687861) (end 237.8988 159.0438) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 237.2892 151.8428) (end 235.542861 153.589139) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 235.542861 153.589139) (end 235.542861 156.687861) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 232.5902 157.6086) (end 232.5902 160.0978) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 234.634841 149.417159) (end 234.634841 155.563959) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 237.2892 146.7628) (end 234.634841 149.417159) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 234.634841 155.563959) (end 232.5902 157.6086) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 233.726819 155.187845) (end 230.620264 158.2944) (width 0.254) (layer B.Cu) (net 93)) + (segment (start 233.72682 145.24518) (end 233.726819 155.187845) (width 0.254) (layer B.Cu) (net 93)) + (segment (start 228.2342 158.2944) (end 227.434 159.0946) (width 0.254) (layer B.Cu) (net 93)) + (segment (start 227.434 159.0946) (end 227.434 160.1486) (width 0.254) (layer B.Cu) (net 93)) + (segment (start 237.2892 141.6828) (end 233.72682 145.24518) (width 0.254) (layer B.Cu) (net 93)) + (segment (start 230.620264 158.2944) (end 228.2342 158.2944) (width 0.254) (layer B.Cu) (net 93)) + (segment (start 222.2524 159.0946) (end 222.2524 160.1486) (width 0.254) (layer B.Cu) (net 94)) + (segment (start 232.818799 141.073201) (end 232.818799 154.811729) (width 0.254) (layer B.Cu) (net 94)) + (segment (start 237.2892 136.6028) (end 232.818799 141.073201) (width 0.254) (layer B.Cu) (net 94)) + (segment (start 232.818799 154.811729) (end 230.910928 156.7196) (width 0.254) (layer B.Cu) (net 94)) + (segment (start 230.910928 156.7196) (end 224.6274 156.7196) (width 0.254) (layer B.Cu) (net 94)) + (segment (start 224.6274 156.7196) (end 222.2524 159.0946) (width 0.254) (layer B.Cu) (net 94)) + (segment (start 196.6238 149.887) (end 201.7038 154.967) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 196.601579 149.864779) (end 196.6238 149.887) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 192.632443 149.864779) (end 196.601579 149.864779) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 184.993779 149.864779) (end 192.632441 149.864781) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 189.080002 138.203002) (end 183.237998 138.203002) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 182.476002 138.964998) (end 182.476002 147.347002) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 183.237998 138.203002) (end 182.476002 138.964998) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 182.476002 147.347002) (end 184.993779 149.864779) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 192.632441 149.864781) (end 192.632443 149.864779) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 190.985 140.108) (end 189.080002 138.203002) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 201.7038 171.731) (end 201.7038 154.967) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 185.2192 175.5664) (end 186.9718 177.319) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 203.7866 177.319) (end 205.5392 175.5664) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 195.3792 177.2682) (end 195.3792 175.5664) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 186.9718 177.319) (end 195.43 177.319) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 195.43 177.319) (end 195.3792 177.2682) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 195.43 177.319) (end 203.7866 177.319) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 202.9992 173.0264) (end 205.5392 175.5664) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 184.68899 150.321989) (end 194.518789 150.321989) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 182.018791 147.65179) (end 184.68899 150.321989) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 194.518789 150.321989) (end 199.1638 154.967) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 183.048617 137.745791) (end 182.018791 138.775617) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 193.702791 137.745791) (end 183.048617 137.745791) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 182.018791 138.775617) (end 182.018791 147.65179) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 196.065 140.108) (end 193.702791 137.745791) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 199.1638 168.7338) (end 199.1638 154.967) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 184.500933 150.776) (end 192.4328 150.776) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 181.56478 147.839847) (end 184.500933 150.776) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 181.56478 138.09822) (end 181.56478 147.839847) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 195.43 136.933) (end 182.73 136.933) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 192.4328 150.776) (end 193.3218 151.665) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 182.73 136.933) (end 181.56478 138.09822) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 193.3218 151.665) (end 196.6238 154.967) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 198.605 140.108) (end 195.43 136.933) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 196.6238 171.731) (end 196.6238 154.967) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 194.883799 151.830201) (end 197.335 149.379) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 194.0838 154.967) (end 194.883799 154.167001) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 194.883799 154.167001) (end 194.883799 151.830201) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 197.335 145.696) (end 197.335 149.379) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 195.3792 156.2624) (end 194.0838 154.967) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 195.3792 173.0264) (end 195.3792 156.2624) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 191.5438 154.967) (end 188.349778 151.772978) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 181.025011 148.244076) (end 181.025011 136.824429) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 188.349778 151.772978) (end 184.553913 151.772978) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 182.05944 135.79) (end 190.87568 135.79) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 184.553913 151.772978) (end 181.025011 148.244076) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 190.87568 135.79) (end 194.40384 132.26184) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 181.025011 136.824429) (end 182.05944 135.79) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 194.40384 132.26184) (end 194.40384 131.20784) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 191.5438 152.2492) (end 191.5438 154.967) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 194.92519 159.53581) (end 194.92519 158.34839) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 194.92519 158.34839) (end 191.5438 154.967) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 194.922 159.539) (end 194.92519 159.53581) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 194.922 162.236118) (end 194.922 159.539) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 192.8392 173.0264) (end 191.989201 172.176401) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 191.989201 165.168917) (end 194.922 162.236118) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 191.989201 172.176401) (end 191.989201 165.168917) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 184.365857 152.226989) (end 186.263789 152.226989) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 186.263789 152.226989) (end 188.203801 154.167001) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 189.3212 134.62668) (end 181.89688 134.62668) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 191.68604 132.26184) (end 189.3212 134.62668) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 191.68604 131.20784) (end 191.68604 132.26184) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 180.571 135.95256) (end 180.571 148.432132) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 188.203801 154.167001) (end 189.0038 154.967) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 180.571 148.432132) (end 184.365857 152.226989) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 181.89688 134.62668) (end 180.571 135.95256) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 189.0038 152.2492) (end 189.0038 154.967) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 189.0038 171.731) (end 189.0038 154.967) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 190.2992 173.0264) (end 189.0038 171.731) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 188.96824 131.20784) (end 188.96824 132.26184) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 187.42128 133.8088) (end 180.60148 133.8088) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 188.96824 132.26184) (end 187.42128 133.8088) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 180.60148 133.8088) (end 180.009011 134.401269) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 180.009011 134.401269) (end 180.063 148.49) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 180.063 148.5662) (end 180.063 148.49) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 186.4638 154.967) (end 180.063 148.5662) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 186.4638 152.0968) (end 186.4638 154.967) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 186.4638 171.731) (end 186.4638 154.967) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 179.555 150.5982) (end 183.9238 154.967) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 181.08408 131.20784) (end 179.555 132.73692) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 186.25044 131.20784) (end 181.08408 131.20784) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 179.555 132.73692) (end 179.555 150.5982) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 183.9238 152.2492) (end 183.9238 154.967) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 183.9238 171.731) (end 183.9238 154.967) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 207.16799 172.11519) (end 207.16799 157.75781) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 208.0792 173.0264) (end 207.16799 172.11519) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 186.578999 174.386199) (end 186.909201 174.716401) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 183.999829 174.386199) (end 186.578999 174.386199) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 186.909201 174.716401) (end 187.7592 175.5664) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 178.92 169.30637) (end 183.999829 174.386199) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 178.92 168.175) (end 178.92 169.30637) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 184.889 177.954) (end 195.5316 177.954) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 177.523 170.588) (end 184.889 177.954) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 177.523 167.032) (end 177.523 170.588) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 195.5316 177.954) (end 197.069201 176.416399) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 177.142 166.651) (end 177.523 167.032) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 197.069201 176.416399) (end 197.9192 175.5664) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 174.729 166.651) (end 177.142 166.651) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 173.205 168.175) (end 174.729 166.651) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 209.769201 176.416399) (end 210.6192 175.5664) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 207.323579 178.862021) (end 209.769201 176.416399) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 181.225021 178.862021) (end 207.323579 178.862021) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 169.6744 167.3114) (end 181.225021 178.862021) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 169.6744 105.9704) (end 169.6744 167.3114) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 242.57 167.6924) (end 239.401378 170.861022) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 226.709199 172.176401) (end 225.8592 173.0264) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 239.401378 170.861022) (end 228.024578 170.861022) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 228.024578 170.861022) (end 226.709199 172.176401) (width 0.254) (layer F.Cu) (net 45)) + (segment (start 211.8638 174.271) (end 212.309201 174.716401) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 207.581838 174.271) (end 211.8638 174.271) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 212.309201 174.716401) (end 213.1592 175.5664) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 206.716201 173.405363) (end 207.581838 174.271) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 206.716201 172.461439) (end 206.716201 173.405363) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 206.71398 172.459218) (end 206.716201 172.461439) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 206.71398 168.15598) (end 206.71398 172.459218) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 203.812 165.254) (end 206.71398 168.15598) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 207.229201 176.416399) (end 208.0792 175.5664) (width 0.254) (layer F.Cu) (net 95)) + (segment (start 205.237589 178.408011) (end 207.229201 176.416399) (width 0.254) (layer F.Cu) (net 95)) + (segment (start 184.700943 178.408011) (end 205.237589 178.408011) (width 0.254) (layer F.Cu) (net 95)) + (segment (start 175.999 169.706068) (end 184.700943 178.408011) (width 0.254) (layer F.Cu) (net 95)) + (segment (start 175.999 168.175) (end 175.999 169.706068) (width 0.254) (layer F.Cu) (net 95)) + (segment (start 191.476201 163.746799) (end 193.652 161.571) (width 0.254) (layer B.Cu) (net 96)) + (segment (start 191.476201 174.389399) (end 191.476201 163.746799) (width 0.254) (layer B.Cu) (net 96)) + (segment (start 190.2992 175.5664) (end 191.476201 174.389399) (width 0.254) (layer B.Cu) (net 96)) + +) diff --git a/hardware/interface-ascii/interface-ascii.lib b/hardware/interface-ascii/interface-ascii.lib new file mode 100644 index 0000000..bc33600 --- /dev/null +++ b/hardware/interface-ascii/interface-ascii.lib @@ -0,0 +1,78 @@ +EESchema-LIBRARY Version 2.4 +#encoding utf-8 +# +# 74LS166 +# +DEF 74LS166 U 0 40 Y Y 1 L N +F0 "U" -300 850 50 H V C CNN +F1 "74LS166" -300 -850 50 H V C CNN +F2 "" 0 0 50 H I C CNN +F3 "" 0 0 50 H I C CNN +$FPLIST + DIP?16* +$ENDFPLIST +DRAW +S -300 800 300 -800 1 1 10 f +X Ds 1 -500 700 200 R 50 50 1 0 I +X D3 10 500 200 200 L 50 50 1 0 I +X D2 11 500 100 200 L 50 50 1 0 I +X D1 12 500 0 200 L 50 50 1 0 I +X Qh 13 -500 200 200 R 50 50 1 0 O +X D0 14 500 -100 200 L 50 50 1 0 I +X SH_~LD 15 -500 50 200 R 50 50 1 0 I +X VCC 16 0 1000 200 D 50 50 1 0 W +X D7 2 500 600 200 L 50 50 1 0 I +X D6 3 500 500 200 L 50 50 1 0 I +X D5 4 500 400 200 L 50 50 1 0 I +X D4 5 500 300 200 L 50 50 1 0 I +X CK_INH 6 -500 -500 200 R 50 50 1 0 I +X CLK 7 -500 -100 200 R 50 50 1 0 I C +X GND 8 0 -1000 200 U 50 50 1 0 W +X Clr 9 -500 600 200 R 50 50 1 0 I I +ENDDRAW +ENDDEF +# +# ATmega328P-PU-MCU_Microchip_ATmega +# +DEF ATmega328P-PU-MCU_Microchip_ATmega U 0 20 Y Y 1 F N +F0 "U" -500 1450 50 H V L BNN +F1 "ATmega328P-PU-MCU_Microchip_ATmega" 100 -1450 50 H V L TNN +F2 "Package_DIP:DIP-28_W7.62mm" 0 0 50 H I C CIN +F3 "" 0 0 50 H I C CNN +$FPLIST + DIP*W7.62mm* +$ENDFPLIST +DRAW +S -500 -1400 500 1400 0 1 10 f +X ~RESET 1 600 -300 100 L 50 50 1 1 T +X PB7 10 600 500 100 L 50 50 1 1 T +X PD5 11 600 -1000 100 L 50 50 1 1 T +X PD6 12 600 -1100 100 L 50 50 1 1 T +X PD7 13 600 -1200 100 L 50 50 1 1 T +X PB0 14 600 1200 100 L 50 50 1 1 T +X PB1 15 600 1100 100 L 50 50 1 1 T +X PB2 16 600 1000 100 L 50 50 1 1 T +X MOSI 17 600 900 100 L 50 50 1 1 T +X MISO 18 600 800 100 L 50 50 1 1 T +X SCK 19 600 700 100 L 50 50 1 1 T +X PD0 2 600 -500 100 L 50 50 1 1 T +X AVCC 20 100 1500 100 D 50 50 1 1 W +X AREF 21 -600 1200 100 R 50 50 1 1 P +X GND 22 0 -1500 100 U 50 50 1 1 P N +X PC0 23 600 300 100 L 50 50 1 1 T +X PC1 24 600 200 100 L 50 50 1 1 T +X PC2 25 600 100 100 L 50 50 1 1 T +X PC3 26 600 0 100 L 50 50 1 1 T +X PC4 27 600 -100 100 L 50 50 1 1 T +X PC5 28 600 -200 100 L 50 50 1 1 T +X PD1 3 600 -600 100 L 50 50 1 1 T +X PD2 4 600 -700 100 L 50 50 1 1 T +X PD3 5 600 -800 100 L 50 50 1 1 T +X PD4 6 600 -900 100 L 50 50 1 1 T +X VCC 7 0 1500 100 D 50 50 1 1 W +X GND 8 0 -1500 100 U 50 50 1 1 W +X PB6 9 600 600 100 L 50 50 1 1 T +ENDDRAW +ENDDEF +# +#End Library diff --git a/hardware/interface-ascii/interface-ascii.pro b/hardware/interface-ascii/interface-ascii.pro new file mode 100644 index 0000000..dad1f71 --- /dev/null +++ b/hardware/interface-ascii/interface-ascii.pro @@ -0,0 +1,281 @@ +update=Saturday, November 23, 2019 at 09:32:10 AM +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +[pcbnew] +version=1 +PageLayoutDescrFile= +LastNetListRead=unikbd.net +CopperLayerCount=2 +BoardThickness=1.6 +AllowMicroVias=0 +AllowBlindVias=0 +RequireCourtyardDefinitions=0 +ProhibitOverlappingCourtyards=1 +MinTrackWidth=0.2 +MinViaDiameter=0.4 +MinViaDrill=0.3 +MinMicroViaDiameter=0.2 +MinMicroViaDrill=0.09999999999999999 +MinHoleToHole=0.25 +TrackWidth1=0.254 +TrackWidth2=0.254 +TrackWidth3=0.508 +TrackWidth4=1.27 +ViaDiameter1=0.8128 +ViaDrill1=0.4064 +ViaDiameter2=1.27 +ViaDrill2=0.7112 +dPairWidth1=0.2032 +dPairGap1=0.254 +dPairViaGap1=0.25 +SilkLineWidth=0.15 +SilkTextSizeV=1 +SilkTextSizeH=1 +SilkTextSizeThickness=0.15 +SilkTextItalic=0 +SilkTextUpright=1 +CopperLineWidth=0.2 +CopperTextSizeV=1.5 +CopperTextSizeH=1.5 +CopperTextThickness=0.3 +CopperTextItalic=0 +CopperTextUpright=1 +EdgeCutLineWidth=0.09999999999999999 +CourtyardLineWidth=0.05 +OthersLineWidth=0.15 +OthersTextSizeV=1 +OthersTextSizeH=1 +OthersTextSizeThickness=0.15 +OthersTextItalic=0 +OthersTextUpright=1 +SolderMaskClearance=0 +SolderMaskMinWidth=0 +SolderPasteClearance=0 +SolderPasteRatio=-0 +[pcbnew/Layer.F.Cu] +Name=F.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.In1.Cu] +Name=In1.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In2.Cu] +Name=In2.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In3.Cu] +Name=In3.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In4.Cu] +Name=In4.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In5.Cu] +Name=In5.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In6.Cu] +Name=In6.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In7.Cu] +Name=In7.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In8.Cu] +Name=In8.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In9.Cu] +Name=In9.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In10.Cu] +Name=In10.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In11.Cu] +Name=In11.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In12.Cu] +Name=In12.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In13.Cu] +Name=In13.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In14.Cu] +Name=In14.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In15.Cu] +Name=In15.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In16.Cu] +Name=In16.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In17.Cu] +Name=In17.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In18.Cu] +Name=In18.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In19.Cu] +Name=In19.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In20.Cu] +Name=In20.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In21.Cu] +Name=In21.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In22.Cu] +Name=In22.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In23.Cu] +Name=In23.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In24.Cu] +Name=In24.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In25.Cu] +Name=In25.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In26.Cu] +Name=In26.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In27.Cu] +Name=In27.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In28.Cu] +Name=In28.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In29.Cu] +Name=In29.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In30.Cu] +Name=In30.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.B.Cu] +Name=B.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.B.Adhes] +Enabled=1 +[pcbnew/Layer.F.Adhes] +Enabled=1 +[pcbnew/Layer.B.Paste] +Enabled=1 +[pcbnew/Layer.F.Paste] +Enabled=1 +[pcbnew/Layer.B.SilkS] +Enabled=1 +[pcbnew/Layer.F.SilkS] +Enabled=1 +[pcbnew/Layer.B.Mask] +Enabled=1 +[pcbnew/Layer.F.Mask] +Enabled=1 +[pcbnew/Layer.Dwgs.User] +Enabled=1 +[pcbnew/Layer.Cmts.User] +Enabled=1 +[pcbnew/Layer.Eco1.User] +Enabled=1 +[pcbnew/Layer.Eco2.User] +Enabled=1 +[pcbnew/Layer.Edge.Cuts] +Enabled=1 +[pcbnew/Layer.Margin] +Enabled=1 +[pcbnew/Layer.B.CrtYd] +Enabled=1 +[pcbnew/Layer.F.CrtYd] +Enabled=1 +[pcbnew/Layer.B.Fab] +Enabled=1 +[pcbnew/Layer.F.Fab] +Enabled=1 +[pcbnew/Layer.Rescue] +Enabled=0 +[pcbnew/Netclasses] +[pcbnew/Netclasses/Default] +Name=Default +Clearance=0.2 +TrackWidth=0.254 +ViaDiameter=0.8128 +ViaDrill=0.4064 +uViaDiameter=0.3048 +uViaDrill=0.1016 +dPairWidth=0.2032 +dPairGap=0.254 +dPairViaGap=0.25 +[pcbnew/Netclasses/1] +Name=power1 +Clearance=0.254 +TrackWidth=1.27 +ViaDiameter=1.27 +ViaDrill=0.7112 +uViaDiameter=0.3048 +uViaDrill=0.1016 +dPairWidth=0.2032 +dPairGap=0.254 +dPairViaGap=0.25 +[pcbnew/Netclasses/2] +Name=signal +Clearance=0.2032 +TrackWidth=0.254 +ViaDiameter=0.8128 +ViaDrill=0.4064 +uViaDiameter=0.3048 +uViaDrill=0.1016 +dPairWidth=0.2032 +dPairGap=0.254 +dPairViaGap=0.25 +[schematic_editor] +version=1 +PageLayoutDescrFile= +PlotDirectoryName= +SubpartIdSeparator=0 +SubpartFirstId=65 +NetFmtName= +SpiceAjustPassiveValues=0 +LabSize=50 +ERC_WriteFile=0 +ERC_TestSimilarLabels=1 +ERC_CheckUniqueGlobalLabels=1 +ERC_CheckBusDriverConflicts=1 +ERC_CheckBusEntryConflicts=1 +ERC_CheckBusToBusConflicts=1 +ERC_CheckBusToNetConflicts=1 diff --git a/hardware/interface-ascii/interface-ascii.sch b/hardware/interface-ascii/interface-ascii.sch new file mode 100644 index 0000000..b3ed476 --- /dev/null +++ b/hardware/interface-ascii/interface-ascii.sch @@ -0,0 +1,1853 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr USLetter 11000 8500 +encoding utf-8 +Sheet 1 1 +Title "ASCII Interface for Universal Retro Keyboard" +Date "2019-08-25" +Rev "2.2" +Comp "OSIWeb.org" +Comment1 "Main Keyboard Interface" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L Connector_Generic:Conn_01x16 J1 +U 1 1 5BCB9E1D +P 950 5225 +F 0 "J1" H 960 6035 50 0000 C CNN +F 1 "Apple 1" H 1165 5200 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm_Socket" H 950 5225 50 0001 C CNN +F 3 "~" H 950 5225 50 0001 C CNN + 1 950 5225 + -1 0 0 -1 +$EndComp +Text Label 8050 2350 0 50 ~ 0 +Row4 +Text Label 8050 2250 0 50 ~ 0 +Row5 +Text Label 8050 2150 0 50 ~ 0 +Row6 +Text Label 8050 2050 0 50 ~ 0 +Row7 +$Comp +L power:+5V #PWR04 +U 1 1 5BFDC5C3 +P 4110 7175 +F 0 "#PWR04" H 4110 7025 50 0001 C CNN +F 1 "+5V" H 4125 7348 50 0000 C CNN +F 2 "" H 4110 7175 50 0001 C CNN +F 3 "" H 4110 7175 50 0001 C CNN + 1 4110 7175 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR05 +U 1 1 5BFDC5C9 +P 4110 7775 +F 0 "#PWR05" H 4110 7525 50 0001 C CNN +F 1 "GND" H 4115 7602 50 0000 C CNN +F 2 "" H 4110 7775 50 0001 C CNN +F 3 "" H 4110 7775 50 0001 C CNN + 1 4110 7775 + 1 0 0 -1 +$EndComp +$Comp +L Device:C C1 +U 1 1 5BFE9C80 +P 4360 7475 +F 0 "C1" H 4365 7555 50 0000 L CNN +F 1 "0.1 uF" H 4370 7395 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm" H 4398 7325 50 0001 C CNN +F 3 "~" H 4360 7475 50 0001 C CNN + 1 4360 7475 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4110 7325 4360 7325 +Wire Wire Line + 4110 7175 4110 7325 +Wire Wire Line + 4110 7625 4360 7625 +Wire Wire Line + 4110 7625 4110 7775 +Connection ~ 4360 7625 +Wire Wire Line + 4360 7625 4760 7625 +Text Label 8050 2450 0 50 ~ 0 +Row3 +Text Label 8050 2550 0 50 ~ 0 +Row2 +Text Label 8050 2650 0 50 ~ 0 +Row1 +Text Label 8050 2750 0 50 ~ 0 +Row0 +Text Label 8050 1250 0 50 ~ 0 +Col7 +Text Label 8050 1350 0 50 ~ 0 +Col6 +Text Label 8050 1450 0 50 ~ 0 +Col5 +Text Label 8050 1550 0 50 ~ 0 +Col4 +Text Label 8050 1650 0 50 ~ 0 +Col3 +Text Label 8050 1750 0 50 ~ 0 +Col2 +Text Label 8050 1850 0 50 ~ 0 +Col1 +Text Label 8050 1950 0 50 ~ 0 +Col0 +$Comp +L Device:R_Network08_US RN1 +U 1 1 5C0319BC +P 6930 1615 +F 0 "RN1" H 7310 1661 50 0000 L CNN +F 1 "4.7k" H 7310 1570 50 0000 L CNN +F 2 "Resistor_THT:R_Array_SIP9" V 7405 1615 50 0001 C CNN +F 3 "http://www.vishay.com/docs/31509/csc.pdf" H 6930 1615 50 0001 C CNN + 1 6930 1615 + 1 0 0 -1 +$EndComp +Text Label 4005 5750 0 50 ~ 0 +D7 +Text Label 4790 5050 0 50 ~ 0 +D0 +Text Label 4790 5150 0 50 ~ 0 +D1 +Text Label 4000 5650 0 50 ~ 0 +D6 +Text Label 4000 5550 0 50 ~ 0 +D5 +Text Label 4000 5250 0 50 ~ 0 +D2 +Text Label 4000 5350 0 50 ~ 0 +D3 +Text Label 4000 5450 0 50 ~ 0 +D4 +$Comp +L power:GND #PWR08 +U 1 1 5D940623 +P 3300 6150 +F 0 "#PWR08" H 3300 5900 50 0001 C CNN +F 1 "GND" H 3305 5977 50 0000 C CNN +F 2 "" H 3300 6150 50 0001 C CNN +F 3 "" H 3300 6150 50 0001 C CNN + 1 3300 6150 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR07 +U 1 1 5D9413FE +P 3300 2800 +F 0 "#PWR07" H 3300 2650 50 0001 C CNN +F 1 "+5V" H 3315 2973 50 0000 C CNN +F 2 "" H 3300 2800 50 0001 C CNN +F 3 "" H 3300 2800 50 0001 C CNN + 1 3300 2800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3300 2800 3300 2905 +Wire Wire Line + 3400 2950 3300 2950 +Connection ~ 3300 2950 +$Comp +L Connector_Generic:Conn_01x16 J2 +U 1 1 5D9AB54A +P 950 3225 +F 0 "J2" H 950 4035 50 0000 C CNN +F 1 "Apple 2" H 1175 3180 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm_Socket" H 950 3225 50 0001 C CNN +F 3 "~" H 950 3225 50 0001 C CNN + 1 950 3225 + -1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR02 +U 1 1 5D9B2C3F +P 1625 2275 +F 0 "#PWR02" H 1625 2125 50 0001 C CNN +F 1 "+5V" H 1640 2448 50 0000 C CNN +F 2 "" H 1625 2275 50 0001 C CNN +F 3 "" H 1625 2275 50 0001 C CNN + 1 1625 2275 + 1 0 0 -1 +$EndComp +Text Label 1250 5925 0 50 ~ 0 +D7 +Text Label 1250 3625 0 50 ~ 0 +D0 +Text Label 1250 5825 0 50 ~ 0 +~STROBE +Text Label 1250 3525 0 50 ~ 0 +D3 +Text Label 1250 4925 0 50 ~ 0 +D0 +Text Label 1250 4525 0 50 ~ 0 +~SYS_RESET +Text Label 1250 3425 0 50 ~ 0 +D2 +Text Label 1250 2625 0 50 ~ 0 +~STROBE +Text Label 1250 5625 0 50 ~ 0 +ClrScr +Text Label 1250 2725 0 50 ~ 0 +~SYS_RESET +Text Label 1250 4625 0 50 ~ 0 +D3 +Text Label 1250 5225 0 50 ~ 0 +D6 +Text Label 1250 5125 0 50 ~ 0 +D5 +Text Label 1250 3025 0 50 ~ 0 +D4 +Text Label 1250 2925 0 50 ~ 0 +D5 +Text Label 1250 5025 0 50 ~ 0 +D4 +Text Label 1250 3725 0 50 ~ 0 +D1 +Text Label 1250 4825 0 50 ~ 0 +D1 +Text Label 1250 3125 0 50 ~ 0 +D6 +Text Label 1250 4725 0 50 ~ 0 +D2 +$Comp +L power:GND #PWR01 +U 1 1 5D9B49EE +P 1600 6200 +F 0 "#PWR01" H 1600 5950 50 0001 C CNN +F 1 "GND" H 1605 6027 50 0000 C CNN +F 2 "" H 1600 6200 50 0001 C CNN +F 3 "" H 1600 6200 50 0001 C CNN + 1 1600 6200 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1150 2625 1875 2625 +Wire Wire Line + 1875 2725 1150 2725 +Wire Wire Line + 1150 2925 1875 2925 +Wire Wire Line + 1150 3025 1875 3025 +Wire Wire Line + 1150 3125 1875 3125 +Wire Wire Line + 1150 3425 1875 3425 +Wire Wire Line + 1875 3525 1150 3525 +Wire Wire Line + 1150 3625 1875 3625 +Wire Wire Line + 1875 3725 1150 3725 +Wire Wire Line + 1150 4525 1875 4525 +Wire Wire Line + 1875 4625 1150 4625 +Wire Wire Line + 1150 4725 1875 4725 +Wire Wire Line + 1875 4825 1150 4825 +Wire Wire Line + 1150 4925 1875 4925 +Wire Wire Line + 1875 5025 1150 5025 +Wire Wire Line + 1150 5125 1875 5125 +Wire Wire Line + 1150 5225 1875 5225 +Wire Wire Line + 1150 5425 1875 5425 +Wire Wire Line + 1150 5525 1875 5525 +Wire Wire Line + 1875 5625 1150 5625 +Wire Wire Line + 1150 5725 1875 5725 +Wire Wire Line + 1875 5825 1150 5825 +Wire Wire Line + 1150 5925 1875 5925 +Wire Wire Line + 1150 6025 1650 6025 +Wire Wire Line + 1650 6025 1650 4375 +$Comp +L power:+5V #PWR06 +U 1 1 5D9BA9BB +P 1650 4375 +F 0 "#PWR06" H 1650 4225 50 0001 C CNN +F 1 "+5V" H 1665 4548 50 0000 C CNN +F 2 "" H 1650 4375 50 0001 C CNN +F 3 "" H 1650 4375 50 0001 C CNN + 1 1650 4375 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR03 +U 1 1 5D9BB5DB +P 1650 3925 +F 0 "#PWR03" H 1650 3675 50 0001 C CNN +F 1 "GND" H 1655 3752 50 0000 C CNN +F 2 "" H 1650 3925 50 0001 C CNN +F 3 "" H 1650 3925 50 0001 C CNN + 1 1650 3925 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1150 3225 1650 3225 +Wire Wire Line + 1650 3225 1650 3925 +Wire Wire Line + 1150 2525 1625 2525 +Wire Wire Line + 1625 2525 1625 2275 +Wire Wire Line + 1150 5325 1600 5325 +Wire Wire Line + 1600 5325 1600 6200 +Text Label 9748 1250 0 50 ~ 0 +Col0 +Text Label 9750 1350 0 50 ~ 0 +Row0 +$Comp +L Diode:1N4148 D1 +U 1 1 5D9CCE74 +P 9350 1350 +F 0 "D1" H 9444 1319 50 0000 C CNN +F 1 "1N4148" H 9152 1391 40 0000 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9350 1175 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9350 1350 50 0001 C CNN + 1 9350 1350 + -1 0 0 1 +$EndComp +$Comp +L Connector_Generic:Conn_02x20_Odd_Even J4 +U 1 1 5D1EDC84 +P 8760 2150 +F 0 "J4" H 8795 3175 50 0000 C CNN +F 1 "Keyboard" H 8800 1050 50 0000 C CNN +F 2 "unikbd:PinHeader_2x20_P2.54mm_Vertical" H 8760 2150 50 0001 C CNN +F 3 "~" H 8760 2150 50 0001 C CNN + 1 8760 2150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 7900 1450 8560 1450 +Wire Wire Line + 7900 1350 8560 1350 +Wire Wire Line + 7900 1250 8560 1250 +Wire Wire Line + 7900 2650 8560 2650 +Wire Wire Line + 7900 2550 8560 2550 +Wire Wire Line + 7900 2450 8560 2450 +Wire Wire Line + 7900 2250 8560 2250 +Wire Wire Line + 7900 2150 8560 2150 +Wire Wire Line + 7900 2050 8560 2050 +Wire Wire Line + 7900 1950 8560 1950 +Wire Wire Line + 7900 1850 8560 1850 +Wire Wire Line + 7900 1650 8560 1650 +Wire Wire Line + 7900 1550 8560 1550 +Wire Wire Line + 7900 1750 8560 1750 +$Comp +L power:GND #PWR0101 +U 1 1 5D9E86E0 +P 6460 6550 +F 0 "#PWR0101" H 6460 6300 50 0001 C CNN +F 1 "GND" H 6320 6505 50 0000 C CNN +F 2 "" H 6460 6550 50 0001 C CNN +F 3 "" H 6460 6550 50 0001 C CNN + 1 6460 6550 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5860 6510 6460 6510 +Wire Wire Line + 2620 3350 2620 2905 +Wire Wire Line + 2620 2905 3300 2905 +Connection ~ 3300 2905 +Wire Wire Line + 3300 2905 3300 2950 +Text Label 6800 6715 0 50 ~ 0 +CAPS_LED +Wire Wire Line + 5480 6715 7700 6715 +Entry Wire Line + 7700 6715 7800 6615 +Text Label 9770 2050 0 50 ~ 0 +Col0 +Entry Wire Line + 9975 1350 10075 1450 +Text Label 9770 2150 0 50 ~ 0 +Row1 +$Comp +L Device:C C2 +U 1 1 5BFE9D13 +P 4760 7475 +F 0 "C2" H 4765 7555 50 0000 L CNN +F 1 "0.1 uF" H 4775 7390 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm" H 4798 7325 50 0001 C CNN +F 3 "~" H 4760 7475 50 0001 C CNN + 1 4760 7475 + 1 0 0 -1 +$EndComp +Connection ~ 4360 7325 +Wire Wire Line + 4360 7325 4760 7325 +Text Label 3995 4750 0 50 ~ 0 +ClrScr +$Comp +L Connector_Generic:Conn_01x04 J3 +U 1 1 5DA5BF6E +P 1000 1595 +F 0 "J3" H 918 1170 50 0000 C CNN +F 1 "Reset/Clr" H 918 1261 50 0000 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal" H 1000 1595 50 0001 C CNN +F 3 "~" H 1000 1595 50 0001 C CNN + 1 1000 1595 + -1 0 0 1 +$EndComp +Entry Wire Line + 1875 5925 1975 6025 +Entry Wire Line + 1875 5825 1975 5925 +Entry Wire Line + 1875 5725 1975 5825 +Entry Wire Line + 1875 5625 1975 5725 +Entry Wire Line + 1875 5525 1975 5625 +Entry Wire Line + 1875 5425 1975 5525 +Entry Wire Line + 1875 5225 1975 5325 +Entry Wire Line + 1875 5125 1975 5225 +Entry Wire Line + 1875 5025 1975 5125 +Entry Wire Line + 1875 4925 1975 5025 +Entry Wire Line + 1875 4825 1975 4925 +Entry Wire Line + 1875 4725 1975 4825 +Entry Wire Line + 1875 4625 1975 4725 +Entry Wire Line + 1875 4525 1975 4625 +Entry Wire Line + 1875 3725 1975 3825 +Entry Wire Line + 1875 3625 1975 3725 +Entry Wire Line + 1875 3525 1975 3625 +Entry Wire Line + 1875 3425 1975 3525 +Entry Wire Line + 1875 3125 1975 3225 +Entry Wire Line + 1875 3025 1975 3125 +Entry Wire Line + 1875 2925 1975 3025 +Entry Wire Line + 1875 2725 1975 2825 +Entry Wire Line + 1875 2625 1975 2725 +Entry Wire Line + 1875 1395 1975 1495 +Wire Wire Line + 1200 1395 1875 1395 +Entry Wire Line + 1875 1595 1975 1695 +Wire Wire Line + 1875 1595 1200 1595 +$Comp +L power:GND #PWR0104 +U 1 1 5DA63BB6 +P 1500 1755 +F 0 "#PWR0104" H 1500 1505 50 0001 C CNN +F 1 "GND" H 1505 1582 50 0000 C CNN +F 2 "" H 1500 1755 50 0001 C CNN +F 3 "" H 1500 1755 50 0001 C CNN + 1 1500 1755 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1200 1695 1500 1695 +Wire Wire Line + 1500 1695 1500 1755 +$Comp +L power:+5V #PWR0105 +U 1 1 5DA62A28 +P 1325 1305 +F 0 "#PWR0105" H 1325 1155 50 0001 C CNN +F 1 "+5V" H 1340 1478 50 0000 C CNN +F 2 "" H 1325 1305 50 0001 C CNN +F 3 "" H 1325 1305 50 0001 C CNN + 1 1325 1305 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1325 1495 1325 1305 +Wire Wire Line + 1200 1495 1325 1495 +Text Label 1410 1595 0 50 ~ 0 +~SYS_RESET +Text Label 1415 1395 0 50 ~ 0 +ClrScr +Wire Wire Line + 3900 3650 4555 3650 +Wire Wire Line + 3300 2950 3300 3050 +Wire Wire Line + 3400 3050 3400 2950 +Wire Wire Line + 3300 6050 3300 6150 +Wire Wire Line + 3900 5750 5100 5750 +Wire Wire Line + 5100 5650 3900 5650 +Wire Wire Line + 3900 5550 5100 5550 +Wire Wire Line + 5100 5450 3900 5450 +Wire Wire Line + 3900 5350 5100 5350 +Wire Wire Line + 5100 5250 3900 5250 +Wire Wire Line + 3900 4750 5100 4750 +Wire Wire Line + 2700 3350 2620 3350 +Wire Wire Line + 4555 1655 4555 3650 +Wire Wire Line + 3900 3850 4335 3850 +Wire Wire Line + 4190 1355 4190 3750 +Wire Wire Line + 3900 3750 4190 3750 +Wire Wire Line + 4335 3850 4335 1555 +Wire Wire Line + 4715 4850 3900 4850 +Wire Wire Line + 4715 1755 4715 4850 +$Comp +L power:+5V #PWR0106 +U 1 1 5DA61D1D +P 3415 1270 +F 0 "#PWR0106" H 3415 1120 50 0001 C CNN +F 1 "+5V" H 3430 1443 50 0000 C CNN +F 2 "" H 3415 1270 50 0001 C CNN +F 3 "" H 3415 1270 50 0001 C CNN + 1 3415 1270 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6460 6550 6460 6510 +Connection ~ 6460 6510 +Wire Wire Line + 6460 6510 6460 6370 +Wire Wire Line + 5480 4650 5480 6715 +Wire Wire Line + 3900 4650 5480 4650 +Wire Bus Line + 5200 6425 1975 6425 +Entry Wire Line + 5100 4750 5200 4850 +Entry Wire Line + 5100 5750 5200 5850 +Entry Wire Line + 5100 5650 5200 5750 +Entry Wire Line + 5100 5550 5200 5650 +Entry Wire Line + 5100 5450 5200 5550 +Entry Wire Line + 5100 5350 5200 5450 +Entry Wire Line + 5100 5250 5200 5350 +Entry Wire Line + 5100 5150 5200 5250 +Entry Wire Line + 5100 5050 5200 5150 +Wire Wire Line + 3000 1355 4190 1355 +Wire Wire Line + 3000 1455 3415 1455 +Wire Wire Line + 3415 1455 3415 1270 +Wire Wire Line + 3000 1555 4335 1555 +Wire Wire Line + 3000 1655 4555 1655 +Wire Wire Line + 3000 1755 4715 1755 +$Comp +L power:GND #PWR0107 +U 1 1 5DA62401 +P 3330 2050 +F 0 "#PWR0107" H 3330 1800 50 0001 C CNN +F 1 "GND" H 3250 1915 50 0000 C CNN +F 2 "" H 3330 2050 50 0001 C CNN +F 3 "" H 3330 2050 50 0001 C CNN + 1 3330 2050 + 1 0 0 -1 +$EndComp +$Comp +L Connector_Generic:Conn_01x06 J5 +U 1 1 5DA566B2 +P 2800 1555 +F 0 "J5" H 2880 1547 50 0000 L CNN +F 1 "ISP header" H 2880 1456 50 0000 L CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Horizontal" H 2800 1555 50 0001 C CNN +F 3 "~" H 2800 1555 50 0001 C CNN + 1 2800 1555 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3330 1855 3000 1855 +Wire Wire Line + 3330 2050 3330 1855 +$Comp +L power:+5V #PWR013 +U 1 1 5C031A36 +P 6530 1160 +F 0 "#PWR013" H 6530 1010 50 0001 C CNN +F 1 "+5V" H 6545 1333 50 0000 C CNN +F 2 "" H 6530 1160 50 0001 C CNN +F 3 "" H 6530 1160 50 0001 C CNN + 1 6530 1160 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6530 1160 6530 1415 +Wire Wire Line + 3900 3450 4935 3450 +Wire Wire Line + 3900 3550 5030 3550 +$Comp +L power:GND #PWR010 +U 1 1 5DD5DF24 +P 5655 3755 +F 0 "#PWR010" H 5655 3505 50 0001 C CNN +F 1 "GND" H 5575 3620 50 0000 C CNN +F 2 "" H 5655 3755 50 0001 C CNN +F 3 "" H 5655 3755 50 0001 C CNN + 1 5655 3755 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR09 +U 1 1 5DD5EF16 +P 5655 1450 +F 0 "#PWR09" H 5655 1300 50 0001 C CNN +F 1 "+5V" H 5670 1623 50 0000 C CNN +F 2 "" H 5655 1450 50 0001 C CNN +F 3 "" H 5655 1450 50 0001 C CNN + 1 5655 1450 + 1 0 0 -1 +$EndComp +Connection ~ 5655 1575 +Wire Wire Line + 5655 1575 5655 1450 +$Comp +L interface-ascii:74LS166 U3 +U 1 1 5DD565C9 +P 5655 2610 +F 0 "U3" H 5400 3470 50 0000 C CNN +F 1 "74LS166" H 5845 3465 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm" H 5655 2610 50 0001 C CNN +F 3 "" H 5655 2610 50 0001 C CNN + 1 5655 2610 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5655 1610 5655 1575 +Wire Wire Line + 5655 3610 5655 3640 +Wire Wire Line + 3900 3350 4845 3350 +Wire Wire Line + 4845 3350 4845 2410 +Wire Wire Line + 4845 2410 5155 2410 +Wire Wire Line + 4935 2560 5155 2560 +Wire Wire Line + 4935 2560 4935 3450 +Wire Wire Line + 5030 2710 5155 2710 +Wire Wire Line + 5030 2710 5030 3550 +Wire Wire Line + 5155 3110 5155 3640 +Wire Wire Line + 5155 3640 5655 3640 +Connection ~ 5655 3640 +Wire Wire Line + 5655 3640 5655 3755 +Wire Wire Line + 5155 1910 5055 1910 +Wire Wire Line + 5055 1910 5055 1575 +Wire Wire Line + 5155 2010 5055 2010 +Wire Wire Line + 5055 2010 5055 1915 +Wire Wire Line + 5055 1575 5655 1575 +Entry Wire Line + 5100 4050 5200 4150 +Entry Wire Line + 5100 3950 5200 4050 +Wire Wire Line + 3900 3950 5100 3950 +Wire Wire Line + 5100 4050 3900 4050 +Text Label 4010 3950 0 50 ~ 0 +~STROBE +Text Label 4005 4050 0 50 ~ 0 +~SYS_RESET +$Comp +L Device:C C3 +U 1 1 5DD6A5C6 +P 5180 7475 +F 0 "C3" H 5185 7555 50 0000 L CNN +F 1 "0.1 uF" H 5195 7390 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm" H 5218 7325 50 0001 C CNN +F 3 "~" H 5180 7475 50 0001 C CNN + 1 5180 7475 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4760 7325 5180 7325 +Connection ~ 4760 7325 +Wire Wire Line + 5180 7625 4760 7625 +Connection ~ 4760 7625 +Entry Wire Line + 7800 5670 7700 5770 +Entry Wire Line + 7800 5370 7700 5470 +Entry Wire Line + 7800 5870 7700 5970 +Entry Wire Line + 7800 5470 7700 5570 +Entry Wire Line + 7800 5770 7700 5870 +Entry Wire Line + 7800 5270 7700 5370 +Entry Wire Line + 7800 5570 7700 5670 +Entry Wire Line + 7800 5970 7700 6070 +Text Label 7610 5770 2 50 ~ 0 +Row12 +Text Label 7610 5870 2 50 ~ 0 +Row13 +Text Label 7610 5970 2 50 ~ 0 +Row14 +Text Label 7610 6070 2 50 ~ 0 +Row15 +Text Label 7610 5670 2 50 ~ 0 +Row11 +Text Label 7615 5570 2 50 ~ 0 +Row10 +Text Label 7570 5470 2 50 ~ 0 +Row9 +Text Label 7570 5370 2 50 ~ 0 +Row8 +$Comp +L interface-ascii:ATmega328P-PU-MCU_Microchip_ATmega U1 +U 1 1 5DD17F64 +P 3300 4550 +F 0 "U1" H 2980 6025 50 0000 R CNN +F 1 "ATmega328P" H 3975 3055 50 0000 R CNN +F 2 "Package_DIP:DIP-28_W7.62mm" H 3300 4550 50 0001 C CIN +F 3 "" H 3300 4550 50 0001 C CNN + 1 3300 4550 + 1 0 0 -1 +$EndComp +Text Label 9165 2850 0 50 ~ 0 +Row8 +Text Label 9165 2950 0 50 ~ 0 +Row9 +Text Label 9165 3050 0 50 ~ 0 +Row10 +Entry Wire Line + 9975 2050 10075 2150 +Entry Wire Line + 9975 3150 10075 3250 +Entry Wire Line + 9975 1650 10075 1750 +Entry Wire Line + 9975 2850 10075 2950 +Entry Wire Line + 9975 2950 10075 3050 +Entry Wire Line + 9975 3050 10075 3150 +Wire Wire Line + 7900 2750 8560 2750 +Text Label 9165 3150 0 50 ~ 0 +Row11 +Text Label 8050 3150 0 50 ~ 0 +Row12 +Text Label 8050 2950 0 50 ~ 0 +Row14 +Text Label 8050 3050 0 50 ~ 0 +Row13 +Text Label 8050 2850 0 50 ~ 0 +Row15 +Text Label 3115 1355 0 50 ~ 0 +MISO +Text Label 3120 1555 0 50 ~ 0 +SCK +Text Label 3120 1655 0 50 ~ 0 +MOSI +Text Label 3120 1755 0 50 ~ 0 +~RESET +Wire Wire Line + 4760 5150 5100 5150 +Wire Wire Line + 5100 5050 4760 5050 +Wire Wire Line + 4460 5050 4210 5050 +Wire Wire Line + 3900 5150 4310 5150 +$Comp +L Device:R_US R1 +U 1 1 5DD9ECD2 +P 4610 5050 +F 0 "R1" V 4570 4850 50 0000 C CNN +F 1 "220" V 4520 5050 50 0000 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 4650 5040 50 0001 C CNN +F 3 "~" H 4610 5050 50 0001 C CNN + 1 4610 5050 + 0 1 1 0 +$EndComp +$Comp +L Device:R_US R2 +U 1 1 5DDA0995 +P 4610 5150 +F 0 "R2" V 4570 4950 50 0000 C CNN +F 1 "R_US" V 4496 5150 50 0001 C CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 4650 5140 50 0001 C CNN +F 3 "~" H 4610 5150 50 0001 C CNN + 1 4610 5150 + 0 1 1 0 +$EndComp +Wire Wire Line + 4210 5050 4210 6800 +Wire Wire Line + 4210 6800 1150 6800 +Connection ~ 4210 5050 +Wire Wire Line + 4210 5050 3900 5050 +Wire Wire Line + 4310 5150 4310 6900 +Wire Wire Line + 4310 6900 1150 6900 +Connection ~ 4310 5150 +Wire Wire Line + 4310 5150 4460 5150 +$Comp +L power:GND #PWR0108 +U 1 1 5DDAEC22 +P 1200 7200 +F 0 "#PWR0108" H 1200 6950 50 0001 C CNN +F 1 "GND" H 1205 7027 50 0000 C CNN +F 2 "" H 1200 7200 50 0001 C CNN +F 3 "" H 1200 7200 50 0001 C CNN + 1 1200 7200 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1200 7200 1200 7000 +Wire Wire Line + 1200 7000 1150 7000 +Text Label 1230 6800 0 50 ~ 0 +Rx +Text Label 1240 6900 0 50 ~ 0 +Tx +Wire Wire Line + 5860 6070 5860 6510 +Text Label 7550 3480 2 50 ~ 0 +Col7 +Text Label 7550 2780 2 50 ~ 0 +Col0 +Text Label 7550 2880 2 50 ~ 0 +Col1 +Text Label 7550 2980 2 50 ~ 0 +Col2 +Text Label 7550 3080 2 50 ~ 0 +Col3 +Text Label 7550 3180 2 50 ~ 0 +Col4 +Text Label 7550 3280 2 50 ~ 0 +Col5 +Text Label 7550 3380 2 50 ~ 0 +Col6 +Entry Wire Line + 7800 3280 7700 3380 +Entry Wire Line + 7800 3180 7700 3280 +Entry Wire Line + 7800 3080 7700 3180 +Entry Wire Line + 7800 2980 7700 3080 +Entry Wire Line + 7800 2880 7700 2980 +Entry Wire Line + 7800 2780 7700 2880 +Entry Wire Line + 7800 2680 7700 2780 +Entry Wire Line + 7800 3380 7700 3480 +Entry Wire Line + 7800 1450 7900 1350 +Entry Wire Line + 7800 1550 7900 1450 +Entry Wire Line + 7800 1650 7900 1550 +Entry Wire Line + 7800 1750 7900 1650 +Entry Wire Line + 7800 1850 7900 1750 +Entry Wire Line + 7800 1950 7900 1850 +Entry Wire Line + 7800 2050 7900 1950 +Entry Wire Line + 7800 2550 7900 2450 +Entry Wire Line + 7800 2650 7900 2550 +Entry Wire Line + 7800 2750 7900 2650 +Entry Wire Line + 7800 1350 7900 1250 +Entry Wire Line + 7800 2150 7900 2050 +Entry Wire Line + 7800 2250 7900 2150 +Entry Wire Line + 7800 2350 7900 2250 +Entry Wire Line + 7800 2450 7900 2350 +Entry Wire Line + 7800 2850 7900 2750 +Connection ~ 7800 4085 +Wire Wire Line + 6930 3180 7700 3180 +Wire Wire Line + 7230 3480 7700 3480 +Wire Wire Line + 7130 3380 7700 3380 +Wire Wire Line + 7030 3280 7700 3280 +Wire Wire Line + 6830 3080 7700 3080 +Wire Wire Line + 6730 2980 7700 2980 +Wire Wire Line + 6630 2880 7700 2880 +Wire Wire Line + 6530 2780 7700 2780 +Wire Bus Line + 7800 4085 10075 4085 +$Comp +L power:+5V #PWR0103 +U 1 1 5DA541F3 +P 6450 3395 +F 0 "#PWR0103" H 6450 3245 50 0001 C CNN +F 1 "+5V" H 6540 3450 50 0000 C CNN +F 2 "" H 6450 3395 50 0001 C CNN +F 3 "" H 6450 3395 50 0001 C CNN + 1 6450 3395 + 1 0 0 -1 +$EndComp +Text Label 7570 3830 2 50 ~ 0 +Row0 +Text Label 7570 3930 2 50 ~ 0 +Row1 +Text Label 7570 4030 2 50 ~ 0 +Row2 +Text Label 7570 4130 2 50 ~ 0 +Row3 +Text Label 7570 4530 2 50 ~ 0 +Row7 +Text Label 7570 4430 2 50 ~ 0 +Row6 +Text Label 7570 4330 2 50 ~ 0 +Row5 +Text Label 7570 4230 2 50 ~ 0 +Row4 +$Comp +L 74xx:74LS138 U2 +U 1 1 5DE612EE +P 6450 4130 +F 0 "U2" H 6210 4575 50 0000 C CNN +F 1 "74LS138" H 6655 4580 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm" H 6450 4130 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS138" H 6450 4130 50 0001 C CNN + 1 6450 4130 + 1 0 0 -1 +$EndComp +Entry Wire Line + 7800 4130 7700 4230 +Entry Wire Line + 7800 3830 7700 3930 +Entry Wire Line + 7800 4330 7700 4430 +Entry Wire Line + 7800 3930 7700 4030 +Entry Wire Line + 7800 4230 7700 4330 +Entry Wire Line + 7800 3730 7700 3830 +Entry Wire Line + 7800 4030 7700 4130 +Entry Wire Line + 7800 4430 7700 4530 +$Comp +L 74xx:74LS138 U4 +U 1 1 5DE7C3DB +P 6460 5670 +F 0 "U4" H 6220 6115 50 0000 C CNN +F 1 "74LS138" H 6665 6120 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm" H 6460 5670 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS138" H 6460 5670 50 0001 C CNN + 1 6460 5670 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3900 4250 5735 4250 +Wire Wire Line + 5735 4250 5735 3830 +Wire Wire Line + 5735 3830 5950 3830 +Wire Wire Line + 5950 3930 5785 3930 +Wire Wire Line + 5785 3930 5785 4350 +Wire Wire Line + 5785 4350 3900 4350 +Wire Wire Line + 5950 4030 5840 4030 +Wire Wire Line + 5840 4030 5840 4450 +Wire Wire Line + 5840 4450 3900 4450 +Wire Wire Line + 3900 4550 5885 4550 +$Comp +L power:GND #PWR0109 +U 1 1 5DE8F508 +P 6445 4845 +F 0 "#PWR0109" H 6445 4595 50 0001 C CNN +F 1 "GND" H 6305 4800 50 0000 C CNN +F 2 "" H 6445 4845 50 0001 C CNN +F 3 "" H 6445 4845 50 0001 C CNN + 1 6445 4845 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR0110 +U 1 1 5DE8FEDD +P 6460 5070 +F 0 "#PWR0110" H 6460 4920 50 0001 C CNN +F 1 "+5V" H 6550 5125 50 0000 C CNN +F 2 "" H 6460 5070 50 0001 C CNN +F 3 "" H 6460 5070 50 0001 C CNN + 1 6460 5070 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6445 4845 6450 4845 +Wire Wire Line + 6450 4845 6450 4830 +Connection ~ 5840 4450 +Wire Wire Line + 5785 5470 5785 4355 +Connection ~ 5735 4250 +Wire Wire Line + 5860 6070 5960 6070 +Wire Wire Line + 5860 6070 5860 5970 +Wire Wire Line + 5860 5970 5960 5970 +Connection ~ 5860 6070 +Wire Wire Line + 5885 4430 5885 4550 +Wire Wire Line + 5885 5870 5960 5870 +Connection ~ 5885 4550 +Wire Wire Line + 5885 4550 5885 5870 +Wire Wire Line + 5885 4430 5950 4430 +Wire Wire Line + 5950 4530 5950 4845 +Wire Wire Line + 5950 4845 6445 4845 +Connection ~ 6445 4845 +Wire Wire Line + 5950 4330 5915 4330 +Wire Wire Line + 5915 4330 5915 3475 +Wire Wire Line + 5915 3475 6450 3475 +Wire Wire Line + 6450 3475 6450 3395 +Wire Wire Line + 6450 3475 6450 3530 +Connection ~ 6450 3475 +Wire Wire Line + 5840 5570 5960 5570 +Wire Wire Line + 5840 4450 5840 5570 +Wire Wire Line + 5785 5470 5960 5470 +Wire Wire Line + 5960 5370 5735 5370 +Wire Wire Line + 5735 4250 5735 5370 +Wire Wire Line + 7230 1815 7230 2010 +Wire Wire Line + 6730 1815 6730 2510 +Wire Wire Line + 6730 2510 6730 2980 +Connection ~ 6730 2510 +Wire Wire Line + 6155 2510 6730 2510 +Wire Wire Line + 6930 1815 6930 2310 +Wire Wire Line + 6930 2310 6930 3180 +Connection ~ 6930 2310 +Wire Wire Line + 6155 2310 6930 2310 +Wire Wire Line + 6830 1815 6830 2410 +Wire Wire Line + 6830 2410 6830 3080 +Connection ~ 6830 2410 +Wire Wire Line + 6155 2410 6830 2410 +Connection ~ 7230 2010 +Wire Wire Line + 6155 2010 7230 2010 +Wire Wire Line + 7130 1815 7130 2110 +Wire Wire Line + 7130 2110 7130 3380 +Connection ~ 7130 2110 +Wire Wire Line + 6155 2110 7130 2110 +Wire Wire Line + 6630 1815 6630 2610 +Wire Wire Line + 6630 2610 6630 2880 +Connection ~ 6630 2610 +Wire Wire Line + 6155 2610 6630 2610 +Wire Wire Line + 7030 1815 7030 2210 +Wire Wire Line + 7030 2210 7030 3280 +Connection ~ 7030 2210 +Wire Wire Line + 6155 2210 7030 2210 +Wire Wire Line + 7230 2010 7230 3480 +Wire Wire Line + 6530 2710 6530 2780 +Wire Wire Line + 6530 1815 6530 2710 +Connection ~ 6530 2710 +Wire Wire Line + 6155 2710 6530 2710 +$Comp +L Device:C C4 +U 1 1 5DF5B37D +P 5555 7475 +F 0 "C4" H 5560 7555 50 0000 L CNN +F 1 "0.1 uF" H 5570 7390 50 0000 L CNN +F 2 "Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm" H 5593 7325 50 0001 C CNN +F 3 "~" H 5555 7475 50 0001 C CNN + 1 5555 7475 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5180 7325 5555 7325 +Connection ~ 5180 7325 +Wire Wire Line + 5180 7625 5555 7625 +Connection ~ 5180 7625 +$Comp +L power:+5V #PWR0111 +U 1 1 5DFE19CD +P 1200 6650 +F 0 "#PWR0111" H 1200 6500 50 0001 C CNN +F 1 "+5V" H 1215 6823 50 0000 C CNN +F 2 "" H 1200 6650 50 0001 C CNN +F 3 "" H 1200 6650 50 0001 C CNN + 1 1200 6650 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1200 6650 1200 6700 +Wire Wire Line + 1200 6700 1150 6700 +Text Label 9795 5500 0 50 ~ 0 +Col7 +Text Label 9795 5400 0 50 ~ 0 +Col6 +Text Label 9795 5300 0 50 ~ 0 +Col5 +Text Label 9795 5200 0 50 ~ 0 +Col4 +Text Label 9795 5100 0 50 ~ 0 +Col3 +Text Label 9795 5000 0 50 ~ 0 +Col2 +Text Label 9795 4900 0 50 ~ 0 +Col1 +Text Label 9795 4800 0 50 ~ 0 +Col0 +Wire Wire Line + 9075 5100 9485 5100 +Wire Wire Line + 9475 4900 9075 4900 +Wire Wire Line + 9975 4800 9475 4800 +Wire Wire Line + 9975 4900 9775 4900 +Wire Wire Line + 9975 5000 9475 5000 +Wire Wire Line + 9975 5100 9785 5100 +Wire Wire Line + 9975 5200 9475 5200 +Wire Wire Line + 9785 5300 9975 5300 +Wire Wire Line + 9785 5500 9975 5500 +Wire Wire Line + 9475 5400 9975 5400 +Wire Wire Line + 9075 5500 9485 5500 +Wire Wire Line + 9075 5400 9175 5400 +Wire Wire Line + 9485 5300 9075 5300 +Wire Wire Line + 9075 5200 9175 5200 +Wire Wire Line + 9175 5000 9075 5000 +Wire Wire Line + 9075 4800 9175 4800 +Entry Wire Line + 9975 4900 10075 4800 +Entry Wire Line + 9975 4800 10075 4700 +Entry Wire Line + 9975 5100 10075 5000 +Entry Wire Line + 9975 5000 10075 4900 +Entry Wire Line + 9975 5300 10075 5200 +Entry Wire Line + 9975 5200 10075 5100 +Entry Wire Line + 9975 5500 10075 5400 +Entry Wire Line + 9975 5400 10075 5300 +$Comp +L Diode:1N4148 D10 +U 1 1 5DFACD33 +P 9635 5500 +F 0 "D10" H 9635 5624 50 0000 C CNN +F 1 "1N4148" H 9455 5600 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9635 5325 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9635 5500 50 0001 C CNN + 1 9635 5500 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D8 +U 1 1 5DF9A8E3 +P 9635 5300 +F 0 "D8" H 9745 5270 50 0000 C CNN +F 1 "1N4148" H 9433 5340 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9635 5125 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9635 5300 50 0001 C CNN + 1 9635 5300 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D6 +U 1 1 5DF87A8E +P 9635 5100 +F 0 "D6" H 9745 5070 50 0000 C CNN +F 1 "1N4148" H 9433 5140 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9635 4925 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9635 5100 50 0001 C CNN + 1 9635 5100 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D9 +U 1 1 5DF6B891 +P 9325 5400 +F 0 "D9" H 9455 5360 50 0000 C CNN +F 1 "1N4148" H 9123 5440 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9325 5225 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9325 5400 50 0001 C CNN + 1 9325 5400 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D7 +U 1 1 5DF5903F +P 9325 5200 +F 0 "D7" H 9455 5160 50 0000 C CNN +F 1 "1N4148" H 9123 5240 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9325 5025 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9325 5200 50 0001 C CNN + 1 9325 5200 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D3 +U 1 1 5DF45137 +P 9325 4800 +F 0 "D3" H 9455 4760 50 0000 C CNN +F 1 "1N4148" H 9215 4670 50 0000 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9325 4625 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9325 4800 50 0001 C CNN + 1 9325 4800 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D5 +U 1 1 5DF31D18 +P 9325 5000 +F 0 "D5" H 9465 4960 50 0000 C CNN +F 1 "1N4148" H 9123 5040 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9325 4825 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9325 5000 50 0001 C CNN + 1 9325 5000 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D4 +U 1 1 5DF29274 +P 9625 4900 +F 0 "D4" H 9735 4870 50 0000 C CNN +F 1 "1N4148" H 9423 4940 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9625 4725 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9625 4900 50 0001 C CNN + 1 9625 4900 + -1 0 0 1 +$EndComp +$Comp +L Switch:SW_DIP_x08 SW1 +U 1 1 5DF0476A +P 8775 5200 +F 0 "SW1" H 8775 5867 50 0000 C CNN +F 1 "Options" H 8775 5776 50 0000 C CNN +F 2 "Button_Switch_THT:SW_DIP_SPSTx08_Piano_CTS_Series194-8MSTN_W7.62mm_P2.54mm" H 8775 5200 50 0001 C CNN +F 3 "~" H 8775 5200 50 0001 C CNN + 1 8775 5200 + 1 0 0 -1 +$EndComp +Connection ~ 10075 4085 +Entry Wire Line + 8200 5055 8300 5155 +Wire Bus Line + 8200 5055 7800 5055 +Wire Wire Line + 8475 4800 8300 4800 +Text Label 8325 4800 0 50 ~ 0 +Row8 +Wire Wire Line + 8300 4800 8300 4900 +Wire Wire Line + 8300 5500 8475 5500 +Wire Wire Line + 8475 5400 8300 5400 +Connection ~ 8300 5400 +Wire Wire Line + 8300 5400 8300 5500 +Wire Wire Line + 8475 5300 8300 5300 +Connection ~ 8300 5300 +Wire Wire Line + 8300 5300 8300 5400 +Wire Wire Line + 8475 5200 8300 5200 +Connection ~ 8300 5200 +Wire Wire Line + 8300 5200 8300 5300 +Wire Wire Line + 8475 5100 8300 5100 +Connection ~ 8300 5100 +Wire Wire Line + 8475 5000 8300 5000 +Connection ~ 8300 5000 +Wire Wire Line + 8300 5000 8300 5100 +Wire Wire Line + 8475 4900 8300 4900 +Connection ~ 8300 4900 +Wire Wire Line + 8300 4900 8300 5000 +Connection ~ 7800 5055 +$Comp +L Connector_Generic:Conn_01x04 J6 +U 1 1 5E4CDDD4 +P 950 6900 +F 0 "J6" H 868 6475 50 0000 C CNN +F 1 "UART" H 868 6566 50 0000 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Horizontal" H 950 6900 50 0001 C CNN +F 3 "~" H 950 6900 50 0001 C CNN + 1 950 6900 + -1 0 0 1 +$EndComp +Entry Wire Line + 7800 3050 7900 2950 +Entry Wire Line + 7800 3150 7900 3050 +Entry Wire Line + 7800 2950 7900 2850 +Wire Wire Line + 7900 2850 8560 2850 +Wire Wire Line + 8560 2950 7900 2950 +Wire Wire Line + 7900 3050 8560 3050 +Wire Wire Line + 8560 3150 7900 3150 +Wire Wire Line + 9060 3050 9975 3050 +Wire Wire Line + 9060 2850 9975 2850 +Wire Wire Line + 9060 2950 9975 2950 +Wire Wire Line + 9060 3150 9975 3150 +Entry Wire Line + 7800 3250 7900 3150 +Text Label 9615 2250 0 50 ~ 0 +CAPS_LED +Wire Wire Line + 9095 1450 9095 1115 +Wire Wire Line + 9060 1450 9095 1450 +$Comp +L power:+5V #PWR011 +U 1 1 5E28FE49 +P 9095 780 +F 0 "#PWR011" H 9095 630 50 0001 C CNN +F 1 "+5V" H 9110 953 50 0000 C CNN +F 2 "" H 9095 780 50 0001 C CNN +F 3 "" H 9095 780 50 0001 C CNN + 1 9095 780 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D14 +U 1 1 5E316F0B +P 7150 4530 +F 0 "D14" H 7120 4190 50 0000 C CNN +F 1 "1N4148" H 6948 4570 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7150 4355 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7150 4530 50 0001 C CNN + 1 7150 4530 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D18 +U 1 1 5E32CB02 +P 7280 4430 +F 0 "D18" H 7310 3990 50 0000 C CNN +F 1 "1N4148" H 7078 4470 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7280 4255 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7280 4430 50 0001 C CNN + 1 7280 4430 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D13 +U 1 1 5E34160D +P 7150 4330 +F 0 "D13" H 7120 3860 50 0000 C CNN +F 1 "1N4148" H 6948 4370 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7150 4155 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7150 4330 50 0001 C CNN + 1 7150 4330 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D23 +U 1 1 5E412853 +P 7300 5370 +F 0 "D23" H 7370 4570 50 0000 C CNN +F 1 "1N4148" H 7240 5480 50 0000 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7300 5195 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7300 5370 50 0001 C CNN + 1 7300 5370 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D22 +U 1 1 5E412859 +P 7170 6070 +F 0 "D22" H 7150 5730 50 0000 C CNN +F 1 "1N4148" H 6968 6110 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7170 5895 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7170 6070 50 0001 C CNN + 1 7170 6070 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D26 +U 1 1 5E41285F +P 7310 5970 +F 0 "D26" H 7370 5530 50 0000 C CNN +F 1 "1N4148" H 7108 6010 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7310 5795 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7310 5970 50 0001 C CNN + 1 7310 5970 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D21 +U 1 1 5E412865 +P 7170 5870 +F 0 "D21" H 7150 5410 50 0000 C CNN +F 1 "1N4148" H 6968 5910 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7170 5695 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7170 5870 50 0001 C CNN + 1 7170 5870 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D20 +U 1 1 5E41286B +P 7170 5670 +F 0 "D20" H 7150 5090 50 0000 C CNN +F 1 "1N4148" H 6968 5710 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7170 5495 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7170 5670 50 0001 C CNN + 1 7170 5670 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D19 +U 1 1 5E412871 +P 7160 5470 +F 0 "D19" H 7150 4770 50 0000 C CNN +F 1 "1N4148" H 6958 5510 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7160 5295 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7160 5470 50 0001 C CNN + 1 7160 5470 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D25 +U 1 1 5E412877 +P 7300 5770 +F 0 "D25" H 7370 5210 50 0000 C CNN +F 1 "1N4148" H 7098 5810 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7300 5595 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7300 5770 50 0001 C CNN + 1 7300 5770 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D24 +U 1 1 5E41287D +P 7300 5570 +F 0 "D24" H 7370 4890 50 0000 C CNN +F 1 "1N4148" H 7098 5610 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7300 5395 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7300 5570 50 0001 C CNN + 1 7300 5570 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6950 3830 7120 3830 +Wire Wire Line + 6990 3930 6950 3930 +Wire Wire Line + 6950 4030 7130 4030 +Wire Wire Line + 6950 4130 7000 4130 +Wire Wire Line + 6950 4230 7130 4230 +Wire Wire Line + 6950 4330 7000 4330 +Wire Wire Line + 6950 4430 7130 4430 +Wire Wire Line + 6950 4530 7000 4530 +Wire Wire Line + 7300 4530 7700 4530 +Wire Wire Line + 7700 4430 7430 4430 +Wire Wire Line + 7300 4330 7700 4330 +Wire Wire Line + 7700 4230 7430 4230 +Wire Wire Line + 7700 4130 7300 4130 +Wire Wire Line + 7700 4030 7430 4030 +Wire Wire Line + 7290 3930 7700 3930 +Wire Wire Line + 7700 3830 7420 3830 +Wire Wire Line + 6960 5370 7150 5370 +Wire Wire Line + 7010 5470 6960 5470 +Wire Wire Line + 6960 5570 7150 5570 +Wire Wire Line + 7020 5670 6960 5670 +Wire Wire Line + 6960 5770 7150 5770 +Wire Wire Line + 6960 5870 7020 5870 +Wire Wire Line + 7160 5970 6960 5970 +Wire Wire Line + 6960 6070 7020 6070 +Wire Wire Line + 7320 6070 7700 6070 +Wire Wire Line + 7700 5970 7460 5970 +Wire Wire Line + 7700 5870 7320 5870 +Wire Wire Line + 7700 5770 7450 5770 +Wire Wire Line + 7320 5670 7700 5670 +Wire Wire Line + 7700 5370 7450 5370 +$Comp +L Diode:1N4148 D17 +U 1 1 5E37FC86 +P 7280 4230 +F 0 "D17" H 7310 3660 50 0000 C CNN +F 1 "1N4148" H 7078 4270 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7280 4055 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7280 4230 50 0001 C CNN + 1 7280 4230 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D12 +U 1 1 5E357678 +P 7150 4130 +F 0 "D12" H 7120 3540 50 0000 C CNN +F 1 "1N4148" H 6948 4170 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7150 3955 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7150 4130 50 0001 C CNN + 1 7150 4130 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D16 +U 1 1 5E3942E4 +P 7280 4030 +F 0 "D16" H 7310 3340 50 0000 C CNN +F 1 "1N4148" H 7078 4070 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7280 3855 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7280 4030 50 0001 C CNN + 1 7280 4030 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D11 +U 1 1 5E36B862 +P 7140 3930 +F 0 "D11" H 7120 3210 50 0000 C CNN +F 1 "1N4148" H 6938 3970 50 0001 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7140 3755 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7140 3930 50 0001 C CNN + 1 7140 3930 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D15 +U 1 1 5E301C34 +P 7270 3830 +F 0 "D15" H 7310 3010 50 0000 C CNN +F 1 "1N4148" H 7210 3940 50 0000 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7270 3655 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 7270 3830 50 0001 C CNN + 1 7270 3830 + 1 0 0 -1 +$EndComp +Wire Wire Line + 7310 5470 7700 5470 +Wire Wire Line + 7700 5570 7450 5570 +Wire Wire Line + 9500 1350 9975 1350 +Wire Wire Line + 7900 2350 8560 2350 +Entry Wire Line + 9975 1250 10075 1350 +Entry Wire Line + 9975 1750 10075 1850 +Text Label 9760 1750 0 50 ~ 0 +Row7 +Text Label 9760 1650 0 50 ~ 0 +Col0 +$Comp +L Device:R_US R3 +U 1 1 5EAA5774 +P 9095 965 +F 0 "R3" H 8940 1020 50 0000 L CNN +F 1 "330" H 8885 945 50 0000 L CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 9135 955 50 0001 C CNN +F 3 "~" H 9095 965 50 0001 C CNN + 1 9095 965 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9095 815 9095 780 +$Comp +L Diode:1N4148 D2 +U 1 1 5D9C0280 +P 9355 1750 +F 0 "D2" H 9465 1720 50 0000 C CNN +F 1 "1N4148" H 9530 1790 40 0000 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9355 1575 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9355 1750 50 0001 C CNN + 1 9355 1750 + -1 0 0 1 +$EndComp +$Comp +L Diode:1N4148 D27 +U 1 1 5EB56F93 +P 9355 2150 +F 0 "D27" H 9465 2120 50 0000 C CNN +F 1 "1N4148" H 9530 2185 40 0000 C CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9355 1975 50 0001 C CNN +F 3 "https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf" H 9355 2150 50 0001 C CNN + 1 9355 2150 + -1 0 0 1 +$EndComp +Entry Wire Line + 9975 2150 10075 2250 +Wire Wire Line + 9975 1250 9060 1250 +Wire Wire Line + 9060 1350 9200 1350 +Wire Wire Line + 9975 1750 9505 1750 +Wire Wire Line + 9205 1750 9060 1750 +Wire Wire Line + 9060 2050 9975 2050 +Wire Wire Line + 9975 2150 9505 2150 +Wire Wire Line + 9205 2150 9060 2150 +Text Notes 9450 2145 0 50 ~ 0 +Rubout +Text Notes 9495 1740 0 50 ~ 0 +@ +Text Notes 9445 1340 0 50 ~ 0 +Power +Wire Wire Line + 9060 1550 9145 1550 +Wire Wire Line + 9145 1550 9145 1535 +Wire Wire Line + 9145 1535 9210 1535 +$Comp +L power:GND #PWR012 +U 1 1 5EB0660B +P 9210 1535 +F 0 "#PWR012" H 9210 1285 50 0001 C CNN +F 1 "GND" H 9340 1490 50 0000 C CNN +F 2 "" H 9210 1535 50 0001 C CNN +F 3 "" H 9210 1535 50 0001 C CNN + 1 9210 1535 + 1 0 0 -1 +$EndComp +$Comp +L Device:R_US R4 +U 1 1 5EE753E3 +P 9330 2350 +F 0 "R4" V 9295 2435 50 0000 L CNN +F 1 "330" V 9405 2280 50 0000 L CNN +F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal" V 9370 2340 50 0001 C CNN +F 3 "~" H 9330 2350 50 0001 C CNN + 1 9330 2350 + 0 1 1 0 +$EndComp +$Comp +L power:GND #PWR014 +U 1 1 5EE8EA9E +P 9590 2350 +F 0 "#PWR014" H 9590 2100 50 0001 C CNN +F 1 "GND" H 9720 2305 50 0000 C CNN +F 2 "" H 9590 2350 50 0001 C CNN +F 3 "" H 9590 2350 50 0001 C CNN + 1 9590 2350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9060 2350 9180 2350 +Wire Wire Line + 9480 2350 9590 2350 +Entry Wire Line + 9975 2250 10075 2350 +Wire Wire Line + 9060 2250 9975 2250 +Wire Wire Line + 8300 5100 8300 5200 +Wire Wire Line + 9060 1650 9976 1650 +Wire Bus Line + 7800 4085 7800 5055 +Wire Bus Line + 10075 4085 10075 5400 +Wire Bus Line + 7800 5055 7800 6615 +Wire Bus Line + 5200 4050 5200 6425 +Wire Bus Line + 10075 1270 10075 4085 +Wire Bus Line + 1975 1495 1975 6425 +Wire Bus Line + 7800 1350 7800 4085 +$EndSCHEMATC diff --git a/hardware/interface-osi/unikbd-osi.kicad_pcb b/hardware/interface-osi/unikbd-osi.kicad_pcb new file mode 100644 index 0000000..538affb --- /dev/null +++ b/hardware/interface-osi/unikbd-osi.kicad_pcb @@ -0,0 +1,1551 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.2)-1") + + (general + (thickness 1.6) + (drawings 10) + (tracks 502) + (zones 0) + (modules 13) + (nets 71) + ) + + (page B) + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.1) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (grid_origin 209.4 88.8) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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 GND) + (net 2 +5V) + (net 3 /Row3) + (net 4 /Row0) + (net 5 /Row1) + (net 6 /Row4) + (net 7 /Row5) + (net 8 /Row7) + (net 9 /D7) + (net 10 /D1) + (net 11 /R_~W) + (net 12 /D2) + (net 13 /D3) + (net 14 /D4) + (net 15 /~KBE) + (net 16 /D5) + (net 17 /D6) + (net 18 "Net-(R1-Pad1)") + (net 19 "Net-(R2-Pad1)") + (net 20 /Col0) + (net 21 /Col1) + (net 22 /Col2) + (net 23 /Col3) + (net 24 /Col4) + (net 25 /Col5) + (net 26 /Col6) + (net 27 /Col7) + (net 28 "Net-(U1-Pad1)") + (net 29 "Net-(U1-Pad10)") + (net 30 "Net-(U1-Pad4)") + (net 31 "Net-(U1-Pad13)") + (net 32 "Net-(U2-Pad18)") + (net 33 "Net-(U2-Pad16)") + (net 34 "Net-(U2-Pad14)") + (net 35 "Net-(U2-Pad12)") + (net 36 "Net-(U3-Pad12)") + (net 37 "Net-(U3-Pad14)") + (net 38 "Net-(U3-Pad16)") + (net 39 "Net-(U3-Pad18)") + (net 40 /Row6) + (net 41 /Row2) + (net 42 /D0) + (net 43 /~SI) + (net 44 /NI) + (net 45 /~A1) + (net 46 /~A0) + (net 47 "Net-(J2-Pad40)") + (net 48 "Net-(J2-Pad39)") + (net 49 "Net-(J2-Pad38)") + (net 50 "Net-(J2-Pad37)") + (net 51 "Net-(J2-Pad36)") + (net 52 "Net-(J2-Pad35)") + (net 53 "Net-(J2-Pad34)") + (net 54 "Net-(J2-Pad33)") + (net 55 "Net-(J2-Pad32)") + (net 56 "Net-(J2-Pad30)") + (net 57 "Net-(J2-Pad28)") + (net 58 "Net-(J2-Pad26)") + (net 59 "Net-(J2-Pad24)") + (net 60 "Net-(J2-Pad22)") + (net 61 "Net-(J2-Pad20)") + (net 62 "Net-(J2-Pad18)") + (net 63 "Net-(J2-Pad16)") + (net 64 "Net-(J2-Pad14)") + (net 65 "Net-(J2-Pad12)") + (net 66 "Net-(J2-Pad10)") + (net 67 "Net-(J2-Pad8)") + (net 68 "Net-(J2-Pad6)") + (net 69 "Net-(J2-Pad4)") + (net 70 "Net-(J2-Pad2)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net /Col1) + (add_net /Col2) + (add_net /Col3) + (add_net /Col4) + (add_net /Col5) + (add_net /Col6) + (add_net /Col7) + (add_net /D0) + (add_net /D1) + (add_net /D2) + (add_net /D3) + (add_net /D4) + (add_net /D5) + (add_net /D6) + (add_net /D7) + (add_net /NI) + (add_net /R_~W) + (add_net /Row0) + (add_net /Row1) + (add_net /Row2) + (add_net /Row3) + (add_net /Row4) + (add_net /Row5) + (add_net /Row6) + (add_net /Row7) + (add_net /~A0) + (add_net /~A1) + (add_net /~KBE) + (add_net /~SI) + (add_net "Net-(J2-Pad10)") + (add_net "Net-(J2-Pad12)") + (add_net "Net-(J2-Pad14)") + (add_net "Net-(J2-Pad16)") + (add_net "Net-(J2-Pad18)") + (add_net "Net-(J2-Pad2)") + (add_net "Net-(J2-Pad20)") + (add_net "Net-(J2-Pad22)") + (add_net "Net-(J2-Pad24)") + (add_net "Net-(J2-Pad26)") + (add_net "Net-(J2-Pad28)") + (add_net "Net-(J2-Pad30)") + (add_net "Net-(J2-Pad32)") + (add_net "Net-(J2-Pad33)") + (add_net "Net-(J2-Pad34)") + (add_net "Net-(J2-Pad35)") + (add_net "Net-(J2-Pad36)") + (add_net "Net-(J2-Pad37)") + (add_net "Net-(J2-Pad38)") + (add_net "Net-(J2-Pad39)") + (add_net "Net-(J2-Pad4)") + (add_net "Net-(J2-Pad40)") + (add_net "Net-(J2-Pad6)") + (add_net "Net-(J2-Pad8)") + (add_net "Net-(R1-Pad1)") + (add_net "Net-(R2-Pad1)") + (add_net "Net-(U1-Pad1)") + (add_net "Net-(U1-Pad10)") + (add_net "Net-(U1-Pad13)") + (add_net "Net-(U1-Pad4)") + (add_net "Net-(U2-Pad12)") + (add_net "Net-(U2-Pad14)") + (add_net "Net-(U2-Pad16)") + (add_net "Net-(U2-Pad18)") + (add_net "Net-(U3-Pad12)") + (add_net "Net-(U3-Pad14)") + (add_net "Net-(U3-Pad16)") + (add_net "Net-(U3-Pad18)") + ) + + (net_class power1 "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net +5V) + (add_net GND) + ) + + (net_class signal "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net /Col0) + ) + + (module Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5D0D78C0) + (at 191.1985 106.3117) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (path /5C09E3FF) + (fp_text reference R1 (at -2.2733 0.5461) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0 ohm" (at -0.6477 1.7653) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.54 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.68 0) (end 5.73 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.94 0) (end 1.89 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.62 0) (end 5.61 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 2.01 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 18 "Net-(R1-Pad1)")) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal (layer F.Cu) (tedit 5AE5139B) (tstamp 5D0D78D3) + (at 191.1985 110.2995) + (descr "Resistor, Axial_DIN0204 series, Axial, Horizontal, pin pitch=7.62mm, 0.167W, length*diameter=3.6*1.6mm^2, http://cdn-reichelt.de/documents/datenblatt/B400/1_4W%23YAG.pdf") + (tags "Resistor Axial_DIN0204 series Axial Horizontal pin pitch 7.62mm 0.167W length 3.6mm diameter 1.6mm") + (path /5C09E4C7) + (fp_text reference R2 (at -2.2733 0.6096) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0 ohm" (at -0.9271 1.8923) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 2.54 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.57 -1.05) (end -0.95 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.57 1.05) (end 8.57 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.95 1.05) (end 8.57 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -0.95 -1.05) (end -0.95 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.68 0) (end 5.73 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.94 0) (end 1.89 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.73 -0.92) (end 1.89 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.73 0.92) (end 5.73 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.89 0.92) (end 5.73 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.89 -0.92) (end 1.89 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 7.62 0) (end 5.61 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 2.01 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.61 -0.8) (end 2.01 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 5.61 0.8) (end 5.61 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.01 0.8) (end 5.61 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.01 -0.8) (end 2.01 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask) + (net 19 "Net-(R2-Pad1)")) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5D0D6FA7) + (at 214.6554 95.7961 270) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5BFE9C80) + (fp_text reference C1 (at 2.921 2.0193 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at 4.3307 0.6731 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at -1.75006 2.11836 180) (layer F.SilkS) hide + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5D0D6FB5) + (at 176.6951 95.9104 270) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5BFE9D13) + (fp_text reference C2 (at 1.25 -3.5 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at 1.27 -1.778 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.191 -0.635 180) (layer F.SilkS) hide + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5D0FD0A6) + (at 214.4141 73.6727 270) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5BFF0898) + (fp_text reference C4 (at 1.25 -3.5 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at 1.25 3.5 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -1.39192 2.63652 180) (layer F.SilkS) + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mm (layer F.Cu) (tedit 5AE50EF0) (tstamp 5D0D6FC3) + (at 235.1405 127.127 270) + (descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.0*1.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf") + (tags "C Disc series Radial pin pitch 2.50mm diameter 3.0mm width 1.6mm Capacitor") + (path /5BFF0892) + (fp_text reference C3 (at 4.572 -0.0254 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0.1 uF" (at 6.0325 -1.651 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at -2.09296 1.41478 180) (layer F.SilkS) + (effects (font (size 0.9 0.9) (thickness 0.135))) + ) + (fp_line (start 3.55 -1.05) (end -1.05 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 3.55 1.05) (end 3.55 -1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.05) (end 3.55 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.05) (end -1.05 1.05) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.621 0.92) (end 1.879 0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.621 -0.92) (end 1.879 -0.92) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.75 -0.8) (end -0.25 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start 2.75 0.8) (end 2.75 -0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 0.8) (end 2.75 0.8) (layer F.Fab) (width 0.1)) + (fp_line (start -0.25 -0.8) (end -0.25 0.8) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole circle (at 2.5 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 1 thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.0mm_W1.6mm_P2.50mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-20_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D216044) + (at 208.0641 132.1181 90) + (descr "20-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5BCB954C) + (fp_text reference U4 (at 9.779 -0.8001 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 74LS373 (at -2.2225 1.9304) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 24.13) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 24.13) (end 0.635 24.13) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 24.13) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 24.19) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 24.19) (end 6.46 24.19) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 24.19) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.1 -1.55) (end -1.1 24.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 24.4) (end 8.7 24.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 24.4) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 7.07136 -2.72542) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 11 thru_hole oval (at 7.62 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 29 "Net-(U1-Pad10)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 4 /Row0)) + (pad 12 thru_hole oval (at 7.62 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 6 /Row4)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 "Net-(U2-Pad18)")) + (pad 13 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(U3-Pad18)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 "Net-(U2-Pad16)")) + (pad 14 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 38 "Net-(U3-Pad16)")) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 5 /Row1)) + (pad 15 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 7 /Row5)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 41 /Row2)) + (pad 16 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 40 /Row6)) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 34 "Net-(U2-Pad14)")) + (pad 17 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 "Net-(U3-Pad14)")) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 35 "Net-(U2-Pad12)")) + (pad 18 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 "Net-(U3-Pad12)")) + (pad 9 thru_hole oval (at 0 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row3)) + (pad 19 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 8 /Row7)) + (pad 10 thru_hole oval (at 0 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 20 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-20_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical (layer F.Cu) (tedit 5A19A433) (tstamp 5D215268) + (at 185.246 173.0756 90) + (descr "Through hole straight socket strip, 2x20, 2.54mm pitch, double cols (from Kicad 4.0.7), script generated") + (tags "Through hole socket strip THT 2x20 2.54mm double row") + (path /5D1EDC84) + (fp_text reference J2 (at 2.8756 -1.846 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_02x20_Odd_Even (at -4.9244 45.954 180) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -3.81 -1.27) (end 0.27 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.27 -1.27) (end 1.27 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -0.27) (end 1.27 49.53) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 49.53) (end -3.81 49.53) (layer F.Fab) (width 0.1)) + (fp_line (start -3.81 49.53) (end -3.81 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start -3.87 -1.33) (end -1.27 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.87 -1.33) (end -3.87 49.59) (layer F.SilkS) (width 0.12)) + (fp_line (start -3.87 49.59) (end 1.33 49.59) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 1.27) (end 1.33 49.59) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 1.27) (end 1.33 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.27 -1.33) (end -1.27 1.27) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.33 -1.33) (end 1.33 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 0 -1.33) (end 1.33 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -4.34 -1.8) (end 1.76 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.76 -1.8) (end 1.76 50) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.76 50) (end -4.34 50) (layer F.CrtYd) (width 0.05)) + (fp_line (start -4.34 50) (end -4.34 -1.8) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at -1.27 24.13) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 27 /Col7)) + (pad 2 thru_hole oval (at -2.54 0 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 70 "Net-(J2-Pad2)")) + (pad 3 thru_hole oval (at 0 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 26 /Col6)) + (pad 4 thru_hole oval (at -2.54 2.54 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 69 "Net-(J2-Pad4)")) + (pad 5 thru_hole oval (at 0 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 25 /Col5)) + (pad 6 thru_hole oval (at -2.54 5.08 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 68 "Net-(J2-Pad6)")) + (pad 7 thru_hole oval (at 0 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 24 /Col4)) + (pad 8 thru_hole oval (at -2.54 7.62 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 67 "Net-(J2-Pad8)")) + (pad 9 thru_hole oval (at 0 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 23 /Col3)) + (pad 10 thru_hole oval (at -2.54 10.16 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 66 "Net-(J2-Pad10)")) + (pad 11 thru_hole oval (at 0 12.7 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 22 /Col2)) + (pad 12 thru_hole oval (at -2.54 12.7 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 65 "Net-(J2-Pad12)")) + (pad 13 thru_hole oval (at 0 15.24 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 21 /Col1)) + (pad 14 thru_hole oval (at -2.54 15.24 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 64 "Net-(J2-Pad14)")) + (pad 15 thru_hole oval (at 0 17.78 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 20 /Col0)) + (pad 16 thru_hole oval (at -2.54 17.78 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 63 "Net-(J2-Pad16)")) + (pad 17 thru_hole oval (at 0 20.32 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 8 /Row7)) + (pad 18 thru_hole oval (at -2.54 20.32 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 62 "Net-(J2-Pad18)")) + (pad 19 thru_hole oval (at 0 22.86 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 40 /Row6)) + (pad 20 thru_hole oval (at -2.54 22.86 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 61 "Net-(J2-Pad20)")) + (pad 21 thru_hole oval (at 0 25.4 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 7 /Row5)) + (pad 22 thru_hole oval (at -2.54 25.4 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 60 "Net-(J2-Pad22)")) + (pad 23 thru_hole oval (at 0 27.94 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 6 /Row4)) + (pad 24 thru_hole oval (at -2.54 27.94 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 59 "Net-(J2-Pad24)")) + (pad 25 thru_hole oval (at 0 30.48 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 /Row3)) + (pad 26 thru_hole oval (at -2.54 30.48 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 58 "Net-(J2-Pad26)")) + (pad 27 thru_hole oval (at 0 33.02 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 41 /Row2)) + (pad 28 thru_hole oval (at -2.54 33.02 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 57 "Net-(J2-Pad28)")) + (pad 29 thru_hole oval (at 0 35.56 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 5 /Row1)) + (pad 30 thru_hole oval (at -2.54 35.56 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 56 "Net-(J2-Pad30)")) + (pad 31 thru_hole oval (at 0 38.1 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 4 /Row0)) + (pad 32 thru_hole oval (at -2.54 38.1 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 55 "Net-(J2-Pad32)")) + (pad 33 thru_hole oval (at 0 40.64 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 54 "Net-(J2-Pad33)")) + (pad 34 thru_hole oval (at -2.54 40.64 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 53 "Net-(J2-Pad34)")) + (pad 35 thru_hole oval (at 0 43.18 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 52 "Net-(J2-Pad35)")) + (pad 36 thru_hole oval (at -2.54 43.18 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 51 "Net-(J2-Pad36)")) + (pad 37 thru_hole oval (at 0 45.72 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 50 "Net-(J2-Pad37)")) + (pad 38 thru_hole oval (at -2.54 45.72 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 49 "Net-(J2-Pad38)")) + (pad 39 thru_hole oval (at 0 48.26 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 48 "Net-(J2-Pad39)")) + (pad 40 thru_hole oval (at -2.54 48.26 90) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 47 "Net-(J2-Pad40)")) + (model ${KISYS3DMOD}/Connector_PinSocket_2.54mm.3dshapes/PinSocket_2x20_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistor_THT:R_Array_SIP9 (layer F.Cu) (tedit 5A14249F) (tstamp 5D0D78EF) + (at 241.0206 85.2805 180) + (descr "9-pin Resistor SIP pack") + (tags R) + (path /5C0319BC) + (fp_text reference RN1 (at 20.1803 -2.5654) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4.7k (at 11.43 2.4) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 10.16 0) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.29 -1.25) (end -1.29 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -1.29 1.25) (end 21.61 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 21.61 1.25) (end 21.61 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 21.61 -1.25) (end -1.29 -1.25) (layer F.Fab) (width 0.1)) + (fp_line (start 1.27 -1.25) (end 1.27 1.25) (layer F.Fab) (width 0.1)) + (fp_line (start -1.44 -1.4) (end -1.44 1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.44 1.4) (end 21.76 1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start 21.76 1.4) (end 21.76 -1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start 21.76 -1.4) (end -1.44 -1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.27 -1.4) (end 1.27 1.4) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.7 -1.65) (end -1.7 1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.7 1.65) (end 22.05 1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 22.05 1.65) (end 22.05 -1.65) (layer F.CrtYd) (width 0.05)) + (fp_line (start 22.05 -1.65) (end -1.7 -1.65) (layer F.CrtYd) (width 0.05)) + (pad 1 thru_hole rect (at 0 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 2 thru_hole oval (at 2.54 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 /Col3)) + (pad 3 thru_hole oval (at 5.08 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 /Col2)) + (pad 4 thru_hole oval (at 7.62 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 /Col1)) + (pad 5 thru_hole oval (at 10.16 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 /Col0)) + (pad 6 thru_hole oval (at 12.7 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 27 /Col7)) + (pad 7 thru_hole oval (at 15.24 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 /Col6)) + (pad 8 thru_hole oval (at 17.78 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 25 /Col5)) + (pad 9 thru_hole oval (at 20.32 0 180) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 24 /Col4)) + (model ${KISYS3DMOD}/Resistor_THT.3dshapes/R_Array_SIP9.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-16_W7.62mm_Socket (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D0D78AD) + (at 181.1401 78.1304 90) + (descr "16-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), Socket") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil Socket") + (path /5BCB9E1D) + (fp_text reference J1 (at 9.7409 -0.5334 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Conn_01x16 (at 3.81 20.11 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 9.50214 -0.78486 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 9.15 -1.6) (end -1.55 -1.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 9.15 19.4) (end 9.15 -1.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 19.4) (end 9.15 19.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.55 -1.6) (end -1.55 19.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.95 -1.39) (end -1.33 -1.39) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.95 19.17) (end 8.95 -1.39) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 19.17) (end 8.95 19.17) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.39) (end -1.33 19.17) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 19.11) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 19.11) (end 6.46 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 19.11) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 8.89 -1.33) (end -1.27 -1.33) (layer F.Fab) (width 0.1)) + (fp_line (start 8.89 19.11) (end 8.89 -1.33) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 19.11) (end 8.89 19.11) (layer F.Fab) (width 0.1)) + (fp_line (start -1.27 -1.33) (end -1.27 19.11) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 19.05) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 19.05) (end 0.635 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 19.05) (layer F.Fab) (width 0.1)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (pad 16 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 15 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 43 /~SI)) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 /D6)) + (pad 14 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 /NI)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 /D5)) + (pad 13 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 /~KBE)) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 /D4)) + (pad 12 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 45 /~A1)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 /D3)) + (pad 11 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 46 /~A0)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 /D2)) + (pad 10 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 /R_~W)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 /D1)) + (pad 9 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 /D7)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 /D0)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-16_W7.62mm_Socket.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-14_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D0F9C53) + (at 181.1401 100.7237 90) + (descr "14-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5BCB96EA) + (fp_text reference U1 (at 9.4107 0.5842 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 7402 (at 9.42086 14.79042 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 16.51) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 16.51) (end 0.635 16.51) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 16.51) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 16.57) (end 6.46 16.57) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 16.57) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.1 -1.55) (end -1.1 16.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 16.8) (end 8.7 16.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 16.8) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 9.398 0.61722 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 28 "Net-(U1-Pad1)")) + (pad 8 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 /R_~W)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 /R_~W)) + (pad 9 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 /~KBE)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 10 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 29 "Net-(U1-Pad10)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 30 "Net-(U1-Pad4)")) + (pad 11 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 28 "Net-(U1-Pad1)")) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 18 "Net-(R1-Pad1)")) + (pad 12 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 /~KBE)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 19 "Net-(R2-Pad1)")) + (pad 13 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad13)")) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 14 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-14_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-20_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D1E727B) + (at 219.7481 77.9145 90) + (descr "20-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5BD2F95F) + (fp_text reference U3 (at 9.4234 -0.8255 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 74LS240 (at 9.4996 20.9931 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 24.13) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 24.13) (end 0.635 24.13) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 24.13) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 24.19) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 24.19) (end 6.46 24.19) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 24.19) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start -1.1 -1.55) (end -1.1 24.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 24.4) (end 8.7 24.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 24.4) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_text user %R (at 7.8486 -2.6924 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad13)")) + (pad 11 thru_hole oval (at 7.62 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 27 /Col7)) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 /D4)) + (pad 12 thru_hole oval (at 7.62 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 "Net-(U3-Pad12)")) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 /D4)) + (pad 13 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 /Col6)) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 /D5)) + (pad 14 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 "Net-(U3-Pad14)")) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 /D5)) + (pad 15 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 25 /Col5)) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 /D6)) + (pad 16 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 38 "Net-(U3-Pad16)")) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 /D6)) + (pad 17 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 24 /Col4)) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 /D7)) + (pad 18 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(U3-Pad18)")) + (pad 9 thru_hole oval (at 0 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 /D7)) + (pad 19 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad13)")) + (pad 10 thru_hole oval (at 0 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 20 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-20_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Package_DIP:DIP-20_W7.62mm (layer F.Cu) (tedit 5A02E8C5) (tstamp 5D0F97A6) + (at 219.7481 100.7237 90) + (descr "20-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils)") + (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil") + (path /5BD1C77F) + (fp_text reference U2 (at 9.4107 -1.2446 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 74LS240 (at -2.5654 1.3081 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 9.47928 -1.11252 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 8.7 -1.55) (end -1.1 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.7 24.4) (end 8.7 -1.55) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 24.4) (end 8.7 24.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.1 -1.55) (end -1.1 24.4) (layer F.CrtYd) (width 0.05)) + (fp_line (start 6.46 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.46 24.19) (end 6.46 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 24.19) (end 6.46 24.19) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.16 -1.33) (end 1.16 24.19) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.81 -1.33) (end 1.16 -1.33) (layer F.SilkS) (width 0.12)) + (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) + (fp_line (start 0.635 24.13) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 24.13) (end 0.635 24.13) (layer F.Fab) (width 0.1)) + (fp_line (start 6.985 -1.27) (end 6.985 24.13) (layer F.Fab) (width 0.1)) + (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) + (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) + (pad 20 thru_hole oval (at 7.62 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 +5V)) + (pad 10 thru_hole oval (at 0 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 GND)) + (pad 19 thru_hole oval (at 7.62 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad13)")) + (pad 9 thru_hole oval (at 0 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 /D3)) + (pad 18 thru_hole oval (at 7.62 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 "Net-(U2-Pad18)")) + (pad 8 thru_hole oval (at 0 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 /D3)) + (pad 17 thru_hole oval (at 7.62 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 /Col0)) + (pad 7 thru_hole oval (at 0 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 /D2)) + (pad 16 thru_hole oval (at 7.62 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 "Net-(U2-Pad16)")) + (pad 6 thru_hole oval (at 0 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 /D2)) + (pad 15 thru_hole oval (at 7.62 12.7 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 /Col1)) + (pad 5 thru_hole oval (at 0 10.16 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 /D1)) + (pad 14 thru_hole oval (at 7.62 15.24 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 34 "Net-(U2-Pad14)")) + (pad 4 thru_hole oval (at 0 7.62 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 /D1)) + (pad 13 thru_hole oval (at 7.62 17.78 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 /Col2)) + (pad 3 thru_hole oval (at 0 5.08 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 /D0)) + (pad 12 thru_hole oval (at 7.62 20.32 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 35 "Net-(U2-Pad12)")) + (pad 2 thru_hole oval (at 0 2.54 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 /D0)) + (pad 11 thru_hole oval (at 7.62 22.86 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 /Col3)) + (pad 1 thru_hole rect (at 0 0 90) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 "Net-(U1-Pad13)")) + (model ${KISYS3DMOD}/Package_DIP.3dshapes/DIP-20_W7.62mm.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text "Pin 1 of keyboard connector must be at least 3.5\" from\npin 1 of interface connector in order for interface connector\nto be accessible with keyboard assembled." (at 170.4213 202.3745) (layer Cmts.User) + (effects (font (size 1.524 1.524) (thickness 0.15)) (justify left)) + ) + (gr_text "Mounting holes:\n0.125\" Non-plated\n2.5\" square spacing\nPin 1 of connector 0.31\", 0\" (x,y) relative to center of left lower hole." (at 170.4213 188.6458) (layer Cmts.User) + (effects (font (size 1.524 1.524) (thickness 0.2032)) (justify left)) + ) + (gr_circle (center 240.872 109.5756) (end 242.4595 109.5756) (layer Edge.Cuts) (width 0.1) (tstamp 5D21542F)) + (gr_circle (center 177.372 109.5756) (end 178.9595 109.5756) (layer Edge.Cuts) (width 0.1) (tstamp 5D21542E)) + (gr_circle (center 177.372 173.0756) (end 178.9595 173.0756) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152E9)) + (gr_circle (center 240.872 173.0756) (end 242.4595 173.0756) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152E6)) + (gr_line (start 171.2595 64.6176) (end 247.4595 64.6176) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 247.4595 64.6176) (end 247.4595 178.9176) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152E3)) + (gr_line (start 247.4595 178.9176) (end 171.2595 178.9176) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 171.2595 64.6176) (end 171.2595 178.9176) (layer Edge.Cuts) (width 0.1) (tstamp 5D2152EC)) + + (segment (start 242.490117 75.317477) (end 225.977967 75.317477) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.490117 75.317477) (end 242.6081 75.43546) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.6081 75.43546) (end 242.6081 77.9145) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 241.5032 97.8027) (end 242.6081 98.9076) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.6081 98.9076) (end 242.6081 100.7237) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 194.4878 97.8027) (end 241.5032 97.8027) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 225.977967 75.317477) (end 225.977965 75.317479) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 198.9201 75.69454) (end 198.9201 78.1304) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 198.94804 75.6666) (end 198.9201 75.69454) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 198.94804 75.6666) (end 181.54396 75.6666) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 198.94804 75.6666) (end 213.908 75.6666) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 213.908 75.6666) (end 214.4141 76.1727) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 225.977965 75.317479) (end 218.574008 75.317477) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 218.574008 75.317477) (end 217.718785 76.1727) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 217.718785 76.1727) (end 214.4141 76.1727) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 194.4878 97.8027) (end 196.3801 100.7237) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 186.2201 99.59233) (end 186.2201 97.8027) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 186.2201 100.7237) (end 186.2201 99.59233) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 178.43417 97.8027) (end 183.3499 97.8027) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 181.5339 75.6666) (end 181.54396 75.6666) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 177.82647 98.4104) (end 178.43417 97.8027) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 176.6951 98.4104) (end 177.82647 98.4104) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 183.3499 97.8027) (end 186.2201 97.8027) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 186.2201 97.8027) (end 194.4878 97.8027) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 243.408099 117.881299) (end 243.4463 117.9195) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 242.6081 100.7237) (end 243.408099 101.523699) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 243.408099 101.523699) (end 243.408099 117.881299) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 243.408099 117.881299) (end 243.408099 127.076301) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 237.691199 127.076301) (end 235.1405 129.627) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 243.408099 127.076301) (end 237.691199 127.076301) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 232.6494 132.1181) (end 235.1405 129.627) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 230.9241 132.1181) (end 232.6494 132.1181) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 198.8185 106.4387) (end 198.9455 106.3117) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 198.8185 110.2995) (end 198.8185 106.4387) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 196.3801 103.7463) (end 196.3801 100.7237) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 198.9455 106.3117) (end 196.3801 103.7463) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 175.0104 98.4104) (end 176.6951 98.4104) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 175 98.4) (end 175.0104 98.4104) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 175 78.145596) (end 175 98.4) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 181.54396 75.6666) (end 177.478996 75.6666) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 177.478996 75.6666) (end 175 78.145596) (width 1.27) (layer B.Cu) (net 1)) + (segment (start 176.6951 91.0209) (end 176.6951 95.9104) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 182.70113 95.7961) (end 181.1401 94.23507) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 214.6554 95.7961) (end 182.70113 95.7961) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 182.7657 73.6727) (end 214.4141 73.6727) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 181.1401 94.23507) (end 181.1401 93.1037) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 177.8762 89.8398) (end 176.6951 91.0209) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 181.1401 70.5104) (end 181.1401 72.0471) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 181.1401 72.0471) (end 182.7657 73.6727) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 177.8762 89.8398) (end 181.1401 93.1037) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 219.7481 93.9419) (end 219.7481 93.1037) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 241.0206 85.2805) (end 241.0206 86.3345) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 244.1956 89.5095) (end 244.1956 94.1451) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 241.0206 86.3345) (end 244.1956 89.5095) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 244.1956 94.1451) (end 243.4336 94.9071) (width 0.254) (layer B.Cu) (net 2)) + (via (at 245.237 125.1077) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 2)) + (segment (start 235.1405 127.127) (end 243.2177 127.127) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 243.2177 127.127) (end 245.237 125.1077) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 245.237 98.0059) (end 245.237 125.1077) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 243.0272 95.7961) (end 245.237 98.0059) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 208.0641 126.0348) (end 208.0641 124.4981) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 235.1405 127.127) (end 209.1563 127.127) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 209.1563 127.127) (end 208.0641 126.0348) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 219.6973 94.28587) (end 219.6973 95.7961) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 219.7481 94.23507) (end 219.6973 94.28587) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 219.7481 93.1037) (end 219.7481 94.23507) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 214.6554 95.7961) (end 219.6973 95.7961) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 219.6973 95.7961) (end 243.0272 95.7961) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 219.7481 72.39) (end 219.7481 70.2945) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 214.4141 73.6727) (end 218.4654 73.6727) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 218.4654 73.6727) (end 219.7481 72.39) (width 1.27) (layer B.Cu) (net 2)) + (segment (start 177.895402 89.221794) (end 177.8762 89.240996) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 177.8762 89.240996) (end 177.8762 89.8398) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 177.895402 73.755098) (end 177.895402 89.221794) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 181.1401 70.5104) (end 177.895402 73.755098) (width 1.27) (layer F.Cu) (net 2)) + (segment (start 228.2819 132.1181) (end 228.3841 132.1181) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 216.575999 172.225601) (end 216.575999 141.024001) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 215.726 173.0756) (end 216.575999 172.225601) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 216.575999 138.824001) (end 216.8 138.6) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 216.575999 141.024001) (end 216.575999 138.824001) (width 0.254) (layer F.Cu) (net 3)) + (via (at 216.8 138.6) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 3)) + (via (at 228.4 138.4) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 3)) + (segment (start 216.8 138.6) (end 228.2 138.6) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 228.2 138.6) (end 228.4 138.4) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 228.4 132.134) (end 228.3841 132.1181) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 228.4 138.4) (end 228.4 132.134) (width 0.254) (layer F.Cu) (net 3)) + (via (at 210.2 142.2) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 4)) + (segment (start 210.2 132.5222) (end 210.6041 132.1181) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 210.2 142.2) (end 210.2 132.5222) (width 0.254) (layer F.Cu) (net 4)) + (via (at 223.400006 142.2) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 4)) + (segment (start 210.2 142.2) (end 223.400006 142.2) (width 0.254) (layer B.Cu) (net 4)) + (segment (start 223.346 173.0756) (end 223.346 142.254006) (width 0.254) (layer F.Cu) (net 4)) + (segment (start 223.346 142.254006) (end 223.400006 142.2) (width 0.254) (layer F.Cu) (net 4)) + (via (at 218 136.6) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 5)) + (segment (start 218 132.3422) (end 218.2241 132.1181) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 218 136.6) (end 218 132.3422) (width 0.254) (layer F.Cu) (net 5)) + (via (at 220.8 136.600006) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 5)) + (segment (start 218 136.6) (end 220.799994 136.6) (width 0.254) (layer B.Cu) (net 5)) + (segment (start 220.799994 136.6) (end 220.8 136.600006) (width 0.254) (layer B.Cu) (net 5)) + (segment (start 220.806 136.606006) (end 220.8 136.600006) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 220.806 173.0756) (end 220.806 136.606006) (width 0.254) (layer F.Cu) (net 5)) + (segment (start 225.6822 127.2) (end 227.584101 125.298099) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 215.4 170.8616) (end 215.4 134.8) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 227.584101 125.298099) (end 228.3841 124.4981) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 213.186 173.0756) (end 215.4 170.8616) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 216.94599 133.25401) (end 216.94599 130.05401) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 216.94599 130.05401) (end 219.8 127.2) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 215.4 134.8) (end 216.94599 133.25401) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 219.8 127.2) (end 225.6822 127.2) (width 0.254) (layer F.Cu) (net 6)) + (segment (start 219.734131 125.298099) (end 219.964101 125.298099) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 219.964101 125.298099) (end 220.7641 124.4981) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 214.4 169.3216) (end 214.4 130.63223) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 210.646 173.0756) (end 214.4 169.3216) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 214.4 130.63223) (end 219.734131 125.298099) (width 0.254) (layer F.Cu) (net 7)) + (segment (start 210.6041 124.4981) (end 205.566 129.5362) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 205.566 145.410238) (end 205.566 173.0756) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 205.566 129.5362) (end 205.566 145.410238) (width 0.254) (layer F.Cu) (net 8)) + (segment (start 215.3412 70.62216) (end 217.47734 72.7583) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 217.47734 72.7583) (end 217.47734 75.2856) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 234.8992 75.2856) (end 236.728101 77.114501) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 217.47734 75.2856) (end 234.8992 75.2856) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 238.93673 77.9145) (end 240.0681 77.9145) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 198.9201 70.5104) (end 215.22944 70.5104) (width 0.254) (layer B.Cu) (net 9)) + (segment (start 215.22944 70.5104) (end 215.3412 70.62216) (width 0.254) (layer B.Cu) (net 9)) + (segment (start 238.93673 77.9145) (end 237.5281 77.9145) (width 0.254) (layer F.Cu) (net 9)) + (segment (start 236.728101 77.114501) (end 237.5281 77.9145) (width 0.254) (layer F.Cu) (net 9)) + (via (at 215.3412 70.62216) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 9)) + (segment (start 227.3681 100.7237) (end 229.9081 100.7237) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 183.6801 78.1304) (end 189.449089 83.899389) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 189.449089 83.899389) (end 207.261559 83.899391) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 226.568101 99.923701) (end 227.3681 100.7237) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 224.970933 98.326533) (end 226.568101 99.923701) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 207.261559 83.899391) (end 221.688701 98.326533) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 221.688701 98.326533) (end 224.970933 98.326533) (width 0.254) (layer F.Cu) (net 10)) + (segment (start 186.30646 97.13468) (end 192.34912 97.13468) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 192.34912 97.13468) (end 196.3801 93.1037) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 193.7385 95.7453) (end 196.3801 93.1037) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 183.6801 99.76104) (end 186.30646 97.13468) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 183.6801 100.7237) (end 183.6801 99.76104) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 175.4 99.71562) (end 175.4 74.774736) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 181.94528 102.45852) (end 178.1429 102.45852) (width 0.254) (layer F.Cu) (net 11)) + (via (at 175.4 74.2) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 11)) + (segment (start 183.6801 100.7237) (end 181.94528 102.45852) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 175.4 74.774736) (end 175.4 74.2) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 178.1429 102.45852) (end 175.4 99.71562) (width 0.254) (layer F.Cu) (net 11)) + (segment (start 175.4 71.625264) (end 175.4 73.625264) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 196.3801 70.5104) (end 193.885744 68.016044) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 175.4 73.625264) (end 175.4 74.2) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 193.885744 68.016044) (end 179.00922 68.016044) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 179.00922 68.016044) (end 175.4 71.625264) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 232.4481 100.7237) (end 234.9881 100.7237) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 207.449617 83.445381) (end 221.876758 97.872522) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 221.876758 97.872522) (end 229.596922 97.872522) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 231.648101 99.923701) (end 232.4481 100.7237) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 229.596922 97.872522) (end 231.648101 99.923701) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 191.535079 83.445379) (end 207.449617 83.445381) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 186.2201 78.1304) (end 191.535079 83.445379) (width 0.254) (layer F.Cu) (net 12)) + (segment (start 238.65947 100.7237) (end 240.0681 100.7237) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 237.5281 100.7237) (end 238.65947 100.7237) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 222.064815 97.418511) (end 234.222911 97.418511) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 188.7601 78.1304) (end 193.621069 82.991369) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 236.728101 99.923701) (end 237.5281 100.7237) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 234.222911 97.418511) (end 236.728101 99.923701) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 207.637675 82.991371) (end 222.064815 97.418511) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 193.621069 82.991369) (end 207.637675 82.991371) (width 0.254) (layer F.Cu) (net 13)) + (segment (start 219.771058 81.15997) (end 222.2881 78.642928) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 191.3001 78.1304) (end 194.329671 81.159971) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 223.69673 77.9145) (end 222.2881 77.9145) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 224.8281 77.9145) (end 223.69673 77.9145) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 222.2881 78.642928) (end 222.2881 77.9145) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 194.329671 81.159971) (end 219.771058 81.15997) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 186.2201 94.5769) (end 186.2201 93.1037) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 186.29376 94.65056) (end 186.2201 94.5769) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 193.74104 94.45752) (end 193.8401 94.35846) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 193.8401 94.35846) (end 193.8401 93.1037) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 186.29376 94.65056) (end 193.548 94.65056) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 189.1284 70.1421) (end 188.7601 70.5104) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 193.548 94.65056) (end 193.74104 94.45752) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 176.41025 74.232951) (end 176.41025 74.807687) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 188.7601 70.5104) (end 186.72048 68.47078) (width 0.254) (layer B.Cu) (net 15)) + (via (at 176.41025 74.807687) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 15)) + (segment (start 176.41025 71.32357) (end 176.41025 74.232951) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 186.72048 68.47078) (end 179.26304 68.47078) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 179.26304 68.47078) (end 176.41025 71.32357) (width 0.254) (layer B.Cu) (net 15)) + (via (at 176.399984 88.6) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 15)) + (segment (start 183.20512 94.65056) (end 182.48884 93.93428) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 186.29376 94.65056) (end 183.20512 94.65056) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 176.97472 88.6) (end 176.399984 88.6) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 182.48884 93.93428) (end 182.48884 91.39682) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 182.48884 91.39682) (end 179.69202 88.6) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 179.69202 88.6) (end 176.97472 88.6) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 176.399984 74.817953) (end 176.41025 74.807687) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 176.399984 88.6) (end 176.399984 74.817953) (width 0.254) (layer F.Cu) (net 15)) + (segment (start 229.9081 77.9145) (end 228.77673 77.9145) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 225.369061 76.787499) (end 226.496062 77.9145) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 224.275198 76.79944) (end 224.287139 76.787499) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 222.829061 76.787499) (end 222.841002 76.79944) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 219.583 80.70596) (end 221.161099 79.127861) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 222.841002 76.79944) (end 224.275198 76.79944) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 221.161099 77.112619) (end 221.486219 76.787499) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 224.287139 76.787499) (end 225.369061 76.787499) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 221.486219 76.787499) (end 222.829061 76.787499) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 228.77673 77.9145) (end 227.3681 77.9145) (width 0.254) (layer F.Cu) (net 16)) + (segment (start 221.161099 79.127861) (end 221.161099 77.112619) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 193.8401 78.1304) (end 196.41566 80.70596) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 226.496062 77.9145) (end 227.3681 77.9145) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 196.41566 80.70596) (end 219.583 80.70596) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 232.4481 77.9145) (end 233.57947 77.9145) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 196.3801 78.1304) (end 197.856489 79.606789) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 218.63239 76.69595) (end 220.9357 76.69595) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 220.9357 76.69595) (end 221.298162 76.333488) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 221.298162 76.333488) (end 225.557119 76.333489) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 231.226263 76.692663) (end 232.4481 77.9145) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 225.557119 76.333489) (end 225.916293 76.692663) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 225.916293 76.692663) (end 231.226263 76.692663) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 215.721551 79.606789) (end 218.63239 76.69595) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 197.856489 79.606789) (end 215.721551 79.606789) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 233.57947 77.9145) (end 234.9881 77.9145) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 191.3001 100.7237) (end 191.3001 106.2863) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 191.3001 106.2863) (end 191.3255 106.3117) (width 0.254) (layer F.Cu) (net 18)) + (segment (start 191.1985 110.2995) (end 192.32987 110.2995) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 193.8401 108.78927) (end 193.8401 100.7237) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 192.32987 110.2995) (end 193.8401 108.78927) (width 0.254) (layer F.Cu) (net 19)) + (segment (start 230.8606 89.6112) (end 230.8606 85.2805) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 227.3681 93.1037) (end 230.8606 89.6112) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 203.026 173.0756) (end 203.026 172.32631) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 211.125419 91.523268) (end 210.227394 91.523268) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 219.914536 90.542789) (end 218.934057 91.523268) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 210.227394 107.772606) (end 210.227394 92.421293) (width 0.254) (layer F.Cu) (net 20)) + (via (at 210.227394 91.523268) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 20)) + (segment (start 203.026 114.974) (end 210.227394 107.772606) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 224.807189 90.542789) (end 219.914536 90.542789) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 210.227394 92.421293) (end 210.227394 91.523268) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 218.934057 91.523268) (end 211.125419 91.523268) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 227.3681 93.1037) (end 224.807189 90.542789) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 203.026 173.0756) (end 203.026 114.974) (width 0.254) (layer F.Cu) (net 20)) + (segment (start 232.4481 93.1037) (end 233.4006 92.1512) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 233.4006 92.1512) (end 233.4006 85.2805) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 208.6 108.753408) (end 208.6 92.184066) (width 0.254) (layer F.Cu) (net 21)) + (via (at 208.6 91.286041) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 21)) + (segment (start 208.6 92.184066) (end 208.6 91.286041) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 209.108001 90.778041) (end 208.6 91.286041) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 210.121981 90.270052) (end 209.613987 90.778041) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 232.4481 93.1037) (end 229.429986 90.085586) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 209.613987 90.778041) (end 209.108001 90.778041) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 200.486 116.867408) (end 208.6 108.753408) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 219.54068 90.270052) (end 210.121981 90.270052) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 219.725154 90.085578) (end 219.54068 90.270052) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 200.486 173.0756) (end 200.486 116.867408) (width 0.254) (layer F.Cu) (net 21)) + (segment (start 229.429986 90.085586) (end 219.725154 90.085578) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 235.9406 85.2805) (end 235.9406 91.5162) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 235.9406 91.5162) (end 237.5281 93.1037) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 237.5281 93.1037) (end 234.055979 89.631579) (width 0.254) (layer B.Cu) (net 22)) + (via (at 206.975184 90.632233) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 22)) + (segment (start 206.975184 91.530258) (end 206.975184 90.632233) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 197.946 173.0756) (end 197.946 118.76534) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 206.975184 109.736156) (end 206.975184 91.530258) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 207.873209 90.632233) (end 206.975184 90.632233) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 197.946 118.76534) (end 206.975184 109.736156) (width 0.254) (layer F.Cu) (net 22)) + (segment (start 219.537097 89.631567) (end 219.352623 89.816041) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 208.181411 90.324031) (end 207.873209 90.632233) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 209.425931 90.324031) (end 208.181411 90.324031) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 209.933924 89.816041) (end 209.425931 90.324031) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 219.352623 89.816041) (end 209.933924 89.816041) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 234.055979 89.631579) (end 219.537097 89.631567) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 242.6081 93.1037) (end 238.4806 88.9762) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 238.4806 88.9762) (end 238.4806 85.2805) (width 0.254) (layer F.Cu) (net 23)) + (via (at 204.886927 91.162773) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 23)) + (segment (start 204.886927 111.182345) (end 204.886927 92.060798) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 195.406 120.663272) (end 204.886927 111.182345) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 204.886927 92.060798) (end 204.886927 91.162773) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 195.406 173.0756) (end 195.406 120.663272) (width 0.254) (layer F.Cu) (net 23)) + (segment (start 207.054134 89.362032) (end 206.687668 89.362032) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 209.745868 89.36203) (end 209.237875 89.870021) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 206.687668 89.362032) (end 205.521926 90.527774) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 205.521926 90.527774) (end 204.886927 91.162773) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 207.562124 89.870022) (end 207.054134 89.362032) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 234.583543 89.177557) (end 219.349038 89.177558) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 219.349038 89.177558) (end 219.164566 89.36203) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 219.164566 89.36203) (end 209.745868 89.36203) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 238.4806 85.2805) (end 234.583543 89.177557) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 209.237875 89.870021) (end 207.562124 89.870022) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 245.729167 74.266467) (end 245.729167 79.924233) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 245.729167 79.924233) (end 244.9576 80.6958) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 244.983 73.5203) (end 245.729167 74.266467) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 230.5939 73.5203) (end 244.983 73.5203) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 244.9576 80.6958) (end 225.2853 80.6958) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 221.500599 84.480501) (end 220.7006 85.2805) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 225.2853 80.6958) (end 221.500599 84.480501) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 227.3681 70.2945) (end 230.5939 73.5203) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 207.3783 85.2805) (end 206.984599 85.674201) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 206.984599 85.674201) (end 206.5782 86.0806) (width 0.254) (layer B.Cu) (net 24)) + (via (at 206.5782 86.0806) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 24)) + (segment (start 220.7006 85.2805) (end 207.3783 85.2805) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 206.5782 86.978625) (end 206.5782 86.0806) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 203.2 90.356825) (end 206.5782 86.978625) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 203.2 112.227204) (end 203.2 90.356825) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 192.866 122.561204) (end 203.2 112.227204) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 192.866 173.0756) (end 192.866 122.561204) (width 0.254) (layer F.Cu) (net 24)) + (segment (start 227.1395 81.3816) (end 244.956164 81.3816) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 244.9068 72.4535) (end 234.6071 72.4535) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 244.956164 81.3816) (end 246.183178 80.154586) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 246.183178 80.154586) (end 246.183178 73.729878) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 246.183178 73.729878) (end 244.9068 72.4535) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 223.2406 85.2805) (end 227.1395 81.3816) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 233.248099 71.094499) (end 232.4481 70.2945) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 234.6071 72.4535) (end 233.248099 71.094499) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 223.701099 93.644661) (end 223.701099 85.740999) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 223.701099 85.740999) (end 223.561633 85.601533) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 223.701099 93.644661) (end 226.431658 96.37522) (width 0.254) (layer F.Cu) (net 25)) + (via (at 204.4192 87.03799) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 25)) + (segment (start 190.326 173.0756) (end 190.326 124.459136) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 203.784201 87.672989) (end 204.4192 87.03799) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 202.3872 112.397936) (end 202.3872 89.06999) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 190.326 124.459136) (end 202.3872 112.397936) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 202.3872 89.06999) (end 203.784201 87.672989) (width 0.254) (layer F.Cu) (net 25)) + (segment (start 207.938239 87.037999) (end 207.739926 87.236312) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 205.317225 87.03799) (end 204.4192 87.03799) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 205.515547 87.236312) (end 205.317225 87.03799) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 221.483101 87.037999) (end 207.938239 87.037999) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 207.739926 87.236312) (end 205.515547 87.236312) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 223.2406 85.2805) (end 221.483101 87.037999) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 244.328232 82.6516) (end 228.4095 82.6516) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 246.637189 72.659889) (end 246.637189 80.342643) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 246.637189 80.342643) (end 244.328232 82.6516) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 245.745 71.7677) (end 246.637189 72.659889) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 239.0013 71.7677) (end 245.745 71.7677) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 226.580599 84.480501) (end 225.7806 85.2805) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 228.4095 82.6516) (end 226.580599 84.480501) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 237.5281 70.2945) (end 239.0013 71.7677) (width 0.254) (layer F.Cu) (net 26)) + (via (at 201.65379 89.9033) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 26)) + (segment (start 187.786 173.0756) (end 187.786 126.357068) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 187.786 126.357068) (end 201.65379 112.489278) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 201.65379 112.489278) (end 201.65379 90.478036) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 201.65379 90.478036) (end 201.65379 89.9033) (width 0.254) (layer F.Cu) (net 26)) + (segment (start 224.980601 86.080499) (end 225.7806 85.2805) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 208.861761 88.962001) (end 209.793212 88.03055) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 209.793212 88.03055) (end 223.03055 88.03055) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 207.430248 88.45401) (end 207.938239 88.962001) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 201.65379 89.9033) (end 203.10308 88.45401) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 207.938239 88.962001) (end 208.861761 88.962001) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 223.03055 88.03055) (end 224.980601 86.080499) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 203.10308 88.45401) (end 207.430248 88.45401) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 247.0912 71.4629) (end 247.0912 80.5307) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 244.2972 83.3247) (end 230.2764 83.3247) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 245.9228 70.2945) (end 247.0912 71.4629) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 242.6081 70.2945) (end 245.9228 70.2945) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 247.0912 80.5307) (end 244.2972 83.3247) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 230.2764 83.3247) (end 228.3206 85.2805) (width 0.254) (layer F.Cu) (net 27)) + (via (at 200.799793 90.95421) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 27)) + (segment (start 200.799793 90.95421) (end 200.799793 112.701191) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 200.799793 112.701191) (end 185.246 128.254984) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 185.246 171.9716) (end 185.246 173.0756) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 185.246 128.254984) (end 185.246 171.9716) (width 0.254) (layer F.Cu) (net 27)) + (segment (start 207.750182 89.416012) (end 209.049819 89.416011) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 200.799793 90.95421) (end 203.671726 90.95421) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 203.671726 90.95421) (end 205.717915 88.908021) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 205.717915 88.908021) (end 207.242191 88.908021) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 207.242191 88.908021) (end 207.750182 89.416012) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 209.049819 89.416011) (end 209.742283 88.723547) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 227.520601 86.080499) (end 228.3206 85.2805) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 224.877553 88.723547) (end 227.520601 86.080499) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 209.742283 88.723547) (end 224.877553 88.723547) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 186.36234 95.50146) (end 188.7601 93.1037) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 181.1401 98.61042) (end 184.24906 95.50146) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 181.1401 100.7237) (end 181.1401 98.61042) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 184.24906 95.50146) (end 186.36234 95.50146) (width 0.254) (layer F.Cu) (net 28)) + (segment (start 191.3001 93.1037) (end 191.3001 90.757028) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 191.3001 90.757028) (end 191.487814 90.569314) (width 0.254) (layer F.Cu) (net 29)) + (via (at 191.487814 90.569314) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 29)) + (segment (start 194.057128 88) (end 208.4 88) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 191.487814 90.569314) (end 194.057128 88) (width 0.254) (layer B.Cu) (net 29)) + (via (at 208.4 88) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 29)) + (via (at 216.39996 108.6) (size 1.27) (drill 0.7112) (layers F.Cu B.Cu) (net 29)) + (segment (start 230.9241 123.12414) (end 216.400036 108.600076) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 216.400036 108.600076) (end 216.39996 108.6) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 230.9241 124.4981) (end 230.9241 123.12414) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 216.6 108.39996) (end 216.39996 108.6) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 216.6 95.301975) (end 216.6 108.39996) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 208.4 88) (end 209.298025 88) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 209.298025 88) (end 216.6 95.301975) (width 0.254) (layer F.Cu) (net 29)) + (segment (start 245.275156 74.841156) (end 245.275156 79.377536) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 226.29622 74.30262) (end 244.73662 74.30262) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 244.952572 79.70012) (end 220.47972 79.70012) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 244.73662 74.30262) (end 245.275156 74.841156) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 245.275156 79.377536) (end 244.952572 79.70012) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 220.47972 79.70012) (end 219.7481 78.9685) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 222.2881 70.2945) (end 226.29622 74.30262) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 222.2881 70.2945) (end 223.41947 70.2945) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 218.6686 89.4842) (end 222.2881 93.1037) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 218.6686 80.048) (end 218.6686 82.11566) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 218.6686 82.11566) (end 218.6686 89.4842) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 218.6686 81.36128) (end 218.6686 82.11566) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 219.7481 77.9145) (end 219.7481 78.9685) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 219.7481 78.9685) (end 219.7481 77.9145) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 219.7481 78.9685) (end 218.6686 80.048) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 185.096188 91.687612) (end 183.6801 93.1037) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 204.051278 91.687612) (end 185.096188 91.687612) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 205.328867 92.965201) (end 204.051278 91.687612) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 218.138717 92.965201) (end 205.328867 92.965201) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 220.103918 91) (end 218.138717 92.965201) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 220.1844 91) (end 220.103918 91) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 222.2881 93.1037) (end 220.1844 91) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 222.2881 93.1037) (end 226.1489 96.9645) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 226.1489 96.9645) (end 237.334794 96.9645) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 238.6076 102.3493) (end 220.3197 102.3493) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 220.3197 102.3493) (end 219.7481 101.7777) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 238.941099 102.015801) (end 238.6076 102.3493) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 238.941099 98.570805) (end 238.941099 102.015801) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 219.7481 101.7777) (end 219.7481 100.7237) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 237.334794 96.9645) (end 238.941099 98.570805) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 213.944099 131.318101) (end 213.1441 132.1181) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 219.4 124.990162) (end 213.944099 130.446063) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 241.4 101.4) (end 219.4 123.4) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 219.4 123.4) (end 219.4 124.990162) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 225.628099 93.903699) (end 226.503699 93.903699) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 226.503699 93.903699) (end 229 96.4) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 229 96.4) (end 238.8 96.4) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 213.944099 130.446063) (end 213.944099 131.318101) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 238.8 96.4) (end 241.4 99) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 224.8281 93.1037) (end 225.628099 93.903699) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 241.4 99) (end 241.4 101.4) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 231.6044 94.8) (end 229.9081 93.1037) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 244.6 118.4) (end 244.6 100) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 239.4 94.8) (end 231.6044 94.8) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 228.2 120.2) (end 242.8 120.2) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 215.6841 130.673833) (end 219.757935 126.6) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 215.6841 132.1181) (end 215.6841 130.673833) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 219.757935 126.6) (end 225.6 126.6) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 242.8 120.2) (end 244.6 118.4) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 225.6 126.6) (end 227.257099 124.942901) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 227.257099 124.942901) (end 227.257099 121.142901) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 244.6 100) (end 239.4 94.8) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 227.257099 121.142901) (end 228.2 120.2) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 240.272769 94.230701) (end 245.054011 99.011943) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 234.9881 93.1037) (end 236.115101 94.230701) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 245.053999 119.588069) (end 239.188057 125.454011) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 234.388057 125.454011) (end 229.30498 130.537088) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 224.885112 130.537088) (end 224.104099 131.318101) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 245.054011 99.011943) (end 245.053999 119.588069) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 229.30498 130.537088) (end 224.885112 130.537088) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 224.104099 131.318101) (end 223.3041 132.1181) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 236.115101 94.230701) (end 240.272769 94.230701) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 239.188057 125.454011) (end 234.388057 125.454011) (width 0.254) (layer F.Cu) (net 34)) + (segment (start 239.376114 125.908022) (end 234.576121 125.908015) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 245.508016 119.77612) (end 239.376114 125.908022) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 234.576121 125.908015) (end 229.493037 130.991099) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 226.644099 131.318101) (end 225.8441 132.1181) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 226.971101 130.991099) (end 226.644099 131.318101) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 229.493037 130.991099) (end 226.971101 130.991099) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 245.508016 98.543616) (end 245.508016 119.77612) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 240.0681 93.1037) (end 245.508016 98.543616) (width 0.254) (layer F.Cu) (net 35)) + (segment (start 178.2 66.2) (end 172.600002 71.800002) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 207.408033 118.762033) (end 212.344101 123.698101) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 240.0681 70.2945) (end 235.9736 66.2) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 174.235829 118.762033) (end 207.408033 118.762033) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 172.600002 71.800002) (end 172.600003 117.126207) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 212.344101 123.698101) (end 213.1441 124.4981) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 172.600003 117.126207) (end 174.235829 118.762033) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 235.9736 66.2) (end 178.2 66.2) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 231.347611 66.654011) (end 178.388055 66.654013) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 174.423886 118.308022) (end 209.494022 118.308022) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 209.494022 118.308022) (end 214.884101 123.698101) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 214.884101 123.698101) (end 215.6841 124.4981) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 173.054012 71.988058) (end 173.054013 116.938149) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 178.388055 66.654013) (end 173.054012 71.988058) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 234.9881 70.2945) (end 231.347611 66.654011) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 173.054013 116.938149) (end 174.423886 118.308022) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 173.508022 72.176114) (end 173.508023 116.750091) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 229.9081 70.2945) (end 226.721623 67.108023) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 174.611943 117.854011) (end 216.660011 117.854011) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 173.508023 116.750091) (end 174.611943 117.854011) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 222.504101 123.698101) (end 223.3041 124.4981) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 216.660011 117.854011) (end 222.504101 123.698101) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 178.576113 67.108023) (end 173.508022 72.176114) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 226.721623 67.108023) (end 178.576113 67.108023) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 225.044101 123.698101) (end 225.8441 124.4981) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 218.746 117.4) (end 225.044101 123.698101) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 174.8 117.4) (end 218.746 117.4) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 173.962033 116.562033) (end 174.8 117.4) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 173.962033 72.364171) (end 173.962033 116.562033) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 178.764171 67.562033) (end 173.962033 72.364171) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 224.8281 70.2945) (end 222.095633 67.562033) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 222.095633 67.562033) (end 178.764171 67.562033) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 217.424101 125.298099) (end 218.2241 124.4981) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 211.8 130.9222) (end 217.424101 125.298099) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 208.106 173.0756) (end 211.8 169.3816) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 211.8 169.3816) (end 211.8 130.9222) (width 0.254) (layer F.Cu) (net 40)) + (segment (start 219.115999 133.766201) (end 220.7641 132.1181) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 219.115999 141.515999) (end 219.115999 133.766201) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 219.115999 141.515999) (end 219.115999 141.284001) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 219.115999 172.225601) (end 219.115999 141.515999) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 218.266 173.0756) (end 219.115999 172.225601) (width 0.254) (layer F.Cu) (net 41)) + (segment (start 181.1401 77.0764) (end 181.1401 78.1304) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 223.69673 100.7237) (end 222.2881 100.7237) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 224.8281 100.7237) (end 223.69673 100.7237) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 221.9706 100.4062) (end 222.2881 100.7237) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 221.9706 99.3521) (end 221.9706 100.4062) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 206.9719 84.3534) (end 221.9706 99.3521) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 186.3091 84.3534) (end 206.9719 84.3534) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 181.1401 78.1304) (end 181.1401 79.1844) (width 0.254) (layer F.Cu) (net 42)) + (segment (start 181.1401 79.1844) (end 186.3091 84.3534) (width 0.254) (layer F.Cu) (net 42)) + +) diff --git a/hardware/interface-osi/unikbd-osi.pro b/hardware/interface-osi/unikbd-osi.pro new file mode 100644 index 0000000..8dd6581 --- /dev/null +++ b/hardware/interface-osi/unikbd-osi.pro @@ -0,0 +1,265 @@ +update=6/24/2019 2:07:05 PM +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] +[pcbnew] +version=1 +PageLayoutDescrFile= +LastNetListRead=unikbd.net +CopperLayerCount=2 +BoardThickness=1.6 +AllowMicroVias=0 +AllowBlindVias=0 +RequireCourtyardDefinitions=0 +ProhibitOverlappingCourtyards=1 +MinTrackWidth=0.2 +MinViaDiameter=0.4 +MinViaDrill=0.3 +MinMicroViaDiameter=0.2 +MinMicroViaDrill=0.09999999999999999 +MinHoleToHole=0.25 +TrackWidth1=0.254 +TrackWidth2=0.254 +TrackWidth3=0.508 +TrackWidth4=1.27 +ViaDiameter1=0.8128 +ViaDrill1=0.4064 +ViaDiameter2=1.27 +ViaDrill2=0.7112 +dPairWidth1=0.2032 +dPairGap1=0.254 +dPairViaGap1=0.25 +SilkLineWidth=0.15 +SilkTextSizeV=1 +SilkTextSizeH=1 +SilkTextSizeThickness=0.15 +SilkTextItalic=0 +SilkTextUpright=1 +CopperLineWidth=0.2 +CopperTextSizeV=1.5 +CopperTextSizeH=1.5 +CopperTextThickness=0.3 +CopperTextItalic=0 +CopperTextUpright=1 +EdgeCutLineWidth=0.09999999999999999 +CourtyardLineWidth=0.05 +OthersLineWidth=0.15 +OthersTextSizeV=1 +OthersTextSizeH=1 +OthersTextSizeThickness=0.15 +OthersTextItalic=0 +OthersTextUpright=1 +SolderMaskClearance=0 +SolderMaskMinWidth=0 +SolderPasteClearance=0 +SolderPasteRatio=-0 +[pcbnew/Layer.F.Cu] +Name=F.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.In1.Cu] +Name=In1.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In2.Cu] +Name=In2.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In3.Cu] +Name=In3.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In4.Cu] +Name=In4.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In5.Cu] +Name=In5.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In6.Cu] +Name=In6.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In7.Cu] +Name=In7.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In8.Cu] +Name=In8.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In9.Cu] +Name=In9.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In10.Cu] +Name=In10.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In11.Cu] +Name=In11.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In12.Cu] +Name=In12.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In13.Cu] +Name=In13.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In14.Cu] +Name=In14.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In15.Cu] +Name=In15.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In16.Cu] +Name=In16.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In17.Cu] +Name=In17.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In18.Cu] +Name=In18.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In19.Cu] +Name=In19.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In20.Cu] +Name=In20.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In21.Cu] +Name=In21.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In22.Cu] +Name=In22.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In23.Cu] +Name=In23.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In24.Cu] +Name=In24.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In25.Cu] +Name=In25.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In26.Cu] +Name=In26.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In27.Cu] +Name=In27.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In28.Cu] +Name=In28.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In29.Cu] +Name=In29.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.In30.Cu] +Name=In30.Cu +Type=0 +Enabled=0 +[pcbnew/Layer.B.Cu] +Name=B.Cu +Type=0 +Enabled=1 +[pcbnew/Layer.B.Adhes] +Enabled=1 +[pcbnew/Layer.F.Adhes] +Enabled=1 +[pcbnew/Layer.B.Paste] +Enabled=1 +[pcbnew/Layer.F.Paste] +Enabled=1 +[pcbnew/Layer.B.SilkS] +Enabled=1 +[pcbnew/Layer.F.SilkS] +Enabled=1 +[pcbnew/Layer.B.Mask] +Enabled=1 +[pcbnew/Layer.F.Mask] +Enabled=1 +[pcbnew/Layer.Dwgs.User] +Enabled=1 +[pcbnew/Layer.Cmts.User] +Enabled=1 +[pcbnew/Layer.Eco1.User] +Enabled=1 +[pcbnew/Layer.Eco2.User] +Enabled=1 +[pcbnew/Layer.Edge.Cuts] +Enabled=1 +[pcbnew/Layer.Margin] +Enabled=1 +[pcbnew/Layer.B.CrtYd] +Enabled=1 +[pcbnew/Layer.F.CrtYd] +Enabled=1 +[pcbnew/Layer.B.Fab] +Enabled=1 +[pcbnew/Layer.F.Fab] +Enabled=1 +[pcbnew/Layer.Rescue] +Enabled=0 +[pcbnew/Netclasses] +[pcbnew/Netclasses/Default] +Name=Default +Clearance=0.2 +TrackWidth=0.254 +ViaDiameter=0.8128 +ViaDrill=0.4064 +uViaDiameter=0.3048 +uViaDrill=0.1016 +dPairWidth=0.2032 +dPairGap=0.254 +dPairViaGap=0.25 +[pcbnew/Netclasses/1] +Name=power1 +Clearance=0.254 +TrackWidth=1.27 +ViaDiameter=1.27 +ViaDrill=0.7112 +uViaDiameter=0.3048 +uViaDrill=0.1016 +dPairWidth=0.2032 +dPairGap=0.254 +dPairViaGap=0.25 +[pcbnew/Netclasses/2] +Name=signal +Clearance=0.2032 +TrackWidth=0.254 +ViaDiameter=0.8128 +ViaDrill=0.4064 +uViaDiameter=0.3048 +uViaDrill=0.1016 +dPairWidth=0.2032 +dPairGap=0.254 +dPairViaGap=0.25 diff --git a/hardware/interface-osi/unikbd-osi.sch b/hardware/interface-osi/unikbd-osi.sch new file mode 100644 index 0000000..4d1d018 --- /dev/null +++ b/hardware/interface-osi/unikbd-osi.sch @@ -0,0 +1,1119 @@ +EESchema Schematic File Version 4 +LIBS:unikbd-osi-cache +EELAYER 29 0 +EELAYER END +$Descr USLetter 11000 8500 +encoding utf-8 +Sheet 1 3 +Title "OSI Interface for Universal Retro Keyboard" +Date "2019-08-25" +Rev "1.0" +Comp "OSIWeb.org" +Comment1 "Main Keyboard Interface" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L 74xx:7402 U1 +U 3 1 5BCB9760 +P 1900 5850 +F 0 "U1" H 1900 6175 50 0000 C CNN +F 1 "7402" H 1900 6084 50 0000 C CNN +F 2 "Package_DIP:DIP-14_W7.62mm" H 1900 5850 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn7402" H 1900 5850 50 0001 C CNN + 3 1900 5850 + 1 0 0 -1 +$EndComp +$Comp +L 74xx:7402 U1 +U 4 1 5BCB97C4 +P 2650 5250 +F 0 "U1" H 2650 5575 50 0000 C CNN +F 1 "7402" H 2650 5484 50 0000 C CNN +F 2 "Package_DIP:DIP-14_W7.62mm" H 2650 5250 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn7402" H 2650 5250 50 0001 C CNN + 4 2650 5250 + 1 0 0 -1 +$EndComp +$Comp +L 74xx:7402 U1 +U 5 1 5BCB9829 +P 1150 7050 +F 0 "U1" H 1380 7096 50 0000 L CNN +F 1 "7402" H 1380 7005 50 0000 L CNN +F 2 "Package_DIP:DIP-14_W7.62mm" H 1150 7050 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn7402" H 1150 7050 50 0001 C CNN + 5 1150 7050 + 1 0 0 -1 +$EndComp +$Comp +L Connector_Generic:Conn_01x16 J1 +U 1 1 5BCB9E1D +P 900 3300 +F 0 "J1" H 820 2275 50 0000 C CNN +F 1 "Conn_01x16" H 820 2366 50 0000 C CNN +F 2 "Package_DIP:DIP-16_W7.62mm_Socket" H 900 3300 50 0001 C CNN +F 3 "~" H 900 3300 50 0001 C CNN + 1 900 3300 + -1 0 0 -1 +$EndComp +Wire Wire Line + 1100 3300 1950 3300 +Wire Wire Line + 1950 3300 1950 4300 +$Comp +L power:GND #PWR07 +U 1 1 5BCC068F +P 1950 4300 +F 0 "#PWR07" H 1950 4050 50 0001 C CNN +F 1 "GND" H 1955 4127 50 0000 C CNN +F 2 "" H 1950 4300 50 0001 C CNN +F 3 "" H 1950 4300 50 0001 C CNN + 1 1950 4300 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR03 +U 1 1 5BCC0E14 +P 1750 2500 +F 0 "#PWR03" H 1750 2350 50 0001 C CNN +F 1 "+5V" H 1765 2673 50 0000 C CNN +F 2 "" H 1750 2500 50 0001 C CNN +F 3 "" H 1750 2500 50 0001 C CNN + 1 1750 2500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1100 3500 1600 3500 +Wire Wire Line + 1100 3800 1450 3800 +Wire Wire Line + 1450 5950 1600 5950 +Wire Wire Line + 2350 5350 1450 5350 +Connection ~ 1450 5350 +Wire Wire Line + 1450 5350 1450 5950 +Wire Wire Line + 2200 5850 6250 5850 +Wire Wire Line + 6250 5850 6250 3750 +Wire Wire Line + 1450 3800 1450 5350 +Entry Wire Line + 7700 2950 7800 2850 +Entry Wire Line + 7700 3050 7800 2950 +Entry Wire Line + 7700 2850 7800 2750 +Entry Wire Line + 7700 3150 7800 3050 +Entry Wire Line + 7700 3250 7800 3150 +Entry Wire Line + 7700 3350 7800 3250 +Entry Wire Line + 7700 3450 7800 3350 +Entry Wire Line + 7700 3550 7800 3450 +Entry Wire Line + 7800 1550 7900 1450 +Entry Wire Line + 7800 1650 7900 1550 +Entry Wire Line + 7800 1750 7900 1650 +Entry Wire Line + 7800 1850 7900 1750 +Entry Wire Line + 7800 1950 7900 1850 +Entry Wire Line + 7800 2050 7900 1950 +Entry Wire Line + 7800 2150 7900 2050 +Entry Wire Line + 7800 2650 7900 2550 +Entry Wire Line + 7800 2750 7900 2650 +Entry Wire Line + 7800 2850 7900 2750 +Entry Wire Line + 7800 2950 7900 2850 +Entry Wire Line + 7800 1450 7900 1350 +Entry Wire Line + 7800 2250 7900 2150 +Entry Wire Line + 7800 2350 7900 2250 +Entry Wire Line + 7800 2450 7900 2350 +Entry Wire Line + 7800 2550 7900 2450 +Text Label 8050 2450 0 50 ~ 0 +Row4 +Text Label 8050 2350 0 50 ~ 0 +Row5 +Text Label 8050 2250 0 50 ~ 0 +Row6 +Text Label 8050 2150 0 50 ~ 0 +Row7 +Wire Wire Line + 3100 1600 3100 1700 +Wire Wire Line + 3100 1700 3300 1700 +Wire Wire Line + 3100 1600 3300 1600 +Wire Wire Line + 3100 1800 3100 1900 +Wire Wire Line + 3100 1900 3300 1900 +Wire Wire Line + 3100 1800 3300 1800 +Wire Wire Line + 3300 2100 3100 2100 +Wire Wire Line + 3100 2100 3100 2000 +Wire Wire Line + 3100 2000 3300 2000 +Wire Wire Line + 3300 2300 3100 2300 +Wire Wire Line + 3100 2300 3100 2200 +Wire Wire Line + 3100 2200 3300 2200 +Wire Wire Line + 2450 3400 2450 4450 +Wire Wire Line + 2450 4450 3100 4450 +Wire Wire Line + 2550 3200 2550 4250 +Wire Wire Line + 2550 4250 3100 4250 +Wire Wire Line + 2650 3100 2650 4050 +Wire Wire Line + 2650 4050 3100 4050 +Wire Wire Line + 2750 3000 2750 3850 +Wire Wire Line + 2750 3850 3100 3850 +Wire Wire Line + 3100 3850 3100 3950 +Wire Wire Line + 3100 3950 3300 3950 +Connection ~ 3100 3850 +Wire Wire Line + 3100 3850 3300 3850 +Wire Wire Line + 3100 4050 3100 4150 +Wire Wire Line + 3100 4150 3300 4150 +Connection ~ 3100 4050 +Wire Wire Line + 3100 4050 3300 4050 +Wire Wire Line + 3100 4250 3100 4350 +Wire Wire Line + 3100 4350 3300 4350 +Connection ~ 3100 4250 +Wire Wire Line + 3100 4250 3300 4250 +Wire Wire Line + 3100 4450 3100 4550 +Wire Wire Line + 3100 4550 3300 4550 +Connection ~ 3100 4450 +Wire Wire Line + 3100 4450 3300 4450 +Wire Wire Line + 4300 1600 6200 1600 +Wire Wire Line + 4300 1700 6150 1700 +Wire Wire Line + 6150 1700 6150 2950 +Wire Wire Line + 4300 1800 6100 1800 +Wire Wire Line + 4300 1900 6050 1900 +Wire Wire Line + 6050 1900 6050 3150 +Wire Wire Line + 4300 3850 6050 3850 +Wire Wire Line + 6050 3850 6050 3250 +Wire Wire Line + 4300 3950 6100 3950 +Wire Wire Line + 6100 3950 6100 3350 +Wire Wire Line + 4300 4050 6150 4050 +Wire Wire Line + 6150 4050 6150 3450 +Wire Wire Line + 4300 4150 6200 4150 +Wire Wire Line + 6200 4150 6200 3550 +Wire Wire Line + 4300 2150 4850 2150 +Wire Wire Line + 4300 2250 4950 2250 +Wire Wire Line + 4300 2350 5050 2350 +Wire Wire Line + 4300 2450 5150 2450 +Wire Wire Line + 4300 4400 5250 4400 +Wire Wire Line + 4300 4500 5350 4500 +Wire Wire Line + 4300 4600 5450 4600 +Wire Wire Line + 5700 4700 5550 4700 +Text Label 4350 2450 0 50 ~ 0 +Col0 +Text Label 4350 2350 0 50 ~ 0 +Col1 +Text Label 4350 2250 0 50 ~ 0 +Col2 +Text Label 4350 2150 0 50 ~ 0 +Col3 +Text Label 4350 4700 0 50 ~ 0 +Col4 +Text Label 4350 4600 0 50 ~ 0 +Col5 +Text Label 4350 4500 0 50 ~ 0 +Col6 +Text Label 4350 4400 0 50 ~ 0 +Col7 +Wire Bus Line + 7800 5050 5800 5050 +Entry Wire Line + 5700 2150 5800 2250 +Entry Wire Line + 5700 2350 5800 2450 +Entry Wire Line + 5700 2450 5800 2550 +Entry Wire Line + 5700 2250 5800 2350 +Entry Wire Line + 5700 4400 5800 4500 +Entry Wire Line + 5700 4500 5800 4600 +Entry Wire Line + 5700 4600 5800 4700 +Entry Wire Line + 5700 4700 5800 4800 +Wire Wire Line + 2950 5250 3000 5250 +Wire Wire Line + 3000 2500 3100 2500 +Wire Wire Line + 3300 4750 3100 4750 +Connection ~ 3000 4750 +Wire Wire Line + 3000 2500 3000 4750 +Wire Wire Line + 3000 4750 3000 5250 +$Comp +L power:+5V #PWR08 +U 1 1 5BF3C034 +P 3800 1100 +F 0 "#PWR08" H 3800 950 50 0001 C CNN +F 1 "+5V" H 3815 1273 50 0000 C CNN +F 2 "" H 3800 1100 50 0001 C CNN +F 3 "" H 3800 1100 50 0001 C CNN + 1 3800 1100 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR010 +U 1 1 5BF3C078 +P 3800 3500 +F 0 "#PWR010" H 3800 3350 50 0001 C CNN +F 1 "+5V" H 3815 3673 50 0000 C CNN +F 2 "" H 3800 3500 50 0001 C CNN +F 3 "" H 3800 3500 50 0001 C CNN + 1 3800 3500 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR015 +U 1 1 5BF3C0BC +P 6850 2500 +F 0 "#PWR015" H 6850 2350 50 0001 C CNN +F 1 "+5V" H 6865 2673 50 0000 C CNN +F 2 "" H 6850 2500 50 0001 C CNN +F 3 "" H 6850 2500 50 0001 C CNN + 1 6850 2500 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR01 +U 1 1 5BF3C16C +P 1150 6500 +F 0 "#PWR01" H 1150 6350 50 0001 C CNN +F 1 "+5V" H 1165 6673 50 0000 C CNN +F 2 "" H 1150 6500 50 0001 C CNN +F 3 "" H 1150 6500 50 0001 C CNN + 1 1150 6500 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR02 +U 1 1 5BF3C1D2 +P 1150 7700 +F 0 "#PWR02" H 1150 7450 50 0001 C CNN +F 1 "GND" H 1155 7527 50 0000 C CNN +F 2 "" H 1150 7700 50 0001 C CNN +F 3 "" H 1150 7700 50 0001 C CNN + 1 1150 7700 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR016 +U 1 1 5BF3C258 +P 6850 4250 +F 0 "#PWR016" H 6850 4000 50 0001 C CNN +F 1 "GND" H 6855 4077 50 0000 C CNN +F 2 "" H 6850 4250 50 0001 C CNN +F 3 "" H 6850 4250 50 0001 C CNN + 1 6850 4250 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR011 +U 1 1 5BF42928 +P 3800 5250 +F 0 "#PWR011" H 3800 5000 50 0001 C CNN +F 1 "GND" H 3805 5077 50 0000 C CNN +F 2 "" H 3800 5250 50 0001 C CNN +F 3 "" H 3800 5250 50 0001 C CNN + 1 3800 5250 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR09 +U 1 1 5BF48F7E +P 3800 3000 +F 0 "#PWR09" H 3800 2750 50 0001 C CNN +F 1 "GND" H 3805 2827 50 0000 C CNN +F 2 "" H 3800 3000 50 0001 C CNN +F 3 "" H 3800 3000 50 0001 C CNN + 1 3800 3000 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR014 +U 1 1 5BF5C280 +P 6350 3950 +F 0 "#PWR014" H 6350 3700 50 0001 C CNN +F 1 "GND" H 6355 3777 50 0000 C CNN +F 2 "" H 6350 3950 50 0001 C CNN +F 3 "" H 6350 3950 50 0001 C CNN + 1 6350 3950 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3800 2900 3800 3000 +Wire Wire Line + 3800 5150 3800 5250 +Wire Wire Line + 1150 7550 1150 7700 +Wire Wire Line + 1150 6500 1150 6550 +Wire Wire Line + 6850 4150 6850 4250 +Wire Wire Line + 6850 2550 6850 2500 +Wire Wire Line + 6350 3950 6350 3850 +$Comp +L power:+5V #PWR04 +U 1 1 5BFDC5C3 +P 1600 6700 +F 0 "#PWR04" H 1600 6550 50 0001 C CNN +F 1 "+5V" H 1615 6873 50 0000 C CNN +F 2 "" H 1600 6700 50 0001 C CNN +F 3 "" H 1600 6700 50 0001 C CNN + 1 1600 6700 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR05 +U 1 1 5BFDC5C9 +P 1600 7300 +F 0 "#PWR05" H 1600 7050 50 0001 C CNN +F 1 "GND" H 1605 7127 50 0000 C CNN +F 2 "" H 1600 7300 50 0001 C CNN +F 3 "" H 1600 7300 50 0001 C CNN + 1 1600 7300 + 1 0 0 -1 +$EndComp +$Comp +L Device:C C1 +U 1 1 5BFE9C80 +P 1850 7000 +F 0 "C1" H 1965 7046 50 0000 L CNN +F 1 "C" H 1965 6955 50 0000 L CNN +F 2 "Capacitor_THT:CP_Radial_Tantal_D4.5mm_P2.50mm" H 1888 6850 50 0001 C CNN +F 3 "~" H 1850 7000 50 0001 C CNN + 1 1850 7000 + 1 0 0 -1 +$EndComp +$Comp +L Device:C C2 +U 1 1 5BFE9D13 +P 2250 7000 +F 0 "C2" H 2365 7046 50 0000 L CNN +F 1 "C" H 2365 6955 50 0000 L CNN +F 2 "Capacitor_THT:CP_Radial_Tantal_D4.5mm_P2.50mm" H 2288 6850 50 0001 C CNN +F 3 "~" H 2250 7000 50 0001 C CNN + 1 2250 7000 + 1 0 0 -1 +$EndComp +$Comp +L Device:C C3 +U 1 1 5BFF0892 +P 2650 7000 +F 0 "C3" H 2765 7046 50 0000 L CNN +F 1 "C" H 2765 6955 50 0000 L CNN +F 2 "Capacitor_THT:CP_Radial_Tantal_D4.5mm_P2.50mm" H 2688 6850 50 0001 C CNN +F 3 "~" H 2650 7000 50 0001 C CNN + 1 2650 7000 + 1 0 0 -1 +$EndComp +$Comp +L Device:C C4 +U 1 1 5BFF0898 +P 3050 7000 +F 0 "C4" H 3165 7046 50 0000 L CNN +F 1 "C" H 3165 6955 50 0000 L CNN +F 2 "Capacitor_THT:CP_Radial_Tantal_D4.5mm_P2.50mm" H 3088 6850 50 0001 C CNN +F 3 "~" H 3050 7000 50 0001 C CNN + 1 3050 7000 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1600 6850 1850 6850 +Wire Wire Line + 1600 6700 1600 6850 +Connection ~ 1850 6850 +Wire Wire Line + 1850 6850 2250 6850 +Connection ~ 2250 6850 +Wire Wire Line + 2250 6850 2650 6850 +Connection ~ 2650 6850 +Wire Wire Line + 2650 6850 3050 6850 +Wire Wire Line + 1600 7150 1850 7150 +Wire Wire Line + 1600 7150 1600 7300 +Connection ~ 1850 7150 +Wire Wire Line + 1850 7150 2250 7150 +Connection ~ 2250 7150 +Wire Wire Line + 2250 7150 2650 7150 +Connection ~ 2650 7150 +Wire Wire Line + 2650 7150 3050 7150 +$Comp +L Device:R_Network08_US RN1 +U 1 1 5C0319BC +P 5250 1200 +F 0 "RN1" H 5630 1246 50 0000 L CNN +F 1 "4.7k" H 5630 1155 50 0000 L CNN +F 2 "Resistor_THT:R_Array_SIP9" V 5725 1200 50 0001 C CNN +F 3 "http://www.vishay.com/docs/31509/csc.pdf" H 5250 1200 50 0001 C CNN + 1 5250 1200 + 1 0 0 -1 +$EndComp +$Comp +L power:+5V #PWR013 +U 1 1 5C031A36 +P 4850 900 +F 0 "#PWR013" H 4850 750 50 0001 C CNN +F 1 "+5V" H 4865 1073 50 0000 C CNN +F 2 "" H 4850 900 50 0001 C CNN +F 3 "" H 4850 900 50 0001 C CNN + 1 4850 900 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4850 900 4850 1000 +Wire Wire Line + 3800 1100 3800 1300 +Wire Wire Line + 3800 3500 3800 3550 +$Comp +L unikbd:74LS373-74xx U4 +U 1 1 5BCB954C +P 6850 3350 +F 0 "U4" H 6650 4000 50 0000 C CNN +F 1 "74LS373" H 7050 4000 50 0000 C CNN +F 2 "Package_DIP:DIP-20_W7.62mm" H 6850 3350 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS373" H 6850 3350 50 0001 C CNN + 1 6850 3350 + 1 0 0 -1 +$EndComp +$Comp +L unikbd:74LS240-74xx U3 +U 1 1 5BD2F95F +P 3800 4350 +F 0 "U3" H 3600 5000 50 0000 C CNN +F 1 "74LS240" H 4000 5000 50 0000 C CNN +F 2 "Package_DIP:DIP-20_W7.62mm" H 3800 4350 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS240" H 3800 4350 50 0001 C CNN + 1 3800 4350 + 1 0 0 -1 +$EndComp +Text Label 1200 3500 0 50 ~ 0 +R_~W +Text Label 1200 3400 0 50 ~ 0 +D7 +Text Label 1200 3200 0 50 ~ 0 +D6 +Text Label 1200 3100 0 50 ~ 0 +D5 +Text Label 1200 3000 0 50 ~ 0 +D4 +Text Label 1200 2900 0 50 ~ 0 +D3 +Text Label 1200 2800 0 50 ~ 0 +D2 +Text Label 1200 2700 0 50 ~ 0 +D1 +Text Label 1200 2600 0 50 ~ 0 +D0 +Text Label 1200 3300 0 50 ~ 0 +GND +Text Label 1200 3800 0 50 ~ 0 +~KBE +Text Label 1200 3700 0 50 ~ 0 +~A1 +Text Label 1200 3600 0 50 ~ 0 +~A0 +$Comp +L unikbd:74LS240-74xx U2 +U 1 1 5BD1C77F +P 3800 2100 +F 0 "U2" H 3600 2750 50 0000 C CNN +F 1 "74LS240" H 4000 2750 50 0000 C CNN +F 2 "Package_DIP:DIP-20_W7.62mm" H 3800 2100 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn74LS240" H 3800 2100 50 0001 C CNN + 1 3800 2100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3300 2600 3100 2600 +Wire Wire Line + 3100 2600 3100 2500 +Connection ~ 3100 2500 +Wire Wire Line + 3100 2500 3300 2500 +Wire Wire Line + 3300 4850 3100 4850 +Wire Wire Line + 3100 4850 3100 4750 +Connection ~ 3100 4750 +Wire Wire Line + 3100 4750 3000 4750 +Wire Wire Line + 1750 4850 1600 4850 +Connection ~ 1600 4850 +Wire Wire Line + 1600 4850 1600 5750 +Wire Wire Line + 2350 4950 2350 5150 +$Comp +L power:GND #PWR06 +U 1 1 5CDDB5D2 +P 1750 5100 +F 0 "#PWR06" H 1750 4850 50 0001 C CNN +F 1 "GND" H 1755 4927 50 0000 C CNN +F 2 "" H 1750 5100 50 0001 C CNN +F 3 "" H 1750 5100 50 0001 C CNN + 1 1750 5100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 1750 5100 1750 5050 +$Comp +L 74xx:7402 U1 +U 1 1 5BCB967F +P 2050 4950 +F 0 "U1" H 2050 5275 50 0000 C CNN +F 1 "7402" H 2050 5184 50 0000 C CNN +F 2 "Package_DIP:DIP-14_W7.62mm" H 2050 4950 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn7402" H 2050 4950 50 0001 C CNN + 1 2050 4950 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6200 1600 6200 2850 +Wire Wire Line + 7350 2850 7700 2850 +Wire Wire Line + 7350 2950 7700 2950 +Wire Wire Line + 7350 3050 7700 3050 +Wire Wire Line + 7350 3150 7700 3150 +Wire Wire Line + 7350 3250 7700 3250 +Wire Wire Line + 7350 3350 7700 3350 +Wire Wire Line + 7350 3450 7700 3450 +Wire Wire Line + 7350 3550 7700 3550 +Wire Wire Line + 4850 1400 4850 2150 +Connection ~ 4850 2150 +Wire Wire Line + 4850 2150 5700 2150 +Wire Wire Line + 4950 1400 4950 2250 +Connection ~ 4950 2250 +Wire Wire Line + 4950 2250 5700 2250 +Connection ~ 5050 2350 +Wire Wire Line + 5050 2350 5700 2350 +Wire Wire Line + 5150 1400 5150 2450 +Connection ~ 5150 2450 +Wire Wire Line + 5150 2450 5700 2450 +Wire Wire Line + 5050 1400 5050 2350 +Wire Wire Line + 5250 1400 5250 4400 +Connection ~ 5250 4400 +Wire Wire Line + 5250 4400 5700 4400 +Wire Wire Line + 5350 1400 5350 4500 +Connection ~ 5350 4500 +Wire Wire Line + 5350 4500 5700 4500 +Wire Wire Line + 5450 1400 5450 4600 +Connection ~ 5450 4600 +Wire Wire Line + 5450 4600 5700 4600 +Wire Wire Line + 5550 1400 5550 4700 +Connection ~ 5550 4700 +Wire Wire Line + 5550 4700 4300 4700 +Text Label 7400 2850 0 50 ~ 0 +Row0 +Text Label 7400 2950 0 50 ~ 0 +Row1 +Text Label 7400 3050 0 50 ~ 0 +Row2 +Text Label 7400 3150 0 50 ~ 0 +Row3 +Text Label 7400 3250 0 50 ~ 0 +Row4 +Text Label 7400 3350 0 50 ~ 0 +Row5 +Text Label 7400 3450 0 50 ~ 0 +Row6 +Text Label 7400 3550 0 50 ~ 0 +Row7 +Wire Wire Line + 1600 3500 2050 3500 +Connection ~ 1600 3500 +Wire Wire Line + 1100 3600 2050 3600 +Wire Wire Line + 1100 3700 2050 3700 +Wire Wire Line + 2050 3800 1450 3800 +Connection ~ 1450 3800 +Wire Wire Line + 1100 3900 2050 3900 +Wire Wire Line + 1100 4000 2050 4000 +Text Label 1450 1700 0 50 ~ 0 +R_~W +Text Label 1450 1600 0 50 ~ 0 +D7 +Text Label 1450 1400 0 50 ~ 0 +D6 +Text Label 1450 1300 0 50 ~ 0 +D5 +Text Label 1450 1200 0 50 ~ 0 +D4 +Text Label 1450 1100 0 50 ~ 0 +D3 +Text Label 1450 1000 0 50 ~ 0 +D2 +Text Label 1450 900 0 50 ~ 0 +D1 +Text Label 1450 800 0 50 ~ 0 +D0 +Text Label 1450 2000 0 50 ~ 0 +~KBE +Text Label 1450 1900 0 50 ~ 0 +~A1 +Text Label 1450 1800 0 50 ~ 0 +~A0 +Text Label 1200 3900 0 50 ~ 0 +NI +Connection ~ 3100 2200 +Wire Wire Line + 2700 2200 3100 2200 +Wire Wire Line + 2700 2900 2700 2200 +Connection ~ 3100 2000 +Wire Wire Line + 2600 2000 3100 2000 +Wire Wire Line + 2600 2800 2600 2000 +Connection ~ 3100 1800 +Wire Wire Line + 2500 1800 3100 1800 +Wire Wire Line + 2500 2700 2500 1800 +Connection ~ 3100 1600 +Wire Wire Line + 2400 1600 3100 1600 +Wire Wire Line + 2400 2600 2400 1600 +Text Label 1200 4000 0 50 ~ 0 +~SI +Entry Wire Line + 2050 800 2150 900 +Entry Wire Line + 2050 900 2150 1000 +Entry Wire Line + 2050 1000 2150 1100 +Entry Wire Line + 2050 1100 2150 1200 +Entry Wire Line + 2050 1200 2150 1300 +Entry Wire Line + 2050 1300 2150 1400 +Entry Wire Line + 2050 1400 2150 1500 +Entry Wire Line + 2050 1600 2150 1700 +Entry Wire Line + 2050 1700 2150 1800 +Entry Wire Line + 2050 1800 2150 1900 +Entry Wire Line + 2050 1900 2150 2000 +Entry Wire Line + 2050 2000 2150 2100 +Entry Wire Line + 2050 2600 2150 2700 +Entry Wire Line + 2050 2700 2150 2800 +Entry Wire Line + 2050 2800 2150 2900 +Entry Wire Line + 2050 3000 2150 3100 +Entry Wire Line + 2050 3100 2150 3200 +Entry Wire Line + 2050 3200 2150 3300 +Entry Wire Line + 2050 3400 2150 3500 +Entry Wire Line + 2050 3500 2150 3600 +Entry Wire Line + 2050 3600 2150 3700 +Entry Wire Line + 2050 3700 2150 3800 +Entry Wire Line + 2050 3800 2150 3900 +Entry Wire Line + 2050 3900 2150 4000 +Entry Wire Line + 2050 4000 2150 4100 +Entry Wire Line + 2050 2100 2150 2200 +Text Label 1450 2100 0 50 ~ 0 +NI +Entry Wire Line + 2050 2200 2150 2300 +Wire Wire Line + 2050 2200 1350 2200 +Text Label 1450 2200 0 50 ~ 0 +~SI +Wire Wire Line + 1350 2100 2050 2100 +Wire Wire Line + 1350 1600 2050 1600 +Wire Wire Line + 1350 1200 2050 1200 +Wire Wire Line + 1350 1300 2050 1300 +Wire Wire Line + 1350 1400 2050 1400 +Wire Wire Line + 1350 1100 2050 1100 +Wire Wire Line + 1350 1000 2050 1000 +Wire Wire Line + 1350 900 2050 900 +Wire Wire Line + 1350 800 2050 800 +Wire Wire Line + 1350 1900 2050 1900 +Wire Wire Line + 1350 1800 2050 1800 +Wire Wire Line + 1350 2000 2050 2000 +Wire Wire Line + 1350 1700 2050 1700 +$Sheet +S 650 650 700 1650 +U 5D770188 +F0 "Sheet5D770187" 50 +F1 "expansion.sch" 50 +F2 "D0" I R 1350 800 50 +F3 "D1" I R 1350 900 50 +F4 "D2" I R 1350 1000 50 +F5 "D3" I R 1350 1100 50 +F6 "D4" I R 1350 1200 50 +F7 "D5" I R 1350 1300 50 +F8 "D6" I R 1350 1400 50 +F9 "D7" I R 1350 1600 50 +F10 "R_~W" I R 1350 1700 50 +F11 "~A0" I R 1350 1800 50 +F12 "~A1" I R 1350 1900 50 +F13 "~KBE" I R 1350 2000 50 +F14 "NI" I R 1350 2100 50 +F15 "~SI" I R 1350 2200 50 +$EndSheet +Wire Wire Line + 1600 3500 1600 4850 +Wire Wire Line + 1750 4100 1750 2500 +Wire Wire Line + 1100 4100 1750 4100 +$Comp +L Connector_Generic:Conn_02x20_Odd_Even J2 +U 1 1 5D1EDC84 +P 8760 2150 +F 0 "J2" H 8810 3267 50 0000 C CNN +F 1 "Conn_02x20_Odd_Even" H 8810 3176 50 0000 C CNN +F 2 "Connector_PinSocket_2.54mm:PinSocket_2x20_P2.54mm_Vertical" H 8760 2150 50 0001 C CNN +F 3 "~" H 8760 2150 50 0001 C CNN + 1 8760 2150 + 1 0 0 -1 +$EndComp +Text Label 8050 2550 0 50 ~ 0 +Row3 +Text Label 8050 2650 0 50 ~ 0 +Row2 +Text Label 8050 2750 0 50 ~ 0 +Row1 +Text Label 8050 2850 0 50 ~ 0 +Row0 +Text Label 8050 1350 0 50 ~ 0 +Col7 +Text Label 8050 1450 0 50 ~ 0 +Col6 +Text Label 8050 1550 0 50 ~ 0 +Col5 +Text Label 8050 1650 0 50 ~ 0 +Col4 +Text Label 8050 1750 0 50 ~ 0 +Col3 +Text Label 8050 1850 0 50 ~ 0 +Col2 +Text Label 8050 1950 0 50 ~ 0 +Col1 +Text Label 8050 2050 0 50 ~ 0 +Col0 +Wire Wire Line + 7610 1250 8560 1250 +$Comp +L power:+5V #PWR? +U 1 1 5D72F1AB +P 9360 600 +F 0 "#PWR?" H 9360 450 50 0001 C CNN +F 1 "+5V" H 9375 773 50 0000 C CNN +F 2 "" H 9360 600 50 0001 C CNN +F 3 "" H 9360 600 50 0001 C CNN + 1 9360 600 + 1 0 0 -1 +$EndComp +$Comp +L power:GND #PWR? +U 1 1 5D730D08 +P 9610 1050 +F 0 "#PWR?" H 9610 800 50 0001 C CNN +F 1 "GND" H 9615 877 50 0000 C CNN +F 2 "" H 9610 1050 50 0001 C CNN +F 3 "" H 9610 1050 50 0001 C CNN + 1 9610 1050 + 1 0 0 -1 +$EndComp +$Comp +L Device:R_US R? +U 1 1 5D734EF5 +P 9360 880 +F 0 "R?" H 9260 780 50 0000 C CNN +F 1 "470 ohm" H 9540 740 50 0000 C CNN +F 2 "Resistor_THT:R_Box_L8.4mm_W2.5mm_P5.08mm" V 9400 870 50 0001 C CNN +F 3 "~" H 9360 880 50 0001 C CNN + 1 9360 880 + -1 0 0 1 +$EndComp +Wire Wire Line + 9360 600 9360 730 +Wire Wire Line + 9060 1250 9360 1250 +Wire Wire Line + 9360 1250 9360 1030 +Wire Wire Line + 9060 1350 9450 1350 +Wire Wire Line + 9450 1350 9450 1020 +Wire Wire Line + 9450 1020 9610 1020 +Wire Wire Line + 9610 1020 9610 1050 +$Sheet +S 9550 2010 500 1050 +U 5D770C6B +F0 "special_keys" 50 +F1 "special_keys.sch" 50 +$EndSheet +Wire Wire Line + 7900 1350 8560 1350 +Wire Wire Line + 7900 1450 8560 1450 +Wire Wire Line + 7900 1550 8560 1550 +Wire Wire Line + 7900 1650 8560 1650 +Wire Wire Line + 7900 1750 8560 1750 +Wire Wire Line + 7900 1850 8560 1850 +Wire Wire Line + 7900 1950 8560 1950 +Wire Wire Line + 7900 2050 8560 2050 +Wire Wire Line + 7900 2150 8560 2150 +Wire Wire Line + 7900 2250 8560 2250 +Wire Wire Line + 7900 2350 8560 2350 +Wire Wire Line + 7900 2450 8560 2450 +Wire Wire Line + 7900 2550 8560 2550 +Wire Wire Line + 7900 2650 8560 2650 +Wire Wire Line + 7900 2750 8560 2750 +Wire Wire Line + 7900 2850 8560 2850 +Wire Wire Line + 1100 2900 2700 2900 +Connection ~ 3950 7200 +Wire Wire Line + 3950 7300 3950 7200 +$Comp +L power:GND #PWR012 +U 1 1 5C0D6619 +P 3950 7300 +F 0 "#PWR012" H 3950 7050 50 0001 C CNN +F 1 "GND" H 3955 7127 50 0000 C CNN +F 2 "" H 3950 7300 50 0001 C CNN +F 3 "" H 3950 7300 50 0001 C CNN + 1 3950 7300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 3950 7000 3950 7200 +Wire Wire Line + 4250 7200 4300 7200 +Wire Wire Line + 4250 7000 4300 7000 +$Comp +L Device:R_US R2 +U 1 1 5C09E4C7 +P 4100 7200 +F 0 "R2" V 4200 7150 50 0000 C CNN +F 1 "0 ohm" V 4200 7350 50 0000 C CNN +F 2 "Resistor_THT:R_Box_L8.4mm_W2.5mm_P5.08mm" V 4140 7190 50 0001 C CNN +F 3 "~" H 4100 7200 50 0001 C CNN + 1 4100 7200 + 0 1 1 0 +$EndComp +$Comp +L Device:R_US R1 +U 1 1 5C09E3FF +P 4100 7000 +F 0 "R1" V 4000 6900 50 0000 C CNN +F 1 "0 ohm" V 4000 7100 50 0000 C CNN +F 2 "Resistor_THT:R_Box_L8.4mm_W2.5mm_P5.08mm" V 4140 6990 50 0001 C CNN +F 3 "~" H 4100 7000 50 0001 C CNN + 1 4100 7000 + 0 1 1 0 +$EndComp +$Comp +L 74xx:7402 U1 +U 2 1 5BCB96EA +P 4600 7100 +F 0 "U1" H 4600 7425 50 0000 C CNN +F 1 "7402" H 4600 7334 50 0000 C CNN +F 2 "Package_DIP:DIP-14_W7.62mm" H 4600 7100 50 0001 C CNN +F 3 "http://www.ti.com/lit/gpn/sn7402" H 4600 7100 50 0001 C CNN + 2 4600 7100 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6350 3150 6050 3150 +Wire Wire Line + 6350 3050 6100 3050 +Wire Wire Line + 6100 1800 6100 3050 +Wire Wire Line + 6150 2950 6350 2950 +Wire Wire Line + 6200 2850 6350 2850 +Wire Wire Line + 6350 3250 6050 3250 +Wire Wire Line + 6350 3350 6100 3350 +Wire Wire Line + 6350 3450 6150 3450 +Wire Wire Line + 6200 3550 6350 3550 +Wire Wire Line + 6350 3750 6250 3750 +Wire Wire Line + 1100 3400 2450 3400 +Wire Wire Line + 1100 3200 2550 3200 +Wire Wire Line + 1100 3100 2650 3100 +Wire Wire Line + 1100 3000 2750 3000 +Wire Wire Line + 1100 2800 2600 2800 +Wire Wire Line + 1100 2700 2500 2700 +Wire Wire Line + 1100 2600 2400 2600 +Wire Bus Line + 5800 2250 5800 5050 +Wire Bus Line + 2150 900 2150 4100 +Wire Bus Line + 7800 1450 7800 5050 +$EndSCHEMATC diff --git a/hardware/keyboard-classic/Aligner-cherry/aligner-cherry.kicad_pcb b/hardware/keyboard-classic/Aligner-cherry/aligner-cherry.kicad_pcb new file mode 100644 index 0000000..b48e54e --- /dev/null +++ b/hardware/keyboard-classic/Aligner-cherry/aligner-cherry.kicad_pcb @@ -0,0 +1,1593 @@ +(kicad_pcb (version 20190905) (host pcbnew "(5.99.0-232-g388351510)") + + (general + (thickness 1.6) + (drawings 11) + (tracks 0) + (modules 72) + (nets 1) + ) + + (page "B") + (title_block + (title "Cherry Key aligner") + (date "2019-08-25") + (rev "1.1") + (company "OSIWeb.org") + (comment 1 "Key matrix w/ LED") + ) + + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (max_error 0.005) + (defaults + (edge_clearance 0.01) + (edge_cuts_line_width 0.1) + (courtyard_line_width 0.05) + (copper_line_width 0.2) + (copper_text_dims (size 1.5 1.5) (thickness 0.3) keep_upright) + (silk_line_width 0.15) + (silk_text_dims (size 1 1) (thickness 0.15) keep_upright) + (other_layers_line_width 0.1) + (other_layers_text_dims (size 1 1) (thickness 0.15) keep_upright) + ) + (pad_size 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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 0) + (scaleselection 1) + (outputdirectory "cherry-aligner-outputs") + ) + ) + + (net 0 "") + + (net_class "Default" "This is the default net class." + (clearance 0.2) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class "power1" "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class "signal" "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 107.7595 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 67.31 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 363.22 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 284.607 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 364.49 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 348.9706 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 300.7106 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 290.83 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 143.51 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F4E) + (at 67.31 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F72) + (at 217.17 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "unikbd:MX_space_aligner" locked (layer "F.Cu") (tedit 5DA62851) (tstamp 5D0D7A0F) + (at 196.94398 165.99916) + (path "/5BC3E99D/5BC6CD72") + (fp_text reference "SW46" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "SPACE" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -1.397) (end -6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -63.3476 -1.397) (end -6.985 -1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -63.3476 -5.6896) (end -63.3476 -1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -70.0024 -5.6896) (end -63.3476 -5.6896) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -70.0024 -2.286) (end -70.0024 -5.6896) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -70.866 -2.286) (end -70.0024 -2.286) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -70.866 0.508) (end -70.866 -2.286) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -70.0024 0.508) (end -70.866 0.508) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -70.0024 6.604) (end -70.0024 0.508) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -68.199 6.604) (end -70.0024 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -68.199 7.7724) (end -68.199 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -65.151 7.7724) (end -68.199 7.7724) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -65.151 6.604) (end -65.151 7.7724) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -63.3476 6.604) (end -65.151 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -63.3476 1.397) (end -63.3476 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 1.397) (end -63.3476 1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end -6.985 1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 1.397) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 63.3476 1.397) (end 6.985 1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 63.3476 6.604) (end 63.3476 1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 65.151 6.604) (end 63.3476 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 65.151 7.7724) (end 65.151 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 68.199 7.7724) (end 65.151 7.7724) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 68.199 6.604) (end 68.199 7.7724) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 70.0024 6.604) (end 68.199 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 70.0024 0.508) (end 70.0024 6.604) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 70.866 0.508) (end 70.0024 0.508) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 70.866 -2.286) (end 70.866 0.508) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 70.0024 -2.286) (end 70.866 -2.286) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 70.0024 -5.6896) (end 70.0024 -2.286) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 63.3476 -5.6896) (end 70.0024 -5.6896) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 63.3476 -1.397) (end 63.3476 -5.6896) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 -1.397) (end 63.3476 -1.397) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 -6.985) (end 6.985 -1.397) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBBE7) + (at 244.67058 146.94916) + (path "/5BC3E99D/5BC6CEDD") + (fp_text reference "SW37" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Comma" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7CEF) + (at 87.62238 89.79916) + (path "/5BC3EA0A/5BCAF489") + (fp_text reference "SW31" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "1" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7CDF) + (at 220.97238 89.79916) + (path "/5BC3EA0A/5BCAF419") + (fp_text reference "SW30" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "8" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D633EAE) + (at 263.72058 146.94916) + (path "/5BC3EA0A/5BCAF3A9") + (fp_text reference "SW29" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Period" (at -4.38658 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9EDE) + (at 115.91798 108.84916) + (path "/5BC3EA0A/5BCAF339") + (fp_text reference "SW28" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "W" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7CAF) + (at 106.67238 89.79916) + (path "/5BC3EA0A/5BCAF490") + (fp_text reference "SW27" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "2" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7C9F) + (at 240.02238 89.79916) + (path "/5BC3EA0A/5BCAF420") + (fp_text reference "SW26" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "9" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FAB87) + (at 254.19558 127.89916) + (path "/5BC3EA0A/5BCAF3B0") + (fp_text reference "SW25" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "L" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9EA5) + (at 134.96798 108.84916) + (path "/5BC3EA0A/5BCAF340") + (fp_text reference "SW24" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "E" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7C6F) + (at 125.72238 89.79916) + (path "/5BC3EA0A/5BCAF482") + (fp_text reference "SW23" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "3" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D633858) + (at 249.26798 108.84916) + (path "/5BC3EA0A/5BCAF412") + (fp_text reference "SW22" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7C4F) + (at 259.07238 89.79916) + (path "/5BC3EA0A/5BCAF3A2") + (fp_text reference "SW21" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "O" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9E6C) + (at 154.01798 108.84916) + (path "/5BC3EA0A/5BCAF332") + (fp_text reference "SW20" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "R" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7C2F) + (at 144.77238 89.79916) + (path "/5BC3EA0A/5BCAF47B") + (fp_text reference "SW19" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "4" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7C1F) + (at 278.12238 89.79916) + (path "/5BC3EA0A/5BCAF40B") + (fp_text reference "SW18" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Colon" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9D4F) + (at 287.36798 108.84916) + (path "/5BC3EA0A/5BCAF39B") + (fp_text reference "SW17" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Line Feed" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9D88) + (at 173.06798 108.84916) + (path "/5BC3EA0A/5BCAF32B") + (fp_text reference "SW16" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "T" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7BEF) + (at 163.82238 89.79916) + (path "/5BC3EA0A/5BCAF46D") + (fp_text reference "SW15" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "5" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7BDF) + (at 297.17238 89.79916) + (path "/5BC3EA0A/5BCAF3FD") + (fp_text reference "SW14" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Dash" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D10F44A) + (at 311.21858 108.84916) + (path "/5BC3EA0A/5BCAF38D") + (fp_text reference "SW13" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Return" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9DFA) + (at 192.11798 108.84916) + (path "/5BC3EA0A/5BCAF31D") + (fp_text reference "SW12" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Y" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7BAF) + (at 182.87238 89.79916) + (path "/5BC3EA0A/5BCAF474") + (fp_text reference "SW11" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "6" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D105DE3) + (at 316.22238 89.79916) + (path "/5BC3EA0A/5BCAF404") + (fp_text reference "SW10" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Bracket_Open" (at -2.794 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7B8F) + (at 335.06918 108.84916) + (path "/5BC3EA0A/5BCAF394") + (fp_text reference "SW9" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Shift_Lock" (at -4.1275 8.7884) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9DC1) + (at 211.16798 108.84916) + (path "/5BC3EA0A/5BCAF324") + (fp_text reference "SW8" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "U" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7B6F) + (at 201.92238 89.79916) + (path "/5BC3EA0A/5BCAF466") + (fp_text reference "SW7" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "7" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D105E93) + (at 335.27238 89.79916) + (path "/5BC3EA0A/5BCAF3F6") + (fp_text reference "SW6" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Bracket_Close" (at -2.794 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F200E) + (at 349.44558 127.89916) + (path "/5BC3EA0A/5BCAF386") + (fp_text reference "SW5" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Here_is" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9D16) + (at 230.21798 108.84916) + (path "/5BC3EA0A/5BCAF316") + (fp_text reference "SW4" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "I" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7B1F) + (at 354.32238 89.79916) + (path "/5BC3EA0A/5BCAF3EF") + (fp_text reference "SW3" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Tilde" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F6109) + (at 330.47178 146.94916) + (path "/5BC3EA0A/5BCAF37F") + (fp_text reference "SW2" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Repeat" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FAB4E) + (at 120.84558 127.89916) + (path "/5BC3E99D/5BC6D0D0") + (fp_text reference "SW60" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "S" (at -4.13258 8.62584) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB692) + (at 130.37058 146.94916) + (path "/5BC3E99D/5BC6CF00") + (fp_text reference "SW59" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "X" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0F9CDD) + (at 96.86798 108.84916) + (path "/5BC3E99D/5BC6CD80") + (fp_text reference "SW58" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Q" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D633B5C) + (at 311.34558 127.89916) + (path "/5BC3E99D/5BC3FF70") + (fp_text reference "SW57" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Backslash" (at -4.25958 8.75284) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FAB15) + (at 139.89558 127.89916) + (path "/5BC3E99D/5BC6D0D7") + (fp_text reference "SW56" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "D" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB659) + (at 149.42058 146.94916) + (path "/5BC3E99D/5BC6CF07") + (fp_text reference "SW55" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "C" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FAADC) + (at 101.79558 127.89916) + (path "/5BC3E99D/5BC6CD87") + (fp_text reference "SW54" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "A" (at -4.89458 8.62584) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FAF44) + (at 82.74558 127.89916) + (path "/5BC3E99D/5BC3FF77") + (fp_text reference "SW53" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "CTRL" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB0A3) + (at 158.94558 127.89916) + (path "/5BC3E99D/5BC6D0C9") + (fp_text reference "SW52" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "F" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBCCB) + (at 168.47058 146.94916) + (path "/5BC3E99D/5BC6CEF9") + (fp_text reference "SW51" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "V" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBC59) + (at 111.32058 146.94916) + (path "/5BC3E99D/5BC6CD79") + (fp_text reference "SW50" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Z" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FA2F5) + (at 77.99578 108.84916) + (path "/5BC3E99D/5BC3FF69") + (fp_text reference "SW49" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "ESC" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB115) + (at 177.99558 127.89916) + (path "/5BC3E99D/5BC6D0C2") + (fp_text reference "SW48" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "G" (at -4.00558 8.62584) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBB3C) + (at 187.52058 146.94916) + (path "/5BC3E99D/5BC6CEF2") + (fp_text reference "SW47" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "B" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB187) + (at 197.04558 127.89916) + (path "/5BC3E99D/5BC6D0B4") + (fp_text reference "SW45" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "H" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBC20) + (at 206.57058 146.94916) + (path "/5BC3E99D/5BC6CEE4") + (fp_text reference "SW44" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "N" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBBAE) + (at 282.77058 146.94916) + (path "/5BC3E99D/5BC6CD64") + (fp_text reference "SW43" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Fwd_Slash" (at -4.13258 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB14E) + (at 216.09558 127.89916) + (path "/5BC3E99D/5BC6D0BB") + (fp_text reference "SW42" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "J" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBC92) + (at 225.62058 146.94916) + (path "/5BC3E99D/5BC6CEEB") + (fp_text reference "SW41" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "M" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB031) + (at 273.24558 127.89916) + (path "/5BC3E99D/5BC6CD6B") + (fp_text reference "SW40" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Semicolon" (at -4.13258 8.87984) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBB75) + (at 87.46998 146.94916) + (path "/5BC3E99D/5BC3FE57") + (fp_text reference "SW39" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "L_Shift" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB06A) + (at 235.14558 127.89916) + (path "/5BC3E99D/5BC6D0AD") + (fp_text reference "SW38" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "K" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FA32E) + (at 268.31798 108.84916) + (path "/5BC3E99D/5BC6CD5D") + (fp_text reference "SW36" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "P" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FBD04) + (at 306.62118 146.94916) + (path "/5BC3E99D/5BC3FD26") + (fp_text reference "SW35" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "R_Shift" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0EE51F) + (at 330.39558 127.89916) + (path "/5D6C3751") + (fp_text reference "SW34" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Rubout" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D791F) + (at 354.11918 108.84916) + (path "/5BC3E99D/5BC6CED6") + (fp_text reference "SW33" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Break" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0FB0DC) + (at 292.29558 127.89916) + (path "/5D6BE647") + (fp_text reference "SW32" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Ampersand" (at -4.25958 8.87984) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "unikbd:Cherry aligner" locked (layer "F.Cu") (tedit 5DA626D6) (tstamp 5D0D7AFF) + (at 349.52178 146.94916) + (path "/5BC3EA0A/5BCAF30F") + (fp_text reference "SW1" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Clear" (at -3.31978 8.75284) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -6.985 -6.985) (end -6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start 6.985 6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 -6.985) (end 6.985 -6.985) (layer "Edge.Cuts") (width 0.12)) + (fp_line (start -6.985 6.985) (end 6.985 6.985) (layer "Edge.Cuts") (width 0.12)) + ) + + (module "Symbol:OSHW-Logo2_9.8x8mm_Copper" (layer "F.Cu") (tedit 0) (tstamp 5DA65A53) + (at 117.348 163.322) + (descr "Open Source Hardware Symbol") + (tags "Logo Symbol OSHW") + (attr virtual) + (fp_text reference "REF**" (at 0 0) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "OSHW-Logo2_9.8x8mm_Copper" (at 0.75 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy -3.231114 2.584505) (xy -3.156461 2.621727) (xy -3.090569 2.690261) (xy -3.072423 2.715648) + (xy -3.052655 2.748866) (xy -3.039828 2.784945) (xy -3.03249 2.833098) (xy -3.029187 2.902536) + (xy -3.028462 2.994206) (xy -3.031737 3.11983) (xy -3.043123 3.214154) (xy -3.064959 3.284523) + (xy -3.099581 3.338286) (xy -3.14933 3.382788) (xy -3.152986 3.385423) (xy -3.202015 3.412377) + (xy -3.261055 3.425712) (xy -3.336141 3.429) (xy -3.458205 3.429) (xy -3.458256 3.547497) + (xy -3.459392 3.613492) (xy -3.466314 3.652202) (xy -3.484402 3.675419) (xy -3.519038 3.694933) + (xy -3.527355 3.69892) (xy -3.56628 3.717603) (xy -3.596417 3.729403) (xy -3.618826 3.730422) + (xy -3.634567 3.716761) (xy -3.644698 3.684522) (xy -3.650277 3.629804) (xy -3.652365 3.548711) + (xy -3.652019 3.437344) (xy -3.6503 3.291802) (xy -3.649763 3.248269) (xy -3.647828 3.098205) + (xy -3.646096 3.000042) (xy -3.458308 3.000042) (xy -3.457252 3.083364) (xy -3.452562 3.13788) + (xy -3.441949 3.173837) (xy -3.423128 3.201482) (xy -3.41035 3.214965) (xy -3.35811 3.254417) + (xy -3.311858 3.257628) (xy -3.264133 3.225049) (xy -3.262923 3.223846) (xy -3.243506 3.198668) + (xy -3.231693 3.164447) (xy -3.225735 3.111748) (xy -3.22388 3.031131) (xy -3.223846 3.013271) + (xy -3.22833 2.902175) (xy -3.242926 2.825161) (xy -3.26935 2.778147) (xy -3.309317 2.75705) + (xy -3.332416 2.754923) (xy -3.387238 2.7649) (xy -3.424842 2.797752) (xy -3.447477 2.857857) + (xy -3.457394 2.949598) (xy -3.458308 3.000042) (xy -3.646096 3.000042) (xy -3.645778 2.98206) + (xy -3.643127 2.894679) (xy -3.639394 2.830905) (xy -3.634093 2.785582) (xy -3.626742 2.753555) + (xy -3.616857 2.729668) (xy -3.603954 2.708764) (xy -3.598421 2.700898) (xy -3.525031 2.626595) + (xy -3.43224 2.584467) (xy -3.324904 2.572722) (xy -3.231114 2.584505)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -1.728336 2.595089) (xy -1.665633 2.631358) (xy -1.622039 2.667358) (xy -1.590155 2.705075) + (xy -1.56819 2.751199) (xy -1.554351 2.812421) (xy -1.546847 2.895431) (xy -1.543883 3.006919) + (xy -1.543539 3.087062) (xy -1.543539 3.382065) (xy -1.709615 3.456515) (xy -1.719385 3.133402) + (xy -1.723421 3.012729) (xy -1.727656 2.925141) (xy -1.732903 2.86465) (xy -1.739975 2.825268) + (xy -1.749689 2.801007) (xy -1.762856 2.78588) (xy -1.767081 2.782606) (xy -1.831091 2.757034) + (xy -1.895792 2.767153) (xy -1.934308 2.794) (xy -1.949975 2.813024) (xy -1.96082 2.837988) + (xy -1.967712 2.875834) (xy -1.971521 2.933502) (xy -1.973117 3.017935) (xy -1.973385 3.105928) + (xy -1.973437 3.216323) (xy -1.975328 3.294463) (xy -1.981655 3.347165) (xy -1.995017 3.381242) + (xy -2.018015 3.403511) (xy -2.053246 3.420787) (xy -2.100303 3.438738) (xy -2.151697 3.458278) + (xy -2.145579 3.111485) (xy -2.143116 2.986468) (xy -2.140233 2.894082) (xy -2.136102 2.827881) + (xy -2.129893 2.78142) (xy -2.120774 2.748256) (xy -2.107917 2.721944) (xy -2.092416 2.698729) + (xy -2.017629 2.624569) (xy -1.926372 2.581684) (xy -1.827117 2.571412) (xy -1.728336 2.595089)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -3.983114 2.587256) (xy -3.891536 2.635409) (xy -3.823951 2.712905) (xy -3.799943 2.762727) + (xy -3.781262 2.837533) (xy -3.771699 2.932052) (xy -3.770792 3.03521) (xy -3.778079 3.135935) + (xy -3.793097 3.223153) (xy -3.815385 3.285791) (xy -3.822235 3.296579) (xy -3.903368 3.377105) + (xy -3.999734 3.425336) (xy -4.104299 3.43945) (xy -4.210032 3.417629) (xy -4.239457 3.404547) + (xy -4.296759 3.364231) (xy -4.34705 3.310775) (xy -4.351803 3.303995) (xy -4.371122 3.271321) + (xy -4.383892 3.236394) (xy -4.391436 3.190414) (xy -4.395076 3.124584) (xy -4.396135 3.030105) + (xy -4.396154 3.008923) (xy -4.396106 3.002182) (xy -4.200769 3.002182) (xy -4.199632 3.091349) + (xy -4.195159 3.15052) (xy -4.185754 3.188741) (xy -4.169824 3.215053) (xy -4.161692 3.223846) + (xy -4.114942 3.257261) (xy -4.069553 3.255737) (xy -4.02366 3.226752) (xy -3.996288 3.195809) + (xy -3.980077 3.150643) (xy -3.970974 3.07942) (xy -3.970349 3.071114) (xy -3.968796 2.942037) + (xy -3.985035 2.846172) (xy -4.018848 2.784107) (xy -4.070016 2.756432) (xy -4.08828 2.754923) + (xy -4.13624 2.762513) (xy -4.169047 2.788808) (xy -4.189105 2.839095) (xy -4.198822 2.918664) + (xy -4.200769 3.002182) (xy -4.396106 3.002182) (xy -4.395426 2.908249) (xy -4.392371 2.837906) + (xy -4.385678 2.789163) (xy -4.37404 2.753288) (xy -4.356147 2.721548) (xy -4.352192 2.715648) + (xy -4.285733 2.636104) (xy -4.213315 2.589929) (xy -4.125151 2.571599) (xy -4.095213 2.570703) + (xy -3.983114 2.587256)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -2.465746 2.599745) (xy -2.388714 2.651567) (xy -2.329184 2.726412) (xy -2.293622 2.821654) + (xy -2.286429 2.891756) (xy -2.287246 2.921009) (xy -2.294086 2.943407) (xy -2.312888 2.963474) + (xy -2.349592 2.985733) (xy -2.410138 3.014709) (xy -2.500466 3.054927) (xy -2.500923 3.055129) + (xy -2.584067 3.09321) (xy -2.652247 3.127025) (xy -2.698495 3.152933) (xy -2.715842 3.167295) + (xy -2.715846 3.167411) (xy -2.700557 3.198685) (xy -2.664804 3.233157) (xy -2.623758 3.25799) + (xy -2.602963 3.262923) (xy -2.54623 3.245862) (xy -2.497373 3.203133) (xy -2.473535 3.156155) + (xy -2.450603 3.121522) (xy -2.405682 3.082081) (xy -2.352877 3.048009) (xy -2.30629 3.02948) + (xy -2.296548 3.028462) (xy -2.285582 3.045215) (xy -2.284921 3.088039) (xy -2.29298 3.145781) + (xy -2.308173 3.207289) (xy -2.328914 3.261409) (xy -2.329962 3.26351) (xy -2.392379 3.35066) + (xy -2.473274 3.409939) (xy -2.565144 3.439034) (xy -2.660487 3.435634) (xy -2.751802 3.397428) + (xy -2.755862 3.394741) (xy -2.827694 3.329642) (xy -2.874927 3.244705) (xy -2.901066 3.133021) + (xy -2.904574 3.101643) (xy -2.910787 2.953536) (xy -2.903339 2.884468) (xy -2.715846 2.884468) + (xy -2.71341 2.927552) (xy -2.700086 2.940126) (xy -2.666868 2.930719) (xy -2.614506 2.908483) + (xy -2.555976 2.88061) (xy -2.554521 2.879872) (xy -2.504911 2.853777) (xy -2.485 2.836363) + (xy -2.48991 2.818107) (xy -2.510584 2.79412) (xy -2.563181 2.759406) (xy -2.619823 2.756856) + (xy -2.670631 2.782119) (xy -2.705724 2.830847) (xy -2.715846 2.884468) (xy -2.903339 2.884468) + (xy -2.898008 2.835036) (xy -2.865222 2.741055) (xy -2.819579 2.675215) (xy -2.737198 2.608681) + (xy -2.646454 2.575676) (xy -2.553815 2.573573) (xy -2.465746 2.599745)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -0.840154 2.49212) (xy -0.834428 2.57198) (xy -0.827851 2.619039) (xy -0.818738 2.639566) + (xy -0.805402 2.639829) (xy -0.801077 2.637378) (xy -0.743556 2.619636) (xy -0.668732 2.620672) + (xy -0.592661 2.63891) (xy -0.545082 2.662505) (xy -0.496298 2.700198) (xy -0.460636 2.742855) + (xy -0.436155 2.797057) (xy -0.420913 2.869384) (xy -0.41297 2.966419) (xy -0.410384 3.094742) + (xy -0.410338 3.119358) (xy -0.410308 3.39587) (xy -0.471839 3.41732) (xy -0.515541 3.431912) + (xy -0.539518 3.438706) (xy -0.540223 3.438769) (xy -0.542585 3.420345) (xy -0.544594 3.369526) + (xy -0.546099 3.292993) (xy -0.546947 3.19743) (xy -0.547077 3.139329) (xy -0.547349 3.024771) + (xy -0.548748 2.942667) (xy -0.552151 2.886393) (xy -0.558433 2.849326) (xy -0.568471 2.824844) + (xy -0.583139 2.806325) (xy -0.592298 2.797406) (xy -0.655211 2.761466) (xy -0.723864 2.758775) + (xy -0.786152 2.78917) (xy -0.797671 2.800144) (xy -0.814567 2.820779) (xy -0.826286 2.845256) + (xy -0.833767 2.880647) (xy -0.837946 2.934026) (xy -0.839763 3.012466) (xy -0.840154 3.120617) + (xy -0.840154 3.39587) (xy -0.901685 3.41732) (xy -0.945387 3.431912) (xy -0.969364 3.438706) + (xy -0.97007 3.438769) (xy -0.971874 3.420069) (xy -0.9735 3.367322) (xy -0.974883 3.285557) + (xy -0.975958 3.179805) (xy -0.97666 3.055094) (xy -0.976923 2.916455) (xy -0.976923 2.381806) + (xy -0.849923 2.328236) (xy -0.840154 2.49212)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 0.053501 2.626303) (xy 0.13006 2.654733) (xy 0.130936 2.655279) (xy 0.178285 2.690127) + (xy 0.213241 2.730852) (xy 0.237825 2.783925) (xy 0.254062 2.855814) (xy 0.263975 2.952992) + (xy 0.269586 3.081928) (xy 0.270077 3.100298) (xy 0.277141 3.377287) (xy 0.217695 3.408028) + (xy 0.174681 3.428802) (xy 0.14871 3.438646) (xy 0.147509 3.438769) (xy 0.143014 3.420606) + (xy 0.139444 3.371612) (xy 0.137248 3.300031) (xy 0.136769 3.242068) (xy 0.136758 3.14817) + (xy 0.132466 3.089203) (xy 0.117503 3.061079) (xy 0.085482 3.059706) (xy 0.030014 3.080998) + (xy -0.053731 3.120136) (xy -0.115311 3.152643) (xy -0.146983 3.180845) (xy -0.156294 3.211582) + (xy -0.156308 3.213104) (xy -0.140943 3.266054) (xy -0.095453 3.29466) (xy -0.025834 3.298803) + (xy 0.024313 3.298084) (xy 0.050754 3.312527) (xy 0.067243 3.347218) (xy 0.076733 3.391416) + (xy 0.063057 3.416493) (xy 0.057907 3.420082) (xy 0.009425 3.434496) (xy -0.058469 3.436537) + (xy -0.128388 3.426983) (xy -0.177932 3.409522) (xy -0.24643 3.351364) (xy -0.285366 3.270408) + (xy -0.293077 3.20716) (xy -0.287193 3.150111) (xy -0.265899 3.103542) (xy -0.223735 3.062181) + (xy -0.155241 3.020755) (xy -0.054956 2.973993) (xy -0.048846 2.97135) (xy 0.04149 2.929617) + (xy 0.097235 2.895391) (xy 0.121129 2.864635) (xy 0.115913 2.833311) (xy 0.084328 2.797383) + (xy 0.074883 2.789116) (xy 0.011617 2.757058) (xy -0.053936 2.758407) (xy -0.111028 2.789838) + (xy -0.148907 2.848024) (xy -0.152426 2.859446) (xy -0.1867 2.914837) (xy -0.230191 2.941518) + (xy -0.293077 2.96796) (xy -0.293077 2.899548) (xy -0.273948 2.80011) (xy -0.217169 2.708902) + (xy -0.187622 2.678389) (xy -0.120458 2.639228) (xy -0.035044 2.6215) (xy 0.053501 2.626303)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 0.713362 2.62467) (xy 0.802117 2.657421) (xy 0.874022 2.71535) (xy 0.902144 2.756128) + (xy 0.932802 2.830954) (xy 0.932165 2.885058) (xy 0.899987 2.921446) (xy 0.888081 2.927633) + (xy 0.836675 2.946925) (xy 0.810422 2.941982) (xy 0.80153 2.909587) (xy 0.801077 2.891692) + (xy 0.784797 2.825859) (xy 0.742365 2.779807) (xy 0.683388 2.757564) (xy 0.617475 2.763161) + (xy 0.563895 2.792229) (xy 0.545798 2.80881) (xy 0.532971 2.828925) (xy 0.524306 2.859332) + (xy 0.518696 2.906788) (xy 0.515035 2.97805) (xy 0.512215 3.079875) (xy 0.511484 3.112115) + (xy 0.50882 3.22241) (xy 0.505792 3.300036) (xy 0.50125 3.351396) (xy 0.494046 3.38289) + (xy 0.483033 3.40092) (xy 0.46706 3.411888) (xy 0.456834 3.416733) (xy 0.413406 3.433301) + (xy 0.387842 3.438769) (xy 0.379395 3.420507) (xy 0.374239 3.365296) (xy 0.372346 3.272499) + (xy 0.373689 3.141478) (xy 0.374107 3.121269) (xy 0.377058 3.001733) (xy 0.380548 2.914449) + (xy 0.385514 2.852591) (xy 0.392893 2.809336) (xy 0.403624 2.77786) (xy 0.418645 2.751339) + (xy 0.426502 2.739975) (xy 0.471553 2.689692) (xy 0.52194 2.650581) (xy 0.528108 2.647167) + (xy 0.618458 2.620212) (xy 0.713362 2.62467)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 1.602081 2.780289) (xy 1.601833 2.92632) (xy 1.600872 3.038655) (xy 1.598794 3.122678) + (xy 1.595193 3.183769) (xy 1.589665 3.227309) (xy 1.581804 3.258679) (xy 1.571207 3.283262) + (xy 1.563182 3.297294) (xy 1.496728 3.373388) (xy 1.41247 3.421084) (xy 1.319249 3.438199) + (xy 1.2259 3.422546) (xy 1.170312 3.394418) (xy 1.111957 3.34576) (xy 1.072186 3.286333) + (xy 1.04819 3.208507) (xy 1.037161 3.104652) (xy 1.035599 3.028462) (xy 1.035809 3.022986) + (xy 1.172308 3.022986) (xy 1.173141 3.110355) (xy 1.176961 3.168192) (xy 1.185746 3.206029) + (xy 1.201474 3.233398) (xy 1.220266 3.254042) (xy 1.283375 3.29389) (xy 1.351137 3.297295) + (xy 1.415179 3.264025) (xy 1.420164 3.259517) (xy 1.441439 3.236067) (xy 1.454779 3.208166) + (xy 1.462001 3.166641) (xy 1.464923 3.102316) (xy 1.465385 3.0312) (xy 1.464383 2.941858) + (xy 1.460238 2.882258) (xy 1.451236 2.843089) (xy 1.435667 2.81504) (xy 1.422902 2.800144) + (xy 1.3636 2.762575) (xy 1.295301 2.758057) (xy 1.23011 2.786753) (xy 1.217528 2.797406) + (xy 1.196111 2.821063) (xy 1.182744 2.849251) (xy 1.175566 2.891245) (xy 1.172719 2.956319) + (xy 1.172308 3.022986) (xy 1.035809 3.022986) (xy 1.040322 2.905765) (xy 1.056362 2.813577) + (xy 1.086528 2.744269) (xy 1.133629 2.690211) (xy 1.170312 2.662505) (xy 1.23699 2.632572) + (xy 1.314272 2.618678) (xy 1.38611 2.622397) (xy 1.426308 2.6374) (xy 1.442082 2.64167) + (xy 1.45255 2.62575) (xy 1.459856 2.583089) (xy 1.465385 2.518106) (xy 1.471437 2.445732) + (xy 1.479844 2.402187) (xy 1.495141 2.377287) (xy 1.521864 2.360845) (xy 1.538654 2.353564) + (xy 1.602154 2.326963) (xy 1.602081 2.780289)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 2.395929 2.636662) (xy 2.398911 2.688068) (xy 2.401247 2.766192) (xy 2.402749 2.864857) + (xy 2.403231 2.968343) (xy 2.403231 3.318533) (xy 2.341401 3.380363) (xy 2.298793 3.418462) + (xy 2.26139 3.433895) (xy 2.21027 3.432918) (xy 2.189978 3.430433) (xy 2.126554 3.4232) + (xy 2.074095 3.419055) (xy 2.061308 3.418672) (xy 2.018199 3.421176) (xy 1.956544 3.427462) + (xy 1.932638 3.430433) (xy 1.873922 3.435028) (xy 1.834464 3.425046) (xy 1.795338 3.394228) + (xy 1.781215 3.380363) (xy 1.719385 3.318533) (xy 1.719385 2.663503) (xy 1.76915 2.640829) + (xy 1.812002 2.624034) (xy 1.837073 2.618154) (xy 1.843501 2.636736) (xy 1.849509 2.688655) + (xy 1.854697 2.768172) (xy 1.858664 2.869546) (xy 1.860577 2.955192) (xy 1.865923 3.292231) + (xy 1.91256 3.298825) (xy 1.954976 3.294214) (xy 1.97576 3.279287) (xy 1.98157 3.251377) + (xy 1.98653 3.191925) (xy 1.990246 3.108466) (xy 1.992324 3.008532) (xy 1.992624 2.957104) + (xy 1.992923 2.661054) (xy 2.054454 2.639604) (xy 2.098004 2.62502) (xy 2.121694 2.618219) + (xy 2.122377 2.618154) (xy 2.124754 2.636642) (xy 2.127366 2.687906) (xy 2.129995 2.765649) + (xy 2.132421 2.863574) (xy 2.134115 2.955192) (xy 2.139461 3.292231) (xy 2.256692 3.292231) + (xy 2.262072 2.984746) (xy 2.267451 2.677261) (xy 2.324601 2.647707) (xy 2.366797 2.627413) + (xy 2.39177 2.618204) (xy 2.392491 2.618154) (xy 2.395929 2.636662)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 2.887333 2.633528) (xy 2.94359 2.659117) (xy 2.987747 2.690124) (xy 3.020101 2.724795) + (xy 3.042438 2.76952) (xy 3.056546 2.830692) (xy 3.064211 2.914701) (xy 3.06722 3.02794) + (xy 3.067538 3.102509) (xy 3.067538 3.39342) (xy 3.017773 3.416095) (xy 2.978576 3.432667) + (xy 2.959157 3.438769) (xy 2.955442 3.42061) (xy 2.952495 3.371648) (xy 2.950691 3.300153) + (xy 2.950308 3.243385) (xy 2.948661 3.161371) (xy 2.944222 3.096309) (xy 2.93774 3.056467) + (xy 2.93259 3.048) (xy 2.897977 3.056646) (xy 2.84364 3.078823) (xy 2.780722 3.108886) + (xy 2.720368 3.141192) (xy 2.673721 3.170098) (xy 2.651926 3.189961) (xy 2.651839 3.190175) + (xy 2.653714 3.226935) (xy 2.670525 3.262026) (xy 2.700039 3.290528) (xy 2.743116 3.300061) + (xy 2.779932 3.29895) (xy 2.832074 3.298133) (xy 2.859444 3.310349) (xy 2.875882 3.342624) + (xy 2.877955 3.34871) (xy 2.885081 3.394739) (xy 2.866024 3.422687) (xy 2.816353 3.436007) + (xy 2.762697 3.43847) (xy 2.666142 3.42021) (xy 2.616159 3.394131) (xy 2.554429 3.332868) + (xy 2.52169 3.25767) (xy 2.518753 3.178211) (xy 2.546424 3.104167) (xy 2.588047 3.057769) + (xy 2.629604 3.031793) (xy 2.694922 2.998907) (xy 2.771038 2.965557) (xy 2.783726 2.960461) + (xy 2.867333 2.923565) (xy 2.91553 2.891046) (xy 2.93103 2.858718) (xy 2.91655 2.822394) + (xy 2.891692 2.794) (xy 2.832939 2.759039) (xy 2.768293 2.756417) (xy 2.709008 2.783358) + (xy 2.666339 2.837088) (xy 2.660739 2.85095) (xy 2.628133 2.901936) (xy 2.58053 2.939787) + (xy 2.520461 2.97085) (xy 2.520461 2.882768) (xy 2.523997 2.828951) (xy 2.539156 2.786534) + (xy 2.572768 2.741279) (xy 2.605035 2.70642) (xy 2.655209 2.657062) (xy 2.694193 2.630547) + (xy 2.736064 2.619911) (xy 2.78346 2.618154) (xy 2.887333 2.633528)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 3.570807 2.636782) (xy 3.594161 2.646988) (xy 3.649902 2.691134) (xy 3.697569 2.754967) + (xy 3.727048 2.823087) (xy 3.731846 2.85667) (xy 3.71576 2.903556) (xy 3.680475 2.928365) + (xy 3.642644 2.943387) (xy 3.625321 2.946155) (xy 3.616886 2.926066) (xy 3.60023 2.882351) + (xy 3.592923 2.862598) (xy 3.551948 2.794271) (xy 3.492622 2.760191) (xy 3.416552 2.761239) + (xy 3.410918 2.762581) (xy 3.370305 2.781836) (xy 3.340448 2.819375) (xy 3.320055 2.879809) + (xy 3.307836 2.967751) (xy 3.3025 3.087813) (xy 3.302 3.151698) (xy 3.301752 3.252403) + (xy 3.300126 3.321054) (xy 3.295801 3.364673) (xy 3.287454 3.390282) (xy 3.273765 3.404903) + (xy 3.253411 3.415558) (xy 3.252234 3.416095) (xy 3.213038 3.432667) (xy 3.193619 3.438769) + (xy 3.190635 3.420319) (xy 3.188081 3.369323) (xy 3.18614 3.292308) (xy 3.184997 3.195805) + (xy 3.184769 3.125184) (xy 3.185932 2.988525) (xy 3.190479 2.884851) (xy 3.199999 2.808108) + (xy 3.216081 2.752246) (xy 3.240313 2.711212) (xy 3.274286 2.678954) (xy 3.307833 2.65644) + (xy 3.388499 2.626476) (xy 3.482381 2.619718) (xy 3.570807 2.636782)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 4.245224 2.647838) (xy 4.322528 2.698361) (xy 4.359814 2.74359) (xy 4.389353 2.825663) + (xy 4.391699 2.890607) (xy 4.386385 2.977445) (xy 4.186115 3.065103) (xy 4.088739 3.109887) + (xy 4.025113 3.145913) (xy 3.992029 3.177117) (xy 3.98628 3.207436) (xy 4.004658 3.240805) + (xy 4.024923 3.262923) (xy 4.083889 3.298393) (xy 4.148024 3.300879) (xy 4.206926 3.273235) + (xy 4.250197 3.21832) (xy 4.257936 3.198928) (xy 4.295006 3.138364) (xy 4.337654 3.112552) + (xy 4.396154 3.090471) (xy 4.396154 3.174184) (xy 4.390982 3.23115) (xy 4.370723 3.279189) + (xy 4.328262 3.334346) (xy 4.321951 3.341514) (xy 4.27472 3.390585) (xy 4.234121 3.41692) + (xy 4.183328 3.429035) (xy 4.14122 3.433003) (xy 4.065902 3.433991) (xy 4.012286 3.421466) + (xy 3.978838 3.402869) (xy 3.926268 3.361975) (xy 3.889879 3.317748) (xy 3.86685 3.262126) + (xy 3.854359 3.187047) (xy 3.849587 3.084449) (xy 3.849206 3.032376) (xy 3.850501 2.969948) + (xy 3.968471 2.969948) (xy 3.969839 3.003438) (xy 3.973249 3.008923) (xy 3.995753 3.001472) + (xy 4.044182 2.981753) (xy 4.108908 2.953718) (xy 4.122443 2.947692) (xy 4.204244 2.906096) + (xy 4.249312 2.869538) (xy 4.259217 2.835296) (xy 4.235526 2.800648) (xy 4.21596 2.785339) + (xy 4.14536 2.754721) (xy 4.07928 2.75978) (xy 4.023959 2.797151) (xy 3.985636 2.863473) + (xy 3.973349 2.916116) (xy 3.968471 2.969948) (xy 3.850501 2.969948) (xy 3.85173 2.91072) + (xy 3.861032 2.82071) (xy 3.87946 2.755167) (xy 3.90936 2.706912) (xy 3.95308 2.668767) + (xy 3.972141 2.65644) (xy 4.058726 2.624336) (xy 4.153522 2.622316) (xy 4.245224 2.647838)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 0.139878 -3.712224) (xy 0.245612 -3.711645) (xy 0.322132 -3.710078) (xy 0.374372 -3.707028) + (xy 0.407263 -3.702004) (xy 0.425737 -3.694511) (xy 0.434727 -3.684056) (xy 0.439163 -3.670147) + (xy 0.439594 -3.668346) (xy 0.446333 -3.635855) (xy 0.458808 -3.571748) (xy 0.475719 -3.482849) + (xy 0.495771 -3.375981) (xy 0.517664 -3.257967) (xy 0.518429 -3.253822) (xy 0.540359 -3.138169) + (xy 0.560877 -3.035986) (xy 0.578659 -2.953402) (xy 0.592381 -2.896544) (xy 0.600718 -2.871542) + (xy 0.601116 -2.871099) (xy 0.625677 -2.85889) (xy 0.676315 -2.838544) (xy 0.742095 -2.814455) + (xy 0.742461 -2.814326) (xy 0.825317 -2.783182) (xy 0.923 -2.743509) (xy 1.015077 -2.703619) + (xy 1.019434 -2.701647) (xy 1.169407 -2.63358) (xy 1.501498 -2.860361) (xy 1.603374 -2.929496) + (xy 1.695657 -2.991303) (xy 1.773003 -3.042267) (xy 1.830064 -3.078873) (xy 1.861495 -3.097606) + (xy 1.864479 -3.098996) (xy 1.887321 -3.09281) (xy 1.929982 -3.062965) (xy 1.994128 -3.008053) + (xy 2.081421 -2.926666) (xy 2.170535 -2.840078) (xy 2.256441 -2.754753) (xy 2.333327 -2.676892) + (xy 2.396564 -2.611303) (xy 2.441523 -2.562795) (xy 2.463576 -2.536175) (xy 2.464396 -2.534805) + (xy 2.466834 -2.516537) (xy 2.45765 -2.486705) (xy 2.434574 -2.441279) (xy 2.395337 -2.37623) + (xy 2.33767 -2.28753) (xy 2.260795 -2.173343) (xy 2.19257 -2.072838) (xy 2.131582 -1.982697) + (xy 2.081356 -1.908151) (xy 2.045416 -1.854435) (xy 2.027287 -1.826782) (xy 2.026146 -1.824905) + (xy 2.028359 -1.79841) (xy 2.045138 -1.746914) (xy 2.073142 -1.680149) (xy 2.083122 -1.658828) + (xy 2.126672 -1.563841) (xy 2.173134 -1.456063) (xy 2.210877 -1.362808) (xy 2.238073 -1.293594) + (xy 2.259675 -1.240994) (xy 2.272158 -1.213503) (xy 2.273709 -1.211384) (xy 2.296668 -1.207876) + (xy 2.350786 -1.198262) (xy 2.428868 -1.183911) (xy 2.523719 -1.166193) (xy 2.628143 -1.146475) + (xy 2.734944 -1.126126) (xy 2.836926 -1.106514) (xy 2.926894 -1.089009) (xy 2.997653 -1.074978) + (xy 3.042006 -1.065791) (xy 3.052885 -1.063193) (xy 3.064122 -1.056782) (xy 3.072605 -1.042303) + (xy 3.078714 -1.014867) (xy 3.082832 -0.969589) (xy 3.085341 -0.90158) (xy 3.086621 -0.805953) + (xy 3.087054 -0.67782) (xy 3.087077 -0.625299) (xy 3.087077 -0.198155) (xy 2.9845 -0.177909) + (xy 2.927431 -0.16693) (xy 2.842269 -0.150905) (xy 2.739372 -0.131767) (xy 2.629096 -0.111449) + (xy 2.598615 -0.105868) (xy 2.496855 -0.086083) (xy 2.408205 -0.066627) (xy 2.340108 -0.049303) + (xy 2.300004 -0.035912) (xy 2.293323 -0.031921) (xy 2.276919 -0.003658) (xy 2.253399 0.051109) + (xy 2.227316 0.121588) (xy 2.222142 0.136769) (xy 2.187956 0.230896) (xy 2.145523 0.337101) + (xy 2.103997 0.432473) (xy 2.103792 0.432916) (xy 2.03464 0.582525) (xy 2.489512 1.251617) + (xy 2.1975 1.544116) (xy 2.10918 1.63117) (xy 2.028625 1.707909) (xy 1.96036 1.770237) + (xy 1.908908 1.814056) (xy 1.878794 1.83527) (xy 1.874474 1.836616) (xy 1.849111 1.826016) + (xy 1.797358 1.796547) (xy 1.724868 1.751705) (xy 1.637294 1.694984) (xy 1.542612 1.631462) + (xy 1.446516 1.566668) (xy 1.360837 1.510287) (xy 1.291016 1.465788) (xy 1.242494 1.436639) + (xy 1.220782 1.426308) (xy 1.194293 1.43505) (xy 1.144062 1.458087) (xy 1.080451 1.490631) + (xy 1.073708 1.494249) (xy 0.988046 1.53721) (xy 0.929306 1.558279) (xy 0.892772 1.558503) + (xy 0.873731 1.538928) (xy 0.87362 1.538654) (xy 0.864102 1.515472) (xy 0.841403 1.460441) + (xy 0.807282 1.377822) (xy 0.7635 1.271872) (xy 0.711816 1.146852) (xy 0.653992 1.00702) + (xy 0.597991 0.871637) (xy 0.536447 0.722234) (xy 0.479939 0.583832) (xy 0.430161 0.460673) + (xy 0.388806 0.357002) (xy 0.357568 0.277059) (xy 0.338141 0.225088) (xy 0.332154 0.205692) + (xy 0.347168 0.183443) (xy 0.386439 0.147982) (xy 0.438807 0.108887) (xy 0.587941 -0.014755) + (xy 0.704511 -0.156478) (xy 0.787118 -0.313296) (xy 0.834366 -0.482225) (xy 0.844857 -0.660278) + (xy 0.837231 -0.742461) (xy 0.795682 -0.912969) (xy 0.724123 -1.063541) (xy 0.626995 -1.192691) + (xy 0.508734 -1.298936) (xy 0.37378 -1.38079) (xy 0.226571 -1.436768) (xy 0.071544 -1.465385) + (xy -0.086861 -1.465156) (xy -0.244206 -1.434595) (xy -0.396054 -1.372218) (xy -0.537965 -1.27654) + (xy -0.597197 -1.222428) (xy -0.710797 -1.08348) (xy -0.789894 -0.931639) (xy -0.835014 -0.771333) + (xy -0.846684 -0.606988) (xy -0.825431 -0.443029) (xy -0.77178 -0.283882) (xy -0.68626 -0.133975) + (xy -0.569395 0.002267) (xy -0.438807 0.108887) (xy -0.384412 0.149642) (xy -0.345986 0.184718) + (xy -0.332154 0.205726) (xy -0.339397 0.228635) (xy -0.359995 0.283365) (xy -0.392254 0.365672) + (xy -0.434479 0.471315) (xy -0.484977 0.59605) (xy -0.542052 0.735636) (xy -0.598146 0.87167) + (xy -0.660033 1.021201) (xy -0.717356 1.159767) (xy -0.768356 1.283107) (xy -0.811273 1.386964) + (xy -0.844347 1.46708) (xy -0.865819 1.519195) (xy -0.873775 1.538654) (xy -0.892571 1.558423) + (xy -0.928926 1.558365) (xy -0.987521 1.537441) (xy -1.073032 1.494613) (xy -1.073708 1.494249) + (xy -1.138093 1.461012) (xy -1.190139 1.436802) (xy -1.219488 1.426404) (xy -1.220783 1.426308) + (xy -1.242876 1.436855) (xy -1.291652 1.466184) (xy -1.361669 1.510827) (xy -1.447486 1.567314) + (xy -1.542612 1.631462) (xy -1.63946 1.696411) (xy -1.726747 1.752896) (xy -1.798819 1.797421) + (xy -1.850023 1.82649) (xy -1.874474 1.836616) (xy -1.89699 1.823307) (xy -1.942258 1.786112) + (xy -2.005756 1.729128) (xy -2.082961 1.656449) (xy -2.169349 1.572171) (xy -2.197601 1.544016) + (xy -2.489713 1.251416) (xy -2.267369 0.925104) (xy -2.199798 0.824897) (xy -2.140493 0.734963) + (xy -2.092783 0.66051) (xy -2.059993 0.606751) (xy -2.045452 0.578894) (xy -2.045026 0.576912) + (xy -2.052692 0.550655) (xy -2.073311 0.497837) (xy -2.103315 0.42731) (xy -2.124375 0.380093) + (xy -2.163752 0.289694) (xy -2.200835 0.198366) (xy -2.229585 0.1212) (xy -2.237395 0.097692) + (xy -2.259583 0.034916) (xy -2.281273 -0.013589) (xy -2.293187 -0.031921) (xy -2.319477 -0.043141) + (xy -2.376858 -0.059046) (xy -2.457882 -0.077833) (xy -2.555105 -0.097701) (xy -2.598615 -0.105868) + (xy -2.709104 -0.126171) (xy -2.815084 -0.14583) (xy -2.906199 -0.162912) (xy -2.972092 -0.175482) + (xy -2.9845 -0.177909) (xy -3.087077 -0.198155) (xy -3.087077 -0.625299) (xy -3.086847 -0.765754) + (xy -3.085901 -0.872021) (xy -3.083859 -0.948987) (xy -3.080338 -1.00154) (xy -3.074957 -1.034567) + (xy -3.067334 -1.052955) (xy -3.057088 -1.061592) (xy -3.052885 -1.063193) (xy -3.02753 -1.068873) + (xy -2.971516 -1.080205) (xy -2.892036 -1.095821) (xy -2.796288 -1.114353) (xy -2.691467 -1.134431) + (xy -2.584768 -1.154688) (xy -2.483387 -1.173754) (xy -2.394521 -1.190261) (xy -2.325363 -1.202841) + (xy -2.283111 -1.210125) (xy -2.27371 -1.211384) (xy -2.265193 -1.228237) (xy -2.24634 -1.27313) + (xy -2.220676 -1.33757) (xy -2.210877 -1.362808) (xy -2.171352 -1.460314) (xy -2.124808 -1.568041) + (xy -2.083123 -1.658828) (xy -2.05245 -1.728247) (xy -2.032044 -1.78529) (xy -2.025232 -1.820223) + (xy -2.026318 -1.824905) (xy -2.040715 -1.847009) (xy -2.073588 -1.896169) (xy -2.12141 -1.967152) + (xy -2.180652 -2.054722) (xy -2.247785 -2.153643) (xy -2.261059 -2.17317) (xy -2.338954 -2.28886) + (xy -2.396213 -2.376956) (xy -2.435119 -2.441514) (xy -2.457956 -2.486589) (xy -2.467006 -2.516237) + (xy -2.464552 -2.534515) (xy -2.464489 -2.534631) (xy -2.445173 -2.558639) (xy -2.402449 -2.605053) + (xy -2.340949 -2.669063) (xy -2.265302 -2.745855) (xy -2.180139 -2.830618) (xy -2.170535 -2.840078) + (xy -2.06321 -2.944011) (xy -1.980385 -3.020325) (xy -1.920395 -3.070429) (xy -1.881577 -3.09573) + (xy -1.86448 -3.098996) (xy -1.839527 -3.08475) (xy -1.787745 -3.051844) (xy -1.71448 -3.003792) + (xy -1.62508 -2.94411) (xy -1.524889 -2.876312) (xy -1.501499 -2.860361) (xy -1.169407 -2.63358) + (xy -1.019435 -2.701647) (xy -0.92823 -2.741315) (xy -0.830331 -2.781209) (xy -0.746169 -2.813017) + (xy -0.742462 -2.814326) (xy -0.676631 -2.838424) (xy -0.625884 -2.8588) (xy -0.601158 -2.871064) + (xy -0.601116 -2.871099) (xy -0.593271 -2.893266) (xy -0.579934 -2.947783) (xy -0.56243 -3.02852) + (xy -0.542083 -3.12935) (xy -0.520218 -3.244144) (xy -0.518429 -3.253822) (xy -0.496496 -3.372096) + (xy -0.47636 -3.479458) (xy -0.45932 -3.569083) (xy -0.446672 -3.634149) (xy -0.439716 -3.667832) + (xy -0.439594 -3.668346) (xy -0.435361 -3.682675) (xy -0.427129 -3.693493) (xy -0.409967 -3.701294) + (xy -0.378942 -3.706571) (xy -0.329122 -3.709818) (xy -0.255576 -3.711528) (xy -0.153371 -3.712193) + (xy -0.017575 -3.712307) (xy 0 -3.712308) (xy 0.139878 -3.712224)) (layer "F.Cu") (width 0.01)) + ) + + (gr_line (start 74.9046 158.115) (end 90.6526 158.115) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 74.9046 173.863) (end 74.9046 158.115) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 90.6526 173.863) (end 74.9046 173.863) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 90.6526 158.115) (end 90.6526 173.863) (layer "Edge.Cuts") (width 0.1)) + (gr_text "Universal Keyboard Rev 1.1 http://osiweb.org\nCherry Key Aligner" (at 294.767 170.307) (layer "F.SilkS") + (effects (font (size 1.524 1.524) (thickness 0.1778)) (justify left)) + ) + (gr_circle (center 143.51 78.74) (end 145.0975 78.74) (layer "Edge.Cuts") (width 0.1) (tstamp 5D91233E)) + (gr_line (start 62.23 177.8) (end 369.57 177.8) (layer "Edge.Cuts") (width 0.1) (tstamp 5D911490)) + (gr_line (start 62.23 73.914) (end 62.23 177.8) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 369.57 73.914) (end 62.23 73.914) (layer "Edge.Cuts") (width 0.1) (tstamp 5D91148D)) + (gr_line (start 369.57 177.8) (end 369.57 73.914) (layer "Edge.Cuts") (width 0.1) (tstamp 5D91148A)) + (gr_text "Distances:\nVertical: 0.75 inch\nHorizontal (1x - 1x): 0.75 inch\nHorizontal (1x - 1.5x): 0.939 inch\nHorizontal (Row 1 left key -> Row 2 left key): -0.379 inch\nHorizontal (Row 2 left key -> Row 3 left key): 0.187 inch\nHorizontal (Row 3 left key -> Row 4 left key): 0.186 inch\nHorizontal (Row 4 left key -> space bar): 4.310 inch" (at 38.4175 240.0681) (layer "Cmts.User") + (effects (font (size 2.54 2.54) (thickness 0.3048)) (justify left)) + ) + +) diff --git a/hardware/keyboard-classic/Aligner-cherry/aligner-cherry.pro b/hardware/keyboard-classic/Aligner-cherry/aligner-cherry.pro new file mode 100644 index 0000000..5cd0983 --- /dev/null +++ b/hardware/keyboard-classic/Aligner-cherry/aligner-cherry.pro @@ -0,0 +1,34 @@ +update=05/04/2019 20:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +CopperEdgeClearance=0.000000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/hardware/keyboard-classic/Aligner-futaba/aligner-futaba.kicad_pcb b/hardware/keyboard-classic/Aligner-futaba/aligner-futaba.kicad_pcb new file mode 100644 index 0000000..40dc03d --- /dev/null +++ b/hardware/keyboard-classic/Aligner-futaba/aligner-futaba.kicad_pcb @@ -0,0 +1,1628 @@ +(kicad_pcb (version 20190905) (host pcbnew "(5.99.0-232-g388351510)") + + (general + (thickness 1.6) + (drawings 18) + (tracks 0) + (modules 72) + (nets 1) + ) + + (page "B") + (title_block + (title "Futaba Key aligner") + (date "2019-08-25") + (rev "1.1") + (company "OSIWeb.org") + (comment 1 "Key matrix w/ LED") + ) + + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (max_error 0.005) + (defaults + (edge_clearance 0.01) + (edge_cuts_line_width 0.1) + (courtyard_line_width 0.05) + (copper_line_width 0.2) + (copper_text_dims (size 1.5 1.5) (thickness 0.3) keep_upright) + (silk_line_width 0.15) + (silk_text_dims (size 1 1) (thickness 0.15) keep_upright) + (other_layers_line_width 0.1) + (other_layers_text_dims (size 1 1) (thickness 0.15) keep_upright) + ) + (pad_size 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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 0) + (scaleselection 1) + (outputdirectory "futaba-aligner-outputs") + ) + ) + + (net 0 "") + + (net_class "Default" "This is the default net class." + (clearance 0.2) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class "power1" "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class "signal" "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 67.31 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 107.7595 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 284.607 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 363.22 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 364.49 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 348.9706 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 300.7106 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 290.83 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 217.17 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 143.51 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "MountingHole:MountingHole_3.5mm" (layer "F.Cu") (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 67.31 78.74) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference "REF**" (at 0 -4.5) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "MountingHole_3.5mm" (at 0 4.5) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user "%R" (at 0.3 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer "Cmts.User") (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer "F.CrtYd") (width 0.05)) + (pad "1" np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7A0F) + (at 196.94398 165.99916) + (path "/5BC3E99D/5BC6CD72") + (fp_text reference "SW46" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "SPACE" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBBE7) + (at 244.67058 146.94916) + (path "/5BC3E99D/5BC6CEDD") + (fp_text reference "SW37" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Comma" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7CEF) + (at 87.62238 89.79916) + (path "/5BC3EA0A/5BCAF489") + (fp_text reference "SW31" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "1" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7CDF) + (at 220.97238 89.79916) + (path "/5BC3EA0A/5BCAF419") + (fp_text reference "SW30" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "8" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D633EAE) + (at 263.72058 146.94916) + (path "/5BC3EA0A/5BCAF3A9") + (fp_text reference "SW29" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Period" (at -4.38658 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9EDE) + (at 115.91798 108.84916) + (path "/5BC3EA0A/5BCAF339") + (fp_text reference "SW28" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "W" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7CAF) + (at 106.67238 89.79916) + (path "/5BC3EA0A/5BCAF490") + (fp_text reference "SW27" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "2" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7C9F) + (at 240.02238 89.79916) + (path "/5BC3EA0A/5BCAF420") + (fp_text reference "SW26" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "9" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FAB87) + (at 254.19558 127.89916) + (path "/5BC3EA0A/5BCAF3B0") + (fp_text reference "SW25" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "L" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9EA5) + (at 134.96798 108.84916) + (path "/5BC3EA0A/5BCAF340") + (fp_text reference "SW24" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "E" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7C6F) + (at 125.72238 89.79916) + (path "/5BC3EA0A/5BCAF482") + (fp_text reference "SW23" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "3" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D633858) + (at 249.26798 108.84916) + (path "/5BC3EA0A/5BCAF412") + (fp_text reference "SW22" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "0" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7C4F) + (at 259.07238 89.79916) + (path "/5BC3EA0A/5BCAF3A2") + (fp_text reference "SW21" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "O" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9E6C) + (at 154.01798 108.84916) + (path "/5BC3EA0A/5BCAF332") + (fp_text reference "SW20" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "R" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7C2F) + (at 144.77238 89.79916) + (path "/5BC3EA0A/5BCAF47B") + (fp_text reference "SW19" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "4" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7C1F) + (at 278.12238 89.79916) + (path "/5BC3EA0A/5BCAF40B") + (fp_text reference "SW18" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Colon" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9D4F) + (at 287.36798 108.84916) + (path "/5BC3EA0A/5BCAF39B") + (fp_text reference "SW17" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Line Feed" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9D88) + (at 173.06798 108.84916) + (path "/5BC3EA0A/5BCAF32B") + (fp_text reference "SW16" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "T" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7BEF) + (at 163.82238 89.79916) + (path "/5BC3EA0A/5BCAF46D") + (fp_text reference "SW15" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "5" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7BDF) + (at 297.17238 89.79916) + (path "/5BC3EA0A/5BCAF3FD") + (fp_text reference "SW14" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Dash" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D10F44A) + (at 311.21858 108.84916) + (path "/5BC3EA0A/5BCAF38D") + (fp_text reference "SW13" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Return" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9DFA) + (at 192.11798 108.84916) + (path "/5BC3EA0A/5BCAF31D") + (fp_text reference "SW12" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Y" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7BAF) + (at 182.87238 89.79916) + (path "/5BC3EA0A/5BCAF474") + (fp_text reference "SW11" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "6" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D105DE3) + (at 316.22238 89.79916) + (path "/5BC3EA0A/5BCAF404") + (fp_text reference "SW10" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Bracket_Open" (at -2.794 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7B8F) + (at 335.06918 108.84916) + (path "/5BC3EA0A/5BCAF394") + (fp_text reference "SW9" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Shift_Lock" (at -4.1275 8.7884) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9DC1) + (at 211.16798 108.84916) + (path "/5BC3EA0A/5BCAF324") + (fp_text reference "SW8" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "U" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7B6F) + (at 201.92238 89.79916) + (path "/5BC3EA0A/5BCAF466") + (fp_text reference "SW7" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "7" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D105E93) + (at 335.27238 89.79916) + (path "/5BC3EA0A/5BCAF3F6") + (fp_text reference "SW6" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Bracket_Close" (at -2.794 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F200E) + (at 349.44558 127.89916) + (path "/5BC3EA0A/5BCAF386") + (fp_text reference "SW5" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Here_is" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9D16) + (at 230.21798 108.84916) + (path "/5BC3EA0A/5BCAF316") + (fp_text reference "SW4" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "I" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7B1F) + (at 354.32238 89.79916) + (path "/5BC3EA0A/5BCAF3EF") + (fp_text reference "SW3" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Tilde" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F6109) + (at 330.47178 146.94916) + (path "/5BC3EA0A/5BCAF37F") + (fp_text reference "SW2" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Repeat" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FAB4E) + (at 120.84558 127.89916) + (path "/5BC3E99D/5BC6D0D0") + (fp_text reference "SW60" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "S" (at -4.13258 8.62584) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB692) + (at 130.37058 146.94916) + (path "/5BC3E99D/5BC6CF00") + (fp_text reference "SW59" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "X" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0F9CDD) + (at 96.86798 108.84916) + (path "/5BC3E99D/5BC6CD80") + (fp_text reference "SW58" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Q" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D633B5C) + (at 311.34558 127.89916) + (path "/5BC3E99D/5BC3FF70") + (fp_text reference "SW57" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Backslash" (at -4.25958 8.75284) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FAB15) + (at 139.89558 127.89916) + (path "/5BC3E99D/5BC6D0D7") + (fp_text reference "SW56" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "D" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB659) + (at 149.42058 146.94916) + (path "/5BC3E99D/5BC6CF07") + (fp_text reference "SW55" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "C" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FAADC) + (at 101.79558 127.89916) + (path "/5BC3E99D/5BC6CD87") + (fp_text reference "SW54" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "A" (at -4.89458 8.62584) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FAF44) + (at 82.74558 127.89916) + (path "/5BC3E99D/5BC3FF77") + (fp_text reference "SW53" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "CTRL" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB0A3) + (at 158.94558 127.89916) + (path "/5BC3E99D/5BC6D0C9") + (fp_text reference "SW52" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "F" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBCCB) + (at 168.47058 146.94916) + (path "/5BC3E99D/5BC6CEF9") + (fp_text reference "SW51" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "V" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBC59) + (at 111.32058 146.94916) + (path "/5BC3E99D/5BC6CD79") + (fp_text reference "SW50" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Z" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FA2F5) + (at 77.99578 108.84916) + (path "/5BC3E99D/5BC3FF69") + (fp_text reference "SW49" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "ESC" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB115) + (at 177.99558 127.89916) + (path "/5BC3E99D/5BC6D0C2") + (fp_text reference "SW48" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "G" (at -4.00558 8.62584) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBB3C) + (at 187.52058 146.94916) + (path "/5BC3E99D/5BC6CEF2") + (fp_text reference "SW47" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "B" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB187) + (at 197.04558 127.89916) + (path "/5BC3E99D/5BC6D0B4") + (fp_text reference "SW45" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "H" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBC20) + (at 206.57058 146.94916) + (path "/5BC3E99D/5BC6CEE4") + (fp_text reference "SW44" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "N" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBBAE) + (at 282.77058 146.94916) + (path "/5BC3E99D/5BC6CD64") + (fp_text reference "SW43" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Fwd_Slash" (at -4.13258 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB14E) + (at 216.09558 127.89916) + (path "/5BC3E99D/5BC6D0BB") + (fp_text reference "SW42" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "J" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBC92) + (at 225.62058 146.94916) + (path "/5BC3E99D/5BC6CEEB") + (fp_text reference "SW41" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "M" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB031) + (at 273.24558 127.89916) + (path "/5BC3E99D/5BC6CD6B") + (fp_text reference "SW40" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Semicolon" (at -4.13258 8.87984) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBB75) + (at 87.46998 146.94916) + (path "/5BC3E99D/5BC3FE57") + (fp_text reference "SW39" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "L_Shift" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB06A) + (at 235.14558 127.89916) + (path "/5BC3E99D/5BC6D0AD") + (fp_text reference "SW38" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "K" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FA32E) + (at 268.31798 108.84916) + (path "/5BC3E99D/5BC6CD5D") + (fp_text reference "SW36" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "P" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FBD04) + (at 306.62118 146.94916) + (path "/5BC3E99D/5BC3FD26") + (fp_text reference "SW35" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "R_Shift" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0EE51F) + (at 330.39558 127.89916) + (path "/5D6C3751") + (fp_text reference "SW34" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Rubout" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D791F) + (at 354.11918 108.84916) + (path "/5BC3E99D/5BC6CED6") + (fp_text reference "SW33" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Break" (at -5.334 8.6614) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0FB0DC) + (at 292.29558 127.89916) + (path "/5D6BE647") + (fp_text reference "SW32" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Ampersand" (at -4.25958 8.87984) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "unikbd:Futaba-MD-4PCS-aligner" locked (layer "F.Cu") (tedit 5DA63068) (tstamp 5D0D7AFF) + (at 349.52178 146.94916) + (path "/5BC3EA0A/5BCAF30F") + (fp_text reference "SW1" (at -5.7912 -8.6106) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Clear" (at -3.31978 8.75284) (layer "F.SilkS") + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 7.8232 0) (layer "Edge.Cuts") (width 0.12)) + (pad "" np_thru_hole circle (at -6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at -6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + (pad "" np_thru_hole circle (at 6.985 -6.985) (size 1.6256 1.6256) (drill 1.6256) (layers *.Cu *.Mask)) + ) + + (module "Symbol:OSHW-Logo2_9.8x8mm_Copper" (layer "F.Cu") (tedit 0) (tstamp 5DA65A53) + (at 72.136 148.336) + (descr "Open Source Hardware Symbol") + (tags "Logo Symbol OSHW") + (attr virtual) + (fp_text reference "REF**" (at 0 0) (layer "F.SilkS") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "OSHW-Logo2_9.8x8mm_Copper" (at 0.75 0) (layer "F.Fab") hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_poly (pts (xy 0.139878 -3.712224) (xy 0.245612 -3.711645) (xy 0.322132 -3.710078) (xy 0.374372 -3.707028) + (xy 0.407263 -3.702004) (xy 0.425737 -3.694511) (xy 0.434727 -3.684056) (xy 0.439163 -3.670147) + (xy 0.439594 -3.668346) (xy 0.446333 -3.635855) (xy 0.458808 -3.571748) (xy 0.475719 -3.482849) + (xy 0.495771 -3.375981) (xy 0.517664 -3.257967) (xy 0.518429 -3.253822) (xy 0.540359 -3.138169) + (xy 0.560877 -3.035986) (xy 0.578659 -2.953402) (xy 0.592381 -2.896544) (xy 0.600718 -2.871542) + (xy 0.601116 -2.871099) (xy 0.625677 -2.85889) (xy 0.676315 -2.838544) (xy 0.742095 -2.814455) + (xy 0.742461 -2.814326) (xy 0.825317 -2.783182) (xy 0.923 -2.743509) (xy 1.015077 -2.703619) + (xy 1.019434 -2.701647) (xy 1.169407 -2.63358) (xy 1.501498 -2.860361) (xy 1.603374 -2.929496) + (xy 1.695657 -2.991303) (xy 1.773003 -3.042267) (xy 1.830064 -3.078873) (xy 1.861495 -3.097606) + (xy 1.864479 -3.098996) (xy 1.887321 -3.09281) (xy 1.929982 -3.062965) (xy 1.994128 -3.008053) + (xy 2.081421 -2.926666) (xy 2.170535 -2.840078) (xy 2.256441 -2.754753) (xy 2.333327 -2.676892) + (xy 2.396564 -2.611303) (xy 2.441523 -2.562795) (xy 2.463576 -2.536175) (xy 2.464396 -2.534805) + (xy 2.466834 -2.516537) (xy 2.45765 -2.486705) (xy 2.434574 -2.441279) (xy 2.395337 -2.37623) + (xy 2.33767 -2.28753) (xy 2.260795 -2.173343) (xy 2.19257 -2.072838) (xy 2.131582 -1.982697) + (xy 2.081356 -1.908151) (xy 2.045416 -1.854435) (xy 2.027287 -1.826782) (xy 2.026146 -1.824905) + (xy 2.028359 -1.79841) (xy 2.045138 -1.746914) (xy 2.073142 -1.680149) (xy 2.083122 -1.658828) + (xy 2.126672 -1.563841) (xy 2.173134 -1.456063) (xy 2.210877 -1.362808) (xy 2.238073 -1.293594) + (xy 2.259675 -1.240994) (xy 2.272158 -1.213503) (xy 2.273709 -1.211384) (xy 2.296668 -1.207876) + (xy 2.350786 -1.198262) (xy 2.428868 -1.183911) (xy 2.523719 -1.166193) (xy 2.628143 -1.146475) + (xy 2.734944 -1.126126) (xy 2.836926 -1.106514) (xy 2.926894 -1.089009) (xy 2.997653 -1.074978) + (xy 3.042006 -1.065791) (xy 3.052885 -1.063193) (xy 3.064122 -1.056782) (xy 3.072605 -1.042303) + (xy 3.078714 -1.014867) (xy 3.082832 -0.969589) (xy 3.085341 -0.90158) (xy 3.086621 -0.805953) + (xy 3.087054 -0.67782) (xy 3.087077 -0.625299) (xy 3.087077 -0.198155) (xy 2.9845 -0.177909) + (xy 2.927431 -0.16693) (xy 2.842269 -0.150905) (xy 2.739372 -0.131767) (xy 2.629096 -0.111449) + (xy 2.598615 -0.105868) (xy 2.496855 -0.086083) (xy 2.408205 -0.066627) (xy 2.340108 -0.049303) + (xy 2.300004 -0.035912) (xy 2.293323 -0.031921) (xy 2.276919 -0.003658) (xy 2.253399 0.051109) + (xy 2.227316 0.121588) (xy 2.222142 0.136769) (xy 2.187956 0.230896) (xy 2.145523 0.337101) + (xy 2.103997 0.432473) (xy 2.103792 0.432916) (xy 2.03464 0.582525) (xy 2.489512 1.251617) + (xy 2.1975 1.544116) (xy 2.10918 1.63117) (xy 2.028625 1.707909) (xy 1.96036 1.770237) + (xy 1.908908 1.814056) (xy 1.878794 1.83527) (xy 1.874474 1.836616) (xy 1.849111 1.826016) + (xy 1.797358 1.796547) (xy 1.724868 1.751705) (xy 1.637294 1.694984) (xy 1.542612 1.631462) + (xy 1.446516 1.566668) (xy 1.360837 1.510287) (xy 1.291016 1.465788) (xy 1.242494 1.436639) + (xy 1.220782 1.426308) (xy 1.194293 1.43505) (xy 1.144062 1.458087) (xy 1.080451 1.490631) + (xy 1.073708 1.494249) (xy 0.988046 1.53721) (xy 0.929306 1.558279) (xy 0.892772 1.558503) + (xy 0.873731 1.538928) (xy 0.87362 1.538654) (xy 0.864102 1.515472) (xy 0.841403 1.460441) + (xy 0.807282 1.377822) (xy 0.7635 1.271872) (xy 0.711816 1.146852) (xy 0.653992 1.00702) + (xy 0.597991 0.871637) (xy 0.536447 0.722234) (xy 0.479939 0.583832) (xy 0.430161 0.460673) + (xy 0.388806 0.357002) (xy 0.357568 0.277059) (xy 0.338141 0.225088) (xy 0.332154 0.205692) + (xy 0.347168 0.183443) (xy 0.386439 0.147982) (xy 0.438807 0.108887) (xy 0.587941 -0.014755) + (xy 0.704511 -0.156478) (xy 0.787118 -0.313296) (xy 0.834366 -0.482225) (xy 0.844857 -0.660278) + (xy 0.837231 -0.742461) (xy 0.795682 -0.912969) (xy 0.724123 -1.063541) (xy 0.626995 -1.192691) + (xy 0.508734 -1.298936) (xy 0.37378 -1.38079) (xy 0.226571 -1.436768) (xy 0.071544 -1.465385) + (xy -0.086861 -1.465156) (xy -0.244206 -1.434595) (xy -0.396054 -1.372218) (xy -0.537965 -1.27654) + (xy -0.597197 -1.222428) (xy -0.710797 -1.08348) (xy -0.789894 -0.931639) (xy -0.835014 -0.771333) + (xy -0.846684 -0.606988) (xy -0.825431 -0.443029) (xy -0.77178 -0.283882) (xy -0.68626 -0.133975) + (xy -0.569395 0.002267) (xy -0.438807 0.108887) (xy -0.384412 0.149642) (xy -0.345986 0.184718) + (xy -0.332154 0.205726) (xy -0.339397 0.228635) (xy -0.359995 0.283365) (xy -0.392254 0.365672) + (xy -0.434479 0.471315) (xy -0.484977 0.59605) (xy -0.542052 0.735636) (xy -0.598146 0.87167) + (xy -0.660033 1.021201) (xy -0.717356 1.159767) (xy -0.768356 1.283107) (xy -0.811273 1.386964) + (xy -0.844347 1.46708) (xy -0.865819 1.519195) (xy -0.873775 1.538654) (xy -0.892571 1.558423) + (xy -0.928926 1.558365) (xy -0.987521 1.537441) (xy -1.073032 1.494613) (xy -1.073708 1.494249) + (xy -1.138093 1.461012) (xy -1.190139 1.436802) (xy -1.219488 1.426404) (xy -1.220783 1.426308) + (xy -1.242876 1.436855) (xy -1.291652 1.466184) (xy -1.361669 1.510827) (xy -1.447486 1.567314) + (xy -1.542612 1.631462) (xy -1.63946 1.696411) (xy -1.726747 1.752896) (xy -1.798819 1.797421) + (xy -1.850023 1.82649) (xy -1.874474 1.836616) (xy -1.89699 1.823307) (xy -1.942258 1.786112) + (xy -2.005756 1.729128) (xy -2.082961 1.656449) (xy -2.169349 1.572171) (xy -2.197601 1.544016) + (xy -2.489713 1.251416) (xy -2.267369 0.925104) (xy -2.199798 0.824897) (xy -2.140493 0.734963) + (xy -2.092783 0.66051) (xy -2.059993 0.606751) (xy -2.045452 0.578894) (xy -2.045026 0.576912) + (xy -2.052692 0.550655) (xy -2.073311 0.497837) (xy -2.103315 0.42731) (xy -2.124375 0.380093) + (xy -2.163752 0.289694) (xy -2.200835 0.198366) (xy -2.229585 0.1212) (xy -2.237395 0.097692) + (xy -2.259583 0.034916) (xy -2.281273 -0.013589) (xy -2.293187 -0.031921) (xy -2.319477 -0.043141) + (xy -2.376858 -0.059046) (xy -2.457882 -0.077833) (xy -2.555105 -0.097701) (xy -2.598615 -0.105868) + (xy -2.709104 -0.126171) (xy -2.815084 -0.14583) (xy -2.906199 -0.162912) (xy -2.972092 -0.175482) + (xy -2.9845 -0.177909) (xy -3.087077 -0.198155) (xy -3.087077 -0.625299) (xy -3.086847 -0.765754) + (xy -3.085901 -0.872021) (xy -3.083859 -0.948987) (xy -3.080338 -1.00154) (xy -3.074957 -1.034567) + (xy -3.067334 -1.052955) (xy -3.057088 -1.061592) (xy -3.052885 -1.063193) (xy -3.02753 -1.068873) + (xy -2.971516 -1.080205) (xy -2.892036 -1.095821) (xy -2.796288 -1.114353) (xy -2.691467 -1.134431) + (xy -2.584768 -1.154688) (xy -2.483387 -1.173754) (xy -2.394521 -1.190261) (xy -2.325363 -1.202841) + (xy -2.283111 -1.210125) (xy -2.27371 -1.211384) (xy -2.265193 -1.228237) (xy -2.24634 -1.27313) + (xy -2.220676 -1.33757) (xy -2.210877 -1.362808) (xy -2.171352 -1.460314) (xy -2.124808 -1.568041) + (xy -2.083123 -1.658828) (xy -2.05245 -1.728247) (xy -2.032044 -1.78529) (xy -2.025232 -1.820223) + (xy -2.026318 -1.824905) (xy -2.040715 -1.847009) (xy -2.073588 -1.896169) (xy -2.12141 -1.967152) + (xy -2.180652 -2.054722) (xy -2.247785 -2.153643) (xy -2.261059 -2.17317) (xy -2.338954 -2.28886) + (xy -2.396213 -2.376956) (xy -2.435119 -2.441514) (xy -2.457956 -2.486589) (xy -2.467006 -2.516237) + (xy -2.464552 -2.534515) (xy -2.464489 -2.534631) (xy -2.445173 -2.558639) (xy -2.402449 -2.605053) + (xy -2.340949 -2.669063) (xy -2.265302 -2.745855) (xy -2.180139 -2.830618) (xy -2.170535 -2.840078) + (xy -2.06321 -2.944011) (xy -1.980385 -3.020325) (xy -1.920395 -3.070429) (xy -1.881577 -3.09573) + (xy -1.86448 -3.098996) (xy -1.839527 -3.08475) (xy -1.787745 -3.051844) (xy -1.71448 -3.003792) + (xy -1.62508 -2.94411) (xy -1.524889 -2.876312) (xy -1.501499 -2.860361) (xy -1.169407 -2.63358) + (xy -1.019435 -2.701647) (xy -0.92823 -2.741315) (xy -0.830331 -2.781209) (xy -0.746169 -2.813017) + (xy -0.742462 -2.814326) (xy -0.676631 -2.838424) (xy -0.625884 -2.8588) (xy -0.601158 -2.871064) + (xy -0.601116 -2.871099) (xy -0.593271 -2.893266) (xy -0.579934 -2.947783) (xy -0.56243 -3.02852) + (xy -0.542083 -3.12935) (xy -0.520218 -3.244144) (xy -0.518429 -3.253822) (xy -0.496496 -3.372096) + (xy -0.47636 -3.479458) (xy -0.45932 -3.569083) (xy -0.446672 -3.634149) (xy -0.439716 -3.667832) + (xy -0.439594 -3.668346) (xy -0.435361 -3.682675) (xy -0.427129 -3.693493) (xy -0.409967 -3.701294) + (xy -0.378942 -3.706571) (xy -0.329122 -3.709818) (xy -0.255576 -3.711528) (xy -0.153371 -3.712193) + (xy -0.017575 -3.712307) (xy 0 -3.712308) (xy 0.139878 -3.712224)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 4.245224 2.647838) (xy 4.322528 2.698361) (xy 4.359814 2.74359) (xy 4.389353 2.825663) + (xy 4.391699 2.890607) (xy 4.386385 2.977445) (xy 4.186115 3.065103) (xy 4.088739 3.109887) + (xy 4.025113 3.145913) (xy 3.992029 3.177117) (xy 3.98628 3.207436) (xy 4.004658 3.240805) + (xy 4.024923 3.262923) (xy 4.083889 3.298393) (xy 4.148024 3.300879) (xy 4.206926 3.273235) + (xy 4.250197 3.21832) (xy 4.257936 3.198928) (xy 4.295006 3.138364) (xy 4.337654 3.112552) + (xy 4.396154 3.090471) (xy 4.396154 3.174184) (xy 4.390982 3.23115) (xy 4.370723 3.279189) + (xy 4.328262 3.334346) (xy 4.321951 3.341514) (xy 4.27472 3.390585) (xy 4.234121 3.41692) + (xy 4.183328 3.429035) (xy 4.14122 3.433003) (xy 4.065902 3.433991) (xy 4.012286 3.421466) + (xy 3.978838 3.402869) (xy 3.926268 3.361975) (xy 3.889879 3.317748) (xy 3.86685 3.262126) + (xy 3.854359 3.187047) (xy 3.849587 3.084449) (xy 3.849206 3.032376) (xy 3.850501 2.969948) + (xy 3.968471 2.969948) (xy 3.969839 3.003438) (xy 3.973249 3.008923) (xy 3.995753 3.001472) + (xy 4.044182 2.981753) (xy 4.108908 2.953718) (xy 4.122443 2.947692) (xy 4.204244 2.906096) + (xy 4.249312 2.869538) (xy 4.259217 2.835296) (xy 4.235526 2.800648) (xy 4.21596 2.785339) + (xy 4.14536 2.754721) (xy 4.07928 2.75978) (xy 4.023959 2.797151) (xy 3.985636 2.863473) + (xy 3.973349 2.916116) (xy 3.968471 2.969948) (xy 3.850501 2.969948) (xy 3.85173 2.91072) + (xy 3.861032 2.82071) (xy 3.87946 2.755167) (xy 3.90936 2.706912) (xy 3.95308 2.668767) + (xy 3.972141 2.65644) (xy 4.058726 2.624336) (xy 4.153522 2.622316) (xy 4.245224 2.647838)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 3.570807 2.636782) (xy 3.594161 2.646988) (xy 3.649902 2.691134) (xy 3.697569 2.754967) + (xy 3.727048 2.823087) (xy 3.731846 2.85667) (xy 3.71576 2.903556) (xy 3.680475 2.928365) + (xy 3.642644 2.943387) (xy 3.625321 2.946155) (xy 3.616886 2.926066) (xy 3.60023 2.882351) + (xy 3.592923 2.862598) (xy 3.551948 2.794271) (xy 3.492622 2.760191) (xy 3.416552 2.761239) + (xy 3.410918 2.762581) (xy 3.370305 2.781836) (xy 3.340448 2.819375) (xy 3.320055 2.879809) + (xy 3.307836 2.967751) (xy 3.3025 3.087813) (xy 3.302 3.151698) (xy 3.301752 3.252403) + (xy 3.300126 3.321054) (xy 3.295801 3.364673) (xy 3.287454 3.390282) (xy 3.273765 3.404903) + (xy 3.253411 3.415558) (xy 3.252234 3.416095) (xy 3.213038 3.432667) (xy 3.193619 3.438769) + (xy 3.190635 3.420319) (xy 3.188081 3.369323) (xy 3.18614 3.292308) (xy 3.184997 3.195805) + (xy 3.184769 3.125184) (xy 3.185932 2.988525) (xy 3.190479 2.884851) (xy 3.199999 2.808108) + (xy 3.216081 2.752246) (xy 3.240313 2.711212) (xy 3.274286 2.678954) (xy 3.307833 2.65644) + (xy 3.388499 2.626476) (xy 3.482381 2.619718) (xy 3.570807 2.636782)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 2.887333 2.633528) (xy 2.94359 2.659117) (xy 2.987747 2.690124) (xy 3.020101 2.724795) + (xy 3.042438 2.76952) (xy 3.056546 2.830692) (xy 3.064211 2.914701) (xy 3.06722 3.02794) + (xy 3.067538 3.102509) (xy 3.067538 3.39342) (xy 3.017773 3.416095) (xy 2.978576 3.432667) + (xy 2.959157 3.438769) (xy 2.955442 3.42061) (xy 2.952495 3.371648) (xy 2.950691 3.300153) + (xy 2.950308 3.243385) (xy 2.948661 3.161371) (xy 2.944222 3.096309) (xy 2.93774 3.056467) + (xy 2.93259 3.048) (xy 2.897977 3.056646) (xy 2.84364 3.078823) (xy 2.780722 3.108886) + (xy 2.720368 3.141192) (xy 2.673721 3.170098) (xy 2.651926 3.189961) (xy 2.651839 3.190175) + (xy 2.653714 3.226935) (xy 2.670525 3.262026) (xy 2.700039 3.290528) (xy 2.743116 3.300061) + (xy 2.779932 3.29895) (xy 2.832074 3.298133) (xy 2.859444 3.310349) (xy 2.875882 3.342624) + (xy 2.877955 3.34871) (xy 2.885081 3.394739) (xy 2.866024 3.422687) (xy 2.816353 3.436007) + (xy 2.762697 3.43847) (xy 2.666142 3.42021) (xy 2.616159 3.394131) (xy 2.554429 3.332868) + (xy 2.52169 3.25767) (xy 2.518753 3.178211) (xy 2.546424 3.104167) (xy 2.588047 3.057769) + (xy 2.629604 3.031793) (xy 2.694922 2.998907) (xy 2.771038 2.965557) (xy 2.783726 2.960461) + (xy 2.867333 2.923565) (xy 2.91553 2.891046) (xy 2.93103 2.858718) (xy 2.91655 2.822394) + (xy 2.891692 2.794) (xy 2.832939 2.759039) (xy 2.768293 2.756417) (xy 2.709008 2.783358) + (xy 2.666339 2.837088) (xy 2.660739 2.85095) (xy 2.628133 2.901936) (xy 2.58053 2.939787) + (xy 2.520461 2.97085) (xy 2.520461 2.882768) (xy 2.523997 2.828951) (xy 2.539156 2.786534) + (xy 2.572768 2.741279) (xy 2.605035 2.70642) (xy 2.655209 2.657062) (xy 2.694193 2.630547) + (xy 2.736064 2.619911) (xy 2.78346 2.618154) (xy 2.887333 2.633528)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 2.395929 2.636662) (xy 2.398911 2.688068) (xy 2.401247 2.766192) (xy 2.402749 2.864857) + (xy 2.403231 2.968343) (xy 2.403231 3.318533) (xy 2.341401 3.380363) (xy 2.298793 3.418462) + (xy 2.26139 3.433895) (xy 2.21027 3.432918) (xy 2.189978 3.430433) (xy 2.126554 3.4232) + (xy 2.074095 3.419055) (xy 2.061308 3.418672) (xy 2.018199 3.421176) (xy 1.956544 3.427462) + (xy 1.932638 3.430433) (xy 1.873922 3.435028) (xy 1.834464 3.425046) (xy 1.795338 3.394228) + (xy 1.781215 3.380363) (xy 1.719385 3.318533) (xy 1.719385 2.663503) (xy 1.76915 2.640829) + (xy 1.812002 2.624034) (xy 1.837073 2.618154) (xy 1.843501 2.636736) (xy 1.849509 2.688655) + (xy 1.854697 2.768172) (xy 1.858664 2.869546) (xy 1.860577 2.955192) (xy 1.865923 3.292231) + (xy 1.91256 3.298825) (xy 1.954976 3.294214) (xy 1.97576 3.279287) (xy 1.98157 3.251377) + (xy 1.98653 3.191925) (xy 1.990246 3.108466) (xy 1.992324 3.008532) (xy 1.992624 2.957104) + (xy 1.992923 2.661054) (xy 2.054454 2.639604) (xy 2.098004 2.62502) (xy 2.121694 2.618219) + (xy 2.122377 2.618154) (xy 2.124754 2.636642) (xy 2.127366 2.687906) (xy 2.129995 2.765649) + (xy 2.132421 2.863574) (xy 2.134115 2.955192) (xy 2.139461 3.292231) (xy 2.256692 3.292231) + (xy 2.262072 2.984746) (xy 2.267451 2.677261) (xy 2.324601 2.647707) (xy 2.366797 2.627413) + (xy 2.39177 2.618204) (xy 2.392491 2.618154) (xy 2.395929 2.636662)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 1.602081 2.780289) (xy 1.601833 2.92632) (xy 1.600872 3.038655) (xy 1.598794 3.122678) + (xy 1.595193 3.183769) (xy 1.589665 3.227309) (xy 1.581804 3.258679) (xy 1.571207 3.283262) + (xy 1.563182 3.297294) (xy 1.496728 3.373388) (xy 1.41247 3.421084) (xy 1.319249 3.438199) + (xy 1.2259 3.422546) (xy 1.170312 3.394418) (xy 1.111957 3.34576) (xy 1.072186 3.286333) + (xy 1.04819 3.208507) (xy 1.037161 3.104652) (xy 1.035599 3.028462) (xy 1.035809 3.022986) + (xy 1.172308 3.022986) (xy 1.173141 3.110355) (xy 1.176961 3.168192) (xy 1.185746 3.206029) + (xy 1.201474 3.233398) (xy 1.220266 3.254042) (xy 1.283375 3.29389) (xy 1.351137 3.297295) + (xy 1.415179 3.264025) (xy 1.420164 3.259517) (xy 1.441439 3.236067) (xy 1.454779 3.208166) + (xy 1.462001 3.166641) (xy 1.464923 3.102316) (xy 1.465385 3.0312) (xy 1.464383 2.941858) + (xy 1.460238 2.882258) (xy 1.451236 2.843089) (xy 1.435667 2.81504) (xy 1.422902 2.800144) + (xy 1.3636 2.762575) (xy 1.295301 2.758057) (xy 1.23011 2.786753) (xy 1.217528 2.797406) + (xy 1.196111 2.821063) (xy 1.182744 2.849251) (xy 1.175566 2.891245) (xy 1.172719 2.956319) + (xy 1.172308 3.022986) (xy 1.035809 3.022986) (xy 1.040322 2.905765) (xy 1.056362 2.813577) + (xy 1.086528 2.744269) (xy 1.133629 2.690211) (xy 1.170312 2.662505) (xy 1.23699 2.632572) + (xy 1.314272 2.618678) (xy 1.38611 2.622397) (xy 1.426308 2.6374) (xy 1.442082 2.64167) + (xy 1.45255 2.62575) (xy 1.459856 2.583089) (xy 1.465385 2.518106) (xy 1.471437 2.445732) + (xy 1.479844 2.402187) (xy 1.495141 2.377287) (xy 1.521864 2.360845) (xy 1.538654 2.353564) + (xy 1.602154 2.326963) (xy 1.602081 2.780289)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 0.713362 2.62467) (xy 0.802117 2.657421) (xy 0.874022 2.71535) (xy 0.902144 2.756128) + (xy 0.932802 2.830954) (xy 0.932165 2.885058) (xy 0.899987 2.921446) (xy 0.888081 2.927633) + (xy 0.836675 2.946925) (xy 0.810422 2.941982) (xy 0.80153 2.909587) (xy 0.801077 2.891692) + (xy 0.784797 2.825859) (xy 0.742365 2.779807) (xy 0.683388 2.757564) (xy 0.617475 2.763161) + (xy 0.563895 2.792229) (xy 0.545798 2.80881) (xy 0.532971 2.828925) (xy 0.524306 2.859332) + (xy 0.518696 2.906788) (xy 0.515035 2.97805) (xy 0.512215 3.079875) (xy 0.511484 3.112115) + (xy 0.50882 3.22241) (xy 0.505792 3.300036) (xy 0.50125 3.351396) (xy 0.494046 3.38289) + (xy 0.483033 3.40092) (xy 0.46706 3.411888) (xy 0.456834 3.416733) (xy 0.413406 3.433301) + (xy 0.387842 3.438769) (xy 0.379395 3.420507) (xy 0.374239 3.365296) (xy 0.372346 3.272499) + (xy 0.373689 3.141478) (xy 0.374107 3.121269) (xy 0.377058 3.001733) (xy 0.380548 2.914449) + (xy 0.385514 2.852591) (xy 0.392893 2.809336) (xy 0.403624 2.77786) (xy 0.418645 2.751339) + (xy 0.426502 2.739975) (xy 0.471553 2.689692) (xy 0.52194 2.650581) (xy 0.528108 2.647167) + (xy 0.618458 2.620212) (xy 0.713362 2.62467)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy 0.053501 2.626303) (xy 0.13006 2.654733) (xy 0.130936 2.655279) (xy 0.178285 2.690127) + (xy 0.213241 2.730852) (xy 0.237825 2.783925) (xy 0.254062 2.855814) (xy 0.263975 2.952992) + (xy 0.269586 3.081928) (xy 0.270077 3.100298) (xy 0.277141 3.377287) (xy 0.217695 3.408028) + (xy 0.174681 3.428802) (xy 0.14871 3.438646) (xy 0.147509 3.438769) (xy 0.143014 3.420606) + (xy 0.139444 3.371612) (xy 0.137248 3.300031) (xy 0.136769 3.242068) (xy 0.136758 3.14817) + (xy 0.132466 3.089203) (xy 0.117503 3.061079) (xy 0.085482 3.059706) (xy 0.030014 3.080998) + (xy -0.053731 3.120136) (xy -0.115311 3.152643) (xy -0.146983 3.180845) (xy -0.156294 3.211582) + (xy -0.156308 3.213104) (xy -0.140943 3.266054) (xy -0.095453 3.29466) (xy -0.025834 3.298803) + (xy 0.024313 3.298084) (xy 0.050754 3.312527) (xy 0.067243 3.347218) (xy 0.076733 3.391416) + (xy 0.063057 3.416493) (xy 0.057907 3.420082) (xy 0.009425 3.434496) (xy -0.058469 3.436537) + (xy -0.128388 3.426983) (xy -0.177932 3.409522) (xy -0.24643 3.351364) (xy -0.285366 3.270408) + (xy -0.293077 3.20716) (xy -0.287193 3.150111) (xy -0.265899 3.103542) (xy -0.223735 3.062181) + (xy -0.155241 3.020755) (xy -0.054956 2.973993) (xy -0.048846 2.97135) (xy 0.04149 2.929617) + (xy 0.097235 2.895391) (xy 0.121129 2.864635) (xy 0.115913 2.833311) (xy 0.084328 2.797383) + (xy 0.074883 2.789116) (xy 0.011617 2.757058) (xy -0.053936 2.758407) (xy -0.111028 2.789838) + (xy -0.148907 2.848024) (xy -0.152426 2.859446) (xy -0.1867 2.914837) (xy -0.230191 2.941518) + (xy -0.293077 2.96796) (xy -0.293077 2.899548) (xy -0.273948 2.80011) (xy -0.217169 2.708902) + (xy -0.187622 2.678389) (xy -0.120458 2.639228) (xy -0.035044 2.6215) (xy 0.053501 2.626303)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -0.840154 2.49212) (xy -0.834428 2.57198) (xy -0.827851 2.619039) (xy -0.818738 2.639566) + (xy -0.805402 2.639829) (xy -0.801077 2.637378) (xy -0.743556 2.619636) (xy -0.668732 2.620672) + (xy -0.592661 2.63891) (xy -0.545082 2.662505) (xy -0.496298 2.700198) (xy -0.460636 2.742855) + (xy -0.436155 2.797057) (xy -0.420913 2.869384) (xy -0.41297 2.966419) (xy -0.410384 3.094742) + (xy -0.410338 3.119358) (xy -0.410308 3.39587) (xy -0.471839 3.41732) (xy -0.515541 3.431912) + (xy -0.539518 3.438706) (xy -0.540223 3.438769) (xy -0.542585 3.420345) (xy -0.544594 3.369526) + (xy -0.546099 3.292993) (xy -0.546947 3.19743) (xy -0.547077 3.139329) (xy -0.547349 3.024771) + (xy -0.548748 2.942667) (xy -0.552151 2.886393) (xy -0.558433 2.849326) (xy -0.568471 2.824844) + (xy -0.583139 2.806325) (xy -0.592298 2.797406) (xy -0.655211 2.761466) (xy -0.723864 2.758775) + (xy -0.786152 2.78917) (xy -0.797671 2.800144) (xy -0.814567 2.820779) (xy -0.826286 2.845256) + (xy -0.833767 2.880647) (xy -0.837946 2.934026) (xy -0.839763 3.012466) (xy -0.840154 3.120617) + (xy -0.840154 3.39587) (xy -0.901685 3.41732) (xy -0.945387 3.431912) (xy -0.969364 3.438706) + (xy -0.97007 3.438769) (xy -0.971874 3.420069) (xy -0.9735 3.367322) (xy -0.974883 3.285557) + (xy -0.975958 3.179805) (xy -0.97666 3.055094) (xy -0.976923 2.916455) (xy -0.976923 2.381806) + (xy -0.849923 2.328236) (xy -0.840154 2.49212)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -2.465746 2.599745) (xy -2.388714 2.651567) (xy -2.329184 2.726412) (xy -2.293622 2.821654) + (xy -2.286429 2.891756) (xy -2.287246 2.921009) (xy -2.294086 2.943407) (xy -2.312888 2.963474) + (xy -2.349592 2.985733) (xy -2.410138 3.014709) (xy -2.500466 3.054927) (xy -2.500923 3.055129) + (xy -2.584067 3.09321) (xy -2.652247 3.127025) (xy -2.698495 3.152933) (xy -2.715842 3.167295) + (xy -2.715846 3.167411) (xy -2.700557 3.198685) (xy -2.664804 3.233157) (xy -2.623758 3.25799) + (xy -2.602963 3.262923) (xy -2.54623 3.245862) (xy -2.497373 3.203133) (xy -2.473535 3.156155) + (xy -2.450603 3.121522) (xy -2.405682 3.082081) (xy -2.352877 3.048009) (xy -2.30629 3.02948) + (xy -2.296548 3.028462) (xy -2.285582 3.045215) (xy -2.284921 3.088039) (xy -2.29298 3.145781) + (xy -2.308173 3.207289) (xy -2.328914 3.261409) (xy -2.329962 3.26351) (xy -2.392379 3.35066) + (xy -2.473274 3.409939) (xy -2.565144 3.439034) (xy -2.660487 3.435634) (xy -2.751802 3.397428) + (xy -2.755862 3.394741) (xy -2.827694 3.329642) (xy -2.874927 3.244705) (xy -2.901066 3.133021) + (xy -2.904574 3.101643) (xy -2.910787 2.953536) (xy -2.903339 2.884468) (xy -2.715846 2.884468) + (xy -2.71341 2.927552) (xy -2.700086 2.940126) (xy -2.666868 2.930719) (xy -2.614506 2.908483) + (xy -2.555976 2.88061) (xy -2.554521 2.879872) (xy -2.504911 2.853777) (xy -2.485 2.836363) + (xy -2.48991 2.818107) (xy -2.510584 2.79412) (xy -2.563181 2.759406) (xy -2.619823 2.756856) + (xy -2.670631 2.782119) (xy -2.705724 2.830847) (xy -2.715846 2.884468) (xy -2.903339 2.884468) + (xy -2.898008 2.835036) (xy -2.865222 2.741055) (xy -2.819579 2.675215) (xy -2.737198 2.608681) + (xy -2.646454 2.575676) (xy -2.553815 2.573573) (xy -2.465746 2.599745)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -3.983114 2.587256) (xy -3.891536 2.635409) (xy -3.823951 2.712905) (xy -3.799943 2.762727) + (xy -3.781262 2.837533) (xy -3.771699 2.932052) (xy -3.770792 3.03521) (xy -3.778079 3.135935) + (xy -3.793097 3.223153) (xy -3.815385 3.285791) (xy -3.822235 3.296579) (xy -3.903368 3.377105) + (xy -3.999734 3.425336) (xy -4.104299 3.43945) (xy -4.210032 3.417629) (xy -4.239457 3.404547) + (xy -4.296759 3.364231) (xy -4.34705 3.310775) (xy -4.351803 3.303995) (xy -4.371122 3.271321) + (xy -4.383892 3.236394) (xy -4.391436 3.190414) (xy -4.395076 3.124584) (xy -4.396135 3.030105) + (xy -4.396154 3.008923) (xy -4.396106 3.002182) (xy -4.200769 3.002182) (xy -4.199632 3.091349) + (xy -4.195159 3.15052) (xy -4.185754 3.188741) (xy -4.169824 3.215053) (xy -4.161692 3.223846) + (xy -4.114942 3.257261) (xy -4.069553 3.255737) (xy -4.02366 3.226752) (xy -3.996288 3.195809) + (xy -3.980077 3.150643) (xy -3.970974 3.07942) (xy -3.970349 3.071114) (xy -3.968796 2.942037) + (xy -3.985035 2.846172) (xy -4.018848 2.784107) (xy -4.070016 2.756432) (xy -4.08828 2.754923) + (xy -4.13624 2.762513) (xy -4.169047 2.788808) (xy -4.189105 2.839095) (xy -4.198822 2.918664) + (xy -4.200769 3.002182) (xy -4.396106 3.002182) (xy -4.395426 2.908249) (xy -4.392371 2.837906) + (xy -4.385678 2.789163) (xy -4.37404 2.753288) (xy -4.356147 2.721548) (xy -4.352192 2.715648) + (xy -4.285733 2.636104) (xy -4.213315 2.589929) (xy -4.125151 2.571599) (xy -4.095213 2.570703) + (xy -3.983114 2.587256)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -1.728336 2.595089) (xy -1.665633 2.631358) (xy -1.622039 2.667358) (xy -1.590155 2.705075) + (xy -1.56819 2.751199) (xy -1.554351 2.812421) (xy -1.546847 2.895431) (xy -1.543883 3.006919) + (xy -1.543539 3.087062) (xy -1.543539 3.382065) (xy -1.709615 3.456515) (xy -1.719385 3.133402) + (xy -1.723421 3.012729) (xy -1.727656 2.925141) (xy -1.732903 2.86465) (xy -1.739975 2.825268) + (xy -1.749689 2.801007) (xy -1.762856 2.78588) (xy -1.767081 2.782606) (xy -1.831091 2.757034) + (xy -1.895792 2.767153) (xy -1.934308 2.794) (xy -1.949975 2.813024) (xy -1.96082 2.837988) + (xy -1.967712 2.875834) (xy -1.971521 2.933502) (xy -1.973117 3.017935) (xy -1.973385 3.105928) + (xy -1.973437 3.216323) (xy -1.975328 3.294463) (xy -1.981655 3.347165) (xy -1.995017 3.381242) + (xy -2.018015 3.403511) (xy -2.053246 3.420787) (xy -2.100303 3.438738) (xy -2.151697 3.458278) + (xy -2.145579 3.111485) (xy -2.143116 2.986468) (xy -2.140233 2.894082) (xy -2.136102 2.827881) + (xy -2.129893 2.78142) (xy -2.120774 2.748256) (xy -2.107917 2.721944) (xy -2.092416 2.698729) + (xy -2.017629 2.624569) (xy -1.926372 2.581684) (xy -1.827117 2.571412) (xy -1.728336 2.595089)) (layer "F.Cu") (width 0.01)) + (fp_poly (pts (xy -3.231114 2.584505) (xy -3.156461 2.621727) (xy -3.090569 2.690261) (xy -3.072423 2.715648) + (xy -3.052655 2.748866) (xy -3.039828 2.784945) (xy -3.03249 2.833098) (xy -3.029187 2.902536) + (xy -3.028462 2.994206) (xy -3.031737 3.11983) (xy -3.043123 3.214154) (xy -3.064959 3.284523) + (xy -3.099581 3.338286) (xy -3.14933 3.382788) (xy -3.152986 3.385423) (xy -3.202015 3.412377) + (xy -3.261055 3.425712) (xy -3.336141 3.429) (xy -3.458205 3.429) (xy -3.458256 3.547497) + (xy -3.459392 3.613492) (xy -3.466314 3.652202) (xy -3.484402 3.675419) (xy -3.519038 3.694933) + (xy -3.527355 3.69892) (xy -3.56628 3.717603) (xy -3.596417 3.729403) (xy -3.618826 3.730422) + (xy -3.634567 3.716761) (xy -3.644698 3.684522) (xy -3.650277 3.629804) (xy -3.652365 3.548711) + (xy -3.652019 3.437344) (xy -3.6503 3.291802) (xy -3.649763 3.248269) (xy -3.647828 3.098205) + (xy -3.646096 3.000042) (xy -3.458308 3.000042) (xy -3.457252 3.083364) (xy -3.452562 3.13788) + (xy -3.441949 3.173837) (xy -3.423128 3.201482) (xy -3.41035 3.214965) (xy -3.35811 3.254417) + (xy -3.311858 3.257628) (xy -3.264133 3.225049) (xy -3.262923 3.223846) (xy -3.243506 3.198668) + (xy -3.231693 3.164447) (xy -3.225735 3.111748) (xy -3.22388 3.031131) (xy -3.223846 3.013271) + (xy -3.22833 2.902175) (xy -3.242926 2.825161) (xy -3.26935 2.778147) (xy -3.309317 2.75705) + (xy -3.332416 2.754923) (xy -3.387238 2.7649) (xy -3.424842 2.797752) (xy -3.447477 2.857857) + (xy -3.457394 2.949598) (xy -3.458308 3.000042) (xy -3.646096 3.000042) (xy -3.645778 2.98206) + (xy -3.643127 2.894679) (xy -3.639394 2.830905) (xy -3.634093 2.785582) (xy -3.626742 2.753555) + (xy -3.616857 2.729668) (xy -3.603954 2.708764) (xy -3.598421 2.700898) (xy -3.525031 2.626595) + (xy -3.43224 2.584467) (xy -3.324904 2.572722) (xy -3.231114 2.584505)) (layer "F.Cu") (width 0.01)) + ) + + (gr_line (start 271.59458 158.12516) (end 271.59458 173.87316) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D8)) + (gr_line (start 271.59458 173.87316) (end 255.84658 173.87316) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D7)) + (gr_line (start 255.84658 173.87316) (end 255.84658 158.12516) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D6)) + (gr_line (start 255.84658 158.12516) (end 271.59458 158.12516) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D5)) + (gr_line (start 138.24458 158.12516) (end 138.24458 173.87316) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D8)) + (gr_line (start 138.24458 173.87316) (end 122.49658 173.87316) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D7)) + (gr_line (start 122.49658 173.87316) (end 122.49658 158.12516) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D6)) + (gr_line (start 122.49658 158.12516) (end 138.24458 158.12516) (layer "Edge.Cuts") (width 0.1) (tstamp 5DA6A2D5)) + (gr_line (start 74.9046 158.115) (end 90.6526 158.115) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 74.9046 173.863) (end 74.9046 158.115) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 90.6526 173.863) (end 74.9046 173.863) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 90.6526 158.115) (end 90.6526 173.863) (layer "Edge.Cuts") (width 0.1)) + (gr_text "Universal Keyboard Rev 1.1 http://osiweb.org\nKey Aligner for Futaba MD-4PCS, George Risk KBM-01-01" (at 289.179 166.37) (layer "F.SilkS") + (effects (font (size 1.524 1.524) (thickness 0.1778)) (justify left)) + ) + (gr_line (start 62.23 177.8) (end 369.57 177.8) (layer "Edge.Cuts") (width 0.1) (tstamp 5D911490)) + (gr_line (start 62.23 73.914) (end 62.23 177.8) (layer "Edge.Cuts") (width 0.1)) + (gr_line (start 369.57 73.914) (end 62.23 73.914) (layer "Edge.Cuts") (width 0.1) (tstamp 5D91148D)) + (gr_line (start 369.57 177.8) (end 369.57 73.914) (layer "Edge.Cuts") (width 0.1) (tstamp 5D91148A)) + (gr_text "Distances:\nVertical: 0.75 inch\nHorizontal (1x - 1x): 0.75 inch\nHorizontal (1x - 1.5x): 0.939 inch\nHorizontal (Row 1 left key -> Row 2 left key): -0.379 inch\nHorizontal (Row 2 left key -> Row 3 left key): 0.187 inch\nHorizontal (Row 3 left key -> Row 4 left key): 0.186 inch\nHorizontal (Row 4 left key -> space bar): 4.310 inch" (at 38.4175 240.0681) (layer "Cmts.User") + (effects (font (size 2.54 2.54) (thickness 0.3048)) (justify left)) + ) + +) diff --git a/hardware/keyboard-classic/Aligner-futaba/aligner-futaba.pro b/hardware/keyboard-classic/Aligner-futaba/aligner-futaba.pro new file mode 100644 index 0000000..5cd0983 --- /dev/null +++ b/hardware/keyboard-classic/Aligner-futaba/aligner-futaba.pro @@ -0,0 +1,34 @@ +update=05/04/2019 20:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +CopperEdgeClearance=0.000000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/hardware/keyboard-classic/Cutout-apple/apple_outline.kicad_pcb b/hardware/keyboard-classic/Cutout-apple/apple_outline.kicad_pcb new file mode 100644 index 0000000..20e6905 --- /dev/null +++ b/hardware/keyboard-classic/Cutout-apple/apple_outline.kicad_pcb @@ -0,0 +1,177 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.4-0-10_14)") + + (general + (thickness 1.6) + (drawings 35) + (tracks 0) + (zones 0) + (modules 0) + (nets 1) + ) + + (page B) + (title_block + (title "Universal Retro Keyboard") + (date 2019-08-25) + (rev 1.0) + (company OSIWeb.org) + (comment 1 "Key matrix w/ LED") + ) + + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.1) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class power1 "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class signal "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (gr_line (start 78.359 175.133) (end 96.647 175.133) (layer B.Fab) (width 0.15) (tstamp 5D9294FB)) + (gr_line (start 96.647 156.083) (end 96.647 175.133) (layer B.Fab) (width 0.15)) + (gr_line (start 325.374 118.745) (end 320.548 118.745) (layer B.Fab) (width 0.15) (tstamp 5D92929E)) + (gr_line (start 320.548 137.033) (end 320.548 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 320.548 118.745) (end 320.548 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 325.374 80.645) (end 325.374 118.745) (layer B.Fab) (width 0.15)) + (gr_circle (center 143.51 78.74) (end 145.0975 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D91233E)) + (gr_circle (center 290.83 78.74) (end 292.4175 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123A8)) + (gr_circle (center 284.607 171.45) (end 286.1945 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D9122A9)) + (gr_circle (center 107.7595 171.45) (end 109.347 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D9122A9)) + (gr_circle (center 300.7106 78.74) (end 302.2981 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D912365)) + (gr_circle (center 348.9706 78.74) (end 350.5581 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D912368)) + (gr_circle (center 217.17 78.74) (end 218.7575 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123AE)) + (gr_circle (center 364.49 78.74) (end 366.0775 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123AB)) + (gr_circle (center 363.22 171.45) (end 364.8075 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D911836)) + (gr_circle (center 71.12 171.45) (end 72.7075 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D911836)) + (gr_circle (center 69.85 78.74) (end 71.4375 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123B1)) + (gr_line (start 78.486 99.695) (end 78.486 80.645) (layer B.Fab) (width 0.15)) + (gr_line (start 68.834 99.695) (end 78.486 99.695) (layer B.Fab) (width 0.15)) + (gr_line (start 68.834 117.983) (end 68.834 99.695) (layer B.Fab) (width 0.15)) + (gr_line (start 73.406 117.983) (end 68.834 117.983) (layer B.Fab) (width 0.15)) + (gr_line (start 73.406 137.033) (end 73.406 117.983) (layer B.Fab) (width 0.15)) + (gr_line (start 78.359 137.033) (end 73.533 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 78.359 175.133) (end 78.359 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 121.158 156.083) (end 96.647 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 121.158 175.133) (end 121.158 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 272.923 175.133) (end 121.158 175.133) (layer B.Fab) (width 0.15) (tstamp 5D90C768)) + (gr_line (start 272.923 156.083) (end 272.923 175.133) (layer B.Fab) (width 0.15)) + (gr_line (start 320.548 156.083) (end 272.923 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 78.486 80.645) (end 325.374 80.645) (layer B.Fab) (width 0.15) (tstamp 5D90C80E)) + (gr_line (start 64.77 177.8) (end 369.57 177.8) (layer Edge.Cuts) (width 0.1) (tstamp 5D911490)) + (gr_line (start 64.77 73.914) (end 64.77 177.8) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 369.57 73.914) (end 64.77 73.914) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148D)) + (gr_line (start 369.57 177.8) (end 369.57 73.914) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148A)) + (gr_text "Distances:\nVertical: 0.75 inch\nHorizontal (1x - 1x): 0.75 inch\nHorizontal (1x - 1.5x): 0.939 inch\nHorizontal (Row 1 left key -> Row 2 left key): -0.379 inch\nHorizontal (Row 2 left key -> Row 3 left key): 0.187 inch\nHorizontal (Row 3 left key -> Row 4 left key): 0.186 inch\nHorizontal (Row 4 left key -> space bar): 4.310 inch" (at 38.4175 240.0681) (layer Cmts.User) + (effects (font (size 2.54 2.54) (thickness 0.3048)) (justify left)) + ) + +) diff --git a/hardware/keyboard-classic/Cutout-apple/apple_outline.pro b/hardware/keyboard-classic/Cutout-apple/apple_outline.pro new file mode 100644 index 0000000..152769c --- /dev/null +++ b/hardware/keyboard-classic/Cutout-apple/apple_outline.pro @@ -0,0 +1,33 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/hardware/keyboard-classic/Cutout-classic/ascii_cutout.kicad_pcb b/hardware/keyboard-classic/Cutout-classic/ascii_cutout.kicad_pcb new file mode 100644 index 0000000..a78b5e6 --- /dev/null +++ b/hardware/keyboard-classic/Cutout-classic/ascii_cutout.kicad_pcb @@ -0,0 +1,174 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.4-0-10_14)") + + (general + (thickness 1.6) + (drawings 32) + (tracks 0) + (zones 0) + (modules 0) + (nets 1) + ) + + (page B) + (title_block + (title "Universal Retro Keyboard") + (date 2019-08-25) + (rev 1.0) + (company OSIWeb.org) + (comment 1 "Key matrix w/ LED") + ) + + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.1) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class power1 "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class signal "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (gr_circle (center 143.51 78.74) (end 145.0975 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D91233E)) + (gr_circle (center 290.83 78.74) (end 292.4175 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123A8)) + (gr_circle (center 284.607 171.45) (end 286.1945 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D9122A9)) + (gr_circle (center 107.7595 171.45) (end 109.347 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D9122A9)) + (gr_circle (center 300.7106 78.74) (end 302.2981 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D912365)) + (gr_circle (center 348.9706 78.74) (end 350.5581 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D912368)) + (gr_circle (center 217.17 78.74) (end 218.7575 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123AE)) + (gr_circle (center 364.49 78.74) (end 366.0775 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123AB)) + (gr_circle (center 363.22 171.45) (end 364.8075 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D911836)) + (gr_circle (center 71.12 171.45) (end 72.7075 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D911836)) + (gr_circle (center 69.85 78.74) (end 71.4375 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123B1)) + (gr_line (start 78.486 99.695) (end 78.486 80.645) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 68.834 99.695) (end 78.486 99.695) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 68.834 117.983) (end 68.834 99.695) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 73.406 117.983) (end 68.834 117.983) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 73.406 137.033) (end 73.406 117.983) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 78.359 137.033) (end 73.533 137.033) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 78.359 156.083) (end 78.359 137.033) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 121.158 156.083) (end 78.359 156.083) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 121.158 175.133) (end 121.158 156.083) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 272.923 175.133) (end 121.158 175.133) (layer Edge.Cuts) (width 0.15) (tstamp 5D90C768)) + (gr_line (start 272.923 156.083) (end 272.923 175.133) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 358.648 156.083) (end 272.923 156.083) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 358.648 117.983) (end 358.648 156.083) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 363.347 117.983) (end 358.648 117.983) (layer Edge.Cuts) (width 0.15) (tstamp 5D90C7F7)) + (gr_line (start 363.347 80.645) (end 363.347 117.983) (layer Edge.Cuts) (width 0.15)) + (gr_line (start 78.486 80.645) (end 363.347 80.645) (layer Edge.Cuts) (width 0.15) (tstamp 5D90C80E)) + (gr_line (start 64.77 177.8) (end 369.57 177.8) (layer Edge.Cuts) (width 0.1) (tstamp 5D911490)) + (gr_line (start 64.77 73.914) (end 64.77 177.8) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 369.57 73.914) (end 64.77 73.914) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148D)) + (gr_line (start 369.57 177.8) (end 369.57 73.914) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148A)) + (gr_text "Distances:\nVertical: 0.75 inch\nHorizontal (1x - 1x): 0.75 inch\nHorizontal (1x - 1.5x): 0.939 inch\nHorizontal (Row 1 left key -> Row 2 left key): -0.379 inch\nHorizontal (Row 2 left key -> Row 3 left key): 0.187 inch\nHorizontal (Row 3 left key -> Row 4 left key): 0.186 inch\nHorizontal (Row 4 left key -> space bar): 4.310 inch" (at 38.4175 240.0681) (layer Cmts.User) + (effects (font (size 2.54 2.54) (thickness 0.3048)) (justify left)) + ) + +) diff --git a/hardware/keyboard-classic/Cutout-classic/ascii_cutout.pro b/hardware/keyboard-classic/Cutout-classic/ascii_cutout.pro new file mode 100644 index 0000000..152769c --- /dev/null +++ b/hardware/keyboard-classic/Cutout-classic/ascii_cutout.pro @@ -0,0 +1,33 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/hardware/keyboard-classic/Cutout-osi/osi_outline.kicad_pcb b/hardware/keyboard-classic/Cutout-osi/osi_outline.kicad_pcb new file mode 100644 index 0000000..9e0cc49 --- /dev/null +++ b/hardware/keyboard-classic/Cutout-osi/osi_outline.kicad_pcb @@ -0,0 +1,176 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.4-0-10_14)") + + (general + (thickness 1.6) + (drawings 34) + (tracks 0) + (zones 0) + (modules 0) + (nets 1) + ) + + (page B) + (title_block + (title "Universal Retro Keyboard") + (date 2019-08-25) + (rev 1.0) + (company OSIWeb.org) + (comment 1 "Key matrix w/ LED") + ) + + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (uvias_allowed no) + (uvia_min_size 0.2) + (uvia_min_drill 0.1) + (edge_width 0.1) + (segment_width 0.2) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 3.9878 3.9878) + (pad_drill 3.9878) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class power1 "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class signal "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (gr_line (start 320.548 137.033) (end 320.548 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 339.598 137.033) (end 320.548 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 339.598 118.745) (end 339.598 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 325.374 118.745) (end 339.598 118.745) (layer B.Fab) (width 0.15)) + (gr_line (start 325.374 80.645) (end 325.374 118.745) (layer B.Fab) (width 0.15)) + (gr_circle (center 143.51 78.74) (end 145.0975 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D91233E)) + (gr_circle (center 290.83 78.74) (end 292.4175 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123A8)) + (gr_circle (center 284.607 171.45) (end 286.1945 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D9122A9)) + (gr_circle (center 107.7595 171.45) (end 109.347 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D9122A9)) + (gr_circle (center 300.7106 78.74) (end 302.2981 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D912365)) + (gr_circle (center 348.9706 78.74) (end 350.5581 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D912368)) + (gr_circle (center 217.17 78.74) (end 218.7575 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123AE)) + (gr_circle (center 364.49 78.74) (end 366.0775 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123AB)) + (gr_circle (center 363.22 171.45) (end 364.8075 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D911836)) + (gr_circle (center 71.12 171.45) (end 72.7075 171.45) (layer Edge.Cuts) (width 0.1) (tstamp 5D911836)) + (gr_circle (center 69.85 78.74) (end 71.4375 78.74) (layer Edge.Cuts) (width 0.1) (tstamp 5D9123B1)) + (gr_line (start 78.486 99.695) (end 78.486 80.645) (layer B.Fab) (width 0.15)) + (gr_line (start 68.834 99.695) (end 78.486 99.695) (layer B.Fab) (width 0.15)) + (gr_line (start 68.834 117.983) (end 68.834 99.695) (layer B.Fab) (width 0.15)) + (gr_line (start 73.406 117.983) (end 68.834 117.983) (layer B.Fab) (width 0.15)) + (gr_line (start 73.406 137.033) (end 73.406 117.983) (layer B.Fab) (width 0.15)) + (gr_line (start 78.359 137.033) (end 73.533 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 78.359 156.083) (end 78.359 137.033) (layer B.Fab) (width 0.15)) + (gr_line (start 121.158 156.083) (end 78.359 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 121.158 175.133) (end 121.158 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 272.923 175.133) (end 121.158 175.133) (layer B.Fab) (width 0.15) (tstamp 5D90C768)) + (gr_line (start 272.923 156.083) (end 272.923 175.133) (layer B.Fab) (width 0.15)) + (gr_line (start 320.548 156.083) (end 272.923 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 78.486 80.645) (end 325.374 80.645) (layer B.Fab) (width 0.15) (tstamp 5D90C80E)) + (gr_line (start 64.77 177.8) (end 369.57 177.8) (layer Edge.Cuts) (width 0.1) (tstamp 5D911490)) + (gr_line (start 64.77 73.914) (end 64.77 177.8) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 369.57 73.914) (end 64.77 73.914) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148D)) + (gr_line (start 369.57 177.8) (end 369.57 73.914) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148A)) + (gr_text "Distances:\nVertical: 0.75 inch\nHorizontal (1x - 1x): 0.75 inch\nHorizontal (1x - 1.5x): 0.939 inch\nHorizontal (Row 1 left key -> Row 2 left key): -0.379 inch\nHorizontal (Row 2 left key -> Row 3 left key): 0.187 inch\nHorizontal (Row 3 left key -> Row 4 left key): 0.186 inch\nHorizontal (Row 4 left key -> space bar): 4.310 inch" (at 38.4175 240.0681) (layer Cmts.User) + (effects (font (size 2.54 2.54) (thickness 0.3048)) (justify left)) + ) + +) diff --git a/hardware/keyboard-classic/Cutout-osi/osi_outline.pro b/hardware/keyboard-classic/Cutout-osi/osi_outline.pro new file mode 100644 index 0000000..152769c --- /dev/null +++ b/hardware/keyboard-classic/Cutout-osi/osi_outline.pro @@ -0,0 +1,33 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/hardware/keyboard-classic/kbd-classic.kicad_pcb b/hardware/keyboard-classic/kbd-classic.kicad_pcb new file mode 100644 index 0000000..06fa1d2 --- /dev/null +++ b/hardware/keyboard-classic/kbd-classic.kicad_pcb @@ -0,0 +1,6660 @@ +(kicad_pcb (version 20171130) (host pcbnew "(5.1.5-0-10_14)") + + (general + (thickness 1.6) + (drawings 22) + (tracks 1001) + (zones 0) + (modules 137) + (nets 99) + ) + + (page B) + (title_block + (title "Universal Retro Keyboard") + (date 2019-08-25) + (rev 1.1) + (company OSIWeb.org) + (comment 1 "Key matrix w/ LED") + ) + + (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.254) + (user_trace_width 0.254) + (user_trace_width 0.508) + (user_trace_width 1.27) + (trace_clearance 0.2) + (zone_clearance 0.508) + (zone_45_only no) + (trace_min 0.2) + (via_size 0.8128) + (via_drill 0.4064) + (via_min_size 0.4) + (via_min_drill 0.3) + (user_via 1.27 0.7112) + (uvia_size 0.3048) + (uvia_drill 0.1016) + (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 3.500001 3.500001) + (pad_drill 3.500001) + (pad_to_mask_clearance 0) + (aux_axis_origin 61.4172 179.1081) + (visible_elements 7FFFEFFF) + (pcbplotparams + (layerselection 0x010fc_ffffffff) + (usegerberextensions false) + (usegerberattributes false) + (usegerberadvancedattributes false) + (creategerberjobfile false) + (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 0) + (scaleselection 1) + (outputdirectory "outputs")) + ) + + (net 0 "") + (net 1 /Row3) + (net 2 /Row0) + (net 3 /Row1) + (net 4 "Net-(D5-Pad2)") + (net 5 "Net-(D7-Pad2)") + (net 6 "Net-(D8-Pad2)") + (net 7 "Net-(D9-Pad2)") + (net 8 "Net-(D10-Pad2)") + (net 9 "Net-(D11-Pad2)") + (net 10 "Net-(D12-Pad2)") + (net 11 "Net-(D13-Pad2)") + (net 12 "Net-(D14-Pad2)") + (net 13 "Net-(D15-Pad2)") + (net 14 "Net-(D16-Pad2)") + (net 15 "Net-(D18-Pad2)") + (net 16 "Net-(D19-Pad2)") + (net 17 "Net-(D20-Pad2)") + (net 18 "Net-(D22-Pad2)") + (net 19 "Net-(D23-Pad2)") + (net 20 "Net-(D24-Pad2)") + (net 21 "Net-(D25-Pad2)") + (net 22 "Net-(D26-Pad2)") + (net 23 "Net-(D27-Pad2)") + (net 24 "Net-(D28-Pad2)") + (net 25 "Net-(D29-Pad2)") + (net 26 "Net-(D30-Pad2)") + (net 27 "Net-(D31-Pad2)") + (net 28 "Net-(D32-Pad2)") + (net 29 "Net-(D34-Pad2)") + (net 30 "Net-(D36-Pad2)") + (net 31 /Row4) + (net 32 /Row5) + (net 33 /Row7) + (net 34 "Net-(D41-Pad2)") + (net 35 "Net-(D42-Pad2)") + (net 36 "Net-(D43-Pad2)") + (net 37 "Net-(D45-Pad2)") + (net 38 "Net-(D46-Pad2)") + (net 39 "Net-(D47-Pad2)") + (net 40 "Net-(D48-Pad2)") + (net 41 "Net-(D49-Pad2)") + (net 42 "Net-(D50-Pad2)") + (net 43 "Net-(D51-Pad2)") + (net 44 "Net-(D52-Pad2)") + (net 45 "Net-(D53-Pad2)") + (net 46 "Net-(D54-Pad2)") + (net 47 "Net-(D55-Pad2)") + (net 48 "Net-(D56-Pad2)") + (net 49 "Net-(D57-Pad2)") + (net 50 "Net-(D58-Pad2)") + (net 51 "Net-(D59-Pad2)") + (net 52 "Net-(D60-Pad2)") + (net 53 "Net-(D61-Pad2)") + (net 54 /Col0) + (net 55 /Col1) + (net 56 /Col2) + (net 57 /Col3) + (net 58 /Col4) + (net 59 /Col5) + (net 60 /Col6) + (net 61 /Col7) + (net 62 /Row6) + (net 63 /Row2) + (net 64 "Net-(J1-Pad40)") + (net 65 "Net-(J1-Pad39)") + (net 66 "Net-(J1-Pad38)") + (net 67 "Net-(J1-Pad37)") + (net 68 "Net-(J1-Pad36)") + (net 69 "Net-(J1-Pad35)") + (net 70 "Net-(J1-Pad34)") + (net 71 "Net-(J1-Pad33)") + (net 72 "Net-(D2-Pad2)") + (net 73 "Net-(D3-Pad2)") + (net 74 "Net-(D4-Pad2)") + (net 75 "Net-(D6-Pad2)") + (net 76 "Net-(D17-Pad2)") + (net 77 "Net-(D21-Pad2)") + (net 78 "Net-(D37-Pad2)") + (net 79 "Net-(D38-Pad2)") + (net 80 "Net-(D39-Pad2)") + (net 81 "Net-(D40-Pad2)") + (net 82 "Net-(D44-Pad2)") + (net 83 "Net-(J1-Pad6)") + (net 84 "Net-(J1-Pad8)") + (net 85 "Net-(J1-Pad10)") + (net 86 "Net-(J1-Pad12)") + (net 87 "Net-(J1-Pad14)") + (net 88 "Net-(J1-Pad16)") + (net 89 "Net-(J1-Pad18)") + (net 90 "Net-(J1-Pad20)") + (net 91 "Net-(J1-Pad22)") + (net 92 "Net-(J1-Pad24)") + (net 93 "Net-(J1-Pad26)") + (net 94 "Net-(J1-Pad28)") + (net 95 "Net-(J1-Pad30)") + (net 96 "Net-(J1-Pad32)") + (net 97 "Net-(J1-Pad2)") + (net 98 "Net-(J1-Pad4)") + + (net_class Default "This is the default net class." + (clearance 0.2) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net /Col1) + (add_net /Col2) + (add_net /Col3) + (add_net /Col4) + (add_net /Col5) + (add_net /Col6) + (add_net /Col7) + (add_net /Row0) + (add_net /Row1) + (add_net /Row2) + (add_net /Row3) + (add_net /Row4) + (add_net /Row5) + (add_net /Row6) + (add_net /Row7) + (add_net "Net-(D10-Pad2)") + (add_net "Net-(D11-Pad2)") + (add_net "Net-(D12-Pad2)") + (add_net "Net-(D13-Pad2)") + (add_net "Net-(D14-Pad2)") + (add_net "Net-(D15-Pad2)") + (add_net "Net-(D16-Pad2)") + (add_net "Net-(D17-Pad2)") + (add_net "Net-(D18-Pad2)") + (add_net "Net-(D19-Pad2)") + (add_net "Net-(D2-Pad2)") + (add_net "Net-(D20-Pad2)") + (add_net "Net-(D21-Pad2)") + (add_net "Net-(D22-Pad2)") + (add_net "Net-(D23-Pad2)") + (add_net "Net-(D24-Pad2)") + (add_net "Net-(D25-Pad2)") + (add_net "Net-(D26-Pad2)") + (add_net "Net-(D27-Pad2)") + (add_net "Net-(D28-Pad2)") + (add_net "Net-(D29-Pad2)") + (add_net "Net-(D3-Pad2)") + (add_net "Net-(D30-Pad2)") + (add_net "Net-(D31-Pad2)") + (add_net "Net-(D32-Pad2)") + (add_net "Net-(D34-Pad2)") + (add_net "Net-(D36-Pad2)") + (add_net "Net-(D37-Pad2)") + (add_net "Net-(D38-Pad2)") + (add_net "Net-(D39-Pad2)") + (add_net "Net-(D4-Pad2)") + (add_net "Net-(D40-Pad2)") + (add_net "Net-(D41-Pad2)") + (add_net "Net-(D42-Pad2)") + (add_net "Net-(D43-Pad2)") + (add_net "Net-(D44-Pad2)") + (add_net "Net-(D45-Pad2)") + (add_net "Net-(D46-Pad2)") + (add_net "Net-(D47-Pad2)") + (add_net "Net-(D48-Pad2)") + (add_net "Net-(D49-Pad2)") + (add_net "Net-(D5-Pad2)") + (add_net "Net-(D50-Pad2)") + (add_net "Net-(D51-Pad2)") + (add_net "Net-(D52-Pad2)") + (add_net "Net-(D53-Pad2)") + (add_net "Net-(D54-Pad2)") + (add_net "Net-(D55-Pad2)") + (add_net "Net-(D56-Pad2)") + (add_net "Net-(D57-Pad2)") + (add_net "Net-(D58-Pad2)") + (add_net "Net-(D59-Pad2)") + (add_net "Net-(D6-Pad2)") + (add_net "Net-(D60-Pad2)") + (add_net "Net-(D61-Pad2)") + (add_net "Net-(D7-Pad2)") + (add_net "Net-(D8-Pad2)") + (add_net "Net-(D9-Pad2)") + (add_net "Net-(J1-Pad10)") + (add_net "Net-(J1-Pad12)") + (add_net "Net-(J1-Pad14)") + (add_net "Net-(J1-Pad16)") + (add_net "Net-(J1-Pad18)") + (add_net "Net-(J1-Pad2)") + (add_net "Net-(J1-Pad20)") + (add_net "Net-(J1-Pad22)") + (add_net "Net-(J1-Pad24)") + (add_net "Net-(J1-Pad26)") + (add_net "Net-(J1-Pad28)") + (add_net "Net-(J1-Pad30)") + (add_net "Net-(J1-Pad32)") + (add_net "Net-(J1-Pad33)") + (add_net "Net-(J1-Pad34)") + (add_net "Net-(J1-Pad35)") + (add_net "Net-(J1-Pad36)") + (add_net "Net-(J1-Pad37)") + (add_net "Net-(J1-Pad38)") + (add_net "Net-(J1-Pad39)") + (add_net "Net-(J1-Pad4)") + (add_net "Net-(J1-Pad40)") + (add_net "Net-(J1-Pad6)") + (add_net "Net-(J1-Pad8)") + ) + + (net_class power1 "" + (clearance 0.254) + (trace_width 1.27) + (via_dia 1.27) + (via_drill 0.7112) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + ) + + (net_class signal "" + (clearance 0.2032) + (trace_width 0.254) + (via_dia 0.8128) + (via_drill 0.4064) + (uvia_dia 0.3048) + (uvia_drill 0.1016) + (diff_pair_width 0.2032) + (diff_pair_gap 0.254) + (add_net /Col0) + ) + + (module unikbd:Key_MX_LED locked (layer F.Cu) (tedit 5DF12B03) (tstamp 5DF2AE8E) + (at 292.29558 127.89916) + (path /5DF7DA75) + (fp_text reference SW32 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "@ (OSI shift lock)" (at -1.27 8.89) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 3 thru_hole circle (at -1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask) + (net 88 "Net-(J1-Pad16)")) + (pad 4 thru_hole circle (at 1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask) + (net 87 "Net-(J1-Pad14)")) + (pad 2 thru_hole circle (at 0 4.0005) (size 1.651 1.651) (drill 1.397) (layers *.Cu *.Mask) + (net 86 "Net-(J1-Pad12)")) + (pad 1 thru_hole circle (at 0 -4.0005) (size 2.2352 2.2352) (drill 1.397) (layers *.Cu *.Mask) + (net 85 "Net-(J1-Pad10)")) + (pad 6 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (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)) + (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + ) + + (module unikbd:Key_MX_LED locked (layer F.Cu) (tedit 5DF12B03) (tstamp 5DF2AB34) + (at 335.06918 108.84916) + (path /5DF7D21E) + (fp_text reference SW9 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Caps_Lock (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 3 thru_hole circle (at -1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask) + (net 92 "Net-(J1-Pad24)")) + (pad 4 thru_hole circle (at 1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask) + (net 91 "Net-(J1-Pad22)")) + (pad 2 thru_hole circle (at 0 4.0005) (size 1.651 1.651) (drill 1.397) (layers *.Cu *.Mask) + (net 8 "Net-(D10-Pad2)")) + (pad 1 thru_hole circle (at 0 -4.0005) (size 2.2352 2.2352) (drill 1.397) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 6 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (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)) + (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5DF1DF89) (tstamp 5DF29DF8) + (at 344.63482 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5DFE048B) + (fp_text reference D10 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 8 "Net-(D10-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module unikbd:Key_MX_LED (layer F.Cu) (tedit 5DF12B03) (tstamp 5DF0CB42) + (at 82.74558 165.99916) + (path /5DF0C543) + (fp_text reference SW61 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Power light" (at -0.04318 10.27684) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 3 thru_hole circle (at -1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask) + (net 84 "Net-(J1-Pad8)")) + (pad 4 thru_hole circle (at 1.27 5.08) (size 1.27 1.27) (drill 1.0668) (layers *.Cu *.Mask) + (net 83 "Net-(J1-Pad6)")) + (pad 2 thru_hole circle (at 0 4.0005) (size 1.651 1.651) (drill 1.397) (layers *.Cu *.Mask) + (net 98 "Net-(J1-Pad4)")) + (pad 1 thru_hole circle (at 0 -4.0005) (size 2.2352 2.2352) (drill 1.397) (layers *.Cu *.Mask) + (net 97 "Net-(J1-Pad2)")) + (pad 6 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (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)) + (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) + (pad 5 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 5DA64490) (tstamp 5DA66FA3) + (at 263.61898 174.25416) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 5DA6441A) (tstamp 5DA66F7B) + (at 263.61898 159.01416) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad "" np_thru_hole circle (at 0 0) (size 3.048 3.048) (drill 3.048) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 5DA64545) (tstamp 5DA66D94) + (at 165.19398 176.15916) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad "" np_thru_hole circle (at 0 0) (size 3 3) (drill 3) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 5DA64554) (tstamp 5DA66D94) + (at 228.69398 176.15916) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad "" np_thru_hole circle (at 0 0) (size 3 3) (drill 3) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 5DA64490) (tstamp 5DA66D94) + (at 130.26898 174.25416) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 5DA6441A) (tstamp 5DA66D94) + (at 130.26898 159.01416) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad "" np_thru_hole circle (at 0 0) (size 3.048 3.048) (drill 3.048) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 67.31 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 107.7595 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 284.607 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 363.22 171.45) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 364.49 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 348.9706 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 300.7106 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 290.83 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 217.17 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA66D94) + (at 143.51 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module MountingHole:MountingHole_3.5mm (layer F.Cu) (tedit 56D1B4CB) (tstamp 5DA65F84) + (at 67.31 77.47) + (descr "Mounting Hole 3.5mm, no annular") + (tags "mounting hole 3.5mm no annular") + (attr virtual) + (fp_text reference REF** (at 0 -4.5) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value MountingHole_3.5mm (at 0 4.5) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 0.3 0) (layer F.Fab) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center 0 0) (end 3.5 0) (layer Cmts.User) (width 0.15)) + (fp_circle (center 0 0) (end 3.75 0) (layer F.CrtYd) (width 0.05)) + (pad 1 np_thru_hole circle (at 0 0) (size 3.5 3.5) (drill 3.5) (layers *.Cu *.Mask)) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7A0F) + (at 196.94398 165.99916) + (path /5BC3E99D/5BC6CD72) + (fp_text reference SW46 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value SPACE (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 39 "Net-(D47-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBBE7) + (at 244.67058 146.94916) + (path /5BC3E99D/5BC6CEDD) + (fp_text reference SW37 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Comma (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 79 "Net-(D38-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7CEF) + (at 87.62238 89.79916) + (path /5BC3EA0A/5BCAF489) + (fp_text reference SW31 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 28 "Net-(D32-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7CDF) + (at 220.97238 89.79916) + (path /5BC3EA0A/5BCAF419) + (fp_text reference SW30 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 8 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 27 "Net-(D31-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D633EAE) + (at 263.72058 146.94916) + (path /5BC3EA0A/5BCAF3A9) + (fp_text reference SW29 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Period (at -4.38658 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 26 "Net-(D30-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9EDE) + (at 115.91798 108.84916) + (path /5BC3EA0A/5BCAF339) + (fp_text reference SW28 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value W (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 25 "Net-(D29-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7CAF) + (at 106.67238 89.79916) + (path /5BC3EA0A/5BCAF490) + (fp_text reference SW27 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 2 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 24 "Net-(D28-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7C9F) + (at 240.02238 89.79916) + (path /5BC3EA0A/5BCAF420) + (fp_text reference SW26 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 9 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 23 "Net-(D27-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FAB87) + (at 254.19558 127.89916) + (path /5BC3EA0A/5BCAF3B0) + (fp_text reference SW25 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value L (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 22 "Net-(D26-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9EA5) + (at 134.96798 108.84916) + (path /5BC3EA0A/5BCAF340) + (fp_text reference SW24 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value E (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 21 "Net-(D25-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7C6F) + (at 125.72238 89.79916) + (path /5BC3EA0A/5BCAF482) + (fp_text reference SW23 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 3 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 20 "Net-(D24-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D633858) + (at 249.26798 108.84916) + (path /5BC3EA0A/5BCAF412) + (fp_text reference SW22 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 0 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 19 "Net-(D23-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7C4F) + (at 259.07238 89.79916) + (path /5BC3EA0A/5BCAF3A2) + (fp_text reference SW21 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value O (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 18 "Net-(D22-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9E6C) + (at 154.01798 108.84916) + (path /5BC3EA0A/5BCAF332) + (fp_text reference SW20 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 77 "Net-(D21-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7C2F) + (at 144.77238 89.79916) + (path /5BC3EA0A/5BCAF47B) + (fp_text reference SW19 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 4 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 17 "Net-(D20-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7C1F) + (at 278.12238 89.79916) + (path /5BC3EA0A/5BCAF40B) + (fp_text reference SW18 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Colon (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 16 "Net-(D19-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9D4F) + (at 287.36798 108.84916) + (path /5BC3EA0A/5BCAF39B) + (fp_text reference SW17 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Line Feed" (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 15 "Net-(D18-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9D88) + (at 173.06798 108.84916) + (path /5BC3EA0A/5BCAF32B) + (fp_text reference SW16 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value T (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 76 "Net-(D17-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7BEF) + (at 163.82238 89.79916) + (path /5BC3EA0A/5BCAF46D) + (fp_text reference SW15 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 5 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 14 "Net-(D16-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7BDF) + (at 297.17238 89.79916) + (path /5BC3EA0A/5BCAF3FD) + (fp_text reference SW14 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Dash (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 13 "Net-(D15-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D10F44A) + (at 311.21858 108.84916) + (path /5BC3EA0A/5BCAF38D) + (fp_text reference SW13 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Return (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 12 "Net-(D14-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9DFA) + (at 192.11798 108.84916) + (path /5BC3EA0A/5BCAF31D) + (fp_text reference SW12 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Y (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 11 "Net-(D13-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7BAF) + (at 182.87238 89.79916) + (path /5BC3EA0A/5BCAF474) + (fp_text reference SW11 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 6 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 10 "Net-(D12-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D105DE3) + (at 316.22238 89.79916) + (path /5BC3EA0A/5BCAF404) + (fp_text reference SW10 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Bracket_Open (at -2.794 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 9 "Net-(D11-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9DC1) + (at 211.16798 108.84916) + (path /5BC3EA0A/5BCAF324) + (fp_text reference SW8 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value U (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 7 "Net-(D9-Pad2)")) + ) + + (module unikbd:Key_MX (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7B6F) + (at 201.92238 89.79916) + (path /5BC3EA0A/5BCAF466) + (fp_text reference SW7 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 7 (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 6 "Net-(D8-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D105E93) + (at 335.27238 89.79916) + (path /5BC3EA0A/5BCAF3F6) + (fp_text reference SW6 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Bracket_Close (at -2.794 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 5 "Net-(D7-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F200E) + (at 349.44558 127.89916) + (path /5BC3EA0A/5BCAF386) + (fp_text reference SW5 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Here_is (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 75 "Net-(D6-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9D16) + (at 230.21798 108.84916) + (path /5BC3EA0A/5BCAF316) + (fp_text reference SW4 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value I (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 4 "Net-(D5-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7B1F) + (at 354.32238 89.79916) + (path /5BC3EA0A/5BCAF3EF) + (fp_text reference SW3 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Tilde (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 54 /Col0)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 74 "Net-(D4-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F6109) + (at 330.47178 146.94916) + (path /5BC3EA0A/5BCAF37F) + (fp_text reference SW2 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Repeat (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 54 /Col0)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 73 "Net-(D3-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FAB4E) + (at 120.84558 127.89916) + (path /5BC3E99D/5BC6D0D0) + (fp_text reference SW60 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value S (at -4.13258 8.62584) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 53 "Net-(D61-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB692) + (at 130.37058 146.94916) + (path /5BC3E99D/5BC6CF00) + (fp_text reference SW59 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value X (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 52 "Net-(D60-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0F9CDD) + (at 96.86798 108.84916) + (path /5BC3E99D/5BC6CD80) + (fp_text reference SW58 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Q (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 51 "Net-(D59-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D633B5C) + (at 311.34558 127.89916) + (path /5BC3E99D/5BC3FF70) + (fp_text reference SW57 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Backslash (at -4.25958 8.75284) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 50 "Net-(D58-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FAB15) + (at 139.89558 127.89916) + (path /5BC3E99D/5BC6D0D7) + (fp_text reference SW56 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value D (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 49 "Net-(D57-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB659) + (at 149.42058 146.94916) + (path /5BC3E99D/5BC6CF07) + (fp_text reference SW55 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value C (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 48 "Net-(D56-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FAADC) + (at 101.79558 127.89916) + (path /5BC3E99D/5BC6CD87) + (fp_text reference SW54 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value A (at -4.89458 8.62584) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 47 "Net-(D55-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FAF44) + (at 82.74558 127.89916) + (path /5BC3E99D/5BC3FF77) + (fp_text reference SW53 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CTRL (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 46 "Net-(D54-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB0A3) + (at 158.94558 127.89916) + (path /5BC3E99D/5BC6D0C9) + (fp_text reference SW52 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value F (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 45 "Net-(D53-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBCCB) + (at 168.47058 146.94916) + (path /5BC3E99D/5BC6CEF9) + (fp_text reference SW51 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value V (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 44 "Net-(D52-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBC59) + (at 111.32058 146.94916) + (path /5BC3E99D/5BC6CD79) + (fp_text reference SW50 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Z (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 43 "Net-(D51-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FA2F5) + (at 77.99578 108.84916) + (path /5BC3E99D/5BC3FF69) + (fp_text reference SW49 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value ESC (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 42 "Net-(D50-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB115) + (at 177.99558 127.89916) + (path /5BC3E99D/5BC6D0C2) + (fp_text reference SW48 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value G (at -4.00558 8.62584) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 41 "Net-(D49-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBB3C) + (at 187.52058 146.94916) + (path /5BC3E99D/5BC6CEF2) + (fp_text reference SW47 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value B (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 40 "Net-(D48-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB187) + (at 197.04558 127.89916) + (path /5BC3E99D/5BC6D0B4) + (fp_text reference SW45 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value H (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 38 "Net-(D46-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBC20) + (at 206.57058 146.94916) + (path /5BC3E99D/5BC6CEE4) + (fp_text reference SW44 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value N (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 37 "Net-(D45-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBBAE) + (at 282.77058 146.94916) + (path /5BC3E99D/5BC6CD64) + (fp_text reference SW43 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Fwd_Slash (at -4.13258 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 82 "Net-(D44-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB14E) + (at 216.09558 127.89916) + (path /5BC3E99D/5BC6D0BB) + (fp_text reference SW42 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value J (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 36 "Net-(D43-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBC92) + (at 225.62058 146.94916) + (path /5BC3E99D/5BC6CEEB) + (fp_text reference SW41 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value M (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 35 "Net-(D42-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB031) + (at 273.24558 127.89916) + (path /5BC3E99D/5BC6CD6B) + (fp_text reference SW40 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Semicolon (at -4.13258 8.87984) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 34 "Net-(D41-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBB75) + (at 87.46998 146.94916) + (path /5BC3E99D/5BC3FE57) + (fp_text reference SW39 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value L_Shift (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 81 "Net-(D40-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FB06A) + (at 235.14558 127.89916) + (path /5BC3E99D/5BC6D0AD) + (fp_text reference SW38 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value K (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 80 "Net-(D39-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FA32E) + (at 268.31798 108.84916) + (path /5BC3E99D/5BC6CD5D) + (fp_text reference SW36 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value P (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 78 "Net-(D37-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0FBD04) + (at 306.62118 146.94916) + (path /5BC3E99D/5BC3FD26) + (fp_text reference SW35 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R_Shift (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 30 "Net-(D36-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0EE51F) + (at 330.39558 127.89916) + (path /5D6C3751) + (fp_text reference SW34 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value "Rubout (OSI Break)" (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 90 "Net-(J1-Pad20)")) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 89 "Net-(J1-Pad18)")) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (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)) + (pad "" np_thru_hole circle (at 0 0) (size 3.9878 3.9878) (drill 3.9878) (layers *.Cu *.Mask)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D791F) + (at 354.11918 108.84916) + (path /5BC3E99D/5BC6CED6) + (fp_text reference SW33 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Break (at -5.334 8.6614) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 54 /Col0)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 29 "Net-(D34-Pad2)")) + ) + + (module unikbd:Key_MX locked (layer F.Cu) (tedit 5D118AD1) (tstamp 5D0D7AFF) + (at 349.52178 146.94916) + (path /5BC3EA0A/5BCAF30F) + (fp_text reference SW1 (at -5.7912 -8.6106) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value Clear (at -3.31978 8.75284) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start 1.27 -5.08) (end 0.7366 -4.6736) (layer F.Cu) (width 0.3048)) + (fp_line (start 1.651 -5.08) (end 1.27 -5.08) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 1.27) (end 0 3.81) (layer F.Cu) (width 0.3048)) + (fp_line (start -2.54 0) (end -2.54 1.27) (layer F.Cu) (width 0.3048)) + (fp_line (start -3.81 -2.54) (end -2.54 0) (layer F.Cu) (width 0.3048)) + (fp_line (start -7.874 -7.874) (end 7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 -7.874) (end 7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start 7.874 7.874) (end -7.874 7.874) (layer F.CrtYd) (width 0.12)) + (fp_line (start -7.874 7.874) (end -7.874 -7.874) (layer F.CrtYd) (width 0.12)) + (pad 4 thru_hole circle (at -3.81 -2.54) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (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)) + (pad 3 thru_hole circle (at 2.54 -5.08) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask)) + (pad 1 thru_hole circle (at 0 -4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 54 /Col0)) + (pad 2 thru_hole circle (at 0 4.064) (size 2.2352 2.2352) (drill 1.5748) (layers *.Cu *.Mask) + (net 72 "Net-(D2-Pad2)")) + ) + + (module Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_Vertical (layer B.Cu) (tedit 59FED5CC) (tstamp 5D1B1810) + (at 300.7106 166.4208 270) + (descr "Through hole straight pin header, 2x20, 2.54mm pitch, double rows") + (tags "Through hole pin header THT 2x20 2.54mm double row") + (path /5D1E4169) + (fp_text reference J1 (at 4.9403 0.3429) (layer B.SilkS) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_text value Controller (at 1.27 -50.59 270) (layer B.Fab) hide + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (fp_line (start 0 1.27) (end 3.81 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start 3.81 1.27) (end 3.81 -49.53) (layer B.Fab) (width 0.1)) + (fp_line (start 3.81 -49.53) (end -1.27 -49.53) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 -49.53) (end -1.27 0) (layer B.Fab) (width 0.1)) + (fp_line (start -1.27 0) (end 0 1.27) (layer B.Fab) (width 0.1)) + (fp_line (start -1.33 -49.59) (end 3.87 -49.59) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end -1.33 -49.59) (layer B.SilkS) (width 0.12)) + (fp_line (start 3.87 1.33) (end 3.87 -49.59) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 -1.27) (end 1.27 -1.27) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.27 -1.27) (end 1.27 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start 1.27 1.33) (end 3.87 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 0) (end -1.33 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.33 1.33) (end 0 1.33) (layer B.SilkS) (width 0.12)) + (fp_line (start -1.8 1.8) (end -1.8 -50.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start -1.8 -50.05) (end 4.35 -50.05) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.35 -50.05) (end 4.35 1.8) (layer B.CrtYd) (width 0.05)) + (fp_line (start 4.35 1.8) (end -1.8 1.8) (layer B.CrtYd) (width 0.05)) + (fp_text user %R (at 1.27 -24.13) (layer B.Fab) + (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + ) + (pad 1 thru_hole rect (at 0 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 61 /Col7)) + (pad 2 thru_hole oval (at 2.54 0 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 97 "Net-(J1-Pad2)")) + (pad 3 thru_hole oval (at 0 -2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 60 /Col6)) + (pad 4 thru_hole oval (at 2.54 -2.54 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 98 "Net-(J1-Pad4)")) + (pad 5 thru_hole oval (at 0 -5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 59 /Col5)) + (pad 6 thru_hole oval (at 2.54 -5.08 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 83 "Net-(J1-Pad6)")) + (pad 7 thru_hole oval (at 0 -7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 58 /Col4)) + (pad 8 thru_hole oval (at 2.54 -7.62 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 84 "Net-(J1-Pad8)")) + (pad 9 thru_hole oval (at 0 -10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 57 /Col3)) + (pad 10 thru_hole oval (at 2.54 -10.16 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 85 "Net-(J1-Pad10)")) + (pad 11 thru_hole oval (at 0 -12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 56 /Col2)) + (pad 12 thru_hole oval (at 2.54 -12.7 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 86 "Net-(J1-Pad12)")) + (pad 13 thru_hole oval (at 0 -15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 55 /Col1)) + (pad 14 thru_hole oval (at 2.54 -15.24 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 87 "Net-(J1-Pad14)")) + (pad 15 thru_hole oval (at 0 -17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 54 /Col0)) + (pad 16 thru_hole oval (at 2.54 -17.78 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 88 "Net-(J1-Pad16)")) + (pad 17 thru_hole oval (at 0 -20.32 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 33 /Row7)) + (pad 18 thru_hole oval (at 2.54 -20.32 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 89 "Net-(J1-Pad18)")) + (pad 19 thru_hole oval (at 0 -22.86 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 62 /Row6)) + (pad 20 thru_hole oval (at 2.54 -22.86 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 90 "Net-(J1-Pad20)")) + (pad 21 thru_hole oval (at 0 -25.4 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 32 /Row5)) + (pad 22 thru_hole oval (at 2.54 -25.4 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 91 "Net-(J1-Pad22)")) + (pad 23 thru_hole oval (at 0 -27.94 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 31 /Row4)) + (pad 24 thru_hole oval (at 2.54 -27.94 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 92 "Net-(J1-Pad24)")) + (pad 25 thru_hole oval (at 0 -30.48 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 1 /Row3)) + (pad 26 thru_hole oval (at 2.54 -30.48 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 93 "Net-(J1-Pad26)")) + (pad 27 thru_hole oval (at 0 -33.02 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 63 /Row2)) + (pad 28 thru_hole oval (at 2.54 -33.02 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 94 "Net-(J1-Pad28)")) + (pad 29 thru_hole oval (at 0 -35.56 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 3 /Row1)) + (pad 30 thru_hole oval (at 2.54 -35.56 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 95 "Net-(J1-Pad30)")) + (pad 31 thru_hole oval (at 0 -38.1 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 2 /Row0)) + (pad 32 thru_hole oval (at 2.54 -38.1 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 96 "Net-(J1-Pad32)")) + (pad 33 thru_hole oval (at 0 -40.64 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 71 "Net-(J1-Pad33)")) + (pad 34 thru_hole oval (at 2.54 -40.64 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 70 "Net-(J1-Pad34)")) + (pad 35 thru_hole oval (at 0 -43.18 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 69 "Net-(J1-Pad35)")) + (pad 36 thru_hole oval (at 2.54 -43.18 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 68 "Net-(J1-Pad36)")) + (pad 37 thru_hole oval (at 0 -45.72 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 67 "Net-(J1-Pad37)")) + (pad 38 thru_hole oval (at 2.54 -45.72 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 66 "Net-(J1-Pad38)")) + (pad 39 thru_hole oval (at 0 -48.26 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 65 "Net-(J1-Pad39)")) + (pad 40 thru_hole oval (at 2.54 -48.26 270) (size 1.7 1.7) (drill 1) (layers *.Cu *.Mask) + (net 64 "Net-(J1-Pad40)")) + (model ${KISYS3DMOD}/Connector_PinHeader_2.54mm.3dshapes/PinHeader_2x20_P2.54mm_Vertical.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D75FE) + (at 325.74738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF435) + (fp_text reference D11 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 9 "Net-(D11-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA2A6) + (at 239.74298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF347) + (fp_text reference D5 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 4 "Net-(D5-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D70AA) + (at 363.68482 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF15) + (fp_text reference D34 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 29 "Net-(D34-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB877) + (at 318.54648 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6C862) + (fp_text reference D36 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 30 "Net-(D36-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0F9F22) + (at 277.84298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CD8E) + (fp_text reference D37 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 78 "Net-(D37-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FBA39) + (at 254.19558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF0E) + (fp_text reference D38 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 79 "Net-(D38-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FABCB) + (at 244.67058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D0DE) + (fp_text reference D39 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 80 "Net-(D39-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB7C3) + (at 99.39528 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CA8E) + (fp_text reference D40 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 81 "Net-(D40-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAE9B) + (at 282.77058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CD9C) + (fp_text reference D41 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 34 "Net-(D41-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB70F) + (at 235.14558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF1C) + (fp_text reference D42 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 35 "Net-(D42-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAC25) + (at 225.62058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D0EC) + (fp_text reference D43 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 36 "Net-(D43-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB92B) + (at 294.69588 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CDA3) + (fp_text reference D44 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 82 "Net-(D44-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB769) + (at 216.09558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF23) + (fp_text reference D45 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 37 "Net-(D45-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAEF5) + (at 206.57058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D0F3) + (fp_text reference D46 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 38 "Net-(D46-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D727B) + (at 207.40878 162.34156 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CDAA) + (fp_text reference D47 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 39 "Net-(D47-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB9DF) + (at 197.04558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF2A) + (fp_text reference D48 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 40 "Net-(D48-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAE41) + (at 187.52058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D0FA) + (fp_text reference D49 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 41 "Net-(D49-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0F9F7C) + (at 87.34298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CB1B) + (fp_text reference D50 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 42 "Net-(D50-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB81D) + (at 120.84558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CDB1) + (fp_text reference D51 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 43 "Net-(D51-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB8D1) + (at 177.99558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF31) + (fp_text reference D52 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 44 "Net-(D52-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAD8D) + (at 168.47058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D101) + (fp_text reference D53 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 45 "Net-(D53-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FADE7) + (at 92.27058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CB46) + (fp_text reference D54 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 46 "Net-(D54-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FACD9) + (at 111.32058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CDB8) + (fp_text reference D55 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 47 "Net-(D55-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FB985) + (at 158.94558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF38) + (fp_text reference D56 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 48 "Net-(D56-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAC7F) + (at 149.42058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D108) + (fp_text reference D57 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 49 "Net-(D57-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D73D0) + (at 321.0814 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CB6F) + (fp_text reference D58 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 50 "Net-(D58-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 2 /Row0)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA0E4) + (at 106.39298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CDBF) + (fp_text reference D59 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 51 "Net-(D59-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 3 /Row1)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FBAED) + (at 139.89558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6CF3F) + (fp_text reference D60 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 52 "Net-(D60-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 63 /Row2)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAF88) + (at 130.37058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3E99D/5BC6D10F) + (fp_text reference D61 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 53 "Net-(D61-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 1 /Row3)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D74C8) + (at 360.7308 143.6243 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF34E) + (fp_text reference D2 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 72 "Net-(D2-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0F86A5) + (at 339.858113 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3BE) + (fp_text reference D3 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.01574 -0.044687 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 73 "Net-(D3-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D7506) + (at 363.84738 86.1568 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF42E) + (fp_text reference D4 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 74 "Net-(D4-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0F1FBF) + (at 359.1814 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3B7) + (fp_text reference D6 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 75 "Net-(D6-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D107C32) + (at 344.79738 86.1568 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF427) + (fp_text reference D7 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 5 "Net-(D7-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D75A1) + (at 211.44738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF497) + (fp_text reference D8 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 6 "Net-(D8-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0F9FD6) + (at 220.69298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF355) + (fp_text reference D9 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 7 "Net-(D9-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D761D) + (at 192.39738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF4A5) + (fp_text reference D12 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 10 "Net-(D12-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA24C) + (at 201.64298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF35C) + (fp_text reference D13 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 11 "Net-(D13-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0EA05E) + (at 323.14388 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3CC) + (fp_text reference D14 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 12 "Net-(D14-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D767A) + (at 306.69738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF43C) + (fp_text reference D15 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 13 "Net-(D15-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D7699) + (at 173.34738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF4AC) + (fp_text reference D16 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 14 "Net-(D16-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA13E) + (at 182.59298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF363) + (fp_text reference D17 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 76 "Net-(D17-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D76D7) + (at 299.29328 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3D3) + (fp_text reference D18 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 15 "Net-(D18-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D76F6) + (at 287.64738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF443) + (fp_text reference D19 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 16 "Net-(D19-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D7715) + (at 154.29738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF4B3) + (fp_text reference D20 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 17 "Net-(D20-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA1F2) + (at 163.54298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF36A) + (fp_text reference D21 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 77 "Net-(D21-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D7753) + (at 268.59738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3DA) + (fp_text reference D22 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 18 "Net-(D22-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA030) + (at 258.79298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF44A) + (fp_text reference D23 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 19 "Net-(D23-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D7791) + (at 135.24738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF4BA) + (fp_text reference D24 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 20 "Net-(D24-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA198) + (at 144.49298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF371) + (fp_text reference D25 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 21 "Net-(D25-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FAFE2) + (at 263.72058 124.08916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3E1) + (fp_text reference D26 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 22 "Net-(D26-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D77EE) + (at 249.54738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF451) + (fp_text reference D27 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 23 "Net-(D27-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D780D) + (at 116.19738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF4C1) + (fp_text reference D28 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 24 "Net-(D28-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FA08A) + (at 125.44298 105.03916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF378) + (fp_text reference D29 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 25 "Net-(D29-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 31 /Row4)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0FBA93) + (at 273.24558 143.13916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF3E8) + (fp_text reference D30 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 26 "Net-(D30-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 32 /Row5)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D786A) + (at 230.49738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF458) + (fp_text reference D31 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 27 "Net-(D31-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 62 /Row6)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal locked (layer F.Cu) (tedit 5AE50CD5) (tstamp 5D0D7889) + (at 97.14738 85.98916 270) + (descr "Diode, DO-35_SOD27 series, Axial, Horizontal, pin pitch=7.62mm, , length*diameter=4*2mm^2, , http://www.diodes.com/_files/packages/DO-35.pdf") + (tags "Diode DO-35_SOD27 series Axial Horizontal pin pitch 7.62mm length 4mm diameter 2mm") + (path /5BC3EA0A/5BCAF4C8) + (fp_text reference D32 (at 3.81 -2.12 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 1N4148 (at 3.81 2.12 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user K (at 0 -1.8 90) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text user %R (at 4.11 0 90) (layer F.Fab) + (effects (font (size 0.8 0.8) (thickness 0.12))) + ) + (fp_line (start 8.67 -1.25) (end -1.05 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 8.67 1.25) (end 8.67 -1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 1.25) (end 8.67 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.05 -1.25) (end -1.05 1.25) (layer F.CrtYd) (width 0.05)) + (fp_line (start 2.29 -1.12) (end 2.29 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.53 -1.12) (end 2.53 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.41 -1.12) (end 2.41 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 6.58 0) (end 5.93 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.04 0) (end 1.69 0) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 -1.12) (end 1.69 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 5.93 1.12) (end 5.93 -1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 1.12) (end 5.93 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 1.69 -1.12) (end 1.69 1.12) (layer F.SilkS) (width 0.12)) + (fp_line (start 2.31 -1) (end 2.31 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.51 -1) (end 2.51 1) (layer F.Fab) (width 0.1)) + (fp_line (start 2.41 -1) (end 2.41 1) (layer F.Fab) (width 0.1)) + (fp_line (start 7.62 0) (end 5.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 0 0) (end 1.81 0) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 -1) (end 1.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 5.81 1) (end 5.81 -1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 1) (end 5.81 1) (layer F.Fab) (width 0.1)) + (fp_line (start 1.81 -1) (end 1.81 1) (layer F.Fab) (width 0.1)) + (pad 2 thru_hole oval (at 7.62 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 28 "Net-(D32-Pad2)")) + (pad 1 thru_hole rect (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) + (net 33 /Row7)) + (model ${KISYS3DMOD}/Diode_THT.3dshapes/D_DO-35_SOD27_P7.62mm_Horizontal.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (gr_text "Universal Keyboard Rev 1.2 http://osiweb.org" (at 106.553 77.597) (layer F.SilkS) + (effects (font (size 1.524 1.524) (thickness 0.1778))) + ) + (gr_line (start 358.648 118.745) (end 363.474 118.745) (layer B.Fab) (width 0.15) (tstamp 5D929410)) + (gr_line (start 91.9099 175.133) (end 73.406 175.133) (layer B.Fab) (width 0.15) (tstamp 5DD9A454)) + (gr_line (start 91.9099 156.083) (end 91.9099 175.133) (layer B.Fab) (width 0.15)) + (gr_line (start 358.648 118.745) (end 358.648 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 363.474 80.645) (end 363.474 118.745) (layer B.Fab) (width 0.15)) + (gr_line (start 78.486 99.695) (end 78.486 80.645) (layer B.Fab) (width 0.15)) + (gr_line (start 68.834 99.695) (end 78.486 99.695) (layer B.Fab) (width 0.15)) + (gr_line (start 68.834 117.983) (end 68.834 99.695) (layer B.Fab) (width 0.15)) + (gr_line (start 73.406 117.983) (end 68.834 117.983) (layer B.Fab) (width 0.15)) + (gr_line (start 73.406 175.133) (end 73.406 117.983) (layer B.Fab) (width 0.15)) + (gr_line (start 121.158 156.083) (end 91.9099 156.083) (layer B.Fab) (width 0.15) (tstamp 5D9293D0)) + (gr_line (start 121.158 175.133) (end 121.158 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 272.923 175.133) (end 121.158 175.133) (layer B.Fab) (width 0.15) (tstamp 5D90C768)) + (gr_line (start 272.923 156.083) (end 272.923 175.133) (layer B.Fab) (width 0.15)) + (gr_line (start 358.648 156.083) (end 272.923 156.083) (layer B.Fab) (width 0.15)) + (gr_line (start 78.486 80.645) (end 363.474 80.645) (layer B.Fab) (width 0.15) (tstamp 5D90C80E)) + (gr_line (start 62.23 180.34) (end 369.57 180.34) (layer Edge.Cuts) (width 0.1) (tstamp 5D911490)) + (gr_line (start 62.23 72.644) (end 62.23 180.34) (layer Edge.Cuts) (width 0.1)) + (gr_line (start 369.57 72.644) (end 62.23 72.644) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148D)) + (gr_line (start 369.57 180.34) (end 369.57 72.644) (layer Edge.Cuts) (width 0.1) (tstamp 5D91148A)) + (gr_text "Distances:\nVertical: 0.75 inch\nHorizontal (1x - 1x): 0.75 inch\nHorizontal (1x - 1.5x): 0.939 inch\nHorizontal (Row 1 left key -> Row 2 left key): -0.379 inch\nHorizontal (Row 2 left key -> Row 3 left key): 0.187 inch\nHorizontal (Row 3 left key -> Row 4 left key): 0.186 inch\nHorizontal (Row 4 left key -> space bar): 4.310 inch" (at 38.4175 240.0681) (layer Cmts.User) + (effects (font (size 2.54 2.54) (thickness 0.3048)) (justify left)) + ) + + (segment (start 130.37058 124.08916) (end 130.37058 123.03516) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 130.37058 123.03516) (end 133.67522 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 149.42058 123.03516) (end 149.6187 122.83704) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 149.1615 122.77608) (end 149.1615 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 149.42058 123.03516) (end 149.1615 122.77608) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 149.42058 124.08916) (end 149.42058 123.03516) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 133.67522 119.73052) (end 149.1615 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 168.48582 123.01992) (end 168.48582 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 168.47058 123.03516) (end 168.48582 123.01992) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 168.47058 124.08916) (end 168.47058 123.03516) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 149.1615 119.73052) (end 168.48582 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 187.52058 119.80418) (end 187.52058 124.08916) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 187.59424 119.73052) (end 187.52058 119.80418) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 168.48582 119.73052) (end 187.59424 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 206.57058 119.78386) (end 206.57058 124.08916) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 206.51724 119.73052) (end 206.57058 119.78386) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 187.59424 119.73052) (end 206.51724 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 225.58756 123.00214) (end 225.58756 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 225.62058 123.03516) (end 225.58756 123.00214) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 225.62058 124.08916) (end 225.62058 123.03516) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 206.51724 119.73052) (end 225.58756 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 244.67058 119.75846) (end 244.67058 124.08916) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 244.6782 119.75084) (end 244.67058 119.75846) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 170.38828 93.5863) (end 170.6372 93.83522) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 168.97604 102.4509) (end 165.93885 105.48809) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 168.47058 123.03516) (end 168.47058 124.08916) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 165.93885 105.48809) (end 165.93885 120.50343) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 165.93885 120.50343) (end 168.47058 123.03516) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 168.97604 95.49638) (end 168.97604 102.4509) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 170.6372 93.83522) (end 168.97604 95.49638) (width 0.254) (layer F.Cu) (net 1)) + (via (at 339.471 123.825) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 1)) + (segment (start 225.58756 119.73052) (end 335.37652 119.73052) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 339.064601 123.418601) (end 339.471 123.825) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 335.37652 119.73052) (end 339.064601 123.418601) (width 0.254) (layer B.Cu) (net 1)) + (segment (start 342.773 127.127) (end 339.877399 124.231399) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 339.877399 124.231399) (end 339.471 123.825) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 342.773 154.8384) (end 342.773 127.127) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 331.1906 166.4208) (end 342.773 154.8384) (width 0.254) (layer F.Cu) (net 1)) + (segment (start 318.54648 142.08516) (end 318.47028 142.00896) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 318.54648 143.13916) (end 318.54648 142.08516) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 321.0814 125.14316) (end 321.0814 124.08916) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 318.47028 127.75428) (end 321.0814 125.14316) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 318.47028 142.00896) (end 318.47028 127.75428) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 87.34298 105.03916) (end 87.34298 106.09316) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 92.27058 125.14316) (end 92.5322 125.40478) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 92.27058 124.08916) (end 92.27058 125.14316) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 92.5322 125.40478) (end 92.5322 128.49098) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 92.5322 128.49098) (end 96.08312 132.0419) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 96.08312 132.0419) (end 96.08312 138.80846) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 99.39528 142.08516) (end 99.39528 143.13916) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 96.11858 138.80846) (end 99.39528 142.08516) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 96.08312 138.80846) (end 96.11858 138.80846) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 87.34298 106.09316) (end 89.4334 108.18358) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 87.34298 105.03916) (end 87.34298 106.09316) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 89.4334 108.18358) (end 89.4334 116.24056) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 89.4334 116.24056) (end 91.56446 118.37162) (width 0.254) (layer B.Cu) (net 2)) + (via (at 301.42688 118.37162) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 2)) + (segment (start 91.56446 118.37162) (end 301.42688 118.37162) (width 0.254) (layer B.Cu) (net 2)) + (via (at 87.34298 105.03916) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 2)) + (segment (start 86.28898 105.03916) (end 87.34298 105.03916) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 321.0814 123.03516) (end 321.0814 124.08916) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 306.288329 120.675411) (end 318.775091 120.675411) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 318.775091 120.675411) (end 321.0814 122.98172) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 321.0814 122.98172) (end 321.0814 123.03516) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 92.27058 122.64898) (end 92.27058 124.08916) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 89.93886 120.31726) (end 92.27058 122.64898) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 89.93886 108.68904) (end 89.93886 120.31726) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 87.34298 106.09316) (end 89.93886 108.68904) (width 0.254) (layer F.Cu) (net 2)) + (via (at 301.42688 120.72112) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 2)) + (segment (start 301.472589 120.675411) (end 301.42688 120.72112) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 306.288329 120.675411) (end 301.472589 120.675411) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 301.42688 118.37162) (end 301.42688 120.72112) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 318.54648 143.13916) (end 318.54648 144.19316) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 316.896034 145.843606) (end 316.896034 155.666298) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 316.896034 155.666298) (end 316.896034 156.241034) (width 0.254) (layer F.Cu) (net 2)) + (segment (start 318.54648 144.19316) (end 316.896034 145.843606) (width 0.254) (layer F.Cu) (net 2)) + (via (at 316.896034 156.241034) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 2)) + (segment (start 317.47077 156.241034) (end 316.896034 156.241034) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 328.630834 156.241034) (end 317.47077 156.241034) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 338.8106 166.4208) (end 328.630834 156.241034) (width 0.254) (layer B.Cu) (net 2)) + (segment (start 282.77058 123.03516) (end 280.10358 120.36816) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 282.77058 124.08916) (end 282.77058 123.03516) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 277.84298 106.09316) (end 277.84298 105.03916) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 280.10358 108.35376) (end 277.84298 106.09316) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 280.10358 120.36816) (end 280.10358 108.35376) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 106.39298 105.03916) (end 106.39298 109.08284) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 111.32058 114.01044) (end 111.32058 124.08916) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 106.39298 109.08284) (end 111.32058 114.01044) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 111.32058 125.14316) (end 113.90376 127.72634) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 111.32058 124.08916) (end 111.32058 125.14316) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 113.90376 127.72634) (end 113.90376 135.4836) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 120.84558 142.08516) (end 120.84558 143.13916) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 114.24402 135.4836) (end 120.84558 142.08516) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 113.90376 135.4836) (end 114.24402 135.4836) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 207.391 156.30144) (end 207.40878 156.31922) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 207.40878 156.31922) (end 207.40878 162.34156) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 296.417988 156.905264) (end 296.417988 157.48) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 294.69588 143.13916) (end 294.69588 144.19316) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 294.69588 144.19316) (end 296.41801 145.91529) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 296.41801 145.91529) (end 296.41801 156.905242) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 296.41801 156.905242) (end 296.417988 156.905264) (width 0.254) (layer F.Cu) (net 3)) + (via (at 296.417988 157.48) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 3)) + (segment (start 296.992724 157.48) (end 296.417988 157.48) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 327.3298 157.48) (end 296.992724 157.48) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 336.2706 166.4208) (end 327.3298 157.48) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 295.74988 143.13916) (end 294.69588 143.13916) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 296.92854 144.31782) (end 295.74988 143.13916) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 296.92854 152.58542) (end 296.92854 144.31782) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 130.990989 154.485989) (end 295.027971 154.485989) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 120.84558 144.34058) (end 130.990989 154.485989) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 295.027971 154.485989) (end 296.92854 152.58542) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 120.84558 143.13916) (end 120.84558 144.34058) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 207.40878 154.49042) (end 207.40878 156.31922) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 207.4164 154.4828) (end 207.40878 154.49042) (width 0.254) (layer B.Cu) (net 3)) + (segment (start 282.77058 125.14316) (end 282.77058 124.08916) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 285.10992 127.4825) (end 282.77058 125.14316) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 285.10992 132.70992) (end 285.10992 127.4825) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 294.69588 142.29588) (end 285.10992 132.70992) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 294.69588 143.13916) (end 294.69588 142.29588) (width 0.254) (layer F.Cu) (net 3)) + (segment (start 239.48898 112.91316) (end 239.74298 112.65916) (width 0.254) (layer B.Cu) (net 4)) + (segment (start 230.21798 112.91316) (end 239.48898 112.91316) (width 0.254) (layer B.Cu) (net 4)) + (segment (start 344.71102 93.86316) (end 344.79738 93.7768) (width 0.254) (layer B.Cu) (net 5)) + (segment (start 335.27238 93.86316) (end 344.71102 93.86316) (width 0.254) (layer B.Cu) (net 5)) + (segment (start 211.19338 93.86316) (end 211.44738 93.60916) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 201.92238 93.86316) (end 211.19338 93.86316) (width 0.254) (layer B.Cu) (net 6)) + (segment (start 220.43898 112.91316) (end 220.69298 112.65916) (width 0.254) (layer B.Cu) (net 7)) + (segment (start 211.16798 112.91316) (end 220.43898 112.91316) (width 0.254) (layer B.Cu) (net 7)) + (segment (start 335.32318 112.65916) (end 335.06918 112.91316) (width 0.254) (layer B.Cu) (net 8)) + (segment (start 344.63482 112.65916) (end 335.32318 112.65916) (width 0.254) (layer B.Cu) (net 8)) + (segment (start 325.49338 93.86316) (end 325.74738 93.60916) (width 0.254) (layer B.Cu) (net 9)) + (segment (start 316.22238 93.86316) (end 325.49338 93.86316) (width 0.254) (layer B.Cu) (net 9)) + (segment (start 192.14338 93.86316) (end 192.39738 93.60916) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 182.87238 93.86316) (end 192.14338 93.86316) (width 0.254) (layer B.Cu) (net 10)) + (segment (start 201.38898 112.91316) (end 201.64298 112.65916) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 192.11798 112.91316) (end 201.38898 112.91316) (width 0.254) (layer B.Cu) (net 11)) + (segment (start 322.88988 112.91316) (end 323.14388 112.65916) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 311.21858 112.91316) (end 322.88988 112.91316) (width 0.254) (layer B.Cu) (net 12)) + (segment (start 306.44338 93.86316) (end 306.69738 93.60916) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 297.17238 93.86316) (end 306.44338 93.86316) (width 0.254) (layer B.Cu) (net 13)) + (segment (start 173.09338 93.86316) (end 173.34738 93.60916) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 163.82238 93.86316) (end 173.09338 93.86316) (width 0.254) (layer B.Cu) (net 14)) + (segment (start 299.03928 112.91316) (end 299.29328 112.65916) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 287.36798 112.91316) (end 299.03928 112.91316) (width 0.254) (layer B.Cu) (net 15)) + (segment (start 287.39338 93.86316) (end 287.64738 93.60916) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 278.12238 93.86316) (end 287.39338 93.86316) (width 0.254) (layer B.Cu) (net 16)) + (segment (start 154.04338 93.86316) (end 154.29738 93.60916) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 144.77238 93.86316) (end 154.04338 93.86316) (width 0.254) (layer B.Cu) (net 17)) + (segment (start 268.34338 93.86316) (end 268.59738 93.60916) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 259.07238 93.86316) (end 268.34338 93.86316) (width 0.254) (layer B.Cu) (net 18)) + (segment (start 258.53898 112.91316) (end 258.79298 112.65916) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 249.26798 112.91316) (end 258.53898 112.91316) (width 0.254) (layer B.Cu) (net 19)) + (segment (start 134.99338 93.86316) (end 135.24738 93.60916) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 125.72238 93.86316) (end 134.99338 93.86316) (width 0.254) (layer B.Cu) (net 20)) + (segment (start 135.22198 112.65916) (end 134.96798 112.91316) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 144.49298 112.65916) (end 135.22198 112.65916) (width 0.254) (layer B.Cu) (net 21)) + (segment (start 263.46658 131.96316) (end 263.72058 131.70916) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 254.19558 131.96316) (end 263.46658 131.96316) (width 0.254) (layer B.Cu) (net 22)) + (segment (start 249.29338 93.86316) (end 249.54738 93.60916) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 240.02238 93.86316) (end 249.29338 93.86316) (width 0.254) (layer B.Cu) (net 23)) + (segment (start 115.94338 93.86316) (end 116.19738 93.60916) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 106.67238 93.86316) (end 115.94338 93.86316) (width 0.254) (layer B.Cu) (net 24)) + (segment (start 125.18898 112.91316) (end 125.44298 112.65916) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 115.91798 112.91316) (end 125.18898 112.91316) (width 0.254) (layer B.Cu) (net 25)) + (segment (start 272.99158 151.01316) (end 273.24558 150.75916) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 263.72058 151.01316) (end 272.99158 151.01316) (width 0.254) (layer B.Cu) (net 26)) + (segment (start 230.24338 93.86316) (end 230.49738 93.60916) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 220.97238 93.86316) (end 230.24338 93.86316) (width 0.254) (layer B.Cu) (net 27)) + (segment (start 96.89338 93.86316) (end 97.14738 93.60916) (width 0.254) (layer B.Cu) (net 28)) + (segment (start 87.62238 93.86316) (end 96.89338 93.86316) (width 0.254) (layer B.Cu) (net 28)) + (segment (start 363.43082 112.91316) (end 363.68482 112.65916) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 354.11918 112.91316) (end 363.43082 112.91316) (width 0.254) (layer B.Cu) (net 29)) + (segment (start 318.29248 151.01316) (end 318.54648 150.75916) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 306.62118 151.01316) (end 318.29248 151.01316) (width 0.254) (layer B.Cu) (net 30)) + (segment (start 125.44298 103.98516) (end 128.5495 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 125.44298 105.03916) (end 125.44298 103.98516) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 220.62948 103.92166) (end 220.62948 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 220.69298 103.98516) (end 220.62948 103.92166) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 220.69298 105.03916) (end 220.69298 103.98516) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 220.62948 100.87864) (end 237.88116 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 201.58456 103.92674) (end 201.58456 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 201.64298 103.98516) (end 201.58456 103.92674) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 201.64298 105.03916) (end 201.64298 103.98516) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 201.58456 100.87864) (end 220.62948 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 182.66918 103.90896) (end 182.66918 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 182.59298 103.98516) (end 182.66918 103.90896) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 182.59298 105.03916) (end 182.59298 103.98516) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 182.66918 100.87864) (end 201.58456 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 163.4998 103.94198) (end 163.4998 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 163.54298 103.98516) (end 163.4998 103.94198) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 163.54298 105.03916) (end 163.54298 103.98516) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 163.4998 100.87864) (end 182.66918 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 144.58442 103.89372) (end 144.58442 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 144.49298 103.98516) (end 144.58442 103.89372) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 144.49298 105.03916) (end 144.49298 103.98516) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 128.5495 100.87864) (end 144.58442 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 144.58442 100.87864) (end 163.4998 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (via (at 239.45596 100.85324) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 237.88116 100.87864) (end 239.43056 100.87864) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 239.43056 100.87864) (end 239.45596 100.85324) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 239.45596 104.75214) (end 239.74298 105.03916) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 239.45596 100.85324) (end 239.45596 104.75214) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 366.14354 103.211023) (end 364.404848 101.472331) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 366.14354 138.21156) (end 366.14354 103.211023) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 360.7308 143.6243) (end 366.14354 138.21156) (width 0.254) (layer F.Cu) (net 31)) + (via (at 364.404848 101.472331) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 31)) + (segment (start 280.70556 106.39298) (end 285.952542 101.145998) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 267.26642 106.39298) (end 280.70556 106.39298) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 239.74298 105.03916) (end 240.40846 104.37368) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 265.24712 104.37368) (end 267.26642 106.39298) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 246.2149 104.37368) (end 248.28246 106.44124) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 364.078515 101.145998) (end 364.404848 101.472331) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 248.28246 106.44124) (end 261.76732 106.44124) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 240.40846 104.37368) (end 246.2149 104.37368) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 261.76732 106.44124) (end 263.83488 104.37368) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 263.83488 104.37368) (end 265.24712 104.37368) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 182.59298 100.89134) (end 182.59298 105.03916) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 176.25314 94.5515) (end 182.59298 100.89134) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 337.994602 101.145998) (end 364.078515 101.145998) (width 0.254) (layer B.Cu) (net 31)) + (via (at 337.994602 101.145998) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 31)) + (segment (start 285.952542 101.145998) (end 337.994602 101.145998) (width 0.254) (layer B.Cu) (net 31)) + (segment (start 342.200599 152.870801) (end 329.500599 165.570801) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 337.994602 101.145998) (end 342.1507 105.302096) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 342.1507 119.094983) (end 338.42003 122.825659) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 338.42003 122.825659) (end 338.42003 132.919894) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 342.1507 105.302096) (end 342.1507 119.094983) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 338.474021 132.973887) (end 338.474021 139.218088) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 329.500599 165.570801) (end 328.6506 166.4208) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 338.474021 139.218088) (end 342.200599 142.944667) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 338.42003 132.919894) (end 338.474021 132.973887) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 342.200599 142.944667) (end 342.200599 152.870801) (width 0.254) (layer F.Cu) (net 31)) + (segment (start 300.34728 105.03916) (end 303.60864 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 299.29328 105.03916) (end 300.34728 105.03916) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 323.14388 101.79558) (end 323.1261 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 323.14388 105.03916) (end 323.14388 101.79558) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 303.60864 101.7778) (end 323.1261 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 268.59738 87.04316) (end 268.48816 87.15238) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 268.59738 85.98916) (end 268.59738 87.04316) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 268.48816 87.15238) (end 268.48816 89.45372) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 268.48816 89.45372) (end 276.72284 97.6884) (width 0.254) (layer B.Cu) (net 32)) + (via (at 297.47972 97.6884) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 32)) + (segment (start 276.72284 97.6884) (end 297.47972 97.6884) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 299.29328 99.50196) (end 299.29328 105.03916) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 297.47972 97.6884) (end 299.29328 99.50196) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 263.72058 123.03516) (end 263.72058 124.08916) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 261.25932 120.5739) (end 263.72058 123.03516) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 261.25932 90.948926) (end 261.25932 120.5739) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 266.219086 85.98916) (end 261.25932 90.948926) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 268.59738 85.98916) (end 266.219086 85.98916) (width 0.254) (layer F.Cu) (net 32)) + (via (at 356.43312 143.41602) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 32)) + (segment (start 358.1274 124.08916) (end 359.1814 124.08916) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 356.43312 125.78344) (end 358.1274 124.08916) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 356.43312 143.41602) (end 356.43312 125.78344) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 356.21976 143.41602) (end 356.43312 143.41602) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 339.858113 143.13916) (end 340.912113 143.13916) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 341.366773 142.6845) (end 346.60078 142.6845) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 340.912113 143.13916) (end 341.366773 142.6845) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 346.60078 142.6845) (end 348.41688 144.5006) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 348.41688 144.5006) (end 355.13518 144.5006) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 355.13518 144.5006) (end 356.21976 143.41602) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 344.63482 101.8794) (end 344.63482 105.03916) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 344.53322 101.7778) (end 344.63482 101.8794) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 362.85424 101.7778) (end 363.0676 101.99116) (width 0.254) (layer B.Cu) (net 32)) + (via (at 363.0676 101.99116) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 32)) + (segment (start 344.53322 101.7778) (end 362.85424 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 359.1814 124.08916) (end 365.41964 117.85092) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 365.41964 117.85092) (end 365.41964 104.3432) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 365.41964 104.3432) (end 363.0676 101.99116) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 337.54097 101.7778) (end 337.642569 101.879399) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 338.346635 101.879399) (end 338.448234 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 338.448234 101.7778) (end 344.53322 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 323.1261 101.7778) (end 337.54097 101.7778) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 337.642569 101.879399) (end 338.346635 101.879399) (width 0.254) (layer B.Cu) (net 32)) + (segment (start 273.24558 136.21258) (end 273.24558 143.13916) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 264.95756 127.92456) (end 273.24558 136.21258) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 264.95756 126.38014) (end 264.95756 127.92456) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 263.72058 124.08916) (end 263.72058 125.14316) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 263.72058 125.14316) (end 264.95756 126.38014) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 341.6046 150.9268) (end 326.1106 166.4208) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 341.6046 145.939647) (end 341.6046 150.9268) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 339.858113 144.19316) (end 341.6046 145.939647) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 339.858113 143.13916) (end 339.858113 144.19316) (width 0.254) (layer F.Cu) (net 32)) + (segment (start 97.14738 85.98916) (end 97.14738 84.93516) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 97.14738 84.93516) (end 98.93564 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 173.34738 83.23072) (end 173.34738 85.98916) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 173.4312 83.1469) (end 173.34738 83.23072) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 116.19738 83.2231) (end 116.12118 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 116.19738 85.98916) (end 116.19738 83.2231) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 98.93564 83.1469) (end 116.12118 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 135.24738 83.21294) (end 135.24738 85.98916) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 135.18134 83.1469) (end 135.24738 83.21294) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 116.12118 83.1469) (end 135.18134 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 154.29738 83.20024) (end 154.29738 85.98916) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 154.35072 83.1469) (end 154.29738 83.20024) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 135.18134 83.1469) (end 154.35072 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 154.35072 83.1469) (end 173.4312 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 211.44738 83.84286) (end 211.44738 85.98916) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 210.75142 83.1469) (end 211.44738 83.84286) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 192.39738 83.2612) (end 192.39738 85.98916) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 192.28308 83.1469) (end 192.39738 83.2612) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 173.4312 83.1469) (end 192.28308 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 192.28308 83.1469) (end 210.75142 83.1469) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 211.44738 87.04316) (end 213.9442 89.53998) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 211.44738 85.98916) (end 211.44738 87.04316) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 213.9442 89.53998) (end 213.9442 97.3582) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 219.1131 102.5271) (end 219.1131 119.8753) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 213.9442 97.3582) (end 219.1131 102.5271) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 219.1131 119.8753) (end 222.353481 123.115681) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 222.353481 123.115681) (end 222.353481 125.007981) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 222.353481 125.007981) (end 223.266 125.9205) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 223.266 125.9205) (end 223.266 132.3975) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 223.266 132.3975) (end 221.9325 133.731) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 221.9325 133.731) (end 221.9325 135.5344) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 221.9325 135.5344) (end 226.6315 135.5344) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 226.6315 135.5344) (end 232.4735 141.3764) (width 0.254) (layer F.Cu) (net 33)) + (via (at 232.4735 158.877) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 33)) + (segment (start 232.4735 141.3764) (end 232.4735 158.877) (width 0.254) (layer F.Cu) (net 33)) + (segment (start 233.048236 158.877) (end 232.4735 158.877) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 292.0238 161.7091) (end 290.5125 163.2204) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 292.0238 161.6456) (end 292.0238 161.7091) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 294.767 158.9024) (end 292.0238 161.6456) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 313.7154 158.9024) (end 294.767 158.9024) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 321.0306 166.2176) (end 313.7154 158.9024) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 290.5125 163.2204) (end 237.391636 163.2204) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 321.0306 166.4208) (end 321.0306 166.2176) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 237.391636 163.2204) (end 233.048236 158.877) (width 0.254) (layer B.Cu) (net 33)) + (segment (start 282.51658 131.96316) (end 282.77058 131.70916) (width 0.254) (layer B.Cu) (net 34)) + (segment (start 273.24558 131.96316) (end 282.51658 131.96316) (width 0.254) (layer B.Cu) (net 34)) + (segment (start 234.89158 151.01316) (end 235.14558 150.75916) (width 0.254) (layer B.Cu) (net 35)) + (segment (start 225.62058 151.01316) (end 234.89158 151.01316) (width 0.254) (layer B.Cu) (net 35)) + (segment (start 216.09558 131.96316) (end 217.213179 133.080759) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 222.640171 133.080759) (end 224.01177 131.70916) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 224.01177 131.70916) (end 225.62058 131.70916) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 217.213179 133.080759) (end 222.640171 133.080759) (width 0.254) (layer B.Cu) (net 36)) + (segment (start 215.84158 151.01316) (end 216.09558 150.75916) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 206.57058 151.01316) (end 215.84158 151.01316) (width 0.254) (layer B.Cu) (net 37)) + (segment (start 206.31658 131.96316) (end 206.57058 131.70916) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 197.04558 131.96316) (end 206.31658 131.96316) (width 0.254) (layer B.Cu) (net 38)) + (segment (start 207.30718 170.06316) (end 207.40878 169.96156) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 196.94398 170.06316) (end 207.30718 170.06316) (width 0.254) (layer B.Cu) (net 39)) + (segment (start 196.79158 151.01316) (end 197.04558 150.75916) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 187.52058 151.01316) (end 196.79158 151.01316) (width 0.254) (layer B.Cu) (net 40)) + (segment (start 187.26658 131.96316) (end 187.52058 131.70916) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 177.99558 131.96316) (end 187.26658 131.96316) (width 0.254) (layer B.Cu) (net 41)) + (segment (start 87.08898 112.91316) (end 87.34298 112.65916) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 77.99578 112.91316) (end 87.08898 112.91316) (width 0.254) (layer B.Cu) (net 42)) + (segment (start 120.59158 151.01316) (end 120.84558 150.75916) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 111.32058 151.01316) (end 120.59158 151.01316) (width 0.254) (layer B.Cu) (net 43)) + (segment (start 177.74158 151.01316) (end 177.99558 150.75916) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 168.47058 151.01316) (end 177.74158 151.01316) (width 0.254) (layer B.Cu) (net 44)) + (segment (start 168.21658 131.96316) (end 168.47058 131.70916) (width 0.254) (layer B.Cu) (net 45)) + (segment (start 158.94558 131.96316) (end 168.21658 131.96316) (width 0.254) (layer B.Cu) (net 45)) + (segment (start 92.01658 131.96316) (end 92.27058 131.70916) (width 0.254) (layer B.Cu) (net 46)) + (segment (start 82.74558 131.96316) (end 92.01658 131.96316) (width 0.254) (layer B.Cu) (net 46)) + (segment (start 111.06658 131.96316) (end 111.32058 131.70916) (width 0.254) (layer B.Cu) (net 47)) + (segment (start 101.79558 131.96316) (end 111.06658 131.96316) (width 0.254) (layer B.Cu) (net 47)) + (segment (start 158.69158 151.01316) (end 158.94558 150.75916) (width 0.254) (layer B.Cu) (net 48)) + (segment (start 149.42058 151.01316) (end 158.69158 151.01316) (width 0.254) (layer B.Cu) (net 48)) + (segment (start 149.16658 131.96316) (end 149.42058 131.70916) (width 0.254) (layer B.Cu) (net 49)) + (segment (start 139.89558 131.96316) (end 149.16658 131.96316) (width 0.254) (layer B.Cu) (net 49)) + (segment (start 320.8274 131.96316) (end 321.0814 131.70916) (width 0.254) (layer B.Cu) (net 50)) + (segment (start 311.34558 131.96316) (end 320.8274 131.96316) (width 0.254) (layer B.Cu) (net 50)) + (segment (start 106.13898 112.91316) (end 106.39298 112.65916) (width 0.254) (layer B.Cu) (net 51)) + (segment (start 96.86798 112.91316) (end 106.13898 112.91316) (width 0.254) (layer B.Cu) (net 51)) + (segment (start 139.64158 151.01316) (end 139.89558 150.75916) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 130.37058 151.01316) (end 139.64158 151.01316) (width 0.254) (layer B.Cu) (net 52)) + (segment (start 130.11658 131.96316) (end 130.37058 131.70916) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 120.84558 131.96316) (end 130.11658 131.96316) (width 0.254) (layer B.Cu) (net 53)) + (segment (start 330.47178 141.304635) (end 332.368515 139.4079) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 330.47178 142.88516) (end 330.47178 141.304635) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 346.04452 139.4079) (end 349.52178 142.88516) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 332.368515 139.4079) (end 346.04452 139.4079) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 354.788374 86.201154) (end 357.32974 88.74252) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 357.32974 88.74252) (end 357.32974 100.14712) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 357.32974 100.14712) (end 356.34422 100.14712) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 354.11918 102.37216) (end 354.11918 104.356648) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 356.34422 100.14712) (end 354.11918 102.37216) (width 0.254) (layer F.Cu) (net 54)) + (via (at 357.3018 119.443498) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 54)) + (segment (start 354.587436 105.253416) (end 357.37038 108.03636) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 357.37038 119.374918) (end 357.3018 119.443498) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 357.37038 108.03636) (end 357.37038 119.374918) (width 0.254) (layer F.Cu) (net 54)) + (via (at 331.343 136.271) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 54)) + (segment (start 331.343 139.319) (end 331.343 136.845736) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 331.343 136.845736) (end 331.343 136.271) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 330.55814 140.10386) (end 331.343 139.319) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 330.55814 142.374812) (end 330.55814 140.10386) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 330.259786 142.673166) (end 330.55814 142.374812) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 331.343 136.144) (end 331.343 136.271) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 348.107 119.507) (end 331.343 136.271) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 357.3018 119.443498) (end 348.170502 119.443498) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 348.170502 119.443498) (end 348.107 119.507) (width 0.254) (layer B.Cu) (net 54)) + (segment (start 332.8924 150.816919) (end 318.4906 165.218719) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 330.47178 142.88516) (end 332.8924 145.30578) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 332.8924 145.30578) (end 332.8924 150.816919) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 318.4906 165.218719) (end 318.4906 166.4208) (width 0.254) (layer F.Cu) (net 54)) + (segment (start 265.1633 101.63048) (end 268.31798 104.78516) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 231.792135 101.63048) (end 265.1633 101.63048) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 230.21798 103.204635) (end 231.792135 101.63048) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 233.72826 108.29544) (end 230.683974 105.251154) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 233.72826 111.64824) (end 233.72826 108.29544) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 235.14558 113.06556) (end 235.14558 123.411172) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 233.72826 111.64824) (end 235.14558 113.06556) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 244.67058 139.573) (end 244.67058 142.461172) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 239.95634 134.85876) (end 244.67058 139.573) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 239.95634 130.56616) (end 239.95634 134.85876) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 238.31296 128.92278) (end 239.95634 130.56616) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 235.611574 124.301154) (end 238.31296 127.00254) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 238.31296 127.00254) (end 238.31296 128.92278) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 352.46818 126.85776) (end 349.911574 124.301154) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 352.46818 128.01346) (end 352.46818 126.85776) (width 0.254) (layer F.Cu) (net 55)) + (via (at 352.4631 138.66622) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 55)) + (segment (start 352.46818 128.01346) (end 352.46818 138.66114) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 352.46818 138.66114) (end 352.4631 138.66622) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 271.29232 107.7595) (end 268.783974 105.251154) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 271.29232 108.97616) (end 271.29232 107.7595) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 271.29232 108.97616) (end 271.29232 116.03482) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 271.29232 116.03482) (end 266.11834 121.2088) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 266.11834 121.2088) (end 266.11834 128.04902) (width 0.254) (layer F.Cu) (net 55)) + (via (at 273.2913 134.88416) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 55)) + (segment (start 266.11834 128.04902) (end 272.95348 134.88416) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 272.95348 134.88416) (end 273.2913 134.88416) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 205.11516 88.92794) (end 202.388374 86.201154) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 205.11516 89.94648) (end 205.11516 88.92794) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 205.11516 89.94648) (end 205.11516 93.9292) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 205.11516 93.9292) (end 212.95614 101.77018) (width 0.254) (layer F.Cu) (net 55)) + (via (at 215.24976 101.77018) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 55)) + (segment (start 212.95614 101.77018) (end 215.24976 101.77018) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 230.21798 104.78516) (end 230.21798 103.5812) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 230.21798 103.5812) (end 230.21798 103.204635) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 306.62118 141.304635) (end 306.62118 142.88516) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 309.090823 138.834992) (end 306.62118 141.304635) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 352.4631 138.66622) (end 352.294328 138.834992) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 352.294328 138.834992) (end 309.090823 138.834992) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 343.68232 118.0719) (end 349.233586 123.623166) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 335.738374 86.201154) (end 338.39912 88.8619) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 338.39912 98.85934) (end 343.3445 103.80472) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 338.39912 88.8619) (end 338.39912 98.85934) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 343.3445 113.9444) (end 343.68232 114.28222) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 343.3445 103.80472) (end 343.3445 113.9444) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 343.68232 114.28222) (end 343.68232 118.0719) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 229.01402 103.5812) (end 230.21798 104.78516) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 215.649759 102.170179) (end 215.649759 104.583179) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 215.24976 101.77018) (end 215.649759 102.170179) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 217.72372 106.65714) (end 222.07474 106.65714) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 222.07474 106.65714) (end 225.15068 103.5812) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 215.649759 104.583179) (end 217.72372 106.65714) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 225.15068 103.5812) (end 229.01402 103.5812) (width 0.254) (layer B.Cu) (net 55)) + (via (at 301.74184 134.88416) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 55)) + (segment (start 301.752 134.89432) (end 301.74184 134.88416) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 301.752 138.01598) (end 301.752 134.89432) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 306.62118 142.88516) (end 301.752 138.01598) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 273.2913 134.88416) (end 301.74184 134.88416) (width 0.254) (layer B.Cu) (net 55)) + (via (at 330.2 135.128) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 55)) + (segment (start 301.74184 134.88416) (end 329.95616 134.88416) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 329.95616 134.88416) (end 330.2 135.128) (width 0.254) (layer B.Cu) (net 55)) + (segment (start 315.9506 166.4208) (end 315.9506 162.6616) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 330.2 137.922) (end 330.2 135.702736) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 330.2 135.702736) (end 330.2 135.128) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 321.329022 157.283178) (end 321.329022 146.792978) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 321.329022 146.792978) (end 330.2 137.922) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 315.9506 162.6616) (end 321.329022 157.283178) (width 0.254) (layer F.Cu) (net 55)) + (segment (start 215.163592 123.83516) (end 215.671592 123.83516) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 214.64016 123.311728) (end 215.163592 123.83516) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 211.633974 105.251154) (end 214.64016 108.25734) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 214.64016 108.25734) (end 214.64016 123.311728) (width 0.254) (layer F.Cu) (net 56)) + (via (at 207.0481 97.37344) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 56)) + (segment (start 184.19826 87.06104) (end 182.87238 85.73516) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 188.1505 87.06104) (end 184.19826 87.06104) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 207.0481 97.37344) (end 198.4629 97.37344) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 198.4629 97.37344) (end 188.1505 87.06104) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 211.16798 101.49332) (end 211.16798 104.361172) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 207.0481 97.37344) (end 211.16798 101.49332) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 270.60398 120.49506) (end 273.24558 123.13666) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 251.82322 120.49506) (end 270.60398 120.49506) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 247.038519 125.279761) (end 251.82322 120.49506) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 218.0844 125.82398) (end 226.52228 125.82398) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 216.09558 123.83516) (end 218.0844 125.82398) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 226.52228 125.82398) (end 231.65054 120.69572) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 273.24558 123.13666) (end 273.24558 123.83516) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 231.65054 120.69572) (end 238.8489 120.69572) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 238.8489 120.69572) (end 243.432941 125.279761) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 243.432941 125.279761) (end 247.038519 125.279761) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 316.688374 86.201154) (end 319.41008 88.92286) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 319.41008 88.92286) (end 319.41008 90.52052) (width 0.254) (layer F.Cu) (net 56)) + (via (at 319.10274 122.47372) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 56)) + (segment (start 319.41008 122.16638) (end 319.10274 122.47372) (width 0.254) (layer F.Cu) (net 56)) + (via (at 319.41008 107.21086) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 56)) + (segment (start 319.41008 90.52052) (end 319.41008 107.21086) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 319.41008 107.21086) (end 319.41008 122.16638) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 334.10652 103.8225) (end 335.06918 104.78516) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 333.4766 103.8225) (end 334.10652 103.8225) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 333.46644 103.83266) (end 333.4766 103.8225) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 329.38466 103.83266) (end 333.46644 103.83266) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 319.41008 107.21086) (end 326.00646 107.21086) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 326.00646 107.21086) (end 329.38466 103.83266) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 225.408586 142.673166) (end 224.18167 141.44625) (width 0.254) (layer F.Cu) (net 56)) + (via (at 218.89974 159.64662) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 56)) + (segment (start 224.18167 141.44625) (end 221.76359 141.44625) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 221.76359 141.44625) (end 218.89974 144.3101) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 218.89974 144.3101) (end 218.89974 159.64662) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 224.18167 141.44625) (end 219.42044 136.68502) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 219.42044 127.16002) (end 216.561574 124.301154) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 219.42044 136.68502) (end 219.42044 127.16002) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 313.4106 165.218719) (end 313.4106 166.4208) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 276.33676 126.92634) (end 273.24558 123.83516) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 276.33676 129.07518) (end 276.33676 126.92634) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 276.7838 129.52222) (end 276.33676 129.07518) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 289.09264 128.53924) (end 288.10966 129.52222) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 319.10274 122.47372) (end 317.85052 121.2215) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 307.9877 121.2215) (end 303.8602 125.349) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 303.8602 125.349) (end 291.410806 125.349) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 288.10966 129.52222) (end 276.7838 129.52222) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 317.85052 121.2215) (end 307.9877 121.2215) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 291.410806 125.349) (end 289.09264 127.667166) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 289.09264 127.667166) (end 289.09264 128.53924) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 313.4106 160.763668) (end 313.4106 165.218719) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 320.875011 153.299257) (end 313.4106 160.763668) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 320.875011 146.604921) (end 320.875011 153.299257) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 323.268989 144.210943) (end 320.875011 146.604921) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 323.268989 124.088147) (end 323.268989 144.210943) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 321.654562 122.47372) (end 323.268989 124.088147) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 319.10274 122.47372) (end 321.654562 122.47372) (width 0.254) (layer F.Cu) (net 56)) + (segment (start 88.587579 144.002759) (end 87.46998 142.88516) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 90.59672 146.0119) (end 88.587579 144.002759) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 91.53398 149.23262) (end 90.59672 148.29536) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 100.63226 149.23262) (end 91.53398 149.23262) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 205.435752 164.04082) (end 196.436532 155.0416) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 214.50554 164.04082) (end 205.435752 164.04082) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 90.59672 148.29536) (end 90.59672 146.0119) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 106.44124 155.0416) (end 100.63226 149.23262) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 196.436532 155.0416) (end 106.44124 155.0416) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 218.89974 159.64662) (end 214.50554 164.04082) (width 0.254) (layer B.Cu) (net 56)) + (segment (start 281.652981 141.767561) (end 282.77058 142.88516) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 280.309979 140.424559) (end 281.652981 141.767561) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 259.098783 140.424559) (end 280.309979 140.424559) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 254.778902 144.74444) (end 259.098783 140.424559) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 241.60734 139.7635) (end 248.04116 139.7635) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 253.0221 144.74444) (end 254.778902 144.74444) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 236.87786 144.49298) (end 241.60734 139.7635) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 208.42986 144.74444) (end 216.678902 144.74444) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 206.57058 142.88516) (end 208.42986 144.74444) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 216.678902 144.74444) (end 221.596342 139.827) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 248.04116 139.7635) (end 253.0221 144.74444) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 221.596342 139.827) (end 229.15372 139.827) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 229.15372 139.827) (end 233.8197 144.49298) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 233.8197 144.49298) (end 236.87786 144.49298) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 192.11798 104.78516) (end 195.01358 107.68076) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 195.01358 107.68076) (end 195.01358 110.88624) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 197.04558 113.483925) (end 197.04558 123.411172) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 195.01358 110.88624) (end 195.01358 111.451925) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 195.01358 111.451925) (end 197.04558 113.483925) (width 0.254) (layer F.Cu) (net 57)) + (via (at 191.42456 97.4979) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 57)) + (segment (start 192.12052 98.19386) (end 191.42456 97.4979) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 192.11798 104.361172) (end 192.12052 104.358632) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 192.12052 104.358632) (end 192.12052 98.19386) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 165.68928 87.60206) (end 163.82238 85.73516) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 170.46956 87.60206) (end 165.68928 87.60206) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 191.42456 97.4979) (end 180.3654 97.4979) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 180.3654 97.4979) (end 170.46956 87.60206) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 206.57058 139.07516) (end 206.57058 142.461172) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 200.08088 132.58546) (end 206.57058 139.07516) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 197.511574 124.301154) (end 200.08088 126.87046) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 200.08088 126.87046) (end 200.08088 132.58546) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 300.15688 93.72346) (end 311.006586 104.573166) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 297.638374 86.201154) (end 300.15688 88.71966) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 300.15688 88.71966) (end 300.15688 93.72346) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 314.25896 108.76534) (end 317.83528 112.34166) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 284.68263 138.10799) (end 317.66256 138.10799) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 282.77058 142.88516) (end 282.77058 140.02004) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 317.83528 112.34166) (end 317.83528 137.93527) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 311.684574 105.251154) (end 314.25896 107.82554) (width 0.254) (layer F.Cu) (net 57)) + (via (at 317.66256 138.10799) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 57)) + (segment (start 317.83528 137.93527) (end 317.66256 138.10799) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 282.77058 140.02004) (end 284.68263 138.10799) (width 0.254) (layer B.Cu) (net 57)) + (segment (start 314.25896 107.82554) (end 314.25896 108.76534) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 161.417 83.32978) (end 163.82238 85.73516) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 317.262561 138.507989) (end 316.621911 138.507989) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 317.66256 138.10799) (end 317.262561 138.507989) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 316.621911 138.507989) (end 316.0141 139.1158) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 316.0141 139.1158) (end 316.0141 155.0797) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 310.8706 160.2232) (end 316.0141 155.0797) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 310.8706 166.4208) (end 310.8706 160.2232) (width 0.254) (layer F.Cu) (net 57)) + (segment (start 146.65198 87.61476) (end 144.77238 85.73516) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 147.75434 87.61476) (end 150.99538 87.61476) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 147.93468 87.61476) (end 147.75434 87.61476) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 147.75434 87.61476) (end 146.65198 87.61476) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 150.99538 87.61476) (end 159.3342 95.95358) (width 0.254) (layer B.Cu) (net 58)) + (via (at 170.8023 95.95358) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 58)) + (segment (start 159.3342 95.95358) (end 170.8023 95.95358) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 173.06798 98.21926) (end 173.06798 104.361172) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 170.8023 95.95358) (end 173.06798 98.21926) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 175.71974 107.43692) (end 173.533974 105.251154) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 175.71974 108.38942) (end 175.71974 107.43692) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 175.71974 108.16082) (end 175.71974 108.38942) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 177.99558 120.66778) (end 177.99558 123.411172) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 175.71974 108.38942) (end 175.71974 118.39194) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 175.71974 118.39194) (end 177.99558 120.66778) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 187.52058 139.25296) (end 187.52058 142.461172) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 180.55844 132.29082) (end 187.52058 139.25296) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 178.461574 124.301154) (end 180.55844 126.39802) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 180.55844 126.39802) (end 180.55844 132.29082) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 196.94398 157.8102) (end 196.94398 161.511172) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 190.35522 151.22144) (end 196.94398 157.8102) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 190.35522 145.669) (end 190.35522 151.22144) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 187.986574 143.351154) (end 190.30442 145.669) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 190.30442 145.669) (end 190.35522 145.669) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 281.25928 98.67646) (end 287.155986 104.573166) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 278.588374 86.201154) (end 281.25928 88.87206) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 281.25928 88.87206) (end 281.25928 98.67646) (width 0.254) (layer F.Cu) (net 58)) + (via (at 299.974 160.273982) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 58)) + (segment (start 290.4871 107.90428) (end 290.4871 112.61598) (width 0.254) (layer F.Cu) (net 58)) + (via (at 299.974 152.4) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 58)) + (segment (start 287.833974 105.251154) (end 290.4871 107.90428) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 299.974 151.834315) (end 299.974 152.4) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 290.4871 112.61598) (end 299.974 122.10288) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 299.974 122.10288) (end 299.974 151.834315) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 299.974 160.273982) (end 299.974 152.4) (width 0.254) (layer F.Cu) (net 58)) + (segment (start 302.1838 160.274) (end 299.974018 160.274) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 299.974018 160.274) (end 299.974 160.273982) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 308.3306 166.4208) (end 302.1838 160.274) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 299.574001 152.799999) (end 299.974 152.4) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 297.434 154.94) (end 299.574001 152.799999) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 225.19386 154.94) (end 297.434 154.94) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 215.11071 165.02315) (end 225.19386 154.94) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 198.061579 163.052759) (end 203.469791 163.052759) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 196.94398 161.93516) (end 198.061579 163.052759) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 205.440182 165.02315) (end 215.11071 165.02315) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 203.469791 163.052759) (end 205.440182 165.02315) (width 0.254) (layer B.Cu) (net 58)) + (segment (start 114.997855 137.62736) (end 149.20214 137.62736) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 157.353 122.24258) (end 158.733586 123.623166) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 154.01798 104.78516) (end 157.353 108.12018) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 157.353 108.12018) (end 157.353 122.24258) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 168.47058 138.14298) (end 168.47058 142.461172) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 161.85134 131.52374) (end 168.47058 138.14298) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 159.411574 124.301154) (end 161.85134 126.74092) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 161.85134 126.74092) (end 161.85134 131.52374) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 163.21278 137.62736) (end 163.26358 137.57656) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 149.20214 137.62736) (end 163.21278 137.62736) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 163.26358 137.57656) (end 167.9067 137.57656) (width 0.254) (layer B.Cu) (net 59)) + (via (at 167.9067 137.57656) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 59)) + (segment (start 114.997855 137.62736) (end 91.47556 137.62736) (width 0.254) (layer B.Cu) (net 59)) + (via (at 91.27998 137.58418) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 59)) + (segment (start 91.47556 137.62736) (end 91.43238 137.58418) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 89.42832 120.14962) (end 89.42832 135.73252) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 89.42832 135.73252) (end 91.27998 137.58418) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 81.1276 111.8489) (end 89.42832 120.14962) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 81.1276 107.91698) (end 81.1276 111.8489) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 78.461774 105.251154) (end 81.1276 107.91698) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 91.43238 137.58418) (end 91.27998 137.58418) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 111.32058 137.6299) (end 111.32312 137.62736) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 111.32058 142.88516) (end 111.32058 137.6299) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 247.30456 102.82174) (end 249.055986 104.573166) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 247.30456 84.89696) (end 247.30456 102.82174) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 247.96496 84.23656) (end 247.30456 84.89696) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 258.860386 85.523166) (end 257.57378 84.23656) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 257.57378 84.23656) (end 247.96496 84.23656) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 128.80594 88.81872) (end 126.188374 86.201154) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 128.80594 90.08872) (end 128.80594 88.81872) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 128.80594 90.08872) (end 128.80594 99.38512) (width 0.254) (layer F.Cu) (net 59)) + (via (at 131.42722 102.0064) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 59)) + (segment (start 128.80594 99.38512) (end 131.42722 102.0064) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 152.56002 103.3272) (end 154.01798 104.78516) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 150.22322 103.3272) (end 152.56002 103.3272) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 139.12342 102.0064) (end 142.13078 105.01376) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 131.42722 102.0064) (end 139.12342 102.0064) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 142.13078 105.01376) (end 142.13078 106.59872) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 142.13078 106.59872) (end 143.1544 107.62234) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 143.1544 107.62234) (end 145.92808 107.62234) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 145.92808 107.62234) (end 150.22322 103.3272) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 252.40234 115.09502) (end 261.17804 123.87072) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 249.733974 105.251154) (end 252.40234 107.91952) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 252.40234 107.91952) (end 252.40234 115.09502) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 261.17804 123.87072) (end 261.17804 137.999009) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 261.17804 137.999009) (end 261.18862 138.009589) (width 0.254) (layer F.Cu) (net 59)) + (via (at 261.18862 138.009589) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 59)) + (segment (start 260.755591 137.57656) (end 261.18862 138.009589) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 167.9067 137.57656) (end 260.755591 137.57656) (width 0.254) (layer B.Cu) (net 59)) + (via (at 257.4036 163.953812) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 59)) + (segment (start 305.7906 166.4208) (end 303.323612 163.953812) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 257.4036 141.794609) (end 257.4036 163.953812) (width 0.254) (layer F.Cu) (net 59)) + (segment (start 303.323612 163.953812) (end 257.978336 163.953812) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 257.978336 163.953812) (end 257.4036 163.953812) (width 0.254) (layer B.Cu) (net 59)) + (segment (start 261.18862 138.009589) (end 257.4036 141.794609) (width 0.254) (layer F.Cu) (net 59)) + (via (at 132.55244 96.2025) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 60)) + (segment (start 82.74558 122.254635) (end 84.48294 120.517275) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 82.74558 123.83516) (end 82.74558 122.254635) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 125.912235 120.517275) (end 127.69088 122.29592) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 127.69088 122.29592) (end 127.69088 125.94844) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 127.69088 125.94844) (end 128.016 126.27356) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 128.016 126.27356) (end 131.34086 126.27356) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 131.497581 126.116839) (end 131.497581 125.842519) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 131.34086 126.27356) (end 131.497581 126.116839) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 131.497581 125.842519) (end 134.66318 122.67692) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 138.73734 122.67692) (end 139.89558 123.83516) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 134.66318 122.67692) (end 138.73734 122.67692) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 84.48294 120.517275) (end 101.900365 120.517275) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 101.900365 120.517275) (end 125.912235 120.517275) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 101.79558 120.62206) (end 101.900365 120.517275) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 101.79558 123.83516) (end 101.79558 120.62206) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 134.96798 99.183725) (end 134.96798 104.361172) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 132.55244 96.2025) (end 132.55244 96.768185) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 132.55244 96.768185) (end 134.96798 99.183725) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 132.55244 96.2025) (end 121.91492 96.2025) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 121.91492 96.2025) (end 113.13668 87.42426) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 108.36148 87.42426) (end 106.67238 85.73516) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 113.13668 87.42426) (end 108.36148 87.42426) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 149.42058 139.22756) (end 149.42058 142.461172) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 140.361574 124.301154) (end 143.32204 127.26162) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 143.32204 127.26162) (end 143.32204 133.12902) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 243.14658 88.85936) (end 240.488374 86.201154) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 243.14658 90.26398) (end 243.14658 88.85936) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 243.010079 90.400481) (end 243.010079 106.984141) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 243.14658 90.26398) (end 243.010079 90.400481) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 243.010079 106.984141) (end 242.32616 107.66806) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 242.32616 111.96574) (end 253.983586 123.623166) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 242.32616 107.66806) (end 242.32616 111.96574) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 138.76528 123.83516) (end 139.471592 123.83516) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 128.28524 113.35512) (end 138.76528 123.83516) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 128.28524 106.10342) (end 128.28524 105.20934) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 128.28524 106.10342) (end 128.28524 113.35512) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 128.28524 105.20934) (end 129.80924 103.68534) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 133.86816 103.68534) (end 134.755986 104.573166) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 129.80924 103.68534) (end 133.86816 103.68534) (width 0.254) (layer F.Cu) (net 60)) + (via (at 148.58619 138.39317) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 60)) + (segment (start 143.32204 133.12902) (end 148.58619 138.39317) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 148.58619 138.39317) (end 149.42058 139.22756) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 257.634199 138.39317) (end 257.7465 138.505471) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 257.7465 126.50724) (end 257.7465 138.505471) (width 0.254) (layer F.Cu) (net 60)) + (via (at 257.7465 138.505471) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 60)) + (segment (start 148.58619 138.39317) (end 257.634199 138.39317) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 255.100994 123.861734) (end 257.7465 126.50724) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 256.159 140.092971) (end 256.159 163.95381) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 256.892404 164.687214) (end 256.565399 164.360209) (width 0.254) (layer B.Cu) (net 60)) + (via (at 256.159 163.95381) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 60)) + (segment (start 256.565399 164.360209) (end 256.159 163.95381) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 303.2506 166.4208) (end 301.517014 164.687214) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 257.7465 138.505471) (end 256.159 140.092971) (width 0.254) (layer F.Cu) (net 60)) + (segment (start 301.517014 164.687214) (end 256.892404 164.687214) (width 0.254) (layer B.Cu) (net 60)) + (segment (start 96.86798 104.78516) (end 96.86798 102.38994) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 96.86798 102.38994) (end 98.171 101.08692) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 112.21974 101.08692) (end 115.91798 104.78516) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 98.171 101.08692) (end 112.21974 101.08692) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 90.7415 98.65868) (end 96.655986 104.573166) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 88.088374 86.201154) (end 90.7415 88.85428) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 90.7415 88.85428) (end 90.7415 98.65868) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 120.84558 123.83516) (end 119.727981 122.717561) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 119.727981 108.595161) (end 116.383974 105.251154) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 119.727981 122.097799) (end 119.727981 108.595161) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 119.727981 122.717561) (end 119.727981 122.097799) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 130.37058 139.58062) (end 130.37058 142.461172) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 119.727981 122.097799) (end 119.727981 122.730261) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 119.727981 122.730261) (end 120.627236 123.629516) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 123.8631 126.86538) (end 123.8631 133.07314) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 121.305224 124.307504) (end 123.8631 126.86538) (width 0.254) (layer F.Cu) (net 61)) + (via (at 263.9568 136.87044) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 61)) + (segment (start 263.9568 142.224952) (end 263.72058 142.461172) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 263.9568 136.87044) (end 263.9568 142.224952) (width 0.254) (layer F.Cu) (net 61)) + (via (at 223.37776 134.0612) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 61)) + (segment (start 314.34532 126.8349) (end 314.34532 135.89959) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 311.811574 124.301154) (end 314.34532 126.8349) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 263.9568 136.87044) (end 264.029811 136.797429) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 313.447481 136.797429) (end 313.72048 136.52443) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 313.7662 136.779) (end 313.72048 136.73328) (width 0.254) (layer B.Cu) (net 61)) + (via (at 313.72048 136.52443) (size 0.8) (drill 0.4) (layers F.Cu B.Cu) (net 61)) + (segment (start 313.72048 136.73328) (end 313.72048 136.52443) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 314.34532 135.89959) (end 313.72048 136.52443) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 264.029811 136.797429) (end 313.447481 136.797429) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 263.885119 136.798759) (end 263.9568 136.87044) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 226.115319 136.798759) (end 263.885119 136.798759) (width 0.254) (layer B.Cu) (net 61)) + (via (at 127.55372 136.76376) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 61)) + (segment (start 123.8631 133.07314) (end 127.55372 136.76376) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 127.55372 136.76376) (end 130.37058 139.58062) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 226.08032 136.76376) (end 226.115319 136.798759) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 223.37776 136.69772) (end 223.31172 136.76376) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 223.37776 134.0612) (end 223.37776 136.69772) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 127.55372 136.76376) (end 223.31172 136.76376) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 223.31172 136.76376) (end 226.08032 136.76376) (width 0.254) (layer B.Cu) (net 61)) + (segment (start 223.97401 133.46495) (end 223.777759 133.661201) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 223.777759 133.661201) (end 223.37776 134.0612) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 223.97401 125.986442) (end 223.97401 133.46495) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 223.94861 125.961042) (end 223.97401 125.986442) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 223.94861 88.71139) (end 223.94861 125.961042) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 221.438374 86.201154) (end 223.94861 88.71139) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 300.7106 166.3954) (end 300.7106 166.4208) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 313.72048 153.38552) (end 300.7106 166.3954) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 313.72048 136.52443) (end 313.72048 153.38552) (width 0.254) (layer F.Cu) (net 61)) + (segment (start 363.84738 84.1883) (end 363.84738 86.1568) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 362.00842 82.34934) (end 363.84738 84.1883) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 344.75166 85.05708) (end 344.75166 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 344.79738 85.1028) (end 344.75166 85.05708) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 344.79738 86.1568) (end 344.79738 85.1028) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 344.75166 82.34934) (end 362.00842 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 306.69738 84.93516) (end 306.72278 84.90976) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 306.72278 82.34934) (end 325.73722 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 287.73628 82.34934) (end 306.72278 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 249.55246 82.34934) (end 287.73628 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 258.79298 103.98516) (end 251.98324 97.17542) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 258.79298 105.03916) (end 258.79298 103.98516) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 249.54738 87.04316) (end 249.54738 85.98916) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 251.98324 89.47902) (end 249.54738 87.04316) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 251.98324 97.17542) (end 251.98324 89.47902) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 325.74738 85.98916) (end 325.74738 84.93516) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 325.74738 84.93516) (end 325.73722 84.925) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 325.73722 84.925) (end 325.73722 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 306.72278 84.90976) (end 306.72278 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 306.69738 85.98916) (end 306.69738 84.93516) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 287.64738 85.98916) (end 287.64738 84.93516) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 249.54738 85.98916) (end 249.54738 84.93516) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 249.54738 84.93516) (end 249.55246 84.93008) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 287.64738 84.93516) (end 287.73628 84.84626) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 287.73628 84.84626) (end 287.73628 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 249.55246 84.93008) (end 249.55246 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 230.49738 83.59648) (end 230.49738 85.98916) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 231.74452 82.34934) (end 230.49738 83.59648) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 249.55246 82.34934) (end 231.74452 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (via (at 327.51014 82.34934) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 62)) + (segment (start 325.73722 82.34934) (end 327.51014 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 327.51014 82.34934) (end 344.75166 82.34934) (width 0.254) (layer B.Cu) (net 62)) + (segment (start 327.51014 113.08334) (end 337.966019 123.539219) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 337.966019 133.107951) (end 338.020011 133.161943) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 338.020011 133.161943) (end 338.020011 151.971389) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 327.51014 82.34934) (end 327.51014 113.08334) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 338.020011 151.971389) (end 324.420599 165.570801) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 324.420599 165.570801) (end 323.5706 166.4208) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 337.966019 123.539219) (end 337.966019 133.107951) (width 0.254) (layer F.Cu) (net 62)) + (segment (start 139.89558 142.08516) (end 142.70492 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 139.89558 143.13916) (end 139.89558 142.08516) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 235.18368 142.04706) (end 235.18368 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 235.14558 142.08516) (end 235.18368 142.04706) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 235.14558 143.13916) (end 235.14558 142.08516) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 235.18368 139.27582) (end 252.25248 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 216.09558 139.49172) (end 216.31148 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 216.09558 143.13916) (end 216.09558 139.49172) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 216.31148 139.27582) (end 235.18368 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 197.04558 139.44346) (end 197.04558 143.13916) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 197.21322 139.27582) (end 197.04558 139.44346) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 197.21322 139.27582) (end 216.31148 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 177.99558 139.32408) (end 177.99558 143.13916) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 177.94732 139.27582) (end 177.99558 139.32408) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 177.94732 139.27582) (end 197.21322 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 158.94558 139.34694) (end 158.94558 143.13916) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 159.0167 139.27582) (end 158.94558 139.34694) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 142.70492 139.27582) (end 159.0167 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 159.0167 139.27582) (end 177.94732 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (via (at 354.50018 137.16762) (size 0.8128) (drill 0.4064) (layers F.Cu B.Cu) (net 63)) + (segment (start 355.703481 135.964319) (end 355.703481 122.725839) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 354.50018 137.16762) (end 355.703481 135.964319) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 355.703481 122.725839) (end 362.09478 116.33454) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 363.68482 106.09316) (end 363.68482 105.03916) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 362.09478 107.6832) (end 363.68482 106.09316) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 362.09478 116.33454) (end 362.09478 107.6832) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 354.416369 137.251431) (end 354.50018 137.16762) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 282.646129 137.251431) (end 354.416369 137.251431) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 252.25248 139.27582) (end 280.62174 139.27582) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 280.62174 139.27582) (end 282.646129 137.251431) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 254.19558 139.3063) (end 254.19558 143.13916) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 254.20828 139.2936) (end 254.19558 139.3063) (width 0.254) (layer B.Cu) (net 63)) + (segment (start 177.99558 142.08516) (end 177.99558 143.13916) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 172.15358 136.24316) (end 177.99558 142.08516) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 172.15358 130.50012) (end 172.15358 136.24316) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 170.50004 128.84658) (end 172.15358 130.50012) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 170.50004 123.23826) (end 170.50004 128.84658) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 171.68622 93.993698) (end 169.80662 95.873298) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 169.80662 95.873298) (end 169.80662 102.82936) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 169.80662 102.82936) (end 166.39286 106.24312) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 166.39286 106.24312) (end 166.39286 119.13108) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 166.39286 119.13108) (end 170.50004 123.23826) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 352.679 145.9484) (end 354.50018 144.12722) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 354.50018 144.12722) (end 354.50018 137.16762) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 349.123 155.575) (end 352.679 152.019) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 352.679 152.019) (end 352.679 145.9484) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 344.17 155.575) (end 349.123 155.575) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 333.7306 166.0144) (end 344.17 155.575) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 333.7306 166.4208) (end 333.7306 166.0144) (width 0.254) (layer F.Cu) (net 63)) + (segment (start 360.49966 151.01316) (end 360.7308 151.2443) (width 0.254) (layer B.Cu) (net 72)) + (segment (start 349.52178 151.01316) (end 360.49966 151.01316) (width 0.254) (layer B.Cu) (net 72)) + (segment (start 339.058114 151.559159) (end 339.858113 150.75916) (width 0.254) (layer B.Cu) (net 73)) + (segment (start 338.486514 152.130759) (end 339.058114 151.559159) (width 0.254) (layer B.Cu) (net 73)) + (segment (start 331.589379 152.130759) (end 338.486514 152.130759) (width 0.254) (layer B.Cu) (net 73)) + (segment (start 330.47178 151.01316) (end 331.589379 152.130759) (width 0.254) (layer B.Cu) (net 73)) + (segment (start 363.76102 93.86316) (end 363.84738 93.7768) (width 0.254) (layer B.Cu) (net 74)) + (segment (start 354.32238 93.86316) (end 363.76102 93.86316) (width 0.254) (layer B.Cu) (net 74)) + (segment (start 358.9274 131.96316) (end 359.1814 131.70916) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 349.44558 131.96316) (end 358.9274 131.96316) (width 0.254) (layer B.Cu) (net 75)) + (segment (start 182.33898 112.91316) (end 182.59298 112.65916) (width 0.254) (layer B.Cu) (net 76)) + (segment (start 173.06798 112.91316) (end 182.33898 112.91316) (width 0.254) (layer B.Cu) (net 76)) + (segment (start 163.28898 112.91316) (end 163.54298 112.65916) (width 0.254) (layer B.Cu) (net 77)) + (segment (start 154.01798 112.91316) (end 163.28898 112.91316) (width 0.254) (layer B.Cu) (net 77)) + (segment (start 277.58898 112.91316) (end 277.84298 112.65916) (width 0.254) (layer B.Cu) (net 78)) + (segment (start 268.31798 112.91316) (end 277.58898 112.91316) (width 0.254) (layer B.Cu) (net 78)) + (segment (start 253.395581 151.559159) (end 254.19558 150.75916) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 252.823981 152.130759) (end 253.395581 151.559159) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 245.788179 152.130759) (end 252.823981 152.130759) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 244.67058 151.01316) (end 245.788179 152.130759) (width 0.254) (layer B.Cu) (net 79)) + (segment (start 244.41658 131.96316) (end 244.67058 131.70916) (width 0.254) (layer B.Cu) (net 80)) + (segment (start 235.14558 131.96316) (end 244.41658 131.96316) (width 0.254) (layer B.Cu) (net 80)) + (segment (start 99.14128 151.01316) (end 99.39528 150.75916) (width 0.254) (layer B.Cu) (net 81)) + (segment (start 87.46998 151.01316) (end 99.14128 151.01316) (width 0.254) (layer B.Cu) (net 81)) + (segment (start 294.44188 151.01316) (end 294.69588 150.75916) (width 0.254) (layer B.Cu) (net 82)) + (segment (start 282.77058 151.01316) (end 294.44188 151.01316) (width 0.254) (layer B.Cu) (net 82)) + (segment (start 84.01558 171.07916) (end 89.252508 171.07916) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 304.940601 169.810799) (end 305.7906 168.9608) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 182.458458 166.16999) (end 190.129257 173.840789) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 219.358278 173.840788) (end 227.032266 166.1668) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 299.0596 171.8056) (end 302.9458 171.8056) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 227.032266 166.1668) (end 293.4208 166.1668) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 94.161678 166.16999) (end 182.458458 166.16999) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 293.4208 166.1668) (end 299.0596 171.8056) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 89.252508 171.07916) (end 94.161678 166.16999) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 190.129257 173.840789) (end 219.358278 173.840788) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 302.9458 171.8056) (end 304.940601 169.810799) (width 0.254) (layer B.Cu) (net 83)) + (segment (start 227.2792 166.624) (end 293.0144 166.624) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 304.5206 172.7708) (end 308.3306 168.9608) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 219.6084 174.2948) (end 227.2792 166.624) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 182.2704 166.624) (end 189.9412 174.2948) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 299.1612 172.7708) (end 304.5206 172.7708) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 94.3864 166.624) (end 182.2704 166.624) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 88.3412 172.6692) (end 94.3864 166.624) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 83.06562 172.6692) (end 88.3412 172.6692) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 293.0144 166.624) (end 299.1612 172.7708) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 81.47558 171.07916) (end 83.06562 172.6692) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 189.9412 174.2948) (end 219.6084 174.2948) (width 0.254) (layer B.Cu) (net 84)) + (segment (start 295.148 126.68758) (end 295.148 131.133132) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 298.904011 170.888011) (end 299.72 171.704) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 308.1274 171.704) (end 310.020601 169.810799) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 295.148 131.133132) (end 298.904011 134.889143) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 292.29558 123.83516) (end 295.148 126.68758) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 299.72 171.704) (end 308.1274 171.704) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 298.904011 134.889143) (end 298.904011 170.888011) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 310.020601 169.810799) (end 310.8706 168.9608) (width 0.254) (layer F.Cu) (net 85)) + (segment (start 309.9054 172.466) (end 313.4106 168.9608) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 298.45 171.196) (end 299.72 172.466) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 298.45 135.0772) (end 298.45 171.196) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 295.0972 131.7244) (end 298.45 135.0772) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 292.774989 131.7244) (end 295.0972 131.7244) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 292.774989 131.907739) (end 292.774989 131.7244) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 299.72 172.466) (end 309.9054 172.466) (width 0.254) (layer F.Cu) (net 86)) + (segment (start 315.9506 169.1894) (end 315.9506 168.9608) (width 0.254) (layer F.Cu) (net 87)) + (segment (start 299.531943 172.92001) (end 312.21999 172.92001) (width 0.254) (layer F.Cu) (net 87)) + (segment (start 312.21999 172.92001) (end 315.9506 169.1894) (width 0.254) (layer F.Cu) (net 87)) + (segment (start 297.99599 171.384057) (end 299.531943 172.92001) (width 0.254) (layer F.Cu) (net 87)) + (segment (start 297.99599 137.40957) (end 297.99599 171.384057) (width 0.254) (layer F.Cu) (net 87)) + (segment (start 293.56558 132.97916) (end 297.99599 137.40957) (width 0.254) (layer F.Cu) (net 87)) + (segment (start 314.07738 173.37402) (end 318.4906 168.9608) (width 0.254) (layer F.Cu) (net 88)) + (segment (start 299.343886 173.37402) (end 314.07738 173.37402) (width 0.254) (layer F.Cu) (net 88)) + (segment (start 297.54198 139.49556) (end 297.54198 171.572114) (width 0.254) (layer F.Cu) (net 88)) + (segment (start 297.54198 171.572114) (end 299.343886 173.37402) (width 0.254) (layer F.Cu) (net 88)) + (segment (start 291.02558 132.97916) (end 297.54198 139.49556) (width 0.254) (layer F.Cu) (net 88)) + (segment (start 322.326 167.6654) (end 321.880599 168.110801) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 322.326 165.354) (end 322.326 167.6654) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 337.566 150.114) (end 322.326 165.354) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 321.880599 168.110801) (end 321.0306 168.9608) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 337.566 133.35) (end 337.566 150.114) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 333.756 129.54) (end 337.566 133.35) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 333.756 127.19558) (end 333.756 129.54) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 330.39558 123.83516) (end 333.756 127.19558) (width 0.254) (layer F.Cu) (net 89)) + (segment (start 319.786 165.735) (end 337.058 148.463) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 320.548 170.688) (end 319.786 169.926) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 330.594159 132.188569) (end 330.39558 132.188569) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 337.058 148.463) (end 337.058 138.65241) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 323.045481 170.688) (end 320.548 170.688) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 323.5706 170.162881) (end 323.045481 170.688) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 319.786 169.926) (end 319.786 165.735) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 337.058 138.65241) (end 330.594159 132.188569) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 323.5706 168.9608) (end 323.5706 170.162881) (width 0.254) (layer F.Cu) (net 90)) + (segment (start 364.18201 158.049057) (end 347.660057 174.57101) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 331.72081 174.57101) (end 326.960599 169.810799) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 364.18201 121.731943) (end 364.18201 158.049057) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 326.960599 169.810799) (end 326.1106 168.9608) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 360.233057 117.78299) (end 364.18201 121.731943) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 341.091035 117.78299) (end 360.233057 117.78299) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 347.660057 174.57101) (end 331.72081 174.57101) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 337.237205 113.92916) (end 341.091035 117.78299) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 336.33918 113.92916) (end 337.237205 113.92916) (width 0.254) (layer B.Cu) (net 91)) + (segment (start 333.79918 113.92916) (end 338.10702 118.237) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 338.10702 118.237) (end 360.045 118.237) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 360.045 118.237) (end 363.728 121.92) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 363.728 121.92) (end 363.728 157.861) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 363.728 157.861) (end 347.472 174.117) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 333.8068 174.117) (end 328.6506 168.9608) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 347.472 174.117) (end 333.8068 174.117) (width 0.254) (layer B.Cu) (net 92)) + (segment (start 190.505371 172.932767) (end 218.982163 172.932767) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 218.982163 172.932767) (end 226.656152 165.258778) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 93.0402 165.227) (end 182.799604 165.227) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 297.008579 165.258779) (end 299.860601 168.110801) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 82.74558 161.99866) (end 83.863179 163.116259) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 90.929459 163.116259) (end 93.0402 165.227) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 182.799604 165.227) (end 190.505371 172.932767) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 83.863179 163.116259) (end 90.929459 163.116259) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 226.656152 165.258778) (end 297.008579 165.258779) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 299.860601 168.110801) (end 300.7106 168.9608) (width 0.254) (layer B.Cu) (net 97)) + (segment (start 302.400601 169.810799) (end 303.2506 168.9608) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 182.611547 165.681011) (end 190.317314 173.386778) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 89.68994 169.99966) (end 94.008589 165.681011) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 301.2694 170.942) (end 302.400601 169.810799) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 82.74558 169.99966) (end 89.68994 169.99966) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 226.844209 165.712789) (end 293.830389 165.712789) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 219.17022 173.386778) (end 226.844209 165.712789) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 293.830389 165.712789) (end 299.0596 170.942) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 94.008589 165.681011) (end 182.611547 165.681011) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 190.317314 173.386778) (end 219.17022 173.386778) (width 0.254) (layer B.Cu) (net 98)) + (segment (start 299.0596 170.942) (end 301.2694 170.942) (width 0.254) (layer B.Cu) (net 98)) + +) diff --git a/hardware/keyboard-classic/kbd-classic.pro b/hardware/keyboard-classic/kbd-classic.pro new file mode 100644 index 0000000..152769c --- /dev/null +++ b/hardware/keyboard-classic/kbd-classic.pro @@ -0,0 +1,33 @@ +update=22/05/2015 07:44:53 +version=1 +last_client=kicad +[general] +version=1 +RootSch= +BoardNm= +[pcbnew] +version=1 +LastNetListRead= +UseCmpFile=1 +PadDrill=0.600000000000 +PadDrillOvalY=0.600000000000 +PadSizeH=1.500000000000 +PadSizeV=1.500000000000 +PcbTextSizeV=1.500000000000 +PcbTextSizeH=1.500000000000 +PcbTextThickness=0.300000000000 +ModuleTextSizeV=1.000000000000 +ModuleTextSizeH=1.000000000000 +ModuleTextSizeThickness=0.150000000000 +SolderMaskClearance=0.000000000000 +SolderMaskMinWidth=0.000000000000 +DrawSegmentWidth=0.200000000000 +BoardOutlineThickness=0.100000000000 +ModuleOutlineThickness=0.150000000000 +[cvpcb] +version=1 +NetIExt=net +[eeschema] +version=1 +LibDir= +[eeschema/libraries] diff --git a/hardware/keyboard-classic/kbd-classic.sch b/hardware/keyboard-classic/kbd-classic.sch new file mode 100644 index 0000000..b6ac9ba --- /dev/null +++ b/hardware/keyboard-classic/kbd-classic.sch @@ -0,0 +1,464 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr USLetter 11000 8500 +encoding utf-8 +Sheet 1 3 +Title "Universal Retro Keyboard" +Date "2019-08-25" +Rev "1.0" +Comp "OSIWeb.org" +Comment1 "Main sheet with connector" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +Text Label 2725 4300 2 50 ~ 0 +Col0 +Text Label 2725 4200 2 50 ~ 0 +Col1 +Text Label 2725 4100 2 50 ~ 0 +Col2 +Text Label 2725 4000 2 50 ~ 0 +Col3 +Text Label 2725 3900 2 50 ~ 0 +Col4 +Text Label 2725 3800 2 50 ~ 0 +Col5 +Text Label 2725 3700 2 50 ~ 0 +Col6 +Text Label 2725 3600 2 50 ~ 0 +Col7 +Text Label 2725 1800 2 50 ~ 0 +Col0 +Text Label 2725 1700 2 50 ~ 0 +Col1 +Text Label 2725 1600 2 50 ~ 0 +Col2 +Text Label 2725 1500 2 50 ~ 0 +Col3 +Text Label 2725 1400 2 50 ~ 0 +Col4 +Text Label 2725 1300 2 50 ~ 0 +Col5 +Text Label 2725 1200 2 50 ~ 0 +Col6 +Text Label 2725 4800 2 50 ~ 0 +Row0 +Text Label 2725 4700 2 50 ~ 0 +Row1 +Text Label 2725 4600 2 50 ~ 0 +Row2 +Text Label 2725 4500 2 50 ~ 0 +Row3 +Text Label 2725 2350 2 50 ~ 0 +Row4 +Text Label 2725 2250 2 50 ~ 0 +Row5 +Text Label 2725 2150 2 50 ~ 0 +Row6 +Text Label 2725 2050 2 50 ~ 0 +Row7 +$Sheet +S 775 900 1700 1900 +U 5BC3EA0A +F0 "keys2" 60 +F1 "keys2.sch" 60 +F2 "Col0" I R 2475 1800 50 +F3 "Col1" I R 2475 1700 50 +F4 "Col2" I R 2475 1600 50 +F5 "Col3" I R 2475 1500 50 +F6 "Col4" I R 2475 1400 50 +F7 "Col5" I R 2475 1300 50 +F8 "Col6" I R 2475 1200 50 +F9 "Col7" I R 2475 1100 50 +F10 "Row4" I R 2475 2350 50 +F11 "Row5" I R 2475 2250 50 +F12 "Row6" I R 2475 2150 50 +F13 "Row7" I R 2475 2050 50 +$EndSheet +$Sheet +S 775 3400 1700 1900 +U 5BC3E99D +F0 "keys1" 60 +F1 "keys1.sch" 60 +F2 "Col0" I R 2475 4300 50 +F3 "Col1" I R 2475 4200 50 +F4 "Col2" I R 2475 4100 50 +F5 "Col3" I R 2475 4000 50 +F6 "Col4" I R 2475 3900 50 +F7 "Col5" I R 2475 3800 50 +F8 "Col6" I R 2475 3700 50 +F9 "Col7" I R 2475 3600 50 +F10 "Row0" I R 2475 4800 50 +F11 "Row1" I R 2475 4700 50 +F12 "Row2" I R 2475 4600 50 +F13 "Row3" I R 2475 4500 50 +$EndSheet +Text Notes 580 7070 0 79 ~ 0 +For OSI keyboards:\n“@“ (AT symbol) maps to “Shift Lock”, R0 C0\n“[“ (left bracket) maps to “Rub Out”, R6 C2\n“\” maps to “Repeat”, R0 C7\n“Rubout” maps to “Break”, \nDNP: “]” (right bracket), “^”, “Here is”, “Break”, “Repeat”, “Clear” +Text Notes 600 7905 0 79 ~ 0 +For Apple II keyboards:\n"@" (AT symbol) maps to "Left arrow"\n"\" maps to "Right Arrow"\n"[" (left bracket) maps to "Reset"\n\nDNP: "]" (right bracket), "^", "Here is", "Rub", "Break", "Repeat", "Clear" +$Comp +L Switch:SW_Push_LED SW9 +U 1 1 5DF7D21E +P 9250 2875 +F 0 "SW9" V 9170 3115 50 0000 C CNN +F 1 "Caps_Lock" V 9000 2875 50 0000 C CNN +F 2 "unikbd:Key_MX_LED" H 9250 3175 50 0001 C CNN +F 3 "~" H 9250 3175 50 0001 C CNN + 1 9250 2875 + 0 1 -1 0 +$EndComp +$Comp +L Switch:SW_Push_LED SW32 +U 1 1 5DF7DA75 +P 9425 1850 +F 0 "SW32" H 9150 2025 50 0000 C CNN +F 1 "@ (OSI shift lock)" H 9300 2125 50 0000 C CNN +F 2 "unikbd:Key_MX_LED" H 9425 2150 50 0001 C CNN +F 3 "~" H 9425 2150 50 0001 C CNN + 1 9425 1850 + -1 0 0 -1 +$EndComp +NoConn ~ 7900 2850 +NoConn ~ 7900 2950 +NoConn ~ 7900 3050 +NoConn ~ 7900 3150 +$Comp +L Switch:SW_Push_LED SW61 +U 1 1 5DF0C543 +P 8730 1450 +F 0 "SW61" H 8600 1660 50 0000 C CNN +F 1 "Power light" H 8760 1750 50 0000 C CNN +F 2 "unikbd:Key_MX_LED" H 8730 1750 50 0001 C CNN +F 3 "~" H 8730 1750 50 0001 C CNN + 1 8730 1450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 8400 1450 8530 1450 +Wire Wire Line + 9000 1550 8400 1550 +Wire Wire Line + 9000 1450 9000 1550 +Wire Wire Line + 8930 1450 9000 1450 +Wire Wire Line + 8990 1350 8930 1350 +Wire Wire Line + 8990 1070 8990 1350 +Wire Wire Line + 8400 1070 8990 1070 +Wire Wire Line + 8400 1250 8400 1070 +Wire Wire Line + 8530 1350 8400 1350 +NoConn ~ 8400 3150 +NoConn ~ 8400 3050 +NoConn ~ 8400 2950 +NoConn ~ 8400 2850 +NoConn ~ 8400 2750 +NoConn ~ 8400 2650 +$Comp +L Connector_Generic:Conn_02x20_Odd_Even J1 +U 1 1 5D1E4169 +P 8100 2150 +F 0 "J1" H 8150 3267 50 0000 C CNN +F 1 "Controller" H 8150 3176 50 0000 C CNN +F 2 "Connector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_Vertical" H 8100 2150 50 0001 C CNN +F 3 "~" H 8100 2150 50 0001 C CNN + 1 8100 2150 + 1 0 0 -1 +$EndComp +Text Label 2725 1100 2 50 ~ 0 +Col7 +Text Label 7850 1250 2 50 ~ 0 +Col7 +Text Label 7850 1350 2 50 ~ 0 +Col6 +Text Label 7850 1550 2 50 ~ 0 +Col4 +Text Label 7850 1450 2 50 ~ 0 +Col5 +Text Label 7850 1750 2 50 ~ 0 +Col2 +Text Label 7850 1650 2 50 ~ 0 +Col3 +Text Label 7850 1850 2 50 ~ 0 +Col1 +Text Label 7850 1950 2 50 ~ 0 +Col0 +Text Label 7850 2050 2 50 ~ 0 +Row7 +Text Label 7850 2150 2 50 ~ 0 +Row6 +Text Label 7850 2250 2 50 ~ 0 +Row5 +Text Label 7850 2350 2 50 ~ 0 +Row4 +Text Label 7850 2450 2 50 ~ 0 +Row3 +Text Label 7850 2550 2 50 ~ 0 +Row2 +Text Label 7850 2650 2 50 ~ 0 +Row1 +Text Label 7850 2750 2 50 ~ 0 +Row0 +Entry Wire Line + 2825 1800 2925 1700 +Entry Wire Line + 2825 1700 2925 1600 +Entry Wire Line + 2825 1600 2925 1500 +Entry Wire Line + 2825 1500 2925 1400 +Entry Wire Line + 2825 1400 2925 1300 +Entry Wire Line + 2825 1300 2925 1200 +Entry Wire Line + 2825 1200 2925 1100 +Entry Wire Line + 2825 1100 2925 1000 +Entry Wire Line + 2825 2350 2925 2250 +Entry Wire Line + 2825 2250 2925 2150 +Entry Wire Line + 2825 2150 2925 2050 +Entry Wire Line + 2825 2050 2925 1950 +Entry Wire Line + 2825 4300 2925 4200 +Entry Wire Line + 2825 4200 2925 4100 +Entry Wire Line + 2825 4100 2925 4000 +Entry Wire Line + 2825 4000 2925 3900 +Entry Wire Line + 2825 3900 2925 3800 +Entry Wire Line + 2825 3800 2925 3700 +Entry Wire Line + 2825 3700 2925 3600 +Entry Wire Line + 2825 3600 2925 3500 +Entry Wire Line + 2825 4800 2925 4700 +Entry Wire Line + 2825 4700 2925 4600 +Entry Wire Line + 2825 4600 2925 4500 +Entry Wire Line + 2825 4500 2925 4400 +Entry Wire Line + 7500 2750 7400 2650 +Entry Wire Line + 7500 2650 7400 2550 +Entry Wire Line + 7500 2550 7400 2450 +Entry Wire Line + 7500 2450 7400 2350 +Entry Wire Line + 7500 2350 7400 2250 +Entry Wire Line + 7500 2250 7400 2150 +Entry Wire Line + 7500 2150 7400 2050 +Entry Wire Line + 7500 2050 7400 1950 +Entry Wire Line + 7500 1950 7400 1850 +Entry Wire Line + 7500 1850 7400 1750 +Entry Wire Line + 7500 1750 7400 1650 +Entry Wire Line + 7500 1650 7400 1550 +Entry Wire Line + 7500 1550 7400 1450 +Entry Wire Line + 7500 1450 7400 1350 +Entry Wire Line + 7500 1350 7400 1250 +Entry Wire Line + 7500 1250 7400 1150 +Wire Wire Line + 7900 1250 7500 1250 +Wire Wire Line + 7500 1350 7900 1350 +Wire Wire Line + 7900 1450 7500 1450 +Wire Wire Line + 7900 1550 7500 1550 +Wire Wire Line + 7900 1650 7500 1650 +Wire Wire Line + 7500 1750 7900 1750 +Wire Wire Line + 7900 1850 7500 1850 +Wire Wire Line + 7500 1950 7900 1950 +Wire Wire Line + 7900 2050 7500 2050 +Wire Wire Line + 7500 2150 7900 2150 +Wire Wire Line + 7900 2250 7500 2250 +Wire Wire Line + 7500 2350 7900 2350 +Wire Wire Line + 7900 2450 7500 2450 +Wire Wire Line + 7500 2550 7900 2550 +Wire Wire Line + 7500 2650 7900 2650 +Wire Wire Line + 7500 2750 7900 2750 +Wire Wire Line + 2475 1100 2825 1100 +Wire Wire Line + 2825 1200 2475 1200 +Wire Wire Line + 2475 1300 2825 1300 +Wire Wire Line + 2825 1400 2475 1400 +Wire Wire Line + 2475 1500 2825 1500 +Wire Wire Line + 2825 1600 2475 1600 +Wire Wire Line + 2475 1700 2825 1700 +Wire Wire Line + 2825 1800 2475 1800 +Wire Wire Line + 2475 3600 2825 3600 +Wire Wire Line + 2825 3700 2475 3700 +Wire Wire Line + 2475 3800 2825 3800 +Wire Wire Line + 2825 3900 2475 3900 +Wire Wire Line + 2475 4000 2825 4000 +Wire Wire Line + 2825 4100 2475 4100 +Wire Wire Line + 2475 4200 2825 4200 +Wire Wire Line + 2825 4300 2475 4300 +Wire Wire Line + 2475 2050 2825 2050 +Wire Wire Line + 2825 2150 2475 2150 +Wire Wire Line + 2475 2250 2825 2250 +Wire Wire Line + 2825 2350 2475 2350 +Wire Wire Line + 2475 4500 2825 4500 +Wire Wire Line + 2825 4600 2475 4600 +Wire Wire Line + 2475 4700 2825 4700 +Wire Wire Line + 2825 4800 2475 4800 +Wire Bus Line + 2925 700 7400 700 +Wire Wire Line + 8400 2250 9250 2250 +Wire Wire Line + 9250 2250 9250 2675 +Wire Wire Line + 9250 3075 9100 3075 +Wire Wire Line + 9100 3075 9100 2350 +Wire Wire Line + 9100 2350 8400 2350 +Entry Wire Line + 10200 2670 10300 2570 +Entry Wire Line + 10200 3075 10300 2975 +Wire Bus Line + 10300 700 7400 700 +Connection ~ 7400 700 +Text Label 9850 2670 2 50 ~ 0 +Row5 +Text Label 9850 3075 2 50 ~ 0 +Col2 +$Comp +L Diode:1N4148 D? +U 1 1 5DFE048B +P 9550 2670 +AR Path="/5BC3E99D/5DFE048B" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5DFE048B" Ref="D?" Part="1" +AR Path="/5DFE048B" Ref="D10" Part="1" +F 0 "D10" H 9596 2591 50 0000 R CNN +F 1 "1N4148" H 9625 2770 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9550 2495 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 9550 2670 50 0001 C CNN + 1 9550 2670 + -1 0 0 1 +$EndComp +Wire Wire Line + 10200 2670 9700 2670 +Wire Wire Line + 8400 2050 9700 2050 +$Comp +L Switch:SW_Push SW? +U 1 1 5D6C3751 +P 9900 2050 +AR Path="/5BC3E99D/5D6C3751" Ref="SW?" Part="1" +AR Path="/5D6C3751" Ref="SW34" Part="1" +F 0 "SW34" H 9650 2100 50 0000 C CNN +F 1 "Rubout (OSI Break)" H 9770 2000 50 0000 C CNN +F 2 "unikbd:Key_MX" H 9900 2250 50 0001 C CNN +F 3 "" H 9900 2250 50 0001 C CNN + 1 9900 2050 + 1 0 0 -1 +$EndComp +Wire Wire Line + 9225 1750 8400 1750 +Wire Wire Line + 9625 1750 9900 1750 +Wire Wire Line + 9900 1750 9900 1525 +Wire Wire Line + 9900 1525 9175 1525 +Wire Wire Line + 9175 1525 9175 1650 +Wire Wire Line + 9175 1650 8400 1650 +Wire Wire Line + 8400 1850 9225 1850 +Wire Wire Line + 9625 1850 9775 1850 +Wire Wire Line + 9775 1850 9775 1950 +Wire Wire Line + 9775 1950 8400 1950 +Wire Wire Line + 10100 2050 10150 2050 +Wire Wire Line + 10150 2050 10150 2150 +Wire Wire Line + 10150 2150 8400 2150 +NoConn ~ 8400 2550 +NoConn ~ 8400 2450 +Text Notes 580 6180 0 79 ~ 0 +For Classic ASCII keyboards:\n“@“ (AT symbol) is mapped to R7 C0\n“Rubout” is mapped to R1 C0\n“Power Button” is mapped to R0 C0\n +Wire Wire Line + 9350 3075 10200 3075 +Wire Wire Line + 9400 2670 9350 2670 +Wire Wire Line + 9350 2670 9350 2675 +Wire Bus Line + 10300 700 10300 2975 +Wire Bus Line + 7400 700 7400 2650 +Wire Bus Line + 2925 700 2925 4700 +$EndSCHEMATC diff --git a/hardware/keyboard-classic/keys1.sch b/hardware/keyboard-classic/keys1.sch new file mode 100644 index 0000000..efe7b79 --- /dev/null +++ b/hardware/keyboard-classic/keys1.sch @@ -0,0 +1,866 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 3 3 +Title "Universal Retro Keyboard" +Date "2019-08-25" +Rev "1.0" +Comp "OSIWeb.org" +Comment1 "Key Matrix part 2" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +Text HLabel 1450 4500 0 60 Input ~ 0 +Row1 +Text HLabel 1450 5400 0 60 Input ~ 0 +Row2 +Text HLabel 1450 6300 0 60 Input ~ 0 +Row3 +Text HLabel 1450 3600 0 60 Input ~ 0 +Row0 +Text HLabel 1450 1100 0 60 Input ~ 0 +Col7 +Text HLabel 1450 1300 0 60 Input ~ 0 +Col6 +Text HLabel 1450 1500 0 60 Input ~ 0 +Col5 +Text HLabel 1450 1700 0 60 Input ~ 0 +Col4 +Text HLabel 1450 1900 0 60 Input ~ 0 +Col3 +Text HLabel 1450 2100 0 60 Input ~ 0 +Col2 +Text HLabel 1450 2300 0 60 Input ~ 0 +Col1 +Text HLabel 1450 2500 0 60 Input ~ 0 +Col0 +$Comp +L Switch:SW_Push SW35 +U 1 1 5BC3FD26 +P 3800 3200 +F 0 "SW35" H 3800 3485 50 0000 C CNN +F 1 "R_Shift" H 3800 3394 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3800 3400 50 0001 C CNN +F 3 "" H 3800 3400 50 0001 C CNN + 1 3800 3200 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW39 +U 1 1 5BC3FE57 +P 4600 3200 +F 0 "SW39" H 4600 3485 50 0000 C CNN +F 1 "L_Shift" H 4600 3394 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4600 3400 50 0001 C CNN +F 3 "" H 4600 3400 50 0001 C CNN + 1 4600 3200 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW49 +U 1 1 5BC3FF69 +P 7000 3200 +F 0 "SW49" H 7000 3485 50 0000 C CNN +F 1 "ESC" H 7000 3394 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7000 3400 50 0001 C CNN +F 3 "" H 7000 3400 50 0001 C CNN + 1 7000 3200 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW57 +U 1 1 5BC3FF70 +P 8600 3200 +F 0 "SW57" H 8600 3485 50 0000 C CNN +F 1 "Backslash" H 8600 3394 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8600 3400 50 0001 C CNN +F 3 "" H 8600 3400 50 0001 C CNN + 1 8600 3200 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW53 +U 1 1 5BC3FF77 +P 7800 3200 +F 0 "SW53" H 7800 3485 50 0000 C CNN +F 1 "CTRL" H 7800 3394 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7800 3400 50 0001 C CNN +F 3 "" H 7800 3400 50 0001 C CNN + 1 7800 3200 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D36 +U 1 1 5BC6C862 +P 4000 3450 +F 0 "D36" V 4046 3371 50 0000 R CNN +F 1 "1N4148" V 3955 3371 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4000 3275 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4000 3450 50 0001 C CNN + 1 4000 3450 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D40 +U 1 1 5BC6CA8E +P 4800 3450 +F 0 "D40" V 4846 3371 50 0000 R CNN +F 1 "1N4148" V 4755 3371 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4800 3275 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4800 3450 50 0001 C CNN + 1 4800 3450 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D50 +U 1 1 5BC6CB1B +P 7200 3450 +F 0 "D50" V 7246 3371 50 0000 R CNN +F 1 "1N4148" V 7155 3371 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7200 3275 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7200 3450 50 0001 C CNN + 1 7200 3450 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D54 +U 1 1 5BC6CB46 +P 8000 3450 +F 0 "D54" V 8046 3371 50 0000 R CNN +F 1 "1N4148" V 7955 3371 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8000 3275 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8000 3450 50 0001 C CNN + 1 8000 3450 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D58 +U 1 1 5BC6CB6F +P 8800 3450 +F 0 "D58" V 8846 3371 50 0000 R CNN +F 1 "1N4148" V 8755 3371 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8800 3275 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8800 3450 50 0001 C CNN + 1 8800 3450 + 0 -1 -1 0 +$EndComp +$Comp +L Switch:SW_Push SW36 +U 1 1 5BC6CD5D +P 3800 4100 +F 0 "SW36" H 3800 4385 50 0000 C CNN +F 1 "P" H 3800 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3800 4300 50 0001 C CNN +F 3 "" H 3800 4300 50 0001 C CNN + 1 3800 4100 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW43 +U 1 1 5BC6CD64 +P 5400 4100 +F 0 "SW43" H 5400 4385 50 0000 C CNN +F 1 "Fwd_Slash" H 5400 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5400 4300 50 0001 C CNN +F 3 "" H 5400 4300 50 0001 C CNN + 1 5400 4100 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW40 +U 1 1 5BC6CD6B +P 4600 4100 +F 0 "SW40" H 4600 4385 50 0000 C CNN +F 1 "Semicolon" H 4600 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4600 4300 50 0001 C CNN +F 3 "" H 4600 4300 50 0001 C CNN + 1 4600 4100 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW46 +U 1 1 5BC6CD72 +P 6200 4100 +F 0 "SW46" H 6200 4385 50 0000 C CNN +F 1 "SPACE" H 6200 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6200 4300 50 0001 C CNN +F 3 "" H 6200 4300 50 0001 C CNN + 1 6200 4100 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW50 +U 1 1 5BC6CD79 +P 7000 4100 +F 0 "SW50" H 7000 4385 50 0000 C CNN +F 1 "Z" H 7000 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7000 4300 50 0001 C CNN +F 3 "" H 7000 4300 50 0001 C CNN + 1 7000 4100 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW58 +U 1 1 5BC6CD80 +P 8600 4100 +F 0 "SW58" H 8600 4385 50 0000 C CNN +F 1 "Q" H 8600 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8600 4300 50 0001 C CNN +F 3 "" H 8600 4300 50 0001 C CNN + 1 8600 4100 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW54 +U 1 1 5BC6CD87 +P 7800 4100 +F 0 "SW54" H 7800 4385 50 0000 C CNN +F 1 "A" H 7800 4294 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7800 4300 50 0001 C CNN +F 3 "" H 7800 4300 50 0001 C CNN + 1 7800 4100 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D37 +U 1 1 5BC6CD8E +P 4000 4350 +F 0 "D37" V 4046 4271 50 0000 R CNN +F 1 "1N4148" V 3955 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4000 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4000 4350 50 0001 C CNN + 1 4000 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D41 +U 1 1 5BC6CD9C +P 4800 4350 +F 0 "D41" V 4846 4271 50 0000 R CNN +F 1 "1N4148" V 4755 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4800 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4800 4350 50 0001 C CNN + 1 4800 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D44 +U 1 1 5BC6CDA3 +P 5600 4350 +F 0 "D44" V 5646 4271 50 0000 R CNN +F 1 "1N4148" V 5555 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5600 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5600 4350 50 0001 C CNN + 1 5600 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D47 +U 1 1 5BC6CDAA +P 6400 4350 +F 0 "D47" V 6446 4271 50 0000 R CNN +F 1 "1N4148" V 6355 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6400 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6400 4350 50 0001 C CNN + 1 6400 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D51 +U 1 1 5BC6CDB1 +P 7200 4350 +F 0 "D51" V 7246 4271 50 0000 R CNN +F 1 "1N4148" V 7155 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7200 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7200 4350 50 0001 C CNN + 1 7200 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D55 +U 1 1 5BC6CDB8 +P 8000 4350 +F 0 "D55" V 8046 4271 50 0000 R CNN +F 1 "1N4148" V 7955 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8000 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8000 4350 50 0001 C CNN + 1 8000 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D59 +U 1 1 5BC6CDBF +P 8800 4350 +F 0 "D59" V 8846 4271 50 0000 R CNN +F 1 "1N4148" V 8755 4271 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8800 4175 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8800 4350 50 0001 C CNN + 1 8800 4350 + 0 -1 -1 0 +$EndComp +$Comp +L Switch:SW_Push SW33 +U 1 1 5BC6CED6 +P 3000 5000 +F 0 "SW33" H 3000 5285 50 0000 C CNN +F 1 "Break" H 3000 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3000 5200 50 0001 C CNN +F 3 "" H 3000 5200 50 0001 C CNN + 1 3000 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW37 +U 1 1 5BC6CEDD +P 3800 5000 +F 0 "SW37" H 3800 5285 50 0000 C CNN +F 1 "Comma" H 3800 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3800 5200 50 0001 C CNN +F 3 "" H 3800 5200 50 0001 C CNN + 1 3800 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW44 +U 1 1 5BC6CEE4 +P 5400 5000 +F 0 "SW44" H 5400 5285 50 0000 C CNN +F 1 "N" H 5400 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5400 5200 50 0001 C CNN +F 3 "" H 5400 5200 50 0001 C CNN + 1 5400 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW41 +U 1 1 5BC6CEEB +P 4600 5000 +F 0 "SW41" H 4600 5285 50 0000 C CNN +F 1 "M" H 4600 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4600 5200 50 0001 C CNN +F 3 "" H 4600 5200 50 0001 C CNN + 1 4600 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW47 +U 1 1 5BC6CEF2 +P 6200 5000 +F 0 "SW47" H 6200 5285 50 0000 C CNN +F 1 "B" H 6200 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6200 5200 50 0001 C CNN +F 3 "" H 6200 5200 50 0001 C CNN + 1 6200 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW51 +U 1 1 5BC6CEF9 +P 7000 5000 +F 0 "SW51" H 7000 5285 50 0000 C CNN +F 1 "V" H 7000 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7000 5200 50 0001 C CNN +F 3 "" H 7000 5200 50 0001 C CNN + 1 7000 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW59 +U 1 1 5BC6CF00 +P 8600 5000 +F 0 "SW59" H 8600 5285 50 0000 C CNN +F 1 "X" H 8600 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8600 5200 50 0001 C CNN +F 3 "" H 8600 5200 50 0001 C CNN + 1 8600 5000 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW55 +U 1 1 5BC6CF07 +P 7800 5000 +F 0 "SW55" H 7800 5285 50 0000 C CNN +F 1 "C" H 7800 5194 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7800 5200 50 0001 C CNN +F 3 "" H 7800 5200 50 0001 C CNN + 1 7800 5000 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D38 +U 1 1 5BC6CF0E +P 4000 5250 +F 0 "D38" V 4046 5171 50 0000 R CNN +F 1 "1N4148" V 3955 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4000 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4000 5250 50 0001 C CNN + 1 4000 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D34 +U 1 1 5BC6CF15 +P 3200 5250 +F 0 "D34" V 3246 5171 50 0000 R CNN +F 1 "1N4148" V 3155 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 3200 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 3200 5250 50 0001 C CNN + 1 3200 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D42 +U 1 1 5BC6CF1C +P 4800 5250 +F 0 "D42" V 4846 5171 50 0000 R CNN +F 1 "1N4148" V 4755 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4800 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4800 5250 50 0001 C CNN + 1 4800 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D45 +U 1 1 5BC6CF23 +P 5600 5250 +F 0 "D45" V 5646 5171 50 0000 R CNN +F 1 "1N4148" V 5555 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5600 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5600 5250 50 0001 C CNN + 1 5600 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D48 +U 1 1 5BC6CF2A +P 6400 5250 +F 0 "D48" V 6446 5171 50 0000 R CNN +F 1 "1N4148" V 6355 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6400 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6400 5250 50 0001 C CNN + 1 6400 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D52 +U 1 1 5BC6CF31 +P 7200 5250 +F 0 "D52" V 7246 5171 50 0000 R CNN +F 1 "1N4148" V 7155 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7200 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7200 5250 50 0001 C CNN + 1 7200 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D56 +U 1 1 5BC6CF38 +P 8000 5250 +F 0 "D56" V 8046 5171 50 0000 R CNN +F 1 "1N4148" V 7955 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8000 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8000 5250 50 0001 C CNN + 1 8000 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D60 +U 1 1 5BC6CF3F +P 8800 5250 +F 0 "D60" V 8846 5171 50 0000 R CNN +F 1 "1N4148" V 8755 5171 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8800 5075 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8800 5250 50 0001 C CNN + 1 8800 5250 + 0 -1 -1 0 +$EndComp +$Comp +L Switch:SW_Push SW38 +U 1 1 5BC6D0AD +P 3800 5900 +F 0 "SW38" H 3800 6185 50 0000 C CNN +F 1 "K" H 3800 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3800 6100 50 0001 C CNN +F 3 "" H 3800 6100 50 0001 C CNN + 1 3800 5900 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW45 +U 1 1 5BC6D0B4 +P 5400 5900 +F 0 "SW45" H 5400 6185 50 0000 C CNN +F 1 "H" H 5400 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5400 6100 50 0001 C CNN +F 3 "" H 5400 6100 50 0001 C CNN + 1 5400 5900 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW42 +U 1 1 5BC6D0BB +P 4600 5900 +F 0 "SW42" H 4600 6185 50 0000 C CNN +F 1 "J" H 4600 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4600 6100 50 0001 C CNN +F 3 "" H 4600 6100 50 0001 C CNN + 1 4600 5900 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW48 +U 1 1 5BC6D0C2 +P 6200 5900 +F 0 "SW48" H 6200 6185 50 0000 C CNN +F 1 "G" H 6200 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6200 6100 50 0001 C CNN +F 3 "" H 6200 6100 50 0001 C CNN + 1 6200 5900 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW52 +U 1 1 5BC6D0C9 +P 7000 5900 +F 0 "SW52" H 7000 6185 50 0000 C CNN +F 1 "F" H 7000 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7000 6100 50 0001 C CNN +F 3 "" H 7000 6100 50 0001 C CNN + 1 7000 5900 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW60 +U 1 1 5BC6D0D0 +P 8600 5900 +F 0 "SW60" H 8600 6185 50 0000 C CNN +F 1 "S" H 8600 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8600 6100 50 0001 C CNN +F 3 "" H 8600 6100 50 0001 C CNN + 1 8600 5900 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW56 +U 1 1 5BC6D0D7 +P 7800 5900 +F 0 "SW56" H 7800 6185 50 0000 C CNN +F 1 "D" H 7800 6094 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7800 6100 50 0001 C CNN +F 3 "" H 7800 6100 50 0001 C CNN + 1 7800 5900 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D39 +U 1 1 5BC6D0DE +P 4000 6150 +F 0 "D39" V 4046 6071 50 0000 R CNN +F 1 "1N4148" V 3955 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4000 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4000 6150 50 0001 C CNN + 1 4000 6150 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D43 +U 1 1 5BC6D0EC +P 4800 6150 +F 0 "D43" V 4846 6071 50 0000 R CNN +F 1 "1N4148" V 4755 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4800 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4800 6150 50 0001 C CNN + 1 4800 6150 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D46 +U 1 1 5BC6D0F3 +P 5600 6150 +F 0 "D46" V 5646 6071 50 0000 R CNN +F 1 "1N4148" V 5555 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5600 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5600 6150 50 0001 C CNN + 1 5600 6150 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D49 +U 1 1 5BC6D0FA +P 6400 6150 +F 0 "D49" V 6446 6071 50 0000 R CNN +F 1 "1N4148" V 6355 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6400 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6400 6150 50 0001 C CNN + 1 6400 6150 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D53 +U 1 1 5BC6D101 +P 7200 6150 +F 0 "D53" V 7246 6071 50 0000 R CNN +F 1 "1N4148" V 7155 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7200 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7200 6150 50 0001 C CNN + 1 7200 6150 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D57 +U 1 1 5BC6D108 +P 8000 6150 +F 0 "D57" V 8046 6071 50 0000 R CNN +F 1 "1N4148" V 7955 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8000 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8000 6150 50 0001 C CNN + 1 8000 6150 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D61 +U 1 1 5BC6D10F +P 8800 6150 +F 0 "D61" V 8846 6071 50 0000 R CNN +F 1 "1N4148" V 8755 6071 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8800 5975 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8800 6150 50 0001 C CNN + 1 8800 6150 + 0 -1 -1 0 +$EndComp +Connection ~ 4000 3600 +Wire Wire Line + 4000 3600 4800 3600 +Connection ~ 4800 3600 +Connection ~ 7200 3600 +Wire Wire Line + 7200 3600 8000 3600 +Connection ~ 8000 3600 +Wire Wire Line + 8000 3600 8800 3600 +Connection ~ 4000 4500 +Wire Wire Line + 4000 4500 4800 4500 +Connection ~ 4800 4500 +Wire Wire Line + 4800 4500 5600 4500 +Connection ~ 5600 4500 +Wire Wire Line + 5600 4500 6400 4500 +Connection ~ 6400 4500 +Wire Wire Line + 6400 4500 7200 4500 +Connection ~ 7200 4500 +Wire Wire Line + 7200 4500 8000 4500 +Connection ~ 8000 4500 +Wire Wire Line + 8000 4500 8800 4500 +Wire Wire Line + 3200 5400 4000 5400 +Connection ~ 4000 5400 +Wire Wire Line + 4000 5400 4800 5400 +Connection ~ 4800 5400 +Wire Wire Line + 4800 5400 5600 5400 +Connection ~ 5600 5400 +Wire Wire Line + 5600 5400 6400 5400 +Connection ~ 6400 5400 +Wire Wire Line + 6400 5400 7200 5400 +Connection ~ 7200 5400 +Wire Wire Line + 7200 5400 8000 5400 +Connection ~ 8000 5400 +Wire Wire Line + 8000 5400 8800 5400 +Connection ~ 4000 6300 +Wire Wire Line + 4000 6300 4800 6300 +Connection ~ 4800 6300 +Wire Wire Line + 4800 6300 5600 6300 +Connection ~ 5600 6300 +Wire Wire Line + 5600 6300 6400 6300 +Connection ~ 6400 6300 +Wire Wire Line + 6400 6300 7200 6300 +Connection ~ 7200 6300 +Wire Wire Line + 7200 6300 8000 6300 +Connection ~ 8000 6300 +Wire Wire Line + 8000 6300 8800 6300 +Wire Wire Line + 4000 5900 4000 6000 +Wire Wire Line + 4800 5900 4800 6000 +Wire Wire Line + 5600 5900 5600 6000 +Wire Wire Line + 6400 5900 6400 6000 +Wire Wire Line + 7200 5900 7200 6000 +Wire Wire Line + 8000 5900 8000 6000 +Wire Wire Line + 8800 6000 8800 5900 +Wire Wire Line + 8800 5000 8800 5100 +Wire Wire Line + 8000 5000 8000 5100 +Wire Wire Line + 7200 5000 7200 5100 +Wire Wire Line + 5600 5100 5600 5000 +Wire Wire Line + 6400 5100 6400 5000 +Wire Wire Line + 4800 5100 4800 5000 +Wire Wire Line + 4000 5100 4000 5000 +Wire Wire Line + 3200 5100 3200 5000 +Wire Wire Line + 4000 3200 4000 3300 +Wire Wire Line + 4000 4100 4000 4200 +Wire Wire Line + 4800 4100 4800 4200 +Wire Wire Line + 5600 4200 5600 4100 +Wire Wire Line + 6400 4200 6400 4100 +Wire Wire Line + 7200 4200 7200 4100 +Wire Wire Line + 8000 4200 8000 4100 +Wire Wire Line + 8800 4200 8800 4100 +Wire Wire Line + 4800 3300 4800 3200 +Wire Wire Line + 7200 3200 7200 3300 +Wire Wire Line + 8000 3200 8000 3300 +Wire Wire Line + 8800 3200 8800 3300 +Wire Wire Line + 1450 2500 2800 2500 +Wire Wire Line + 1450 2300 3600 2300 +Wire Wire Line + 3600 2300 3600 3200 +Connection ~ 3600 3200 +Wire Wire Line + 3600 3200 3600 4100 +Connection ~ 3600 4100 +Wire Wire Line + 3600 4100 3600 5000 +Connection ~ 3600 5000 +Wire Wire Line + 3600 5000 3600 5900 +Wire Wire Line + 1450 2100 4400 2100 +Wire Wire Line + 4400 2100 4400 3200 +Connection ~ 4400 3200 +Wire Wire Line + 4400 3200 4400 4100 +Connection ~ 4400 4100 +Wire Wire Line + 4400 4100 4400 5000 +Connection ~ 4400 5000 +Wire Wire Line + 4400 5000 4400 5900 +Wire Wire Line + 1450 1900 5200 1900 +Connection ~ 5200 4100 +Wire Wire Line + 5200 4100 5200 5000 +Connection ~ 5200 5000 +Wire Wire Line + 5200 5000 5200 5900 +Wire Wire Line + 1450 1700 6000 1700 +Connection ~ 6000 4100 +Wire Wire Line + 6000 4100 6000 5000 +Connection ~ 6000 5000 +Wire Wire Line + 6000 5000 6000 5900 +Wire Wire Line + 1450 1500 6800 1500 +Wire Wire Line + 6800 1500 6800 3200 +Connection ~ 6800 3200 +Wire Wire Line + 6800 3200 6800 4100 +Connection ~ 6800 4100 +Wire Wire Line + 6800 4100 6800 5000 +Connection ~ 6800 5000 +Wire Wire Line + 6800 5000 6800 5900 +Wire Wire Line + 1450 1300 7600 1300 +Wire Wire Line + 7600 1300 7600 3200 +Connection ~ 7600 3200 +Wire Wire Line + 7600 3200 7600 4100 +Connection ~ 7600 4100 +Wire Wire Line + 7600 4100 7600 5000 +Connection ~ 7600 5000 +Wire Wire Line + 7600 5000 7600 5900 +Wire Wire Line + 1450 1100 8400 1100 +Wire Wire Line + 8400 1100 8400 3200 +Connection ~ 8400 3200 +Wire Wire Line + 8400 3200 8400 4100 +Connection ~ 8400 4100 +Wire Wire Line + 8400 4100 8400 5000 +Connection ~ 8400 5000 +Wire Wire Line + 8400 5000 8400 5900 +Connection ~ 3200 5400 +Text Notes 1100 7100 0 50 ~ 0 +(Install either Row diodes or switch diodes. Jumper uninstalled diodes. +Text Label 2300 3600 0 50 ~ 0 +Row0_keys +Text Label 2300 4500 0 50 ~ 0 +Row1_keys +Text Label 2300 5400 0 50 ~ 0 +Row2_keys +Wire Wire Line + 5200 1900 5200 4100 +Wire Wire Line + 6000 1700 6000 4100 +Wire Wire Line + 4800 3600 7200 3600 +Text Label 2300 6300 0 50 ~ 0 +Row3_keys +Wire Wire Line + 1450 4500 4000 4500 +Wire Wire Line + 1450 5400 3200 5400 +Wire Wire Line + 2800 2500 2800 5000 +Wire Wire Line + 1450 3600 4000 3600 +Wire Wire Line + 1450 6300 4000 6300 +Text Notes 2960 4200 0 50 ~ 0 +Rubout +$EndSCHEMATC diff --git a/hardware/keyboard-classic/keys2.sch b/hardware/keyboard-classic/keys2.sch new file mode 100644 index 0000000..5d11251 --- /dev/null +++ b/hardware/keyboard-classic/keys2.sch @@ -0,0 +1,1138 @@ +EESchema Schematic File Version 4 +EELAYER 30 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 2 3 +Title "Universal Retro Keyboard" +Date "2019-08-25" +Rev "1.0" +Comp "OSIWeb.org" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +Text HLabel 1700 4450 0 60 Input ~ 0 +Row5 +Text HLabel 1700 5350 0 60 Input ~ 0 +Row6 +Text HLabel 1700 6250 0 60 Input ~ 0 +Row7 +Text HLabel 1700 3550 0 60 Input ~ 0 +Row4 +Text HLabel 1700 1050 0 60 Input ~ 0 +Col7 +Text HLabel 1700 1250 0 60 Input ~ 0 +Col6 +Text HLabel 1700 1450 0 60 Input ~ 0 +Col5 +Text HLabel 1700 1650 0 60 Input ~ 0 +Col4 +Text HLabel 1700 1850 0 60 Input ~ 0 +Col3 +Text HLabel 1700 2050 0 60 Input ~ 0 +Col2 +Text HLabel 1700 2250 0 60 Input ~ 0 +Col1 +Text HLabel 1700 2450 0 60 Input ~ 0 +Col0 +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF30F +P 3250 3150 +AR Path="/5BC3E99D/5BCAF30F" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF30F" Ref="SW1" Part="1" +AR Path="/5BCAF30F" Ref="SW?" Part="1" +F 0 "SW1" H 3250 3435 50 0000 C CNN +F 1 "Clear" H 3250 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3250 3350 50 0001 C CNN +F 3 "" H 3250 3350 50 0001 C CNN + 1 3250 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF316 +P 4050 3150 +AR Path="/5BC3E99D/5BCAF316" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF316" Ref="SW4" Part="1" +AR Path="/5BCAF316" Ref="SW?" Part="1" +F 0 "SW4" H 4050 3435 50 0000 C CNN +F 1 "I" H 4050 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4050 3350 50 0001 C CNN +F 3 "" H 4050 3350 50 0001 C CNN + 1 4050 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF31D +P 5650 3150 +AR Path="/5BC3E99D/5BCAF31D" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF31D" Ref="SW12" Part="1" +AR Path="/5BCAF31D" Ref="SW?" Part="1" +F 0 "SW12" H 5650 3435 50 0000 C CNN +F 1 "Y" H 5650 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5650 3350 50 0001 C CNN +F 3 "" H 5650 3350 50 0001 C CNN + 1 5650 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF324 +P 4850 3150 +AR Path="/5BC3E99D/5BCAF324" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF324" Ref="SW8" Part="1" +AR Path="/5BCAF324" Ref="SW?" Part="1" +F 0 "SW8" H 4850 3435 50 0000 C CNN +F 1 "U" H 4850 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4850 3350 50 0001 C CNN +F 3 "" H 4850 3350 50 0001 C CNN + 1 4850 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF32B +P 6450 3150 +AR Path="/5BC3E99D/5BCAF32B" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF32B" Ref="SW16" Part="1" +AR Path="/5BCAF32B" Ref="SW?" Part="1" +F 0 "SW16" H 6450 3435 50 0000 C CNN +F 1 "T" H 6450 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6450 3350 50 0001 C CNN +F 3 "" H 6450 3350 50 0001 C CNN + 1 6450 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF332 +P 7250 3150 +AR Path="/5BC3E99D/5BCAF332" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF332" Ref="SW20" Part="1" +AR Path="/5BCAF332" Ref="SW?" Part="1" +F 0 "SW20" H 7250 3435 50 0000 C CNN +F 1 "R" H 7250 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7250 3350 50 0001 C CNN +F 3 "" H 7250 3350 50 0001 C CNN + 1 7250 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF339 +P 8850 3150 +AR Path="/5BC3E99D/5BCAF339" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF339" Ref="SW28" Part="1" +AR Path="/5BCAF339" Ref="SW?" Part="1" +F 0 "SW28" H 8850 3435 50 0000 C CNN +F 1 "W" H 8850 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8850 3350 50 0001 C CNN +F 3 "" H 8850 3350 50 0001 C CNN + 1 8850 3150 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF340 +P 8050 3150 +AR Path="/5BC3E99D/5BCAF340" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF340" Ref="SW24" Part="1" +AR Path="/5BCAF340" Ref="SW?" Part="1" +F 0 "SW24" H 8050 3435 50 0000 C CNN +F 1 "E" H 8050 3344 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8050 3350 50 0001 C CNN +F 3 "" H 8050 3350 50 0001 C CNN + 1 8050 3150 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF347 +P 4250 3400 +AR Path="/5BC3E99D/5BCAF347" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF347" Ref="D5" Part="1" +AR Path="/5BCAF347" Ref="D?" Part="1" +F 0 "D5" V 4296 3321 50 0000 R CNN +F 1 "1N4148" V 4205 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4250 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4250 3400 50 0001 C CNN + 1 4250 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF34E +P 3450 3400 +AR Path="/5BC3E99D/5BCAF34E" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF34E" Ref="D2" Part="1" +AR Path="/5BCAF34E" Ref="D?" Part="1" +F 0 "D2" V 3496 3321 50 0000 R CNN +F 1 "1N4148" V 3405 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 3450 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 3450 3400 50 0001 C CNN + 1 3450 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF355 +P 5050 3400 +AR Path="/5BC3E99D/5BCAF355" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF355" Ref="D9" Part="1" +AR Path="/5BCAF355" Ref="D?" Part="1" +F 0 "D9" V 5096 3321 50 0000 R CNN +F 1 "1N4148" V 5005 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5050 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5050 3400 50 0001 C CNN + 1 5050 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF35C +P 5850 3400 +AR Path="/5BC3E99D/5BCAF35C" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF35C" Ref="D13" Part="1" +AR Path="/5BCAF35C" Ref="D?" Part="1" +F 0 "D13" V 5896 3321 50 0000 R CNN +F 1 "1N4148" V 5805 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5850 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5850 3400 50 0001 C CNN + 1 5850 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF363 +P 6650 3400 +AR Path="/5BC3E99D/5BCAF363" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF363" Ref="D17" Part="1" +AR Path="/5BCAF363" Ref="D?" Part="1" +F 0 "D17" V 6696 3321 50 0000 R CNN +F 1 "1N4148" V 6605 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6650 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6650 3400 50 0001 C CNN + 1 6650 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF36A +P 7450 3400 +AR Path="/5BC3E99D/5BCAF36A" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF36A" Ref="D21" Part="1" +AR Path="/5BCAF36A" Ref="D?" Part="1" +F 0 "D21" V 7496 3321 50 0000 R CNN +F 1 "1N4148" V 7405 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7450 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7450 3400 50 0001 C CNN + 1 7450 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF371 +P 8250 3400 +AR Path="/5BC3E99D/5BCAF371" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF371" Ref="D25" Part="1" +AR Path="/5BCAF371" Ref="D?" Part="1" +F 0 "D25" V 8296 3321 50 0000 R CNN +F 1 "1N4148" V 8205 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8250 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8250 3400 50 0001 C CNN + 1 8250 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF378 +P 9050 3400 +AR Path="/5BC3E99D/5BCAF378" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF378" Ref="D29" Part="1" +AR Path="/5BCAF378" Ref="D?" Part="1" +F 0 "D29" V 9096 3321 50 0000 R CNN +F 1 "1N4148" V 9005 3321 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9050 3225 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 9050 3400 50 0001 C CNN + 1 9050 3400 + 0 -1 -1 0 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF37F +P 3250 4050 +AR Path="/5BC3E99D/5BCAF37F" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF37F" Ref="SW2" Part="1" +AR Path="/5BCAF37F" Ref="SW?" Part="1" +F 0 "SW2" H 3250 4335 50 0000 C CNN +F 1 "Repeat" H 3250 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3250 4250 50 0001 C CNN +F 3 "" H 3250 4250 50 0001 C CNN + 1 3250 4050 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF386 +P 4050 4050 +AR Path="/5BC3E99D/5BCAF386" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF386" Ref="SW5" Part="1" +AR Path="/5BCAF386" Ref="SW?" Part="1" +F 0 "SW5" H 4050 4335 50 0000 C CNN +F 1 "Here_is" H 4050 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4050 4250 50 0001 C CNN +F 3 "" H 4050 4250 50 0001 C CNN + 1 4050 4050 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF38D +P 5650 4050 +AR Path="/5BC3E99D/5BCAF38D" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF38D" Ref="SW13" Part="1" +AR Path="/5BCAF38D" Ref="SW?" Part="1" +F 0 "SW13" H 5650 4335 50 0000 C CNN +F 1 "Return" H 5650 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5650 4250 50 0001 C CNN +F 3 "" H 5650 4250 50 0001 C CNN + 1 5650 4050 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF39B +P 6450 4050 +AR Path="/5BC3E99D/5BCAF39B" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF39B" Ref="SW17" Part="1" +AR Path="/5BCAF39B" Ref="SW?" Part="1" +F 0 "SW17" H 6450 4335 50 0000 C CNN +F 1 "Line Feed" H 6450 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6450 4250 50 0001 C CNN +F 3 "" H 6450 4250 50 0001 C CNN + 1 6450 4050 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF3A2 +P 7250 4050 +AR Path="/5BC3E99D/5BCAF3A2" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF3A2" Ref="SW21" Part="1" +AR Path="/5BCAF3A2" Ref="SW?" Part="1" +F 0 "SW21" H 7250 4335 50 0000 C CNN +F 1 "O" H 7250 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7250 4250 50 0001 C CNN +F 3 "" H 7250 4250 50 0001 C CNN + 1 7250 4050 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF3A9 +P 8850 4050 +AR Path="/5BC3E99D/5BCAF3A9" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF3A9" Ref="SW29" Part="1" +AR Path="/5BCAF3A9" Ref="SW?" Part="1" +F 0 "SW29" H 8850 4335 50 0000 C CNN +F 1 "Period" H 8850 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8850 4250 50 0001 C CNN +F 3 "" H 8850 4250 50 0001 C CNN + 1 8850 4050 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF3B0 +P 8050 4050 +AR Path="/5BC3E99D/5BCAF3B0" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF3B0" Ref="SW25" Part="1" +AR Path="/5BCAF3B0" Ref="SW?" Part="1" +F 0 "SW25" H 8050 4335 50 0000 C CNN +F 1 "L" H 8050 4244 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8050 4250 50 0001 C CNN +F 3 "" H 8050 4250 50 0001 C CNN + 1 8050 4050 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3B7 +P 4250 4300 +AR Path="/5BC3E99D/5BCAF3B7" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3B7" Ref="D6" Part="1" +AR Path="/5BCAF3B7" Ref="D?" Part="1" +F 0 "D6" V 4296 4221 50 0000 R CNN +F 1 "1N4148" V 4205 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4250 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4250 4300 50 0001 C CNN + 1 4250 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3BE +P 3450 4300 +AR Path="/5BC3E99D/5BCAF3BE" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3BE" Ref="D3" Part="1" +AR Path="/5BCAF3BE" Ref="D?" Part="1" +F 0 "D3" V 3496 4221 50 0000 R CNN +F 1 "1N4148" V 3405 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 3450 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 3450 4300 50 0001 C CNN + 1 3450 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3CC +P 5850 4300 +AR Path="/5BC3E99D/5BCAF3CC" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3CC" Ref="D14" Part="1" +AR Path="/5BCAF3CC" Ref="D?" Part="1" +F 0 "D14" V 5896 4221 50 0000 R CNN +F 1 "1N4148" V 5805 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5850 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5850 4300 50 0001 C CNN + 1 5850 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3D3 +P 6650 4300 +AR Path="/5BC3E99D/5BCAF3D3" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3D3" Ref="D18" Part="1" +AR Path="/5BCAF3D3" Ref="D?" Part="1" +F 0 "D18" V 6696 4221 50 0000 R CNN +F 1 "1N4148" V 6605 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6650 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6650 4300 50 0001 C CNN + 1 6650 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3DA +P 7450 4300 +AR Path="/5BC3E99D/5BCAF3DA" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3DA" Ref="D22" Part="1" +AR Path="/5BCAF3DA" Ref="D?" Part="1" +F 0 "D22" V 7496 4221 50 0000 R CNN +F 1 "1N4148" V 7405 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7450 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7450 4300 50 0001 C CNN + 1 7450 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3E1 +P 8250 4300 +AR Path="/5BC3E99D/5BCAF3E1" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3E1" Ref="D26" Part="1" +AR Path="/5BCAF3E1" Ref="D?" Part="1" +F 0 "D26" V 8296 4221 50 0000 R CNN +F 1 "1N4148" V 8205 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8250 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8250 4300 50 0001 C CNN + 1 8250 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF3E8 +P 9050 4300 +AR Path="/5BC3E99D/5BCAF3E8" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF3E8" Ref="D30" Part="1" +AR Path="/5BCAF3E8" Ref="D?" Part="1" +F 0 "D30" V 9096 4221 50 0000 R CNN +F 1 "1N4148" V 9005 4221 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9050 4125 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 9050 4300 50 0001 C CNN + 1 9050 4300 + 0 -1 -1 0 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF3EF +P 3250 4950 +AR Path="/5BC3E99D/5BCAF3EF" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF3EF" Ref="SW3" Part="1" +AR Path="/5BCAF3EF" Ref="SW?" Part="1" +F 0 "SW3" H 3250 5235 50 0000 C CNN +F 1 "Tilde" H 3250 5144 50 0000 C CNN +F 2 "unikbd:Key_MX" H 3250 5150 50 0001 C CNN +F 3 "" H 3250 5150 50 0001 C CNN + 1 3250 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF3F6 +P 4050 4950 +AR Path="/5BC3E99D/5BCAF3F6" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF3F6" Ref="SW6" Part="1" +AR Path="/5BCAF3F6" Ref="SW?" Part="1" +F 0 "SW6" H 4050 5235 50 0000 C CNN +F 1 "Bracket_Close" H 4150 5150 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4050 5150 50 0001 C CNN +F 3 "" H 4050 5150 50 0001 C CNN + 1 4050 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF3FD +P 5650 4950 +AR Path="/5BC3E99D/5BCAF3FD" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF3FD" Ref="SW14" Part="1" +AR Path="/5BCAF3FD" Ref="SW?" Part="1" +F 0 "SW14" H 5650 5235 50 0000 C CNN +F 1 "Dash" H 5650 5144 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5650 5150 50 0001 C CNN +F 3 "" H 5650 5150 50 0001 C CNN + 1 5650 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF404 +P 4850 4950 +AR Path="/5BC3E99D/5BCAF404" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF404" Ref="SW10" Part="1" +AR Path="/5BCAF404" Ref="SW?" Part="1" +F 0 "SW10" H 4850 5235 50 0000 C CNN +F 1 "Bracket_Open" H 4950 5150 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4850 5150 50 0001 C CNN +F 3 "" H 4850 5150 50 0001 C CNN + 1 4850 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF40B +P 6450 4950 +AR Path="/5BC3E99D/5BCAF40B" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF40B" Ref="SW18" Part="1" +AR Path="/5BCAF40B" Ref="SW?" Part="1" +F 0 "SW18" H 6450 5235 50 0000 C CNN +F 1 "Colon" H 6450 5144 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6450 5150 50 0001 C CNN +F 3 "" H 6450 5150 50 0001 C CNN + 1 6450 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF412 +P 7250 4950 +AR Path="/5BC3E99D/5BCAF412" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF412" Ref="SW22" Part="1" +AR Path="/5BCAF412" Ref="SW?" Part="1" +F 0 "SW22" H 7250 5235 50 0000 C CNN +F 1 "0" H 7250 5144 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7250 5150 50 0001 C CNN +F 3 "" H 7250 5150 50 0001 C CNN + 1 7250 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF419 +P 8850 4950 +AR Path="/5BC3E99D/5BCAF419" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF419" Ref="SW30" Part="1" +AR Path="/5BCAF419" Ref="SW?" Part="1" +F 0 "SW30" H 8850 5235 50 0000 C CNN +F 1 "8" H 8850 5144 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8850 5150 50 0001 C CNN +F 3 "" H 8850 5150 50 0001 C CNN + 1 8850 4950 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF420 +P 8050 4950 +AR Path="/5BC3E99D/5BCAF420" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF420" Ref="SW26" Part="1" +AR Path="/5BCAF420" Ref="SW?" Part="1" +F 0 "SW26" H 8050 5235 50 0000 C CNN +F 1 "9" H 8050 5144 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8050 5150 50 0001 C CNN +F 3 "" H 8050 5150 50 0001 C CNN + 1 8050 4950 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF427 +P 4250 5200 +AR Path="/5BC3E99D/5BCAF427" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF427" Ref="D7" Part="1" +AR Path="/5BCAF427" Ref="D?" Part="1" +F 0 "D7" V 4296 5121 50 0000 R CNN +F 1 "1N4148" V 4205 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4250 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4250 5200 50 0001 C CNN + 1 4250 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF42E +P 3450 5200 +AR Path="/5BC3E99D/5BCAF42E" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF42E" Ref="D4" Part="1" +AR Path="/5BCAF42E" Ref="D?" Part="1" +F 0 "D4" V 3496 5121 50 0000 R CNN +F 1 "1N4148" V 3405 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 3450 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 3450 5200 50 0001 C CNN + 1 3450 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF435 +P 5050 5200 +AR Path="/5BC3E99D/5BCAF435" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF435" Ref="D11" Part="1" +AR Path="/5BCAF435" Ref="D?" Part="1" +F 0 "D11" V 5096 5121 50 0000 R CNN +F 1 "1N4148" V 5005 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5050 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5050 5200 50 0001 C CNN + 1 5050 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF43C +P 5850 5200 +AR Path="/5BC3E99D/5BCAF43C" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF43C" Ref="D15" Part="1" +AR Path="/5BCAF43C" Ref="D?" Part="1" +F 0 "D15" V 5896 5121 50 0000 R CNN +F 1 "1N4148" V 5805 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5850 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5850 5200 50 0001 C CNN + 1 5850 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF443 +P 6650 5200 +AR Path="/5BC3E99D/5BCAF443" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF443" Ref="D19" Part="1" +AR Path="/5BCAF443" Ref="D?" Part="1" +F 0 "D19" V 6696 5121 50 0000 R CNN +F 1 "1N4148" V 6605 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6650 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6650 5200 50 0001 C CNN + 1 6650 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF44A +P 7450 5200 +AR Path="/5BC3E99D/5BCAF44A" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF44A" Ref="D23" Part="1" +AR Path="/5BCAF44A" Ref="D?" Part="1" +F 0 "D23" V 7496 5121 50 0000 R CNN +F 1 "1N4148" V 7405 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7450 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7450 5200 50 0001 C CNN + 1 7450 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF451 +P 8250 5200 +AR Path="/5BC3E99D/5BCAF451" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF451" Ref="D27" Part="1" +AR Path="/5BCAF451" Ref="D?" Part="1" +F 0 "D27" V 8296 5121 50 0000 R CNN +F 1 "1N4148" V 8205 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8250 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8250 5200 50 0001 C CNN + 1 8250 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF458 +P 9050 5200 +AR Path="/5BC3E99D/5BCAF458" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF458" Ref="D31" Part="1" +AR Path="/5BCAF458" Ref="D?" Part="1" +F 0 "D31" V 9096 5121 50 0000 R CNN +F 1 "1N4148" V 9005 5121 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9050 5025 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 9050 5200 50 0001 C CNN + 1 9050 5200 + 0 -1 -1 0 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF466 +P 4050 5850 +AR Path="/5BC3E99D/5BCAF466" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF466" Ref="SW7" Part="1" +AR Path="/5BCAF466" Ref="SW?" Part="1" +F 0 "SW7" H 4050 6135 50 0000 C CNN +F 1 "7" H 4050 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4050 6050 50 0001 C CNN +F 3 "" H 4050 6050 50 0001 C CNN + 1 4050 5850 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF46D +P 5650 5850 +AR Path="/5BC3E99D/5BCAF46D" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF46D" Ref="SW15" Part="1" +AR Path="/5BCAF46D" Ref="SW?" Part="1" +F 0 "SW15" H 5650 6135 50 0000 C CNN +F 1 "5" H 5650 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 5650 6050 50 0001 C CNN +F 3 "" H 5650 6050 50 0001 C CNN + 1 5650 5850 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF474 +P 4850 5850 +AR Path="/5BC3E99D/5BCAF474" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF474" Ref="SW11" Part="1" +AR Path="/5BCAF474" Ref="SW?" Part="1" +F 0 "SW11" H 4850 6135 50 0000 C CNN +F 1 "6" H 4850 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 4850 6050 50 0001 C CNN +F 3 "" H 4850 6050 50 0001 C CNN + 1 4850 5850 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF47B +P 6450 5850 +AR Path="/5BC3E99D/5BCAF47B" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF47B" Ref="SW19" Part="1" +AR Path="/5BCAF47B" Ref="SW?" Part="1" +F 0 "SW19" H 6450 6135 50 0000 C CNN +F 1 "4" H 6450 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 6450 6050 50 0001 C CNN +F 3 "" H 6450 6050 50 0001 C CNN + 1 6450 5850 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF482 +P 7250 5850 +AR Path="/5BC3E99D/5BCAF482" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF482" Ref="SW23" Part="1" +AR Path="/5BCAF482" Ref="SW?" Part="1" +F 0 "SW23" H 7250 6135 50 0000 C CNN +F 1 "3" H 7250 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 7250 6050 50 0001 C CNN +F 3 "" H 7250 6050 50 0001 C CNN + 1 7250 5850 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF489 +P 8850 5850 +AR Path="/5BC3E99D/5BCAF489" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF489" Ref="SW31" Part="1" +AR Path="/5BCAF489" Ref="SW?" Part="1" +F 0 "SW31" H 8850 6135 50 0000 C CNN +F 1 "1" H 8850 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8850 6050 50 0001 C CNN +F 3 "" H 8850 6050 50 0001 C CNN + 1 8850 5850 + 1 0 0 -1 +$EndComp +$Comp +L Switch:SW_Push SW? +U 1 1 5BCAF490 +P 8050 5850 +AR Path="/5BC3E99D/5BCAF490" Ref="SW?" Part="1" +AR Path="/5BC3EA0A/5BCAF490" Ref="SW27" Part="1" +AR Path="/5BCAF490" Ref="SW?" Part="1" +F 0 "SW27" H 8050 6135 50 0000 C CNN +F 1 "2" H 8050 6044 50 0000 C CNN +F 2 "unikbd:Key_MX" H 8050 6050 50 0001 C CNN +F 3 "" H 8050 6050 50 0001 C CNN + 1 8050 5850 + 1 0 0 -1 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF497 +P 4250 6100 +AR Path="/5BC3E99D/5BCAF497" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF497" Ref="D8" Part="1" +AR Path="/5BCAF497" Ref="D?" Part="1" +F 0 "D8" V 4296 6021 50 0000 R CNN +F 1 "1N4148" V 4205 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 4250 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 4250 6100 50 0001 C CNN + 1 4250 6100 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF4A5 +P 5050 6100 +AR Path="/5BC3E99D/5BCAF4A5" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF4A5" Ref="D12" Part="1" +AR Path="/5BCAF4A5" Ref="D?" Part="1" +F 0 "D12" V 5096 6021 50 0000 R CNN +F 1 "1N4148" V 5005 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5050 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5050 6100 50 0001 C CNN + 1 5050 6100 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF4AC +P 5850 6100 +AR Path="/5BC3E99D/5BCAF4AC" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF4AC" Ref="D16" Part="1" +AR Path="/5BCAF4AC" Ref="D?" Part="1" +F 0 "D16" V 5896 6021 50 0000 R CNN +F 1 "1N4148" V 5805 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 5850 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 5850 6100 50 0001 C CNN + 1 5850 6100 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF4B3 +P 6650 6100 +AR Path="/5BC3E99D/5BCAF4B3" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF4B3" Ref="D20" Part="1" +AR Path="/5BCAF4B3" Ref="D?" Part="1" +F 0 "D20" V 6696 6021 50 0000 R CNN +F 1 "1N4148" V 6605 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 6650 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 6650 6100 50 0001 C CNN + 1 6650 6100 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF4BA +P 7450 6100 +AR Path="/5BC3E99D/5BCAF4BA" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF4BA" Ref="D24" Part="1" +AR Path="/5BCAF4BA" Ref="D?" Part="1" +F 0 "D24" V 7496 6021 50 0000 R CNN +F 1 "1N4148" V 7405 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 7450 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 7450 6100 50 0001 C CNN + 1 7450 6100 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF4C1 +P 8250 6100 +AR Path="/5BC3E99D/5BCAF4C1" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF4C1" Ref="D28" Part="1" +AR Path="/5BCAF4C1" Ref="D?" Part="1" +F 0 "D28" V 8296 6021 50 0000 R CNN +F 1 "1N4148" V 8205 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 8250 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 8250 6100 50 0001 C CNN + 1 8250 6100 + 0 -1 -1 0 +$EndComp +$Comp +L Diode:1N4148 D? +U 1 1 5BCAF4C8 +P 9050 6100 +AR Path="/5BC3E99D/5BCAF4C8" Ref="D?" Part="1" +AR Path="/5BC3EA0A/5BCAF4C8" Ref="D32" Part="1" +AR Path="/5BCAF4C8" Ref="D?" Part="1" +F 0 "D32" V 9096 6021 50 0000 R CNN +F 1 "1N4148" V 9005 6021 50 0000 R CNN +F 2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" H 9050 5925 50 0001 C CNN +F 3 "http://www.nxp.com/documents/data_sheet/1N4148_1N4448.pdf" H 9050 6100 50 0001 C CNN + 1 9050 6100 + 0 -1 -1 0 +$EndComp +Wire Wire Line + 3450 3550 4250 3550 +Connection ~ 4250 3550 +Wire Wire Line + 4250 3550 5050 3550 +Connection ~ 5050 3550 +Wire Wire Line + 5050 3550 5850 3550 +Connection ~ 5850 3550 +Wire Wire Line + 5850 3550 6650 3550 +Connection ~ 6650 3550 +Wire Wire Line + 6650 3550 7450 3550 +Connection ~ 7450 3550 +Wire Wire Line + 7450 3550 8250 3550 +Connection ~ 8250 3550 +Wire Wire Line + 8250 3550 9050 3550 +Wire Wire Line + 3450 4450 4250 4450 +Connection ~ 4250 4450 +Connection ~ 5850 4450 +Wire Wire Line + 5850 4450 6650 4450 +Connection ~ 6650 4450 +Wire Wire Line + 6650 4450 7450 4450 +Connection ~ 7450 4450 +Wire Wire Line + 7450 4450 8250 4450 +Connection ~ 8250 4450 +Wire Wire Line + 8250 4450 9050 4450 +Wire Wire Line + 3450 5350 4250 5350 +Connection ~ 4250 5350 +Wire Wire Line + 4250 5350 5050 5350 +Connection ~ 5050 5350 +Wire Wire Line + 5050 5350 5850 5350 +Connection ~ 5850 5350 +Wire Wire Line + 5850 5350 6650 5350 +Connection ~ 6650 5350 +Wire Wire Line + 6650 5350 7450 5350 +Connection ~ 7450 5350 +Wire Wire Line + 7450 5350 8250 5350 +Connection ~ 8250 5350 +Wire Wire Line + 8250 5350 9050 5350 +Connection ~ 4250 6250 +Wire Wire Line + 4250 6250 5050 6250 +Connection ~ 5050 6250 +Wire Wire Line + 5050 6250 5850 6250 +Connection ~ 5850 6250 +Wire Wire Line + 5850 6250 6650 6250 +Connection ~ 6650 6250 +Wire Wire Line + 6650 6250 7450 6250 +Connection ~ 7450 6250 +Wire Wire Line + 7450 6250 8250 6250 +Connection ~ 8250 6250 +Wire Wire Line + 8250 6250 9050 6250 +Wire Wire Line + 4250 5850 4250 5950 +Wire Wire Line + 5050 5850 5050 5950 +Wire Wire Line + 5850 5850 5850 5950 +Wire Wire Line + 6650 5850 6650 5950 +Wire Wire Line + 7450 5850 7450 5950 +Wire Wire Line + 8250 5850 8250 5950 +Wire Wire Line + 9050 5950 9050 5850 +Wire Wire Line + 9050 4950 9050 5050 +Wire Wire Line + 8250 4950 8250 5050 +Wire Wire Line + 7450 4950 7450 5050 +Wire Wire Line + 5850 5050 5850 4950 +Wire Wire Line + 6650 5050 6650 4950 +Wire Wire Line + 5050 5050 5050 4950 +Wire Wire Line + 4250 5050 4250 4950 +Wire Wire Line + 3450 5050 3450 4950 +Wire Wire Line + 3450 4150 3450 4050 +Wire Wire Line + 3450 3250 3450 3150 +Wire Wire Line + 4250 3150 4250 3250 +Wire Wire Line + 4250 4050 4250 4150 +Wire Wire Line + 5850 4150 5850 4050 +Wire Wire Line + 6650 4150 6650 4050 +Wire Wire Line + 7450 4150 7450 4050 +Wire Wire Line + 8250 4150 8250 4050 +Wire Wire Line + 9050 4150 9050 4050 +Wire Wire Line + 5050 3250 5050 3150 +Wire Wire Line + 5850 3150 5850 3250 +Wire Wire Line + 6650 3150 6650 3250 +Wire Wire Line + 7450 3150 7450 3250 +Wire Wire Line + 8250 3150 8250 3250 +Wire Wire Line + 9050 3150 9050 3250 +Wire Wire Line + 1700 2450 3050 2450 +Wire Wire Line + 3050 2450 3050 3150 +Connection ~ 3050 3150 +Wire Wire Line + 3050 3150 3050 4050 +Connection ~ 3050 4050 +Wire Wire Line + 3050 4050 3050 4950 +Wire Wire Line + 1700 2250 3850 2250 +Wire Wire Line + 3850 2250 3850 3150 +Connection ~ 3850 3150 +Wire Wire Line + 3850 3150 3850 4050 +Connection ~ 3850 4050 +Wire Wire Line + 3850 4050 3850 4950 +Connection ~ 3850 4950 +Wire Wire Line + 3850 4950 3850 5850 +Wire Wire Line + 1700 2050 4650 2050 +Wire Wire Line + 4650 2050 4650 3150 +Connection ~ 4650 3150 +Connection ~ 4650 4950 +Wire Wire Line + 4650 4950 4650 5850 +Wire Wire Line + 1700 1850 5450 1850 +Wire Wire Line + 5450 1850 5450 3150 +Connection ~ 5450 3150 +Wire Wire Line + 5450 3150 5450 4050 +Connection ~ 5450 4050 +Wire Wire Line + 5450 4050 5450 4950 +Connection ~ 5450 4950 +Wire Wire Line + 5450 4950 5450 5850 +Wire Wire Line + 1700 1650 6250 1650 +Wire Wire Line + 6250 1650 6250 3150 +Connection ~ 6250 3150 +Wire Wire Line + 6250 3150 6250 4050 +Connection ~ 6250 4050 +Wire Wire Line + 6250 4050 6250 4950 +Connection ~ 6250 4950 +Wire Wire Line + 6250 4950 6250 5850 +Wire Wire Line + 1700 1450 7050 1450 +Wire Wire Line + 7050 1450 7050 3150 +Connection ~ 7050 3150 +Wire Wire Line + 7050 3150 7050 4050 +Connection ~ 7050 4050 +Wire Wire Line + 7050 4050 7050 4950 +Connection ~ 7050 4950 +Wire Wire Line + 7050 4950 7050 5850 +Wire Wire Line + 1700 1250 7850 1250 +Wire Wire Line + 7850 1250 7850 3150 +Connection ~ 7850 3150 +Wire Wire Line + 7850 3150 7850 4050 +Connection ~ 7850 4050 +Wire Wire Line + 7850 4050 7850 4950 +Connection ~ 7850 4950 +Wire Wire Line + 7850 4950 7850 5850 +Wire Wire Line + 1700 1050 8650 1050 +Wire Wire Line + 8650 1050 8650 3150 +Connection ~ 8650 3150 +Wire Wire Line + 8650 3150 8650 4050 +Connection ~ 8650 4050 +Wire Wire Line + 8650 4050 8650 4950 +Connection ~ 8650 4950 +Wire Wire Line + 8650 4950 8650 5850 +Connection ~ 3450 5350 +Connection ~ 3450 4450 +Connection ~ 3450 3550 +Text Notes 1350 6800 0 50 ~ 0 +(Install either Row diodes or switch diodes. Jumper uninstalled diodes. +Text Label 2600 3550 0 50 ~ 0 +Row4_keys +Text Label 2600 4450 0 50 ~ 0 +Row5_keys +Text Label 2600 5350 0 50 ~ 0 +Row6_keys +Text Label 2650 6250 0 50 ~ 0 +Row7_keys +Wire Wire Line + 1700 6250 4250 6250 +Wire Wire Line + 1700 5350 3450 5350 +Wire Wire Line + 1700 4450 3450 4450 +Wire Wire Line + 1700 3550 3450 3550 +Wire Wire Line + 4650 3150 4650 4950 +Wire Wire Line + 4250 4450 5850 4450 +Text Notes 4700 4200 0 50 ~ 0 +Caps Lock +Text Notes 3320 5830 0 50 ~ 0 +@ +$EndSCHEMATC