ADDED: Remove unused pads

This option removes copper layers from pads and vias where they are not
connected to other board elements.  This allows the inner layers to be
more closely routed if the via landing pad is not needed.

Fixes https://gitlab.com/kicad/code/kicad/issues/1835
This commit is contained in:
Seth Hillbrand 2020-07-27 12:41:50 -07:00
parent 2fc266ef02
commit 5fc6b74c89
39 changed files with 3634 additions and 49 deletions

View File

@ -381,6 +381,7 @@ set( BMAPS_MID
pad_enumerate pad_enumerate
pad_number pad_number
pads_mask_layers pads_mask_layers
pads_remove
path path
pagelayout_load pagelayout_load
pagelayout_normal_view_mode pagelayout_normal_view_mode
@ -556,6 +557,9 @@ set( BMAPS_BIG
) )
set( BMAPS_OTHER set( BMAPS_OTHER
pads_remove_unused
pads_remove_unused_keep_bottom
pads_reset_unused
stroke_dash stroke_dash
stroke_dashdot stroke_dashdot
stroke_dot stroke_dot

View File

@ -0,0 +1,60 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
0xce, 0x00, 0x00, 0x02, 0xb2, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xe5, 0x55, 0x4b, 0x4f, 0x53,
0x61, 0x10, 0xfd, 0x4a, 0x5f, 0x50, 0x62, 0xa9, 0x09, 0x94, 0x10, 0x53, 0x5a, 0x0a, 0xa1, 0xcd,
0xe5, 0xa5, 0x48, 0x4a, 0xe8, 0x8a, 0x94, 0x0d, 0x2c, 0xc4, 0xbd, 0xee, 0xd4, 0x18, 0x11, 0x37,
0xfe, 0x02, 0xfb, 0x14, 0xe4, 0x51, 0x0a, 0xa5, 0x22, 0x09, 0x0d, 0x08, 0x26, 0xec, 0x5c, 0x91,
0xf0, 0x0b, 0x94, 0x8d, 0x61, 0xe1, 0x42, 0x34, 0x08, 0x6e, 0x54, 0x76, 0x4a, 0x43, 0x0b, 0x8d,
0xd0, 0x3b, 0x9e, 0xb9, 0x52, 0x22, 0x55, 0x11, 0x8c, 0x90, 0x28, 0x93, 0x9c, 0xdc, 0xc9, 0x77,
0x67, 0xe6, 0x7c, 0x77, 0xd2, 0x9e, 0x23, 0xc4, 0xaf, 0xc2, 0x2b, 0x24, 0xe0, 0x86, 0xda, 0xab,
0x1e, 0xd3, 0x05, 0x75, 0x0b, 0x5a, 0xbf, 0x76, 0x59, 0xe3, 0xd7, 0x7c, 0x54, 0xfb, 0xd4, 0x9f,
0x19, 0xc8, 0x3f, 0xf0, 0x99, 0x2e, 0xa0, 0x5b, 0xe0, 0x1a, 0xae, 0x55, 0x7a, 0x0e, 0x1d, 0x3e,
0x71, 0x19, 0x03, 0x5e, 0x63, 0x40, 0xb2, 0x6c, 0xb0, 0x2c, 0xe9, 0x8c, 0x39, 0xa9, 0x69, 0xa2,
0x89, 0xdc, 0x53, 0x6e, 0x6a, 0x99, 0x6c, 0xa1, 0xda, 0xf1, 0x5a, 0x92, 0x1e, 0x4a, 0xd4, 0x30,
0xde, 0x40, 0x8d, 0x13, 0x8d, 0x54, 0xf7, 0xa8, 0x8e, 0x2a, 0xa3, 0x95, 0x64, 0xee, 0x37, 0xa7,
0xb4, 0x01, 0x6d, 0x0a, 0x97, 0x58, 0x11, 0x7e, 0x71, 0x13, 0xa4, 0xf6, 0x3d, 0xf4, 0x8a, 0xa2,
0xfd, 0x24, 0x41, 0x71, 0x4e, 0xed, 0x57, 0x6f, 0xba, 0x26, 0x5c, 0xd4, 0x3e, 0xdb, 0x4e, 0x1d,
0xb3, 0x1d, 0x7b, 0xc0, 0xc0, 0x4d, 0x95, 0x57, 0x25, 0x8b, 0x7b, 0x82, 0xd0, 0x7c, 0x54, 0x7c,
0xca, 0x5d, 0x57, 0x3e, 0x88, 0xde, 0x97, 0x0e, 0x94, 0x26, 0x73, 0xc9, 0x9a, 0xe3, 0xcd, 0xb2,
0xb1, 0xc7, 0xb8, 0x91, 0xe7, 0xcb, 0x93, 0x55, 0x3e, 0x15, 0x23, 0x83, 0x95, 0xca, 0x86, 0x90,
0x81, 0xb2, 0xd0, 0x07, 0xf5, 0x84, 0x7e, 0x19, 0x73, 0xb6, 0xb1, 0x99, 0x55, 0x3c, 0x57, 0x80,
0xb7, 0xc0, 0xd3, 0x1f, 0x57, 0x87, 0xcf, 0xc4, 0xb0, 0x6e, 0xac, 0x6f, 0x09, 0x5f, 0xb0, 0x6d,
0x08, 0x1a, 0x12, 0xe6, 0x41, 0x73, 0xc2, 0x12, 0xb1, 0x6c, 0xd9, 0x47, 0xec, 0x3b, 0x8e, 0x51,
0x07, 0x55, 0xc7, 0xaa, 0x89, 0x73, 0x4b, 0xd8, 0xb2, 0x65, 0x1e, 0x30, 0x27, 0xf2, 0x83, 0xf9,
0x09, 0xae, 0x45, 0xcf, 0x2b, 0xf4, 0x76, 0x61, 0xb0, 0x51, 0x1c, 0x29, 0x46, 0x84, 0x1e, 0x4d,
0xe7, 0x81, 0x2b, 0xb8, 0x61, 0x97, 0x7d, 0xd8, 0xfe, 0xa0, 0xa8, 0xa7, 0x88, 0x4c, 0xbd, 0x26,
0xb2, 0x45, 0x6c, 0xbd, 0x7c, 0xa6, 0xbc, 0xfb, 0x56, 0xa3, 0x13, 0x7f, 0x2b, 0xd2, 0xe9, 0xb4,
0xdd, 0x3a, 0x64, 0xa5, 0x8a, 0xe1, 0x0a, 0x99, 0x88, 0xac, 0xe2, 0xb8, 0x02, 0xc3, 0x6d, 0x35,
0xb1, 0x1a, 0x92, 0x62, 0x12, 0x71, 0x7e, 0x9c, 0x44, 0xa6, 0x99, 0x97, 0x33, 0x33, 0xc0, 0x13,
0xe4, 0x67, 0x8f, 0x8d, 0xe8, 0xc4, 0x56, 0xf7, 0xff, 0x11, 0x9d, 0xe4, 0x8f, 0xe1, 0xcc, 0xfc,
0xf2, 0x7c, 0x78, 0x6e, 0x79, 0x6e, 0x88, 0xf3, 0x7f, 0x6c, 0x75, 0x5e, 0xe1, 0xc4, 0x3f, 0xff,
0x3a, 0xd4, 0x78, 0x14, 0x4a, 0xfe, 0x1c, 0xf2, 0xf2, 0xc6, 0x39, 0xea, 0x5c, 0x53, 0x88, 0x22,
0x15, 0xe4, 0x88, 0x3a, 0xd6, 0xf8, 0x0c, 0x7a, 0xf7, 0x0c, 0xfa, 0x16, 0x45, 0xfd, 0x35, 0xa5,
0xe7, 0x80, 0x81, 0x46, 0xc8, 0xfa, 0xc5, 0x3d, 0x04, 0xc4, 0x5d, 0x34, 0xae, 0x6a, 0x02, 0x9a,
0xcd, 0xe2, 0xbe, 0xe2, 0x94, 0x6d, 0xd8, 0x46, 0xd2, 0x98, 0x44, 0xf5, 0xe3, 0xf5, 0xd4, 0x36,
0xdd, 0x46, 0x59, 0xa2, 0xce, 0xd9, 0x4e, 0x72, 0x4f, 0xba, 0x15, 0x0b, 0x61, 0x2b, 0x81, 0xa5,
0x6c, 0xc0, 0x26, 0x92, 0xac, 0x77, 0xb8, 0xe0, 0xa5, 0x9f, 0x11, 0xbd, 0x3b, 0xac, 0xdc, 0x33,
0x41, 0x96, 0x88, 0x9f, 0x55, 0xd1, 0xaa, 0xf4, 0xf7, 0x56, 0xc2, 0x6a, 0xcf, 0xc4, 0x6c, 0x35,
0x22, 0x24, 0xca, 0x72, 0x89, 0xd8, 0x1d, 0x5f, 0xec, 0x62, 0x11, 0x2a, 0xfc, 0x05, 0xb7, 0xca,
0x14, 0x86, 0x0a, 0x09, 0xb6, 0x40, 0x2c, 0xa2, 0x0c, 0xd8, 0x80, 0x5c, 0x10, 0x2a, 0xd8, 0xf1,
0x3c, 0xf6, 0x64, 0x3c, 0x53, 0x9e, 0x4c, 0x49, 0x7f, 0x49, 0xaa, 0x75, 0xba, 0x75, 0x1f, 0x89,
0x2b, 0xee, 0x22, 0xb6, 0x18, 0xb6, 0x1a, 0x45, 0x90, 0x0f, 0x0c, 0xb6, 0x09, 0x7f, 0xde, 0x1d,
0x76, 0x59, 0xc5, 0x26, 0xee, 0x1b, 0xd6, 0xd1, 0x9c, 0x28, 0x8f, 0x94, 0xb3, 0x4d, 0x64, 0x1c,
0x31, 0x07, 0x31, 0x38, 0xe7, 0x33, 0xb6, 0x10, 0x5c, 0x62, 0x7d, 0xd7, 0x26, 0x96, 0xd0, 0x7b,
0xfb, 0xcf, 0x6c, 0xc2, 0x2f, 0x2e, 0x60, 0xe7, 0x57, 0x81, 0x6e, 0x6b, 0xd8, 0xda, 0x97, 0x63,
0x13, 0xdd, 0xca, 0x3b, 0xae, 0xf9, 0xed, 0x17, 0x9c, 0x76, 0x09, 0xd2, 0xc7, 0x17, 0xe3, 0xb7,
0x18, 0x9c, 0x8b, 0x53, 0x1d, 0x5f, 0x01, 0xf4, 0xbb, 0xc2, 0x3a, 0x41, 0xf8, 0xc5, 0xf2, 0x00,
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE pads_remove_xpm[1] = {{ png, sizeof( png ), "pads_remove_xpm" }};
//EOF

View File

@ -0,0 +1,174 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x96, 0x08, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x71,
0xe2, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x55, 0x2d, 0x00, 0x00, 0x55,
0x2d, 0x01, 0x6a, 0xe7, 0x70, 0xe8, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x52, 0x74,
0x45, 0x58, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x43, 0x20,
0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x53, 0x68, 0x61, 0x72,
0x65, 0x41, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72,
0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72,
0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x2d, 0x73, 0x61,
0x2f, 0x34, 0x2e, 0x30, 0x2f, 0xc3, 0x54, 0x62, 0x05, 0x00, 0x00, 0x09, 0x31, 0x49, 0x44, 0x41,
0x54, 0x78, 0x9c, 0xed, 0xdd, 0x7d, 0x8c, 0x1c, 0x75, 0x1d, 0xc7, 0xf1, 0xf7, 0x6f, 0xf6, 0xe1,
0x7a, 0xcf, 0xbd, 0x72, 0xd4, 0x52, 0xb0, 0x14, 0xaf, 0x0f, 0x16, 0xc1, 0xb4, 0x8a, 0x7d, 0x10,
0x1a, 0x9b, 0x88, 0xf8, 0x47, 0xd3, 0x14, 0x2d, 0x0f, 0x41, 0x34, 0x20, 0x31, 0x6a, 0x62, 0xd0,
0x40, 0x43, 0x78, 0xb0, 0x25, 0x63, 0x4b, 0x72, 0x1a, 0xff, 0x20, 0xa9, 0x8d, 0x06, 0xf9, 0x43,
0x4c, 0x20, 0xa0, 0x92, 0x00, 0x06, 0x48, 0x11, 0x42, 0x1a, 0xb1, 0x55, 0x8f, 0x5a, 0x1a, 0x44,
0x4b, 0x6b, 0x4f, 0xe8, 0x95, 0x87, 0x4b, 0x7b, 0x57, 0x5a, 0xae, 0x77, 0x7b, 0xb7, 0x7b, 0x3b,
0x3f, 0xff, 0xd8, 0x23, 0x1c, 0xbb, 0x53, 0x6f, 0x9f, 0x86, 0xd9, 0xd9, 0xfd, 0xbc, 0x92, 0xfd,
0xe3, 0x6e, 0x27, 0xb3, 0xdf, 0x9d, 0x7c, 0x66, 0xe6, 0xb7, 0x33, 0xbf, 0xdf, 0x6f, 0x40, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x1a, 0x97, 0x09, 0xbb, 0x80, 0x9a, 0xf2, 0x00, 0x09, 0x86, 0xe8,
0x26, 0x4b, 0x37, 0x90, 0xc4, 0xa3, 0x09, 0x68, 0x99, 0x7a, 0xb7, 0x0d, 0x83, 0xc5, 0x32, 0x0a,
0x80, 0x43, 0x0a, 0x18, 0x07, 0xd2, 0xc4, 0x18, 0xa2, 0x9b, 0x21, 0xbe, 0x47, 0x26, 0x9c, 0xc2,
0x6b, 0x4f, 0x63, 0x05, 0xcb, 0xa5, 0x03, 0xb8, 0x18, 0x43, 0x0f, 0xb0, 0x08, 0x4b, 0x0f, 0xf0,
0x29, 0xe0, 0x5c, 0x60, 0x2e, 0x30, 0xbb, 0xc2, 0x4f, 0x38, 0x05, 0x1c, 0x07, 0x4e, 0x00, 0xfd,
0x40, 0x3f, 0x86, 0x7e, 0x2c, 0xfd, 0x34, 0xf3, 0x2f, 0xee, 0x64, 0xa4, 0xc2, 0xf5, 0x47, 0x46,
0x7d, 0x07, 0x6b, 0x3b, 0xcb, 0xf0, 0x58, 0x87, 0x65, 0x25, 0xb0, 0x12, 0xf8, 0x34, 0xe0, 0x84,
0x54, 0x8d, 0x07, 0x1c, 0x04, 0xfa, 0xa6, 0x5e, 0x2f, 0xe2, 0x72, 0x38, 0xa4, 0x5a, 0x02, 0x57,
0x7f, 0xc1, 0xda, 0xc6, 0x2a, 0x3c, 0x36, 0x01, 0x1b, 0x81, 0x25, 0x61, 0x97, 0x33, 0x83, 0xd7,
0x81, 0xa7, 0x80, 0xc7, 0x71, 0xd9, 0x17, 0x76, 0x31, 0xd5, 0x54, 0x3f, 0xc1, 0x72, 0xb9, 0x12,
0xf8, 0x09, 0xf0, 0xc5, 0xb0, 0x4b, 0x29, 0xd3, 0x21, 0x0c, 0x4f, 0x62, 0xd9, 0x8f, 0xc1, 0x86,
0x5d, 0x4c, 0xd1, 0x2c, 0x29, 0x1c, 0x46, 0x88, 0xf3, 0x1a, 0xf7, 0x30, 0xfc, 0xc1, 0xbf, 0xa3,
0x1f, 0xac, 0xed, 0x2c, 0x25, 0xcb, 0x6f, 0x81, 0x55, 0x61, 0x97, 0xd2, 0xe0, 0x32, 0xc0, 0xe3,
0x24, 0xd8, 0xcc, 0x8f, 0x79, 0x37, 0xda, 0xc1, 0x72, 0x59, 0x0d, 0x3c, 0x07, 0x74, 0x54, 0x75,
0xbd, 0x96, 0x7a, 0xd8, 0xe5, 0xc2, 0xf2, 0x16, 0xf0, 0xa5, 0xe8, 0x6e, 0xbe, 0x5e, 0xba, 0x98,
0xe0, 0x10, 0xb9, 0x5f, 0x74, 0x52, 0x5b, 0xfe, 0x1e, 0xd6, 0x2f, 0xa4, 0xca, 0x4d, 0xb0, 0x19,
0x85, 0xaa, 0x56, 0xad, 0x8a, 0x6e, 0xb0, 0x60, 0x6d, 0xd8, 0x05, 0xc8, 0xd9, 0x45, 0x39, 0x58,
0x73, 0xaa, 0xbe, 0xc6, 0xe8, 0xfc, 0x16, 0xab, 0x79, 0x51, 0x0e, 0xd6, 0xab, 0x55, 0x5f, 0x63,
0x74, 0x5b, 0x9c, 0x35, 0x27, 0xca, 0xc1, 0x7a, 0x30, 0xec, 0x02, 0xe4, 0xec, 0x62, 0x61, 0x17,
0x50, 0xb6, 0xdd, 0xbc, 0xc9, 0x3a, 0xba, 0xc9, 0xdd, 0xaa, 0x91, 0xda, 0xf2, 0x7c, 0x74, 0x83,
0x05, 0xb0, 0x9b, 0x5d, 0xac, 0xa3, 0x19, 0x58, 0x83, 0x4e, 0x64, 0xb5, 0xe2, 0x20, 0x70, 0x75,
0xb4, 0x83, 0x05, 0xb0, 0x9b, 0x17, 0x58, 0xc7, 0x8b, 0xc0, 0x42, 0xe0, 0xa2, 0xaa, 0xae, 0x5b,
0x17, 0x4a, 0x4b, 0x71, 0x1a, 0xf8, 0x15, 0xb3, 0xf8, 0x16, 0x5b, 0x18, 0xae, 0xaf, 0xcd, 0x96,
0xbb, 0x01, 0x7d, 0x1b, 0xb0, 0x1e, 0x68, 0x0b, 0xbb, 0x9c, 0x22, 0x8d, 0x01, 0x7f, 0xc6, 0xe1,
0x11, 0x72, 0x7b, 0x7b, 0xf4, 0x78, 0xa4, 0x38, 0x8f, 0xff, 0x4c, 0xef, 0x8f, 0x56, 0x5f, 0xc1,
0xfa, 0x80, 0xcb, 0x2c, 0x0c, 0x5f, 0xc6, 0xb2, 0x11, 0x58, 0x07, 0x2c, 0x0e, 0xb9, 0xa2, 0xe9,
0x2c, 0x70, 0x18, 0xd8, 0x8d, 0xe1, 0x29, 0xba, 0x78, 0x91, 0x1f, 0x32, 0x11, 0x76, 0x51, 0xd5,
0x56, 0x9f, 0xc1, 0xca, 0xd7, 0x4b, 0x17, 0xe9, 0xa9, 0x3e, 0x59, 0x96, 0xcf, 0x00, 0x8b, 0x80,
0x1e, 0x2a, 0xef, 0xd8, 0x37, 0x93, 0x53, 0xc0, 0x11, 0x72, 0x1d, 0xfe, 0xfe, 0x09, 0xf4, 0x61,
0x79, 0x19, 0x97, 0x53, 0x01, 0x7f, 0x6e, 0xe8, 0x1a, 0x23, 0x58, 0x67, 0xe3, 0xd2, 0x8d, 0x43,
0x0f, 0x96, 0xb9, 0x40, 0x37, 0xd0, 0xbd, 0x61, 0xc9, 0x86, 0xaf, 0x77, 0x36, 0x75, 0xae, 0x7c,
0xf8, 0xd5, 0x87, 0x8b, 0xba, 0x14, 0x73, 0xf3, 0xf2, 0x9b, 0xed, 0xf1, 0x33, 0xc7, 0xff, 0xf2,
0xec, 0x91, 0x67, 0xff, 0x08, 0x0c, 0x4d, 0xbd, 0x8e, 0x93, 0xa4, 0x7f, 0x7a, 0x37, 0x92, 0x46,
0xd3, 0xd8, 0xc1, 0xf2, 0x61, 0xad, 0xdd, 0x36, 0x92, 0x1e, 0xb9, 0xbb, 0xa3, 0xb7, 0x23, 0x5e,
0xcc, 0xf2, 0xe9, 0xad, 0x69, 0x2f, 0xe1, 0x24, 0xb6, 0x18, 0x63, 0x7a, 0x83, 0xae, 0x2d, 0x4a,
0xa2, 0x7c, 0x81, 0x54, 0x6a, 0x98, 0x82, 0x25, 0x81, 0x50, 0xb0, 0xfc, 0x58, 0x35, 0x11, 0x2a,
0xa5, 0x60, 0x15, 0x2a, 0xa9, 0x8f, 0x83, 0xb5, 0x16, 0xd4, 0x56, 0x2d, 0xa0, 0x60, 0x49, 0x20,
0x14, 0x2c, 0x09, 0x84, 0x82, 0xe5, 0xc3, 0x18, 0x9d, 0xd9, 0x2a, 0xa5, 0x60, 0x15, 0x52, 0x1b,
0xab, 0x0a, 0x14, 0x2c, 0x09, 0x84, 0x82, 0x25, 0x81, 0x50, 0xb0, 0x7c, 0x18, 0x9d, 0xd9, 0x2a,
0xa6, 0x60, 0x55, 0xc8, 0xa2, 0x36, 0x96, 0x1f, 0x05, 0x4b, 0x02, 0xa1, 0x60, 0x49, 0x20, 0x14,
0x2c, 0x09, 0x84, 0x82, 0x55, 0xc8, 0x96, 0x71, 0x81, 0x54, 0x6d, 0xac, 0x3c, 0x0a, 0x56, 0xe5,
0x34, 0x30, 0xdf, 0x87, 0x82, 0x25, 0x81, 0x50, 0xb0, 0x0a, 0xd9, 0x44, 0x2c, 0x61, 0xae, 0x58,
0x70, 0x05, 0x6d, 0xc9, 0xb3, 0x8f, 0x20, 0xeb, 0x9a, 0xd5, 0xc5, 0xfa, 0xc5, 0xeb, 0x89, 0x39,
0x31, 0x83, 0x4e, 0x85, 0x05, 0x8a, 0xea, 0xd7, 0xdd, 0x60, 0x0e, 0xc4, 0x4c, 0x6c, 0xfc, 0xa5,
0x6f, 0xbf, 0xd4, 0x02, 0x30, 0x32, 0x31, 0x92, 0x3d, 0x93, 0x39, 0xe3, 0x8d, 0x65, 0xc6, 0x48,
0x67, 0xd3, 0xb4, 0x26, 0x5b, 0x69, 0x4f, 0xb4, 0x9b, 0xd9, 0xcd, 0xb3, 0x63, 0x06, 0x63, 0xb2,
0x5e, 0x36, 0x05, 0x1c, 0x08, 0xb9, 0xe6, 0x9a, 0xa3, 0x3d, 0xcd, 0x87, 0xb5, 0xb6, 0x89, 0xdc,
0xb0, 0xfd, 0x65, 0xc0, 0xf9, 0xc0, 0x2c, 0xa0, 0x7d, 0xea, 0xed, 0x71, 0x20, 0x05, 0x1c, 0x05,
0xf6, 0x00, 0xaf, 0x19, 0x63, 0xbc, 0x30, 0xea, 0x14, 0x69, 0x38, 0x3a, 0x62, 0xe5, 0xb1, 0xd6,
0x2e, 0x07, 0xbe, 0x4f, 0x69, 0xdb, 0xe6, 0x09, 0x63, 0xcc, 0xae, 0x80, 0x4a, 0x8a, 0x24, 0xb5,
0xb1, 0x0a, 0x6d, 0xb2, 0xd8, 0xef, 0x1e, 0x7b, 0xff, 0xd8, 0xe4, 0x4c, 0x0b, 0x8e, 0x4f, 0x8e,
0xdb, 0xc5, 0x5d, 0x8b, 0x93, 0xc6, 0x98, 0x37, 0x00, 0x05, 0x6b, 0x1a, 0x05, 0xcb, 0xc7, 0xc8,
0xc4, 0x48, 0xf6, 0xc2, 0xfb, 0x2f, 0x4c, 0x14, 0xb3, 0x6c, 0x66, 0x6b, 0xc6, 0x8b, 0x1b, 0x6d,
0xc6, 0x7c, 0xba, 0xdc, 0x20, 0x81, 0x50, 0xb0, 0x24, 0x10, 0x0a, 0x96, 0x0f, 0xdd, 0x2b, 0xac,
0x9c, 0x82, 0x55, 0xa8, 0xb4, 0xc1, 0x14, 0xba, 0x55, 0xe8, 0x4b, 0xc1, 0x92, 0x40, 0x28, 0x58,
0x12, 0x08, 0x05, 0xcb, 0x4f, 0xe9, 0x93, 0x82, 0xa8, 0x8d, 0x95, 0x47, 0xc1, 0x2a, 0x54, 0xce,
0x80, 0x55, 0xc9, 0xa3, 0x60, 0x49, 0x20, 0x14, 0x2c, 0x09, 0x84, 0x82, 0xe5, 0x43, 0x93, 0x82,
0x54, 0x4e, 0xc1, 0x2a, 0xa4, 0x49, 0x41, 0xaa, 0x40, 0xc1, 0x92, 0x40, 0x28, 0x58, 0x12, 0x08,
0x05, 0xcb, 0x87, 0x26, 0x05, 0xa9, 0x9c, 0x82, 0x55, 0x21, 0x4d, 0x0a, 0xe2, 0x4f, 0xc1, 0x92,
0x40, 0x28, 0x58, 0x12, 0x08, 0x05, 0xab, 0x50, 0x39, 0x73, 0x37, 0x48, 0x1e, 0x05, 0xab, 0x72,
0x7a, 0x0e, 0xab, 0x0f, 0x05, 0x4b, 0x02, 0xa1, 0x60, 0x49, 0x20, 0x34, 0x6e, 0xa9, 0x90, 0x4d,
0x38, 0x09, 0xe7, 0x96, 0x15, 0xb7, 0x70, 0x60, 0xf0, 0x00, 0x03, 0xa7, 0x07, 0x48, 0x65, 0x52,
0x8c, 0x66, 0x46, 0x01, 0x48, 0x38, 0x09, 0xda, 0x92, 0x6d, 0x2c, 0xed, 0x5e, 0xca, 0x9a, 0x0b,
0xd6, 0x10, 0x77, 0xe2, 0x0e, 0x3a, 0x15, 0xca, 0x4c, 0xac, 0xb5, 0x97, 0xa7, 0xb3, 0xe9, 0x7f,
0x5b, 0x1f, 0x9e, 0xe7, 0x7d, 0xf4, 0x6f, 0xeb, 0x4d, 0x66, 0xbc, 0xcc, 0x7e, 0x6b, 0xed, 0xe5,
0x61, 0xd7, 0x5d, 0x6b, 0xb4, 0xa7, 0x9d, 0x85, 0xb5, 0xf6, 0x3c, 0x72, 0x93, 0x82, 0xcc, 0x03,
0xda, 0x80, 0x0e, 0x20, 0x06, 0xbc, 0x07, 0x4c, 0x00, 0x03, 0x40, 0x9f, 0x31, 0x66, 0x34, 0xb4,
0x22, 0x45, 0x1a, 0x8d, 0x8e, 0x58, 0x79, 0xac, 0xb5, 0x49, 0xe0, 0x12, 0x4a, 0xdb, 0x36, 0x6f,
0x1b, 0x63, 0x06, 0x03, 0x2a, 0x49, 0xea, 0x81, 0xb5, 0xf6, 0x2e, 0xbf, 0xf6, 0xd5, 0x0c, 0xee,
0x0a, 0xbb, 0xee, 0x5a, 0xa3, 0x5f, 0x85, 0x85, 0x5a, 0xc7, 0x32, 0x63, 0xd9, 0x8d, 0x8f, 0x6d,
0x8c, 0x15, 0xb3, 0xf0, 0xae, 0x1b, 0x77, 0xd9, 0x98, 0x53, 0xd4, 0xa2, 0x0d, 0x45, 0xc1, 0xf2,
0x31, 0xe9, 0x4d, 0xda, 0x17, 0xfe, 0xfb, 0x42, 0x51, 0xcb, 0x5a, 0x34, 0x4c, 0xc7, 0x8f, 0x2e,
0x90, 0x4a, 0x20, 0x14, 0x2c, 0x1f, 0xba, 0x09, 0x5d, 0x39, 0x05, 0xab, 0x50, 0x39, 0x93, 0x82,
0x28, 0x89, 0x79, 0x14, 0x2c, 0x09, 0x84, 0x82, 0x25, 0x81, 0x50, 0xb0, 0xfc, 0x94, 0x3e, 0x29,
0x88, 0xe4, 0x51, 0xb0, 0x0a, 0x69, 0xc0, 0x6a, 0x15, 0x28, 0x58, 0x12, 0x08, 0x05, 0x4b, 0x02,
0xa1, 0x60, 0xf9, 0xd0, 0x75, 0xac, 0xca, 0x29, 0x58, 0x85, 0xd4, 0xc6, 0xaa, 0x82, 0xc6, 0xbd,
0x57, 0xe8, 0x32, 0x1f, 0x87, 0x1e, 0x2c, 0x0b, 0x81, 0x6e, 0x2c, 0xdd, 0xc0, 0xb9, 0x0f, 0xec,
0x7b, 0x60, 0xed, 0x0d, 0x97, 0xde, 0x50, 0xf4, 0x0e, 0x67, 0xb1, 0x66, 0x67, 0xdf, 0xce, 0x6f,
0xe0, 0xb2, 0x00, 0x38, 0x01, 0x0c, 0x61, 0x18, 0xc6, 0xf2, 0x06, 0x70, 0x04, 0x97, 0x86, 0xec,
0x4e, 0x53, 0xff, 0xc1, 0xfa, 0x19, 0xed, 0xa4, 0xf8, 0x3c, 0x86, 0x55, 0x58, 0xbe, 0x00, 0x2c,
0x01, 0x7a, 0x80, 0x16, 0x7c, 0x1e, 0x06, 0x37, 0x38, 0x3a, 0x58, 0xd2, 0x14, 0xdb, 0x16, 0x6b,
0x06, 0xcf, 0x0c, 0x5e, 0x0c, 0x5c, 0x3c, 0xed, 0x9f, 0x1f, 0x72, 0x19, 0x05, 0xfa, 0x81, 0x43,
0x40, 0x1f, 0xd0, 0x47, 0x2b, 0xff, 0xe0, 0x0e, 0xea, 0xba, 0xe7, 0x69, 0x3d, 0x06, 0xcb, 0xb0,
0x8d, 0xcb, 0xf0, 0xb8, 0x1a, 0x58, 0x4f, 0x8a, 0x4b, 0x80, 0x58, 0x88, 0xd3, 0xb1, 0xb7, 0x02,
0x9f, 0x9d, 0x7a, 0x5d, 0x0b, 0xc0, 0x28, 0x59, 0x5c, 0x5e, 0x05, 0x9e, 0xc6, 0xe1, 0x29, 0xee,
0x65, 0x3f, 0x75, 0xf6, 0x6c, 0xe9, 0xfa, 0x09, 0x96, 0xcb, 0x5c, 0xe0, 0x47, 0xc0, 0x4d, 0x78,
0x9c, 0x5f, 0xc9, 0xaa, 0x4a, 0x9d, 0x6d, 0xa6, 0x8c, 0xc6, 0x7e, 0x0c, 0x58, 0x01, 0xac, 0xc0,
0x63, 0x2b, 0x2e, 0x03, 0xc0, 0x43, 0x24, 0xd9, 0xc1, 0x3d, 0x0c, 0x97, 0xba, 0xb2, 0x5a, 0xf4,
0x61, 0xb0, 0x76, 0xd0, 0xc4, 0x7b, 0x7c, 0x07, 0xcb, 0x35, 0xc0, 0x52, 0x72, 0x4f, 0x15, 0x8d,
0x02, 0x03, 0x34, 0x03, 0x49, 0x42, 0x68, 0x44, 0x57, 0x69, 0xd6, 0xe4, 0x05, 0xc0, 0xbd, 0xa4,
0xb9, 0x1d, 0x97, 0x07, 0x81, 0xfb, 0x70, 0x39, 0x59, 0x8d, 0x15, 0x87, 0x25, 0x17, 0x2c, 0x97,
0x85, 0x9c, 0xe4, 0x19, 0xa6, 0xb7, 0x13, 0x24, 0x0c, 0x6d, 0xc0, 0x6d, 0xc0, 0xf5, 0xb8, 0x5c,
0x8b, 0xcb, 0xde, 0xb0, 0x0b, 0x2a, 0x97, 0xc3, 0xcf, 0x69, 0x25, 0xf7, 0x10, 0x47, 0x85, 0xaa,
0x76, 0xcc, 0x07, 0x9e, 0xc3, 0xe5, 0xb2, 0xb0, 0x0b, 0x29, 0x97, 0xc3, 0x28, 0xb7, 0x92, 0x3b,
0xf5, 0x09, 0xb9, 0x53, 0x5b, 0x8d, 0x5c, 0x20, 0x6d, 0x03, 0x7e, 0xcd, 0xef, 0x89, 0x64, 0x87,
0x7a, 0x07, 0xb8, 0x3e, 0xec, 0x22, 0xa2, 0xcc, 0x62, 0x3f, 0x6c, 0xec, 0x17, 0xdb, 0xdc, 0x2a,
0xbe, 0x59, 0xb6, 0x82, 0xd7, 0x59, 0x59, 0x7a, 0x55, 0xe1, 0x73, 0xd0, 0xd1, 0xaa, 0x7a, 0x8a,
0x3d, 0xd0, 0x95, 0x72, 0x40, 0xb4, 0x2c, 0x2f, 0xa7, 0x94, 0xb0, 0x39, 0x40, 0x3a, 0xec, 0x22,
0x6a, 0x89, 0xc5, 0x12, 0x33, 0x31, 0x9a, 0x62, 0x4d, 0x33, 0x2e, 0xdb, 0x9e, 0x6c, 0xc7, 0x60,
0x82, 0x3d, 0x75, 0xda, 0x68, 0x5e, 0x7e, 0x88, 0x03, 0x2f, 0x03, 0x57, 0x86, 0x5d, 0x48, 0xad,
0x38, 0x99, 0x3a, 0x49, 0x4b, 0xa2, 0x85, 0xe1, 0x3b, 0x87, 0x39, 0x78, 0xe2, 0x20, 0x03, 0xa7,
0x07, 0x18, 0xcb, 0x8c, 0x31, 0x96, 0x19, 0x23, 0x6b, 0xb3, 0x24, 0x63, 0x49, 0x3a, 0x9a, 0x3a,
0x58, 0x3c, 0x67, 0x31, 0x97, 0x7e, 0xe2, 0x52, 0x62, 0x26, 0xc6, 0xc9, 0x54, 0x60, 0x57, 0x06,
0xb2, 0xc0, 0xdf, 0x82, 0x5a, 0x79, 0x90, 0x0c, 0x2e, 0xd7, 0x00, 0x7f, 0x08, 0xbb, 0x90, 0x5a,
0xe1, 0x18, 0x87, 0xd5, 0x17, 0xac, 0xe6, 0xaa, 0x9e, 0xab, 0x58, 0xd6, 0xbd, 0x8c, 0x79, 0x6d,
0xf3, 0x68, 0x4d, 0xb6, 0xd2, 0xd9, 0xd4, 0x89, 0x63, 0x1c, 0x4e, 0x4f, 0x9c, 0x66, 0x62, 0x72,
0x82, 0xa3, 0xa7, 0x8e, 0xb2, 0xf7, 0xad, 0xbd, 0xec, 0x19, 0xd8, 0xc3, 0x2b, 0x83, 0xaf, 0xe0,
0x59, 0x9f, 0xfb, 0x43, 0x7e, 0x4a, 0x9b, 0xff, 0xef, 0x97, 0xb8, 0xfc, 0xa0, 0xbc, 0x6f, 0x12,
0xae, 0xdc, 0x57, 0x74, 0xf9, 0x1d, 0x70, 0x5d, 0xb8, 0xa5, 0x48, 0x9e, 0xe7, 0xe9, 0x60, 0x23,
0xb7, 0x93, 0x0a, 0xbb, 0x90, 0x72, 0xe4, 0xee, 0xe2, 0x9f, 0xc7, 0x37, 0x81, 0x9d, 0xe0, 0x77,
0x5b, 0x56, 0x3e, 0x66, 0x1e, 0x70, 0x3f, 0x73, 0xd8, 0x10, 0xd5, 0x50, 0x41, 0xfe, 0x41, 0xd9,
0x65, 0x11, 0x86, 0xaf, 0x61, 0xe9, 0x29, 0x78, 0xaf, 0x96, 0x19, 0xba, 0xa6, 0x7e, 0x3d, 0xf5,
0x10, 0x46, 0x1f, 0xb3, 0xea, 0x4c, 0x6f, 0x9b, 0x01, 0x1e, 0x23, 0x46, 0x2f, 0x5b, 0x39, 0x58,
0xf1, 0xda, 0x42, 0x16, 0x9d, 0xf0, 0x14, 0x63, 0x3b, 0x17, 0x91, 0xe5, 0x46, 0xe0, 0x6a, 0xe0,
0x73, 0xd4, 0xfe, 0xf7, 0xb3, 0xc0, 0x3e, 0x0c, 0x4f, 0x60, 0x79, 0x64, 0xea, 0x66, 0x74, 0x5d,
0xa8, 0xf5, 0x0d, 0x5f, 0xbe, 0xfb, 0xf8, 0x24, 0x93, 0xac, 0x07, 0xd6, 0x00, 0x2b, 0xc9, 0x5d,
0xaf, 0x0b, 0xfb, 0xfb, 0x7a, 0xc0, 0xeb, 0xe4, 0xfa, 0x65, 0xfd, 0x95, 0x38, 0xcf, 0xb0, 0x85,
0xb7, 0x43, 0xae, 0x29, 0x10, 0x61, 0x6f, 0xe8, 0x8f, 0xcf, 0x4f, 0xe9, 0x64, 0xfc, 0x23, 0x1d,
0xfd, 0x7a, 0x80, 0x45, 0xc0, 0x45, 0x40, 0x4b, 0x95, 0x3f, 0x6d, 0x14, 0xa6, 0x7a, 0x90, 0x42,
0x3f, 0x86, 0x7e, 0x2c, 0x87, 0x80, 0x7d, 0xb8, 0xbc, 0x5f, 0xe5, 0xcf, 0xaa, 0x49, 0x8d, 0x13,
0xac, 0xff, 0xc7, 0xa5, 0x85, 0x38, 0xe7, 0xe0, 0xd1, 0xbd, 0xe3, 0xab, 0x3b, 0xee, 0xe8, 0x6c,
0xea, 0xbc, 0xee, 0xa6, 0x27, 0x6f, 0x2a, 0xea, 0x1e, 0xdd, 0xa3, 0x9b, 0x1e, 0xb5, 0xef, 0x8c,
0xbc, 0xf3, 0x9b, 0xcd, 0x7f, 0xda, 0xfc, 0x0b, 0xe2, 0x0c, 0xd3, 0xc2, 0x50, 0x94, 0x1b, 0xdd,
0xd5, 0xa2, 0x60, 0xe5, 0xb1, 0xd6, 0x6e, 0x1b, 0x49, 0x8f, 0xdc, 0xdd, 0xd1, 0xdb, 0x51, 0x54,
0x27, 0xc8, 0xf4, 0xd6, 0xb4, 0x97, 0x70, 0x12, 0x5b, 0x8c, 0x31, 0xbd, 0x41, 0xd7, 0x16, 0x25,
0x1a, 0xa5, 0x23, 0x81, 0x50, 0xb0, 0x24, 0x10, 0x0a, 0x96, 0x1f, 0x4d, 0x0a, 0x52, 0x31, 0x05,
0xab, 0x90, 0x06, 0xac, 0x56, 0x81, 0x82, 0x25, 0x81, 0x50, 0xb0, 0x24, 0x10, 0x0a, 0x96, 0x04,
0x42, 0xc1, 0xf2, 0x51, 0x46, 0x8f, 0x50, 0xb5, 0xb1, 0xf2, 0x28, 0x58, 0x85, 0xca, 0x69, 0xbc,
0x4b, 0x1e, 0x05, 0x4b, 0x02, 0xa1, 0x60, 0x49, 0x20, 0x14, 0x2c, 0x1f, 0xa5, 0x4e, 0x0a, 0x82,
0xda, 0x58, 0x05, 0x14, 0xac, 0x0a, 0x95, 0x32, 0x97, 0x56, 0x23, 0x51, 0xb0, 0x24, 0x10, 0x0a,
0x96, 0x04, 0x42, 0xc1, 0x2a, 0x64, 0x6b, 0x64, 0x52, 0x90, 0x48, 0x53, 0xb0, 0x2a, 0x57, 0x9d,
0x31, 0x3a, 0x75, 0x46, 0xc1, 0x92, 0x40, 0x28, 0x58, 0x85, 0x4a, 0x3a, 0x15, 0xea, 0x79, 0x85,
0xfe, 0xea, 0x67, 0x72, 0xdb, 0xea, 0x49, 0x35, 0xc7, 0x9b, 0x63, 0x87, 0x6f, 0x3d, 0x3c, 0xb9,
0xff, 0xdd, 0xfd, 0xf1, 0x63, 0xa7, 0x8f, 0xf9, 0x4e, 0x0a, 0xb2, 0xe4, 0x9c, 0x25, 0x76, 0xed,
0x82, 0xb5, 0xd9, 0xe6, 0x78, 0x73, 0x1c, 0x34, 0x78, 0x22, 0x9f, 0xf6, 0xb4, 0x3c, 0xd6, 0xda,
0x16, 0x60, 0x13, 0xf0, 0x95, 0x49, 0x3b, 0x79, 0x89, 0xb5, 0x76, 0xbe, 0xc1, 0xb4, 0xc4, 0x4c,
0xac, 0xd5, 0x18, 0xe3, 0x4c, 0x7a, 0x93, 0x67, 0x80, 0x34, 0x86, 0x37, 0xe3, 0x26, 0xfe, 0x12,
0xb0, 0x17, 0x78, 0xda, 0x18, 0x33, 0x16, 0x6a, 0xe1, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x12, 0xb6, 0xff, 0x01, 0x70, 0xda,
0xa4, 0xc4, 0xc6, 0xbc, 0xdf, 0x19, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
0x60, 0x82,
};
const BITMAP_OPAQUE pads_remove_unused_xpm[1] = {{ png, sizeof( png ), "pads_remove_unused_xpm" }};
//EOF

View File

@ -0,0 +1,208 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x90, 0x08, 0x06, 0x00, 0x00, 0x00, 0x16, 0x4d, 0xb9,
0x35, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x55, 0x2d, 0x00, 0x00, 0x55,
0x2d, 0x01, 0x6a, 0xe7, 0x70, 0xe8, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x52, 0x74,
0x45, 0x58, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x43, 0x20,
0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x53, 0x68, 0x61, 0x72,
0x65, 0x41, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72,
0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72,
0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x2d, 0x73, 0x61,
0x2f, 0x34, 0x2e, 0x30, 0x2f, 0xc3, 0x54, 0x62, 0x05, 0x00, 0x00, 0x0b, 0x5b, 0x49, 0x44, 0x41,
0x54, 0x78, 0x9c, 0xed, 0xdd, 0x7d, 0x70, 0x54, 0xd5, 0x19, 0xc7, 0xf1, 0xef, 0xb9, 0xbb, 0x49,
0xd8, 0x04, 0x12, 0x25, 0xc1, 0x60, 0x50, 0x50, 0x82, 0x26, 0x2d, 0x8a, 0xd6, 0x0a, 0xa8, 0xc0,
0xd4, 0x56, 0x1c, 0x3b, 0x03, 0x1d, 0xb1, 0x3a, 0x82, 0xa5, 0xb6, 0xd5, 0xe9, 0x8c, 0x55, 0x8b,
0xd6, 0x69, 0x67, 0x5a, 0x85, 0xb1, 0x47, 0x41, 0xdb, 0x3a, 0xc2, 0xb4, 0x53, 0xeb, 0x4b, 0x47,
0xa5, 0xb4, 0x33, 0xb6, 0x6a, 0x5f, 0x18, 0x28, 0x5a, 0xdf, 0x2a, 0x76, 0x06, 0x6c, 0x03, 0x6d,
0x81, 0xa9, 0xa2, 0x2d, 0x26, 0x4a, 0xd0, 0x20, 0x04, 0x94, 0x10, 0xc2, 0x26, 0xd9, 0xdd, 0xd3,
0x3f, 0xee, 0x42, 0x30, 0xbb, 0x64, 0x5f, 0xc8, 0xdd, 0xb3, 0xf7, 0xee, 0xf3, 0x99, 0xd9, 0x3f,
0x48, 0xce, 0xde, 0xfb, 0x10, 0x7e, 0xec, 0x9e, 0x7b, 0xf6, 0xdc, 0x27, 0x20, 0x84, 0x10, 0x42,
0x08, 0x21, 0x82, 0x4e, 0xd9, 0x2e, 0xa0, 0x68, 0x68, 0x46, 0x00, 0x75, 0x38, 0xd4, 0x62, 0xa8,
0xc3, 0x50, 0x81, 0xa2, 0x0a, 0x00, 0x43, 0x15, 0x50, 0x9e, 0x1c, 0x19, 0x45, 0x71, 0x38, 0xf9,
0xf5, 0x83, 0x28, 0x7a, 0x51, 0x74, 0x12, 0xa2, 0x93, 0x3a, 0x3a, 0xb9, 0x89, 0x7e, 0x2b, 0xf5,
0xfb, 0x50, 0x69, 0x85, 0x6f, 0x29, 0x67, 0x11, 0x67, 0x32, 0x8a, 0x46, 0x0c, 0x93, 0x80, 0x46,
0xe0, 0x4c, 0x60, 0x2c, 0x30, 0x72, 0x98, 0xce, 0x72, 0x00, 0xe8, 0x00, 0xda, 0x80, 0x1d, 0xc7,
0x3c, 0xb6, 0xa1, 0xd9, 0x35, 0x4c, 0xe7, 0x08, 0x84, 0xe0, 0x86, 0x4f, 0x13, 0x46, 0x31, 0x0b,
0xc3, 0xe7, 0x80, 0x69, 0xc9, 0x47, 0xad, 0xe5, 0xaa, 0x3e, 0x00, 0x5a, 0x50, 0xb4, 0x60, 0x78,
0x05, 0xcd, 0x26, 0xc0, 0x58, 0xae, 0xc9, 0x9a, 0x60, 0x85, 0xef, 0x19, 0x42, 0xbc, 0xc9, 0x97,
0x80, 0x2f, 0x03, 0x73, 0x80, 0xd1, 0x96, 0x2b, 0xca, 0xe4, 0x03, 0x60, 0x0d, 0xf0, 0x2c, 0x9a,
0xbf, 0xda, 0x2e, 0xa6, 0xd0, 0x82, 0x11, 0x3e, 0x4d, 0x39, 0xb0, 0x00, 0xb8, 0x0b, 0x68, 0xb2,
0x5c, 0x4d, 0xbe, 0x76, 0x01, 0x2f, 0x01, 0x2d, 0x40, 0xc2, 0x72, 0x2d, 0xb9, 0x51, 0x7c, 0x84,
0xe1, 0xf5, 0x5c, 0xa7, 0x15, 0xfe, 0x0f, 0x9f, 0xe6, 0x12, 0xe0, 0xd7, 0xb8, 0xf3, 0x37, 0x61,
0x4f, 0x02, 0xf8, 0x13, 0x70, 0x1b, 0x9a, 0x0f, 0xb2, 0x79, 0x82, 0xbf, 0xc3, 0xa7, 0x99, 0x0b,
0xfc, 0x81, 0x81, 0x2b, 0x51, 0x61, 0xdf, 0x4e, 0xc2, 0xcc, 0x64, 0x09, 0xed, 0x99, 0x06, 0x3a,
0x85, 0xa8, 0xc6, 0x13, 0x9a, 0xd3, 0x80, 0xdf, 0x21, 0xc1, 0x2b, 0x36, 0xe3, 0x89, 0xf1, 0x64,
0x36, 0x03, 0xfd, 0x1b, 0x3e, 0xf8, 0x01, 0x24, 0xd7, 0xe1, 0xd2, 0x29, 0xd9, 0x6b, 0xc8, 0xa2,
0x30, 0x1b, 0xcd, 0xf9, 0x99, 0x06, 0xf9, 0x39, 0x7c, 0x17, 0x0f, 0xf9, 0xdd, 0x5c, 0x27, 0x14,
0x12, 0xd6, 0xe1, 0x76, 0x69, 0xa6, 0x01, 0x7e, 0x0e, 0xdf, 0xa8, 0x61, 0x3d, 0x9a, 0xbf, 0x67,
0xbf, 0xc5, 0xe8, 0xe4, 0x4c, 0x03, 0xfc, 0x1c, 0xbe, 0x7f, 0xdb, 0x2e, 0x40, 0x0c, 0xe9, 0xfd,
0x4c, 0x03, 0xfc, 0x1c, 0xbe, 0x5f, 0x20, 0x6f, 0x96, 0xc5, 0x2a, 0x06, 0xfc, 0x25, 0xd3, 0xa0,
0x50, 0x01, 0x0a, 0xf1, 0xc6, 0x7a, 0xde, 0xe3, 0x52, 0x6a, 0xc8, 0x34, 0xf7, 0x13, 0x36, 0x3c,
0x86, 0xe6, 0xa9, 0x4c, 0x83, 0xfc, 0x1b, 0x3e, 0x80, 0xf5, 0xbc, 0xc8, 0xe7, 0x31, 0xc0, 0x2c,
0xfc, 0xfd, 0x2a, 0x1e, 0x24, 0x2f, 0x53, 0xcd, 0x0d, 0xbc, 0x40, 0x2c, 0xd3, 0x40, 0x7f, 0x87,
0x0f, 0x60, 0x3d, 0xaf, 0xf1, 0x05, 0xd6, 0x61, 0x18, 0x0b, 0x9c, 0x8d, 0x5c, 0x3a, 0xd8, 0xd2,
0x06, 0xdc, 0x0b, 0xdc, 0xce, 0x9d, 0xf4, 0x65, 0xf3, 0x84, 0x60, 0xfd, 0x43, 0xdd, 0xcb, 0xb9,
0x24, 0xb8, 0x1d, 0x98, 0x87, 0xfd, 0x1d, 0x2c, 0xd9, 0xda, 0x0d, 0x3c, 0x0f, 0xfc, 0x0a, 0x7c,
0xba, 0xe5, 0xaa, 0x8c, 0x43, 0x2c, 0xe6, 0xc3, 0x5c, 0x9f, 0x16, 0xac, 0xf0, 0x1d, 0xe1, 0xee,
0x6e, 0x99, 0x05, 0x5c, 0x89, 0xbb, 0xde, 0x74, 0x0e, 0x10, 0xb6, 0x5a, 0xd3, 0x80, 0x28, 0xee,
0x95, 0xfa, 0xab, 0x38, 0xac, 0xe6, 0x6e, 0x36, 0x53, 0xa2, 0x17, 0x4e, 0xc1, 0x0c, 0xdf, 0x60,
0x2b, 0x88, 0xd0, 0xcd, 0x05, 0x24, 0x98, 0x8a, 0x1b, 0xc4, 0x46, 0x60, 0x12, 0x70, 0x9a, 0x87,
0x67, 0x8d, 0x03, 0x3b, 0x71, 0x37, 0x92, 0xbe, 0x83, 0x62, 0x1b, 0x8a, 0x16, 0xea, 0xd9, 0x26,
0xbb, 0x9d, 0x5d, 0xa5, 0x11, 0xbe, 0xe3, 0x71, 0x43, 0x39, 0x91, 0x04, 0x63, 0x80, 0x53, 0x50,
0x8c, 0xb9, 0xfe, 0xdc, 0xeb, 0x17, 0x86, 0x9d, 0xf0, 0xf4, 0x95, 0x5b, 0x56, 0x66, 0xbc, 0x80,
0x71, 0x94, 0xc3, 0xa2, 0x69, 0x8b, 0x68, 0xfd, 0xa8, 0x75, 0xed, 0xda, 0xff, 0xad, 0x5d, 0x07,
0xec, 0x41, 0xd1, 0x89, 0x62, 0x0f, 0x71, 0xda, 0xd0, 0xd9, 0xcd, 0x7d, 0x4a, 0x55, 0x69, 0x87,
0x2f, 0x0d, 0x63, 0xcc, 0xf2, 0x8e, 0xee, 0x8e, 0x45, 0x0d, 0xcb, 0x1b, 0xca, 0x32, 0x8d, 0x2d,
0x0f, 0x95, 0xd3, 0xbb, 0xa4, 0x17, 0xe0, 0x56, 0xa5, 0xd4, 0xc3, 0xde, 0x57, 0x17, 0x2c, 0xb2,
0x3c, 0x21, 0xac, 0x91, 0xf0, 0x09, 0x6b, 0x24, 0x7c, 0x69, 0xa8, 0x2c, 0x67, 0x23, 0xc6, 0x94,
0xe4, 0x45, 0xea, 0xb0, 0x91, 0xf0, 0xa5, 0xca, 0x27, 0x51, 0x32, 0x77, 0xce, 0x83, 0x84, 0x4f,
0x58, 0x23, 0xe1, 0x13, 0xd6, 0x48, 0xf8, 0xd2, 0x50, 0x2a, 0xcb, 0x39, 0x5f, 0x69, 0x7e, 0x30,
0x31, 0x6c, 0x24, 0x7c, 0xa9, 0x64, 0xce, 0x57, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, 0x4f, 0x58,
0x23, 0xe1, 0x4b, 0x43, 0xd6, 0xf9, 0x0a, 0x43, 0xc2, 0x97, 0x4a, 0xe6, 0x7c, 0x05, 0x22, 0xe1,
0x13, 0xd6, 0x48, 0xf8, 0x84, 0x35, 0x12, 0xbe, 0x34, 0x64, 0x9d, 0xaf, 0x30, 0x24, 0x7c, 0xa9,
0x64, 0xce, 0x57, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, 0x4f, 0x58, 0x23, 0xe1, 0x4b, 0x65, 0x22,
0xe1, 0x88, 0x33, 0x73, 0xfc, 0x4c, 0xaa, 0x2b, 0xaa, 0x8f, 0x3b, 0xa8, 0xbe, 0xaa, 0x9e, 0x79,
0xcd, 0xf3, 0x8e, 0xfc, 0x51, 0xde, 0x76, 0xf3, 0x20, 0x3f, 0xb4, 0x41, 0x8c, 0x31, 0xd7, 0x26,
0x4c, 0x62, 0xa5, 0xa3, 0x9c, 0x4a, 0x80, 0xee, 0xbe, 0xee, 0x78, 0x34, 0x16, 0x4d, 0xf4, 0xc4,
0x7a, 0x30, 0xc6, 0x50, 0xee, 0x94, 0x53, 0x55, 0x5e, 0xe5, 0x54, 0x57, 0x54, 0x87, 0x00, 0xe2,
0x26, 0xfe, 0x51, 0x48, 0x85, 0xae, 0x56, 0x4a, 0xbd, 0x6a, 0xb7, 0x72, 0xff, 0x91, 0xf0, 0xa5,
0x61, 0x8c, 0x29, 0xc7, 0xed, 0x01, 0xd3, 0x04, 0x9c, 0x0a, 0x44, 0x18, 0x68, 0xf9, 0x75, 0x00,
0xe8, 0x05, 0x5a, 0x81, 0xd7, 0x95, 0x52, 0x6f, 0x59, 0x29, 0x52, 0x08, 0x91, 0x3f, 0x79, 0xe5,
0x1b, 0xc4, 0x18, 0x33, 0x1d, 0xb8, 0x31, 0xc7, 0xa7, 0x3d, 0xa5, 0x94, 0x7a, 0xcd, 0x8b, 0x7a,
0x82, 0xac, 0x58, 0x5a, 0x48, 0x14, 0x93, 0xf9, 0xb1, 0x44, 0xec, 0x9b, 0xdb, 0xf7, 0x6e, 0x1f,
0xb2, 0xab, 0x40, 0x82, 0x84, 0x63, 0x8c, 0x71, 0xce, 0x1f, 0x7b, 0x7e, 0x08, 0xd8, 0x02, 0x48,
0xf8, 0x72, 0x24, 0xe1, 0x4b, 0xe3, 0xc3, 0x43, 0x1f, 0xc6, 0xa7, 0x3c, 0x3a, 0xa5, 0x22, 0xd3,
0xb8, 0x8a, 0x50, 0x05, 0xd1, 0x25, 0xd1, 0x42, 0x94, 0x14, 0x48, 0xb2, 0xd4, 0x22, 0xac, 0x91,
0xf0, 0x09, 0x6b, 0x24, 0x7c, 0x69, 0x38, 0x2a, 0xbb, 0x1f, 0xcb, 0x31, 0x1b, 0x0b, 0xe4, 0xc2,
0x2d, 0x0f, 0x12, 0xbe, 0x54, 0xb2, 0x55, 0xa5, 0x40, 0x24, 0x7c, 0xc2, 0x1a, 0x09, 0x9f, 0xb0,
0x46, 0xc2, 0x97, 0x46, 0x1e, 0x37, 0x10, 0xc9, 0x9c, 0x2f, 0x0f, 0x12, 0xbe, 0x54, 0x32, 0xe7,
0x2b, 0x10, 0x09, 0x9f, 0xb0, 0x46, 0xc2, 0x27, 0xac, 0x91, 0xf0, 0xa5, 0x21, 0x37, 0x10, 0x15,
0x86, 0x84, 0x2f, 0x95, 0xdc, 0x40, 0x54, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84, 0x4f, 0x58, 0x23,
0xe1, 0x4b, 0x43, 0x1a, 0x05, 0x15, 0x86, 0x84, 0x2f, 0x95, 0xcc, 0xf9, 0x0a, 0x44, 0xc2, 0x27,
0xac, 0x91, 0xf0, 0x09, 0x6b, 0x24, 0x7c, 0x69, 0xc8, 0x3a, 0x5f, 0x61, 0x48, 0xf8, 0x52, 0xc9,
0x9c, 0xaf, 0x40, 0x24, 0x7c, 0xc2, 0x1a, 0x09, 0x9f, 0xb0, 0x46, 0x6e, 0x9d, 0x4c, 0x65, 0x2a,
0xc3, 0x95, 0xa1, 0xf9, 0x93, 0xe7, 0xb3, 0x65, 0xf7, 0x16, 0x3a, 0xba, 0x3b, 0xe8, 0xea, 0xed,
0xfa, 0xc4, 0x80, 0x48, 0x38, 0x42, 0x73, 0x5d, 0x33, 0x33, 0xc6, 0xcf, 0x38, 0xf2, 0x25, 0x79,
0xdb, 0x15, 0x27, 0xce, 0x18, 0xf3, 0xc5, 0xfe, 0x78, 0x7f, 0xbb, 0x19, 0xe4, 0x70, 0xff, 0xe1,
0xd8, 0xc1, 0xde, 0x83, 0xb1, 0x63, 0xbf, 0x96, 0x48, 0x24, 0x12, 0x7d, 0xf1, 0xbe, 0x37, 0x8c,
0x31, 0xd3, 0x6c, 0xd7, 0xed, 0x47, 0xf2, 0x3f, 0xf6, 0x38, 0x8c, 0x31, 0x93, 0x80, 0x4f, 0xe1,
0x36, 0x0a, 0x1a, 0x89, 0xdb, 0x2c, 0x48, 0x01, 0x51, 0xa0, 0x0b, 0xd8, 0x09, 0x6c, 0x54, 0x4a,
0x75, 0x1d, 0xf7, 0x20, 0x42, 0x88, 0xe2, 0x24, 0xaf, 0x7c, 0x83, 0x18, 0x63, 0xca, 0x80, 0xd3,
0x73, 0x78, 0xca, 0x49, 0x40, 0xbb, 0x52, 0x6a, 0xaf, 0x47, 0x25, 0x89, 0x52, 0x61, 0x8c, 0xd1,
0x83, 0xe7, 0x7b, 0x59, 0xb8, 0xd9, 0x76, 0xdd, 0x7e, 0x24, 0x57, 0xbb, 0xa9, 0xaa, 0xf7, 0x1d,
0xde, 0x17, 0x5b, 0xf0, 0xfb, 0x05, 0x19, 0x7f, 0x36, 0x65, 0x4e, 0x19, 0xcf, 0x2d, 0x7c, 0xae,
0x10, 0x35, 0x05, 0x92, 0x84, 0x2f, 0x8d, 0x68, 0x2c, 0x6a, 0x5e, 0x6e, 0x7d, 0x39, 0xe3, 0xb8,
0x8a, 0x50, 0xc6, 0x46, 0x56, 0x62, 0x08, 0xb2, 0xc8, 0x2c, 0xac, 0x91, 0xf0, 0xa5, 0x91, 0x47,
0xa3, 0x20, 0x91, 0x07, 0x09, 0x5f, 0x2a, 0xd9, 0x58, 0x50, 0x20, 0x12, 0x3e, 0x61, 0x8d, 0x84,
0x4f, 0x58, 0x23, 0xe1, 0x4b, 0x43, 0x6e, 0x20, 0x2a, 0x0c, 0x09, 0x5f, 0x2a, 0x99, 0xf3, 0x15,
0x88, 0x84, 0x4f, 0x58, 0x23, 0xe1, 0x13, 0xd6, 0x48, 0xf8, 0x84, 0x35, 0x12, 0xbe, 0x34, 0xf2,
0xb8, 0x7b, 0x4d, 0xe6, 0x7c, 0x79, 0x28, 0xdd, 0xcf, 0x76, 0x35, 0x95, 0x38, 0x34, 0x62, 0x38,
0x03, 0xa8, 0xc3, 0x50, 0x0b, 0xd4, 0x3f, 0xfd, 0x9f, 0xa7, 0xaf, 0x98, 0x35, 0x61, 0x56, 0x28,
0x97, 0x43, 0x3d, 0xb8, 0xf1, 0xc1, 0xaf, 0xa0, 0x69, 0x00, 0x3a, 0x8f, 0x79, 0xb4, 0x32, 0x9a,
0x36, 0x6e, 0xa3, 0x77, 0xd8, 0x6b, 0x0f, 0x88, 0xe0, 0x87, 0x4f, 0x13, 0x06, 0xce, 0x01, 0xa6,
0x01, 0x53, 0x81, 0xb3, 0x81, 0x49, 0x40, 0x03, 0x89, 0xd4, 0xe1, 0xed, 0x5d, 0xed, 0x24, 0x4c,
0x9a, 0x6f, 0x0c, 0xe1, 0xbd, 0x03, 0xef, 0x5d, 0x8c, 0xfb, 0x2b, 0x52, 0x3f, 0x69, 0x3f, 0x09,
0x34, 0xed, 0xc0, 0x0e, 0xe0, 0x6d, 0x14, 0x2d, 0x38, 0xb4, 0x10, 0xe7, 0x6d, 0x74, 0xba, 0xb3,
0x97, 0x96, 0x60, 0x86, 0x6f, 0x29, 0x67, 0x11, 0xe7, 0x2a, 0x60, 0x0e, 0x70, 0x21, 0x50, 0x69,
0xa9, 0x12, 0x07, 0x98, 0x90, 0x7c, 0x5c, 0x86, 0xe1, 0x16, 0xe2, 0x00, 0x1c, 0x40, 0xf3, 0x77,
0x60, 0x0d, 0xb0, 0x06, 0xcd, 0x2e, 0x4b, 0xf5, 0x59, 0x15, 0x9c, 0xf0, 0x69, 0xaa, 0x51, 0xdc,
0x8c, 0xe1, 0x6b, 0xc4, 0xf9, 0xf4, 0x89, 0x1c, 0x2a, 0xeb, 0x39, 0x5f, 0x72, 0x91, 0x39, 0xdb,
0x45, 0xe9, 0x63, 0xd4, 0x00, 0x57, 0x24, 0x1f, 0x0f, 0xa1, 0xd9, 0x0c, 0x3c, 0xce, 0x68, 0x56,
0x95, 0xd2, 0xdb, 0xf4, 0x40, 0xf8, 0x9e, 0x21, 0xc4, 0x76, 0xae, 0xc5, 0x70, 0x35, 0xee, 0x6f,
0xd8, 0xb6, 0xf5, 0x6a, 0x91, 0x2b, 0x07, 0x45, 0x0d, 0x86, 0x1a, 0xcc, 0x89, 0x5f, 0x40, 0x59,
0xd8, 0xa9, 0xa2, 0x70, 0xa7, 0x03, 0x53, 0xd9, 0xcf, 0x0f, 0xb9, 0x87, 0x15, 0x9c, 0xcc, 0x43,
0xa5, 0x10, 0x42, 0x37, 0x7c, 0xf7, 0x51, 0xcf, 0x9b, 0xac, 0x06, 0x2e, 0xb2, 0x5b, 0x4e, 0x9e,
0x82, 0xf3, 0x29, 0x57, 0x03, 0x86, 0x07, 0xd9, 0xcf, 0xf5, 0x68, 0xae, 0x41, 0xb3, 0xc3, 0x76,
0x41, 0x5e, 0x72, 0xd0, 0x8c, 0xa0, 0x9f, 0xe7, 0xf1, 0x6b, 0xf0, 0x82, 0xe9, 0x3c, 0x60, 0x3d,
0xcb, 0x98, 0x60, 0xbb, 0x10, 0x2f, 0x39, 0x28, 0x6e, 0x02, 0x3e, 0x63, 0xbb, 0x90, 0x62, 0x92,
0xf5, 0xc6, 0x02, 0x6f, 0x5f, 0x72, 0xc7, 0x11, 0xe3, 0x21, 0x2f, 0x4f, 0x60, 0x9b, 0x83, 0x61,
0xa1, 0xed, 0x22, 0x8a, 0x49, 0x3e, 0x3b, 0x55, 0xb2, 0xbd, 0x40, 0xc9, 0xc3, 0x5c, 0x34, 0x13,
0xbd, 0x3a, 0xb8, 0x6d, 0x0e, 0x30, 0xd9, 0x76, 0x11, 0x62, 0x48, 0x17, 0xd8, 0x2e, 0xc0, 0x2b,
0x0e, 0x24, 0x57, 0x9e, 0x04, 0xe0, 0xbe, 0x95, 0x66, 0x7b, 0x0f, 0xc7, 0x91, 0x71, 0x79, 0x2c,
0xb5, 0xe4, 0xa2, 0xdb, 0xcb, 0x83, 0xdb, 0x14, 0x06, 0xb6, 0x00, 0xb3, 0x6c, 0x17, 0x52, 0x2c,
0x7a, 0xfa, 0x7b, 0x18, 0x3b, 0x72, 0x2c, 0x3b, 0xef, 0xd8, 0xc9, 0x96, 0x0e, 0xb7, 0x4b, 0xd5,
0xc7, 0xd1, 0x8f, 0x89, 0xc6, 0xa2, 0xc4, 0x12, 0x31, 0xaa, 0xca, 0xab, 0x18, 0x55, 0x3e, 0x8a,
0xa6, 0xba, 0x26, 0xa6, 0x8f, 0x9b, 0x0e, 0xc0, 0xa1, 0xfe, 0x43, 0x5e, 0x95, 0x13, 0x03, 0x36,
0x7b, 0x75, 0x70, 0xdb, 0x14, 0x9a, 0x6f, 0x00, 0x2b, 0x6d, 0x17, 0x52, 0x2c, 0x22, 0xe1, 0x08,
0x73, 0xcf, 0x9e, 0xcb, 0xec, 0x89, 0xb3, 0x69, 0xae, 0x6b, 0x66, 0x5c, 0xf5, 0x38, 0x22, 0xe1,
0x08, 0x91, 0xb2, 0x08, 0x0a, 0x45, 0x34, 0x16, 0xa5, 0xa7, 0xbf, 0x87, 0xb6, 0x8f, 0xdb, 0xd8,
0xb0, 0x73, 0x03, 0x1b, 0xdb, 0x37, 0xf2, 0x4a, 0xdb, 0x2b, 0xc4, 0x12, 0x31, 0x2f, 0xca, 0xf9,
0x19, 0x9a, 0xef, 0x78, 0x71, 0xe0, 0x62, 0xa0, 0xd0, 0x38, 0xc0, 0x0b, 0xc0, 0x6c, 0xdb, 0xc5,
0x88, 0x4f, 0x78, 0x15, 0xf7, 0x82, 0xa3, 0xc7, 0x76, 0x21, 0x5e, 0x71, 0xd0, 0x24, 0xa8, 0x62,
0x1e, 0xf0, 0xac, 0xed, 0x62, 0xc4, 0x51, 0xbf, 0x24, 0xe0, 0xc1, 0x83, 0xc1, 0xfb, 0xd0, 0xee,
0xe5, 0x62, 0x12, 0x5c, 0x83, 0xfb, 0xf1, 0x9a, 0x9f, 0x7a, 0x41, 0x9c, 0x04, 0xc9, 0xad, 0x51,
0xfe, 0x65, 0x80, 0x75, 0xc0, 0x7d, 0xc9, 0x4d, 0x07, 0x81, 0x17, 0xac, 0x4d, 0x90, 0xee, 0x7f,
0x9e, 0xaf, 0x03, 0x57, 0x02, 0x63, 0x6d, 0x97, 0x93, 0xa5, 0x56, 0x60, 0x35, 0xf0, 0x04, 0x9a,
0x37, 0x6d, 0x17, 0x53, 0x48, 0xc1, 0x0a, 0xdf, 0x11, 0x1a, 0x07, 0x87, 0xe9, 0x24, 0x98, 0x83,
0xbb, 0xcf, 0xee, 0x42, 0xa0, 0xda, 0x72, 0x55, 0x47, 0x74, 0x02, 0x2d, 0xc0, 0xeb, 0x38, 0xac,
0xe5, 0x6e, 0xb6, 0xda, 0x2e, 0xc8, 0x96, 0x60, 0x86, 0x6f, 0x30, 0xf7, 0xa2, 0xaa, 0x19, 0x37,
0x84, 0x4d, 0x40, 0x23, 0xee, 0x86, 0xd2, 0x46, 0xdc, 0xb7, 0x6c, 0x2f, 0x74, 0xe2, 0x6e, 0x22,
0x7d, 0x07, 0xd8, 0x81, 0x62, 0x3b, 0x86, 0x4d, 0x68, 0x5a, 0x3d, 0x3a, 0x9f, 0xef, 0x94, 0x46,
0xf8, 0x86, 0xf2, 0x63, 0x6a, 0x88, 0x52, 0x8f, 0x43, 0x2d, 0x86, 0xba, 0xc5, 0x33, 0x17, 0x7f,
0x5b, 0x29, 0x75, 0xd9, 0xb2, 0xbf, 0x2d, 0xcb, 0xb8, 0x95, 0x3e, 0xe4, 0x84, 0x78, 0x60, 0xf6,
0x03, 0xec, 0xd8, 0xbf, 0x63, 0xd5, 0x23, 0x9b, 0x1f, 0x79, 0x06, 0x87, 0x7d, 0x24, 0xd8, 0x0b,
0xec, 0x41, 0x07, 0x77, 0x71, 0x78, 0xb8, 0x48, 0xf8, 0x06, 0x31, 0xc6, 0x2c, 0xef, 0xe8, 0xee,
0x58, 0xd4, 0xb0, 0xbc, 0xa1, 0x2c, 0xd3, 0xd8, 0xf2, 0x50, 0x39, 0xbd, 0x4b, 0x7a, 0x01, 0x6e,
0x55, 0x4a, 0x3d, 0xec, 0x7d, 0x75, 0xc1, 0x22, 0x77, 0xaf, 0x09, 0x6b, 0x24, 0x7c, 0xc2, 0x1a,
0x09, 0x9f, 0xb0, 0x46, 0xc2, 0x97, 0x46, 0x1e, 0x5d, 0xaa, 0x64, 0xee, 0x9c, 0x07, 0x09, 0x5f,
0xaa, 0xe0, 0xdc, 0x11, 0x52, 0xe4, 0x24, 0x7c, 0xc2, 0x1a, 0x09, 0x9f, 0xb0, 0x46, 0xc2, 0x97,
0x86, 0x34, 0x0a, 0x2a, 0x8c, 0xe0, 0x74, 0x2c, 0xc8, 0x85, 0xdb, 0xbf, 0xe5, 0x0c, 0x14, 0x8d,
0x18, 0x26, 0x00, 0xa7, 0xe0, 0xee, 0x88, 0xa9, 0x5d, 0xb5, 0x75, 0xd5, 0x8c, 0xd9, 0x13, 0x67,
0xe7, 0xf4, 0x73, 0x59, 0xfa, 0xda, 0xd2, 0x6f, 0xa1, 0x99, 0x8a, 0xfb, 0x91, 0xda, 0x3e, 0x60,
0x37, 0xf0, 0x2e, 0x61, 0xde, 0x21, 0x46, 0xbb, 0xf4, 0x65, 0x49, 0x2f, 0xf8, 0xe1, 0xbb, 0x9f,
0x31, 0xf4, 0x31, 0x95, 0x81, 0x46, 0x41, 0x4d, 0xb8, 0xbd, 0x53, 0xc2, 0xe9, 0x2e, 0x2d, 0xf6,
0x1e, 0xda, 0x9b, 0xf3, 0x1d, 0x6c, 0x7b, 0x7a, 0xf6, 0x4c, 0x26, 0xdd, 0x8d, 0x58, 0xee, 0xe6,
0xe6, 0x5e, 0x34, 0x6d, 0xc0, 0x76, 0x14, 0x9b, 0x80, 0x96, 0xe4, 0x67, 0xbc, 0x25, 0xff, 0xab,
0x52, 0x83, 0x17, 0x3e, 0x4d, 0x18, 0xc5, 0x2c, 0x0c, 0x57, 0x02, 0x73, 0xe8, 0x63, 0x92, 0xe5,
0x8a, 0x2a, 0x70, 0x37, 0x35, 0x34, 0x63, 0xb8, 0x2a, 0xf9, 0xb5, 0x04, 0x9a, 0x37, 0x80, 0x3f,
0x03, 0xab, 0xd1, 0x6c, 0xa2, 0x04, 0xaf, 0xb2, 0x83, 0x13, 0x3e, 0xcd, 0x78, 0xe0, 0xbb, 0xc0,
0xc2, 0x64, 0xaf, 0xbd, 0xbc, 0xe5, 0xda, 0x28, 0x28, 0x0f, 0x0e, 0x70, 0x6e, 0xf2, 0x71, 0x27,
0x9a, 0xf7, 0x81, 0x27, 0x80, 0x9f, 0xa3, 0xe9, 0xcc, 0xf7, 0xa0, 0x7e, 0xe3, 0xff, 0x0b, 0x0e,
0xcd, 0x69, 0x68, 0x9e, 0xc4, 0xdd, 0xbe, 0x74, 0x1b, 0x9c, 0x58, 0xf0, 0xf2, 0xe9, 0x42, 0x30,
0x0c, 0xb7, 0x4e, 0x8e, 0x03, 0xee, 0x06, 0xde, 0x45, 0xb3, 0x02, 0xed, 0xd9, 0x36, 0xaf, 0xa2,
0xe2, 0xef, 0xf0, 0xdd, 0xc3, 0x1c, 0x60, 0x1b, 0x70, 0x03, 0x90, 0x71, 0x17, 0x8a, 0x0f, 0x54,
0x01, 0x77, 0x00, 0xdb, 0xd0, 0x5c, 0x68, 0xbb, 0x18, 0xaf, 0xf9, 0x37, 0x7c, 0xf7, 0x70, 0x39,
0x86, 0x3f, 0x02, 0x27, 0xdb, 0x2e, 0xc5, 0x03, 0xa7, 0x03, 0x2f, 0xa1, 0x39, 0xc7, 0x76, 0x21,
0x5e, 0xf2, 0x67, 0xf8, 0x34, 0x23, 0x30, 0x3c, 0x06, 0x94, 0x7b, 0x71, 0xf8, 0x22, 0x69, 0x14,
0x74, 0x12, 0xf0, 0x28, 0x01, 0x5e, 0x43, 0xf4, 0x67, 0xf8, 0x14, 0x97, 0x03, 0x67, 0x7a, 0x71,
0xe8, 0x82, 0x34, 0x0a, 0xca, 0xfe, 0x14, 0x33, 0xd0, 0xc1, 0xed, 0xa5, 0xe3, 0xcf, 0xf0, 0xc1,
0x14, 0xdb, 0x05, 0x9c, 0x90, 0x5c, 0xb2, 0xaa, 0x38, 0xcf, 0xb3, 0x3a, 0x2c, 0xf3, 0x6b, 0xf8,
0xf6, 0xdb, 0x2e, 0xa0, 0x80, 0x02, 0xbb, 0xf4, 0xe2, 0xcf, 0x75, 0x3e, 0xc3, 0x06, 0xdc, 0x37,
0xaf, 0x61, 0x9f, 0x0f, 0xc5, 0x12, 0x31, 0xea, 0x47, 0xd6, 0xb3, 0xe6, 0xba, 0x35, 0x6c, 0xdd,
0xbd, 0x95, 0x5d, 0x5d, 0xbb, 0x38, 0xd4, 0x7f, 0xe8, 0x68, 0xa3, 0xa0, 0x8a, 0x50, 0x05, 0x35,
0x23, 0x6a, 0x68, 0xaa, 0x6d, 0xe2, 0x92, 0xd3, 0x2f, 0x01, 0x20, 0x9e, 0xf0, 0xac, 0xd1, 0x57,
0x2f, 0x65, 0x41, 0x6e, 0x14, 0xe4, 0x57, 0x9a, 0xdf, 0x02, 0x0b, 0x86, 0xfb, 0xb0, 0x0d, 0xa3,
0x1a, 0xb8, 0x65, 0xea, 0x2d, 0x47, 0x1b, 0x05, 0xd5, 0x54, 0xd4, 0xa4, 0x1d, 0xd7, 0xd9, 0xd3,
0xc9, 0xc6, 0xf6, 0x8d, 0x6c, 0x68, 0xdf, 0xc0, 0xe3, 0xff, 0x7a, 0x9c, 0xfd, 0x87, 0x3d, 0x79,
0x31, 0xfe, 0x11, 0x9a, 0xbb, 0xbc, 0x38, 0x70, 0x31, 0xf0, 0x6f, 0xf8, 0xdc, 0x5b, 0x1e, 0x5f,
0xc4, 0xfd, 0xcc, 0x76, 0xf8, 0x0c, 0x7a, 0x3d, 0xad, 0x2c, 0xab, 0x24, 0x12, 0x8e, 0x50, 0x33,
0xc2, 0x0d, 0x61, 0x77, 0x5f, 0x37, 0xd1, 0x58, 0x94, 0xae, 0x5e, 0xcf, 0x3f, 0x9a, 0x5d, 0x0d,
0xcc, 0x47, 0xd3, 0xe7, 0xf5, 0x89, 0x6c, 0xf1, 0x6f, 0xf8, 0x00, 0x34, 0x23, 0x81, 0x9f, 0x02,
0x37, 0xe2, 0xf7, 0xbf, 0xcb, 0x80, 0x18, 0xf0, 0x00, 0xa7, 0xa2, 0xb9, 0x89, 0x7e, 0xdb, 0xc5,
0x78, 0x29, 0x18, 0xff, 0x60, 0x9a, 0x29, 0xc0, 0xf7, 0x80, 0xeb, 0xf0, 0xeb, 0x3c, 0x16, 0xfa,
0x80, 0xa7, 0x81, 0x65, 0x68, 0xfe, 0x6b, 0xbb, 0x98, 0x42, 0x08, 0x46, 0xf8, 0x8e, 0x70, 0x7f,
0xed, 0xd5, 0x57, 0x81, 0x79, 0xf8, 0x63, 0x39, 0x26, 0x01, 0xfc, 0x03, 0x58, 0x4d, 0x19, 0xbf,
0x61, 0x31, 0x1d, 0xb6, 0x0b, 0x2a, 0xa4, 0x60, 0x85, 0xef, 0x58, 0x9a, 0x89, 0x28, 0xe6, 0x60,
0xb8, 0x08, 0x77, 0x5e, 0x68, 0x7b, 0x6b, 0x15, 0xb8, 0x61, 0xdb, 0x8e, 0xdb, 0x28, 0x68, 0x23,
0x65, 0xac, 0x2b, 0xb5, 0xc0, 0x1d, 0x2b, 0xb8, 0xe1, 0x1b, 0xec, 0x7e, 0x6a, 0xe9, 0xe3, 0xb3,
0x28, 0x9a, 0x30, 0x4c, 0x82, 0xa3, 0x8f, 0x09, 0x0c, 0x7f, 0x2f, 0xc2, 0x1e, 0xdc, 0xd6, 0x67,
0x3b, 0x18, 0x68, 0x16, 0xf4, 0x16, 0x11, 0xfe, 0xc9, 0xf7, 0x39, 0x38, 0xcc, 0xe7, 0xf2, 0xad,
0xd2, 0x09, 0xdf, 0x50, 0x7e, 0xc2, 0x28, 0x0e, 0x33, 0x06, 0x87, 0x31, 0x18, 0xea, 0x80, 0xd1,
0x18, 0x22, 0x00, 0xa8, 0xe4, 0xc6, 0x05, 0x43, 0x04, 0x45, 0x1c, 0xe8, 0xc3, 0x10, 0x87, 0xa3,
0x3b, 0x91, 0xbb, 0x81, 0xfd, 0x38, 0xec, 0x4d, 0x36, 0x09, 0xea, 0x0c, 0x7a, 0x47, 0x51, 0x21,
0x84, 0x10, 0x42, 0x08, 0x21, 0xb2, 0xf5, 0x7f, 0xca, 0xef, 0x2f, 0x6b, 0x77, 0x6b, 0xc4, 0x1d,
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE pads_remove_unused_keep_bottom_xpm[1] = {{ png, sizeof( png ), "pads_remove_unused_keep_bottom_xpm" }};
//EOF

View File

@ -0,0 +1,263 @@
/* Do not modify this file, it was automatically generated by the
* PNG2cpp CMake script, using a *.png file as input.
*/
#include <bitmaps_png/bitmaps_list.h>
static const unsigned char png[] = {
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x90, 0x08, 0x06, 0x00, 0x00, 0x00, 0x16, 0x4d, 0xb9,
0x35, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x55, 0x2d, 0x00, 0x00, 0x55,
0x2d, 0x01, 0x6a, 0xe7, 0x70, 0xe8, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x52, 0x74,
0x45, 0x58, 0x74, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x00, 0x43, 0x43, 0x20,
0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x53, 0x68, 0x61, 0x72,
0x65, 0x41, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72,
0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72,
0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x62, 0x79, 0x2d, 0x73, 0x61,
0x2f, 0x34, 0x2e, 0x30, 0x2f, 0xc3, 0x54, 0x62, 0x05, 0x00, 0x00, 0x0e, 0xc3, 0x49, 0x44, 0x41,
0x54, 0x78, 0x9c, 0xed, 0xdd, 0x7b, 0x94, 0x1e, 0x75, 0x7d, 0xc7, 0xf1, 0xd7, 0x3c, 0xbb, 0x9b,
0xb0, 0xb9, 0x2d, 0x90, 0x0d, 0xb9, 0x80, 0x44, 0x48, 0x60, 0x93, 0x72, 0x6b, 0xd1, 0x70, 0x91,
0xc4, 0xd2, 0x12, 0xeb, 0x69, 0xa1, 0x82, 0x0a, 0x05, 0x54, 0x6c, 0xb5, 0xe7, 0xa8, 0x05, 0xc1,
0x5a, 0x3d, 0x07, 0x35, 0x5e, 0x26, 0x10, 0x15, 0x11, 0xa9, 0xa5, 0x88, 0x55, 0x41, 0x8a, 0xf4,
0xb4, 0x80, 0xd5, 0x72, 0x82, 0xd4, 0x0b, 0x4d, 0x09, 0x7a, 0x08, 0x75, 0x83, 0x92, 0xe4, 0xa8,
0x88, 0xe6, 0x02, 0x49, 0x30, 0x17, 0x96, 0x40, 0x62, 0x12, 0x76, 0x93, 0xdd, 0x67, 0xfa, 0xc7,
0x3c, 0xbb, 0x09, 0xc9, 0xc2, 0x5e, 0xf2, 0xcc, 0xce, 0x33, 0xf3, 0xcc, 0xfb, 0x9c, 0x39, 0x39,
0xe7, 0xc9, 0x3c, 0xbf, 0xdf, 0x67, 0x93, 0xcf, 0xce, 0xfc, 0x2e, 0xdf, 0xf9, 0x0c, 0x05, 0x05,
0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x79, 0x27, 0x48, 0x5b, 0x40, 0xcd, 0x10, 0x3a, 0x0c,
0xad, 0x4a, 0x26, 0x8a, 0xb4, 0x8a, 0x8c, 0x16, 0x18, 0x0b, 0x22, 0x63, 0x31, 0xaa, 0x72, 0x66,
0xa7, 0xc0, 0x4b, 0x95, 0xcf, 0x7f, 0x2f, 0xd0, 0x25, 0xd0, 0xa1, 0x41, 0x87, 0x56, 0x1d, 0xde,
0x6f, 0x6f, 0x2a, 0xfa, 0x33, 0x48, 0x7d, 0x99, 0xef, 0x7a, 0x27, 0xe8, 0x71, 0x92, 0xc0, 0x0c,
0x91, 0x99, 0x98, 0x81, 0xe3, 0x30, 0x05, 0xe3, 0xaa, 0xd4, 0xcb, 0x76, 0x6c, 0xc2, 0x3a, 0xac,
0xde, 0xef, 0x58, 0x25, 0xb4, 0xb1, 0x4a, 0x7d, 0xe4, 0x82, 0xfc, 0x9a, 0x2f, 0xd4, 0x28, 0x30,
0x4f, 0xe4, 0x8f, 0x71, 0x46, 0xe5, 0x98, 0x98, 0xb2, 0xaa, 0xdf, 0xa1, 0x5d, 0xa0, 0x5d, 0x64,
0x89, 0xd0, 0x72, 0x44, 0x29, 0x6b, 0x4a, 0x8d, 0x7c, 0x99, 0xef, 0x3e, 0x0d, 0x7e, 0xe5, 0x2f,
0xf1, 0x36, 0x9c, 0x8f, 0x23, 0x53, 0x56, 0x34, 0x10, 0xbf, 0xc3, 0x62, 0x7c, 0x5b, 0xe8, 0x7f,
0xd3, 0x16, 0x33, 0xd2, 0xe4, 0xc3, 0x7c, 0xa1, 0x51, 0xb8, 0x0c, 0x9f, 0x40, 0x5b, 0xca, 0x6a,
0x86, 0xcb, 0x46, 0x3c, 0x84, 0x76, 0x94, 0x53, 0xd6, 0x32, 0x34, 0x02, 0x2f, 0x88, 0x3c, 0x36,
0xd4, 0x61, 0x45, 0xf6, 0xcd, 0x17, 0x7a, 0x03, 0xbe, 0x25, 0x1e, 0xbf, 0x15, 0xa4, 0x47, 0x19,
0xff, 0x85, 0x6b, 0x84, 0x7e, 0x37, 0x98, 0x2f, 0x64, 0xdb, 0x7c, 0xa1, 0x0b, 0xf0, 0x1d, 0xfb,
0x66, 0xa2, 0x05, 0xe9, 0xb3, 0x5e, 0xa3, 0xb9, 0x3e, 0x69, 0xc3, 0x40, 0x27, 0x96, 0x46, 0x42,
0x4d, 0x22, 0x84, 0x8e, 0xc1, 0x3d, 0x0a, 0xe3, 0xd5, 0x1a, 0xc7, 0xea, 0xf6, 0xcd, 0xc1, 0x9c,
0x98, 0x5d, 0xf3, 0xf1, 0x31, 0x2a, 0xeb, 0x70, 0xfd, 0x51, 0xb7, 0x73, 0xc8, 0x9a, 0x60, 0xbe,
0xd0, 0x1f, 0x0e, 0x74, 0x52, 0x96, 0xcd, 0x77, 0xf6, 0xab, 0xfe, 0xed, 0x50, 0x07, 0x14, 0x85,
0x59, 0xab, 0xcd, 0xb9, 0x03, 0x9d, 0x90, 0x65, 0xf3, 0x8d, 0xaf, 0x6a, 0x6b, 0xd9, 0x1e, 0xfd,
0xd6, 0x22, 0x47, 0x0c, 0x74, 0x42, 0x96, 0xcd, 0xf7, 0x44, 0xda, 0x02, 0x0a, 0x5e, 0x95, 0x67,
0x07, 0x3a, 0x21, 0xcb, 0xe6, 0xfb, 0x8a, 0xe2, 0x66, 0x59, 0xab, 0x74, 0xe3, 0x07, 0x03, 0x9d,
0xd4, 0x30, 0x02, 0x42, 0x92, 0x61, 0xa9, 0x67, 0x9c, 0xab, 0xc5, 0x40, 0x63, 0xbf, 0x82, 0x34,
0xf8, 0x9a, 0xd0, 0xbf, 0x0f, 0x74, 0x52, 0x76, 0xcd, 0x07, 0x4b, 0xfd, 0xc8, 0x9f, 0x88, 0x30,
0x4f, 0xb6, 0xaf, 0xe2, 0x79, 0xe2, 0x7f, 0x4c, 0xf0, 0x1e, 0x3f, 0xd4, 0x3d, 0xd0, 0x89, 0xd9,
0x36, 0x1f, 0x2c, 0xf5, 0x88, 0x3f, 0xf5, 0xa0, 0xc8, 0x14, 0x9c, 0xa8, 0x98, 0x3a, 0xa4, 0xc5,
0x3a, 0x5c, 0x87, 0x0f, 0xf9, 0xb8, 0x3d, 0x83, 0xf9, 0x42, 0xbe, 0xfe, 0xa3, 0xae, 0x73, 0x8a,
0xb2, 0x0f, 0xe1, 0x22, 0xe9, 0x57, 0xb0, 0x0c, 0x96, 0xcd, 0xf8, 0x3e, 0xfe, 0x95, 0x8c, 0x96,
0x5c, 0x35, 0xd9, 0x65, 0x81, 0x2d, 0x43, 0xfd, 0x5a, 0xbe, 0xcc, 0xd7, 0x4b, 0x5c, 0xdd, 0x32,
0x0f, 0x17, 0x8a, 0xd7, 0x9b, 0x4e, 0x46, 0x63, 0xaa, 0x9a, 0xf6, 0xd1, 0x29, 0x9e, 0xa9, 0x3f,
0xac, 0xe4, 0x7e, 0x9f, 0xf6, 0xb8, 0x3a, 0x9d, 0x38, 0xe5, 0xd3, 0x7c, 0x07, 0x72, 0xb3, 0x66,
0x3b, 0x9d, 0xae, 0x6c, 0x8e, 0xd8, 0x88, 0x33, 0x30, 0x13, 0xc7, 0x24, 0xd8, 0x6b, 0x0f, 0xd6,
0x8b, 0x0b, 0x49, 0xd7, 0x08, 0xac, 0x12, 0x68, 0x37, 0xd9, 0xaa, 0xa2, 0xda, 0x39, 0xa6, 0x3e,
0xcc, 0xf7, 0x4a, 0xc4, 0xa6, 0x3c, 0x5e, 0xd9, 0x24, 0x1c, 0x25, 0x30, 0xe9, 0x8a, 0x53, 0xae,
0x78, 0x67, 0x63, 0xa9, 0xf1, 0xcc, 0x3b, 0x57, 0xdc, 0x39, 0xe0, 0x04, 0xa6, 0x14, 0x94, 0x5c,
0x7d, 0xc6, 0xd5, 0xd6, 0xbe, 0xb0, 0xf6, 0x81, 0x07, 0x7e, 0xfb, 0xc0, 0x83, 0xd8, 0x2a, 0xd0,
0x21, 0xb0, 0x55, 0x8f, 0x75, 0xc2, 0xc1, 0x8d, 0x7d, 0xea, 0x95, 0xfa, 0x36, 0x5f, 0x3f, 0x44,
0x51, 0xf4, 0xa5, 0x4d, 0x3b, 0x37, 0x5d, 0x3d, 0xed, 0x4b, 0xd3, 0x9a, 0x06, 0x3a, 0x77, 0x54,
0xc3, 0x28, 0x5d, 0x9f, 0xec, 0x82, 0xab, 0x82, 0x20, 0xb8, 0x2d, 0x79, 0x75, 0xf9, 0xa2, 0x58,
0x9e, 0x28, 0x48, 0x8d, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x82, 0x41, 0x8e, 0x46,
0xa2, 0xa8, 0x2e, 0x27, 0xa9, 0x55, 0xa3, 0x30, 0xdf, 0xc1, 0x0c, 0xc7, 0x51, 0xc5, 0xd8, 0x79,
0x18, 0x14, 0xe6, 0x2b, 0x48, 0x8d, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x82, 0x60,
0x90, 0x63, 0xbe, 0xfa, 0xdc, 0x98, 0xa8, 0x1a, 0x85, 0xf9, 0x0e, 0xa6, 0x18, 0xf3, 0x8d, 0x10,
0xb5, 0xb2, 0xdf, 0x99, 0x2e, 0xa1, 0x31, 0x68, 0xc5, 0x51, 0x4f, 0x6c, 0x7e, 0xe2, 0xb8, 0x29,
0xe3, 0xa6, 0x0c, 0xe9, 0x97, 0xf2, 0xa1, 0xb5, 0x0f, 0xcd, 0x72, 0x9d, 0xd3, 0x94, 0x74, 0xe8,
0xf6, 0xbc, 0x50, 0x67, 0x32, 0x42, 0xf3, 0x45, 0xfd, 0x98, 0x2f, 0x36, 0xd8, 0xe9, 0xf6, 0xed,
0xed, 0xf6, 0xee, 0xef, 0xce, 0xc0, 0x98, 0xde, 0xd3, 0x96, 0xac, 0x5d, 0xe2, 0xb2, 0x93, 0x2f,
0x1b, 0x52, 0xd3, 0x8b, 0x9f, 0x5a, 0x7c, 0x95, 0xb2, 0xab, 0xfa, 0x72, 0x06, 0x42, 0x2f, 0x62,
0x4d, 0xdf, 0x11, 0x54, 0xf6, 0x76, 0x27, 0x5b, 0x51, 0xec, 0xeb, 0xee, 0x23, 0xbf, 0xe6, 0xbb,
0x41, 0x8b, 0x4e, 0x7f, 0x2e, 0xae, 0x6a, 0x39, 0xd3, 0x10, 0x2a, 0x5b, 0x06, 0x3d, 0xe6, 0x7b,
0xe5, 0x75, 0xbe, 0xc3, 0xf1, 0xba, 0xca, 0x11, 0xdf, 0xc8, 0x23, 0x6c, 0xd2, 0x25, 0xf4, 0x84,
0x38, 0x12, 0x63, 0x89, 0x09, 0x1e, 0xf2, 0x0f, 0x95, 0xb8, 0xb5, 0x3a, 0x24, 0x5f, 0xe6, 0x8b,
0xaf, 0x6e, 0xef, 0xc2, 0xdb, 0x75, 0x3a, 0xd7, 0x30, 0x1e, 0x28, 0x1f, 0xce, 0x24, 0x62, 0xb0,
0x8b, 0xd2, 0x18, 0x8d, 0xb3, 0x2a, 0xc7, 0x35, 0x76, 0xd8, 0x2d, 0xf4, 0x03, 0x7c, 0x1b, 0xff,
0x29, 0x1c, 0xb8, 0xfa, 0x37, 0x4f, 0xe4, 0xc3, 0x7c, 0x5f, 0x30, 0x5e, 0xa7, 0xf7, 0x8a, 0x5c,
0x8b, 0xa9, 0x69, 0xcb, 0x19, 0x02, 0x63, 0xc4, 0x89, 0x5a, 0x6f, 0xc3, 0x0d, 0x16, 0xfa, 0x47,
0xe3, 0x7d, 0xbd, 0x5e, 0xae, 0x86, 0xd9, 0x9f, 0xed, 0x86, 0xfe, 0xc2, 0x4b, 0x7e, 0x2b, 0xf2,
0x65, 0xd9, 0x32, 0xde, 0x81, 0x4c, 0x17, 0xf9, 0xb2, 0x1d, 0x56, 0xba, 0xce, 0x9c, 0xb4, 0xc5,
0x8c, 0x04, 0xd9, 0x36, 0xdf, 0x42, 0x97, 0x8b, 0xf3, 0xed, 0x26, 0x57, 0xb3, 0xd9, 0x41, 0xef,
0xed, 0xbe, 0xda, 0x2d, 0x7a, 0xf8, 0x4b, 0x80, 0x27, 0x28, 0x7b, 0x58, 0xe8, 0x8d, 0xc3, 0x6e,
0x21, 0x23, 0x64, 0xd7, 0x7c, 0x8b, 0x4c, 0x17, 0xb9, 0x43, 0x95, 0x1f, 0x82, 0x1a, 0x4e, 0xb1,
0x40, 0xbf, 0x13, 0x94, 0x43, 0x5b, 0xf9, 0x1b, 0x8b, 0x7b, 0x84, 0x26, 0x1c, 0x52, 0x2b, 0x35,
0x4e, 0x76, 0xcd, 0xd7, 0xed, 0xa3, 0x68, 0x4e, 0x5b, 0x46, 0x82, 0x4c, 0x15, 0xf8, 0xdb, 0xb4,
0x45, 0x24, 0x49, 0x76, 0xcd, 0xa7, 0x0e, 0xc6, 0x45, 0x91, 0x33, 0xd2, 0x96, 0x90, 0x24, 0x59,
0x36, 0x5f, 0x22, 0x33, 0xf5, 0x48, 0x64, 0xec, 0xa8, 0xb1, 0xe6, 0x1e, 0x3b, 0xd7, 0x84, 0xd1,
0xaf, 0x7c, 0xd7, 0x9b, 0x3c, 0x76, 0xb2, 0x8b, 0x66, 0x5d, 0x84, 0x21, 0x2d, 0xb5, 0x0c, 0x95,
0x01, 0x4b, 0xf9, 0xb3, 0x4c, 0x96, 0x97, 0x5a, 0x7e, 0xa6, 0x77, 0x11, 0xb7, 0x1a, 0x44, 0x08,
0xf8, 0xf9, 0xa6, 0x9f, 0x6b, 0x08, 0x1a, 0xfc, 0xe4, 0x3d, 0x3f, 0x01, 0xdb, 0xbb, 0xb6, 0xdb,
0xbd, 0x77, 0xb7, 0x97, 0xf6, 0xbe, 0x24, 0x12, 0x69, 0x2a, 0x35, 0x19, 0x3f, 0x7a, 0xbc, 0x23,
0x0e, 0x8b, 0x43, 0x98, 0x3a, 0x76, 0x77, 0x58, 0xb5, 0x65, 0x55, 0xd5, 0x64, 0xbc, 0x8c, 0xc0,
0xf2, 0x64, 0x1a, 0xae, 0x0d, 0xb2, 0xbb, 0x21, 0x7e, 0xbd, 0xd9, 0x7a, 0xac, 0x94, 0xc0, 0xd5,
0x61, 0x54, 0xc3, 0x28, 0x67, 0x1f, 0x73, 0xb6, 0xb6, 0xd6, 0x36, 0x53, 0xc7, 0x4d, 0xd5, 0xdc,
0xd4, 0xdc, 0x67, 0xb6, 0xed, 0x5d, 0xdb, 0x75, 0x75, 0x77, 0x59, 0xfb, 0xc2, 0x5a, 0x8f, 0x6d,
0x7c, 0xcc, 0xaf, 0x3b, 0x7e, 0x5d, 0xed, 0xee, 0x7b, 0x79, 0x01, 0x27, 0x0a, 0x75, 0x24, 0xd5,
0x41, 0xda, 0x64, 0xd7, 0x7c, 0x10, 0xfa, 0x20, 0x6e, 0x91, 0xf5, 0x9f, 0xe3, 0x60, 0xf6, 0xe2,
0x62, 0xa1, 0xc5, 0x69, 0x0b, 0x49, 0x92, 0x6c, 0x67, 0xb5, 0x2c, 0xd5, 0xee, 0x5c, 0xeb, 0x30,
0x5f, 0xbc, 0x75, 0x95, 0x07, 0xb6, 0xe0, 0x12, 0xa1, 0xff, 0x4e, 0x5b, 0x48, 0xd2, 0x64, 0xdb,
0x7c, 0xb0, 0xd4, 0x4a, 0xf3, 0xfd, 0x9b, 0xb2, 0x06, 0x9c, 0x22, 0xbb, 0x83, 0xf4, 0x6d, 0xf8,
0x22, 0xde, 0x2d, 0xf4, 0x8b, 0xb4, 0xc5, 0x8c, 0x04, 0xf9, 0xba, 0x5d, 0x85, 0x8e, 0xc2, 0x07,
0xf0, 0x76, 0x9c, 0x9a, 0xb2, 0x9a, 0xc1, 0x50, 0xc6, 0x4f, 0x71, 0x9f, 0x66, 0x77, 0xb8, 0xd6,
0xef, 0xd3, 0x16, 0x34, 0x92, 0xe4, 0xcb, 0x7c, 0xfb, 0x13, 0x3a, 0x5e, 0x9c, 0x56, 0xd5, 0xfb,
0xee, 0xb5, 0x29, 0xe9, 0x0a, 0xea, 0xe3, 0x69, 0xbd, 0x25, 0x55, 0x2c, 0x16, 0xda, 0x9c, 0xae,
0x9c, 0xf4, 0xc8, 0xaf, 0xf9, 0x0e, 0x64, 0x91, 0xd7, 0xe8, 0x71, 0x06, 0x4e, 0xde, 0xef, 0x8d,
0x93, 0x33, 0x31, 0x29, 0xa1, 0x1e, 0x9f, 0x15, 0x17, 0x93, 0xae, 0xae, 0xfc, 0xb9, 0x0a, 0xed,
0x42, 0x5b, 0x13, 0xea, 0x2f, 0x73, 0xd4, 0x8f, 0xf9, 0x5e, 0x89, 0x2f, 0x1a, 0x6b, 0x97, 0xa9,
0xe2, 0x32, 0xfa, 0xd6, 0x05, 0xf3, 0x16, 0x5c, 0x1d, 0x04, 0xc1, 0x79, 0x8b, 0x7e, 0xbc, 0x68,
0xc0, 0xf1, 0x70, 0x43, 0xa9, 0xc1, 0x8d, 0xf3, 0x6f, 0xb4, 0xe6, 0x85, 0x35, 0xdf, 0xba, 0x6d,
0xf9, 0x6d, 0xf7, 0xa2, 0x43, 0xa3, 0x2d, 0xc6, 0xd8, 0x5a, 0x2f, 0x65, 0x51, 0x87, 0x42, 0x61,
0xbe, 0x03, 0x28, 0x82, 0x82, 0x46, 0x8e, 0x2c, 0x6f, 0xaf, 0x15, 0x64, 0x9c, 0xc2, 0x7c, 0x05,
0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x86, 0x11, 0x14, 0x54, 0x0c, 0x5f, 0x86, 0x41, 0x61, 0xbe, 0x83,
0x29, 0x62, 0x08, 0x46, 0x88, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x20, 0x35, 0x0a, 0xf3,
0xf5, 0x43, 0x11, 0x14, 0x34, 0x32, 0x14, 0xe6, 0x3b, 0x98, 0x22, 0x28, 0x68, 0x84, 0xc8, 0x72,
0x25, 0xf3, 0xa1, 0x13, 0x2a, 0x61, 0x9a, 0x92, 0x49, 0x22, 0x47, 0xa1, 0x75, 0xc9, 0xda, 0x25,
0xa7, 0xcf, 0x9e, 0x34, 0x7b, 0x48, 0xd5, 0x3e, 0x77, 0xaf, 0xba, 0xfb, 0x8d, 0x16, 0x7a, 0x5e,
0x64, 0x0b, 0x3a, 0x34, 0x79, 0xce, 0x02, 0x9b, 0x12, 0xd1, 0x9c, 0x23, 0xea, 0xc3, 0x7c, 0xa1,
0x46, 0x71, 0x56, 0xcb, 0x19, 0x98, 0x2d, 0xde, 0xd3, 0x9d, 0x89, 0xe3, 0x30, 0xba, 0x2f, 0xe0,
0x07, 0x4f, 0x6c, 0x7e, 0x42, 0x5b, 0x6b, 0xdb, 0x90, 0x9a, 0x6f, 0x7f, 0xb6, 0xfd, 0x12, 0x91,
0x4b, 0xfa, 0x3e, 0xd8, 0x8b, 0xd0, 0x2e, 0x2f, 0x0f, 0x0b, 0xfa, 0x85, 0x92, 0x76, 0x3d, 0x9e,
0x12, 0xee, 0xdf, 0x63, 0xfd, 0x92, 0x4f, 0xf3, 0x85, 0x4a, 0x4a, 0xce, 0x54, 0xf6, 0x16, 0xcc,
0x15, 0xa7, 0x53, 0x8d, 0x19, 0xe0, 0x5b, 0x7d, 0x54, 0x21, 0x28, 0x88, 0xf8, 0xd9, 0xdb, 0x53,
0xf5, 0x96, 0x76, 0x45, 0xe2, 0x77, 0x12, 0xb1, 0x43, 0x68, 0xb9, 0xc0, 0x23, 0x02, 0x8b, 0x7d,
0xda, 0xca, 0xc1, 0xea, 0xca, 0x1b, 0xf9, 0x32, 0x5f, 0xe8, 0x54, 0x5c, 0x85, 0xb7, 0x28, 0x0f,
0xaf, 0x84, 0x2a, 0xe1, 0xa0, 0x20, 0x98, 0x80, 0xf3, 0x44, 0xce, 0x13, 0xb9, 0x4e, 0x68, 0x1d,
0xbe, 0xab, 0xc1, 0x57, 0x7c, 0xca, 0xba, 0x21, 0x77, 0x9e, 0x61, 0xf2, 0x31, 0xe1, 0x08, 0x9d,
0x25, 0xf4, 0x00, 0x56, 0xe0, 0x7d, 0x6a, 0xa7, 0x76, 0x6f, 0x30, 0x1c, 0x87, 0x8f, 0xe8, 0xf1,
0x1b, 0xa1, 0x6f, 0x09, 0xfd, 0x41, 0xda, 0x82, 0x46, 0x8a, 0x6c, 0x9b, 0xef, 0x6b, 0x9a, 0x84,
0x6e, 0xc1, 0x32, 0x5c, 0x20, 0xdb, 0xb3, 0xce, 0x46, 0x5c, 0x81, 0x15, 0x16, 0xba, 0x36, 0x6d,
0x31, 0x23, 0x41, 0x76, 0xcd, 0x17, 0x2a, 0xd9, 0xe4, 0x1e, 0x5c, 0xad, 0xca, 0xa6, 0xab, 0x4a,
0x50, 0xd0, 0xf0, 0x69, 0x12, 0xb9, 0x41, 0xe8, 0xa6, 0x24, 0x1a, 0xaf, 0x25, 0xb2, 0x6b, 0xbe,
0x38, 0xc7, 0xe4, 0x6d, 0xd5, 0x6e, 0xb6, 0x6a, 0x41, 0x41, 0x87, 0xce, 0x47, 0x84, 0xe6, 0x27,
0xd1, 0x70, 0xad, 0x90, 0x5d, 0xf3, 0x45, 0x3e, 0x36, 0x84, 0x73, 0xb3, 0x4a, 0xae, 0x6f, 0xbf,
0xd9, 0x34, 0xdf, 0xe7, 0x1d, 0x21, 0x1e, 0xa8, 0x0f, 0x8e, 0x5a, 0x1d, 0x09, 0x0e, 0xfc, 0x4b,
0x71, 0xba, 0xda, 0x55, 0x7f, 0xc8, 0x64, 0x73, 0xa9, 0xa5, 0xab, 0xb2, 0x62, 0x96, 0x00, 0x91,
0xc8, 0xf8, 0xd1, 0xe3, 0x5d, 0x7a, 0xd2, 0xa5, 0x56, 0x6c, 0x5e, 0x61, 0xd3, 0xce, 0x4d, 0x76,
0x74, 0xed, 0x78, 0xd9, 0x39, 0xcd, 0x8d, 0xcd, 0x66, 0xb5, 0xce, 0x72, 0xce, 0xb1, 0xe7, 0xe0,
0x10, 0x82, 0x82, 0x06, 0xfe, 0x5a, 0x8f, 0x2c, 0x5f, 0xb7, 0x07, 0x20, 0x9b, 0xe6, 0x0b, 0xed,
0x10, 0x7a, 0x0a, 0xb3, 0xaa, 0xdd, 0xf4, 0xd2, 0xa7, 0x97, 0xba, 0xf4, 0xa4, 0x4b, 0xdd, 0x73,
0xf1, 0x3d, 0x2f, 0xfb, 0x7c, 0xd7, 0xde, 0x5d, 0xba, 0xcb, 0xdd, 0x5a, 0x46, 0xb7, 0xf4, 0x7d,
0x56, 0x8e, 0xca, 0x56, 0x6d, 0x59, 0xe5, 0xb1, 0x8d, 0x8f, 0x55, 0x5b, 0x46, 0x2f, 0x45, 0x50,
0x50, 0x4d, 0x12, 0x7a, 0x17, 0xee, 0xae, 0x6a, 0x9b, 0x95, 0xa4, 0x2a, 0x98, 0x79, 0xe4, 0x4c,
0xb3, 0x5b, 0x67, 0x9b, 0x3a, 0x7e, 0xaa, 0x71, 0xa3, 0xc6, 0x69, 0x6e, 0x6c, 0x16, 0x04, 0x81,
0xce, 0xee, 0x4e, 0x3b, 0xba, 0x76, 0x58, 0xbf, 0x7d, 0xbd, 0x65, 0x1b, 0x96, 0x1d, 0x74, 0x55,
0xac, 0xb2, 0x9a, 0xb9, 0x42, 0xcb, 0x92, 0xea, 0x20, 0x6d, 0xb2, 0x6b, 0x3e, 0x02, 0xa1, 0x6f,
0x90, 0xd3, 0xf4, 0xce, 0xc0, 0x27, 0x7c, 0xc6, 0xe7, 0xd3, 0x96, 0x91, 0x24, 0xd9, 0xce, 0x6a,
0x39, 0xd7, 0xf7, 0xc4, 0x91, 0x13, 0xf3, 0x64, 0x75, 0xf2, 0x74, 0x30, 0xbb, 0x04, 0xae, 0xf4,
0x19, 0xb7, 0xa4, 0x2d, 0x24, 0x69, 0xb2, 0x7c, 0xe5, 0xdb, 0x47, 0x68, 0x16, 0x3e, 0x86, 0x77,
0xc8, 0x6e, 0x50, 0xd0, 0x2e, 0x7c, 0x03, 0x5f, 0x12, 0xda, 0x98, 0xb6, 0x98, 0x91, 0x20, 0x1f,
0xe6, 0xeb, 0x65, 0x91, 0xe9, 0xba, 0xbd, 0x0f, 0x6f, 0x15, 0x97, 0x4e, 0xd5, 0x3a, 0x91, 0x38,
0x61, 0xf5, 0x3b, 0xb8, 0x3d, 0xcf, 0x41, 0x90, 0xfd, 0x91, 0x2f, 0xf3, 0xed, 0x4f, 0xe8, 0x44,
0x81, 0x0b, 0x45, 0xe6, 0xaa, 0xad, 0xa0, 0xa0, 0x67, 0xd0, 0x2e, 0xf0, 0x88, 0x06, 0x8b, 0x7d,
0xd2, 0x86, 0xb4, 0x05, 0xa5, 0x45, 0x7e, 0xcd, 0x77, 0x20, 0xa1, 0x63, 0x71, 0x86, 0xc0, 0x6c,
0x91, 0x19, 0x38, 0x41, 0x1c, 0x16, 0x54, 0xd5, 0x17, 0xc8, 0x54, 0x88, 0xb0, 0xd1, 0xfe, 0x41,
0x41, 0x81, 0x5f, 0x6a, 0xd4, 0x6e, 0x81, 0x2d, 0x09, 0xf4, 0x97, 0x49, 0xea, 0xc7, 0x7c, 0xaf,
0x44, 0x68, 0x8c, 0x46, 0x93, 0x94, 0x1d, 0x25, 0xd2, 0xfa, 0xa9, 0x37, 0x7e, 0xea, 0x9a, 0x06,
0x0d, 0x6f, 0x0a, 0x1f, 0x09, 0x07, 0x15, 0x14, 0x74, 0xf3, 0x9f, 0xdd, 0x6c, 0xcd, 0xb6, 0x35,
0x77, 0xde, 0xd2, 0x7e, 0xcb, 0x3d, 0xd8, 0x8a, 0x0e, 0x74, 0x14, 0xef, 0xdc, 0x1d, 0x98, 0xc2,
0x7c, 0x07, 0x50, 0x04, 0x05, 0x8d, 0x1c, 0x79, 0x59, 0x9e, 0x28, 0xc8, 0x20, 0x85, 0xf9, 0x0a,
0x52, 0xa3, 0x30, 0x5f, 0x3f, 0x0c, 0x23, 0x28, 0xa8, 0x60, 0x18, 0x14, 0xe6, 0x3b, 0x98, 0xe2,
0xa1, 0xf1, 0x11, 0xa2, 0x30, 0x5f, 0x41, 0x6a, 0x14, 0xe6, 0x2b, 0x48, 0x8d, 0xc2, 0x7c, 0x05,
0xa9, 0x51, 0x98, 0xaf, 0x1f, 0x86, 0x91, 0x52, 0x55, 0x8c, 0xf9, 0x86, 0x41, 0x36, 0x2b, 0x99,
0xab, 0x41, 0x68, 0x8c, 0x92, 0x19, 0x22, 0xaf, 0x45, 0xab, 0xc8, 0x44, 0x4c, 0xbe, 0xf7, 0x17,
0xf7, 0xbe, 0x79, 0xde, 0xf4, 0x79, 0x43, 0x2a, 0x35, 0xbb, 0x69, 0xd9, 0x4d, 0xef, 0x10, 0x9a,
0xa6, 0x77, 0x77, 0x23, 0x3e, 0xd6, 0x3a, 0xd2, 0x3a, 0xd7, 0xe8, 0xaa, 0xba, 0xf6, 0x9c, 0x90,
0x7f, 0xf3, 0xbd, 0x3c, 0x24, 0x68, 0x0e, 0x4e, 0x14, 0x87, 0x04, 0x4d, 0xeb, 0x2f, 0xae, 0x67,
0xc3, 0x8e, 0x0d, 0xca, 0xd1, 0xd0, 0x72, 0x7c, 0x9e, 0xd9, 0xfe, 0xcc, 0xd9, 0x38, 0xfb, 0xa0,
0xbf, 0xd8, 0xa6, 0x2c, 0xb4, 0x41, 0xbc, 0xbf, 0xfb, 0x94, 0x40, 0x7b, 0x11, 0x16, 0xb4, 0x8f,
0x7c, 0x9a, 0xef, 0x7a, 0x27, 0xe8, 0xf1, 0x56, 0x9c, 0x8f, 0xd7, 0x1b, 0x42, 0x48, 0x50, 0x95,
0x29, 0x61, 0x7a, 0xe5, 0x38, 0x4f, 0xe4, 0xca, 0xca, 0xa3, 0x4f, 0xdb, 0x85, 0xfe, 0x0f, 0x8b,
0xc5, 0xaf, 0xc0, 0xaa, 0x8b, 0xfa, 0xbd, 0x03, 0xc9, 0x8f, 0xf9, 0x42, 0x13, 0x04, 0xfe, 0x4e,
0xe4, 0xdd, 0x7a, 0x0e, 0x2d, 0xef, 0x64, 0xa8, 0x29, 0x55, 0xc3, 0x78, 0x7a, 0xad, 0x05, 0x6f,
0xae, 0x1c, 0xb7, 0x0a, 0x3d, 0x8e, 0xdb, 0x1d, 0xe9, 0xae, 0x7a, 0xba, 0x4d, 0xef, 0x33, 0xdf,
0x7d, 0x1a, 0x3c, 0xe9, 0xaf, 0x44, 0xde, 0x8e, 0x36, 0xe9, 0x5d, 0x2d, 0x86, 0x4a, 0x49, 0xa0,
0x45, 0xa4, 0x45, 0x74, 0xe8, 0x13, 0xa8, 0x14, 0xa2, 0x6e, 0x03, 0xf1, 0x70, 0x60, 0x8e, 0x6d,
0x3e, 0x63, 0xa1, 0x9b, 0x1d, 0xe1, 0xd6, 0x7a, 0x30, 0x61, 0x6c, 0xbe, 0xcf, 0x9a, 0xec, 0x57,
0xee, 0xc7, 0x59, 0xe9, 0xca, 0x19, 0x26, 0xf9, 0xd9, 0xe5, 0x9a, 0x26, 0x72, 0x93, 0x6d, 0xae,
0x10, 0xba, 0x58, 0x68, 0x75, 0xda, 0x82, 0x92, 0xa4, 0x24, 0x74, 0x98, 0xbd, 0xbe, 0x2f, 0xab,
0xc6, 0xcb, 0x27, 0xa7, 0x61, 0xa9, 0x45, 0xa6, 0xa7, 0x2d, 0x24, 0x49, 0x4a, 0x02, 0xef, 0xc7,
0x1f, 0xa5, 0x2d, 0xa4, 0x96, 0x48, 0x39, 0xa5, 0xaa, 0x97, 0xa3, 0x75, 0xbb, 0x35, 0xc9, 0x0e,
0xd2, 0xa6, 0x24, 0xf2, 0xce, 0xb4, 0x45, 0xd4, 0x12, 0x35, 0x94, 0x52, 0x05, 0x17, 0x54, 0x5e,
0x5a, 0x9d, 0x4b, 0x4a, 0x38, 0x29, 0x6d, 0x11, 0x05, 0xaf, 0xca, 0xe9, 0x69, 0x0b, 0x48, 0x8a,
0x12, 0xc9, 0x85, 0xee, 0x64, 0x91, 0x48, 0xa4, 0x14, 0x0c, 0x6e, 0xd2, 0xdc, 0x7b, 0xde, 0xb0,
0x83, 0x82, 0x06, 0xc7, 0xce, 0x24, 0x1b, 0x4f, 0x93, 0x46, 0x71, 0x8e, 0xf1, 0xbc, 0xb4, 0x85,
0xd4, 0x0a, 0xbb, 0xf7, 0xee, 0x36, 0x65, 0xdc, 0x14, 0xeb, 0x3f, 0xbc, 0xde, 0x8a, 0x4d, 0x71,
0x4a, 0xd5, 0x8b, 0x9d, 0x2f, 0xea, 0xec, 0xee, 0xd4, 0x5d, 0xee, 0x36, 0x76, 0xd4, 0x58, 0xe3,
0x47, 0x8d, 0xd7, 0xd6, 0xda, 0xe6, 0xcc, 0xa3, 0xcf, 0x44, 0x1c, 0x22, 0x94, 0x10, 0xdd, 0x78,
0x3c, 0xa9, 0xc6, 0xd3, 0x26, 0x10, 0xfa, 0x1b, 0xdc, 0x99, 0xb6, 0x90, 0x5a, 0xa1, 0xb9, 0xb1,
0xd9, 0x05, 0x27, 0x5e, 0x60, 0xfe, 0xf1, 0xf3, 0xcd, 0x6a, 0x9d, 0xe5, 0xe8, 0x09, 0x47, 0x6b,
0x6e, 0x6c, 0xd6, 0xdc, 0xd4, 0x2c, 0x10, 0x07, 0x05, 0xed, 0xde, 0xbb, 0xdb, 0xba, 0x17, 0xd7,
0x79, 0x74, 0xfd, 0xa3, 0x96, 0x6d, 0x58, 0x66, 0xc9, 0xba, 0x25, 0xba, 0xcb, 0xdd, 0x49, 0xc8,
0xf9, 0x27, 0xa1, 0xbf, 0x4f, 0xa2, 0xe1, 0x5a, 0x20, 0xa8, 0xbc, 0x85, 0xe7, 0x87, 0xe4, 0x3b,
0x82, 0x35, 0x83, 0x3c, 0x2c, 0x9e, 0x70, 0xec, 0x4e, 0x5b, 0x48, 0x52, 0x94, 0x84, 0xca, 0xc6,
0xba, 0x08, 0xdf, 0x4e, 0x5b, 0x4c, 0x41, 0x1f, 0x5f, 0x97, 0x73, 0xe3, 0x71, 0x60, 0x1d, 0xda,
0x75, 0xce, 0x56, 0x76, 0xb1, 0x78, 0x7b, 0x6d, 0x74, 0x2a, 0x8a, 0x86, 0xc7, 0xe1, 0x54, 0x4a,
0xa3, 0xb2, 0x4b, 0x84, 0x07, 0xf1, 0xd9, 0x4a, 0xd1, 0x41, 0xee, 0xc9, 0x57, 0x11, 0x64, 0xfc,
0xcb, 0xf3, 0xd7, 0xb8, 0x50, 0xed, 0x64, 0xb3, 0x0c, 0xc4, 0x5a, 0xdc, 0x8f, 0x3b, 0x84, 0x7e,
0x95, 0xb6, 0x98, 0x91, 0x24, 0x5f, 0xe6, 0xeb, 0x65, 0xdf, 0xbb, 0xd7, 0xce, 0x17, 0xd7, 0xd9,
0xbd, 0x5e, 0xfc, 0xda, 0xa9, 0x5a, 0xa0, 0x03, 0xed, 0x78, 0x4c, 0xc9, 0x03, 0xf5, 0xfc, 0xee,
0xb5, 0x7c, 0x9a, 0xef, 0x40, 0xe2, 0x49, 0xd5, 0x2c, 0xb1, 0x09, 0xdb, 0xc4, 0x01, 0x41, 0x33,
0x2b, 0x7f, 0x1e, 0x9e, 0x50, 0xaf, 0x1d, 0x7a, 0x43, 0x82, 0x58, 0x2d, 0xf0, 0xa4, 0xc8, 0x72,
0xa1, 0xb5, 0x09, 0xf5, 0x97, 0x39, 0xea, 0xc3, 0x7c, 0xaf, 0xc6, 0x0d, 0x5a, 0x74, 0x9a, 0xac,
0x64, 0xa2, 0x48, 0xeb, 0x82, 0xb9, 0x0b, 0x3e, 0x18, 0x04, 0xc1, 0x79, 0x8b, 0x7e, 0xbc, 0x68,
0x50, 0x41, 0x41, 0x37, 0xce, 0xbf, 0xd1, 0xea, 0x6d, 0xab, 0xef, 0xfa, 0xea, 0xe3, 0x5f, 0xbd,
0x4f, 0xc9, 0xf3, 0xca, 0x9e, 0xc3, 0x56, 0x61, 0x7e, 0x17, 0x87, 0xab, 0x45, 0x61, 0xbe, 0x03,
0x28, 0x82, 0x82, 0x46, 0x8e, 0xe2, 0xe9, 0xb5, 0x82, 0xd4, 0x28, 0xcc, 0x57, 0x90, 0x1a, 0x85,
0xf9, 0x0a, 0x52, 0xa3, 0x30, 0x5f, 0x3f, 0x0c, 0x23, 0xa5, 0xaa, 0x18, 0x3b, 0x0f, 0x83, 0xc2,
0x7c, 0x07, 0x93, 0x9f, 0x27, 0x42, 0x6a, 0x9c, 0xc2, 0x7c, 0x05, 0xa9, 0x51, 0x98, 0xaf, 0x20,
0x35, 0x0a, 0xf3, 0xf5, 0x43, 0x11, 0x14, 0x34, 0x32, 0xe4, 0x27, 0xb1, 0x60, 0x28, 0xc4, 0xf9,
0x2d, 0xaf, 0x15, 0x98, 0x21, 0x32, 0x1d, 0x47, 0x89, 0x2b, 0x62, 0x26, 0xde, 0xb5, 0xf2, 0xae,
0x73, 0xe6, 0x1f, 0x3f, 0x7f, 0x48, 0xff, 0x2e, 0xd7, 0x3f, 0x72, 0xfd, 0x07, 0x84, 0xe6, 0x88,
0xb7, 0xd4, 0x9e, 0xc7, 0x66, 0x3c, 0xad, 0xd1, 0x1a, 0xdd, 0x36, 0x14, 0xb9, 0x2c, 0xfd, 0x93,
0x7f, 0xf3, 0x7d, 0xce, 0x24, 0x7b, 0xcc, 0xb1, 0x2f, 0x28, 0xa8, 0x4d, 0x9c, 0x9d, 0xd2, 0xd8,
0xdf, 0xd4, 0xe2, 0xb9, 0x5d, 0xcf, 0x0d, 0xf9, 0x09, 0xb6, 0xad, 0xbb, 0xb7, 0x9e, 0xa4, 0xbf,
0x07, 0xb1, 0xe2, 0xe2, 0xe6, 0x2e, 0xa1, 0x75, 0x78, 0x52, 0x60, 0x39, 0xda, 0x2b, 0x7b, 0xbc,
0x89, 0xbd, 0x2b, 0x35, 0x2b, 0xe4, 0xcf, 0x7c, 0xa1, 0x46, 0x81, 0x79, 0x22, 0x17, 0xe2, 0x7c,
0x7b, 0xcc, 0x4c, 0x59, 0xd1, 0x68, 0x71, 0x51, 0xc3, 0x2c, 0x91, 0xb7, 0x56, 0x3e, 0x2b, 0x0b,
0xfd, 0x12, 0xdf, 0xc3, 0xfd, 0x42, 0xcb, 0xd5, 0xe1, 0x2c, 0x3b, 0x3f, 0xe6, 0x8b, 0x5f, 0x6f,
0xf5, 0x11, 0xbc, 0xb3, 0x92, 0xb5, 0x37, 0x6c, 0x86, 0x1a, 0x14, 0x34, 0x0c, 0x4a, 0x38, 0xa5,
0x72, 0x7c, 0x5c, 0xe8, 0x59, 0xdc, 0x81, 0x7f, 0xae, 0xa7, 0x97, 0xff, 0x65, 0x7f, 0xc2, 0x11,
0x3a, 0x46, 0xe8, 0x9b, 0xe2, 0xf2, 0xa5, 0x6b, 0x38, 0x34, 0xe3, 0x0d, 0x27, 0x85, 0xa0, 0x0a,
0x8f, 0x4e, 0x1e, 0x8d, 0x4f, 0xe3, 0x69, 0xa1, 0x9b, 0x85, 0x89, 0x95, 0x79, 0xd5, 0x14, 0xd9,
0x36, 0xdf, 0x42, 0xe7, 0x63, 0x15, 0xde, 0x23, 0xbb, 0xef, 0xd9, 0xdd, 0x9f, 0xb1, 0xf8, 0x30,
0x56, 0x09, 0xbd, 0x3e, 0x6d, 0x31, 0x49, 0x93, 0x5d, 0xf3, 0x2d, 0xf4, 0x26, 0x91, 0xef, 0xe2,
0x88, 0xb4, 0xa5, 0x24, 0xc0, 0x6b, 0xf0, 0x90, 0xd0, 0xc9, 0x69, 0x0b, 0x49, 0x92, 0x6c, 0x9a,
0x2f, 0x74, 0x98, 0xc8, 0xd7, 0x30, 0x2a, 0x89, 0xe6, 0x6b, 0x24, 0x28, 0xe8, 0x70, 0xfc, 0x8b,
0x1c, 0xaf, 0x21, 0x66, 0xd3, 0x7c, 0x81, 0x37, 0xe1, 0xb8, 0x24, 0x9a, 0x1e, 0x91, 0xa0, 0xa0,
0xc1, 0x77, 0x71, 0x8e, 0x30, 0xbf, 0x59, 0x3a, 0xd9, 0x34, 0x1f, 0xa7, 0xa6, 0x2d, 0xe0, 0x90,
0x18, 0x8a, 0x57, 0x03, 0xa7, 0x25, 0xa6, 0x23, 0x65, 0xb2, 0x6a, 0xbe, 0x6d, 0x69, 0x0b, 0x18,
0x41, 0x72, 0xbb, 0xf4, 0x92, 0xcd, 0x75, 0xbe, 0xc8, 0xa3, 0xe2, 0x9b, 0x57, 0xd5, 0xc7, 0x43,
0xdd, 0xe5, 0x6e, 0x93, 0xc7, 0x4d, 0xb6, 0xf8, 0xf2, 0xc5, 0x56, 0x6e, 0x5e, 0x69, 0xe3, 0x8e,
0x8d, 0x76, 0xed, 0xdd, 0xd5, 0x17, 0x14, 0x34, 0xba, 0x61, 0xb4, 0x96, 0xc3, 0x5a, 0xb4, 0x4d,
0x6c, 0xf3, 0x86, 0xd7, 0xbc, 0x01, 0xf4, 0x94, 0x13, 0x0b, 0xfa, 0xea, 0xd2, 0x94, 0xe7, 0xa0,
0xa0, 0xac, 0x12, 0xfa, 0x0f, 0x5c, 0x56, 0xed, 0x66, 0xa7, 0x8d, 0x9f, 0xe6, 0xca, 0x39, 0x57,
0xf6, 0x05, 0x05, 0xb5, 0x8c, 0x6e, 0xe9, 0xf7, 0xbc, 0x8e, 0xdd, 0x1d, 0x96, 0x6d, 0x58, 0xe6,
0xd1, 0x0d, 0x8f, 0xba, 0xfd, 0xe7, 0xb7, 0xdb, 0xf6, 0x52, 0x22, 0x17, 0xe3, 0xcf, 0x0b, 0x7d,
0x22, 0x89, 0x86, 0x6b, 0x81, 0xec, 0x9a, 0x2f, 0x7e, 0xe4, 0xf1, 0x47, 0xe2, 0x3d, 0xdb, 0xea,
0x71, 0xc0, 0xf5, 0x74, 0x4c, 0xd3, 0x18, 0xcd, 0x8d, 0xcd, 0x5a, 0x0e, 0x8b, 0x4d, 0xb8, 0x73,
0xcf, 0x4e, 0x9d, 0xdd, 0x9d, 0x76, 0x74, 0x25, 0xbe, 0x35, 0x7b, 0x3f, 0x2e, 0x15, 0xda, 0x93,
0x74, 0x47, 0x69, 0x91, 0x5d, 0xf3, 0x41, 0x68, 0x1c, 0xbe, 0x8c, 0xf7, 0xca, 0xfa, 0xcf, 0xb2,
0x8f, 0x6e, 0xdc, 0x68, 0xaa, 0xd0, 0xfb, 0xed, 0x4d, 0x5b, 0x4c, 0x92, 0xe4, 0xe3, 0x3f, 0x2c,
0x74, 0x2a, 0x3e, 0x8a, 0xcb, 0x65, 0x75, 0x1c, 0xcb, 0x1e, 0xdc, 0x8b, 0x45, 0x42, 0xbf, 0x49,
0x5b, 0xcc, 0x48, 0x90, 0x0f, 0xf3, 0xf5, 0x12, 0xbf, 0xf6, 0xea, 0x5d, 0xb8, 0x48, 0x36, 0x96,
0x63, 0xca, 0xf8, 0x29, 0xee, 0xd7, 0xe4, 0x6e, 0x0b, 0x6c, 0x4a, 0x5b, 0xd0, 0x48, 0x92, 0x2f,
0xf3, 0xed, 0x4f, 0xe8, 0x78, 0x81, 0xf3, 0x45, 0xce, 0x12, 0x8f, 0x0b, 0xd3, 0x2e, 0xad, 0x22,
0x36, 0xdb, 0x93, 0xe2, 0xa0, 0xa0, 0x65, 0x9a, 0x3c, 0x58, 0x6f, 0x86, 0xdb, 0x9f, 0xfc, 0x9a,
0xef, 0x40, 0x3e, 0x67, 0xa2, 0x3d, 0x5e, 0x27, 0xd0, 0x26, 0x32, 0x93, 0xbe, 0x63, 0xba, 0xea,
0x67, 0x11, 0xee, 0x16, 0x47, 0x9f, 0xad, 0xb6, 0x2f, 0x2c, 0xe8, 0xd7, 0x9a, 0xfd, 0xcc, 0xb5,
0x7e, 0x5f, 0xe5, 0xbe, 0x32, 0x4b, 0xfd, 0x98, 0xef, 0xd5, 0xf8, 0x82, 0xf1, 0x5e, 0x32, 0x49,
0xc9, 0x24, 0x91, 0x56, 0x1c, 0x29, 0xd2, 0x0c, 0x82, 0x4a, 0xe1, 0x42, 0xa4, 0x59, 0xa0, 0x07,
0x7b, 0x44, 0x7a, 0xe8, 0xab, 0x44, 0xde, 0x89, 0x6d, 0x4a, 0x9e, 0xab, 0x84, 0x04, 0x75, 0xe4,
0x3d, 0x51, 0xb4, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x60, 0xb0, 0xfc, 0x3f,
0x37, 0x5c, 0xe7, 0x8f, 0x86, 0xf0, 0x6f, 0x57, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
0xae, 0x42, 0x60, 0x82,
};
const BITMAP_OPAQUE pads_reset_unused_xpm[1] = {{ png, sizeof( png ), "pads_reset_unused_xpm" }};
//EOF

View File

@ -321,6 +321,10 @@ EXTERN_BITMAP( pad_xpm )
EXTERN_BITMAP( pad_enumerate_xpm ) EXTERN_BITMAP( pad_enumerate_xpm )
EXTERN_BITMAP( pad_number_xpm ) EXTERN_BITMAP( pad_number_xpm )
EXTERN_BITMAP( pads_mask_layers_xpm ) EXTERN_BITMAP( pads_mask_layers_xpm )
EXTERN_BITMAP( pads_remove_xpm )
EXTERN_BITMAP( pads_remove_unused_xpm )
EXTERN_BITMAP( pads_remove_unused_keep_bottom_xpm )
EXTERN_BITMAP( pads_reset_unused_xpm )
EXTERN_BITMAP( pagelayout_load_xpm ) EXTERN_BITMAP( pagelayout_load_xpm )
EXTERN_BITMAP( pagelayout_normal_view_mode_xpm ) EXTERN_BITMAP( pagelayout_normal_view_mode_xpm )
EXTERN_BITMAP( pagelayout_special_view_mode_xpm ) EXTERN_BITMAP( pagelayout_special_view_mode_xpm )

View File

@ -0,0 +1,407 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="553.84998"
inkscape:export-xdpi="553.84998"
inkscape:export-filename="/home/seth/code/kicad/kicad_bare/bitmaps_png/sources/pads_remove_unused.png"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="pads_remove.svg">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2099"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="45.254834"
inkscape:cx="4.4344284"
inkscape:cy="16.611474"
inkscape:window-x="0"
inkscape:window-y="37"
inkscape:window-maximized="1"
inkscape:current-layer="layer3"
inkscape:snap-nodes="true"
inkscape:document-rotation="0"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
<sodipodi:guide
position="8.9926755,14.201282"
orientation="1,0"
id="guide28127" />
<sodipodi:guide
position="16.882174,14.796777"
orientation="1,0"
id="guide28129" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
x1="14.463"
y1="12.285"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
x2="34.534"
gradientUnits="userSpaceOnUse"
y2="39.685001"
id="linearGradient3791">
<stop
id="stop3793"
offset="0"
stop-color="#c9c9c9" />
<stop
id="stop3795"
offset="0.40114263"
stop-color="#f8f8f8" />
<stop
id="stop3797"
offset="0.72174245"
stop-color="#e2e2e2" />
<stop
id="stop3799"
offset="0.99654227"
stop-color="#b0b0b0" />
<stop
id="stop3801"
offset="1"
stop-color="#c9c9c9" />
</linearGradient>
<filter
id="c"
height="1.3651"
width="1.2097"
color-interpolation-filters="sRGB"
y="-0.18257"
x="-0.10484">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur7" />
</filter>
<filter
id="d"
height="1.4696"
width="1.4809999"
color-interpolation-filters="sRGB"
y="-0.23481999"
x="-0.24049">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur10" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#ad"
id="linearGradient3095"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.8528064,8.6668249)"
x1="14.463"
y1="12.285"
x2="34.534"
y2="39.685001" />
<linearGradient
id="ad"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop34" />
<stop
stop-color="#f8f8f8"
offset=".25"
id="stop36" />
<stop
stop-color="#e2e2e2"
offset=".5"
id="stop38" />
<stop
stop-color="#b0b0b0"
offset=".75"
id="stop40" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop42" />
</linearGradient>
<linearGradient
y2="39.685001"
x2="34.534"
y1="12.285"
x1="14.463"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.3514374,8.725974)"
gradientUnits="userSpaceOnUse"
id="linearGradient3056"
xlink:href="#linearGradient3791"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4065"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient4067"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop4069" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop4071" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop4073" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop4075" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop4077" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4083"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.97986422,0,0,-0.90274951,37.705175,18.229565)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient3830"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop3832" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop3834" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop3836" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop3838" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop3840" />
</linearGradient>
<linearGradient
y2="35.973965"
x2="37.265358"
y1="9.6206512"
x1="8.6861582"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
gradientUnits="userSpaceOnUse"
id="linearGradient3844"
xlink:href="#linearGradient4067"
inkscape:collect="always" />
</defs>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="BottomPad"
style="display:none">
<path
id="path28015"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 12.957202,22.499999 c 0.696265,0 1.279702,0.173238 1.277922,0.320021 -0.0025,0.209007 -0.541688,0.345838 -1.277922,0.345838 -0.675779,0 -1.194806,-0.207532 -1.194806,-0.345838 0,-0.09975 0.519027,-0.320021 1.194806,-0.320021 z m 0.04091,-0.861955 c -2.54827,0 -4.6140603,0.529189 -4.6140603,1.181976 0,0.652788 2.0657903,1.181977 4.6140603,1.181977 2.54828,0 4.61407,-0.529189 4.61407,-1.181977 0,-0.652787 -2.06579,-1.181976 -4.61407,-1.181976 z" />
</g>
<g
transform="matrix(1.6382539,0,0,1.5572263,1.3665954,0.36314149)"
id="g16">
<rect
height="16"
width="16"
y="0"
x="0"
id="rect18"
style="fill-opacity:0" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Conn1"
style="display:inline">
<path
d="m 13.9961,18.831948 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path28011-2-1-7"
sodipodi:nodetypes="cccscc" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Pad1">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,19 c 2.546856,0 4.611492,-0.528893 4.611492,-1.181316 0,-0.652423 -2.064636,-1.181316 -4.611492,-1.181316 -2.546853,0 -4.6114892,0.528893 -4.6114892,1.181316 C 8.3866278,18.471107 10.451264,19 12.998117,19 Z m 0,-0.861474 c -0.695877,0 -1.278988,-0.17314 -1.277209,-0.319842 0.0025,-0.208889 0.541386,-0.345644 1.277209,-0.345644 0.6754,0 1.194138,0.207415 1.194138,0.345644 0,0.09969 -0.518738,0.319842 -1.194138,0.319842 z"
id="path28011-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
<path
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 1,17.828104 H 13.609368"
id="path2990-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="Conn2">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-0"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,13.782119 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z" />
</g>
<g
style="display:none"
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Pad2">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998116,11.650933 c -2.510174,0 -4.545076,0.521276 -4.545076,1.164303 0,0.643027 2.034902,1.164303 4.545076,1.164303 2.510178,0 4.54508,-0.521276 4.54508,-1.164303 0,-0.643027 -2.034902,-1.164303 -4.54508,-1.164303 z m 0,0.849067 c 0.685855,0 1.260568,0.170647 1.258814,0.315236 -0.0025,0.205881 -0.533588,0.340666 -1.258814,0.340666 -0.665674,0 -1.176941,-0.204428 -1.176941,-0.340666 0,-0.09826 0.511267,-0.315236 1.176941,-0.315236 z"
id="path28011-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer8"
inkscape:label="Conn3">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-9"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,8.6855004 -2,0.002 L 12,13 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,13.145369 13.691904,13.103079 14,13 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Pad3"
style="display:none">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,6.6594104 c -2.485111,0 -4.4996959,0.5160712 -4.4996959,1.1526781 0,0.6366069 2.0145839,1.1526792 4.4996959,1.1526792 2.485114,0 4.499698,-0.5160723 4.499698,-1.1526792 0,-0.6366069 -2.014584,-1.1526781 -4.499698,-1.1526781 z m 0,0.8405896 c 0.679007,0 1.247982,0.1689432 1.246245,0.3120885 -0.0025,0.2038254 -0.528261,0.3372646 -1.246245,0.3372646 -0.659028,0 -1.16519,-0.2023871 -1.16519,-0.3372646 C 11.832927,7.7148135 12.339089,7.5 12.998117,7.5 Z"
id="path28011-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="Conn4">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-3"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,3.6855 -2,0.002 L 12,8 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,8.145369 13.691904,8.103079 14,8 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="TopPad"
style="display:inline">
<path
sodipodi:nodetypes="ssssssssss"
inkscape:connector-curvature="0"
id="path28011"
d="m 12.998117,1.6581699 c -2.488778,0 -4.5063356,0.5168328 -4.5063356,1.1543791 0,0.6375463 2.0175566,1.154379 4.5063356,1.154379 2.488781,0 4.506338,-0.5168327 4.506338,-1.154379 0,-0.6375463 -2.017557,-1.1543791 -4.506338,-1.1543791 z m 0,0.8418301 c 0.680009,0 1.249823,0.1691924 1.248084,0.312549 -0.0025,0.2041261 -0.52904,0.3377622 -1.248084,0.3377622 -0.66,0 -1.166909,-0.2026857 -1.166909,-0.3377622 C 11.831208,2.71513 12.338117,2.5 12.998117,2.5 Z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path2990"
d="M 25.109369,2.8517413 H 12.609368"
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,407 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="553.84998"
inkscape:export-xdpi="553.84998"
inkscape:export-filename="/home/seth/code/kicad/kicad_bare/bitmaps_png/sources/pads_remove_unused_keep_bottom.png"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="pads_remove_unused.svg">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2099"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="45.254834"
inkscape:cx="4.4344284"
inkscape:cy="16.611474"
inkscape:window-x="0"
inkscape:window-y="37"
inkscape:window-maximized="1"
inkscape:current-layer="layer3"
inkscape:snap-nodes="true"
inkscape:document-rotation="0"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
<sodipodi:guide
position="8.9926755,14.201282"
orientation="1,0"
id="guide28127" />
<sodipodi:guide
position="16.882174,14.796777"
orientation="1,0"
id="guide28129" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
x1="14.463"
y1="12.285"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
x2="34.534"
gradientUnits="userSpaceOnUse"
y2="39.685001"
id="linearGradient3791">
<stop
id="stop3793"
offset="0"
stop-color="#c9c9c9" />
<stop
id="stop3795"
offset="0.40114263"
stop-color="#f8f8f8" />
<stop
id="stop3797"
offset="0.72174245"
stop-color="#e2e2e2" />
<stop
id="stop3799"
offset="0.99654227"
stop-color="#b0b0b0" />
<stop
id="stop3801"
offset="1"
stop-color="#c9c9c9" />
</linearGradient>
<filter
id="c"
height="1.3651"
width="1.2097"
color-interpolation-filters="sRGB"
y="-0.18257"
x="-0.10484">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur7" />
</filter>
<filter
id="d"
height="1.4696"
width="1.4809999"
color-interpolation-filters="sRGB"
y="-0.23481999"
x="-0.24049">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur10" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#ad"
id="linearGradient3095"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.8528064,8.6668249)"
x1="14.463"
y1="12.285"
x2="34.534"
y2="39.685001" />
<linearGradient
id="ad"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop34" />
<stop
stop-color="#f8f8f8"
offset=".25"
id="stop36" />
<stop
stop-color="#e2e2e2"
offset=".5"
id="stop38" />
<stop
stop-color="#b0b0b0"
offset=".75"
id="stop40" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop42" />
</linearGradient>
<linearGradient
y2="39.685001"
x2="34.534"
y1="12.285"
x1="14.463"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.3514374,8.725974)"
gradientUnits="userSpaceOnUse"
id="linearGradient3056"
xlink:href="#linearGradient3791"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4065"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient4067"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop4069" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop4071" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop4073" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop4075" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop4077" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4083"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.97986422,0,0,-0.90274951,37.705175,18.229565)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient3830"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop3832" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop3834" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop3836" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop3838" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop3840" />
</linearGradient>
<linearGradient
y2="35.973965"
x2="37.265358"
y1="9.6206512"
x1="8.6861582"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
gradientUnits="userSpaceOnUse"
id="linearGradient3844"
xlink:href="#linearGradient4067"
inkscape:collect="always" />
</defs>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="BottomPad"
style="display:none">
<path
id="path28015"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 12.957202,22.499999 c 0.696265,0 1.279702,0.173238 1.277922,0.320021 -0.0025,0.209007 -0.541688,0.345838 -1.277922,0.345838 -0.675779,0 -1.194806,-0.207532 -1.194806,-0.345838 0,-0.09975 0.519027,-0.320021 1.194806,-0.320021 z m 0.04091,-0.861955 c -2.54827,0 -4.6140603,0.529189 -4.6140603,1.181976 0,0.652788 2.0657903,1.181977 4.6140603,1.181977 2.54828,0 4.61407,-0.529189 4.61407,-1.181977 0,-0.652787 -2.06579,-1.181976 -4.61407,-1.181976 z" />
</g>
<g
transform="matrix(1.6382539,0,0,1.5572263,1.3665954,0.36314149)"
id="g16">
<rect
height="16"
width="16"
y="0"
x="0"
id="rect18"
style="fill-opacity:0" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Conn1"
style="display:inline">
<path
d="m 13.9961,18.831948 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path28011-2-1-7"
sodipodi:nodetypes="cccscc" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Pad1">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,19 c 2.546856,0 4.611492,-0.528893 4.611492,-1.181316 0,-0.652423 -2.064636,-1.181316 -4.611492,-1.181316 -2.546853,0 -4.6114892,0.528893 -4.6114892,1.181316 C 8.3866278,18.471107 10.451264,19 12.998117,19 Z m 0,-0.861474 c -0.695877,0 -1.278988,-0.17314 -1.277209,-0.319842 0.0025,-0.208889 0.541386,-0.345644 1.277209,-0.345644 0.6754,0 1.194138,0.207415 1.194138,0.345644 0,0.09969 -0.518738,0.319842 -1.194138,0.319842 z"
id="path28011-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
<path
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 1,17.828104 H 13.609368"
id="path2990-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="Conn2">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-0"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,13.782119 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z" />
</g>
<g
style="display:none"
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Pad2">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998116,11.650933 c -2.510174,0 -4.545076,0.521276 -4.545076,1.164303 0,0.643027 2.034902,1.164303 4.545076,1.164303 2.510178,0 4.54508,-0.521276 4.54508,-1.164303 0,-0.643027 -2.034902,-1.164303 -4.54508,-1.164303 z m 0,0.849067 c 0.685855,0 1.260568,0.170647 1.258814,0.315236 -0.0025,0.205881 -0.533588,0.340666 -1.258814,0.340666 -0.665674,0 -1.176941,-0.204428 -1.176941,-0.340666 0,-0.09826 0.511267,-0.315236 1.176941,-0.315236 z"
id="path28011-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer8"
inkscape:label="Conn3">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-9"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,8.6855004 -2,0.002 L 12,13 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,13.145369 13.691904,13.103079 14,13 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Pad3"
style="display:none">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,6.6594104 c -2.485111,0 -4.4996959,0.5160712 -4.4996959,1.1526781 0,0.6366069 2.0145839,1.1526792 4.4996959,1.1526792 2.485114,0 4.499698,-0.5160723 4.499698,-1.1526792 0,-0.6366069 -2.014584,-1.1526781 -4.499698,-1.1526781 z m 0,0.8405896 c 0.679007,0 1.247982,0.1689432 1.246245,0.3120885 -0.0025,0.2038254 -0.528261,0.3372646 -1.246245,0.3372646 -0.659028,0 -1.16519,-0.2023871 -1.16519,-0.3372646 C 11.832927,7.7148135 12.339089,7.5 12.998117,7.5 Z"
id="path28011-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="Conn4">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-3"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,3.6855 -2,0.002 L 12,8 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,8.145369 13.691904,8.103079 14,8 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="TopPad"
style="display:inline">
<path
sodipodi:nodetypes="ssssssssss"
inkscape:connector-curvature="0"
id="path28011"
d="m 12.998117,1.6581699 c -2.488778,0 -4.5063356,0.5168328 -4.5063356,1.1543791 0,0.6375463 2.0175566,1.154379 4.5063356,1.154379 2.488781,0 4.506338,-0.5168327 4.506338,-1.154379 0,-0.6375463 -2.017557,-1.1543791 -4.506338,-1.1543791 z m 0,0.8418301 c 0.680009,0 1.249823,0.1691924 1.248084,0.312549 -0.0025,0.2041261 -0.52904,0.3377622 -1.248084,0.3377622 -0.66,0 -1.166909,-0.2026857 -1.166909,-0.3377622 C 11.831208,2.71513 12.338117,2.5 12.998117,2.5 Z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path2990"
d="M 25.109369,2.8517413 H 12.609368"
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,407 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="553.84998"
inkscape:export-xdpi="553.84998"
inkscape:export-filename="/home/seth/code/kicad/kicad_bare/bitmaps_png/sources/pads_reset_unused.png"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="pads_remove_unused_keep_bottom.svg">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2099"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="45.254834"
inkscape:cx="4.4344284"
inkscape:cy="16.611474"
inkscape:window-x="0"
inkscape:window-y="37"
inkscape:window-maximized="1"
inkscape:current-layer="layer3"
inkscape:snap-nodes="true"
inkscape:document-rotation="0"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
<sodipodi:guide
position="8.9926755,14.201282"
orientation="1,0"
id="guide28127" />
<sodipodi:guide
position="16.882174,14.796777"
orientation="1,0"
id="guide28129" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
x1="14.463"
y1="12.285"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
x2="34.534"
gradientUnits="userSpaceOnUse"
y2="39.685001"
id="linearGradient3791">
<stop
id="stop3793"
offset="0"
stop-color="#c9c9c9" />
<stop
id="stop3795"
offset="0.40114263"
stop-color="#f8f8f8" />
<stop
id="stop3797"
offset="0.72174245"
stop-color="#e2e2e2" />
<stop
id="stop3799"
offset="0.99654227"
stop-color="#b0b0b0" />
<stop
id="stop3801"
offset="1"
stop-color="#c9c9c9" />
</linearGradient>
<filter
id="c"
height="1.3651"
width="1.2097"
color-interpolation-filters="sRGB"
y="-0.18257"
x="-0.10484">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur7" />
</filter>
<filter
id="d"
height="1.4696"
width="1.4809999"
color-interpolation-filters="sRGB"
y="-0.23481999"
x="-0.24049">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur10" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#ad"
id="linearGradient3095"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.8528064,8.6668249)"
x1="14.463"
y1="12.285"
x2="34.534"
y2="39.685001" />
<linearGradient
id="ad"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop34" />
<stop
stop-color="#f8f8f8"
offset=".25"
id="stop36" />
<stop
stop-color="#e2e2e2"
offset=".5"
id="stop38" />
<stop
stop-color="#b0b0b0"
offset=".75"
id="stop40" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop42" />
</linearGradient>
<linearGradient
y2="39.685001"
x2="34.534"
y1="12.285"
x1="14.463"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.3514374,8.725974)"
gradientUnits="userSpaceOnUse"
id="linearGradient3056"
xlink:href="#linearGradient3791"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4065"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient4067"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop4069" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop4071" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop4073" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop4075" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop4077" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4083"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.97986422,0,0,-0.90274951,37.705175,18.229565)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient3830"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop3832" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop3834" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop3836" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop3838" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop3840" />
</linearGradient>
<linearGradient
y2="35.973965"
x2="37.265358"
y1="9.6206512"
x1="8.6861582"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
gradientUnits="userSpaceOnUse"
id="linearGradient3844"
xlink:href="#linearGradient4067"
inkscape:collect="always" />
</defs>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="BottomPad"
style="display:inline">
<path
id="path28015"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 12.957202,22.499999 c 0.696265,0 1.279702,0.173238 1.277922,0.320021 -0.0025,0.209007 -0.541688,0.345838 -1.277922,0.345838 -0.675779,0 -1.194806,-0.207532 -1.194806,-0.345838 0,-0.09975 0.519027,-0.320021 1.194806,-0.320021 z m 0.04091,-0.861955 c -2.54827,0 -4.6140603,0.529189 -4.6140603,1.181976 0,0.652788 2.0657903,1.181977 4.6140603,1.181977 2.54828,0 4.61407,-0.529189 4.61407,-1.181977 0,-0.652787 -2.06579,-1.181976 -4.61407,-1.181976 z" />
</g>
<g
transform="matrix(1.6382539,0,0,1.5572263,1.3665954,0.36314149)"
id="g16">
<rect
height="16"
width="16"
y="0"
x="0"
id="rect18"
style="fill-opacity:0" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Conn1"
style="display:inline">
<path
d="m 13.9961,18.831948 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path28011-2-1-7"
sodipodi:nodetypes="cccscc" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Pad1">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,19 c 2.546856,0 4.611492,-0.528893 4.611492,-1.181316 0,-0.652423 -2.064636,-1.181316 -4.611492,-1.181316 -2.546853,0 -4.6114892,0.528893 -4.6114892,1.181316 C 8.3866278,18.471107 10.451264,19 12.998117,19 Z m 0,-0.861474 c -0.695877,0 -1.278988,-0.17314 -1.277209,-0.319842 0.0025,-0.208889 0.541386,-0.345644 1.277209,-0.345644 0.6754,0 1.194138,0.207415 1.194138,0.345644 0,0.09969 -0.518738,0.319842 -1.194138,0.319842 z"
id="path28011-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
<path
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 1,17.828104 H 13.609368"
id="path2990-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="Conn2">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-0"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,13.782119 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z" />
</g>
<g
style="display:none"
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Pad2">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998116,11.650933 c -2.510174,0 -4.545076,0.521276 -4.545076,1.164303 0,0.643027 2.034902,1.164303 4.545076,1.164303 2.510178,0 4.54508,-0.521276 4.54508,-1.164303 0,-0.643027 -2.034902,-1.164303 -4.54508,-1.164303 z m 0,0.849067 c 0.685855,0 1.260568,0.170647 1.258814,0.315236 -0.0025,0.205881 -0.533588,0.340666 -1.258814,0.340666 -0.665674,0 -1.176941,-0.204428 -1.176941,-0.340666 0,-0.09826 0.511267,-0.315236 1.176941,-0.315236 z"
id="path28011-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer8"
inkscape:label="Conn3">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-9"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,8.6855004 -2,0.002 L 12,13 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,13.145369 13.691904,13.103079 14,13 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Pad3"
style="display:none">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,6.6594104 c -2.485111,0 -4.4996959,0.5160712 -4.4996959,1.1526781 0,0.6366069 2.0145839,1.1526792 4.4996959,1.1526792 2.485114,0 4.499698,-0.5160723 4.499698,-1.1526792 0,-0.6366069 -2.014584,-1.1526781 -4.499698,-1.1526781 z m 0,0.8405896 c 0.679007,0 1.247982,0.1689432 1.246245,0.3120885 -0.0025,0.2038254 -0.528261,0.3372646 -1.246245,0.3372646 -0.659028,0 -1.16519,-0.2023871 -1.16519,-0.3372646 C 11.832927,7.7148135 12.339089,7.5 12.998117,7.5 Z"
id="path28011-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="Conn4">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-3"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,3.6855 -2,0.002 L 12,8 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,8.145369 13.691904,8.103079 14,8 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="TopPad"
style="display:inline">
<path
sodipodi:nodetypes="ssssssssss"
inkscape:connector-curvature="0"
id="path28011"
d="m 12.998117,1.6581699 c -2.488778,0 -4.5063356,0.5168328 -4.5063356,1.1543791 0,0.6375463 2.0175566,1.154379 4.5063356,1.154379 2.488781,0 4.506338,-0.5168327 4.506338,-1.154379 0,-0.6375463 -2.017557,-1.1543791 -4.506338,-1.1543791 z m 0,0.8418301 c 0.680009,0 1.249823,0.1691924 1.248084,0.312549 -0.0025,0.2041261 -0.52904,0.3377622 -1.248084,0.3377622 -0.66,0 -1.166909,-0.2026857 -1.166909,-0.3377622 C 11.831208,2.71513 12.338117,2.5 12.998117,2.5 Z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path2990"
d="M 25.109369,2.8517413 H 12.609368"
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,406 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="553.84998"
inkscape:export-xdpi="553.84998"
inkscape:export-filename="/home/seth/code/kicad/kicad_bare/bitmaps_png/sources/pads_reset_unused.png"
height="26"
width="26"
version="1.1"
id="svg2"
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
sodipodi:docname="pads_reset_unused.svg">
<metadata
id="metadata40">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<cc:license
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
<cc:permits
rdf:resource="http://creativecommons.org/ns#Reproduction" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#Distribution" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Notice" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#Attribution" />
<cc:permits
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
<cc:requires
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
</cc:License>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2099"
id="namedview38"
showgrid="true"
inkscape:snap-to-guides="false"
inkscape:snap-grids="true"
inkscape:zoom="45.254834"
inkscape:cx="4.4344284"
inkscape:cy="16.611474"
inkscape:window-x="0"
inkscape:window-y="37"
inkscape:window-maximized="1"
inkscape:current-layer="layer3"
inkscape:snap-nodes="true"
inkscape:document-rotation="0"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid3017"
empspacing="2"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="0.5"
spacingy="0.5"
originx="0"
originy="0" />
<sodipodi:guide
position="8.9926755,14.201282"
orientation="1,0"
id="guide28127" />
<sodipodi:guide
position="16.882174,14.796777"
orientation="1,0"
id="guide28129" />
</sodipodi:namedview>
<defs
id="defs4">
<linearGradient
x1="14.463"
y1="12.285"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
x2="34.534"
gradientUnits="userSpaceOnUse"
y2="39.685001"
id="linearGradient3791">
<stop
id="stop3793"
offset="0"
stop-color="#c9c9c9" />
<stop
id="stop3795"
offset="0.40114263"
stop-color="#f8f8f8" />
<stop
id="stop3797"
offset="0.72174245"
stop-color="#e2e2e2" />
<stop
id="stop3799"
offset="0.99654227"
stop-color="#b0b0b0" />
<stop
id="stop3801"
offset="1"
stop-color="#c9c9c9" />
</linearGradient>
<filter
id="c"
height="1.3651"
width="1.2097"
color-interpolation-filters="sRGB"
y="-0.18257"
x="-0.10484">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur7" />
</filter>
<filter
id="d"
height="1.4696"
width="1.4809999"
color-interpolation-filters="sRGB"
y="-0.23481999"
x="-0.24049">
<feGaussianBlur
stdDeviation="1.5978799"
id="feGaussianBlur10" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#ad"
id="linearGradient3095"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.8528064,8.6668249)"
x1="14.463"
y1="12.285"
x2="34.534"
y2="39.685001" />
<linearGradient
id="ad"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop34" />
<stop
stop-color="#f8f8f8"
offset=".25"
id="stop36" />
<stop
stop-color="#e2e2e2"
offset=".5"
id="stop38" />
<stop
stop-color="#b0b0b0"
offset=".75"
id="stop40" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop42" />
</linearGradient>
<linearGradient
y2="39.685001"
x2="34.534"
y1="12.285"
x1="14.463"
gradientTransform="matrix(0.41988578,0,0,0.39843199,7.3514374,8.725974)"
gradientUnits="userSpaceOnUse"
id="linearGradient3056"
xlink:href="#linearGradient3791"
inkscape:collect="always" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4065"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient4067"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop4069" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop4071" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop4073" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop4075" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop4077" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4067"
id="linearGradient4083"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.97986422,0,0,-0.90274951,37.705175,18.229565)"
x1="8.6861582"
y1="9.6206512"
x2="37.265358"
y2="35.973965" />
<linearGradient
id="linearGradient3830"
y2="39.685001"
gradientUnits="userSpaceOnUse"
x2="34.534"
gradientTransform="matrix(1.2419,0,0,1.2419,36.866,-2.4533)"
y1="12.285"
x1="14.463">
<stop
stop-color="#c9c9c9"
offset="0"
id="stop3832" />
<stop
stop-color="#f8f8f8"
offset="0.44999999"
id="stop3834" />
<stop
stop-color="#e2e2e2"
offset="0.66666645"
id="stop3836" />
<stop
stop-color="#b0b0b0"
offset="0.95000005"
id="stop3838" />
<stop
stop-color="#c9c9c9"
offset="1"
id="stop3840" />
</linearGradient>
<linearGradient
y2="35.973965"
x2="37.265358"
y1="9.6206512"
x1="8.6861582"
gradientTransform="matrix(0.41988577,0,0,0.39843198,8.071322,8.7437063)"
gradientUnits="userSpaceOnUse"
id="linearGradient3844"
xlink:href="#linearGradient4067"
inkscape:collect="always" />
</defs>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="BottomPad"
style="display:inline">
<path
id="path28015"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 12.957202,22.499999 c 0.696265,0 1.279702,0.173238 1.277922,0.320021 -0.0025,0.209007 -0.541688,0.345838 -1.277922,0.345838 -0.675779,0 -1.194806,-0.207532 -1.194806,-0.345838 0,-0.09975 0.519027,-0.320021 1.194806,-0.320021 z m 0.04091,-0.861955 c -2.54827,0 -4.6140603,0.529189 -4.6140603,1.181976 0,0.652788 2.0657903,1.181977 4.6140603,1.181977 2.54828,0 4.61407,-0.529189 4.61407,-1.181977 0,-0.652787 -2.06579,-1.181976 -4.61407,-1.181976 z" />
</g>
<g
transform="matrix(1.6382539,0,0,1.5572263,1.3665954,0.36314149)"
id="g16">
<rect
height="16"
width="16"
y="0"
x="0"
id="rect18"
style="fill-opacity:0" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="Conn1"
style="display:inline">
<path
d="m 13.9961,18.831948 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path28011-2-1-7"
sodipodi:nodetypes="cccscc" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="Pad1">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,19 c 2.546856,0 4.611492,-0.528893 4.611492,-1.181316 0,-0.652423 -2.064636,-1.181316 -4.611492,-1.181316 -2.546853,0 -4.6114892,0.528893 -4.6114892,1.181316 C 8.3866278,18.471107 10.451264,19 12.998117,19 Z m 0,-0.861474 c -0.695877,0 -1.278988,-0.17314 -1.277209,-0.319842 0.0025,-0.208889 0.541386,-0.345644 1.277209,-0.345644 0.6754,0 1.194138,0.207415 1.194138,0.345644 0,0.09969 -0.518738,0.319842 -1.194138,0.319842 z"
id="path28011-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
<path
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 1,17.828104 H 13.609368"
id="path2990-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
<g
inkscape:groupmode="layer"
id="layer7"
inkscape:label="Conn2">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-0"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,13.782119 -2,0.002 0.0039,4.3125 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 0.347149,0.01473 0.671362,-0.02756 0.979458,-0.130639 z" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Pad2">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998116,11.650933 c -2.510174,0 -4.545076,0.521276 -4.545076,1.164303 0,0.643027 2.034902,1.164303 4.545076,1.164303 2.510178,0 4.54508,-0.521276 4.54508,-1.164303 0,-0.643027 -2.034902,-1.164303 -4.54508,-1.164303 z m 0,0.849067 c 0.685855,0 1.260568,0.170647 1.258814,0.315236 -0.0025,0.205881 -0.533588,0.340666 -1.258814,0.340666 -0.665674,0 -1.176941,-0.204428 -1.176941,-0.340666 0,-0.09826 0.511267,-0.315236 1.176941,-0.315236 z"
id="path28011-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer8"
inkscape:label="Conn3">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-9"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,8.6855004 -2,0.002 L 12,13 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,13.145369 13.691904,13.103079 14,13 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Pad3"
style="display:inline">
<path
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:0.999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.998117,6.6594104 c -2.485111,0 -4.4996959,0.5160712 -4.4996959,1.1526781 0,0.6366069 2.0145839,1.1526792 4.4996959,1.1526792 2.485114,0 4.499698,-0.5160723 4.499698,-1.1526792 0,-0.6366069 -2.014584,-1.1526781 -4.499698,-1.1526781 z m 0,0.8405896 c 0.679007,0 1.247982,0.1689432 1.246245,0.3120885 -0.0025,0.2038254 -0.528261,0.3372646 -1.246245,0.3372646 -0.659028,0 -1.16519,-0.2023871 -1.16519,-0.3372646 C 11.832927,7.7148135 12.339089,7.5 12.998117,7.5 Z"
id="path28011-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ssssssssss" />
</g>
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="Conn4">
<path
sodipodi:nodetypes="cccscc"
id="path28011-2-1-7-3"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#ffffff;stroke-width:0.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.9961,3.6855 -2,0.002 L 12,8 c 0.328426,0.128812 0.678956,0.116149 1.020542,0.130639 C 13.367691,8.145369 13.691904,8.103079 14,8 Z" />
</g>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="TopPad"
style="display:inline">
<path
sodipodi:nodetypes="ssssssssss"
inkscape:connector-curvature="0"
id="path28011"
d="m 12.998117,1.6581699 c -2.488778,0 -4.5063356,0.5168328 -4.5063356,1.1543791 0,0.6375463 2.0175566,1.154379 4.5063356,1.154379 2.488781,0 4.506338,-0.5168327 4.506338,-1.154379 0,-0.6375463 -2.017557,-1.1543791 -4.506338,-1.1543791 z m 0,0.8418301 c 0.680009,0 1.249823,0.1691924 1.248084,0.312549 -0.0025,0.2041261 -0.52904,0.3377622 -1.248084,0.3377622 -0.66,0 -1.166909,-0.2026857 -1.166909,-0.3377622 C 11.831208,2.71513 12.338117,2.5 12.998117,2.5 Z"
style="display:inline;fill:#008000;fill-opacity:1;stroke:#008000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path2990"
d="M 25.109369,2.8517413 H 12.609368"
style="display:inline;fill:none;stroke:#008000;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -2,7 +2,7 @@
# This program source code file is part of KiCad, a free EDA CAD application. # This program source code file is part of KiCad, a free EDA CAD application.
# #
# Copyright (C) 2012 CERN. # Copyright (C) 2012 CERN.
# Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors. # Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.txt for contributors.
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License # modify it under the terms of the GNU General Public License
@ -134,6 +134,7 @@ island_area_min
italic italic
justify justify
keepout keepout
keep_end_layers
keep_upright keep_upright
kicad_pcb kicad_pcb
last_trace_width last_trace_width
@ -204,6 +205,7 @@ rev
rect rect
rect_delta rect_delta
reference reference
remove_unused_layers
right right
rotate rotate
roundrect roundrect

