Update of /cvsroot/pure-data/externals/hcs/hid/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18279/doc
Modified Files: hid-help.pd Log Message: ripped out old method of get events and build whole new method which should use a lot less CPU; its now based on arrays of structs that are built before running. There is a 2D array for (device,element) struct, t_hid_element, which holds the output symbols, thus eliminating symbol lookups for each event that is outputted; its Mac OS X only write now, GNU/Linux will come eventually...
Index: hid-help.pd =================================================================== RCS file: /cvsroot/pure-data/externals/hcs/hid/doc/hid-help.pd,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** hid-help.pd 28 May 2006 20:13:58 -0000 1.23 --- hid-help.pd 2 Jun 2006 20:06:51 -0000 1.24 *************** *** 1,47 **** ! #N canvas 242 96 932 657 10; ! #X msg 233 353 abs abs_y 55; ! #X floatatom 27 484 5 0 0 0 - - -; ! #X floatatom 83 484 5 0 0 0 - - -; ! #X floatatom 63 440 6 0 0 0 - - -; ! #X obj 129 122 tgl 35 0 empty empty empty 0 -6 0 8 -24198 -1 -1 25 ! 25; ! #X floatatom 571 385 12 0 0 1 value - -; ! #X symbolatom 531 401 15 0 0 1 event_code - -; ! #X symbolatom 492 417 15 0 0 1 event_type - -; #X obj 2 2 cnv 15 900 20 empty empty [hid] 2 11 1 18 -233017 -66577 0; ! #X text 246 368 outlet message format:; ! #X obj 772 104 ev-list; ! #X obj 772 155 ev_syn-list; ! #X obj 772 177 ev_key-list; ! #X obj 772 199 ev_rel-list; ! #X obj 772 221 ev_abs-list; ! #X obj 772 243 ev_msc-list; ! #X obj 772 265 ev_led-list; ! #X obj 772 287 ev_snd-list; ! #X obj 772 309 ev_rep-list; ! #X obj 772 331 ev_ff-list; ! #X obj 772 353 ev_ff_status-list; ! #X text 740 85 Event Types:; ! #X text 740 136 Event Codes:; ! #X floatatom 138 388 5 0 0 1 ev_syn - -; ! #X obj 111 387 +; ! #X msg 111 367 1; #X msg 402 117 close; #X msg 402 96 refresh; #X text 463 94 refresh device list; ! #X text 537 532 For more info:; ! #X text 49 588 (C) Copyright 2004 Hans-Christoph Steiner hans@at.or.at ! ; ! #X text 266 602 released under the GNU GPL; ! #X text 472 589 $Revision$$Date$; ! #X text 473 602 $Author$; ! #X msg 421 266 poll 20; ! #X msg 359 266 poll 2; ! #X text 355 251 start polling and set the poll delay in ms; ! #X text 462 28 !!! This software is very much alpha , so any aspect of it could change without notice !!!; ! #X obj 16 336 route key rel abs syn; ! #X obj 9 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; #N canvas 278 328 631 544 Event_Codes 0; --- 1,44 ---- ! #N canvas 59 45 910 595 10; ! #X floatatom 27 454 5 0 0 0 - - -; ! #X floatatom 83 454 5 0 0 0 - - -; ! #X floatatom 63 410 6 0 0 0 - - -; ! #X obj 129 92 tgl 35 0 empty empty empty 0 -6 0 8 -24198 -1 -1 25 25 ! ; ! #X floatatom 571 355 12 0 0 1 value - -; ! #X symbolatom 531 371 15 0 0 1 event_code - -; ! #X symbolatom 492 387 15 0 0 1 event_type - -; #X obj 2 2 cnv 15 900 20 empty empty [hid] 2 11 1 18 -233017 -66577 0; ! #X text 274 347 outlet message format:; ! #X obj 772 114 ev-list; ! #X obj 772 165 ev_syn-list; ! #X obj 772 187 ev_key-list; ! #X obj 772 209 ev_rel-list; ! #X obj 772 231 ev_abs-list; ! #X obj 772 253 ev_msc-list; ! #X obj 772 275 ev_led-list; ! #X obj 772 297 ev_snd-list; ! #X obj 772 319 ev_rep-list; ! #X obj 772 341 ev_ff-list; ! #X obj 772 363 ev_ff_status-list; ! #X text 740 95 Event Types:; ! #X text 740 146 Event Codes:; ! #X floatatom 138 358 5 0 0 1 ev_syn - -; ! #X obj 111 357 +; ! #X msg 111 337 1; #X msg 402 117 close; #X msg 402 96 refresh; #X text 463 94 refresh device list; ! #X text 537 502 For more info:; ! #X text 266 572 released under the GNU GPL; ! #X text 472 559 $Revision$$Date$; ! #X text 473 572 $Author$; ! #X msg 436 216 poll 20; ! #X msg 374 216 poll 2; ! #X text 370 201 start polling and set the poll delay in ms; ! #X text 462 48 !!! This software is very much alpha , so any aspect of it could change without notice !!!; ! #X obj 16 306 route key rel abs syn; ! #X obj 9 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; #N canvas 278 328 631 544 Event_Codes 0; *************** *** 197,201 **** #X text 245 463 298; #X text 245 477 299; ! #X restore 774 419 pd Event_Codes; #N canvas 50 289 469 317 Event_Types 0; #X text 28 48 (For a complete listing of Linux Input Events , see --- 194,198 ---- #X text 245 463 298; #X text 245 477 299; ! #X restore 774 429 pd Event_Codes; #N canvas 50 289 469 317 Event_Types 0; #X text 28 48 (For a complete listing of Linux Input Events , see *************** *** 240,244 **** #X text 230 255 EV_PWR; #X text 61 255 Power Events (for UPS); ! #X restore 774 399 pd Event_Types; #N canvas 0 22 450 300 Event_Values 0; #X text 28 48 (For a complete listing of Linux Input Events , see --- 237,241 ---- #X text 230 255 EV_PWR; #X text 61 255 Power Events (for UPS); ! #X restore 774 409 pd Event_Types; #N canvas 0 22 450 300 Event_Values 0; #X text 28 48 (For a complete listing of Linux Input Events , see *************** *** 246,338 **** #X obj 11 9 cnv 15 400 30 empty empty Event_Values 20 12 1 14 -261681 -66577 0; ! #X restore 774 439 pd Event_Values; ! #X floatatom 140 484 5 0 0 0 - - -; ! #X obj 421 439 route abs_hat0x abs_hat0y abs_hat1x abs_hat1y; ! #X floatatom 421 461 7 0 0 0 - - -; ! #X msg 179 121 1; ! #X msg 179 141 0; #X msg 402 138 print; ! #X obj 304 295 hid 0; #X text 465 118 close the device; #X text 465 139 print the device and element lists; ! #X text 9 257 Any non-zero value starts polling ,; ! #X text 8 270 0 stops the polling. If the number; ! #X text 9 283 is greater than 1 , then the poll; ! #X text 9 296 delay is set to that number.; ! #X msg 489 266 poll 2000; ! #X obj 27 464 route rel_x rel_y rel_z rel_wheel; ! #X floatatom 196 484 5 0 0 0 - - -; ! #X obj 492 366 unpack s s f; ! #X msg 203 68 open $1; ! #X obj 203 50 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 2; ! #X floatatom 190 71 1 0 0 0 - - -; ! #X text 270 382 event_type event_code value; ! #X obj 63 419 route abs_x abs_y abs_z abs_rx abs_ry abs_rz abs_throttle ; ! #X obj 421 477 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 -1; ! #X floatatom 498 461 7 0 0 0 - - -; ! #X obj 498 477 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; ! #X floatatom 576 461 7 0 0 0 - - -; ! #X obj 576 477 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; ! #X floatatom 653 461 7 0 0 0 - - -; ! #X obj 653 477 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; ! #X floatatom 113 440 6 0 0 0 - - -; ! #X floatatom 163 440 6 0 0 0 - - -; ! #X floatatom 213 440 6 0 0 0 - - -; ! #X floatatom 263 440 6 0 0 0 - - -; ! #X floatatom 313 440 6 0 0 0 - - -; ! #X floatatom 363 440 6 0 0 0 - - -; ! #X obj 39 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; ! #X obj 69 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; ! #X obj 99 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; ! #X obj 129 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 159 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 189 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 219 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 249 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 279 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 309 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 339 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 369 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 399 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 9 505 route btn_0 btn_1 btn_2 btn_3 btn_4 btn_5 btn_6 btn_7 btn_8 btn_9 btn_10 btn_11 btn_12 btn_13 btn_14 btn_15; ! #X obj 429 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 459 547 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 234 334 cyclone/prepend set; ! #X msg 37 196 debug $1; ! #X obj 37 174 hradio 15 1 1 10 empty empty empty 0 -6 0 8 -262144 -1 ! -1 9; ! #X obj 646 531 pddp/pddp_open all_about_hid; ! #X obj 232 91 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 233 111 open mouse $1; ! #X text 541 208 Gravis/Destroyer Tiltpad; ! #X msg 400 207 open 0x047D 0x4008; ! #X obj 253 135 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 -1 0; ! #X msg 262 155 open keyboard $1; ! #X msg 298 190 info; ! #N canvas 477 37 395 219 see 0; #N canvas 247 287 550 277 route 0; #X obj 53 13 inlet; --- 243,324 ---- #X obj 11 9 cnv 15 400 30 empty empty Event_Values 20 12 1 14 -261681 -66577 0; ! #X restore 774 449 pd Event_Values; ! #X floatatom 140 454 5 0 0 0 - - -; ! #X obj 421 409 route abs_hat0x abs_hat0y abs_hat1x abs_hat1y; ! #X floatatom 421 431 7 0 0 0 - - -; #X msg 402 138 print; ! #X obj 304 265 hid 0; #X text 465 118 close the device; #X text 465 139 print the device and element lists; ! #X text 9 227 Any non-zero value starts polling ,; ! #X text 8 240 0 stops the polling. If the number; ! #X text 9 253 is greater than 1 , then the poll; ! #X text 9 266 delay is set to that number.; ! #X obj 27 434 route rel_x rel_y rel_z rel_wheel; ! #X floatatom 196 454 5 0 0 0 - - -; ! #X obj 492 336 unpack s s f; ! #X msg 258 125 open $1; ! #X obj 258 107 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X floatatom 247 126 1 0 0 0 - - -; ! #X text 298 361 event_type event_code value; ! #X obj 63 389 route abs_x abs_y abs_z abs_rx abs_ry abs_rz abs_throttle ; ! #X obj 421 447 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 -1; ! #X floatatom 498 431 7 0 0 0 - - -; ! #X obj 498 447 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; ! #X floatatom 576 431 7 0 0 0 - - -; ! #X obj 576 447 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; ! #X floatatom 653 431 7 0 0 0 - - -; ! #X obj 653 447 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; ! #X floatatom 113 410 6 0 0 0 - - -; ! #X floatatom 163 410 6 0 0 0 - - -; ! #X floatatom 213 410 6 0 0 0 - - -; ! #X floatatom 263 410 6 0 0 0 - - -; ! #X floatatom 313 410 6 0 0 0 - - -; ! #X floatatom 363 410 6 0 0 0 - - -; ! #X obj 39 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; ! #X obj 69 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; ! #X obj 99 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1 ; ! #X obj 129 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 159 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 189 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 219 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 249 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 279 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 309 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 339 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 369 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 399 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 9 475 route btn_0 btn_1 btn_2 btn_3 btn_4 btn_5 btn_6 btn_7 btn_8 btn_9 btn_10 btn_11 btn_12 btn_13 btn_14 btn_15; ! #X obj 429 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 459 517 tgl 25 0 empty empty empty 0 -6 0 8 -195568 -1 -1 0 1; ! #X obj 262 313 cyclone/prepend set; ! #X msg 37 166 debug $1; ! #X obj 37 144 hradio 15 1 1 10 empty empty empty 0 -6 0 8 -262144 -1 -1 0; ! #X obj 646 501 pddp/pddp_open all_about_hid; ! #X msg 298 160 info; ! #N canvas 477 37 399 223 see 0; #N canvas 247 287 550 277 route 0; #X obj 53 13 inlet; *************** *** 388,481 **** #X connect 2 0 0 0; #X connect 2 0 3 0; ! #X restore 512 290 pd see device info; ! #X msg 397 179 open 0x046d 0xc01d; ! #X text 535 179 Logitech USB-PS/2 Optical Mouse; ! #N canvas 0 22 458 308 test 1; ! #X obj 60 23 inlet; ! #X obj 61 53 route not_implemented; ! #X obj 65 100 route notimp_64; ! #X obj 165 138 print; ! #X floatatom 69 146 5 0 0 0 - - -; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 4 0; ! #X connect 2 1 3 0; ! #X restore 490 330 pd test; ! #X obj 36 63 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 45 83 open joystick $1; ! #X connect 4 0 49 0; ! #X connect 23 0 24 1; #X connect 24 0 23 0; ! #X connect 25 0 24 0; ! #X connect 26 0 49 0; ! #X connect 27 0 49 0; ! #X connect 34 0 49 0; ! #X connect 35 0 49 0; ! #X connect 38 0 91 0; ! #X connect 38 1 57 0; ! #X connect 38 2 64 0; ! #X connect 38 3 25 0; #X connect 44 0 45 0; ! #X connect 44 1 66 0; ! #X connect 44 2 68 0; ! #X connect 44 3 70 0; ! #X connect 45 0 65 0; ! #X connect 46 0 49 0; ! #X connect 47 0 49 0; ! #X connect 48 0 49 0; ! #X connect 49 0 38 0; ! #X connect 49 0 59 0; ! #X connect 49 0 94 0; ! #X connect 49 0 108 0; ! #X connect 49 1 105 0; ! #X connect 56 0 49 0; ! #X connect 57 0 1 0; ! #X connect 57 1 2 0; ! #X connect 57 2 43 0; ! #X connect 57 3 58 0; ! #X connect 59 0 7 0; ! #X connect 59 1 6 0; ! #X connect 59 2 5 0; ! #X connect 60 0 49 0; ! #X connect 61 0 60 0; #X connect 61 0 62 0; ! #X connect 64 0 3 0; ! #X connect 64 1 72 0; ! #X connect 64 2 73 0; ! #X connect 64 3 74 0; ! #X connect 64 4 75 0; ! #X connect 64 5 76 0; ! #X connect 64 6 77 0; ! #X connect 64 7 44 0; ! #X connect 66 0 67 0; ! #X connect 68 0 69 0; ! #X connect 70 0 71 0; ! #X connect 91 0 39 0; ! #X connect 91 1 78 0; ! #X connect 91 2 79 0; ! #X connect 91 3 80 0; ! #X connect 91 4 81 0; ! #X connect 91 5 82 0; ! #X connect 91 6 83 0; ! #X connect 91 7 84 0; ! #X connect 91 8 85 0; ! #X connect 91 9 86 0; ! #X connect 91 10 87 0; ! #X connect 91 11 88 0; ! #X connect 91 12 89 0; ! #X connect 91 13 90 0; ! #X connect 91 14 92 0; ! #X connect 91 15 93 0; ! #X connect 94 0 0 0; ! #X connect 95 0 49 0; ! #X connect 96 0 95 0; ! #X connect 98 0 99 0; ! #X connect 99 0 49 0; ! #X connect 101 0 49 0; ! #X connect 102 0 103 0; ! #X connect 103 0 49 0; ! #X connect 104 0 49 0; ! #X connect 106 0 49 0; ! #X connect 109 0 110 0; ! #X connect 110 0 49 0; --- 374,523 ---- #X connect 2 0 0 0; #X connect 2 0 3 0; ! #X restore 418 286 pd see device info; ! #N canvas 0 22 380 450 open 0; ! #X obj 77 61 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 78 81 open mouse $1; ! #X obj 121 201 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 130 221 open keyboard $1; ! #X obj 50 13 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X obj 55 417 outlet; ! #X obj 85 108 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 94 128 open joystick $1; ! #X msg 59 33 open pointer $1; ! #X obj 101 155 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 110 175 open gamepad $1; ! #X obj 137 244 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 146 264 open keypad $1; ! #X obj 141 291 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 ! -1 0; ! #X msg 150 311 open multiaxiscontroller $1; ! #X text 155 342 or just open the first one:; ! #X msg 138 363 open mouse; ! #X msg 159 381 open joystick; ! #X connect 0 0 1 0; ! #X connect 1 0 5 0; ! #X connect 2 0 3 0; ! #X connect 3 0 5 0; ! #X connect 4 0 8 0; ! #X connect 6 0 7 0; ! #X connect 7 0 5 0; ! #X connect 8 0 5 0; ! #X connect 9 0 10 0; ! #X connect 10 0 5 0; ! #X connect 11 0 12 0; ! #X connect 12 0 5 0; ! #X connect 13 0 14 0; ! #X connect 14 0 5 0; ! #X connect 16 0 5 0; ! #X connect 17 0 5 0; ! #X restore 203 74 pd open by device type; ! #N canvas 88 102 470 320 open 0; ! #X text 217 82 Gravis/Destroyer Tiltpad; ! #X msg 76 81 open 0x047D 0x4008; ! #X msg 73 53 open 0x046d 0xc01d; ! #X text 211 53 Logitech USB-PS/2 Optical Mouse; ! #X obj 10 277 outlet; ! #X text 9 12 You can use the hex values of the USB vendor and product ! IDs (it is not case sensitive):; ! #X text 221 111 Overtone CUI v1.0; ! #X msg 80 110 open 0x1043 0x0015; ! #X connect 1 0 4 0; ! #X connect 2 0 4 0; ! #X connect 7 0 4 0; ! #X restore 174 52 pd open by vendor/product ID; ! #N canvas 114 93 523 432 test 0; ! #X obj 122 5 inlet; ! #X obj 66 64 route DESKTOP; ! #X obj 65 118 route DESKTOP57; ! #X obj 48 167 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 ! -1; ! #X floatatom 73 172 5 0 0 0 - - -; ! #X obj 126 175 spigot; ! #X obj 124 216 print test; ! #X obj 167 152 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 ! 1; #X connect 0 0 1 0; #X connect 1 0 2 0; + #X connect 2 0 3 0; #X connect 2 0 4 0; ! #X connect 2 0 5 0; ! #X connect 5 0 6 0; ! #X connect 7 0 5 1; ! #X restore 197 318 pd test; ! #X msg 504 216 poll 200; ! #X msg 261 332 abs abs_y 55; ! #X text 49 558 (C) Copyright 2004 Hans-Christoph Steiner hans@at.or.at ! ; ! #X connect 3 0 45 0; ! #X connect 22 0 23 1; ! #X connect 23 0 22 0; #X connect 24 0 23 0; ! #X connect 25 0 45 0; ! #X connect 26 0 45 0; ! #X connect 32 0 45 0; ! #X connect 33 0 45 0; ! #X connect 36 0 86 0; ! #X connect 36 1 52 0; ! #X connect 36 2 59 0; ! #X connect 36 3 24 0; ! #X connect 42 0 43 0; ! #X connect 42 1 61 0; ! #X connect 42 2 63 0; ! #X connect 42 3 65 0; ! #X connect 43 0 60 0; #X connect 44 0 45 0; ! #X connect 45 0 36 0; ! #X connect 45 0 54 0; ! #X connect 45 0 89 0; ! #X connect 45 0 97 0; ! #X connect 45 1 94 0; ! #X connect 52 0 0 0; ! #X connect 52 1 1 0; ! #X connect 52 2 41 0; ! #X connect 52 3 53 0; ! #X connect 54 0 6 0; ! #X connect 54 1 5 0; ! #X connect 54 2 4 0; ! #X connect 55 0 45 0; ! #X connect 56 0 55 0; ! #X connect 56 0 57 0; ! #X connect 59 0 2 0; ! #X connect 59 1 67 0; ! #X connect 59 2 68 0; ! #X connect 59 3 69 0; ! #X connect 59 4 70 0; ! #X connect 59 5 71 0; ! #X connect 59 6 72 0; ! #X connect 59 7 42 0; #X connect 61 0 62 0; ! #X connect 63 0 64 0; ! #X connect 65 0 66 0; ! #X connect 86 0 37 0; ! #X connect 86 1 73 0; ! #X connect 86 2 74 0; ! #X connect 86 3 75 0; ! #X connect 86 4 76 0; ! #X connect 86 5 77 0; ! #X connect 86 6 78 0; ! #X connect 86 7 79 0; ! #X connect 86 8 80 0; ! #X connect 86 9 81 0; ! #X connect 86 10 82 0; ! #X connect 86 11 83 0; ! #X connect 86 12 84 0; ! #X connect 86 13 85 0; ! #X connect 86 14 87 0; ! #X connect 86 15 88 0; ! #X connect 89 0 99 0; ! #X connect 90 0 45 0; ! #X connect 91 0 90 0; ! #X connect 93 0 45 0; ! #X connect 95 0 45 0; ! #X connect 96 0 45 0; ! #X connect 98 0 45 0;