View File

@ -142,6 +142,8 @@ set( PCBNEW_DIALOGS
dialogs/dialog_track_via_properties_base.cpp dialogs/dialog_track_via_properties_base.cpp
dialogs/dialog_track_via_size.cpp dialogs/dialog_track_via_size.cpp
dialogs/dialog_track_via_size_base.cpp dialogs/dialog_track_via_size_base.cpp
dialogs/dialog_unused_pad_layers.cpp
dialogs/dialog_unused_pad_layers_base.cpp
dialogs/dialog_update_pcb.cpp dialogs/dialog_update_pcb.cpp
dialogs/dialog_update_pcb_base.cpp dialogs/dialog_update_pcb_base.cpp
dialogs/panel_display_options.cpp dialogs/panel_display_options.cpp

View File

@ -46,6 +46,7 @@
#include <class_board.h> #include <class_board.h>
#include <class_module.h> #include <class_module.h>
#include <class_drawsegment.h> #include <class_drawsegment.h>
#include <connectivity/connectivity_data.h>
#include <geometry/polygon_test_point_inside.h> #include <geometry/polygon_test_point_inside.h>
#include <convert_to_biu.h> #include <convert_to_biu.h>
#include <convert_basic_shapes_to_polygon.h> #include <convert_basic_shapes_to_polygon.h>
@ -94,6 +95,8 @@ D_PAD::D_PAD( MODULE* parent ) :
m_shapesDirty = true; m_shapesDirty = true;
m_effectiveBoundingRadius = 0; m_effectiveBoundingRadius = 0;
m_RemoveUnconnectedLayer = false;
m_KeepTopBottomLayer = true;
} }
@ -173,6 +176,45 @@ bool D_PAD::IsFlipped() const
} }
bool D_PAD::IsPadOnLayer( LSET aLayers ) const
{
for( auto layer : aLayers.Seq() )
{
if( IsPadOnLayer( layer ) )
return true;
}
return false;
}
bool D_PAD::IsPadOnLayer( int aLayer ) const
{
BOARD* board = GetBoard();
if( !board )
return false;
/// We don't remove the copper from non-PTH pads
if( GetAttribute() != PAD_ATTRIB_STANDARD )
return IsOnLayer( static_cast<PCB_LAYER_ID>( aLayer ) );
/// Heatsink pads always get copper
if( GetProperty() == PAD_PROP_HEATSINK )
return IsOnLayer( static_cast<PCB_LAYER_ID>( aLayer ) );
if( !m_RemoveUnconnectedLayer )
return true;
/// Plated through hole pads need copper on the top/bottom layers for proper soldering
if( aLayer == F_Cu || aLayer == B_Cu )
return true;
return board->GetConnectivity()->IsConnectedOnLayer( this, static_cast<int>( aLayer ),
{ PCB_TRACE_T, PCB_ARC_T, PCB_VIA_T, PCB_PAD_T } );
}
int D_PAD::GetRoundRectCornerRadius() const int D_PAD::GetRoundRectCornerRadius() const
{ {
return KiROUND( std::min( m_Size.x, m_Size.y ) * m_roundedCornerScale ); return KiROUND( std::min( m_Size.x, m_Size.y ) * m_roundedCornerScale );

View File

@ -502,6 +502,20 @@ public:
int GetSubRatsnest() const { return m_SubRatsnest; } int GetSubRatsnest() const { return m_SubRatsnest; }
void SetSubRatsnest( int aSubRatsnest ) { m_SubRatsnest = aSubRatsnest; } void SetSubRatsnest( int aSubRatsnest ) { m_SubRatsnest = aSubRatsnest; }
/**
* Sets the unconnected removal property. If true, the copper is removed on zone fill
* or when specifically requested when the pad is not connected on a layer. This requires
* that there be a through hole.
*/
void SetRemoveUnconnected( bool aSet ) { m_RemoveUnconnectedLayer = aSet; }
bool GetRemoveUnconnected() const { return m_RemoveUnconnectedLayer; }
/**
* Sets whether we keep the top and bottom connections even if they are not connected
*/
void SetKeepTopBottom( bool aSet ) { m_KeepTopBottomLayer = aSet; }
bool GetKeepTopBottom() const { return m_KeepTopBottomLayer; }
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override; void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
bool IsOnLayer( PCB_LAYER_ID aLayer ) const override bool IsOnLayer( PCB_LAYER_ID aLayer ) const override
@ -509,6 +523,9 @@ public:
return m_layerMask[aLayer]; return m_layerMask[aLayer];
} }
bool IsPadOnLayer( int aLayer ) const;
bool IsPadOnLayer( LSET aLayers ) const;
bool HitTest( const wxPoint& aPosition, int aAccuracy = 0 ) const override; bool HitTest( const wxPoint& aPosition, int aAccuracy = 0 ) const override;
bool HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy = 0 ) const override; bool HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy = 0 ) const override;
@ -678,6 +695,9 @@ private:
int m_LengthPadToDie; // Length net from pad to die, inside the package int m_LengthPadToDie; // Length net from pad to die, inside the package
bool m_RemoveUnconnectedLayer; // If true, the pad copper is removed for layers that are not connected
bool m_KeepTopBottomLayer; // When removing unconnected pads, keep the top and bottom pads
/* /*
* Pad clearances, margins, etc. exist in a hiearchy. If a given level is specified then * Pad clearances, margins, etc. exist in a hiearchy. If a given level is specified then
* the remaining levels are NOT consulted. * the remaining levels are NOT consulted.

View File

@ -26,6 +26,7 @@
#include <fctsys.h> #include <fctsys.h>
#include <pcb_base_frame.h> #include <pcb_base_frame.h>
#include <connectivity/connectivity_data.h>
#include <class_board.h> #include <class_board.h>
#include <class_track.h> #include <class_track.h>
#include <base_units.h> #include <base_units.h>
@ -60,6 +61,8 @@ VIA::VIA( BOARD_ITEM* aParent ) :
SetViaType( VIATYPE::THROUGH ); SetViaType( VIATYPE::THROUGH );
m_BottomLayer = B_Cu; m_BottomLayer = B_Cu;
SetDrillDefault(); SetDrillDefault();
m_RemoveUnconnectedLayer = false;
m_KeepTopBottomLayer = true;
} }
@ -163,6 +166,14 @@ void TRACK::GetWidthConstraints( int* aMin, int* aMax, wxString* aSource ) const
int VIA::GetMinAnnulus( PCB_LAYER_ID aLayer, wxString* aSource ) const int VIA::GetMinAnnulus( PCB_LAYER_ID aLayer, wxString* aSource ) const
{ {
if( !IsPadOnLayer( aLayer ) )
{
if( aSource )
*aSource = _( "removed annulus" );
return 0;
}
const DRC_CONSTRAINT* constraint = GetConstraint( this, nullptr, DRC_RULE_ID_ANNULUS, aLayer, const DRC_CONSTRAINT* constraint = GetConstraint( this, nullptr, DRC_RULE_ID_ANNULUS, aLayer,
aSource ); aSource );
@ -482,6 +493,39 @@ void VIA::SanitizeLayers()
} }
bool VIA::IsPadOnLayer( LSET aLayers ) const
{
for( auto layer : aLayers.Seq() )
{
if( IsPadOnLayer( layer ) )
return true;
}
return false;
}
bool VIA::IsPadOnLayer( int aLayer ) const
{
BOARD* board = GetBoard();
if( !board )
return false;
if( !IsOnLayer( static_cast<PCB_LAYER_ID>( aLayer ) ) )
return false;
if( !m_RemoveUnconnectedLayer )
return true;
if( m_KeepTopBottomLayer && ( aLayer == m_Layer || aLayer == m_BottomLayer ) )
return true;
return board->GetConnectivity()->IsConnectedOnLayer( this, static_cast<int>( aLayer ),
{ PCB_TRACE_T, PCB_ARC_T, PCB_PAD_T } );
}
void TRACK::ViewGetLayers( int aLayers[], int& aCount ) const void TRACK::ViewGetLayers( int aLayers[], int& aCount ) const
{ {
// Show the track and its netname on different layers // Show the track and its netname on different layers

View File

@ -441,6 +441,33 @@ public:
int GetMinAnnulus( PCB_LAYER_ID aLayer, wxString* aSource ) const; int GetMinAnnulus( PCB_LAYER_ID aLayer, wxString* aSource ) const;
/**
* Sets the unconnected removal property. If true, the copper is removed on zone fill
* or when specifically requested when the via is not connected on a layer.
*/
void SetRemoveUnconnected( bool aSet ) { m_RemoveUnconnectedLayer = aSet; }
bool GetRemoveUnconnected() const { return m_RemoveUnconnectedLayer; }
/**
* Sets whether we keep the top and bottom connections even if they are not connected
*/
void SetKeepTopBottom( bool aSet ) { m_KeepTopBottomLayer = aSet; }
bool GetKeepTopBottom() const { return m_KeepTopBottomLayer; }
/**
* Checks to see whether the via should have a pad on the specific layer
* @param aLayer Layer to check for connectivity
* @return true if connected by pad or track
*/
bool IsPadOnLayer( int aLayer ) const;
/**
* Checks to see if the via is present on any of the layers in the set
* @param aLayers set of layers to check the via against
* @return true if connected by pad or track on any of the associated layers
*/
bool IsPadOnLayer( LSET aLayers ) const;
/** /**
* Function SetDrill * Function SetDrill
* sets the drill value for vias. * sets the drill value for vias.
@ -484,6 +511,9 @@ private:
VIATYPE m_ViaType; // Type of via VIATYPE m_ViaType; // Type of via
int m_Drill; // for vias: via drill (- 1 for default value) int m_Drill; // for vias: via drill (- 1 for default value)
bool m_RemoveUnconnectedLayer; ///< Remove unconnected copper on a via
bool m_KeepTopBottomLayer; ///< Keep the top and bottom annular rings
}; };

View File

@ -124,8 +124,6 @@ public:
using CLUSTERS = std::vector<CN_CLUSTER_PTR>; using CLUSTERS = std::vector<CN_CLUSTER_PTR>;
private:
class ITEM_MAP_ENTRY class ITEM_MAP_ENTRY
{ {
public: public:
@ -156,6 +154,8 @@ private:
std::list<CN_ITEM*> m_items; std::list<CN_ITEM*> m_items;
}; };
private:
CN_LIST m_itemList; CN_LIST m_itemList;
std::unordered_map<const BOARD_ITEM*, ITEM_MAP_ENTRY> m_itemMap; std::unordered_map<const BOARD_ITEM*, ITEM_MAP_ENTRY> m_itemMap;

View File

@ -326,6 +326,26 @@ void CONNECTIVITY_DATA::PropagateNets()
m_connAlgo->PropagateNets(); m_connAlgo->PropagateNets();
} }
bool CONNECTIVITY_DATA::IsConnectedOnLayer( const BOARD_CONNECTED_ITEM *aItem, int aLayer,
std::vector<KICAD_T> aTypes ) const
{
CN_CONNECTIVITY_ALGO::ITEM_MAP_ENTRY &entry = m_connAlgo->ItemEntry( aItem );
for( auto citem : entry.GetItems() )
{
for( auto connected : citem->ConnectedItems() )
{
if( connected->Valid() && connected->Layers().Overlaps( aLayer )
&& ( aTypes.empty()
|| std::count( aTypes.begin(), aTypes.end(),
connected->Parent()->Type() ) > 0 ) )
return true;
}
}
return false;
}
unsigned int CONNECTIVITY_DATA::GetUnconnectedCount() const unsigned int CONNECTIVITY_DATA::GetUnconnectedCount() const
{ {

View File

@ -173,6 +173,8 @@ public:
*/ */
unsigned int GetUnconnectedCount() const; unsigned int GetUnconnectedCount() const;
bool IsConnectedOnLayer( const BOARD_CONNECTED_ITEM* aItem, int aLayer, std::vector<KICAD_T> aTypes = {} ) const;
unsigned int GetNodeCount( int aNet = -1 ) const; unsigned int GetNodeCount( int aNet = -1 ) const;
unsigned int GetPadCount( int aNet = -1 ) const; unsigned int GetPadCount( int aNet = -1 ) const;

View File

@ -0,0 +1,157 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 CERN
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* 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, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-3.0.html
* or you may search the http://www.gnu.org website for the version 3 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "dialog_unused_pad_layers.h"
#include <bitmaps.h>
#include <board_commit.h>
#include <class_track.h>
#include <class_pad.h>
#include <pcb_edit_frame.h>
#include <tools/selection_tool.h>
enum SCOPE : int
{
SCOPE_VIAS = 0,
SCOPE_PADS = 1
};
enum PAD_ACTION : int
{
PAD_ACTION_REMOVE = 0,
PAD_ACTION_RESET
};
DIALOG_UNUSED_PAD_LAYERS::DIALOG_UNUSED_PAD_LAYERS( PCB_BASE_FRAME* aParent,
const PCBNEW_SELECTION& aItems,
COMMIT& aCommit )
: DIALOG_UNUSED_PAD_LAYERS_BASE( aParent ),
m_frame( aParent ),
m_items( aItems ),
m_commit( aCommit )
{
m_StdButtonsOK->SetDefault();
m_image->SetBitmap( KiBitmap( pads_remove_unused_xpm ) );
// Now all widgets have the size fixed, call FinishDialogSettings
FinishDialogSettings();
}
void DIALOG_UNUSED_PAD_LAYERS::syncImages( wxCommandEvent& aEvent )
{
if( m_rbAction->GetSelection() == PAD_ACTION_RESET )
m_image->SetBitmap( KiBitmap( pads_reset_unused_xpm ) );
else if( m_cbPreservePads->IsChecked() )
m_image->SetBitmap( KiBitmap( pads_remove_unused_keep_bottom_xpm ) );
else
m_image->SetBitmap( KiBitmap( pads_remove_unused_xpm ) );
}
void DIALOG_UNUSED_PAD_LAYERS::onScopeChange( wxCommandEvent& aEvent )
{
if( m_rbScope->GetSelection() == SCOPE_PADS )
{
m_cbPreservePads->SetValue( true );
m_cbPreservePads->Disable();
}
else
m_cbPreservePads->Enable();
syncImages( aEvent );
}
bool DIALOG_UNUSED_PAD_LAYERS::TransferDataFromWindow()
{
if( m_cbSelectedOnly->IsChecked() )
{
for( auto item : m_items )
{
m_commit.Modify( item );
if( item->Type() == PCB_VIA_T && m_rbScope->GetSelection() == SCOPE_VIAS )
{
VIA* via = static_cast<VIA*>( item );
via->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE );
via->SetKeepTopBottom( m_cbPreservePads->IsChecked() );
}
if( item->Type() == PCB_MODULE_T && m_rbScope->GetSelection() == SCOPE_PADS )
{
MODULE* mod = static_cast<MODULE*>( item );
for( auto pad : mod->Pads() )
{
pad->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE );
pad->SetKeepTopBottom( m_cbPreservePads->IsChecked() );
}
}
if( item->Type() == PCB_PAD_T && m_rbScope->GetSelection() == SCOPE_PADS )
{
D_PAD* pad = static_cast<D_PAD*>( item );
pad->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE );
pad->SetKeepTopBottom( m_cbPreservePads->IsChecked() );
}
}
}
else
{
if( m_rbScope->GetSelection() == SCOPE_PADS )
{
for( auto item : m_frame->GetBoard()->Modules() )
{
m_commit.Modify( item );
MODULE* mod = static_cast<MODULE*>( item );
for( auto pad : mod->Pads() )
{
pad->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE );
pad->SetKeepTopBottom( m_cbPreservePads->IsChecked() );
}
}
}
else
{
for( auto item : m_frame->GetBoard()->Tracks() )
{
if( item->Type() != PCB_VIA_T )
continue;
m_commit.Modify( item );
VIA* via = static_cast<VIA*>( item );
via->SetRemoveUnconnected( m_rbAction->GetSelection() == PAD_ACTION_REMOVE );
via->SetKeepTopBottom( m_cbPreservePads->IsChecked() );
}
}
}
m_commit.Push( _( "Set Unused Pad Properties" ) );
return true;
}

View File

@ -0,0 +1,556 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<wxFormBuilder_Project>
<FileVersion major="1" minor="15" />
<object class="Project" expanded="1">
<property name="class_decoration"></property>
<property name="code_generation">C++</property>
<property name="disconnect_events">1</property>
<property name="disconnect_mode">source_name</property>
<property name="disconnect_php_events">0</property>
<property name="disconnect_python_events">0</property>
<property name="embedded_files_path">res</property>
<property name="encoding">UTF-8</property>
<property name="event_generation">connect</property>
<property name="file">dialog_unused_pad_layers_base</property>
<property name="first_id">1000</property>
<property name="help_provider">none</property>
<property name="indent_with_spaces"></property>
<property name="internationalize">1</property>
<property name="name">DIALOG_UNUSED_PAD_LAYERS_BASE</property>
<property name="namespace"></property>
<property name="path">.</property>
<property name="precompiled_header"></property>
<property name="relative_path">1</property>
<property name="skip_lua_events">1</property>
<property name="skip_php_events">1</property>
<property name="skip_python_events">1</property>
<property name="ui_table">UI</property>
<property name="use_enum">0</property>
<property name="use_microsoft_bom">0</property>
<object class="Dialog" expanded="1">
<property name="aui_managed">0</property>
<property name="aui_manager_style">wxAUI_MGR_DEFAULT</property>
<property name="bg"></property>
<property name="center">wxBOTH</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="enabled">1</property>
<property name="event_handler">impl_virtual</property>
<property name="extra_style"></property>
<property name="fg"></property>
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="maximum_size"></property>
<property name="minimum_size">-1,-1</property>
<property name="name">DIALOG_UNUSED_PAD_LAYERS_BASE</property>
<property name="pos"></property>
<property name="size">602,321</property>
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
<property name="title">Unused Pad Layers</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">m_MainSizer</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">protected</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">6</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer2</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">4</property>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer6</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">0</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">1</property>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer4</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag"></property>
<property name="proportion">2</property>
<object class="wxBoxSizer" expanded="0">
<property name="minimum_size"></property>
<property name="name">bSizer5</property>
<property name="orient">wxHORIZONTAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;&amp;Vias&quot; &quot;&amp;Pads&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Scope</property>
<property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_rbScope</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnRadioBox">onScopeChange</event>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxALL|wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxRadioBox" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;&amp;Remove Unused&quot; &quot;Reset &amp;Unused&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Action</property>
<property name="majorDimension">1</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_rbAction</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxRA_SPECIFY_COLS</property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnRadioBox">syncImages</event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="spacer" expanded="1">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">&amp;Selection only</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_cbSelectedOnly</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">0</property>
<object class="wxCheckBox" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="checked">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">&amp;Keep pads at first and last layers</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_cbPreservePads</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<event name="OnCheckBox">syncImages</event>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticLine" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticline1</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style">wxLI_VERTICAL</property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxLEFT|wxRIGHT</property>
<property name="proportion">2</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer3</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="spacer" expanded="0">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">10</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticBitmap" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="bitmap">Load From Resource; </property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_image</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND</property>
<property name="proportion">0</property>
<object class="spacer" expanded="0">
<property name="height">0</property>
<property name="permission">protected</property>
<property name="width">0</property>
</object>
</object>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
<property name="flag">wxEXPAND|wxALL</property>
<property name="proportion">0</property>
<object class="wxStdDialogButtonSizer" expanded="0">
<property name="Apply">0</property>
<property name="Cancel">1</property>
<property name="ContextHelp">0</property>
<property name="Help">0</property>
<property name="No">0</property>
<property name="OK">1</property>
<property name="Save">0</property>
<property name="Yes">0</property>
<property name="minimum_size"></property>
<property name="name">m_StdButtons</property>
<property name="permission">protected</property>
</object>
</object>
</object>
</object>
</object>
</wxFormBuilder_Project>

View File

@ -0,0 +1,55 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2020 CERN
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
*
* 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, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-3.0.html
* or you may search the http://www.gnu.org website for the version 3 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __dialog_remove_unused_pads__
#define __dialog_remove_unused_pads__
#include "dialog_unused_pad_layers_base.h"
class COMMIT;
class PCB_BASE_FRAME;
class PCBNEW_SELECTION;
class DIALOG_UNUSED_PAD_LAYERS : public DIALOG_UNUSED_PAD_LAYERS_BASE
{
public:
DIALOG_UNUSED_PAD_LAYERS( PCB_BASE_FRAME* aParent,
const PCBNEW_SELECTION& aItems,
COMMIT& aCommit );
private:
bool TransferDataFromWindow() override;
bool AcceptOptions();
void syncImages( wxCommandEvent& aEvent ) override;
void onScopeChange( wxCommandEvent& aEvent ) override;
PCB_BASE_FRAME* m_frame;
const PCBNEW_SELECTION& m_items; // List of items to be modified.
COMMIT& m_commit; // An undo record to add any changes to.
};
#endif // __dialog_remove_unused_pads__

View File

@ -0,0 +1,112 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.9.0 Jul 27 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#include "dialog_unused_pad_layers_base.h"
///////////////////////////////////////////////////////////////////////////
DIALOG_UNUSED_PAD_LAYERS_BASE::DIALOG_UNUSED_PAD_LAYERS_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
{
this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
m_MainSizer = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizer2;
bSizer2 = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizer6;
bSizer6 = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizer4;
bSizer4 = new wxBoxSizer( wxVERTICAL );
wxBoxSizer* bSizer5;
bSizer5 = new wxBoxSizer( wxHORIZONTAL );
bSizer5->Add( 0, 0, 0, wxEXPAND, 5 );
wxString m_rbScopeChoices[] = { _("&Vias"), _("&Pads") };
int m_rbScopeNChoices = sizeof( m_rbScopeChoices ) / sizeof( wxString );
m_rbScope = new wxRadioBox( this, wxID_ANY, _("Scope"), wxDefaultPosition, wxDefaultSize, m_rbScopeNChoices, m_rbScopeChoices, 1, wxRA_SPECIFY_COLS );
m_rbScope->SetSelection( 0 );
bSizer5->Add( m_rbScope, 0, wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
wxString m_rbActionChoices[] = { _("&Remove Unused"), _("Reset &Unused") };
int m_rbActionNChoices = sizeof( m_rbActionChoices ) / sizeof( wxString );
m_rbAction = new wxRadioBox( this, wxID_ANY, _("Action"), wxDefaultPosition, wxDefaultSize, m_rbActionNChoices, m_rbActionChoices, 1, wxRA_SPECIFY_COLS );
m_rbAction->SetSelection( 0 );
bSizer5->Add( m_rbAction, 0, wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 );
bSizer5->Add( 0, 0, 0, wxEXPAND, 5 );
bSizer4->Add( bSizer5, 2, 0, 5 );
m_cbSelectedOnly = new wxCheckBox( this, wxID_ANY, _("&Selection only"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer4->Add( m_cbSelectedOnly, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_cbPreservePads = new wxCheckBox( this, wxID_ANY, _("&Keep pads at first and last layers"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer4->Add( m_cbPreservePads, 0, wxEXPAND|wxLEFT|wxRIGHT, 5 );
bSizer6->Add( bSizer4, 1, wxEXPAND, 0 );
bSizer2->Add( bSizer6, 4, wxEXPAND, 5 );
m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
bSizer2->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
wxBoxSizer* bSizer3;
bSizer3 = new wxBoxSizer( wxVERTICAL );
bSizer3->Add( 0, 0, 0, wxEXPAND, 5 );
m_image = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
bSizer3->Add( m_image, 0, wxALL, 10 );
bSizer3->Add( 0, 0, 0, wxEXPAND, 5 );
bSizer2->Add( bSizer3, 2, wxEXPAND|wxLEFT|wxRIGHT, 5 );
m_MainSizer->Add( bSizer2, 6, wxEXPAND, 5 );
m_StdButtons = new wxStdDialogButtonSizer();
m_StdButtonsOK = new wxButton( this, wxID_OK );
m_StdButtons->AddButton( m_StdButtonsOK );
m_StdButtonsCancel = new wxButton( this, wxID_CANCEL );
m_StdButtons->AddButton( m_StdButtonsCancel );
m_StdButtons->Realize();
m_MainSizer->Add( m_StdButtons, 0, wxEXPAND|wxALL, 5 );
this->SetSizer( m_MainSizer );
this->Layout();
this->Centre( wxBOTH );
// Connect Events
m_rbScope->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::onScopeChange ), NULL, this );
m_rbAction->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this );
m_cbPreservePads->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this );
}
DIALOG_UNUSED_PAD_LAYERS_BASE::~DIALOG_UNUSED_PAD_LAYERS_BASE()
{
// Disconnect Events
m_rbScope->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::onScopeChange ), NULL, this );
m_rbAction->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this );
m_cbPreservePads->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_UNUSED_PAD_LAYERS_BASE::syncImages ), NULL, this );
}

View File

@ -0,0 +1,63 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 3.9.0 Jul 27 2020)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
///////////////////////////////////////////////////////////////////////////
#pragma once
#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/intl.h>
#include "dialog_shim.h"
#include <wx/string.h>
#include <wx/radiobox.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/sizer.h>
#include <wx/checkbox.h>
#include <wx/statline.h>
#include <wx/bitmap.h>
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/statbmp.h>
#include <wx/button.h>
#include <wx/dialog.h>
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
/// Class DIALOG_UNUSED_PAD_LAYERS_BASE
///////////////////////////////////////////////////////////////////////////////
class DIALOG_UNUSED_PAD_LAYERS_BASE : public DIALOG_SHIM
{
private:
protected:
wxBoxSizer* m_MainSizer;
wxRadioBox* m_rbScope;
wxRadioBox* m_rbAction;
wxCheckBox* m_cbSelectedOnly;
wxCheckBox* m_cbPreservePads;
wxStaticLine* m_staticline1;
wxStaticBitmap* m_image;
wxStdDialogButtonSizer* m_StdButtons;
wxButton* m_StdButtonsOK;
wxButton* m_StdButtonsCancel;
// Virtual event handlers, overide them in your derived class
virtual void onScopeChange( wxCommandEvent& event ) { event.Skip(); }
virtual void syncImages( wxCommandEvent& event ) { event.Skip(); }
public:
DIALOG_UNUSED_PAD_LAYERS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Unused Pad Layers"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 602,321 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
~DIALOG_UNUSED_PAD_LAYERS_BASE();
};

View File

@ -41,6 +41,7 @@ void DRC::doTrackDrc( BOARD_COMMIT& aCommit, TRACK* aRefSeg, TRACKS::iterator aS
{ {
BOARD_DESIGN_SETTINGS& bds = m_pcb->GetDesignSettings(); BOARD_DESIGN_SETTINGS& bds = m_pcb->GetDesignSettings();
SHAPE_SEGMENT refSeg( aRefSeg->GetStart(), aRefSeg->GetEnd(), aRefSeg->GetWidth() ); SHAPE_SEGMENT refSeg( aRefSeg->GetStart(), aRefSeg->GetEnd(), aRefSeg->GetWidth() );
PCB_LAYER_ID refLayer = aRefSeg->GetLayer(); PCB_LAYER_ID refLayer = aRefSeg->GetLayer();
LSET refLayerSet = aRefSeg->GetLayerSet(); LSET refLayerSet = aRefSeg->GetLayerSet();
@ -268,6 +269,16 @@ void DRC::doTrackDrc( BOARD_COMMIT& aCommit, TRACK* aRefSeg, TRACKS::iterator aS
EDA_RECT inflatedBB = refSegBB; EDA_RECT inflatedBB = refSegBB;
inflatedBB.Inflate( pad->GetBoundingRadius() + m_largestClearance ); inflatedBB.Inflate( pad->GetBoundingRadius() + m_largestClearance );
/// We setup the dummy pad to use in case we need to only draw the hole outline rather
/// than the pad itself
D_PAD dummypad( pad->GetParent() );
dummypad.SetNetCode( pad->GetNetCode() );
dummypad.SetSize( pad->GetDrillSize() );
dummypad.SetOrientation( pad->GetOrientation() );
dummypad.SetShape( pad->GetDrillShape() == PAD_DRILL_SHAPE_OBLONG ? PAD_SHAPE_OVAL
: PAD_SHAPE_CIRCLE );
dummypad.SetPosition( pad->GetPosition() );
if( !inflatedBB.Contains( pad->GetPosition() ) ) if( !inflatedBB.Contains( pad->GetPosition() ) )
continue; continue;
@ -318,6 +329,10 @@ void DRC::doTrackDrc( BOARD_COMMIT& aCommit, TRACK* aRefSeg, TRACKS::iterator aS
} }
} }
/// Skip checking pad copper when it has been removed
if( !pad->IsPadOnLayer( refLayer ) )
continue;
int minClearance = aRefSeg->GetClearance( aRefSeg->GetLayer(), pad, int minClearance = aRefSeg->GetClearance( aRefSeg->GetLayer(), pad,
&m_clearanceSource ); &m_clearanceSource );
int actual; int actual;

View File

@ -1259,6 +1259,17 @@ void PCB_IO::format( D_PAD* aPad, int aNestLevel ) const
formatLayers( aPad->GetLayerSet() ); formatLayers( aPad->GetLayerSet() );
if( aPad->GetAttribute() == PAD_ATTRIB_STANDARD )
{
if( aPad->GetRemoveUnconnected() )
{
m_out->Print( 0, " (remove_unused_layers)" );
if( aPad->GetKeepTopBottom() )
m_out->Print( 0, " (keep_end_layers)" );
}
}
// Output the radius ratio for rounded and chamfered rect pads // Output the radius ratio for rounded and chamfered rect pads
if( aPad->GetShape() == PAD_SHAPE_ROUNDRECT || aPad->GetShape() == PAD_SHAPE_CHAMFERED_RECT) if( aPad->GetShape() == PAD_SHAPE_ROUNDRECT || aPad->GetShape() == PAD_SHAPE_CHAMFERED_RECT)
{ {
@ -1585,6 +1596,14 @@ void PCB_IO::format( TRACK* aTrack, int aNestLevel ) const
m_out->Print( 0, " (layers %s %s)", m_out->Print( 0, " (layers %s %s)",
m_out->Quotew( m_board->GetLayerName( layer1 ) ).c_str(), m_out->Quotew( m_board->GetLayerName( layer1 ) ).c_str(),
m_out->Quotew( m_board->GetLayerName( layer2 ) ).c_str() ); m_out->Quotew( m_board->GetLayerName( layer2 ) ).c_str() );
if( via->GetRemoveUnconnected() )
{
m_out->Print( 0, " (remove_unused_layers)" );
if( via->GetKeepTopBottom() )
m_out->Print( 0, " (keep_end_layers)" );
}
} }
else if( aTrack->Type() == PCB_ARC_T ) else if( aTrack->Type() == PCB_ARC_T )
{ {

View File

@ -74,7 +74,8 @@ class TEXTE_PCB;
//#define SEXPR_BOARD_FILE_VERSION 20200628 // remove visibility settings //#define SEXPR_BOARD_FILE_VERSION 20200628 // remove visibility settings
//#define SEXPR_BOARD_FILE_VERSION 20200724 // Add KIID to module components //#define SEXPR_BOARD_FILE_VERSION 20200724 // Add KIID to module components
//#define SEXPR_BOARD_FILE_VERSION 20200807 // Add zone hatch advanced settings //#define SEXPR_BOARD_FILE_VERSION 20200807 // Add zone hatch advanced settings
#define SEXPR_BOARD_FILE_VERSION 20200808 // Add properties to modules //#define SEXPR_BOARD_FILE_VERSION 20200808 // Add properties to modules
#define SEXPR_BOARD_FILE_VERSION 20200809 // Add REMOVE_UNUSED_LAYERS option to vias and THT pads
#define CTL_STD_LAYER_NAMES (1 << 0) ///< Use English Standard layer names #define CTL_STD_LAYER_NAMES (1 << 0) ///< Use English Standard layer names
#define CTL_OMIT_NETS (1 << 1) ///< Omit pads net names (useless in library) #define CTL_OMIT_NETS (1 << 1) ///< Omit pads net names (useless in library)

View File

@ -484,6 +484,9 @@ void PCB_EDIT_FRAME::ReCreateMenuBar()
toolsMenu->AddItem( PCB_ACTIONS::updateFootprints, SELECTION_CONDITIONS::ShowAlways ); toolsMenu->AddItem( PCB_ACTIONS::updateFootprints, SELECTION_CONDITIONS::ShowAlways );
toolsMenu->AddItem( PCB_ACTIONS::boardReannotate, SELECTION_CONDITIONS::ShowAlways ); toolsMenu->AddItem( PCB_ACTIONS::boardReannotate, SELECTION_CONDITIONS::ShowAlways );
toolsMenu->AddSeparator();
toolsMenu->AddItem( PCB_ACTIONS::removeUnusedPads, SELECTION_CONDITIONS::ShowAlways );
#if defined(KICAD_SCRIPTING_WXPYTHON) #if defined(KICAD_SCRIPTING_WXPYTHON)
auto pythonConsoleShownCondition = [] ( const SELECTION& aSel ) { auto pythonConsoleShownCondition = [] ( const SELECTION& aSel ) {
wxMiniFrame* pythonConsole = (wxMiniFrame *) PCB_EDIT_FRAME::findPythonConsole(); wxMiniFrame* pythonConsole = (wxMiniFrame *) PCB_EDIT_FRAME::findPythonConsole();

View File

@ -612,6 +612,11 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer )
else else
radius = aVia->GetWidth() / 2.0; radius = aVia->GetWidth() / 2.0;
/// Vias not connected to copper are optionally not drawn
/// We draw instead the hole size to ensure we show the proper clearance
if( IsCopperLayer( aLayer ) && !aVia->IsPadOnLayer( aLayer ) )
radius = getDrillSize(aVia) / 2.0 ;
bool sketchMode = false; bool sketchMode = false;
const COLOR4D& color = m_pcbSettings.GetColor( aVia, aLayer ); const COLOR4D& color = m_pcbSettings.GetColor( aVia, aLayer );
@ -696,14 +701,31 @@ void PCB_PAINTER::draw( const VIA* aVia, int aLayer )
void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
{ {
const D_PAD* pad = aPad;
/// We setup the dummy pad to use in case we need to only draw the hole outline rather
/// than the pad itself
D_PAD dummypad( aPad->GetParent() );
dummypad.SetNetCode( aPad->GetNetCode() );
dummypad.SetSize( aPad->GetDrillSize() );
dummypad.SetOrientation( aPad->GetOrientation() );
dummypad.SetShape( aPad->GetDrillShape() == PAD_DRILL_SHAPE_OBLONG ? PAD_SHAPE_OVAL
: PAD_SHAPE_CIRCLE );
dummypad.SetPosition( aPad->GetPosition() );
/// Pads not connected to copper are optionally not drawn
/// We draw instead the hole size to ensure we show the proper clearance
if( IsCopperLayer( aLayer ) && !aPad->IsPadOnLayer( aLayer ) )
pad = &dummypad;
// Draw description layer // Draw description layer
if( IsNetnameLayer( aLayer ) ) if( IsNetnameLayer( aLayer ) )
{ {
// Is anything that we can display enabled? // Is anything that we can display enabled?
if( m_pcbSettings.m_netNamesOnPads || m_pcbSettings.m_padNumbers ) if( m_pcbSettings.m_netNamesOnPads || m_pcbSettings.m_padNumbers )
{ {
bool displayNetname = ( m_pcbSettings.m_netNamesOnPads && !aPad->GetNetname().empty() ); bool displayNetname = ( m_pcbSettings.m_netNamesOnPads && !pad->GetNetname().empty() );
EDA_RECT padBBox = aPad->GetBoundingBox(); EDA_RECT padBBox = pad->GetBoundingBox();
VECTOR2D position = padBBox.Centre(); VECTOR2D position = padBBox.Centre();
VECTOR2D padsize = VECTOR2D( padBBox.GetSize() ); VECTOR2D padsize = VECTOR2D( padBBox.GetSize() );
@ -761,7 +783,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
if( displayNetname ) if( displayNetname )
{ {
wxString netname = UnescapeString( aPad->GetShortNetname() ); wxString netname = UnescapeString( pad->GetShortNetname() );
// calculate the size of net name text: // calculate the size of net name text:
double tsize = 1.5 * padsize.x / netname.Length(); double tsize = 1.5 * padsize.x / netname.Length();
tsize = std::min( tsize, size ); tsize = std::min( tsize, size );
@ -776,7 +798,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
if( m_pcbSettings.m_padNumbers ) if( m_pcbSettings.m_padNumbers )
{ {
const wxString& padName = aPad->GetName(); const wxString& padName = pad->GetName();
textpos.y = -textpos.y; textpos.y = -textpos.y;
double tsize = 1.5 * padsize.x / padName.Length(); double tsize = 1.5 * padsize.x / padName.Length();
tsize = std::min( tsize, size ); tsize = std::min( tsize, size );
@ -801,10 +823,10 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
// Pad hole color is pad-type-specific: the background color for plated holes and the // Pad hole color is pad-type-specific: the background color for plated holes and the
// pad color for NPTHs. Note the extra check for "should be" NPTHs to keep mis-marked // pad color for NPTHs. Note the extra check for "should be" NPTHs to keep mis-marked
// holes with no annular ring from getting "lost" in the background. // holes with no annular ring from getting "lost" in the background.
if( ( aLayer == LAYER_PADS_PLATEDHOLES ) && !aPad->PadShouldBeNPTH() ) if( ( aLayer == LAYER_PADS_PLATEDHOLES ) && !pad->PadShouldBeNPTH() )
color = m_pcbSettings.GetBackgroundColor(); color = m_pcbSettings.GetBackgroundColor();
else else
color = m_pcbSettings.GetColor( aPad, aLayer ); color = m_pcbSettings.GetColor( pad, aLayer );
if( m_pcbSettings.m_sketchMode[LAYER_PADS_TH] ) if( m_pcbSettings.m_sketchMode[LAYER_PADS_TH] )
{ {
@ -825,7 +847,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
// Choose drawing settings depending on if we are drawing a pad itself or a hole // Choose drawing settings depending on if we are drawing a pad itself or a hole
if( aLayer == LAYER_PADS_PLATEDHOLES || aLayer == LAYER_NON_PLATEDHOLES ) if( aLayer == LAYER_PADS_PLATEDHOLES || aLayer == LAYER_NON_PLATEDHOLES )
{ {
const SHAPE_SEGMENT* seg = aPad->GetEffectiveHoleShape(); const SHAPE_SEGMENT* seg = pad->GetEffectiveHoleShape();
if( seg->GetSeg().A == seg->GetSeg().B ) // Circular hole if( seg->GetSeg().A == seg->GetSeg().B ) // Circular hole
m_gal->DrawCircle( seg->GetSeg().A, seg->GetWidth()/2 ); m_gal->DrawCircle( seg->GetSeg().A, seg->GetWidth()/2 );
@ -834,19 +856,19 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
} }
else else
{ {
wxSize pad_size = aPad->GetSize(); wxSize pad_size = pad->GetSize();
wxSize margin; wxSize margin;
switch( aLayer ) switch( aLayer )
{ {
case F_Mask: case F_Mask:
case B_Mask: case B_Mask:
margin.x = margin.y = aPad->GetSolderMaskMargin(); margin.x = margin.y = pad->GetSolderMaskMargin();
break; break;
case F_Paste: case F_Paste:
case B_Paste: case B_Paste:
margin = aPad->GetSolderPasteMargin(); margin = pad->GetSolderPasteMargin();
break; break;
default: default:
@ -856,11 +878,11 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
if( margin.x != margin.y ) if( margin.x != margin.y )
{ {
const_cast<D_PAD*>( aPad )->SetSize( pad_size + margin + margin ); const_cast<D_PAD*>( pad )->SetSize( pad_size + margin + margin );
margin.x = margin.y = 0; margin.x = margin.y = 0;
} }
const std::shared_ptr<SHAPE_COMPOUND> shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>( aPad->GetEffectiveShape() ); const std::shared_ptr<SHAPE_COMPOUND> shapes = std::dynamic_pointer_cast<SHAPE_COMPOUND>( pad->GetEffectiveShape() );
if( shapes && shapes->Size() == 1 && shapes->Shapes()[0]->Type() == SH_SEGMENT ) if( shapes && shapes->Size() == 1 && shapes->Shapes()[0]->Type() == SH_SEGMENT )
{ {
@ -875,12 +897,12 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
else else
{ {
SHAPE_POLY_SET polySet; SHAPE_POLY_SET polySet;
aPad->TransformShapeWithClearanceToPolygon( polySet, margin.x ); pad->TransformShapeWithClearanceToPolygon( polySet, margin.x );
m_gal->DrawPolygon( polySet ); m_gal->DrawPolygon( polySet );
} }
if( aPad->GetSize() != pad_size ) if( pad->GetSize() != pad_size )
const_cast<D_PAD*>( aPad )->SetSize( pad_size ); const_cast<D_PAD*>( pad )->SetSize( pad_size );
} }
// Clearance outlines // Clearance outlines
@ -898,7 +920,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
int clearance = aPad->GetClearance( aPad->GetLayer() ); int clearance = aPad->GetClearance( aPad->GetLayer() );
const std::shared_ptr<SHAPE_COMPOUND> shapes = const std::shared_ptr<SHAPE_COMPOUND> shapes =
std::dynamic_pointer_cast<SHAPE_COMPOUND>( aPad->GetEffectiveShape() ); std::dynamic_pointer_cast<SHAPE_COMPOUND>( pad->GetEffectiveShape() );
if( shapes && shapes->Size() == 1 && shapes->Shapes()[0]->Type() == SH_SEGMENT ) if( shapes && shapes->Size() == 1 && shapes->Shapes()[0]->Type() == SH_SEGMENT )
{ {
@ -913,7 +935,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
else else
{ {
SHAPE_POLY_SET polySet; SHAPE_POLY_SET polySet;
aPad->TransformShapeWithClearanceToPolygon( polySet, clearance ); pad->TransformShapeWithClearanceToPolygon( polySet, clearance );
m_gal->DrawPolygon( polySet ); m_gal->DrawPolygon( polySet );
} }
} }

View File

@ -3478,6 +3478,16 @@ D_PAD* PCB_PARSER::parseD_PAD( MODULE* aParent )
} }
break; break;
case T_remove_unused_layers:
pad->SetRemoveUnconnected( true );
NeedRIGHT();
break;
case T_keep_end_layers:
pad->SetKeepTopBottom( true );
NeedRIGHT();
break;
case T_tstamp: case T_tstamp:
NextTok(); NextTok();
const_cast<KIID&>( pad->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); const_cast<KIID&>( pad->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() );
@ -3768,6 +3778,16 @@ VIA* PCB_PARSER::parseVIA()
NeedRIGHT(); NeedRIGHT();
break; break;
case T_remove_unused_layers:
via->SetRemoveUnconnected( true );
NeedRIGHT();
break;
case T_keep_end_layers:
via->SetKeepTopBottom( true );
NeedRIGHT();
break;
case T_tstamp: case T_tstamp:
NextTok(); NextTok();
const_cast<KIID&>( via->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() ); const_cast<KIID&>( via->m_Uuid ) = m_resetKIIDs ? KIID() : KIID( CurStr() );

View File

@ -248,6 +248,10 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter,
continue; continue;
} }
/// pads not connected to copper are optionally not drawn
if( onCopperLayer && !pad->IsPadOnLayer( aLayerMask ) )
continue;
COLOR4D color = COLOR4D::BLACK; COLOR4D color = COLOR4D::BLACK;
if( pad->GetLayerSet()[B_Cu] ) if( pad->GetLayerSet()[B_Cu] )
@ -416,6 +420,10 @@ void PlotStandardLayer( BOARD *aBoard, PLOTTER* aPlotter,
int diameter = Via->GetWidth() + 2 * via_margin + width_adj; int diameter = Via->GetWidth() + 2 * via_margin + width_adj;
/// Vias not connected to copper are optionally not drawn
if( onCopperLayer && !Via->IsPadOnLayer( aLayerMask ) )
continue;
// Don't draw a null size item : // Don't draw a null size item :
if( diameter <= 0 ) if( diameter <= 0 )
continue; continue;

View File

@ -693,14 +693,24 @@ std::unique_ptr<PNS::ARC> PNS_KICAD_IFACE_BASE::syncArc( ARC* aArc )
} }
std::unique_ptr<PNS::VIA> PNS_KICAD_IFACE_BASE::syncVia( VIA* aVia ) std::vector<std::unique_ptr<PNS::VIA>> PNS_KICAD_IFACE_BASE::syncVia( VIA* aVia )
{ {
std::vector<std::unique_ptr<PNS::VIA>> retval;
PCB_LAYER_ID top, bottom; PCB_LAYER_ID top, bottom;
aVia->LayerPair( &top, &bottom ); aVia->LayerPair( &top, &bottom );
for( int layer = top; layer <= bottom; ++layer )
{
int width = aVia->GetWidth();
if( !aVia->IsPadOnLayer( layer ) )
width = aVia->GetDrillValue();
std::unique_ptr<PNS::VIA> via( new PNS::VIA( std::unique_ptr<PNS::VIA> via( new PNS::VIA(
aVia->GetPosition(), aVia->GetPosition(),
LAYER_RANGE( top, bottom ), LAYER_RANGE( layer ),
aVia->GetWidth(), width,
aVia->GetDrillValue(), aVia->GetDrillValue(),
aVia->GetNetCode(), aVia->GetNetCode(),
aVia->GetViaType() ) aVia->GetViaType() )
@ -711,7 +721,10 @@ std::unique_ptr<PNS::VIA> PNS_KICAD_IFACE_BASE::syncVia( VIA* aVia )
if( aVia->IsLocked() ) if( aVia->IsLocked() )
via->Mark( PNS::MK_LOCKED ); via->Mark( PNS::MK_LOCKED );
return via; retval.push_back( std::move( via ) );
}
return retval;
} }
@ -1005,7 +1018,9 @@ void PNS_KICAD_IFACE_BASE::SyncWorld( PNS::NODE *aWorld )
} }
else if( type == PCB_VIA_T ) else if( type == PCB_VIA_T )
{ {
if( auto via = syncVia( static_cast<VIA*>( t ) ) ) auto viavec = syncVia( static_cast<VIA*>( t ) );
for( auto& via : viavec )
aWorld->Add( std::move( via ) ); aWorld->Add( std::move( via ) );
} }
} }

View File

@ -84,7 +84,7 @@ protected:
std::unique_ptr<PNS::SOLID> syncPad( D_PAD* aPad ); std::unique_ptr<PNS::SOLID> syncPad( D_PAD* aPad );
std::unique_ptr<PNS::SEGMENT> syncTrack( TRACK* aTrack ); std::unique_ptr<PNS::SEGMENT> syncTrack( TRACK* aTrack );
std::unique_ptr<PNS::ARC> syncArc( ARC* aArc ); std::unique_ptr<PNS::ARC> syncArc( ARC* aArc );
std::unique_ptr<PNS::VIA> syncVia( VIA* aVia ); std::vector<std::unique_ptr<PNS::VIA>> syncVia( VIA* aVia );
bool syncTextItem( PNS::NODE* aWorld, EDA_TEXT* aText, PCB_LAYER_ID aLayer ); bool syncTextItem( PNS::NODE* aWorld, EDA_TEXT* aText, PCB_LAYER_ID aLayer );
bool syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem ); bool syncGraphicalItem( PNS::NODE* aWorld, DRAWSEGMENT* aItem );
bool syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone ); bool syncZone( PNS::NODE* aWorld, ZONE_CONTAINER* aZone );

View File

@ -67,13 +67,6 @@ public:
m_drill = aDrill; m_drill = aDrill;
m_shape = SHAPE_CIRCLE( aPos, aDiameter / 2 ); m_shape = SHAPE_CIRCLE( aPos, aDiameter / 2 );
m_viaType = aViaType; m_viaType = aViaType;
//If we're a through-board via, use all layers regardless of the set passed
if( aViaType == VIATYPE::THROUGH )
{
LAYER_RANGE allLayers( 0, MAX_CU_LAYERS - 1 );
SetLayers( allLayers );
}
} }

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2019 KiCad Developers, see AUTHORS.TXT for contributors. * Copyright (C) 2019-2020 KiCad Developers, see AUTHORS.TXT for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -28,6 +28,7 @@
#include <dialogs/dialog_exchange_footprints.h> #include <dialogs/dialog_exchange_footprints.h>
#include <dialogs/dialog_cleanup_tracks_and_vias.h> #include <dialogs/dialog_cleanup_tracks_and_vias.h>
#include <dialogs/dialog_swap_layers.h> #include <dialogs/dialog_swap_layers.h>
#include <dialogs/dialog_unused_pad_layers.h>
#include <tools/global_edit_tool.h> #include <tools/global_edit_tool.h>
#include <board_commit.h> #include <board_commit.h>
#include <dialogs/dialog_cleanup_graphics.h> #include <dialogs/dialog_cleanup_graphics.h>
@ -196,6 +197,22 @@ int GLOBAL_EDIT_TOOL::CleanupGraphics( const TOOL_EVENT& aEvent )
} }
int GLOBAL_EDIT_TOOL::RemoveUnusedPads( const TOOL_EVENT& aEvent )
{
PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
PCBNEW_SELECTION& selection = m_selectionTool->RequestSelection(
[]( const VECTOR2I& aPt, GENERAL_COLLECTOR& aCollector )
{
EditToolSelectionFilter( aCollector, EXCLUDE_TRANSIENTS );
} );
DIALOG_UNUSED_PAD_LAYERS dlg( editFrame, selection, *m_commit );
dlg.ShowModal();
return 0;
}
void GLOBAL_EDIT_TOOL::setTransitions() void GLOBAL_EDIT_TOOL::setTransitions()
{ {
Go( &GLOBAL_EDIT_TOOL::ExchangeFootprints, PCB_ACTIONS::updateFootprint.MakeEvent() ); Go( &GLOBAL_EDIT_TOOL::ExchangeFootprints, PCB_ACTIONS::updateFootprint.MakeEvent() );
@ -210,6 +227,7 @@ void GLOBAL_EDIT_TOOL::setTransitions()
Go( &GLOBAL_EDIT_TOOL::GlobalDeletions, PCB_ACTIONS::globalDeletions.MakeEvent() ); Go( &GLOBAL_EDIT_TOOL::GlobalDeletions, PCB_ACTIONS::globalDeletions.MakeEvent() );
Go( &GLOBAL_EDIT_TOOL::CleanupTracksAndVias, PCB_ACTIONS::cleanupTracksAndVias.MakeEvent() ); Go( &GLOBAL_EDIT_TOOL::CleanupTracksAndVias, PCB_ACTIONS::cleanupTracksAndVias.MakeEvent() );
Go( &GLOBAL_EDIT_TOOL::CleanupGraphics, PCB_ACTIONS::cleanupGraphics.MakeEvent() ); Go( &GLOBAL_EDIT_TOOL::CleanupGraphics, PCB_ACTIONS::cleanupGraphics.MakeEvent() );
Go( &GLOBAL_EDIT_TOOL::RemoveUnusedPads, PCB_ACTIONS::removeUnusedPads.MakeEvent() );
} }

View File

@ -61,6 +61,7 @@ public:
int GlobalDeletions( const TOOL_EVENT& aEvent ); int GlobalDeletions( const TOOL_EVENT& aEvent );
int CleanupTracksAndVias( const TOOL_EVENT& aEvent ); int CleanupTracksAndVias( const TOOL_EVENT& aEvent );
int CleanupGraphics( const TOOL_EVENT& aEvent ); int CleanupGraphics( const TOOL_EVENT& aEvent );
int RemoveUnusedPads( const TOOL_EVENT& aEvent );
private: private:
bool swapBoardItem( BOARD_ITEM* aItem, PCB_LAYER_ID* new_layer ); bool swapBoardItem( BOARD_ITEM* aItem, PCB_LAYER_ID* new_layer );

View File

@ -353,6 +353,12 @@ TOOL_ACTION PCB_ACTIONS::updateFootprints( "pcbnew.GlobalEdit.updateFootprints",
_( "Update footprints to include any changes from the library" ), _( "Update footprints to include any changes from the library" ),
reload_xpm ); reload_xpm );
TOOL_ACTION PCB_ACTIONS::removeUnusedPads( "pcbnew.GlobalEdit.removeUnusedPads",
AS_GLOBAL, 0, "",
_( "Remove Unused Pads..." ),
_( "Remove or reset the unconnected inner layers on through hole pads and vias" ),
pads_remove_xpm );
TOOL_ACTION PCB_ACTIONS::changeFootprint( "pcbnew.GlobalEdit.changeFootprint", TOOL_ACTION PCB_ACTIONS::changeFootprint( "pcbnew.GlobalEdit.changeFootprint",
AS_GLOBAL, 0, "", AS_GLOBAL, 0, "",
_( "Change Footprint..." ), _( "Assign a different footprint from the library" ), _( "Change Footprint..." ), _( "Assign a different footprint from the library" ),

View File

@ -303,6 +303,7 @@ public:
static TOOL_ACTION changeFootprint; static TOOL_ACTION changeFootprint;
static TOOL_ACTION changeFootprints; static TOOL_ACTION changeFootprints;
static TOOL_ACTION swapLayers; static TOOL_ACTION swapLayers;
static TOOL_ACTION removeUnusedPads;
static TOOL_ACTION importNetlist; static TOOL_ACTION importNetlist;

View File

@ -37,6 +37,7 @@
#include <class_pcb_target.h> #include <class_pcb_target.h>
#include <class_track.h> #include <class_track.h>
#include <connectivity/connectivity_data.h> #include <connectivity/connectivity_data.h>
#include <convert_basic_shapes_to_polygon.h>
#include <board_commit.h> #include <board_commit.h>
#include <widgets/progress_reporter.h> #include <widgets/progress_reporter.h>
#include <geometry/shape_poly_set.h> #include <geometry/shape_poly_set.h>
@ -635,7 +636,7 @@ void ZONE_FILLER::buildCopperItemClearances( const ZONE_CONTAINER* aZone, PCB_LA
{ {
for( D_PAD* pad : module->Pads() ) for( D_PAD* pad : module->Pads() )
{ {
if( !pad->IsOnLayer( aLayer ) ) if( !pad->IsPadOnLayer( aLayer ) )
{ {
if( pad->GetDrillSize().x == 0 && pad->GetDrillSize().y == 0 ) if( pad->GetDrillSize().x == 0 && pad->GetDrillSize().y == 0 )
continue; continue;
@ -678,9 +679,26 @@ void ZONE_FILLER::buildCopperItemClearances( const ZONE_CONTAINER* aZone, PCB_LA
{ {
int gap = aZone->GetClearance( aLayer, track ) + extra_margin; int gap = aZone->GetClearance( aLayer, track ) + extra_margin;
if( track->Type() == PCB_VIA_T )
{
VIA* via = static_cast<VIA*>( track );
if( !via->IsPadOnLayer( aLayer ) )
{
TransformCircleToPolygon( aHoles, via->GetPosition(),
( via->GetDrillValue() + 1 ) / 2 + gap, m_low_def );
}
else
{
via->TransformShapeWithClearanceToPolygon( aHoles, gap, m_low_def );
}
}
else
{
track->TransformShapeWithClearanceToPolygon( aHoles, gap, m_low_def ); track->TransformShapeWithClearanceToPolygon( aHoles, gap, m_low_def );
} }
} }
}
// Add graphic item clearances. They are by definition unconnected, and have no clearance // Add graphic item clearances. They are by definition unconnected, and have no clearance
// definitions of their own. // definitions of their own.