From: Michael Wiebusch Date: Thu, 17 Oct 2013 22:20:23 +0000 (+0200) Subject: this is now CNC mill with touchpad git, plate moves with touchpad, yeah X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=e57be7b1c69b8286a433575a1d08b9738df70b98;p=coral.git this is now CNC mill with touchpad git, plate moves with touchpad, yeah --- diff --git a/firmware/Descriptors.o b/firmware/Descriptors.o index 11ded1e..129b593 100644 Binary files a/firmware/Descriptors.o and b/firmware/Descriptors.o differ diff --git a/firmware/TM1001A.c~ b/firmware/TM1001A.c~ index fa5d2c0..504e1f2 100644 --- a/firmware/TM1001A.c~ +++ b/firmware/TM1001A.c~ @@ -16,9 +16,9 @@ // define here the port and the pin where you cave connected // the ADB (I/O) line from your TM1001A touchpad #define ADB_BIT (1<<0) -#define ADB_PIN PIND -#define ADB_POUT PORTD -#define ADB_PDIR DDRD +#define ADB_PIN PINB +#define ADB_POUT PORTB +#define ADB_PDIR DDRB // when touchpad is in keypad mode the next two defines set the number // of rows and columns of the @@ -247,6 +247,7 @@ void touchpad_set_abs_mode(void) { adb_werte[0] = COM_LISTEN1; adb_werte[7] = 0x00; //Absolutmodus adb(); + _delay_ms(100); } void touchpad_set_rel_mode_100dpi(void) { @@ -255,6 +256,7 @@ void touchpad_set_rel_mode_100dpi(void) { adb_werte[1] = BITS(0110,0011); adb_werte[2] = 1; //default modus: 100 dpi mouse adb(); + _delay_ms(100); } @@ -264,6 +266,7 @@ void touchpad_set_rel_mode_200dpi(void) { adb_werte[1] = BITS(0110,0011); adb_werte[2] = 2; //200 dpi mouse adb(); + _delay_ms(100); } diff --git a/firmware/USBtoSerial.c b/firmware/USBtoSerial.c index fd03f4f..43d1620 100644 --- a/firmware/USBtoSerial.c +++ b/firmware/USBtoSerial.c @@ -39,6 +39,7 @@ #include #include "TM1001A.c" // #include "rfm70.c" +#include "pins.h" /** Circular buffer to hold data from the host before it is sent to the device via the serial port. */ static RingBuffer_t USBtoUSART_Buffer; @@ -282,8 +283,111 @@ void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { /** Main program entry point. This routine contains the overall program flow, including initial * setup of all components and the main program loop. */ + +/* motor stuff */ + +uint8_t phase_pattern[4] = { 0b00001010, 0b00001001, 0b00000101, 0b00000110}; + + +void set_x(uint8_t byte) { + PORTX0 &= ~(1<>0)<>1)<>2)<>3)<>0)<>1)<>2)<>3)< 0) - (x < 0); +} + +void move_plate(int16_t dx, int16_t dy){ + static int16_t todo_x,todo_y = 0; + int8_t signum; + todo_x += dx; + todo_y += dy; + + signum = sign(todo_x); + motor_step(X,signum); + todo_x -= signum; + + signum = sign(todo_y); + motor_step(Y,signum); + todo_y -= signum; + + +} + + + + int main(void) { + + init_motors(); + char dummy; uint8_t field_val = 0; SetupHardware(); @@ -317,92 +421,7 @@ int main(void) uint16_t loopcounter=0; char stringbuffer[16]; -// for (;;) { // the eternal loop -// -// Usb2SerialTask(); -// loopcounter++; -// if(loopcounter == 0){ -// uart_puts("blah\r\n"); -// // if (USB_DeviceState == DEVICE_STATE_Configured){ -// // RingBuffer_Insert(&USARTtoUSB_Buffer, 'b'); -// // } -// } -// -// } - - - - - - - - -//###################################################################### -// uncomment desired demo mode here! - -// #define DEMO_MODE KEYPAD_MODE -// #define DEMO_MODE ABSOLUTE_MODE -// #define DEMO_MODE RELATIVE_MODE -//###################################################################### - -// #if DEMO_MODE == KEYPAD_MODE - // begin of keypad mode demo block - // current configuration is: 3 colums, 2 rows => 6 touch buttons - // this can be changed by the PAD_ROWS/PAD_COLS defines in the TM1001A.c file - - // ------------------------- - // | back | up | enter | - // ------------------------- - // | left | down | right | - // ------------------------- - -// uart_puts("you selected the keypad demo modus:\n\r"); - touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" - while (1) { - break; // goto next mode - - Usb2SerialTask(); - loopcounter++; - if(loopcounter<2000) { - continue; - } - loopcounter=0; - - touchpad_read(); // read values from the touchpad - - field_val = decode_field(); // decode_field returns the number of the - // touch button that was pressed last. or zero if nothing happened - - switch (field_val) { - case 4: - uart_puts("left\n\r"); - break; - case 6: - uart_puts("right\n\r"); - break; - case 2: - uart_puts("up\n\r"); - break; - case 5: - uart_puts("down\n\r"); - break; - case 1: - uart_puts("back\n\r"); - break; - case 3: - uart_puts("enter\n\r"); - break; - default: - break; - } - - } - // end of keypad mode demo block -// -// #elif DEMO_MODE == ABSOLUTE_MODE - // begin of keypad mode demo block -// uart_puts("you selected the absolute position demo modus:\n\r"); touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" while (1) { break; // goto next mode @@ -439,11 +458,11 @@ int main(void) while (1) { Usb2SerialTask(); - loopcounter++; - if(loopcounter<2000) { - continue; - } - loopcounter=0; +// loopcounter++; +// if(loopcounter<2000) { +// continue; +// } +// loopcounter=0; touchpad_read(); // read data from touchpad @@ -474,6 +493,10 @@ int main(void) my_uitoa(y, stringbuffer, 4); uart_puts(stringbuffer); uart_puts("\r"); + + _delay_ms(10); + move_plate(dx>>0,dy>>0); + } // end of relative mode demo block diff --git a/firmware/USBtoSerial.c~ b/firmware/USBtoSerial.c~ index 135470e..43d1620 100644 --- a/firmware/USBtoSerial.c~ +++ b/firmware/USBtoSerial.c~ @@ -39,6 +39,7 @@ #include #include "TM1001A.c" // #include "rfm70.c" +#include "pins.h" /** Circular buffer to hold data from the host before it is sent to the device via the serial port. */ static RingBuffer_t USBtoUSART_Buffer; @@ -282,8 +283,111 @@ void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { /** Main program entry point. This routine contains the overall program flow, including initial * setup of all components and the main program loop. */ + +/* motor stuff */ + +uint8_t phase_pattern[4] = { 0b00001010, 0b00001001, 0b00000101, 0b00000110}; + + +void set_x(uint8_t byte) { + PORTX0 &= ~(1<>0)<>1)<>2)<>3)<>0)<>1)<>2)<>3)< 0) - (x < 0); +} + +void move_plate(int16_t dx, int16_t dy){ + static int16_t todo_x,todo_y = 0; + int8_t signum; + todo_x += dx; + todo_y += dy; + + signum = sign(todo_x); + motor_step(X,signum); + todo_x -= signum; + + signum = sign(todo_y); + motor_step(Y,signum); + todo_y -= signum; + + +} + + + + int main(void) { + + init_motors(); + char dummy; uint8_t field_val = 0; SetupHardware(); @@ -317,92 +421,7 @@ int main(void) uint16_t loopcounter=0; char stringbuffer[16]; -// for (;;) { // the eternal loop -// -// Usb2SerialTask(); -// loopcounter++; -// if(loopcounter == 0){ -// uart_puts("blah\r\n"); -// // if (USB_DeviceState == DEVICE_STATE_Configured){ -// // RingBuffer_Insert(&USARTtoUSB_Buffer, 'b'); -// // } -// } -// -// } - - - - - - - - -//###################################################################### -// uncomment desired demo mode here! - -// #define DEMO_MODE KEYPAD_MODE -// #define DEMO_MODE ABSOLUTE_MODE -// #define DEMO_MODE RELATIVE_MODE -//###################################################################### - -// #if DEMO_MODE == KEYPAD_MODE - // begin of keypad mode demo block - // current configuration is: 3 colums, 2 rows => 6 touch buttons - // this can be changed by the PAD_ROWS/PAD_COLS defines in the TM1001A.c file - - // ------------------------- - // | back | up | enter | - // ------------------------- - // | left | down | right | - // ------------------------- - -// uart_puts("you selected the keypad demo modus:\n\r"); - touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" - while (1) { - break; // goto next mode - - Usb2SerialTask(); - loopcounter++; - if(loopcounter<2000) { - continue; - } - loopcounter=0; - - touchpad_read(); // read values from the touchpad - - field_val = decode_field(); // decode_field returns the number of the - // touch button that was pressed last. or zero if nothing happened - - switch (field_val) { - case 4: - uart_puts("left\n\r"); - break; - case 6: - uart_puts("right\n\r"); - break; - case 2: - uart_puts("up\n\r"); - break; - case 5: - uart_puts("down\n\r"); - break; - case 1: - uart_puts("back\n\r"); - break; - case 3: - uart_puts("enter\n\r"); - break; - default: - break; - } - - } - // end of keypad mode demo block -// -// #elif DEMO_MODE == ABSOLUTE_MODE - // begin of keypad mode demo block -// uart_puts("you selected the absolute position demo modus:\n\r"); touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" while (1) { break; // goto next mode @@ -432,19 +451,18 @@ int main(void) // begin of relative mode demo block uart_puts("you selected the relative position demo modus:\n\r"); touchpad_set_rel_mode_100dpi();// use touchpad in relative mode - touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution - touchpad_set_abs_mode(); +// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution uint8_t x, y = 0; int8_t dx, dy = 0; while (1) { Usb2SerialTask(); - loopcounter++; - if(loopcounter<2000) { - continue; - } - loopcounter=0; +// loopcounter++; +// if(loopcounter<2000) { +// continue; +// } +// loopcounter=0; touchpad_read(); // read data from touchpad @@ -475,6 +493,10 @@ int main(void) my_uitoa(y, stringbuffer, 4); uart_puts(stringbuffer); uart_puts("\r"); + + _delay_ms(10); + move_plate(dx>>0,dy>>0); + } // end of relative mode demo block diff --git a/firmware/USBtoSerial.d b/firmware/USBtoSerial.d index 27289d5..9dc1aac 100644 --- a/firmware/USBtoSerial.d +++ b/firmware/USBtoSerial.d @@ -98,7 +98,7 @@ USBtoSerial.o: USBtoSerial.c USBtoSerial.h Descriptors.h \ ../../LUFA/../LUFA/Drivers/Peripheral/AVR8/../../../Common/Common.h \ ../../LUFA/../LUFA/Drivers/Peripheral/AVR8/../../Misc/TerminalCodes.h \ ../../LUFA/../LUFA/Drivers/Misc/RingBuffer.h \ - ../../LUFA/../LUFA/Drivers/Misc/../../Common/Common.h TM1001A.c + ../../LUFA/../LUFA/Drivers/Misc/../../Common/Common.h TM1001A.c pins.h USBtoSerial.h: @@ -305,3 +305,5 @@ Config/LUFAConfig.h: ../../LUFA/../LUFA/Drivers/Misc/../../Common/Common.h: TM1001A.c: + +pins.h: diff --git a/firmware/USBtoSerial.elf b/firmware/USBtoSerial.elf index c6a30e9..09b7903 100755 Binary files a/firmware/USBtoSerial.elf and b/firmware/USBtoSerial.elf differ diff --git a/firmware/USBtoSerial.hex b/firmware/USBtoSerial.hex index 82084c9..b3036b3 100644 --- a/firmware/USBtoSerial.hex +++ b/firmware/USBtoSerial.hex @@ -1,9 +1,9 @@ :100000009AC00000B4C00000B2C00000B0C0000040 :10001000AEC00000ACC00000AAC00000A8C0000034 -:10002000A6C00000A4C00000A2C0000079C6000065 -:100030009EC000009CC000009AC0000098C0000054 +:10002000A6C00000A4C00000A2C000007CC7000061 +:100030000C9437089CC000009AC0000098C00000D3 :1000400096C0000094C0000092C0000090C0000064 -:100050008EC00000D6C000008AC00000D8C20000D8 +:100050008EC000004BC100008AC000004EC30000EB :1000600086C0000084C0000082C0000080C0000084 :100070007EC000007CC000007AC0000078C0000094 :1000800076C0000074C0000072C0000070C00000A4 @@ -18,375 +18,419 @@ :1001100020005500530042002D00520053003200D1 :100120003300320020004100640061007000740060 :1001300065007200000011241FBECFEFD4E0DEBFC7 -:10014000CDBF11E0A0E0B1E0EAEFF7E102C0059019 -:100150000D92A236B107D9F712E0A2E6B1E001C0D4 -:100160001D92A739B107E1F75DD30C94FB0B48CF83 +:10014000CDBF11E0A0E0B1E0E8EBFAE102C005901C +:100150000D92AA36B107D9F712E0AAE6B1E001C0C4 +:100160001D92A43AB107E1F765D40C945A0D48CF1B :10017000FC01A081B1816C93808191810196918372 :100180008083268137818217930721F484819581AA :10019000918380832FB7F894828593850196938706 :1001A00082872FBF0895FC01A281B3818D91B38313 :1001B000A28326813781A217B30721F424813581D8 :1001C000338322839FB7F8942285338521503040B2 -:1001D000338722879FBF0895FC012FB7F89471835E -:1001E0006083738362837583648360587F4F7783F2 -:1001F000668380E890E091878087138612862FBF00 -:1002000008951F920F920FB60F9211248F93809131 -:1002100088028F5F809388028F910F900FBE0F909E -:100220001F90189586B53091880220E0280F311D67 -:10023000C901089516BC109288020895DF92EF92CA -:10024000FF920F931F93CF93DF9383E085BDF2DF7F -:10025000509A5898E7DFBC0180E090E00E94230BA1 -:1002600020E030E84EE053E40E948B0A87FDF2CF95 -:1002700082E085BDDD24D39410E0DCDF509A5898ED -:10028000D1DFBC0180E090E00E94230B20E030E051 -:100290004CE852E40E948B0A87FDF2CF5098589A9E -:1002A000C1DFBC0180E090E00E94230B20E030E041 -:1002B00048E453E40E948B0A87FDF2CF41C0C8E0B6 -:1002C000D0E000E8E12EFF248FE792E0E80EF91E6F -:1002D000B1DF509A5898F7018081802379F0A2DF2E -:1002E000BC0180E090E00E94230B20E030E04CE86D -:1002F00052E40E948B0A87FDF2CF0EC093DFBC014F -:1003000080E090E00E94230B20E030E042E053E4E4 -:100310000E948B0A87FDF2CF5098589A83DFBC0168 -:1003200080E090E00E94230B20E030E048E453E4BA -:100330000E948B0A87FDF2CF0695219749F61F5F31 -:100340001D1508F4BCCF76DF509A58986BDFBC01BE -:1003500080E090E00E94230B20E030E042E053E494 -:100360000E948B0A87FDF2CF5098589A5BDFBC0140 -:1003700080E090E00E94230B20E030E048E453E46A -:100380000E948B0A87FDF2CF80917F028B3329F088 -:10039000893341F429E0D22E02C093E0D92E1130E6 -:1003A00009F46BCF47DF3EDFBC0180E090E00E94A4 -:1003B000230B20E030E04AEF53E40E94D50B1816DF -:1003C0000CF442C04899EFCF489BFECFC0E8D2E082 -:1003D00011E001C0182F188288E0E82EF12C00E807 -:1003E00029DF20DFBC0180E090E00E94230B20E0A9 -:1003F00030E048E453E40E94D50B181614F4115071 -:1004000024C04899EECF16DF489BFECF0BDFBC011E -:1004100080E090E00E94230B20E030E048EC52E4C2 -:100420000E948B0A87FF03C08881800F888306950E -:100430000894E108F108E114F10491F6812F8F5F2F -:100440002196893039F601C010E0812FDF91CF91DC -:100450001F910F91FF90EF90DF9008955098589A58 -:10046000EEE6F0E080818160808308958CE38093E4 -:100470007F02E4DE809389028091890208958BE3F4 -:1004800080937F0283E68093800284E080938102E0 -:10049000D5DE8DE380937F02D1DE89E380937F02F6 -:1004A00010928602CBDE8FEF91EEA4E08150904057 -:1004B000A040E1F700C0000008958BE380937F0225 -:1004C00083E68093800281E080938102B7DE8FEF24 -:1004D00091EEA4E081509040A040E1F700C0000000 -:1004E000089580918902882351F08091800286FFCF -:1004F00004C081958F73819508958F73089580E06E -:10050000089580918902882351F08091810286FFAD -:1005100004C081958F73819508958F73089580E04D -:1005200008951F938FB7F89420916C0130916D015D -:100530008FBF80916A0190916B012817390749F0AC -:1005400085E491E054D7BC0197FD03C082E691E0B9 -:100550000FDE2FB7F8948091F8019091F9012FBF29 -:10056000009701F1209146012F702093E90020911E -:10057000E80020FF17C08031910510F08FE090E077 -:10058000182F0EC0E091F001F091F10185E491E0A7 -:100590006081B9D61150882329F48EEE91E003DEF4 -:1005A000112381F72FB7F89480916C0190916D0120 -:1005B0002FBF009749F082E691E0F5DD9091C800E9 -:1005C00095FFFCCF8093CE0085E491E0F8D6AED5C0 -:1005D0001F91089584B7877F84BF88E10FB6F89490 -:1005E00080936000109260000FBE90E080E80FB62C -:1005F000F89480936100909361000FBE82C30895C8 -:10060000089585E491E05BC685E491E0ABC51F9257 -:100610000F920FB60F9211242F933F934F935F9336 -:100620006F937F938F939F93AF93BF93EF93FF93BA -:100630006091CE008EB3843019F48EEE91E098DD97 -:10064000FF91EF91BF91AF919F918F917F916F91AA -:100650005F914F913F912F910F900FBE0F901F9080 -:1006600018958F929F92AF92BF92CF92DF92EF92A6 -:10067000FF921F93FC01A18DA150A23028F4B0E09D -:10068000A05ABE4F1C9101C010E0808D823009F449 -:100690001860828D873031F0883031F0863029F44F -:1006A000126003C0146001C016601092C90010925D -:1006B000C8001092CA00C488D588E688F788C701A8 -:1006C000B6019695879577956795BDD720E034E27A -:1006D00044EF59E4BCD64B015C01C701B601B3D766 -:1006E0009B01AC01C501B4011AD720E030E040E81D -:1006F0005FE3ACD67CD77093CD006093CC001093B1 -:10070000CA0082E08093C80088E98093C9001F91E5 -:10071000FF90EF90DF90CF90BF90AF909F908F9021 -:100720000895682F8EB3843019F48EEE91E020CDB9 -:100730000895EF92FF92CF93DF93E82EE7017E01B9 -:10074000F92EE70101C0EDDF89918823E1F7DF9100 -:10075000CF91FF90EF9008952F923F924F925F922A -:100760006F927F928F929F92AF92BF92CF92DF92C1 -:10077000EF92FF920F931F93CF93DF937B018C0136 -:10078000822F90E0FA01E80FF91F1082D22EDA943E -:100790004D2C552447FC5094EA01C40DD51DAA24C4 -:1007A000BB24BAE06B2E712C812C912C1C01089477 -:1007B00021083108A0E2CA2E20C0E114F10401058D -:1007C000110541F4C501840D951D8215930514F49E -:1007D000C88207C0C801B701A4019301EAD7605DD0 -:1007E0006883C801B701A4019301E3D779018A01A5 -:1007F000DA9421970894A108B108D7FEDECFDF91E3 -:10080000CF911F910F91FF90EF90DF90CF90BF900D -:10081000AF909F908F907F906F905F904F903F90A0 -:100820002F900895CF92DF92EF92FF920F931F9334 -:10083000DF93CF93CDB7DEB760970FB6F894DEBFE6 -:100840000FBECDBFC7DE82E691E06EE671E0C4DC8C -:100850008EEE91E06AEF71E0BFDC7894FFDD8FEF00 -:1008600099E6A8E181509040A040E1F700C0000067 -:10087000789405DE04DE80E091E05BDF1EDEDD249F -:100880008E010F5F1F4FEE24FF244BDE0894E11C06 -:10089000F11C90EDE91697E0F906B9F7E7DD31DED6 -:1008A000E82E1FDE2E2D332727FD30952C0D311D10 -:1008B0002F3F310509F024F437FD05C0CE0C04C0EC -:1008C000CC24CA9401C0CC24282F332727FD30958F -:1008D0002D0D311D2F3F310509F024F437FD05C0E2 -:1008E000D80E04C0DD24DA9401C0DD2481E391E058 -:1008F00020DF6C2D70E080E090E0A80124E02CDF88 -:10090000C80117DF89E391E014DF6D2D70E080E00E -:1009100090E0A80124E020DFC8010BDF83E491E030 -:1009200008DFB1CF923029F0933041F09130E9F4F3 -:1009300017C02EE330E0EAEAF0E01BC0813041F05E -:10094000813018F0823089F406C0E8EEF0E005C08E -:10095000ECEEF0E002C0E6E0F1E0249130E009C006 -:1009600022E130E0E8E9F0E004C020E030E0E0E03F -:10097000F0E0DA011196FC93EE93C9010895282F57 -:10098000392FF90180919502909196028617970769 -:1009900018F4BC0120E035C061157105D9F78091CC -:1009A000E8008E778093E800F5CF80918E0288234F -:1009B000F1F18530C1F18091E80083FD36C080916E -:1009C000E80082FD2AC08091E80080FF1AC0809173 -:1009D000F20090E006C021912093F1006150704038 -:1009E00001966115710519F088309105A0F321E099 -:1009F0008830910509F020E08091E8008E7780939F -:100A0000E8006115710589F6222379F606C0809108 -:100A10008E02882361F0853061F08091E80082FFCA -:100A2000F6CF80E0089583E0089581E0089582E0A4 -:100A3000089583E00895E82FF92F80919502909111 -:100A400096028617970718F4BC0120E037C061159D -:100A50007105D9F78091E8008E778093E800F5CF93 -:100A600080918E02882309F43FC08530C9F18091BE -:100A7000E80083FD37C08091E80082FD2BC08091A3 -:100A8000E80080FF1BC08091F20090E007C0249135 -:100A90002093F10031966150704001966115710507 -:100AA00019F08830910598F321E08830910509F01C -:100AB00020E08091E8008E778093E8006115710551 -:100AC00079F6222369F606C080918E02882361F0B0 -:100AD000853061F08091E80082FFF6CF80E00895D4 -:100AE00083E0089581E0089582E0089583E0089509 -:100AF000982F2CC0292F2F702093E900981739F0D8 -:100B00007091EC002091ED005091F00003C0242F73 -:100B1000762F50E021FF19C03091EB003E7F3093DB -:100B2000EB003091ED003D7F3093ED003091EB0014 -:100B300031603093EB007093EC002093ED00509304 -:100B4000F0002091EE0027FF08C09F5F953090F2E3 -:100B50008F708093E90081E0089580E00895EF921E -:100B6000FF920F931F93CF93DF93162FE82EE70189 -:100B70007E01F92EE70100E02AC09881992329F12E -:100B80006B81E981FA812C81892F8F70853018F56E -:100B90006295660F660F607C991F9927991F692BD4 -:100BA000223010F096E001C092E028E030E040E012 -:100BB00003C04F5F220F331F2E173F07D0F342951C -:100BC000407F492B95DF882331F00F5F2596011771 -:100BD000A0F281E001C080E0DF91CF911F910F91E1 -:100BE000FF90EF90089580918F0287FF13C004C09B -:100BF00080918E028823B9F08091E80082FFF8CFBF -:100C00008091E8008B778093E800089580918E02B0 -:100C1000882349F08091E80080FFF8CF8091E800B8 -:100C20008E778093E80008958091E4009091E5002C -:100C300044E62091EC0020FF26C02091E80020FD32 -:100C400016C020918E022223A1F02530A1F0209120 -:100C5000EB0025FD12C02091E4003091E50028173B -:100C6000390739F3442359F04150C901E2CF80E0FC -:100C7000089582E0089583E0089581E0089584E076 -:100C8000089580E008952091E80022FFDACFF9CF9F -:100C900041D043D08091D8008F778093D800809145 -:100CA000D80080688093D8008091D8008F7D809391 -:100CB000D80084E089BD86E089BD09B400FEFDCF7F -:100CC00010928E0210928A0210928C0210928B0265 -:100CD00080E060E042E00CDF8091E1008E7F809355 -:100CE000E1008091E20081608093E2008091E20067 -:100CF00088608093E2008091E0008E7F8093E00026 -:100D00000895E3E6F0E080818E7F808381E0809328 -:100D10008D02BECF1092E20008951092E100089576 -:100D20001F920F920FB60F9211242F933F934F9360 -:100D30005F936F937F938F939F93AF93BF93EF9343 -:100D4000FF938091E10082FF0AC08091E20082FF60 -:100D500006C08091E1008B7F8093E100E6D1809115 -:100D6000E10080FF17C08091E20080FF13C08091F6 -:100D7000E2008E7F8093E2008091E20080618093A8 -:100D8000E2008091D80080628093D80019BC109254 -:100D90008E0236DC8091E10084FF2DC08091E2005C -:100DA00084FF29C084E089BD86E089BD09B400FEC6 -:100DB000FDCF8091D8008F7D8093D8008091E10095 -:100DC0008F7E8093E1008091E2008F7E8093E2002D -:100DD0008091E20081608093E20080918A02882302 -:100DE00021F48091E30087FF02C084E001C081E02C -:100DF00080938E0204DC8091E10083FF22C0809109 -:100E0000E20083FF1EC08091E100877F8093E100B4 -:100E100082E080938E0210928A028091E1008E7FA0 -:100E20008093E1008091E2008E7F8093E2008091C8 -:100E3000E20080618093E20080E060E042E058DE02 -:100E400074D1FF91EF91BF91AF919F918F917F915D -:100E50006F915F914F913F912F910F900FBE0F9027 -:100E60001F9018951F93DF93CF93CDB7DEB7AC9744 -:100E70000FB6F894DEBF0FBECDBFEFE8F2E0809171 -:100E8000F100819322E0E739F207C9F7BDDB8091D9 -:100E9000E80083FF32C180918F02209190022530BB -:100EA00009F484C0263040F42130A1F1213070F0E3 -:100EB000233009F022C12EC0283009F4F0C02930B7 -:100EC00009F4FFC0263009F018C193C0803821F022 -:100ED000823809F012C108C080918B0290918C0277 -:100EE000992371F082600CC0809193028F7080937F -:100EF000E9009091EB0081E095FF80E01092E9001D -:100F00009091E800977F9093E8008093F100109211 -:100F1000F100D0C0882319F0823009F0EEC090E0D3 -:100F20008F719070009729F08230910509F0E5C02B -:100F30000BC080919102813009F0DFC0233009F0AD -:100F400080E080938C022CC080919102882341F52F -:100F5000209193022F7009F4D0C02093E900809172 -:100F6000EB0080FF1DC080919002833021F48091BE -:100F7000EB00806213C08091EB0080618093EB00F6 -:100F800081E090E002C0880F991F2A95E2F78093D4 -:100F9000EA001092EA008091EB0088608093EB00F9 -:100FA0001092E9008091E800877F87C0882309F0CC -:100FB000A4C0109191021F778091E3008078812B6B -:100FC0008093E3008091E800877F8093E8000BDE48 -:100FD0008091E80080FFFCCF8091E30080688093DF -:100FE000E300112311F083E001C082E080938E02C0 -:100FF00084C08058823008F080C080919102909126 -:10100000920223E08C3D920791F583E08C838AE283 -:101010008B835FB7F894DE01159680E090E04EE098 -:1010200061E2E42FF0E060935700E49180FF03C099 -:10103000E295EF704F5FEF702E2F30E0EA3018F03E -:10104000295C3F4F02C0205D3F4F2D933D93019699 -:101050008431910531F75FBF8091E800877F8093ED -:10106000E800CE0103966AE270E089DC12C060916C -:101070009302AE014F5F5F4F55DCBC01009709F44E -:101080003CC08091E800877F8093E80089819A8145 -:10109000D2DC8091E8008B778093E8002EC0803806 -:1010A00061F58091E800877F8093E80080918A0253 -:1010B0008093F1008091E8008E778093E80093DDC3 -:1010C0001CC08823D1F4909191029230B0F48091A9 -:1010D000E800877F8093E80090938A0284DD809106 -:1010E0008A02882321F48091E30087FF02C084E014 -:1010F00001C081E080938E0284DA8091E80083FF52 -:101100000AC08091E800877F8093E8008091EB001F -:1011100080628093EB00AC960FB6F894DEBF0FBEF2 -:10112000CDBFCF91DF911F91089508951F938091B6 -:101130008E028823A9F08091E9008F709091EC00D5 -:1011400090FF02C010E801C010E0182B1092E900D7 -:101150008091E80083FF01C085DE1F701093E900D5 -:101160001F910895CF93DF93EC018091E80083FFF6 -:10117000A3C0888190E020919302309194022817B7 -:10118000390709F099C080919002813269F082326A -:1011900020F4803209F090C03CC0823209F46BC068 -:1011A000833209F089C07AC080918F02813A09F0B8 -:1011B00083C08091E800877F8093E8008091E800F9 -:1011C00080FFFCCF8C899D89AE89BF898093F10017 -:1011D000292F3A2F4B2F55272093F1009D014427AB -:1011E00055272093F1008B2F9927AA27BB2780939F -:1011F000F100888D8093F100898D8093F1008A8DB4 -:101200008093F1008091E8008E778093E800EBDC1A -:1012100053C080918F02813209F04EC08091E80066 -:10122000877F8093E80005C080918E02882309F4AF -:1012300043C08091E80082FFF7CF3091F100209108 -:10124000F1009091F1008091F1003C8B2D8B9E8BF1 -:101250008F8B8091F100888F8091F100898F809130 -:10126000F1008A8F8091E8008B778093E800BBDCE7 -:10127000CE01F7D921C080918F028132E9F48091AB -:10128000E800877F8093E800AEDC80919102909126 -:101290009202998B888BCE01D8D00EC080918F029C -:1012A000813251F48091E800877F8093E8009BDCD5 -:1012B000CE0160919102C9D0DF91CF910895CF9373 -:1012C000DF93EC014096FC018BE0DF011D928A95D3 -:1012D000E9F782E08C83898783E08E87CE010196CF -:1012E00061E03DDC882359F0CE01069661E037DCF1 -:1012F000882329F0CE010B9661E031DC01C080E04B -:10130000DF91CF910895DF93CF930F92CDB7DEB7E2 -:10131000FC0180918E028430F9F424893589468954 -:1013200057892115310541055105B1F081818F7033 -:101330008093E9008091E80085FD0AC08091E80073 -:101340008E778093E80069836FDC6981882329F4B4 -:101350006093F10080E001C082E00F90CF91DF91B7 -:101360000895FC0180918E02843019F52489358915 -:10137000468957892115310541055105D1F08181F3 -:101380008F708093E9008091F2008823A1F0909102 -:10139000E8008091E8008E778093E80095FD0DC00D -:1013A00043DC882359F49091E8009E779093E800FD -:1013B000089582E0089580E0089580E008952091E6 -:1013C0008E02243099F4FC01248935894689578995 -:1013D000211531054105510549F021812F702093D8 -:1013E000E9002091E80020FF01C0BBCF0895FC0177 -:1013F00080918E02843029F5248935894689578960 -:101400002115310541055105E1F086818F708093EA -:10141000E9008091E80082FF14C08091F2008823E7 -:1014200021F02091F10030E002C02FEF3FEF8091DA -:10143000F200882341F48091E8008B778093E800E4 -:1014400002C02FEF3FEFC901089508955058BB2700 -:10145000AA270ED070C161D130F066D120F031F4EE -:101460009F3F11F41EF456C10EF4E095E7FB4CC10A -:10147000E92F72D180F3BA176207730784079507C3 -:1014800018F071F49EF58AC10EF4E0950B2EBA2F78 -:10149000A02D0B01B90190010C01CA01A00111247A -:1014A000FF27591B99F0593F50F4503E68F11A1626 -:1014B000F040A22F232F342F4427585FF3CF4695B7 -:1014C00037952795A795F0405395C9F77EF41F16D9 -:1014D000BA0B620B730B840BBAF09150A1F0FF0FA3 -:1014E000BB1F661F771F881FC2F70EC0BA0F621F8F -:1014F000731F841F48F4879577956795B795F7957F -:101500009E3F08F0B3CF9395880F08F09927EE0F10 -:10151000979587950895D4D008F481E008950CD06C -:101520000AC102D140F0F9D030F021F45F3F19F048 -:10153000EBC0511134C1EEC00FD198F39923C9F318 -:101540005523B1F3951B550BBB27AA2762177307C9 -:10155000840738F09F5F5F4F220F331F441FAA1F7D -:10156000A9F333D00E2E3AF0E0E830D0915050403D -:10157000E695001CCAF729D0FE2F27D0660F771FEB -:10158000881FBB1F261737074807AB07B0E809F0CD -:10159000BB0B802DBF01FF2793585F4F2AF09E3F62 -:1015A000510568F0B1C0FBC05F3FECF3983EDCF33F -:1015B000869577956795B795F7959F5FC9F7880FDB -:1015C000911D9695879597F90895E1E0660F771F2D -:1015D000881FBB1F621773078407BA0720F0621BBE -:1015E000730B840BBA0BEE1F88F7E0950895BCD0FF -:1015F00088F09F5790F0B92F9927B751A0F0D1F0FC -:10160000660F771F881F991F1AF0BA95C9F712C085 -:10161000B13081F0C3D0B1E00895C0C0672F782FFA -:101620008827B85F39F0B93FCCF3869577956795F1 -:10163000B395D9F73EF490958095709561957F4F5D -:101640008F4F9F4F0895E89409C097FB3EF4909503 -:101650008095709561957F4F8F4F9F4F9923A9F08B -:10166000F92F96E9BB279395F6958795779567951A -:10167000B795F111F8CFFAF4BB0F11F460FF1BC05E -:101680006F5F7F4F8F4F9F4F16C0882311F096E9F1 -:1016900011C0772321F09EE8872F762F05C066239F -:1016A00071F096E8862F70E060E02AF09A95660F58 -:1016B000771F881FDAF7880F9695879597F9089511 -:1016C000990F0008550FAA0BE0E8FEEF1616170653 -:1016D000E807F907C0F012161306E407F50798F0BB -:1016E000621B730B840B950B39F40A2661F0232BD4 -:1016F000242B252B21F408950A2609F4A140A69550 -:101700008FEF811D811D089597F99F6780E870E034 -:1017100060E008959FEF80EC089500240A94161667 -:10172000170618060906089500240A9412161306CF -:10173000140605060895092E0394000C11F488235D -:1017400052F0BB0F40F4BF2B11F460FF04C06F5F79 -:101750007F4F8F4F9F4F089557FD9058440F551F4F -:1017600059F05F3F71F04795880F97FB991F61F023 -:101770009F3F79F087950895121613061406551F9A -:10178000F2CF4695F1DF08C0161617061806991F06 -:10179000F1CF86957105610508940895E894BB27FB -:1017A00066277727CB0197F908958ADF08F48FEF32 -:1017B0000895A1E21A2EAA1BBB1BFD010DC0AA1F92 -:1017C000BB1FEE1FFF1FA217B307E407F50720F0AA -:1017D000A21BB30BE40BF50B661F771F881F991F25 -:1017E0001A9469F760957095809590959B01AC016E -:0A17F000BD01CF010895F894FFCF6A -:1017FA00796F752073656C656374656420746865B8 -:10180A002072656C617469766520706F736974699A -:10181A006F6E2064656D6F206D6F6475733A0A0D83 -:10182A0000785F706F733A20002020795F706F73C1 -:10183A003A20000D0000831000000104100000018E -:10184A008208000001000000000000000000000003 -:02185A0030203C +:1001D000338722879FBF08952A982B982C982D98B3 +:1001E00045B190E09C0121703070220F331F220F27 +:1001F000331F422B45B945B19C01227030703595B3 +:10020000279573E0220F331F7A95E1F7422B45B90A +:1002100045B19C012470307035952795359527950B +:1002200054E0220F331F5A95E1F7422B45B925B10F +:100230008870907043E0959587954A95E1F735E091 +:10024000880F991F3A95E1F7282B25B908952F9823 +:100250002E984798469845B190E09C013695322FEC +:10026000222737952795422B45B945B19C0122702D +:1002700030703595279576E0220F331F7A95E1F798 +:10028000422B45B948B19C012470307035952795B3 +:10029000359527953695322F222737952795422B6E +:1002A00048B928B188709070B3E095958795BA9554 +:1002B000E1F7A6E0880F991FAA95E1F7282B28B946 +:1002C0000895FC012FB7F894718360837383628370 +:1002D0007583648360587F4F7783668380E890E0FE +:1002E00091878087138612862FBF08951F920F92E1 +:1002F0000FB60F9211248F93809196028F5F809397 +:1003000096028F910F900FBE0F901F90189586B593 +:100310003091960220E0280F311DC901089516BCC6 +:10032000109296020895DF92EF92FF920F931F931F +:10033000CF93DF9383E085BDF2DF509A5898E7DFD3 +:10034000BC0180E090E00E945B0C20E030E84EE0D1 +:1003500053E40E94C30B87FDF2CF82E085BDDD240C +:10036000D39410E0DCDF509A5898D1DFBC0180E0D4 +:1003700090E00E945B0C20E030E04CE852E40E94E8 +:10038000C30B87FDF2CF5098589AC1DFBC0180E0C3 +:1003900090E00E945B0C20E030E048E453E40E94CF +:1003A000C30B87FDF2CF41C0C8E0D0E000E8E12EEA +:1003B000FF248DE892E0E80EF91EB1DF509A5898BC +:1003C000F7018081802379F0A2DFBC0180E090E01A +:1003D0000E945B0C20E030E04CE852E40E94C30B2A +:1003E00087FDF2CF0EC093DFBC0180E090E00E9459 +:1003F0005B0C20E030E042E053E40E94C30B87FD39 +:10040000F2CF5098589A83DFBC0180E090E00E94C0 +:100410005B0C20E030E048E453E40E94C30B87FD0E +:10042000F2CF0695219749F61F5F1D1508F4BCCF42 +:1004300076DF509A58986BDFBC0180E090E00E9414 +:100440005B0C20E030E042E053E40E94C30B87FDE8 +:10045000F2CF5098589A5BDFBC0180E090E00E9498 +:100460005B0C20E030E048E453E40E94C30B87FDBE +:10047000F2CF80918D028B3329F0893341F409E06A +:10048000D02E02C0B3E0DB2E113009F46BCF47DF72 +:100490003EDFBC0180E090E00E945B0C20E030E099 +:1004A0004AEF53E40E940D0D18160CF442C048990F +:1004B000EFCF489BFECFCEE8D2E011E001C0182F6D +:1004C0001882A8E0EA2EF12C00E829DF20DFBC0129 +:1004D00080E090E00E945B0C20E030E048E453E4D0 +:1004E0000E940D0D181614F4115024C04899EECF37 +:1004F00016DF489BFECF0BDFBC0180E090E00E943E +:100500005B0C20E030E048EC52E40E94C30B87FF14 +:1005100003C08881800F888306950894E108F1085C +:10052000E114F10491F6812F8F5F2196893039F61D +:1005300001C010E0812FDF91CF911F910F91FF90AB +:10054000EF90DF9008955098589AEEE6F0E08081A1 +:100550008160808308958CE380938D02E4DE809334 +:1005600097028091970208958BE380938D0283E632 +:1005700080938E0284E080938F02D5DE8DE380939A +:100580008D02D1DE89E380938D0210929402CBDE3E +:100590008FEF91EEA4E081509040A040E1F700C0C1 +:1005A000000008958BE380938D0283E680938E0292 +:1005B00081E080938F02B7DE8FEF91EEA4E081504F +:1005C0009040A040E1F700C000000895809197029C +:1005D000882351F080918E0286FF04C081958F732D +:1005E000819508958F73089580E008958091970212 +:1005F000882351F080918F0286FF04C081958F730C +:10060000819508958F73089580E008951F938FB7A3 +:10061000F89420917401309175018FBF809172011F +:10062000909173012817390751F085E491E00E94F9 +:10063000300BBC0197FD03C08AE691E099DD2FB72E +:10064000F89480910002909101022FBF009701F170 +:10065000209146012F702093E9002091E80020FFAF +:1006600017C08031910510F08FE090E0182F0EC078 +:10067000E091F801F091F90185E491E060817FD784 +:100680001150882329F486EF91E08DDD112381F745 +:100690002FB7F89480917401909175012FBF009746 +:1006A00049F08AE691E07FDD9091C80095FFFCCF8C +:1006B0008093CE0085E491E0BCD776D61F91089553 +:1006C00084B7877F84BF88E10FB6F8948093600079 +:1006D000109260000FBE90E080E80FB6F89480930F +:1006E0006100909361000FBE0FC40895089585E4E2 +:1006F00091E021C785E491E072C61F920F920FB678 +:100700000F9211242F933F934F935F936F937F9397 +:100710008F939F93AF93BF93EF93FF936091CE001E +:100720008EB3843019F486EF91E022DDFF91EF91D2 +:10073000BF91AF919F918F917F916F915F914F91F9 +:100740003F912F910F900FBE0F901F9018958F9291 +:100750009F92AF92BF92CF92DF92EF92FF921F9340 +:10076000FC01A18DA150A23028F4B0E0AC59BE4FDD +:100770001C9101C010E0808D823009F41860828DD8 +:10078000873031F0883031F0863029F4126003C0B0 +:10079000146001C016601092C9001092C800109237 +:1007A000CA00C488D588E688F788C701B60196953F +:1007B0008795779567950E945B0C20E034E244EFC3 +:1007C00059E47DD74B015C01C701B6010E945B0C67 +:1007D0009B01AC01C501B401DAD720E030E040E86C +:1007E0005FE36CD70E942F0C7093CD006093CC0018 +:1007F0001093CA0082E08093C80088E98093C90002 +:100800001F91FF90EF90DF90CF90BF90AF909F909F +:100810008F900895682F8EB3843019F486EF91E09D +:10082000A7CC0895EF92FF92CF93DF93E82EE701D4 +:100830007E01F92EE70101C0EDDF89918823E1F700 +:10084000DF91CF91FF90EF9008952F923F924F92BA +:100850005F926F927F928F929F92AF92BF92CF9250 +:10086000DF92EF92FF920F931F93CF93DF937B0161 +:100870008C01822F90E0FA01E80FF91F1082D22E2E +:10088000DA944D2C552447FC5094EA01C40DD51D33 +:10089000AA24BB24AAE06A2E712C812C912C1C0165 +:1008A000089421083108F0E2CF2E22C0E114F104AF +:1008B0000105110541F4C501840D951D82159305AF +:1008C00014F4C88208C0C801B701A40193010E94B2 +:1008D000380D605D6883C801B701A40193010E94CF +:1008E000380D79018A01DA9421970894A108B1089A +:1008F000D7FEDCCFDF91CF911F910F91FF90EF904A +:10090000DF90CF90BF90AF909F908F907F906F902F +:100910005F904F903F902F90089580E05DDC80E0E5 +:1009200096DC229A239A249A259A279A269A3F9A05 +:100930003E9A08950F931F93162F823050F4A82FDC +:10094000B0E0AA0FBB1FAA59BE4F2D913C91119741 +:1009500002C02CEE30E0E82FF0E0812F992787FDD0 +:1009600090950496EA57FD4F4081840F911D64E0F5 +:1009700070E00E94250D8083E82FF0E0E05AFE4FE2 +:100980000081112311F0802F01C080E0F901099549 +:10099000802F1F910F91089521E0181619060CF071 +:1009A00020E0892F881F8827881F281B822F089501 +:1009B0001F932091840230918502280F391F3093B4 +:1009C0008502209384028091820290918302860F97 +:1009D000971F9093830280938202C901DDDF182F55 +:1009E00080E0612FA7DF812F992787FD90952091C7 +:1009F000840230918502281B390B309385022093A5 +:100A000084028091820290918302C6DF182F81E0D8 +:100A1000612F90DF812F992787FD90952091820289 +:100A200030918302281B390B30938302209382027A +:100A30001F910895AF92BF92CF92DF92EF92FF92F3 +:100A40000F931F93DF93CF93CDB7DEB760970FB6A9 +:100A5000F894DEBF0FBECDBF60DF32DE8AE691E0E4 +:100A600066E771E02EDC86EF91E062E072E029DC5F +:100A7000789469DD8FEF99E6A8E181509040A0401D +:100A8000E1F700C0000078946FDD80E091E0CADEFD +:100A900089DDDD248E010F5F1F4FB8DD5CDDA6DD33 +:100AA000A82E94DDEA2CFF24E7FCF09497012C0D8E +:100AB000311D2F3F310509F024F437FD05C0CA0C64 +:100AC00004C0CC24CA9401C0CC24A82EBB24A7FC0B +:100AD000B09495012D0D311D2F3F310509F024F4FF +:100AE00037FD05C0D80E04C0DD24DA9401C0DD2432 +:100AF00081E391E097DE6C2D70E080E090E0A8014A +:100B000024E0A3DEC8018EDE89E391E08BDE6D2D4B +:100B100070E080E090E0A80124E097DEC80182DE6A +:100B200083E491E07FDEAFE3BCE91197F1F700C009 +:100B30000000C701B5013CDFB0CF923029F09330FF +:100B400041F09130E9F417C02EE330E0EAEAF0E03A +:100B50001BC0813041F0813018F0823089F406C02A +:100B6000E8EEF0E005C0ECEEF0E002C0E6E0F1E017 +:100B7000249130E009C022E130E0E8E9F0E004C06F +:100B800020E030E0E0E0F0E0DA011196FC93EE9333 +:100B9000C9010895282F392FF9018091A20290915F +:100BA000A3028617970718F4BC0120E034C0611532 +:100BB0007105D9F78091E8008E778093E800F5CF32 +:100BC0008EB38823E9F18530B9F18091E80083FD87 +:100BD00035C08091E80082FD29C08091E80080FF47 +:100BE0001AC08091F20090E006C021912093F1009C +:100BF0006150704001966115710519F088309105BA +:100C0000A0F321E08830910509F020E08091E80010 +:100C10008E778093E8006115710591F6222381F6A5 +:100C200005C08EB3882361F0853061F08091E800C3 +:100C300082FFF7CF80E0089583E0089581E0089572 +:100C400082E0089583E00895E82FF92F8091A202B1 +:100C50009091A3028617970718F4BC0120E036C0D4 +:100C600061157105D9F78091E8008E778093E800CF +:100C7000F5CF8EB3882309F43EC08530C1F1809151 +:100C8000E80083FD36C08091E80082FD2AC0809193 +:100C9000E80080FF1BC08091F20090E007C0249123 +:100CA0002093F100319661507040019661157105F5 +:100CB00019F08830910598F321E08830910509F00A +:100CC00020E08091E8008E778093E800611571053F +:100CD00081F6222371F605C08EB3882361F085303A +:100CE00061F08091E80082FFF7CF80E0089583E013 +:100CF000089581E0089582E0089583E00895982F93 +:100D00002CC0292F2F702093E900981739F070918B +:100D1000EC002091ED005091F00003C0242F762FBD +:100D200050E021FF19C03091EB003E7F3093EB0083 +:100D30003091ED003D7F3093ED003091EB0031605C +:100D40003093EB007093EC002093ED005093F00093 +:100D50002091EE0027FF08C09F5F953090F28F70C2 +:100D60008093E90081E0089580E00895EF92FF927A +:100D70000F931F93CF93DF93162FE82EE7017E0189 +:100D8000F92EE70100E02AC09881992329F16B81AF +:100D9000E981FA812C81892F8F70853018F5629551 +:100DA000660F660F607C991F9927991F692B223067 +:100DB00010F096E001C092E028E030E040E003C08F +:100DC0004F5F220F331F2E173F07D0F34295407F0E +:100DD000492B95DF882331F00F5F25960117A0F28C +:100DE00081E001C080E0DF91CF911F910F91FF90D2 +:100DF000EF90089580919C0287FF11C003C08EB3CD +:100E00008823B1F08091E80082FFF9CF8091E8005B +:100E10008B778093E80008958EB3882349F0809102 +:100E2000E80080FFF9CF8091E8008E778093E8009A +:100E300008958091E4009091E50044E62091EC0053 +:100E400020FF25C02091E80020FD15C02EB32223ED +:100E5000A1F02530A1F02091EB0025FD12C02091DA +:100E6000E4003091E5002817390741F3442359F095 +:100E70004150C901E3CF80E0089582E0089583E006 +:100E8000089581E0089584E0089580E00895209118 +:100E9000E80022FFDBCFF9CF40D042D08091D800CC +:100EA0008F778093D8008091D80080688093D80095 +:100EB0008091D8008F7D8093D80084E089BD86E042 +:100EC00089BD09B400FEFDCF1EBA1092980210929F +:100ED0009A021092990280E060E042E010DF809177 +:100EE000E1008E7F8093E1008091E2008160809339 +:100EF000E2008091E20088608093E2008091E0004F +:100F00008E7F8093E0000895E3E6F0E080818E7F9D +:100F1000808381E080939B02BFCF1092E20008950E +:100F20001092E10008951F920F920FB60F921124B4 +:100F30002F933F934F935F936F937F938F939F93E1 +:100F4000AF93BF93EF93FF938091E10082FF0AC0BC +:100F50008091E20082FF06C08091E1008B7F809348 +:100F6000E10021D28091E10080FF16C08091E20073 +:100F700080FF12C08091E2008E7F8093E20080911A +:100F8000E20080618093E2008091D80080628093CB +:100F9000D80019BC1EBAAADB8091E10084FF2CC0E6 +:100FA0008091E20084FF28C084E089BD86E089BD8D +:100FB00009B400FEFDCF8091D8008F7D8093D800CA +:100FC0008091E1008F7E8093E1008091E2008F7E2E +:100FD0008093E2008091E20081608093E200809142 +:100FE0009802882321F48091E30087FF02C084E007 +:100FF00001C081E08EBB79DB8091E10083FF26C0D8 +:101000008091E20083FF22C08091E100877F80937E +:10101000E10082E08EBB109298028091E1008E7F09 +:101020008093E1008091E2008E7F8093E2008091C6 +:10103000E20080618093E20080E060E042E05FDEF9 +:101040008091F00088608093F000ADD1FF91EF9126 +:10105000BF91AF919F918F917F916F915F914F91D0 +:101060003F912F910F900FBE0F901F9018951F92D8 +:101070000F920FB60F9211241F932F933F934F930C +:101080005F936F937F938F939F93AF93BF93EF93F0 +:10109000FF931091E9001F708091EC001092E9001D +:1010A0008091F000877F8093F00078941BD010929D +:1010B000E9008091F00088608093F0001093E900CF +:1010C000FF91EF91BF91AF919F918F917F916F9120 +:1010D0005F914F913F912F911F910F900FBE0F90F5 +:1010E0001F9018951F93DF93CF93CDB7DEB7AC97C2 +:1010F0000FB6F894DEBF0FBECDBFECE9F2E08091F1 +:10110000F100819322E0E43AF207C9F7F3DA809123 +:10111000E80083FF30C180919C0220919D02253020 +:1011200009F484C0263040F42130A1F1213070F060 +:10113000233009F020C12EC0283009F4EFC0293037 +:1011400009F4FEC0263009F016C192C0803821F0A3 +:10115000823809F010C108C08091990290919A02DA +:10116000992371F082600CC08091A0028F708093EF +:10117000E9009091EB0081E095FF80E01092E9009A +:101180009091E800977F9093E8008093F10010928F +:10119000F100CFC0882319F0823009F0ECC090E054 +:1011A0008F719070009729F08230910509F0E3C0AB +:1011B0000BC080919E02813009F0DDC0233009F020 +:1011C00080E080939A022CC080919E02882341F592 +:1011D0002091A0022F7009F4CEC02093E9008091E5 +:1011E000EB0080FF1DC080919D02833021F480912F +:1011F000EB00806213C08091EB0080618093EB0074 +:1012000081E090E002C0880F991F2A95E2F7809351 +:10121000EA001092EA008091EB0088608093EB0076 +:101220001092E9008091E800877F86C0882309F04A +:10123000A2C010919E021F778091E3008078812BDD +:101240008093E3008091E800877F8093E800D2DDFF +:101250008091E80080FFFCCF8091E300806880935C +:10126000E300112311F083E001C082E08EBB83C054 +:101270008058823008F07FC080919E0290919F023A +:1012800023E08C3D920791F583E08C838AE28B8387 +:101290005FB7F894DE01159680E090E04EE061E2E1 +:1012A000E42FF0E060935700E49180FF03C0E295E3 +:1012B000EF704F5FEF702E2F30E0EA3018F0295CAE +:1012C0003F4F02C0205D3F4F2D933D9301968431E7 +:1012D000910531F75FBF8091E800877F8093E80038 +:1012E000CE0103966AE270E055DC12C06091A00264 +:1012F000AE014F5F5F4F21DCBC01009709F43BC09A +:101300008091E800877F8093E80089819A819CDC46 +:101310008091E8008B778093E8002DC0803859F5E4 +:101320008091E800877F8093E80080919802809305 +:10133000F1008091E8008E778093E8005BDD1BC0B0 +:101340008823C9F490919E029230A8F48091E8001D +:10135000877F8093E800909398024CDD80919802FB +:10136000882321F48091E30087FF02C084E001C05C +:1013700081E08EBBBCD98091E80083FF0AC08091D8 +:10138000E800877F8093E8008091EB008062809383 +:10139000EB00AC960FB6F894DEBF0FBECDBFCF9179 +:1013A000DF911F91089508951F938EB38823A9F0AC +:1013B0008091E9008F709091EC0090FF02C010E8DE +:1013C00001C010E0182B1092E9008091E80083FF23 +:1013D00001C088DE1F701093E9001F910895CF931C +:1013E000DF93EC018091E80083FFA2C0888190E048 +:1013F0002091A0023091A1022817390709F098C066 +:1014000080919D02813269F0823220F4803209F0AD +:101410008FC03CC0823209F46AC0833209F088C0B0 +:1014200079C080919C02813A09F082C08091E800E5 +:10143000877F8093E8008091E80080FFFCCF8C8953 +:101440009D89AE89BF898093F100292F3A2F4B2FB8 +:1014500055272093F1009D01442755272093F10043 +:101460008B2F9927AA27BB278093F100888D809323 +:10147000F100898D8093F1008A8D8093F100809135 +:10148000E8008E778093E800B5DC52C080919C0222 +:10149000813209F04DC08091E800877F8093E80099 +:1014A00004C08EB3882309F443C08091E80082FF12 +:1014B000F8CF3091F1002091F1009091F1008091EE +:1014C000F1003C8B2D8B9E8B8F8B8091F100888F50 +:1014D0008091F100898F8091F1008A8F8091E800DE +:1014E0008B778093E80086DCCE0131D921C08091D2 +:1014F0009C028132E9F48091E800877F8093E800C4 +:1015000079DC80919E0290919F02998B888BCE010D +:10151000D4D00EC080919C02813251F48091E800B9 +:10152000877F8093E80066DCCE0160919E02C5D083 +:10153000DF91CF910895CF93DF93EC014096FC01AA +:101540008BE0DF011D928A95E9F782E08C83898721 +:1015500083E08E87CE01019661E008DC882359F094 +:10156000CE01069661E002DC882329F0CE010B96BD +:1015700061E0FCDB01C080E0DF91CF910895DF9353 +:10158000CF930F92CDB7DEB7FC018EB38430F9F460 +:101590002489358946895789211531054105510529 +:1015A000B1F081818F708093E9008091E80085FD22 +:1015B0000AC08091E8008E778093E800698339DC67 +:1015C0006981882329F46093F10080E001C082E002 +:1015D0000F90CF91DF910895FC018EB3843019F5FF +:1015E00024893589468957892115310541055105D9 +:1015F000D1F081818F708093E9008091F20088237F +:10160000A1F09091E8008091E8008E778093E80047 +:1016100095FD0DC00EDC882359F49091E8009E776B +:101620009093E800089582E0089580E0089580E0B6 +:1016300008952EB3243099F4FC0124893589468914 +:101640005789211531054105510549F021812F7038 +:101650002093E9002091E80020FF01C0BDCF08954C +:10166000FC018EB3843029F5248935894689578950 +:101670002115310541055105E1F086818F70809378 +:10168000E9008091E80082FF14C08091F200882375 +:1016900021F02091F10030E002C02FEF3FEF809168 +:1016A000F200882341F48091E8008B778093E80072 +:1016B00002C02FEF3FEFC901089508955058BB278E +:1016C000AA270ED070C161D130F066D120F031F47C +:1016D0009F3F11F41EF456C10EF4E095E7FB4CC198 +:1016E000E92F72D180F3BA17620773078407950751 +:1016F00018F071F49EF58AC10EF4E0950B2EBA2F06 +:10170000A02D0B01B90190010C01CA01A001112407 +:10171000FF27591B99F0593F50F4503E68F11A16B3 +:10172000F040A22F232F342F4427585FF3CF469544 +:1017300037952795A795F0405395C9F77EF41F1666 +:10174000BA0B620B730B840BBAF09150A1F0FF0F30 +:10175000BB1F661F771F881FC2F70EC0BA0F621F1C +:10176000731F841F48F4879577956795B795F7950C +:101770009E3F08F0B3CF9395880F08F09927EE0F9E +:10178000979587950895D4D008F481E008950CD0FA +:101790000AC102D140F0F9D030F021F45F3F19F0D6 +:1017A000EBC0511134C1EEC00FD198F39923C9F3A6 +:1017B0005523B1F3951B550BBB27AA276217730757 +:1017C000840738F09F5F5F4F220F331F441FAA1F0B +:1017D000A9F333D00E2E3AF0E0E830D091505040CB +:1017E000E695001CCAF729D0FE2F27D0660F771F79 +:1017F000881FBB1F261737074807AB07B0E809F05B +:10180000BB0B802DBF01FF2793585F4F2AF09E3FEF +:10181000510568F0B1C0FBC05F3FECF3983EDCF3CC +:10182000869577956795B795F7959F5FC9F7880F68 +:10183000911D9695879597F90895E1E0660F771FBA +:10184000881FBB1F621773078407BA0720F0621B4B +:10185000730B840BBA0BEE1F88F7E0950895BCD08C +:1018600088F09F5790F0B92F9927B751A0F0D1F089 +:10187000660F771F881F991F1AF0BA95C9F712C013 +:10188000B13081F0C3D0B1E00895C0C0672F782F88 +:101890008827B85F39F0B93FCCF38695779567957F +:1018A000B395D9F73EF490958095709561957F4FEB +:1018B0008F4F9F4F0895E89409C097FB3EF4909591 +:1018C0008095709561957F4F8F4F9F4F9923A9F019 +:1018D000F92F96E9BB279395F695879577956795A8 +:1018E000B795F111F8CFFAF4BB0F11F460FF1BC0EC +:1018F0006F5F7F4F8F4F9F4F16C0882311F096E97F +:1019000011C0772321F09EE8872F762F05C066232C +:1019100071F096E8862F70E060E02AF09A95660FE5 +:10192000771F881FDAF7880F9695879597F908959E +:10193000990F0008550FAA0BE0E8FEEF16161706E0 +:10194000E807F907C0F012161306E407F50798F048 +:10195000621B730B840B950B39F40A2661F0232B61 +:10196000242B252B21F408950A2609F4A140A695DD +:101970008FEF811D811D089597F99F6780E870E0C2 +:1019800060E008959FEF80EC089500240A941616F5 +:10199000170618060906089500240A94121613065D +:1019A000140605060895092E0394000C11F48823EB +:1019B00052F0BB0F40F4BF2B11F460FF04C06F5F07 +:1019C0007F4F8F4F9F4F089557FD9058440F551FDD +:1019D00059F05F3F71F04795880F97FB991F61F0B1 +:1019E0009F3F79F087950895121613061406551F28 +:1019F000F2CF4695F1DF08C0161617061806991F94 +:101A0000F1CF86957105610508940895E894BB2788 +:101A100066277727CB0197F908958ADF08F48FEFBF +:101A20000895AA1BBB1B51E107C0AA1FBB1FA61725 +:101A3000B70710F0A61BB70B881F991F5A95A9F777 +:101A400080959095BC01CD01089597FB092E07263E +:101A50000AD077FD04D0E5DF06D000201AF4709597 +:101A600061957F4F0895F6F7909581959F4F089562 +:101A7000A1E21A2EAA1BBB1BFD010DC0AA1FBB1F92 +:101A8000EE1FFF1FA217B307E407F50720F0A21B04 +:101A9000B30BE40BF50B661F771F881F991F1A9471 +:101AA00069F760957095809590959B01AC01BD019B +:081AB000CF010895F894FFCF67 +:101AB800796F752073656C656374656420746865F7 +:101AC8002072656C617469766520706F73697469DA +:101AD8006F6E2064656D6F206D6F6475733A0A0DC3 +:101AE80000785F706F733A20002020795F706F7301 +:101AF8003A20000D000083100000010410000001CE +:101B08008208000001000000000000000000000042 +:0A1B18000A0905063020EC00270141 :00000001FF diff --git a/firmware/USBtoSerial.lss b/firmware/USBtoSerial.lss index 3ddef31..a1312b9 100644 --- a/firmware/USBtoSerial.lss +++ b/firmware/USBtoSerial.lss @@ -3,35 +3,35 @@ USBtoSerial.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000062 00800100 000017fa 0000188e 2**0 + 0 .data 0000006a 00800100 00001ab8 00001b4c 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 000017fa 00000000 00000000 00000094 2**1 + 1 .text 00001ab8 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 00000135 00800162 00800162 000018f0 2**0 + 2 .bss 0000013a 0080016a 0080016a 00001bb6 2**0 ALLOC - 3 .stab 0000228c 00000000 00000000 000018f0 2**2 + 3 .stab 0000228c 00000000 00000000 00001bb8 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 0000044f 00000000 00000000 00003b7c 2**0 + 4 .stabstr 0000044f 00000000 00000000 00003e44 2**0 CONTENTS, READONLY, DEBUGGING - 5 .debug_aranges 00000530 00000000 00000000 00003fcb 2**0 + 5 .debug_aranges 00000568 00000000 00000000 00004293 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_pubnames 00000e15 00000000 00000000 000044fb 2**0 + 6 .debug_pubnames 00000e6e 00000000 00000000 000047fb 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00008daf 00000000 00000000 00005310 2**0 + 7 .debug_info 00008f87 00000000 00000000 00005669 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 0000219a 00000000 00000000 0000e0bf 2**0 + 8 .debug_abbrev 000021f5 00000000 00000000 0000e5f0 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 000077dd 00000000 00000000 00010259 2**0 + 9 .debug_line 0000781c 00000000 00000000 000107e5 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000820 00000000 00000000 00017a38 2**2 + 10 .debug_frame 00000890 00000000 00000000 00018004 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00003ce7 00000000 00000000 00018258 2**0 + 11 .debug_str 00003c87 00000000 00000000 00018894 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00004631 00000000 00000000 0001bf3f 2**0 + 12 .debug_loc 00004764 00000000 00000000 0001c51b 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_pubtypes 00001111 00000000 00000000 00020570 2**0 + 13 .debug_pubtypes 00001111 00000000 00000000 00020c7f 2**0 CONTENTS, READONLY, DEBUGGING - 14 .debug_ranges 00000788 00000000 00000000 00021681 2**0 + 14 .debug_ranges 000007c0 00000000 00000000 00021d90 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -71,10 +71,9 @@ Disassembly of section .text: 26: 00 00 nop 28: a2 c0 rjmp .+324 ; 0x16e <__bad_interrupt> 2a: 00 00 nop - 2c: 79 c6 rjmp .+3314 ; 0xd20 <__vector_11> + 2c: 7c c7 rjmp .+3832 ; 0xf26 <__vector_11> 2e: 00 00 nop - 30: 9e c0 rjmp .+316 ; 0x16e <__bad_interrupt> - 32: 00 00 nop + 30: 0c 94 37 08 jmp 0x106e ; 0x106e <__vector_12> 34: 9c c0 rjmp .+312 ; 0x16e <__bad_interrupt> 36: 00 00 nop 38: 9a c0 rjmp .+308 ; 0x16e <__bad_interrupt> @@ -91,11 +90,11 @@ Disassembly of section .text: 4e: 00 00 nop 50: 8e c0 rjmp .+284 ; 0x16e <__bad_interrupt> 52: 00 00 nop - 54: d6 c0 rjmp .+428 ; 0x202 <__vector_21> + 54: 4b c1 rjmp .+662 ; 0x2ec <__vector_21> 56: 00 00 nop 58: 8a c0 rjmp .+276 ; 0x16e <__bad_interrupt> 5a: 00 00 nop - 5c: d8 c2 rjmp .+1456 ; 0x60e <__vector_23> + 5c: 4e c3 rjmp .+1692 ; 0x6fa <__vector_23> 5e: 00 00 nop 60: 86 c0 rjmp .+268 ; 0x16e <__bad_interrupt> 62: 00 00 nop @@ -160,18 +159,18 @@ Disassembly of section .text: 142: 11 e0 ldi r17, 0x01 ; 1 144: a0 e0 ldi r26, 0x00 ; 0 146: b1 e0 ldi r27, 0x01 ; 1 - 148: ea ef ldi r30, 0xFA ; 250 - 14a: f7 e1 ldi r31, 0x17 ; 23 + 148: e8 eb ldi r30, 0xB8 ; 184 + 14a: fa e1 ldi r31, 0x1A ; 26 14c: 02 c0 rjmp .+4 ; 0x152 <__do_copy_data+0x10> 14e: 05 90 lpm r0, Z+ 150: 0d 92 st X+, r0 - 152: a2 36 cpi r26, 0x62 ; 98 + 152: aa 36 cpi r26, 0x6A ; 106 154: b1 07 cpc r27, r17 156: d9 f7 brne .-10 ; 0x14e <__do_copy_data+0xc> 00000158 <__do_clear_bss>: 158: 12 e0 ldi r17, 0x02 ; 2 - 15a: a2 e6 ldi r26, 0x62 ; 98 + 15a: aa e6 ldi r26, 0x6A ; 106 15c: b1 e0 ldi r27, 0x01 ; 1 15e: 01 c0 rjmp .+2 ; 0x162 <.do_clear_bss_start> @@ -179,11 +178,11 @@ Disassembly of section .text: 160: 1d 92 st X+, r1 00000162 <.do_clear_bss_start>: - 162: a7 39 cpi r26, 0x97 ; 151 + 162: a4 3a cpi r26, 0xA4 ; 164 164: b1 07 cpc r27, r17 166: e1 f7 brne .-8 ; 0x160 <.do_clear_bss_loop> - 168: 5d d3 rcall .+1722 ; 0x824
- 16a: 0c 94 fb 0b jmp 0x17f6 ; 0x17f6 <_exit> + 168: 65 d4 rcall .+2250 ; 0xa34
+ 16a: 0c 94 5a 0d jmp 0x1ab4 ; 0x1ab4 <_exit> 0000016e <__bad_interrupt>: 16e: 48 cf rjmp .-368 ; 0x0 <__vectors> @@ -320,5374 +319,5877 @@ Disassembly of section .text: } 1d6: 08 95 ret -000001d8 : +000001d8 : + +uint8_t phase_pattern[4] = { 0b00001010, 0b00001001, 0b00000101, 0b00000110}; + + +void set_x(uint8_t byte) { + PORTX0 &= ~(1<>0)<>1)< + 20c: 42 2b or r20, r18 + 20e: 45 b9 out 0x05, r20 ; 5 + PORTX2 |= ((byte & (1<<2))>>2)< + 22a: 42 2b or r20, r18 + 22c: 45 b9 out 0x05, r20 ; 5 + PORTX3 |= ((byte & (1<<3))>>3)< + 23e: 35 e0 ldi r19, 0x05 ; 5 + 240: 88 0f add r24, r24 + 242: 99 1f adc r25, r25 + 244: 3a 95 dec r19 + 246: e1 f7 brne .-8 ; 0x240 + 248: 28 2b or r18, r24 + 24a: 25 b9 out 0x05, r18 ; 5 +} + 24c: 08 95 ret + +0000024e : + +void set_y(uint8_t byte) { + PORTY0 &= ~(1<>0)<>1)< + 280: 42 2b or r20, r18 + 282: 45 b9 out 0x05, r20 ; 5 + PORTY2 |= ((byte & (1<<2))>>2)<>3)< + 2b2: a6 e0 ldi r26, 0x06 ; 6 + 2b4: 88 0f add r24, r24 + 2b6: 99 1f adc r25, r25 + 2b8: aa 95 dec r26 + 2ba: e1 f7 brne .-8 ; 0x2b4 + 2bc: 28 2b or r18, r24 + 2be: 28 b9 out 0x08, r18 ; 8 +} + 2c0: 08 95 ret + +000002c2 : const uint16_t Size) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2); static inline void RingBuffer_InitBuffer(RingBuffer_t* Buffer, uint8_t* const DataPtr, const uint16_t Size) { GCC_FORCE_POINTER_ACCESS(Buffer); - 1d8: fc 01 movw r30, r24 + 2c2: fc 01 movw r30, r24 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 1da: 2f b7 in r18, 0x3f ; 63 + 2c4: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 1dc: f8 94 cli + 2c6: f8 94 cli uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Buffer->In = DataPtr; - 1de: 71 83 std Z+1, r23 ; 0x01 - 1e0: 60 83 st Z, r22 + 2c8: 71 83 std Z+1, r23 ; 0x01 + 2ca: 60 83 st Z, r22 Buffer->Out = DataPtr; - 1e2: 73 83 std Z+3, r23 ; 0x03 - 1e4: 62 83 std Z+2, r22 ; 0x02 + 2cc: 73 83 std Z+3, r23 ; 0x03 + 2ce: 62 83 std Z+2, r22 ; 0x02 Buffer->Start = &DataPtr[0]; - 1e6: 75 83 std Z+5, r23 ; 0x05 - 1e8: 64 83 std Z+4, r22 ; 0x04 + 2d0: 75 83 std Z+5, r23 ; 0x05 + 2d2: 64 83 std Z+4, r22 ; 0x04 Buffer->End = &DataPtr[Size]; - 1ea: 60 58 subi r22, 0x80 ; 128 - 1ec: 7f 4f sbci r23, 0xFF ; 255 - 1ee: 77 83 std Z+7, r23 ; 0x07 - 1f0: 66 83 std Z+6, r22 ; 0x06 + 2d4: 60 58 subi r22, 0x80 ; 128 + 2d6: 7f 4f sbci r23, 0xFF ; 255 + 2d8: 77 83 std Z+7, r23 ; 0x07 + 2da: 66 83 std Z+6, r22 ; 0x06 Buffer->Size = Size; - 1f2: 80 e8 ldi r24, 0x80 ; 128 - 1f4: 90 e0 ldi r25, 0x00 ; 0 - 1f6: 91 87 std Z+9, r25 ; 0x09 - 1f8: 80 87 std Z+8, r24 ; 0x08 + 2dc: 80 e8 ldi r24, 0x80 ; 128 + 2de: 90 e0 ldi r25, 0x00 ; 0 + 2e0: 91 87 std Z+9, r25 ; 0x09 + 2e2: 80 87 std Z+8, r24 ; 0x08 Buffer->Count = 0; - 1fa: 13 86 std Z+11, r1 ; 0x0b - 1fc: 12 86 std Z+10, r1 ; 0x0a + 2e4: 13 86 std Z+11, r1 ; 0x0b + 2e6: 12 86 std Z+10, r1 ; 0x0a static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 1fe: 2f bf out 0x3f, r18 ; 63 + 2e8: 2f bf out 0x3f, r18 ; 63 SetGlobalInterruptMask(CurrentGlobalInt); } - 200: 08 95 ret + 2ea: 08 95 ret -00000202 <__vector_21>: +000002ec <__vector_21>: u08 adb_werte[MAX_ADB]; u08 t0ovfcount; volatile u08 adb_data_length; ISR( TIMER0_OVF_vect) { - 202: 1f 92 push r1 - 204: 0f 92 push r0 - 206: 0f b6 in r0, 0x3f ; 63 - 208: 0f 92 push r0 - 20a: 11 24 eor r1, r1 - 20c: 8f 93 push r24 + 2ec: 1f 92 push r1 + 2ee: 0f 92 push r0 + 2f0: 0f b6 in r0, 0x3f ; 63 + 2f2: 0f 92 push r0 + 2f4: 11 24 eor r1, r1 + 2f6: 8f 93 push r24 t0ovfcount++; - 20e: 80 91 88 02 lds r24, 0x0288 - 212: 8f 5f subi r24, 0xFF ; 255 - 214: 80 93 88 02 sts 0x0288, r24 + 2f8: 80 91 96 02 lds r24, 0x0296 + 2fc: 8f 5f subi r24, 0xFF ; 255 + 2fe: 80 93 96 02 sts 0x0296, r24 } - 218: 8f 91 pop r24 - 21a: 0f 90 pop r0 - 21c: 0f be out 0x3f, r0 ; 63 - 21e: 0f 90 pop r0 - 220: 1f 90 pop r1 - 222: 18 95 reti + 302: 8f 91 pop r24 + 304: 0f 90 pop r0 + 306: 0f be out 0x3f, r0 ; 63 + 308: 0f 90 pop r0 + 30a: 1f 90 pop r1 + 30c: 18 95 reti -00000224 : +0000030e : uint16_t t0ext(void) { return (t0ovfcount * 256 + (u16) TCNT0); // return current counter value - 224: 86 b5 in r24, 0x26 ; 38 - 226: 30 91 88 02 lds r19, 0x0288 - 22a: 20 e0 ldi r18, 0x00 ; 0 - 22c: 28 0f add r18, r24 - 22e: 31 1d adc r19, r1 + 30e: 86 b5 in r24, 0x26 ; 38 + 310: 30 91 96 02 lds r19, 0x0296 + 314: 20 e0 ldi r18, 0x00 ; 0 + 316: 28 0f add r18, r24 + 318: 31 1d adc r19, r1 // plus number of already passed counter cycles times 256 } - 230: c9 01 movw r24, r18 - 232: 08 95 ret + 31a: c9 01 movw r24, r18 + 31c: 08 95 ret -00000234 : +0000031e : void t0rst(void) { TCNT0 = 0; // set counter to zero - 234: 16 bc out 0x26, r1 ; 38 + 31e: 16 bc out 0x26, r1 ; 38 t0ovfcount = 0; // set overflow counter to zero - 236: 10 92 88 02 sts 0x0288, r1 + 320: 10 92 96 02 sts 0x0296, r1 } - 23a: 08 95 ret + 324: 08 95 ret -0000023c : +00000326 : // Befehl in adb_werte[0]. Empfangene bzw. zu sendende Daten in adb_werte[1 bis 8] u08 adb(void) { - 23c: df 92 push r13 - 23e: ef 92 push r14 - 240: ff 92 push r15 - 242: 0f 93 push r16 - 244: 1f 93 push r17 - 246: cf 93 push r28 - 248: df 93 push r29 + 326: df 92 push r13 + 328: ef 92 push r14 + 32a: ff 92 push r15 + 32c: 0f 93 push r16 + 32e: 1f 93 push r17 + 330: cf 93 push r28 + 332: df 93 push r29 #define ADB_IMPULS_TLT TAKT/ADB_VORTEILER_B*250/1000000 // !!! 375 mach das mit anderem prescaler // #define ADB_IMPULS_TLT TAKT/ADB_VORTEILER_A*31/1000000 // modified //#define ADB_IMPULS_PAUSE TAKT/ADB_VORTEILER_B*200/1000000 //Attention Signal TCCR0B = ADB_VORTEILER_A_BIT; - 24a: 83 e0 ldi r24, 0x03 ; 3 - 24c: 85 bd out 0x25, r24 ; 37 + 334: 83 e0 ldi r24, 0x03 ; 3 + 336: 85 bd out 0x25, r24 ; 37 t0rst(); // TCNT0 = 0; // Zähler auf null setzen - 24e: f2 df rcall .-28 ; 0x234 + 338: f2 df rcall .-28 ; 0x31e ADB_PDIR |= ADB_BIT; // Ausgang 0 - 250: 50 9a sbi 0x0a, 0 ; 10 + 33a: 50 9a sbi 0x0a, 0 ; 10 ADB_POUT &= ~ADB_BIT; - 252: 58 98 cbi 0x0b, 0 ; 11 + 33c: 58 98 cbi 0x0b, 0 ; 11 while (t0ext() < ADB_IMPULS_ATT) - 254: e7 df rcall .-50 ; 0x224 - 256: bc 01 movw r22, r24 - 258: 80 e0 ldi r24, 0x00 ; 0 - 25a: 90 e0 ldi r25, 0x00 ; 0 - 25c: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 260: 20 e0 ldi r18, 0x00 ; 0 - 262: 30 e8 ldi r19, 0x80 ; 128 - 264: 4e e0 ldi r20, 0x0E ; 14 - 266: 53 e4 ldi r21, 0x43 ; 67 - 268: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 26c: 87 fd sbrc r24, 7 - 26e: f2 cf rjmp .-28 ; 0x254 + 33e: e7 df rcall .-50 ; 0x30e + 340: bc 01 movw r22, r24 + 342: 80 e0 ldi r24, 0x00 ; 0 + 344: 90 e0 ldi r25, 0x00 ; 0 + 346: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 34a: 20 e0 ldi r18, 0x00 ; 0 + 34c: 30 e8 ldi r19, 0x80 ; 128 + 34e: 4e e0 ldi r20, 0x0E ; 14 + 350: 53 e4 ldi r21, 0x43 ; 67 + 352: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 356: 87 fd sbrc r24, 7 + 358: f2 cf rjmp .-28 ; 0x33e ; // Warteschleife TCCR0B = ADB_VORTEILER_B_BIT; // ab hier alles im schnellen modus - 270: 82 e0 ldi r24, 0x02 ; 2 - 272: 85 bd out 0x25, r24 ; 37 + 35a: 82 e0 ldi r24, 0x02 ; 2 + 35c: 85 bd out 0x25, r24 ; 37 anzahl_out = 1; // Mindestens Befehl übertragen - 274: dd 24 eor r13, r13 - 276: d3 94 inc r13 + 35e: dd 24 eor r13, r13 + 360: d3 94 inc r13 z_byte = 0; - 278: 10 e0 ldi r17, 0x00 ; 0 + 362: 10 e0 ldi r17, 0x00 ; 0 do { // START BIT (1) t0rst(); // TCNT0 = 0; - 27a: dc df rcall .-72 ; 0x234 + 364: dc df rcall .-72 ; 0x31e ADB_PDIR |= ADB_BIT; // Ausgang 0 - 27c: 50 9a sbi 0x0a, 0 ; 10 + 366: 50 9a sbi 0x0a, 0 ; 10 ADB_POUT &= ~ADB_BIT; - 27e: 58 98 cbi 0x0b, 0 ; 11 + 368: 58 98 cbi 0x0b, 0 ; 11 while (t0ext() < ADB_IMPULS_KURZ) - 280: d1 df rcall .-94 ; 0x224 - 282: bc 01 movw r22, r24 - 284: 80 e0 ldi r24, 0x00 ; 0 - 286: 90 e0 ldi r25, 0x00 ; 0 - 288: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 28c: 20 e0 ldi r18, 0x00 ; 0 - 28e: 30 e0 ldi r19, 0x00 ; 0 - 290: 4c e8 ldi r20, 0x8C ; 140 - 292: 52 e4 ldi r21, 0x42 ; 66 - 294: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 298: 87 fd sbrc r24, 7 - 29a: f2 cf rjmp .-28 ; 0x280 + 36a: d1 df rcall .-94 ; 0x30e + 36c: bc 01 movw r22, r24 + 36e: 80 e0 ldi r24, 0x00 ; 0 + 370: 90 e0 ldi r25, 0x00 ; 0 + 372: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 376: 20 e0 ldi r18, 0x00 ; 0 + 378: 30 e0 ldi r19, 0x00 ; 0 + 37a: 4c e8 ldi r20, 0x8C ; 140 + 37c: 52 e4 ldi r21, 0x42 ; 66 + 37e: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 382: 87 fd sbrc r24, 7 + 384: f2 cf rjmp .-28 ; 0x36a ; ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - 29c: 50 98 cbi 0x0a, 0 ; 10 + 386: 50 98 cbi 0x0a, 0 ; 10 ADB_POUT |= ADB_BIT; - 29e: 58 9a sbi 0x0b, 0 ; 11 + 388: 58 9a sbi 0x0b, 0 ; 11 while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - 2a0: c1 df rcall .-126 ; 0x224 - 2a2: bc 01 movw r22, r24 - 2a4: 80 e0 ldi r24, 0x00 ; 0 - 2a6: 90 e0 ldi r25, 0x00 ; 0 - 2a8: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 2ac: 20 e0 ldi r18, 0x00 ; 0 - 2ae: 30 e0 ldi r19, 0x00 ; 0 - 2b0: 48 e4 ldi r20, 0x48 ; 72 - 2b2: 53 e4 ldi r21, 0x43 ; 67 - 2b4: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 2b8: 87 fd sbrc r24, 7 - 2ba: f2 cf rjmp .-28 ; 0x2a0 - 2bc: 41 c0 rjmp .+130 ; 0x340 + 38a: c1 df rcall .-126 ; 0x30e + 38c: bc 01 movw r22, r24 + 38e: 80 e0 ldi r24, 0x00 ; 0 + 390: 90 e0 ldi r25, 0x00 ; 0 + 392: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 396: 20 e0 ldi r18, 0x00 ; 0 + 398: 30 e0 ldi r19, 0x00 ; 0 + 39a: 48 e4 ldi r20, 0x48 ; 72 + 39c: 53 e4 ldi r21, 0x43 ; 67 + 39e: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 3a2: 87 fd sbrc r24, 7 + 3a4: f2 cf rjmp .-28 ; 0x38a + 3a6: 41 c0 rjmp .+130 ; 0x42a ; for (; z_byte < anzahl_out; z_byte++) { - 2be: c8 e0 ldi r28, 0x08 ; 8 - 2c0: d0 e0 ldi r29, 0x00 ; 0 - 2c2: 00 e8 ldi r16, 0x80 ; 128 + 3a8: c8 e0 ldi r28, 0x08 ; 8 + 3aa: d0 e0 ldi r29, 0x00 ; 0 + 3ac: 00 e8 ldi r16, 0x80 ; 128 for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben t0rst(); // TCNT0 = 0; ADB_PDIR |= ADB_BIT; // Ausgang 0 ADB_POUT &= ~ADB_BIT; if (adb_werte[z_byte] & bitpos) - 2c4: e1 2e mov r14, r17 - 2c6: ff 24 eor r15, r15 - 2c8: 8f e7 ldi r24, 0x7F ; 127 - 2ca: 92 e0 ldi r25, 0x02 ; 2 - 2cc: e8 0e add r14, r24 - 2ce: f9 1e adc r15, r25 + 3ae: e1 2e mov r14, r17 + 3b0: ff 24 eor r15, r15 + 3b2: 8d e8 ldi r24, 0x8D ; 141 + 3b4: 92 e0 ldi r25, 0x02 ; 2 + 3b6: e8 0e add r14, r24 + 3b8: f9 1e adc r15, r25 while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) ; for (; z_byte < anzahl_out; z_byte++) { for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben t0rst(); // TCNT0 = 0; - 2d0: b1 df rcall .-158 ; 0x234 + 3ba: b1 df rcall .-158 ; 0x31e ADB_PDIR |= ADB_BIT; // Ausgang 0 - 2d2: 50 9a sbi 0x0a, 0 ; 10 + 3bc: 50 9a sbi 0x0a, 0 ; 10 ADB_POUT &= ~ADB_BIT; - 2d4: 58 98 cbi 0x0b, 0 ; 11 + 3be: 58 98 cbi 0x0b, 0 ; 11 if (adb_werte[z_byte] & bitpos) - 2d6: f7 01 movw r30, r14 - 2d8: 80 81 ld r24, Z - 2da: 80 23 and r24, r16 - 2dc: 79 f0 breq .+30 ; 0x2fc + 3c0: f7 01 movw r30, r14 + 3c2: 80 81 ld r24, Z + 3c4: 80 23 and r24, r16 + 3c6: 79 f0 breq .+30 ; 0x3e6 while (t0ext() < ADB_IMPULS_KURZ) - 2de: a2 df rcall .-188 ; 0x224 - 2e0: bc 01 movw r22, r24 - 2e2: 80 e0 ldi r24, 0x00 ; 0 - 2e4: 90 e0 ldi r25, 0x00 ; 0 - 2e6: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 2ea: 20 e0 ldi r18, 0x00 ; 0 - 2ec: 30 e0 ldi r19, 0x00 ; 0 - 2ee: 4c e8 ldi r20, 0x8C ; 140 - 2f0: 52 e4 ldi r21, 0x42 ; 66 - 2f2: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 2f6: 87 fd sbrc r24, 7 - 2f8: f2 cf rjmp .-28 ; 0x2de - 2fa: 0e c0 rjmp .+28 ; 0x318 + 3c8: a2 df rcall .-188 ; 0x30e + 3ca: bc 01 movw r22, r24 + 3cc: 80 e0 ldi r24, 0x00 ; 0 + 3ce: 90 e0 ldi r25, 0x00 ; 0 + 3d0: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 3d4: 20 e0 ldi r18, 0x00 ; 0 + 3d6: 30 e0 ldi r19, 0x00 ; 0 + 3d8: 4c e8 ldi r20, 0x8C ; 140 + 3da: 52 e4 ldi r21, 0x42 ; 66 + 3dc: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 3e0: 87 fd sbrc r24, 7 + 3e2: f2 cf rjmp .-28 ; 0x3c8 + 3e4: 0e c0 rjmp .+28 ; 0x402 ; else while (t0ext() < ADB_IMPULS_LANG) - 2fc: 93 df rcall .-218 ; 0x224 - 2fe: bc 01 movw r22, r24 - 300: 80 e0 ldi r24, 0x00 ; 0 - 302: 90 e0 ldi r25, 0x00 ; 0 - 304: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 308: 20 e0 ldi r18, 0x00 ; 0 - 30a: 30 e0 ldi r19, 0x00 ; 0 - 30c: 42 e0 ldi r20, 0x02 ; 2 - 30e: 53 e4 ldi r21, 0x43 ; 67 - 310: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 314: 87 fd sbrc r24, 7 - 316: f2 cf rjmp .-28 ; 0x2fc + 3e6: 93 df rcall .-218 ; 0x30e + 3e8: bc 01 movw r22, r24 + 3ea: 80 e0 ldi r24, 0x00 ; 0 + 3ec: 90 e0 ldi r25, 0x00 ; 0 + 3ee: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 3f2: 20 e0 ldi r18, 0x00 ; 0 + 3f4: 30 e0 ldi r19, 0x00 ; 0 + 3f6: 42 e0 ldi r20, 0x02 ; 2 + 3f8: 53 e4 ldi r21, 0x43 ; 67 + 3fa: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 3fe: 87 fd sbrc r24, 7 + 400: f2 cf rjmp .-28 ; 0x3e6 ; ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - 318: 50 98 cbi 0x0a, 0 ; 10 + 402: 50 98 cbi 0x0a, 0 ; 10 ADB_POUT |= ADB_BIT; - 31a: 58 9a sbi 0x0b, 0 ; 11 + 404: 58 9a sbi 0x0b, 0 ; 11 while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - 31c: 83 df rcall .-250 ; 0x224 - 31e: bc 01 movw r22, r24 - 320: 80 e0 ldi r24, 0x00 ; 0 - 322: 90 e0 ldi r25, 0x00 ; 0 - 324: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 328: 20 e0 ldi r18, 0x00 ; 0 - 32a: 30 e0 ldi r19, 0x00 ; 0 - 32c: 48 e4 ldi r20, 0x48 ; 72 - 32e: 53 e4 ldi r21, 0x43 ; 67 - 330: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 334: 87 fd sbrc r24, 7 - 336: f2 cf rjmp .-28 ; 0x31c + 406: 83 df rcall .-250 ; 0x30e + 408: bc 01 movw r22, r24 + 40a: 80 e0 ldi r24, 0x00 ; 0 + 40c: 90 e0 ldi r25, 0x00 ; 0 + 40e: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 412: 20 e0 ldi r18, 0x00 ; 0 + 414: 30 e0 ldi r19, 0x00 ; 0 + 416: 48 e4 ldi r20, 0x48 ; 72 + 418: 53 e4 ldi r21, 0x43 ; 67 + 41a: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 41e: 87 fd sbrc r24, 7 + 420: f2 cf rjmp .-28 ; 0x406 ADB_POUT |= ADB_BIT; while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) ; for (; z_byte < anzahl_out; z_byte++) { for (bitpos = 128; bitpos; bitpos >>= 1) { //Daten ausgeben - 338: 06 95 lsr r16 - 33a: 21 97 sbiw r28, 0x01 ; 1 - 33c: 49 f6 brne .-110 ; 0x2d0 + 422: 06 95 lsr r16 + 424: 21 97 sbiw r28, 0x01 ; 1 + 426: 49 f6 brne .-110 ; 0x3ba ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup ADB_POUT |= ADB_BIT; while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) ; for (; z_byte < anzahl_out; z_byte++) { - 33e: 1f 5f subi r17, 0xFF ; 255 - 340: 1d 15 cp r17, r13 - 342: 08 f4 brcc .+2 ; 0x346 - 344: bc cf rjmp .-136 ; 0x2be + 428: 1f 5f subi r17, 0xFF ; 255 + 42a: 1d 15 cp r17, r13 + 42c: 08 f4 brcc .+2 ; 0x430 + 42e: bc cf rjmp .-136 ; 0x3a8 while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) ; } } // STOP BIT (0) t0rst(); // TCNT0 = 0; - 346: 76 df rcall .-276 ; 0x234 + 430: 76 df rcall .-276 ; 0x31e ADB_PDIR |= ADB_BIT; // Ausgang 0 - 348: 50 9a sbi 0x0a, 0 ; 10 + 432: 50 9a sbi 0x0a, 0 ; 10 ADB_POUT &= ~ADB_BIT; - 34a: 58 98 cbi 0x0b, 0 ; 11 + 434: 58 98 cbi 0x0b, 0 ; 11 while (t0ext() < ADB_IMPULS_LANG) - 34c: 6b df rcall .-298 ; 0x224 - 34e: bc 01 movw r22, r24 - 350: 80 e0 ldi r24, 0x00 ; 0 - 352: 90 e0 ldi r25, 0x00 ; 0 - 354: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 358: 20 e0 ldi r18, 0x00 ; 0 - 35a: 30 e0 ldi r19, 0x00 ; 0 - 35c: 42 e0 ldi r20, 0x02 ; 2 - 35e: 53 e4 ldi r21, 0x43 ; 67 - 360: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 364: 87 fd sbrc r24, 7 - 366: f2 cf rjmp .-28 ; 0x34c + 436: 6b df rcall .-298 ; 0x30e + 438: bc 01 movw r22, r24 + 43a: 80 e0 ldi r24, 0x00 ; 0 + 43c: 90 e0 ldi r25, 0x00 ; 0 + 43e: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 442: 20 e0 ldi r18, 0x00 ; 0 + 444: 30 e0 ldi r19, 0x00 ; 0 + 446: 42 e0 ldi r20, 0x02 ; 2 + 448: 53 e4 ldi r21, 0x43 ; 67 + 44a: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 44e: 87 fd sbrc r24, 7 + 450: f2 cf rjmp .-28 ; 0x436 ; ADB_PDIR &= ~ADB_BIT; // Eingang über Pullup - 368: 50 98 cbi 0x0a, 0 ; 10 + 452: 50 98 cbi 0x0a, 0 ; 10 ADB_POUT |= ADB_BIT; - 36a: 58 9a sbi 0x0b, 0 ; 11 + 454: 58 9a sbi 0x0b, 0 ; 11 while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) - 36c: 5b df rcall .-330 ; 0x224 - 36e: bc 01 movw r22, r24 - 370: 80 e0 ldi r24, 0x00 ; 0 - 372: 90 e0 ldi r25, 0x00 ; 0 - 374: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 378: 20 e0 ldi r18, 0x00 ; 0 - 37a: 30 e0 ldi r19, 0x00 ; 0 - 37c: 48 e4 ldi r20, 0x48 ; 72 - 37e: 53 e4 ldi r21, 0x43 ; 67 - 380: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 384: 87 fd sbrc r24, 7 - 386: f2 cf rjmp .-28 ; 0x36c + 456: 5b df rcall .-330 ; 0x30e + 458: bc 01 movw r22, r24 + 45a: 80 e0 ldi r24, 0x00 ; 0 + 45c: 90 e0 ldi r25, 0x00 ; 0 + 45e: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 462: 20 e0 ldi r18, 0x00 ; 0 + 464: 30 e0 ldi r19, 0x00 ; 0 + 466: 48 e4 ldi r20, 0x48 ; 72 + 468: 53 e4 ldi r21, 0x43 ; 67 + 46a: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 46e: 87 fd sbrc r24, 7 + 470: f2 cf rjmp .-28 ; 0x456 ; // Entscheidung, ob noch weitere Daten übertragen werden if (adb_werte[0] == COM_LISTEN3) - 388: 80 91 7f 02 lds r24, 0x027F - 38c: 8b 33 cpi r24, 0x3B ; 59 - 38e: 29 f0 breq .+10 ; 0x39a + 472: 80 91 8d 02 lds r24, 0x028D + 476: 8b 33 cpi r24, 0x3B ; 59 + 478: 29 f0 breq .+10 ; 0x484 anzahl_out = 2 + 1; else if (adb_werte[0] == COM_LISTEN1) - 390: 89 33 cpi r24, 0x39 ; 57 - 392: 41 f4 brne .+16 ; 0x3a4 + 47a: 89 33 cpi r24, 0x39 ; 57 + 47c: 41 f4 brne .+16 ; 0x48e anzahl_out = 8 + 1; - 394: 29 e0 ldi r18, 0x09 ; 9 - 396: d2 2e mov r13, r18 - 398: 02 c0 rjmp .+4 ; 0x39e + 47e: 09 e0 ldi r16, 0x09 ; 9 + 480: d0 2e mov r13, r16 + 482: 02 c0 rjmp .+4 ; 0x488 while (t0ext() < ADB_IMPULS_KURZ + ADB_IMPULS_LANG) ; // Entscheidung, ob noch weitere Daten übertragen werden if (adb_werte[0] == COM_LISTEN3) anzahl_out = 2 + 1; - 39a: 93 e0 ldi r25, 0x03 ; 3 - 39c: d9 2e mov r13, r25 + 484: b3 e0 ldi r27, 0x03 ; 3 + 486: db 2e mov r13, r27 else if (adb_werte[0] == COM_LISTEN1) anzahl_out = 8 + 1; else z_byte = 8; } while (z_byte < 2); - 39e: 11 30 cpi r17, 0x01 ; 1 - 3a0: 09 f4 brne .+2 ; 0x3a4 - 3a2: 6b cf rjmp .-298 ; 0x27a + 488: 11 30 cpi r17, 0x01 ; 1 + 48a: 09 f4 brne .+2 ; 0x48e + 48c: 6b cf rjmp .-298 ; 0x364 // Warten auf Rückgabewerte sonst Abbruch // TCCR0 = ADB_VORTEILER_A_BIT; // micha modifikation t0rst(); // TCNT0 = 0; - 3a4: 47 df rcall .-370 ; 0x234 + 48e: 47 df rcall .-370 ; 0x31e do { if (t0ext() > ADB_IMPULS_TLT) { - 3a6: 3e df rcall .-388 ; 0x224 - 3a8: bc 01 movw r22, r24 - 3aa: 80 e0 ldi r24, 0x00 ; 0 - 3ac: 90 e0 ldi r25, 0x00 ; 0 - 3ae: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 3b2: 20 e0 ldi r18, 0x00 ; 0 - 3b4: 30 e0 ldi r19, 0x00 ; 0 - 3b6: 4a ef ldi r20, 0xFA ; 250 - 3b8: 53 e4 ldi r21, 0x43 ; 67 - 3ba: 0e 94 d5 0b call 0x17aa ; 0x17aa <__gesf2> - 3be: 18 16 cp r1, r24 - 3c0: 0c f4 brge .+2 ; 0x3c4 - 3c2: 42 c0 rjmp .+132 ; 0x448 + 490: 3e df rcall .-388 ; 0x30e + 492: bc 01 movw r22, r24 + 494: 80 e0 ldi r24, 0x00 ; 0 + 496: 90 e0 ldi r25, 0x00 ; 0 + 498: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 49c: 20 e0 ldi r18, 0x00 ; 0 + 49e: 30 e0 ldi r19, 0x00 ; 0 + 4a0: 4a ef ldi r20, 0xFA ; 250 + 4a2: 53 e4 ldi r21, 0x43 ; 67 + 4a4: 0e 94 0d 0d call 0x1a1a ; 0x1a1a <__gesf2> + 4a8: 18 16 cp r1, r24 + 4aa: 0c f4 brge .+2 ; 0x4ae + 4ac: 42 c0 rjmp .+132 ; 0x532 <__stack+0x33> return (0); } } while (ADB_PIN & ADB_BIT); - 3c4: 48 99 sbic 0x09, 0 ; 9 - 3c6: ef cf rjmp .-34 ; 0x3a6 + 4ae: 48 99 sbic 0x09, 0 ; 9 + 4b0: ef cf rjmp .-34 ; 0x490 while (!(ADB_PIN & ADB_BIT)) - 3c8: 48 9b sbis 0x09, 0 ; 9 - 3ca: fe cf rjmp .-4 ; 0x3c8 - 3cc: c0 e8 ldi r28, 0x80 ; 128 - 3ce: d2 e0 ldi r29, 0x02 ; 2 - 3d0: 11 e0 ldi r17, 0x01 ; 1 - 3d2: 01 c0 rjmp .+2 ; 0x3d6 + 4b2: 48 9b sbis 0x09, 0 ; 9 + 4b4: fe cf rjmp .-4 ; 0x4b2 + 4b6: ce e8 ldi r28, 0x8E ; 142 + 4b8: d2 e0 ldi r29, 0x02 ; 2 + 4ba: 11 e0 ldi r17, 0x01 ; 1 + 4bc: 01 c0 rjmp .+2 ; 0x4c0 while (!(ADB_PIN & ADB_BIT)) ; if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) adb_werte[z_byte] += bitpos; } z_byte++; - 3d4: 18 2f mov r17, r24 + 4be: 18 2f mov r17, r24 while (!(ADB_PIN & ADB_BIT)) ; // Start Bit z_byte = 1; while (z_byte < MAX_ADB) { adb_werte[z_byte] = 0; - 3d6: 18 82 st Y, r1 - 3d8: 88 e0 ldi r24, 0x08 ; 8 - 3da: e8 2e mov r14, r24 - 3dc: f1 2c mov r15, r1 + 4c0: 18 82 st Y, r1 + 4c2: a8 e0 ldi r26, 0x08 ; 8 + 4c4: ea 2e mov r14, r26 + 4c6: f1 2c mov r15, r1 for (bitpos = 128; bitpos; bitpos >>= 1) { //Bits einlesen - 3de: 00 e8 ldi r16, 0x80 ; 128 + 4c8: 00 e8 ldi r16, 0x80 ; 128 //TCCR0 = ADB_VORTEILER_B_BIT; //micha modifikation t0rst(); // TCNT0 = 0; - 3e0: 29 df rcall .-430 ; 0x234 + 4ca: 29 df rcall .-430 ; 0x31e // Abbruch wenn keine weiteren Bytes übertragen werden. do { if (t0ext() > ADB_IMPULS_KURZ + ADB_IMPULS_LANG) { - 3e2: 20 df rcall .-448 ; 0x224 - 3e4: bc 01 movw r22, r24 - 3e6: 80 e0 ldi r24, 0x00 ; 0 - 3e8: 90 e0 ldi r25, 0x00 ; 0 - 3ea: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 3ee: 20 e0 ldi r18, 0x00 ; 0 - 3f0: 30 e0 ldi r19, 0x00 ; 0 - 3f2: 48 e4 ldi r20, 0x48 ; 72 - 3f4: 53 e4 ldi r21, 0x43 ; 67 - 3f6: 0e 94 d5 0b call 0x17aa ; 0x17aa <__gesf2> - 3fa: 18 16 cp r1, r24 - 3fc: 14 f4 brge .+4 ; 0x402 + 4cc: 20 df rcall .-448 ; 0x30e + 4ce: bc 01 movw r22, r24 + 4d0: 80 e0 ldi r24, 0x00 ; 0 + 4d2: 90 e0 ldi r25, 0x00 ; 0 + 4d4: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 4d8: 20 e0 ldi r18, 0x00 ; 0 + 4da: 30 e0 ldi r19, 0x00 ; 0 + 4dc: 48 e4 ldi r20, 0x48 ; 72 + 4de: 53 e4 ldi r21, 0x43 ; 67 + 4e0: 0e 94 0d 0d call 0x1a1a ; 0x1a1a <__gesf2> + 4e4: 18 16 cp r1, r24 + 4e6: 14 f4 brge .+4 ; 0x4ec return (z_byte - 1); - 3fe: 11 50 subi r17, 0x01 ; 1 - 400: 24 c0 rjmp .+72 ; 0x44a + 4e8: 11 50 subi r17, 0x01 ; 1 + 4ea: 24 c0 rjmp .+72 ; 0x534 <__stack+0x35> } } while (ADB_PIN & ADB_BIT); - 402: 48 99 sbic 0x09, 0 ; 9 - 404: ee cf rjmp .-36 ; 0x3e2 + 4ec: 48 99 sbic 0x09, 0 ; 9 + 4ee: ee cf rjmp .-36 ; 0x4cc t0rst(); // TCNT0 = 0; - 406: 16 df rcall .-468 ; 0x234 + 4f0: 16 df rcall .-468 ; 0x31e while (!(ADB_PIN & ADB_BIT)) - 408: 48 9b sbis 0x09, 0 ; 9 - 40a: fe cf rjmp .-4 ; 0x408 + 4f2: 48 9b sbis 0x09, 0 ; 9 + 4f4: fe cf rjmp .-4 ; 0x4f2 ; if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) - 40c: 0b df rcall .-490 ; 0x224 - 40e: bc 01 movw r22, r24 - 410: 80 e0 ldi r24, 0x00 ; 0 - 412: 90 e0 ldi r25, 0x00 ; 0 - 414: 0e 94 23 0b call 0x1646 ; 0x1646 <__floatunsisf> - 418: 20 e0 ldi r18, 0x00 ; 0 - 41a: 30 e0 ldi r19, 0x00 ; 0 - 41c: 48 ec ldi r20, 0xC8 ; 200 - 41e: 52 e4 ldi r21, 0x42 ; 66 - 420: 0e 94 8b 0a call 0x1516 ; 0x1516 <__cmpsf2> - 424: 87 ff sbrs r24, 7 - 426: 03 c0 rjmp .+6 ; 0x42e + 4f6: 0b df rcall .-490 ; 0x30e + 4f8: bc 01 movw r22, r24 + 4fa: 80 e0 ldi r24, 0x00 ; 0 + 4fc: 90 e0 ldi r25, 0x00 ; 0 + 4fe: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 502: 20 e0 ldi r18, 0x00 ; 0 + 504: 30 e0 ldi r19, 0x00 ; 0 + 506: 48 ec ldi r20, 0xC8 ; 200 + 508: 52 e4 ldi r21, 0x42 ; 66 + 50a: 0e 94 c3 0b call 0x1786 ; 0x1786 <__cmpsf2> + 50e: 87 ff sbrs r24, 7 + 510: 03 c0 rjmp .+6 ; 0x518 <__stack+0x19> adb_werte[z_byte] += bitpos; - 428: 88 81 ld r24, Y - 42a: 80 0f add r24, r16 - 42c: 88 83 st Y, r24 + 512: 88 81 ld r24, Y + 514: 80 0f add r24, r16 + 516: 88 83 st Y, r24 ; // Start Bit z_byte = 1; while (z_byte < MAX_ADB) { adb_werte[z_byte] = 0; for (bitpos = 128; bitpos; bitpos >>= 1) { //Bits einlesen - 42e: 06 95 lsr r16 - 430: 08 94 sec - 432: e1 08 sbc r14, r1 - 434: f1 08 sbc r15, r1 - 436: e1 14 cp r14, r1 - 438: f1 04 cpc r15, r1 - 43a: 91 f6 brne .-92 ; 0x3e0 + 518: 06 95 lsr r16 + 51a: 08 94 sec + 51c: e1 08 sbc r14, r1 + 51e: f1 08 sbc r15, r1 + 520: e1 14 cp r14, r1 + 522: f1 04 cpc r15, r1 + 524: 91 f6 brne .-92 ; 0x4ca while (!(ADB_PIN & ADB_BIT)) ; if (t0ext() < (ADB_IMPULS_KURZ + ADB_IMPULS_LANG) / 2) adb_werte[z_byte] += bitpos; } z_byte++; - 43c: 81 2f mov r24, r17 - 43e: 8f 5f subi r24, 0xFF ; 255 - 440: 21 96 adiw r28, 0x01 ; 1 + 526: 81 2f mov r24, r17 + 528: 8f 5f subi r24, 0xFF ; 255 + 52a: 21 96 adiw r28, 0x01 ; 1 } while (ADB_PIN & ADB_BIT); while (!(ADB_PIN & ADB_BIT)) ; // Start Bit z_byte = 1; while (z_byte < MAX_ADB) { - 442: 89 30 cpi r24, 0x09 ; 9 - 444: 39 f6 brne .-114 ; 0x3d4 - 446: 01 c0 rjmp .+2 ; 0x44a + 52c: 89 30 cpi r24, 0x09 ; 9 + 52e: 39 f6 brne .-114 ; 0x4be + 530: 01 c0 rjmp .+2 ; 0x534 <__stack+0x35> // TCCR0 = ADB_VORTEILER_A_BIT; // micha modifikation t0rst(); // TCNT0 = 0; do { if (t0ext() > ADB_IMPULS_TLT) { return (0); - 448: 10 e0 ldi r17, 0x00 ; 0 + 532: 10 e0 ldi r17, 0x00 ; 0 adb_werte[z_byte] += bitpos; } z_byte++; } return (z_byte - 1); } - 44a: 81 2f mov r24, r17 - 44c: df 91 pop r29 - 44e: cf 91 pop r28 - 450: 1f 91 pop r17 - 452: 0f 91 pop r16 - 454: ff 90 pop r15 - 456: ef 90 pop r14 - 458: df 90 pop r13 - 45a: 08 95 ret - -0000045c : + 534: 81 2f mov r24, r17 + 536: df 91 pop r29 + 538: cf 91 pop r28 + 53a: 1f 91 pop r17 + 53c: 0f 91 pop r16 + 53e: ff 90 pop r15 + 540: ef 90 pop r14 + 542: df 90 pop r13 + 544: 08 95 ret + +00000546 : void touchpad_init(void) { // Eingänge ADB_PDIR &= ~ADB_BIT; - 45c: 50 98 cbi 0x0a, 0 ; 10 + 546: 50 98 cbi 0x0a, 0 ; 10 // Pull Up einschalten ADB_POUT |= ADB_BIT; - 45e: 58 9a sbi 0x0b, 0 ; 11 + 548: 58 9a sbi 0x0b, 0 ; 11 //enable timer0 interrupt TIMSK0 |= (1 << TOIE0); - 460: ee e6 ldi r30, 0x6E ; 110 - 462: f0 e0 ldi r31, 0x00 ; 0 - 464: 80 81 ld r24, Z - 466: 81 60 ori r24, 0x01 ; 1 - 468: 80 83 st Z, r24 + 54a: ee e6 ldi r30, 0x6E ; 110 + 54c: f0 e0 ldi r31, 0x00 ; 0 + 54e: 80 81 ld r24, Z + 550: 81 60 ori r24, 0x01 ; 1 + 552: 80 83 st Z, r24 } - 46a: 08 95 ret + 554: 08 95 ret -0000046c : +00000556 : uint8_t touchpad_read(void) { adb_werte[0] = COM_TALK0; - 46c: 8c e3 ldi r24, 0x3C ; 60 - 46e: 80 93 7f 02 sts 0x027F, r24 + 556: 8c e3 ldi r24, 0x3C ; 60 + 558: 80 93 8d 02 sts 0x028D, r24 adb_data_length = adb(); - 472: e4 de rcall .-568 ; 0x23c - 474: 80 93 89 02 sts 0x0289, r24 + 55c: e4 de rcall .-568 ; 0x326 + 55e: 80 93 97 02 sts 0x0297, r24 return adb_data_length; - 478: 80 91 89 02 lds r24, 0x0289 + 562: 80 91 97 02 lds r24, 0x0297 } - 47c: 08 95 ret + 566: 08 95 ret -0000047e : +00000568 : void touchpad_set_abs_mode(void) { // Auf Absolutmodus umschalten adb_werte[0] = COM_LISTEN3; - 47e: 8b e3 ldi r24, 0x3B ; 59 - 480: 80 93 7f 02 sts 0x027F, r24 + 568: 8b e3 ldi r24, 0x3B ; 59 + 56a: 80 93 8d 02 sts 0x028D, r24 adb_werte[1] = BITS(0110,0011); - 484: 83 e6 ldi r24, 0x63 ; 99 - 486: 80 93 80 02 sts 0x0280, r24 + 56e: 83 e6 ldi r24, 0x63 ; 99 + 570: 80 93 8e 02 sts 0x028E, r24 adb_werte[2] = 4; //CDM Modus - 48a: 84 e0 ldi r24, 0x04 ; 4 - 48c: 80 93 81 02 sts 0x0281, r24 + 574: 84 e0 ldi r24, 0x04 ; 4 + 576: 80 93 8f 02 sts 0x028F, r24 adb(); - 490: d5 de rcall .-598 ; 0x23c + 57a: d5 de rcall .-598 ; 0x326 adb_werte[0] = COM_TALK1; - 492: 8d e3 ldi r24, 0x3D ; 61 - 494: 80 93 7f 02 sts 0x027F, r24 + 57c: 8d e3 ldi r24, 0x3D ; 61 + 57e: 80 93 8d 02 sts 0x028D, r24 adb(); // Werte holen - 498: d1 de rcall .-606 ; 0x23c + 582: d1 de rcall .-606 ; 0x326 adb_werte[0] = COM_LISTEN1; - 49a: 89 e3 ldi r24, 0x39 ; 57 - 49c: 80 93 7f 02 sts 0x027F, r24 + 584: 89 e3 ldi r24, 0x39 ; 57 + 586: 80 93 8d 02 sts 0x028D, r24 adb_werte[7] = 0x00; //Absolutmodus - 4a0: 10 92 86 02 sts 0x0286, r1 + 58a: 10 92 94 02 sts 0x0294, r1 adb(); - 4a4: cb de rcall .-618 ; 0x23c + 58e: cb de rcall .-618 ; 0x326 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 4a6: 8f ef ldi r24, 0xFF ; 255 - 4a8: 91 ee ldi r25, 0xE1 ; 225 - 4aa: a4 e0 ldi r26, 0x04 ; 4 - 4ac: 81 50 subi r24, 0x01 ; 1 - 4ae: 90 40 sbci r25, 0x00 ; 0 - 4b0: a0 40 sbci r26, 0x00 ; 0 - 4b2: e1 f7 brne .-8 ; 0x4ac - 4b4: 00 c0 rjmp .+0 ; 0x4b6 - 4b6: 00 00 nop + 590: 8f ef ldi r24, 0xFF ; 255 + 592: 91 ee ldi r25, 0xE1 ; 225 + 594: a4 e0 ldi r26, 0x04 ; 4 + 596: 81 50 subi r24, 0x01 ; 1 + 598: 90 40 sbci r25, 0x00 ; 0 + 59a: a0 40 sbci r26, 0x00 ; 0 + 59c: e1 f7 brne .-8 ; 0x596 + 59e: 00 c0 rjmp .+0 ; 0x5a0 + 5a0: 00 00 nop _delay_ms(100); } - 4b8: 08 95 ret + 5a2: 08 95 ret -000004ba : +000005a4 : void touchpad_set_rel_mode_100dpi(void) { // Auf Relativmodus umschalten adb_werte[0] = COM_LISTEN3; - 4ba: 8b e3 ldi r24, 0x3B ; 59 - 4bc: 80 93 7f 02 sts 0x027F, r24 + 5a4: 8b e3 ldi r24, 0x3B ; 59 + 5a6: 80 93 8d 02 sts 0x028D, r24 adb_werte[1] = BITS(0110,0011); - 4c0: 83 e6 ldi r24, 0x63 ; 99 - 4c2: 80 93 80 02 sts 0x0280, r24 + 5aa: 83 e6 ldi r24, 0x63 ; 99 + 5ac: 80 93 8e 02 sts 0x028E, r24 adb_werte[2] = 1; //default modus: 100 dpi mouse - 4c6: 81 e0 ldi r24, 0x01 ; 1 - 4c8: 80 93 81 02 sts 0x0281, r24 + 5b0: 81 e0 ldi r24, 0x01 ; 1 + 5b2: 80 93 8f 02 sts 0x028F, r24 adb(); - 4cc: b7 de rcall .-658 ; 0x23c - 4ce: 8f ef ldi r24, 0xFF ; 255 - 4d0: 91 ee ldi r25, 0xE1 ; 225 - 4d2: a4 e0 ldi r26, 0x04 ; 4 - 4d4: 81 50 subi r24, 0x01 ; 1 - 4d6: 90 40 sbci r25, 0x00 ; 0 - 4d8: a0 40 sbci r26, 0x00 ; 0 - 4da: e1 f7 brne .-8 ; 0x4d4 - 4dc: 00 c0 rjmp .+0 ; 0x4de - 4de: 00 00 nop + 5b6: b7 de rcall .-658 ; 0x326 + 5b8: 8f ef ldi r24, 0xFF ; 255 + 5ba: 91 ee ldi r25, 0xE1 ; 225 + 5bc: a4 e0 ldi r26, 0x04 ; 4 + 5be: 81 50 subi r24, 0x01 ; 1 + 5c0: 90 40 sbci r25, 0x00 ; 0 + 5c2: a0 40 sbci r26, 0x00 ; 0 + 5c4: e1 f7 brne .-8 ; 0x5be + 5c6: 00 c0 rjmp .+0 ; 0x5c8 + 5c8: 00 00 nop _delay_ms(100); } - 4e0: 08 95 ret + 5ca: 08 95 ret -000004e2 : +000005cc : return ((adb_werte[4] & 0b01110000) << 6) | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); } int8_t delta_y(void) { if(adb_data_length ==0) { - 4e2: 80 91 89 02 lds r24, 0x0289 - 4e6: 88 23 and r24, r24 - 4e8: 51 f0 breq .+20 ; 0x4fe + 5cc: 80 91 97 02 lds r24, 0x0297 + 5d0: 88 23 and r24, r24 + 5d2: 51 f0 breq .+20 ; 0x5e8 return 0; } if (adb_werte[1] & 0b01000000) { - 4ea: 80 91 80 02 lds r24, 0x0280 - 4ee: 86 ff sbrs r24, 6 - 4f0: 04 c0 rjmp .+8 ; 0x4fa + 5d4: 80 91 8e 02 lds r24, 0x028E + 5d8: 86 ff sbrs r24, 6 + 5da: 04 c0 rjmp .+8 ; 0x5e4 return -((128 - adb_werte[1]) & 0b00111111); - 4f2: 81 95 neg r24 - 4f4: 8f 73 andi r24, 0x3F ; 63 - 4f6: 81 95 neg r24 - 4f8: 08 95 ret + 5dc: 81 95 neg r24 + 5de: 8f 73 andi r24, 0x3F ; 63 + 5e0: 81 95 neg r24 + 5e2: 08 95 ret } else { return adb_werte[1] & 0b00111111; - 4fa: 8f 73 andi r24, 0x3F ; 63 - 4fc: 08 95 ret + 5e4: 8f 73 andi r24, 0x3F ; 63 + 5e6: 08 95 ret | ((adb_werte[3] & 0b01110000) << 3) | (adb_werte[1] & 0b01111111); } int8_t delta_y(void) { if(adb_data_length ==0) { return 0; - 4fe: 80 e0 ldi r24, 0x00 ; 0 + 5e8: 80 e0 ldi r24, 0x00 ; 0 if (adb_werte[1] & 0b01000000) { return -((128 - adb_werte[1]) & 0b00111111); } else { return adb_werte[1] & 0b00111111; } } - 500: 08 95 ret + 5ea: 08 95 ret -00000502 : +000005ec : int8_t delta_x(void) { if(adb_data_length ==0) { - 502: 80 91 89 02 lds r24, 0x0289 - 506: 88 23 and r24, r24 - 508: 51 f0 breq .+20 ; 0x51e + 5ec: 80 91 97 02 lds r24, 0x0297 + 5f0: 88 23 and r24, r24 + 5f2: 51 f0 breq .+20 ; 0x608 return 0; } if (adb_werte[2] & 0b01000000) { - 50a: 80 91 81 02 lds r24, 0x0281 - 50e: 86 ff sbrs r24, 6 - 510: 04 c0 rjmp .+8 ; 0x51a + 5f4: 80 91 8f 02 lds r24, 0x028F + 5f8: 86 ff sbrs r24, 6 + 5fa: 04 c0 rjmp .+8 ; 0x604 return -((128 - adb_werte[2]) & 0b00111111); - 512: 81 95 neg r24 - 514: 8f 73 andi r24, 0x3F ; 63 - 516: 81 95 neg r24 - 518: 08 95 ret + 5fc: 81 95 neg r24 + 5fe: 8f 73 andi r24, 0x3F ; 63 + 600: 81 95 neg r24 + 602: 08 95 ret } else { return adb_werte[2] & 0b00111111; - 51a: 8f 73 andi r24, 0x3F ; 63 - 51c: 08 95 ret + 604: 8f 73 andi r24, 0x3F ; 63 + 606: 08 95 ret } } int8_t delta_x(void) { if(adb_data_length ==0) { return 0; - 51e: 80 e0 ldi r24, 0x00 ; 0 + 608: 80 e0 ldi r24, 0x00 ; 0 if (adb_werte[2] & 0b01000000) { return -((128 - adb_werte[2]) & 0b00111111); } else { return adb_werte[2] & 0b00111111; } } - 520: 08 95 ret + 60a: 08 95 ret -00000522 : +0000060c : void Usb2SerialTask(void) { - 522: 1f 93 push r17 + 60c: 1f 93 push r17 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 524: 8f b7 in r24, 0x3f ; 63 + 60e: 8f b7 in r24, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 526: f8 94 cli + 610: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 528: 20 91 6c 01 lds r18, 0x016C - 52c: 30 91 6d 01 lds r19, 0x016D + 612: 20 91 74 01 lds r18, 0x0174 + 616: 30 91 75 01 lds r19, 0x0175 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 530: 8f bf out 0x3f, r24 ; 63 + 61a: 8f bf out 0x3f, r24 ; 63 /* Only try to read in bytes from the CDC interface if the transmit buffer is not full */ if (!(RingBuffer_IsFull(&USBtoUSART_Buffer))) - 532: 80 91 6a 01 lds r24, 0x016A - 536: 90 91 6b 01 lds r25, 0x016B - 53a: 28 17 cp r18, r24 - 53c: 39 07 cpc r19, r25 - 53e: 49 f0 breq .+18 ; 0x552 + 61c: 80 91 72 01 lds r24, 0x0172 + 620: 90 91 73 01 lds r25, 0x0173 + 624: 28 17 cp r18, r24 + 626: 39 07 cpc r19, r25 + 628: 51 f0 breq .+20 ; 0x63e { int16_t ReceivedByte = CDC_Device_ReceiveByte(&VirtualSerial_CDC_Interface); - 540: 85 e4 ldi r24, 0x45 ; 69 - 542: 91 e0 ldi r25, 0x01 ; 1 - 544: 54 d7 rcall .+3752 ; 0x13ee - 546: bc 01 movw r22, r24 + 62a: 85 e4 ldi r24, 0x45 ; 69 + 62c: 91 e0 ldi r25, 0x01 ; 1 + 62e: 0e 94 30 0b call 0x1660 ; 0x1660 + 632: bc 01 movw r22, r24 /* Read bytes from the USB OUT endpoint into the USART transmit buffer */ if (!(ReceivedByte < 0)) - 548: 97 fd sbrc r25, 7 - 54a: 03 c0 rjmp .+6 ; 0x552 + 634: 97 fd sbrc r25, 7 + 636: 03 c0 rjmp .+6 ; 0x63e RingBuffer_Insert(&USBtoUSART_Buffer, ReceivedByte); - 54c: 82 e6 ldi r24, 0x62 ; 98 - 54e: 91 e0 ldi r25, 0x01 ; 1 - 550: 0f de rcall .-994 ; 0x170 + 638: 8a e6 ldi r24, 0x6A ; 106 + 63a: 91 e0 ldi r25, 0x01 ; 1 + 63c: 99 dd rcall .-1230 ; 0x170 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 552: 2f b7 in r18, 0x3f ; 63 + 63e: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 554: f8 94 cli - 556: 80 91 f8 01 lds r24, 0x01F8 - 55a: 90 91 f9 01 lds r25, 0x01F9 + 640: f8 94 cli + 642: 80 91 00 02 lds r24, 0x0200 + 646: 90 91 01 02 lds r25, 0x0201 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 55e: 2f bf out 0x3f, r18 ; 63 + 64a: 2f bf out 0x3f, r18 ; 63 } /* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */ uint16_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer); if (BufferCount) - 560: 00 97 sbiw r24, 0x00 ; 0 - 562: 01 f1 breq .+64 ; 0x5a4 + 64c: 00 97 sbiw r24, 0x00 ; 0 + 64e: 01 f1 breq .+64 ; 0x690 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 564: 20 91 46 01 lds r18, 0x0146 - 568: 2f 70 andi r18, 0x0F ; 15 - 56a: 20 93 e9 00 sts 0x00E9, r18 + 650: 20 91 46 01 lds r18, 0x0146 + 654: 2f 70 andi r18, 0x0F ; 15 + 656: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 56e: 20 91 e8 00 lds r18, 0x00E8 + 65a: 20 91 e8 00 lds r18, 0x00E8 { Endpoint_SelectEndpoint(VirtualSerial_CDC_Interface.Config.DataINEndpoint.Address); /* Check if a packet is already enqueued to the host - if so, we shouldn't try to send more data * until it completes as there is a chance nothing is listening and a lengthy timeout could occur */ if (Endpoint_IsINReady()) - 572: 20 ff sbrs r18, 0 - 574: 17 c0 rjmp .+46 ; 0x5a4 + 65e: 20 ff sbrs r18, 0 + 660: 17 c0 rjmp .+46 ; 0x690 { /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); - 576: 80 31 cpi r24, 0x10 ; 16 - 578: 91 05 cpc r25, r1 - 57a: 10 f0 brcs .+4 ; 0x580 - 57c: 8f e0 ldi r24, 0x0F ; 15 - 57e: 90 e0 ldi r25, 0x00 ; 0 - 580: 18 2f mov r17, r24 + 662: 80 31 cpi r24, 0x10 ; 16 + 664: 91 05 cpc r25, r1 + 666: 10 f0 brcs .+4 ; 0x66c + 668: 8f e0 ldi r24, 0x0F ; 15 + 66a: 90 e0 ldi r25, 0x00 ; 0 + 66c: 18 2f mov r17, r24 /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 582: 0e c0 rjmp .+28 ; 0x5a0 + 66e: 0e c0 rjmp .+28 ; 0x68c * \return Next data element stored in the buffer. */ static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(1); static inline uint8_t RingBuffer_Peek(RingBuffer_t* const Buffer) { return *Buffer->Out; - 584: e0 91 f0 01 lds r30, 0x01F0 - 588: f0 91 f1 01 lds r31, 0x01F1 + 670: e0 91 f8 01 lds r30, 0x01F8 + 674: f0 91 f9 01 lds r31, 0x01F9 { /* Try to send the next byte of data to the host, abort if there is an error without dequeuing */ if (CDC_Device_SendByte(&VirtualSerial_CDC_Interface, - 58c: 85 e4 ldi r24, 0x45 ; 69 - 58e: 91 e0 ldi r25, 0x01 ; 1 - 590: 60 81 ld r22, Z - 592: b9 d6 rcall .+3442 ; 0x1306 - 594: 11 50 subi r17, 0x01 ; 1 - 596: 88 23 and r24, r24 - 598: 29 f4 brne .+10 ; 0x5a4 + 678: 85 e4 ldi r24, 0x45 ; 69 + 67a: 91 e0 ldi r25, 0x01 ; 1 + 67c: 60 81 ld r22, Z + 67e: 7f d7 rcall .+3838 ; 0x157e + 680: 11 50 subi r17, 0x01 ; 1 + 682: 88 23 and r24, r24 + 684: 29 f4 brne .+10 ; 0x690 { break; } /* Dequeue the already sent byte from the buffer now we have confirmed that no transmission error occurred */ RingBuffer_Remove(&USARTtoUSB_Buffer); - 59a: 8e ee ldi r24, 0xEE ; 238 - 59c: 91 e0 ldi r25, 0x01 ; 1 - 59e: 03 de rcall .-1018 ; 0x1a6 + 686: 86 ef ldi r24, 0xF6 ; 246 + 688: 91 e0 ldi r25, 0x01 ; 1 + 68a: 8d dd rcall .-1254 ; 0x1a6 /* Never send more than one bank size less one byte to the host at a time, so that we don't block * while a Zero Length Packet (ZLP) to terminate the transfer is sent if the host isn't listening */ uint8_t BytesToSend = MIN(BufferCount, (CDC_TXRX_EPSIZE - 1)); /* Read bytes from the USART receive buffer into the USB IN endpoint */ while (BytesToSend--) - 5a0: 11 23 and r17, r17 - 5a2: 81 f7 brne .-32 ; 0x584 + 68c: 11 23 and r17, r17 + 68e: 81 f7 brne .-32 ; 0x670 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 5a4: 2f b7 in r18, 0x3f ; 63 + 690: 2f b7 in r18, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 5a6: f8 94 cli + 692: f8 94 cli uint16_t Count; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Count = Buffer->Count; - 5a8: 80 91 6c 01 lds r24, 0x016C - 5ac: 90 91 6d 01 lds r25, 0x016D + 694: 80 91 74 01 lds r24, 0x0174 + 698: 90 91 75 01 lds r25, 0x0175 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 5b0: 2f bf out 0x3f, r18 ; 63 + 69c: 2f bf out 0x3f, r18 ; 63 } } } /* Load the next byte from the USART transmit buffer into the USART */ if (!(RingBuffer_IsEmpty(&USBtoUSART_Buffer))) { - 5b2: 00 97 sbiw r24, 0x00 ; 0 - 5b4: 49 f0 breq .+18 ; 0x5c8 + 69e: 00 97 sbiw r24, 0x00 ; 0 + 6a0: 49 f0 breq .+18 ; 0x6b4 Serial_SendByte(RingBuffer_Remove(&USBtoUSART_Buffer)); - 5b6: 82 e6 ldi r24, 0x62 ; 98 - 5b8: 91 e0 ldi r25, 0x01 ; 1 - 5ba: f5 dd rcall .-1046 ; 0x1a6 + 6a2: 8a e6 ldi r24, 0x6A ; 106 + 6a4: 91 e0 ldi r25, 0x01 ; 1 + 6a6: 7f dd rcall .-1282 ; 0x1a6 * \param[in] DataByte Byte to transmit through the USART. */ static inline void Serial_SendByte(const char DataByte) ATTR_ALWAYS_INLINE; static inline void Serial_SendByte(const char DataByte) { while (!(UCSR1A & (1 << UDRE1))); - 5bc: 90 91 c8 00 lds r25, 0x00C8 - 5c0: 95 ff sbrs r25, 5 - 5c2: fc cf rjmp .-8 ; 0x5bc + 6a8: 90 91 c8 00 lds r25, 0x00C8 + 6ac: 95 ff sbrs r25, 5 + 6ae: fc cf rjmp .-8 ; 0x6a8 UDR1 = DataByte; - 5c4: 80 93 ce 00 sts 0x00CE, r24 + 6b0: 80 93 ce 00 sts 0x00CE, r24 // dummy = RingBuffer_Remove(&USBtoUSART_Buffer); // sendPayload(&dummy,1,0); } CDC_Device_USBTask(&VirtualSerial_CDC_Interface); - 5c8: 85 e4 ldi r24, 0x45 ; 69 - 5ca: 91 e0 ldi r25, 0x01 ; 1 - 5cc: f8 d6 rcall .+3568 ; 0x13be + 6b4: 85 e4 ldi r24, 0x45 ; 69 + 6b6: 91 e0 ldi r25, 0x01 ; 1 + 6b8: bc d7 rcall .+3960 ; 0x1632 USB_USBTask(); - 5ce: ae d5 rcall .+2908 ; 0x112c + 6ba: 76 d6 rcall .+3308 ; 0x13a8 } - 5d0: 1f 91 pop r17 - 5d2: 08 95 ret + 6bc: 1f 91 pop r17 + 6be: 08 95 ret -000005d4 : +000006c0 : /** Configures the board hardware and chip peripherals for the demo's functionality. */ void SetupHardware(void) { /* Disable watchdog if enabled by bootloader/fuses */ MCUSR &= ~(1 << WDRF); - 5d4: 84 b7 in r24, 0x34 ; 52 - 5d6: 87 7f andi r24, 0xF7 ; 247 - 5d8: 84 bf out 0x34, r24 ; 52 + 6c0: 84 b7 in r24, 0x34 ; 52 + 6c2: 87 7f andi r24, 0xF7 ; 247 + 6c4: 84 bf out 0x34, r24 ; 52 wdt_disable(); - 5da: 88 e1 ldi r24, 0x18 ; 24 - 5dc: 0f b6 in r0, 0x3f ; 63 - 5de: f8 94 cli - 5e0: 80 93 60 00 sts 0x0060, r24 - 5e4: 10 92 60 00 sts 0x0060, r1 - 5e8: 0f be out 0x3f, r0 ; 63 + 6c6: 88 e1 ldi r24, 0x18 ; 24 + 6c8: 0f b6 in r0, 0x3f ; 63 + 6ca: f8 94 cli + 6cc: 80 93 60 00 sts 0x0060, r24 + 6d0: 10 92 60 00 sts 0x0060, r1 + 6d4: 0f be out 0x3f, r0 ; 63 The type of x is clock_div_t. */ void clock_prescale_set(clock_div_t __x) { uint8_t __tmp = _BV(CLKPCE); __asm__ __volatile__ ( - 5ea: 90 e0 ldi r25, 0x00 ; 0 - 5ec: 80 e8 ldi r24, 0x80 ; 128 - 5ee: 0f b6 in r0, 0x3f ; 63 - 5f0: f8 94 cli - 5f2: 80 93 61 00 sts 0x0061, r24 - 5f6: 90 93 61 00 sts 0x0061, r25 - 5fa: 0f be out 0x3f, r0 ; 63 + 6d6: 90 e0 ldi r25, 0x00 ; 0 + 6d8: 80 e8 ldi r24, 0x80 ; 128 + 6da: 0f b6 in r0, 0x3f ; 63 + 6dc: f8 94 cli + 6de: 80 93 61 00 sts 0x0061, r24 + 6e2: 90 93 61 00 sts 0x0061, r25 + 6e6: 0f be out 0x3f, r0 ; 63 clock_prescale_set(clock_div_1); /* Hardware Initialization */ // LEDs_Init(); USB_Init(); } - 5fc: 82 c3 rjmp .+1796 ; 0xd02 + 6e8: 0f c4 rjmp .+2078 ; 0xf08 -000005fe : +000006ea : /** Event handler for the library USB Connection event. */ void EVENT_USB_Device_Connect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } - 5fe: 08 95 ret + 6ea: 08 95 ret -00000600 : +000006ec : /** Event handler for the library USB Disconnection event. */ void EVENT_USB_Device_Disconnect(void) { // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } - 600: 08 95 ret + 6ec: 08 95 ret -00000602 : +000006ee : /** Event handler for the library USB Configuration Changed event. */ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; ConfigSuccess &= CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface); - 602: 85 e4 ldi r24, 0x45 ; 69 - 604: 91 e0 ldi r25, 0x01 ; 1 + 6ee: 85 e4 ldi r24, 0x45 ; 69 + 6f0: 91 e0 ldi r25, 0x01 ; 1 // LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } - 606: 5b c6 rjmp .+3254 ; 0x12be + 6f2: 21 c7 rjmp .+3650 ; 0x1536 -00000608 : +000006f4 : /** Event handler for the library USB Control Request reception event. */ void EVENT_USB_Device_ControlRequest(void) { CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface); - 608: 85 e4 ldi r24, 0x45 ; 69 - 60a: 91 e0 ldi r25, 0x01 ; 1 + 6f4: 85 e4 ldi r24, 0x45 ; 69 + 6f6: 91 e0 ldi r25, 0x01 ; 1 } - 60c: ab c5 rjmp .+2902 ; 0x1164 + 6f8: 72 c6 rjmp .+3300 ; 0x13de -0000060e <__vector_23>: +000006fa <__vector_23>: /** ISR to manage the reception of data from the serial port, placing received bytes into a circular buffer * for later transmission to the host. */ ISR(USART1_RX_vect, ISR_BLOCK) { - 60e: 1f 92 push r1 - 610: 0f 92 push r0 - 612: 0f b6 in r0, 0x3f ; 63 - 614: 0f 92 push r0 - 616: 11 24 eor r1, r1 - 618: 2f 93 push r18 - 61a: 3f 93 push r19 - 61c: 4f 93 push r20 - 61e: 5f 93 push r21 - 620: 6f 93 push r22 - 622: 7f 93 push r23 - 624: 8f 93 push r24 - 626: 9f 93 push r25 - 628: af 93 push r26 - 62a: bf 93 push r27 - 62c: ef 93 push r30 - 62e: ff 93 push r31 + 6fa: 1f 92 push r1 + 6fc: 0f 92 push r0 + 6fe: 0f b6 in r0, 0x3f ; 63 + 700: 0f 92 push r0 + 702: 11 24 eor r1, r1 + 704: 2f 93 push r18 + 706: 3f 93 push r19 + 708: 4f 93 push r20 + 70a: 5f 93 push r21 + 70c: 6f 93 push r22 + 70e: 7f 93 push r23 + 710: 8f 93 push r24 + 712: 9f 93 push r25 + 714: af 93 push r26 + 716: bf 93 push r27 + 718: ef 93 push r30 + 71a: ff 93 push r31 uint8_t ReceivedByte = UDR1; - 630: 60 91 ce 00 lds r22, 0x00CE + 71c: 60 91 ce 00 lds r22, 0x00CE if (USB_DeviceState == DEVICE_STATE_Configured) - 634: 8e b3 in r24, 0x1e ; 30 - 636: 84 30 cpi r24, 0x04 ; 4 - 638: 19 f4 brne .+6 ; 0x640 <__vector_23+0x32> + 720: 8e b3 in r24, 0x1e ; 30 + 722: 84 30 cpi r24, 0x04 ; 4 + 724: 19 f4 brne .+6 ; 0x72c <__vector_23+0x32> RingBuffer_Insert(&USARTtoUSB_Buffer, ReceivedByte); - 63a: 8e ee ldi r24, 0xEE ; 238 - 63c: 91 e0 ldi r25, 0x01 ; 1 - 63e: 98 dd rcall .-1232 ; 0x170 + 726: 86 ef ldi r24, 0xF6 ; 246 + 728: 91 e0 ldi r25, 0x01 ; 1 + 72a: 22 dd rcall .-1468 ; 0x170 } - 640: ff 91 pop r31 - 642: ef 91 pop r30 - 644: bf 91 pop r27 - 646: af 91 pop r26 - 648: 9f 91 pop r25 - 64a: 8f 91 pop r24 - 64c: 7f 91 pop r23 - 64e: 6f 91 pop r22 - 650: 5f 91 pop r21 - 652: 4f 91 pop r20 - 654: 3f 91 pop r19 - 656: 2f 91 pop r18 - 658: 0f 90 pop r0 - 65a: 0f be out 0x3f, r0 ; 63 - 65c: 0f 90 pop r0 - 65e: 1f 90 pop r1 - 660: 18 95 reti - -00000662 : + 72c: ff 91 pop r31 + 72e: ef 91 pop r30 + 730: bf 91 pop r27 + 732: af 91 pop r26 + 734: 9f 91 pop r25 + 736: 8f 91 pop r24 + 738: 7f 91 pop r23 + 73a: 6f 91 pop r22 + 73c: 5f 91 pop r21 + 73e: 4f 91 pop r20 + 740: 3f 91 pop r19 + 742: 2f 91 pop r18 + 744: 0f 90 pop r0 + 746: 0f be out 0x3f, r0 ; 63 + 748: 0f 90 pop r0 + 74a: 1f 90 pop r1 + 74c: 18 95 reti + +0000074e : /** Event handler for the CDC Class driver Line Encoding Changed event. * * \param[in] CDCInterfaceInfo Pointer to the CDC class interface configuration structure being referenced */ void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 662: 8f 92 push r8 - 664: 9f 92 push r9 - 666: af 92 push r10 - 668: bf 92 push r11 - 66a: cf 92 push r12 - 66c: df 92 push r13 - 66e: ef 92 push r14 - 670: ff 92 push r15 - 672: 1f 93 push r17 - 674: fc 01 movw r30, r24 + 74e: 8f 92 push r8 + 750: 9f 92 push r9 + 752: af 92 push r10 + 754: bf 92 push r11 + 756: cf 92 push r12 + 758: df 92 push r13 + 75a: ef 92 push r14 + 75c: ff 92 push r15 + 75e: 1f 93 push r17 + 760: fc 01 movw r30, r24 uint8_t ConfigMask = 0; switch (CDCInterfaceInfo->State.LineEncoding.ParityType) - 676: a1 8d ldd r26, Z+25 ; 0x19 - 678: a1 50 subi r26, 0x01 ; 1 - 67a: a2 30 cpi r26, 0x02 ; 2 - 67c: 28 f4 brcc .+10 ; 0x688 - 67e: b0 e0 ldi r27, 0x00 ; 0 - 680: a0 5a subi r26, 0xA0 ; 160 - 682: be 4f sbci r27, 0xFE ; 254 - 684: 1c 91 ld r17, X - 686: 01 c0 rjmp .+2 ; 0x68a - 688: 10 e0 ldi r17, 0x00 ; 0 + 762: a1 8d ldd r26, Z+25 ; 0x19 + 764: a1 50 subi r26, 0x01 ; 1 + 766: a2 30 cpi r26, 0x02 ; 2 + 768: 28 f4 brcc .+10 ; 0x774 + 76a: b0 e0 ldi r27, 0x00 ; 0 + 76c: ac 59 subi r26, 0x9C ; 156 + 76e: be 4f sbci r27, 0xFE ; 254 + 770: 1c 91 ld r17, X + 772: 01 c0 rjmp .+2 ; 0x776 + 774: 10 e0 ldi r17, 0x00 ; 0 case CDC_PARITY_Even: ConfigMask = (1 << UPM11); break; } if (CDCInterfaceInfo->State.LineEncoding.CharFormat == CDC_LINEENCODING_TwoStopBits) - 68a: 80 8d ldd r24, Z+24 ; 0x18 - 68c: 82 30 cpi r24, 0x02 ; 2 - 68e: 09 f4 brne .+2 ; 0x692 + 776: 80 8d ldd r24, Z+24 ; 0x18 + 778: 82 30 cpi r24, 0x02 ; 2 + 77a: 09 f4 brne .+2 ; 0x77e ConfigMask |= (1 << USBS1); - 690: 18 60 ori r17, 0x08 ; 8 + 77c: 18 60 ori r17, 0x08 ; 8 switch (CDCInterfaceInfo->State.LineEncoding.DataBits) - 692: 82 8d ldd r24, Z+26 ; 0x1a - 694: 87 30 cpi r24, 0x07 ; 7 - 696: 31 f0 breq .+12 ; 0x6a4 - 698: 88 30 cpi r24, 0x08 ; 8 - 69a: 31 f0 breq .+12 ; 0x6a8 - 69c: 86 30 cpi r24, 0x06 ; 6 - 69e: 29 f4 brne .+10 ; 0x6aa + 77e: 82 8d ldd r24, Z+26 ; 0x1a + 780: 87 30 cpi r24, 0x07 ; 7 + 782: 31 f0 breq .+12 ; 0x790 + 784: 88 30 cpi r24, 0x08 ; 8 + 786: 31 f0 breq .+12 ; 0x794 + 788: 86 30 cpi r24, 0x06 ; 6 + 78a: 29 f4 brne .+10 ; 0x796 { case 6: ConfigMask |= (1 << UCSZ10); - 6a0: 12 60 ori r17, 0x02 ; 2 + 78c: 12 60 ori r17, 0x02 ; 2 break; - 6a2: 03 c0 rjmp .+6 ; 0x6aa + 78e: 03 c0 rjmp .+6 ; 0x796 case 7: ConfigMask |= (1 << UCSZ11); - 6a4: 14 60 ori r17, 0x04 ; 4 + 790: 14 60 ori r17, 0x04 ; 4 break; - 6a6: 01 c0 rjmp .+2 ; 0x6aa + 792: 01 c0 rjmp .+2 ; 0x796 case 8: ConfigMask |= ((1 << UCSZ11) | (1 << UCSZ10)); - 6a8: 16 60 ori r17, 0x06 ; 6 + 794: 16 60 ori r17, 0x06 ; 6 break; } /* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */ UCSR1B = 0; - 6aa: 10 92 c9 00 sts 0x00C9, r1 + 796: 10 92 c9 00 sts 0x00C9, r1 UCSR1A = 0; - 6ae: 10 92 c8 00 sts 0x00C8, r1 + 79a: 10 92 c8 00 sts 0x00C8, r1 UCSR1C = 0; - 6b2: 10 92 ca 00 sts 0x00CA, r1 + 79e: 10 92 ca 00 sts 0x00CA, r1 /* Set the new baud rate before configuring the USART */ UBRR1 = SERIAL_2X_UBBRVAL(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 6b6: c4 88 ldd r12, Z+20 ; 0x14 - 6b8: d5 88 ldd r13, Z+21 ; 0x15 - 6ba: e6 88 ldd r14, Z+22 ; 0x16 - 6bc: f7 88 ldd r15, Z+23 ; 0x17 - 6be: c7 01 movw r24, r14 - 6c0: b6 01 movw r22, r12 - 6c2: 96 95 lsr r25 - 6c4: 87 95 ror r24 - 6c6: 77 95 ror r23 - 6c8: 67 95 ror r22 - 6ca: bd d7 rcall .+3962 ; 0x1646 <__floatunsisf> - 6cc: 20 e0 ldi r18, 0x00 ; 0 - 6ce: 34 e2 ldi r19, 0x24 ; 36 - 6d0: 44 ef ldi r20, 0xF4 ; 244 - 6d2: 59 e4 ldi r21, 0x49 ; 73 - 6d4: bc d6 rcall .+3448 ; 0x144e <__addsf3> - 6d6: 4b 01 movw r8, r22 - 6d8: 5c 01 movw r10, r24 - 6da: c7 01 movw r24, r14 - 6dc: b6 01 movw r22, r12 - 6de: b3 d7 rcall .+3942 ; 0x1646 <__floatunsisf> - 6e0: 9b 01 movw r18, r22 - 6e2: ac 01 movw r20, r24 - 6e4: c5 01 movw r24, r10 - 6e6: b4 01 movw r22, r8 - 6e8: 1a d7 rcall .+3636 ; 0x151e <__divsf3> - 6ea: 20 e0 ldi r18, 0x00 ; 0 - 6ec: 30 e0 ldi r19, 0x00 ; 0 - 6ee: 40 e8 ldi r20, 0x80 ; 128 - 6f0: 5f e3 ldi r21, 0x3F ; 63 - 6f2: ac d6 rcall .+3416 ; 0x144c <__subsf3> - 6f4: 7c d7 rcall .+3832 ; 0x15ee <__fixunssfsi> - 6f6: 70 93 cd 00 sts 0x00CD, r23 - 6fa: 60 93 cc 00 sts 0x00CC, r22 + 7a2: c4 88 ldd r12, Z+20 ; 0x14 + 7a4: d5 88 ldd r13, Z+21 ; 0x15 + 7a6: e6 88 ldd r14, Z+22 ; 0x16 + 7a8: f7 88 ldd r15, Z+23 ; 0x17 + 7aa: c7 01 movw r24, r14 + 7ac: b6 01 movw r22, r12 + 7ae: 96 95 lsr r25 + 7b0: 87 95 ror r24 + 7b2: 77 95 ror r23 + 7b4: 67 95 ror r22 + 7b6: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 7ba: 20 e0 ldi r18, 0x00 ; 0 + 7bc: 34 e2 ldi r19, 0x24 ; 36 + 7be: 44 ef ldi r20, 0xF4 ; 244 + 7c0: 59 e4 ldi r21, 0x49 ; 73 + 7c2: 7d d7 rcall .+3834 ; 0x16be <__addsf3> + 7c4: 4b 01 movw r8, r22 + 7c6: 5c 01 movw r10, r24 + 7c8: c7 01 movw r24, r14 + 7ca: b6 01 movw r22, r12 + 7cc: 0e 94 5b 0c call 0x18b6 ; 0x18b6 <__floatunsisf> + 7d0: 9b 01 movw r18, r22 + 7d2: ac 01 movw r20, r24 + 7d4: c5 01 movw r24, r10 + 7d6: b4 01 movw r22, r8 + 7d8: da d7 rcall .+4020 ; 0x178e <__divsf3> + 7da: 20 e0 ldi r18, 0x00 ; 0 + 7dc: 30 e0 ldi r19, 0x00 ; 0 + 7de: 40 e8 ldi r20, 0x80 ; 128 + 7e0: 5f e3 ldi r21, 0x3F ; 63 + 7e2: 6c d7 rcall .+3800 ; 0x16bc <__subsf3> + 7e4: 0e 94 2f 0c call 0x185e ; 0x185e <__fixunssfsi> + 7e8: 70 93 cd 00 sts 0x00CD, r23 + 7ec: 60 93 cc 00 sts 0x00CC, r22 /* Reconfigure the USART in double speed mode for a wider baud rate range at the expense of accuracy */ UCSR1C = ConfigMask; - 6fe: 10 93 ca 00 sts 0x00CA, r17 + 7f0: 10 93 ca 00 sts 0x00CA, r17 UCSR1A = (1 << U2X1); - 702: 82 e0 ldi r24, 0x02 ; 2 - 704: 80 93 c8 00 sts 0x00C8, r24 + 7f4: 82 e0 ldi r24, 0x02 ; 2 + 7f6: 80 93 c8 00 sts 0x00C8, r24 UCSR1B = ((1 << RXCIE1) | (1 << TXEN1) | (1 << RXEN1)); - 708: 88 e9 ldi r24, 0x98 ; 152 - 70a: 80 93 c9 00 sts 0x00C9, r24 + 7fa: 88 e9 ldi r24, 0x98 ; 152 + 7fc: 80 93 c9 00 sts 0x00C9, r24 } - 70e: 1f 91 pop r17 - 710: ff 90 pop r15 - 712: ef 90 pop r14 - 714: df 90 pop r13 - 716: cf 90 pop r12 - 718: bf 90 pop r11 - 71a: af 90 pop r10 - 71c: 9f 90 pop r9 - 71e: 8f 90 pop r8 - 720: 08 95 ret + 800: 1f 91 pop r17 + 802: ff 90 pop r15 + 804: ef 90 pop r14 + 806: df 90 pop r13 + 808: cf 90 pop r12 + 80a: bf 90 pop r11 + 80c: af 90 pop r10 + 80e: 9f 90 pop r9 + 810: 8f 90 pop r8 + 812: 08 95 ret -00000722 : +00000814 : void uart_putc(unsigned char data) { - 722: 68 2f mov r22, r24 + 814: 68 2f mov r22, r24 if (USB_DeviceState == DEVICE_STATE_Configured){ - 724: 8e b3 in r24, 0x1e ; 30 - 726: 84 30 cpi r24, 0x04 ; 4 - 728: 19 f4 brne .+6 ; 0x730 + 816: 8e b3 in r24, 0x1e ; 30 + 818: 84 30 cpi r24, 0x04 ; 4 + 81a: 19 f4 brne .+6 ; 0x822 RingBuffer_Insert(&USARTtoUSB_Buffer, data); - 72a: 8e ee ldi r24, 0xEE ; 238 - 72c: 91 e0 ldi r25, 0x01 ; 1 - 72e: 20 cd rjmp .-1472 ; 0x170 - 730: 08 95 ret + 81c: 86 ef ldi r24, 0xF6 ; 246 + 81e: 91 e0 ldi r25, 0x01 ; 1 + 820: a7 cc rjmp .-1714 ; 0x170 + 822: 08 95 ret -00000732 : +00000824 : } } void uart_puts(const char *s ) { - 732: ef 92 push r14 - 734: ff 92 push r15 - 736: cf 93 push r28 - 738: df 93 push r29 - 73a: e8 2e mov r14, r24 - 73c: e7 01 movw r28, r14 - 73e: 7e 01 movw r14, r28 - 740: f9 2e mov r15, r25 - 742: e7 01 movw r28, r14 + 824: ef 92 push r14 + 826: ff 92 push r15 + 828: cf 93 push r28 + 82a: df 93 push r29 + 82c: e8 2e mov r14, r24 + 82e: e7 01 movw r28, r14 + 830: 7e 01 movw r14, r28 + 832: f9 2e mov r15, r25 + 834: e7 01 movw r28, r14 while (*s) - 744: 01 c0 rjmp .+2 ; 0x748 + 836: 01 c0 rjmp .+2 ; 0x83a uart_putc(*s++); - 746: ed df rcall .-38 ; 0x722 + 838: ed df rcall .-38 ; 0x814 } void uart_puts(const char *s ) { while (*s) - 748: 89 91 ld r24, Y+ - 74a: 88 23 and r24, r24 - 74c: e1 f7 brne .-8 ; 0x746 + 83a: 89 91 ld r24, Y+ + 83c: 88 23 and r24, r24 + 83e: e1 f7 brne .-8 ; 0x838 uart_putc(*s++); }/* uart_puts */ - 74e: df 91 pop r29 - 750: cf 91 pop r28 - 752: ff 90 pop r15 - 754: ef 90 pop r14 - 756: 08 95 ret + 840: df 91 pop r29 + 842: cf 91 pop r28 + 844: ff 90 pop r15 + 846: ef 90 pop r14 + 848: 08 95 ret -00000758 : +0000084a : // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 758: 2f 92 push r2 - 75a: 3f 92 push r3 - 75c: 4f 92 push r4 - 75e: 5f 92 push r5 - 760: 6f 92 push r6 - 762: 7f 92 push r7 - 764: 8f 92 push r8 - 766: 9f 92 push r9 - 768: af 92 push r10 - 76a: bf 92 push r11 - 76c: cf 92 push r12 - 76e: df 92 push r13 - 770: ef 92 push r14 - 772: ff 92 push r15 - 774: 0f 93 push r16 - 776: 1f 93 push r17 - 778: cf 93 push r28 - 77a: df 93 push r29 - 77c: 7b 01 movw r14, r22 - 77e: 8c 01 movw r16, r24 + 84a: 2f 92 push r2 + 84c: 3f 92 push r3 + 84e: 4f 92 push r4 + 850: 5f 92 push r5 + 852: 6f 92 push r6 + 854: 7f 92 push r7 + 856: 8f 92 push r8 + 858: 9f 92 push r9 + 85a: af 92 push r10 + 85c: bf 92 push r11 + 85e: cf 92 push r12 + 860: df 92 push r13 + 862: ef 92 push r14 + 864: ff 92 push r15 + 866: 0f 93 push r16 + 868: 1f 93 push r17 + 86a: cf 93 push r28 + 86c: df 93 push r29 + 86e: 7b 01 movw r14, r22 + 870: 8c 01 movw r16, r24 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator - 780: 82 2f mov r24, r18 - 782: 90 e0 ldi r25, 0x00 ; 0 - 784: fa 01 movw r30, r20 - 786: e8 0f add r30, r24 - 788: f9 1f adc r31, r25 - 78a: 10 82 st Z, r1 + 872: 82 2f mov r24, r18 + 874: 90 e0 ldi r25, 0x00 ; 0 + 876: fa 01 movw r30, r20 + 878: e8 0f add r30, r24 + 87a: f9 1f adc r31, r25 + 87c: 10 82 st Z, r1 for (i = (no_digits - 1); i >= 0; i--) { - 78c: d2 2e mov r13, r18 - 78e: da 94 dec r13 + 87e: d2 2e mov r13, r18 + 880: da 94 dec r13 }/* uart_puts */ // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 790: 4d 2c mov r4, r13 - 792: 55 24 eor r5, r5 - 794: 47 fc sbrc r4, 7 - 796: 50 94 com r5 - 798: ea 01 movw r28, r20 - 79a: c4 0d add r28, r4 - 79c: d5 1d adc r29, r5 + 882: 4d 2c mov r4, r13 + 884: 55 24 eor r5, r5 + 886: 47 fc sbrc r4, 7 + 888: 50 94 com r5 + 88a: ea 01 movw r28, r20 + 88c: c4 0d add r28, r4 + 88e: d5 1d adc r29, r5 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 79e: aa 24 eor r10, r10 - 7a0: bb 24 eor r11, r11 + 890: aa 24 eor r10, r10 + 892: bb 24 eor r11, r11 if (zahl == 0 && i < (no_digits - 1)) { string[i] = ' '; } else { string[i] = (zahl % 10) + '0'; - 7a2: ba e0 ldi r27, 0x0A ; 10 - 7a4: 6b 2e mov r6, r27 - 7a6: 71 2c mov r7, r1 - 7a8: 81 2c mov r8, r1 - 7aa: 91 2c mov r9, r1 + 894: aa e0 ldi r26, 0x0A ; 10 + 896: 6a 2e mov r6, r26 + 898: 71 2c mov r7, r1 + 89a: 81 2c mov r8, r1 + 89c: 91 2c mov r9, r1 void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - 7ac: 1c 01 movw r2, r24 - 7ae: 08 94 sec - 7b0: 21 08 sbc r2, r1 - 7b2: 31 08 sbc r3, r1 + 89e: 1c 01 movw r2, r24 + 8a0: 08 94 sec + 8a2: 21 08 sbc r2, r1 + 8a4: 31 08 sbc r3, r1 string[i] = ' '; - 7b4: a0 e2 ldi r26, 0x20 ; 32 - 7b6: ca 2e mov r12, r26 + 8a6: f0 e2 ldi r31, 0x20 ; 32 + 8a8: cf 2e mov r12, r31 // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 7b8: 20 c0 rjmp .+64 ; 0x7fa + 8aa: 22 c0 rjmp .+68 ; 0x8f0 if (zahl == 0 && i < (no_digits - 1)) { - 7ba: e1 14 cp r14, r1 - 7bc: f1 04 cpc r15, r1 - 7be: 01 05 cpc r16, r1 - 7c0: 11 05 cpc r17, r1 - 7c2: 41 f4 brne .+16 ; 0x7d4 + 8ac: e1 14 cp r14, r1 + 8ae: f1 04 cpc r15, r1 + 8b0: 01 05 cpc r16, r1 + 8b2: 11 05 cpc r17, r1 + 8b4: 41 f4 brne .+16 ; 0x8c6 }/* uart_puts */ // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { - 7c4: c5 01 movw r24, r10 - 7c6: 84 0d add r24, r4 - 7c8: 95 1d adc r25, r5 + 8b6: c5 01 movw r24, r10 + 8b8: 84 0d add r24, r4 + 8ba: 95 1d adc r25, r5 int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { if (zahl == 0 && i < (no_digits - 1)) { - 7ca: 82 15 cp r24, r2 - 7cc: 93 05 cpc r25, r3 - 7ce: 14 f4 brge .+4 ; 0x7d4 + 8bc: 82 15 cp r24, r2 + 8be: 93 05 cpc r25, r3 + 8c0: 14 f4 brge .+4 ; 0x8c6 string[i] = ' '; - 7d0: c8 82 st Y, r12 - 7d2: 07 c0 rjmp .+14 ; 0x7e2 + 8c2: c8 82 st Y, r12 + 8c4: 08 c0 rjmp .+16 ; 0x8d6 } else { string[i] = (zahl % 10) + '0'; - 7d4: c8 01 movw r24, r16 - 7d6: b7 01 movw r22, r14 - 7d8: a4 01 movw r20, r8 - 7da: 93 01 movw r18, r6 - 7dc: ea d7 rcall .+4052 ; 0x17b2 <__udivmodsi4> - 7de: 60 5d subi r22, 0xD0 ; 208 - 7e0: 68 83 st Y, r22 + 8c6: c8 01 movw r24, r16 + 8c8: b7 01 movw r22, r14 + 8ca: a4 01 movw r20, r8 + 8cc: 93 01 movw r18, r6 + 8ce: 0e 94 38 0d call 0x1a70 ; 0x1a70 <__udivmodsi4> + 8d2: 60 5d subi r22, 0xD0 ; 208 + 8d4: 68 83 st Y, r22 } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; - 7e2: c8 01 movw r24, r16 - 7e4: b7 01 movw r22, r14 - 7e6: a4 01 movw r20, r8 - 7e8: 93 01 movw r18, r6 - 7ea: e3 d7 rcall .+4038 ; 0x17b2 <__udivmodsi4> - 7ec: 79 01 movw r14, r18 - 7ee: 8a 01 movw r16, r20 + 8d6: c8 01 movw r24, r16 + 8d8: b7 01 movw r22, r14 + 8da: a4 01 movw r20, r8 + 8dc: 93 01 movw r18, r6 + 8de: 0e 94 38 0d call 0x1a70 ; 0x1a70 <__udivmodsi4> + 8e2: 79 01 movw r14, r18 + 8e4: 8a 01 movw r16, r20 // convert an unsigned integer to string void my_uitoa(uint32_t zahl, char* string, uint8_t no_digits) { int8_t i; // schleifenzähler string[no_digits] = '\0'; // String Terminator for (i = (no_digits - 1); i >= 0; i--) { - 7f0: da 94 dec r13 - 7f2: 21 97 sbiw r28, 0x01 ; 1 - 7f4: 08 94 sec - 7f6: a1 08 sbc r10, r1 - 7f8: b1 08 sbc r11, r1 - 7fa: d7 fe sbrs r13, 7 - 7fc: de cf rjmp .-68 ; 0x7ba + 8e6: da 94 dec r13 + 8e8: 21 97 sbiw r28, 0x01 ; 1 + 8ea: 08 94 sec + 8ec: a1 08 sbc r10, r1 + 8ee: b1 08 sbc r11, r1 + 8f0: d7 fe sbrs r13, 7 + 8f2: dc cf rjmp .-72 ; 0x8ac string[i] = (zahl % 10) + '0'; } // Modulo rechnen, dann den ASCII-Code von '0' addieren zahl /= 10; } } - 7fe: df 91 pop r29 - 800: cf 91 pop r28 - 802: 1f 91 pop r17 - 804: 0f 91 pop r16 - 806: ff 90 pop r15 - 808: ef 90 pop r14 - 80a: df 90 pop r13 - 80c: cf 90 pop r12 - 80e: bf 90 pop r11 - 810: af 90 pop r10 - 812: 9f 90 pop r9 - 814: 8f 90 pop r8 - 816: 7f 90 pop r7 - 818: 6f 90 pop r6 - 81a: 5f 90 pop r5 - 81c: 4f 90 pop r4 - 81e: 3f 90 pop r3 - 820: 2f 90 pop r2 - 822: 08 95 ret + 8f4: df 91 pop r29 + 8f6: cf 91 pop r28 + 8f8: 1f 91 pop r17 + 8fa: 0f 91 pop r16 + 8fc: ff 90 pop r15 + 8fe: ef 90 pop r14 + 900: df 90 pop r13 + 902: cf 90 pop r12 + 904: bf 90 pop r11 + 906: af 90 pop r10 + 908: 9f 90 pop r9 + 90a: 8f 90 pop r8 + 90c: 7f 90 pop r7 + 90e: 6f 90 pop r6 + 910: 5f 90 pop r5 + 912: 4f 90 pop r4 + 914: 3f 90 pop r3 + 916: 2f 90 pop r2 + 918: 08 95 ret + +0000091a : + PORTY2 |= ((byte & (1<<2))>>2)<>3)< + set_y(0); + 91e: 80 e0 ldi r24, 0x00 ; 0 + 920: 96 dc rcall .-1748 ; 0x24e + DDRX0 |= (1<: + + + +uint8_t motor_step(uint8_t motor, int8_t direction) { // motor: M1 or M2, direction +1 or -1, 0 for coil deactivation + 934: 0f 93 push r16 + 936: 1f 93 push r17 + 938: 16 2f mov r17, r22 + 93a: 82 30 cpi r24, 0x02 ; 2 + 93c: 50 f4 brcc .+20 ; 0x952 + 93e: a8 2f mov r26, r24 + 940: b0 e0 ldi r27, 0x00 ; 0 + 942: aa 0f add r26, r26 + 944: bb 1f adc r27, r27 + 946: aa 59 subi r26, 0x9A ; 154 + 948: be 4f sbci r27, 0xFE ; 254 + 94a: 2d 91 ld r18, X+ + 94c: 3c 91 ld r19, X + 94e: 11 97 sbiw r26, 0x01 ; 1 + 950: 02 c0 rjmp .+4 ; 0x956 + 952: 2c ee ldi r18, 0xEC ; 236 + 954: 30 e0 ldi r19, 0x00 ; 0 + case Y: + setport = &set_y; + break; + } + + next_phase = (phase_memory[motor] + 4 + direction) % 4; + 956: e8 2f mov r30, r24 + 958: f0 e0 ldi r31, 0x00 ; 0 + 95a: 81 2f mov r24, r17 + 95c: 99 27 eor r25, r25 + 95e: 87 fd sbrc r24, 7 + 960: 90 95 com r25 + 962: 04 96 adiw r24, 0x04 ; 4 + 964: ea 57 subi r30, 0x7A ; 122 + 966: fd 4f sbci r31, 0xFD ; 253 + 968: 40 81 ld r20, Z + 96a: 84 0f add r24, r20 + 96c: 91 1d adc r25, r1 + 96e: 64 e0 ldi r22, 0x04 ; 4 + 970: 70 e0 ldi r23, 0x00 ; 0 + 972: 0e 94 25 0d call 0x1a4a ; 0x1a4a <__divmodhi4> + phase_memory[motor] = next_phase; + 976: 80 83 st Z, r24 + + + next_pattern = phase_pattern[next_phase]; + 978: e8 2f mov r30, r24 + 97a: f0 e0 ldi r31, 0x00 ; 0 + 97c: e0 5a subi r30, 0xA0 ; 160 + 97e: fe 4f sbci r31, 0xFE ; 254 + 980: 00 81 ld r16, Z + if (direction != 0) { + 982: 11 23 and r17, r17 + 984: 11 f0 breq .+4 ; 0x98a + (*setport)(next_pattern); + 986: 80 2f mov r24, r16 + 988: 01 c0 rjmp .+2 ; 0x98c + } else { + (*setport)(0); + 98a: 80 e0 ldi r24, 0x00 ; 0 + 98c: f9 01 movw r30, r18 + 98e: 09 95 icall + } + + return next_pattern; + +} + 990: 80 2f mov r24, r16 + 992: 1f 91 pop r17 + 994: 0f 91 pop r16 + 996: 08 95 ret + +00000998 : + +int8_t sign(int16_t x) { + return (x > 0) - (x < 0); + 998: 21 e0 ldi r18, 0x01 ; 1 + 99a: 18 16 cp r1, r24 + 99c: 19 06 cpc r1, r25 + 99e: 0c f0 brlt .+2 ; 0x9a2 + 9a0: 20 e0 ldi r18, 0x00 ; 0 + 9a2: 89 2f mov r24, r25 + 9a4: 88 1f adc r24, r24 + 9a6: 88 27 eor r24, r24 + 9a8: 88 1f adc r24, r24 +} + 9aa: 28 1b sub r18, r24 + 9ac: 82 2f mov r24, r18 + 9ae: 08 95 ret + +000009b0 : + +void move_plate(int16_t dx, int16_t dy){ + 9b0: 1f 93 push r17 + static int16_t todo_x,todo_y = 0; + int8_t signum; + todo_x += dx; + 9b2: 20 91 84 02 lds r18, 0x0284 + 9b6: 30 91 85 02 lds r19, 0x0285 + 9ba: 28 0f add r18, r24 + 9bc: 39 1f adc r19, r25 + 9be: 30 93 85 02 sts 0x0285, r19 + 9c2: 20 93 84 02 sts 0x0284, r18 + todo_y += dy; + 9c6: 80 91 82 02 lds r24, 0x0282 + 9ca: 90 91 83 02 lds r25, 0x0283 + 9ce: 86 0f add r24, r22 + 9d0: 97 1f adc r25, r23 + 9d2: 90 93 83 02 sts 0x0283, r25 + 9d6: 80 93 82 02 sts 0x0282, r24 + + signum = sign(todo_x); + 9da: c9 01 movw r24, r18 + 9dc: dd df rcall .-70 ; 0x998 + 9de: 18 2f mov r17, r24 + motor_step(X,signum); + 9e0: 80 e0 ldi r24, 0x00 ; 0 + 9e2: 61 2f mov r22, r17 + 9e4: a7 df rcall .-178 ; 0x934 + todo_x -= signum; + 9e6: 81 2f mov r24, r17 + 9e8: 99 27 eor r25, r25 + 9ea: 87 fd sbrc r24, 7 + 9ec: 90 95 com r25 + 9ee: 20 91 84 02 lds r18, 0x0284 + 9f2: 30 91 85 02 lds r19, 0x0285 + 9f6: 28 1b sub r18, r24 + 9f8: 39 0b sbc r19, r25 + 9fa: 30 93 85 02 sts 0x0285, r19 + 9fe: 20 93 84 02 sts 0x0284, r18 + + signum = sign(todo_y); + a02: 80 91 82 02 lds r24, 0x0282 + a06: 90 91 83 02 lds r25, 0x0283 + a0a: c6 df rcall .-116 ; 0x998 + a0c: 18 2f mov r17, r24 + motor_step(Y,signum); + a0e: 81 e0 ldi r24, 0x01 ; 1 + a10: 61 2f mov r22, r17 + a12: 90 df rcall .-224 ; 0x934 + todo_y -= signum; + a14: 81 2f mov r24, r17 + a16: 99 27 eor r25, r25 + a18: 87 fd sbrc r24, 7 + a1a: 90 95 com r25 + a1c: 20 91 82 02 lds r18, 0x0282 + a20: 30 91 83 02 lds r19, 0x0283 + a24: 28 1b sub r18, r24 + a26: 39 0b sbc r19, r25 + a28: 30 93 83 02 sts 0x0283, r19 + a2c: 20 93 82 02 sts 0x0282, r18 + + +} + a30: 1f 91 pop r17 + a32: 08 95 ret + +00000a34
: + + -00000824
: -/** Main program entry point. This routine contains the overall program flow, including initial - * setup of all components and the main program loop. - */ int main(void) { - 824: cf 92 push r12 - 826: df 92 push r13 - 828: ef 92 push r14 - 82a: ff 92 push r15 - 82c: 0f 93 push r16 - 82e: 1f 93 push r17 - 830: df 93 push r29 - 832: cf 93 push r28 - 834: cd b7 in r28, 0x3d ; 61 - 836: de b7 in r29, 0x3e ; 62 - 838: 60 97 sbiw r28, 0x10 ; 16 - 83a: 0f b6 in r0, 0x3f ; 63 - 83c: f8 94 cli - 83e: de bf out 0x3e, r29 ; 62 - 840: 0f be out 0x3f, r0 ; 63 - 842: cd bf out 0x3d, r28 ; 61 + a34: af 92 push r10 + a36: bf 92 push r11 + a38: cf 92 push r12 + a3a: df 92 push r13 + a3c: ef 92 push r14 + a3e: ff 92 push r15 + a40: 0f 93 push r16 + a42: 1f 93 push r17 + a44: df 93 push r29 + a46: cf 93 push r28 + a48: cd b7 in r28, 0x3d ; 61 + a4a: de b7 in r29, 0x3e ; 62 + a4c: 60 97 sbiw r28, 0x10 ; 16 + a4e: 0f b6 in r0, 0x3f ; 63 + a50: f8 94 cli + a52: de bf out 0x3e, r29 ; 62 + a54: 0f be out 0x3f, r0 ; 63 + a56: cd bf out 0x3d, r28 ; 61 + + init_motors(); + a58: 60 df rcall .-320 ; 0x91a + char dummy; uint8_t field_val = 0; SetupHardware(); - 844: c7 de rcall .-626 ; 0x5d4 + a5a: 32 de rcall .-924 ; 0x6c0 RingBuffer_InitBuffer(&USBtoUSART_Buffer, USBtoUSART_Buffer_Data, sizeof(USBtoUSART_Buffer_Data)); - 846: 82 e6 ldi r24, 0x62 ; 98 - 848: 91 e0 ldi r25, 0x01 ; 1 - 84a: 6e e6 ldi r22, 0x6E ; 110 - 84c: 71 e0 ldi r23, 0x01 ; 1 - 84e: c4 dc rcall .-1656 ; 0x1d8 + a5c: 8a e6 ldi r24, 0x6A ; 106 + a5e: 91 e0 ldi r25, 0x01 ; 1 + a60: 66 e7 ldi r22, 0x76 ; 118 + a62: 71 e0 ldi r23, 0x01 ; 1 + a64: 2e dc rcall .-1956 ; 0x2c2 RingBuffer_InitBuffer(&USARTtoUSB_Buffer, USARTtoUSB_Buffer_Data, sizeof(USARTtoUSB_Buffer_Data)); - 850: 8e ee ldi r24, 0xEE ; 238 - 852: 91 e0 ldi r25, 0x01 ; 1 - 854: 6a ef ldi r22, 0xFA ; 250 - 856: 71 e0 ldi r23, 0x01 ; 1 - 858: bf dc rcall .-1666 ; 0x1d8 + a66: 86 ef ldi r24, 0xF6 ; 246 + a68: 91 e0 ldi r25, 0x01 ; 1 + a6a: 62 e0 ldi r22, 0x02 ; 2 + a6c: 72 e0 ldi r23, 0x02 ; 2 + a6e: 29 dc rcall .-1966 ; 0x2c2 static inline void GlobalInterruptEnable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) sei(); - 85a: 78 94 sei + a70: 78 94 sei // LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); GlobalInterruptEnable(); touchpad_init(); // you need to call this to setup the I/O pin! - 85c: ff dd rcall .-1026 ; 0x45c - 85e: 8f ef ldi r24, 0xFF ; 255 - 860: 99 e6 ldi r25, 0x69 ; 105 - 862: a8 e1 ldi r26, 0x18 ; 24 - 864: 81 50 subi r24, 0x01 ; 1 - 866: 90 40 sbci r25, 0x00 ; 0 - 868: a0 40 sbci r26, 0x00 ; 0 - 86a: e1 f7 brne .-8 ; 0x864 - 86c: 00 c0 rjmp .+0 ; 0x86e - 86e: 00 00 nop + a72: 69 dd rcall .-1326 ; 0x546 + a74: 8f ef ldi r24, 0xFF ; 255 + a76: 99 e6 ldi r25, 0x69 ; 105 + a78: a8 e1 ldi r26, 0x18 ; 24 + a7a: 81 50 subi r24, 0x01 ; 1 + a7c: 90 40 sbci r25, 0x00 ; 0 + a7e: a0 40 sbci r26, 0x00 ; 0 + a80: e1 f7 brne .-8 ; 0xa7a + a82: 00 c0 rjmp .+0 ; 0xa84 + a84: 00 00 nop _delay_ms(500); sei(); - 870: 78 94 sei - // ------------------------- - // | left | down | right | - // ------------------------- - -// uart_puts("you selected the keypad demo modus:\n\r"); - touchpad_set_abs_mode(); // keypad functionality uses the "absolute mode" - 872: 05 de rcall .-1014 ; 0x47e - // end of keypad mode demo block -// -// #elif DEMO_MODE == ABSOLUTE_MODE - // begin of keypad mode demo block -// uart_puts("you selected the absolute position demo modus:\n\r"); + a86: 78 94 sei + + uint16_t loopcounter=0; + + char stringbuffer[16]; + touchpad_set_abs_mode();// tell the touchpad you want to use it in the "absolute mode" - 874: 04 de rcall .-1016 ; 0x47e + a88: 6f dd rcall .-1314 ; 0x568 } // end of absolute mode demo block // // #elif DEMO_MODE == RELATIVE_MODE // begin of relative mode demo block uart_puts("you selected the relative position demo modus:\n\r"); - 876: 80 e0 ldi r24, 0x00 ; 0 - 878: 91 e0 ldi r25, 0x01 ; 1 - 87a: 5b df rcall .-330 ; 0x732 + a8a: 80 e0 ldi r24, 0x00 ; 0 + a8c: 91 e0 ldi r25, 0x01 ; 1 + a8e: ca de rcall .-620 ; 0x824 touchpad_set_rel_mode_100dpi();// use touchpad in relative mode - 87c: 1e de rcall .-964 ; 0x4ba + a90: 89 dd rcall .-1262 ; 0x5a4 // touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution uint8_t x, y = 0; - 87e: dd 24 eor r13, r13 + a92: dd 24 eor r13, r13 } else { y = (y + dy); } uart_puts("x_pos: "); my_uitoa(x, stringbuffer, 4); - 880: 8e 01 movw r16, r28 - 882: 0f 5f subi r16, 0xFF ; 255 - 884: 1f 4f sbci r17, 0xFF ; 255 -// #elif DEMO_MODE == RELATIVE_MODE -// begin of relative mode demo block - uart_puts("you selected the relative position demo modus:\n\r"); - touchpad_set_rel_mode_100dpi();// use touchpad in relative mode -// touchpad_set_rel_mode_200dpi(); // uncomment this line if you want double resolution + a94: 8e 01 movw r16, r28 + a96: 0f 5f subi r16, 0xFF ; 255 + a98: 1f 4f sbci r17, 0xFF ; 255 uint8_t x, y = 0; - 886: ee 24 eor r14, r14 - 888: ff 24 eor r15, r15 int8_t dx, dy = 0; while (1) { Usb2SerialTask(); - 88a: 4b de rcall .-874 ; 0x522 - loopcounter++; - 88c: 08 94 sec - 88e: e1 1c adc r14, r1 - 890: f1 1c adc r15, r1 - if(loopcounter<2000) { - 892: 90 ed ldi r25, 0xD0 ; 208 - 894: e9 16 cp r14, r25 - 896: 97 e0 ldi r25, 0x07 ; 7 - 898: f9 06 cpc r15, r25 - 89a: b9 f7 brne .-18 ; 0x88a - continue; - } - loopcounter=0; + a9a: b8 dd rcall .-1168 ; 0x60c +// if(loopcounter<2000) { +// continue; +// } +// loopcounter=0; touchpad_read(); // read data from touchpad - 89c: e7 dd rcall .-1074 ; 0x46c + a9c: 5c dd rcall .-1352 ; 0x556 dx = delta_x();// returns the amount your finger has moved in x direction since last readout - 89e: 31 de rcall .-926 ; 0x502 - 8a0: e8 2e mov r14, r24 + a9e: a6 dd rcall .-1204 ; 0x5ec + aa0: a8 2e mov r10, r24 dy = delta_y();// returns the amount your finger has moved in y direction since last readout - 8a2: 1f de rcall .-962 ; 0x4e2 + aa2: 94 dd rcall .-1240 ; 0x5cc // increment/decrement some dummy variables with the if (x + dx > 255) { - 8a4: 2e 2d mov r18, r14 - 8a6: 33 27 eor r19, r19 - 8a8: 27 fd sbrc r18, 7 - 8aa: 30 95 com r19 - 8ac: 2c 0d add r18, r12 - 8ae: 31 1d adc r19, r1 - 8b0: 2f 3f cpi r18, 0xFF ; 255 - 8b2: 31 05 cpc r19, r1 - 8b4: 09 f0 breq .+2 ; 0x8b8 - 8b6: 24 f4 brge .+8 ; 0x8c0 + aa4: ea 2c mov r14, r10 + aa6: ff 24 eor r15, r15 + aa8: e7 fc sbrc r14, 7 + aaa: f0 94 com r15 + aac: 97 01 movw r18, r14 + aae: 2c 0d add r18, r12 + ab0: 31 1d adc r19, r1 + ab2: 2f 3f cpi r18, 0xFF ; 255 + ab4: 31 05 cpc r19, r1 + ab6: 09 f0 breq .+2 ; 0xaba + ab8: 24 f4 brge .+8 ; 0xac2 x = 255; } else if (x + dx < 0) { - 8b8: 37 fd sbrc r19, 7 - 8ba: 05 c0 rjmp .+10 ; 0x8c6 + aba: 37 fd sbrc r19, 7 + abc: 05 c0 rjmp .+10 ; 0xac8 x = 0; } else { x = (x + dx); - 8bc: ce 0c add r12, r14 - 8be: 04 c0 rjmp .+8 ; 0x8c8 + abe: ca 0c add r12, r10 + ac0: 04 c0 rjmp .+8 ; 0xaca dx = delta_x();// returns the amount your finger has moved in x direction since last readout dy = delta_y();// returns the amount your finger has moved in y direction since last readout // increment/decrement some dummy variables with the if (x + dx > 255) { x = 255; - 8c0: cc 24 eor r12, r12 - 8c2: ca 94 dec r12 - 8c4: 01 c0 rjmp .+2 ; 0x8c8 + ac2: cc 24 eor r12, r12 + ac4: ca 94 dec r12 + ac6: 01 c0 rjmp .+2 ; 0xaca } else if (x + dx < 0) { x = 0; - 8c6: cc 24 eor r12, r12 + ac8: cc 24 eor r12, r12 } else { x = (x + dx); } if (y + dy > 255) { - 8c8: 28 2f mov r18, r24 - 8ca: 33 27 eor r19, r19 - 8cc: 27 fd sbrc r18, 7 - 8ce: 30 95 com r19 - 8d0: 2d 0d add r18, r13 - 8d2: 31 1d adc r19, r1 - 8d4: 2f 3f cpi r18, 0xFF ; 255 - 8d6: 31 05 cpc r19, r1 - 8d8: 09 f0 breq .+2 ; 0x8dc - 8da: 24 f4 brge .+8 ; 0x8e4 + aca: a8 2e mov r10, r24 + acc: bb 24 eor r11, r11 + ace: a7 fc sbrc r10, 7 + ad0: b0 94 com r11 + ad2: 95 01 movw r18, r10 + ad4: 2d 0d add r18, r13 + ad6: 31 1d adc r19, r1 + ad8: 2f 3f cpi r18, 0xFF ; 255 + ada: 31 05 cpc r19, r1 + adc: 09 f0 breq .+2 ; 0xae0 + ade: 24 f4 brge .+8 ; 0xae8 y = 255; } else if (y + dy < 0) { - 8dc: 37 fd sbrc r19, 7 - 8de: 05 c0 rjmp .+10 ; 0x8ea + ae0: 37 fd sbrc r19, 7 + ae2: 05 c0 rjmp .+10 ; 0xaee y = 0; } else { y = (y + dy); - 8e0: d8 0e add r13, r24 - 8e2: 04 c0 rjmp .+8 ; 0x8ec + ae4: d8 0e add r13, r24 + ae6: 04 c0 rjmp .+8 ; 0xaf0 } else { x = (x + dx); } if (y + dy > 255) { y = 255; - 8e4: dd 24 eor r13, r13 - 8e6: da 94 dec r13 - 8e8: 01 c0 rjmp .+2 ; 0x8ec + ae8: dd 24 eor r13, r13 + aea: da 94 dec r13 + aec: 01 c0 rjmp .+2 ; 0xaf0 } else if (y + dy < 0) { y = 0; - 8ea: dd 24 eor r13, r13 + aee: dd 24 eor r13, r13 } else { y = (y + dy); } uart_puts("x_pos: "); - 8ec: 81 e3 ldi r24, 0x31 ; 49 - 8ee: 91 e0 ldi r25, 0x01 ; 1 - 8f0: 20 df rcall .-448 ; 0x732 + af0: 81 e3 ldi r24, 0x31 ; 49 + af2: 91 e0 ldi r25, 0x01 ; 1 + af4: 97 de rcall .-722 ; 0x824 my_uitoa(x, stringbuffer, 4); - 8f2: 6c 2d mov r22, r12 - 8f4: 70 e0 ldi r23, 0x00 ; 0 - 8f6: 80 e0 ldi r24, 0x00 ; 0 - 8f8: 90 e0 ldi r25, 0x00 ; 0 - 8fa: a8 01 movw r20, r16 - 8fc: 24 e0 ldi r18, 0x04 ; 4 - 8fe: 2c df rcall .-424 ; 0x758 + af6: 6c 2d mov r22, r12 + af8: 70 e0 ldi r23, 0x00 ; 0 + afa: 80 e0 ldi r24, 0x00 ; 0 + afc: 90 e0 ldi r25, 0x00 ; 0 + afe: a8 01 movw r20, r16 + b00: 24 e0 ldi r18, 0x04 ; 4 + b02: a3 de rcall .-698 ; 0x84a uart_puts(stringbuffer); - 900: c8 01 movw r24, r16 - 902: 17 df rcall .-466 ; 0x732 + b04: c8 01 movw r24, r16 + b06: 8e de rcall .-740 ; 0x824 uart_puts(" y_pos: "); - 904: 89 e3 ldi r24, 0x39 ; 57 - 906: 91 e0 ldi r25, 0x01 ; 1 - 908: 14 df rcall .-472 ; 0x732 + b08: 89 e3 ldi r24, 0x39 ; 57 + b0a: 91 e0 ldi r25, 0x01 ; 1 + b0c: 8b de rcall .-746 ; 0x824 my_uitoa(y, stringbuffer, 4); - 90a: 6d 2d mov r22, r13 - 90c: 70 e0 ldi r23, 0x00 ; 0 - 90e: 80 e0 ldi r24, 0x00 ; 0 - 910: 90 e0 ldi r25, 0x00 ; 0 - 912: a8 01 movw r20, r16 - 914: 24 e0 ldi r18, 0x04 ; 4 - 916: 20 df rcall .-448 ; 0x758 + b0e: 6d 2d mov r22, r13 + b10: 70 e0 ldi r23, 0x00 ; 0 + b12: 80 e0 ldi r24, 0x00 ; 0 + b14: 90 e0 ldi r25, 0x00 ; 0 + b16: a8 01 movw r20, r16 + b18: 24 e0 ldi r18, 0x04 ; 4 + b1a: 97 de rcall .-722 ; 0x84a uart_puts(stringbuffer); - 918: c8 01 movw r24, r16 - 91a: 0b df rcall .-490 ; 0x732 + b1c: c8 01 movw r24, r16 + b1e: 82 de rcall .-764 ; 0x824 uart_puts("\r"); - 91c: 83 e4 ldi r24, 0x43 ; 67 - 91e: 91 e0 ldi r25, 0x01 ; 1 - 920: 08 df rcall .-496 ; 0x732 - 922: b1 cf rjmp .-158 ; 0x886 + b20: 83 e4 ldi r24, 0x43 ; 67 + b22: 91 e0 ldi r25, 0x01 ; 1 + b24: 7f de rcall .-770 ; 0x824 + b26: af e3 ldi r26, 0x3F ; 63 + b28: bc e9 ldi r27, 0x9C ; 156 + b2a: 11 97 sbiw r26, 0x01 ; 1 + b2c: f1 f7 brne .-4 ; 0xb2a + b2e: 00 c0 rjmp .+0 ; 0xb30 + b30: 00 00 nop + + _delay_ms(10); + move_plate(dx>>0,dy>>0); + b32: c7 01 movw r24, r14 + b34: b5 01 movw r22, r10 + b36: 3c df rcall .-392 ; 0x9b0 + -00000924 : + } + b38: b0 cf rjmp .-160 ; 0xa9a + +00000b3a : const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) - 924: 92 30 cpi r25, 0x02 ; 2 - 926: 29 f0 breq .+10 ; 0x932 - 928: 93 30 cpi r25, 0x03 ; 3 - 92a: 41 f0 breq .+16 ; 0x93c - 92c: 91 30 cpi r25, 0x01 ; 1 - 92e: e9 f4 brne .+58 ; 0x96a - 930: 17 c0 rjmp .+46 ; 0x960 + b3a: 92 30 cpi r25, 0x02 ; 2 + b3c: 29 f0 breq .+10 ; 0xb48 + b3e: 93 30 cpi r25, 0x03 ; 3 + b40: 41 f0 breq .+16 ; 0xb52 + b42: 91 30 cpi r25, 0x01 ; 1 + b44: e9 f4 brne .+58 ; 0xb80 + b46: 17 c0 rjmp .+46 ; 0xb76 Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); - 932: 2e e3 ldi r18, 0x3E ; 62 - 934: 30 e0 ldi r19, 0x00 ; 0 + b48: 2e e3 ldi r18, 0x3E ; 62 + b4a: 30 e0 ldi r19, 0x00 ; 0 case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; case DTYPE_Configuration: Address = &ConfigurationDescriptor; - 936: ea ea ldi r30, 0xAA ; 170 - 938: f0 e0 ldi r31, 0x00 ; 0 + b4c: ea ea ldi r30, 0xAA ; 170 + b4e: f0 e0 ldi r31, 0x00 ; 0 Size = sizeof(USB_Descriptor_Configuration_t); break; - 93a: 1b c0 rjmp .+54 ; 0x972 + b50: 1b c0 rjmp .+54 ; 0xb88 case DTYPE_String: switch (DescriptorNumber) - 93c: 81 30 cpi r24, 0x01 ; 1 - 93e: 41 f0 breq .+16 ; 0x950 - 940: 81 30 cpi r24, 0x01 ; 1 - 942: 18 f0 brcs .+6 ; 0x94a - 944: 82 30 cpi r24, 0x02 ; 2 - 946: 89 f4 brne .+34 ; 0x96a - 948: 06 c0 rjmp .+12 ; 0x956 + b52: 81 30 cpi r24, 0x01 ; 1 + b54: 41 f0 breq .+16 ; 0xb66 + b56: 81 30 cpi r24, 0x01 ; 1 + b58: 18 f0 brcs .+6 ; 0xb60 + b5a: 82 30 cpi r24, 0x02 ; 2 + b5c: 89 f4 brne .+34 ; 0xb80 + b5e: 06 c0 rjmp .+12 ; 0xb6c { case 0x00: Address = &LanguageString; Size = pgm_read_byte(&LanguageString.Header.Size); - 94a: e8 ee ldi r30, 0xE8 ; 232 - 94c: f0 e0 ldi r31, 0x00 ; 0 - 94e: 05 c0 rjmp .+10 ; 0x95a + b60: e8 ee ldi r30, 0xE8 ; 232 + b62: f0 e0 ldi r31, 0x00 ; 0 + b64: 05 c0 rjmp .+10 ; 0xb70 break; case 0x01: Address = &ManufacturerString; Size = pgm_read_byte(&ManufacturerString.Header.Size); - 950: ec ee ldi r30, 0xEC ; 236 - 952: f0 e0 ldi r31, 0x00 ; 0 - 954: 02 c0 rjmp .+4 ; 0x95a + b66: ec ee ldi r30, 0xEC ; 236 + b68: f0 e0 ldi r31, 0x00 ; 0 + b6a: 02 c0 rjmp .+4 ; 0xb70 break; case 0x02: Address = &ProductString; Size = pgm_read_byte(&ProductString.Header.Size); - 956: e6 e0 ldi r30, 0x06 ; 6 - 958: f1 e0 ldi r31, 0x01 ; 1 - 95a: 24 91 lpm r18, Z+ - 95c: 30 e0 ldi r19, 0x00 ; 0 + b6c: e6 e0 ldi r30, 0x06 ; 6 + b6e: f1 e0 ldi r31, 0x01 ; 1 + b70: 24 91 lpm r18, Z+ + b72: 30 e0 ldi r19, 0x00 ; 0 break; - 95e: 09 c0 rjmp .+18 ; 0x972 + b74: 09 c0 rjmp .+18 ; 0xb88 switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); - 960: 22 e1 ldi r18, 0x12 ; 18 - 962: 30 e0 ldi r19, 0x00 ; 0 + b76: 22 e1 ldi r18, 0x12 ; 18 + b78: 30 e0 ldi r19, 0x00 ; 0 uint16_t Size = NO_DESCRIPTOR; switch (DescriptorType) { case DTYPE_Device: Address = &DeviceDescriptor; - 964: e8 e9 ldi r30, 0x98 ; 152 - 966: f0 e0 ldi r31, 0x00 ; 0 - 968: 04 c0 rjmp .+8 ; 0x972 + b7a: e8 e9 ldi r30, 0x98 ; 152 + b7c: f0 e0 ldi r31, 0x00 ; 0 + b7e: 04 c0 rjmp .+8 ; 0xb88 { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - 96a: 20 e0 ldi r18, 0x00 ; 0 - 96c: 30 e0 ldi r19, 0x00 ; 0 + b80: 20 e0 ldi r18, 0x00 ; 0 + b82: 30 e0 ldi r19, 0x00 ; 0 const void** const DescriptorAddress) { const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorNumber = (wValue & 0xFF); const void* Address = NULL; - 96e: e0 e0 ldi r30, 0x00 ; 0 - 970: f0 e0 ldi r31, 0x00 ; 0 + b84: e0 e0 ldi r30, 0x00 ; 0 + b86: f0 e0 ldi r31, 0x00 ; 0 } break; } *DescriptorAddress = Address; - 972: da 01 movw r26, r20 - 974: 11 96 adiw r26, 0x01 ; 1 - 976: fc 93 st X, r31 - 978: ee 93 st -X, r30 + b88: da 01 movw r26, r20 + b8a: 11 96 adiw r26, 0x01 ; 1 + b8c: fc 93 st X, r31 + b8e: ee 93 st -X, r30 return Size; } - 97a: c9 01 movw r24, r18 - 97c: 08 95 ret + b90: c9 01 movw r24, r18 + b92: 08 95 ret -0000097e : +00000b94 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - 97e: 28 2f mov r18, r24 - 980: 39 2f mov r19, r25 - 982: f9 01 movw r30, r18 + b94: 28 2f mov r18, r24 + b96: 39 2f mov r19, r25 + b98: f9 01 movw r30, r18 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - 984: 80 91 95 02 lds r24, 0x0295 - 988: 90 91 96 02 lds r25, 0x0296 - 98c: 86 17 cp r24, r22 - 98e: 97 07 cpc r25, r23 - 990: 18 f4 brcc .+6 ; 0x998 - 992: bc 01 movw r22, r24 - 994: 20 e0 ldi r18, 0x00 ; 0 - 996: 35 c0 rjmp .+106 ; 0xa02 + b9a: 80 91 a2 02 lds r24, 0x02A2 + b9e: 90 91 a3 02 lds r25, 0x02A3 + ba2: 86 17 cp r24, r22 + ba4: 97 07 cpc r25, r23 + ba6: 18 f4 brcc .+6 ; 0xbae + ba8: bc 01 movw r22, r24 + baa: 20 e0 ldi r18, 0x00 ; 0 + bac: 34 c0 rjmp .+104 ; 0xc16 Length = USB_ControlRequest.wLength; else if (!(Length)) - 998: 61 15 cp r22, r1 - 99a: 71 05 cpc r23, r1 - 99c: d9 f7 brne .-10 ; 0x994 + bae: 61 15 cp r22, r1 + bb0: 71 05 cpc r23, r1 + bb2: d9 f7 brne .-10 ; 0xbaa */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 99e: 80 91 e8 00 lds r24, 0x00E8 - 9a2: 8e 77 andi r24, 0x7E ; 126 - 9a4: 80 93 e8 00 sts 0x00E8, r24 - 9a8: f5 cf rjmp .-22 ; 0x994 + bb4: 80 91 e8 00 lds r24, 0x00E8 + bb8: 8e 77 andi r24, 0x7E ; 126 + bba: 80 93 e8 00 sts 0x00E8, r24 + bbe: f5 cf rjmp .-22 ; 0xbaa Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - 9aa: 80 91 8e 02 lds r24, 0x028E + bc0: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - 9ae: 88 23 and r24, r24 - 9b0: f1 f1 breq .+124 ; 0xa2e + bc2: 88 23 and r24, r24 + bc4: e9 f1 breq .+122 ; 0xc40 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - 9b2: 85 30 cpi r24, 0x05 ; 5 - 9b4: c1 f1 breq .+112 ; 0xa26 + bc6: 85 30 cpi r24, 0x05 ; 5 + bc8: b9 f1 breq .+110 ; 0xc38 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 9b6: 80 91 e8 00 lds r24, 0x00E8 + bca: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - 9ba: 83 fd sbrc r24, 3 - 9bc: 36 c0 rjmp .+108 ; 0xa2a + bce: 83 fd sbrc r24, 3 + bd0: 35 c0 rjmp .+106 ; 0xc3c * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 9be: 80 91 e8 00 lds r24, 0x00E8 + bd2: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - 9c2: 82 fd sbrc r24, 2 - 9c4: 2a c0 rjmp .+84 ; 0xa1a + bd6: 82 fd sbrc r24, 2 + bd8: 29 c0 rjmp .+82 ; 0xc2c * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 9c6: 80 91 e8 00 lds r24, 0x00E8 + bda: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - 9ca: 80 ff sbrs r24, 0 - 9cc: 1a c0 rjmp .+52 ; 0xa02 + bde: 80 ff sbrs r24, 0 + be0: 1a c0 rjmp .+52 ; 0xc16 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 9ce: 80 91 f2 00 lds r24, 0x00F2 - 9d2: 90 e0 ldi r25, 0x00 ; 0 + be2: 80 91 f2 00 lds r24, 0x00F2 + be6: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 9d4: 06 c0 rjmp .+12 ; 0x9e2 + be8: 06 c0 rjmp .+12 ; 0xbf6 { TEMPLATE_TRANSFER_BYTE(DataStream); - 9d6: 21 91 ld r18, Z+ + bea: 21 91 ld r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 9d8: 20 93 f1 00 sts 0x00F1, r18 + bec: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; - 9dc: 61 50 subi r22, 0x01 ; 1 - 9de: 70 40 sbci r23, 0x00 ; 0 + bf0: 61 50 subi r22, 0x01 ; 1 + bf2: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - 9e0: 01 96 adiw r24, 0x01 ; 1 + bf4: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - 9e2: 61 15 cp r22, r1 - 9e4: 71 05 cpc r23, r1 - 9e6: 19 f0 breq .+6 ; 0x9ee - 9e8: 88 30 cpi r24, 0x08 ; 8 - 9ea: 91 05 cpc r25, r1 - 9ec: a0 f3 brcs .-24 ; 0x9d6 + bf6: 61 15 cp r22, r1 + bf8: 71 05 cpc r23, r1 + bfa: 19 f0 breq .+6 ; 0xc02 + bfc: 88 30 cpi r24, 0x08 ; 8 + bfe: 91 05 cpc r25, r1 + c00: a0 f3 brcs .-24 ; 0xbea TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - 9ee: 21 e0 ldi r18, 0x01 ; 1 - 9f0: 88 30 cpi r24, 0x08 ; 8 - 9f2: 91 05 cpc r25, r1 - 9f4: 09 f0 breq .+2 ; 0x9f8 - 9f6: 20 e0 ldi r18, 0x00 ; 0 + c02: 21 e0 ldi r18, 0x01 ; 1 + c04: 88 30 cpi r24, 0x08 ; 8 + c06: 91 05 cpc r25, r1 + c08: 09 f0 breq .+2 ; 0xc0c + c0a: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 9f8: 80 91 e8 00 lds r24, 0x00E8 - 9fc: 8e 77 andi r24, 0x7E ; 126 - 9fe: 80 93 e8 00 sts 0x00E8, r24 + c0c: 80 91 e8 00 lds r24, 0x00E8 + c10: 8e 77 andi r24, 0x7E ; 126 + c12: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - a02: 61 15 cp r22, r1 - a04: 71 05 cpc r23, r1 - a06: 89 f6 brne .-94 ; 0x9aa - a08: 22 23 and r18, r18 - a0a: 79 f6 brne .-98 ; 0x9aa - a0c: 06 c0 rjmp .+12 ; 0xa1a + c16: 61 15 cp r22, r1 + c18: 71 05 cpc r23, r1 + c1a: 91 f6 brne .-92 ; 0xbc0 + c1c: 22 23 and r18, r18 + c1e: 81 f6 brne .-96 ; 0xbc0 + c20: 05 c0 rjmp .+10 ; 0xc2c } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - a0e: 80 91 8e 02 lds r24, 0x028E + c22: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a12: 88 23 and r24, r24 - a14: 61 f0 breq .+24 ; 0xa2e + c24: 88 23 and r24, r24 + c26: 61 f0 breq .+24 ; 0xc40 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a16: 85 30 cpi r24, 0x05 ; 5 - a18: 61 f0 breq .+24 ; 0xa32 + c28: 85 30 cpi r24, 0x05 ; 5 + c2a: 61 f0 breq .+24 ; 0xc44 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - a1a: 80 91 e8 00 lds r24, 0x00E8 + c2c: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - a1e: 82 ff sbrs r24, 2 - a20: f6 cf rjmp .-20 ; 0xa0e + c30: 82 ff sbrs r24, 2 + c32: f7 cf rjmp .-18 ; 0xc22 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - a22: 80 e0 ldi r24, 0x00 ; 0 - a24: 08 95 ret + c34: 80 e0 ldi r24, 0x00 ; 0 + c36: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - a26: 83 e0 ldi r24, 0x03 ; 3 - a28: 08 95 ret + c38: 83 e0 ldi r24, 0x03 ; 3 + c3a: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - a2a: 81 e0 ldi r24, 0x01 ; 1 - a2c: 08 95 ret + c3c: 81 e0 ldi r24, 0x01 ; 1 + c3e: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - a2e: 82 e0 ldi r24, 0x02 ; 2 - a30: 08 95 ret + c40: 82 e0 ldi r24, 0x02 ; 2 + c42: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - a32: 83 e0 ldi r24, 0x03 ; 3 + c44: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - a34: 08 95 ret + c46: 08 95 ret -00000a36 : +00000c48 : #if defined(TEMPLATE_FUNC_NAME) uint8_t TEMPLATE_FUNC_NAME (const void* const Buffer, uint16_t Length) { uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); - a36: e8 2f mov r30, r24 - a38: f9 2f mov r31, r25 + c48: e8 2f mov r30, r24 + c4a: f9 2f mov r31, r25 bool LastPacketFull = false; if (Length > USB_ControlRequest.wLength) - a3a: 80 91 95 02 lds r24, 0x0295 - a3e: 90 91 96 02 lds r25, 0x0296 - a42: 86 17 cp r24, r22 - a44: 97 07 cpc r25, r23 - a46: 18 f4 brcc .+6 ; 0xa4e - a48: bc 01 movw r22, r24 - a4a: 20 e0 ldi r18, 0x00 ; 0 - a4c: 37 c0 rjmp .+110 ; 0xabc + c4c: 80 91 a2 02 lds r24, 0x02A2 + c50: 90 91 a3 02 lds r25, 0x02A3 + c54: 86 17 cp r24, r22 + c56: 97 07 cpc r25, r23 + c58: 18 f4 brcc .+6 ; 0xc60 + c5a: bc 01 movw r22, r24 + c5c: 20 e0 ldi r18, 0x00 ; 0 + c5e: 36 c0 rjmp .+108 ; 0xccc Length = USB_ControlRequest.wLength; else if (!(Length)) - a4e: 61 15 cp r22, r1 - a50: 71 05 cpc r23, r1 - a52: d9 f7 brne .-10 ; 0xa4a + c60: 61 15 cp r22, r1 + c62: 71 05 cpc r23, r1 + c64: d9 f7 brne .-10 ; 0xc5c */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - a54: 80 91 e8 00 lds r24, 0x00E8 - a58: 8e 77 andi r24, 0x7E ; 126 - a5a: 80 93 e8 00 sts 0x00E8, r24 - a5e: f5 cf rjmp .-22 ; 0xa4a + c66: 80 91 e8 00 lds r24, 0x00E8 + c6a: 8e 77 andi r24, 0x7E ; 126 + c6c: 80 93 e8 00 sts 0x00E8, r24 + c70: f5 cf rjmp .-22 ; 0xc5c Endpoint_ClearIN(); while (Length || LastPacketFull) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - a60: 80 91 8e 02 lds r24, 0x028E + c72: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - a64: 88 23 and r24, r24 - a66: 09 f4 brne .+2 ; 0xa6a - a68: 3f c0 rjmp .+126 ; 0xae8 + c74: 88 23 and r24, r24 + c76: 09 f4 brne .+2 ; 0xc7a + c78: 3e c0 rjmp .+124 ; 0xcf6 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - a6a: 85 30 cpi r24, 0x05 ; 5 - a6c: c9 f1 breq .+114 ; 0xae0 + c7a: 85 30 cpi r24, 0x05 ; 5 + c7c: c1 f1 breq .+112 ; 0xcee * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - a6e: 80 91 e8 00 lds r24, 0x00E8 + c7e: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_BusSuspended; else if (Endpoint_IsSETUPReceived()) - a72: 83 fd sbrc r24, 3 - a74: 37 c0 rjmp .+110 ; 0xae4 + c82: 83 fd sbrc r24, 3 + c84: 36 c0 rjmp .+108 ; 0xcf2 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - a76: 80 91 e8 00 lds r24, 0x00E8 + c86: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWCSTREAM_HostAborted; else if (Endpoint_IsOUTReceived()) - a7a: 82 fd sbrc r24, 2 - a7c: 2b c0 rjmp .+86 ; 0xad4 + c8a: 82 fd sbrc r24, 2 + c8c: 2a c0 rjmp .+84 ; 0xce2 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - a7e: 80 91 e8 00 lds r24, 0x00E8 + c8e: 80 91 e8 00 lds r24, 0x00E8 break; if (Endpoint_IsINReady()) - a82: 80 ff sbrs r24, 0 - a84: 1b c0 rjmp .+54 ; 0xabc + c92: 80 ff sbrs r24, 0 + c94: 1b c0 rjmp .+54 ; 0xccc #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - a86: 80 91 f2 00 lds r24, 0x00F2 - a8a: 90 e0 ldi r25, 0x00 ; 0 + c96: 80 91 f2 00 lds r24, 0x00F2 + c9a: 90 e0 ldi r25, 0x00 ; 0 { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a8c: 07 c0 rjmp .+14 ; 0xa9c + c9c: 07 c0 rjmp .+14 ; 0xcac { TEMPLATE_TRANSFER_BYTE(DataStream); - a8e: 24 91 lpm r18, Z+ + c9e: 24 91 lpm r18, Z+ * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - a90: 20 93 f1 00 sts 0x00F1, r18 + ca0: 20 93 f1 00 sts 0x00F1, r18 TEMPLATE_BUFFER_MOVE(DataStream, 1); - a94: 31 96 adiw r30, 0x01 ; 1 + ca4: 31 96 adiw r30, 0x01 ; 1 Length--; - a96: 61 50 subi r22, 0x01 ; 1 - a98: 70 40 sbci r23, 0x00 ; 0 + ca6: 61 50 subi r22, 0x01 ; 1 + ca8: 70 40 sbci r23, 0x00 ; 0 BytesInEndpoint++; - a9a: 01 96 adiw r24, 0x01 ; 1 + caa: 01 96 adiw r24, 0x01 ; 1 if (Endpoint_IsINReady()) { uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) - a9c: 61 15 cp r22, r1 - a9e: 71 05 cpc r23, r1 - aa0: 19 f0 breq .+6 ; 0xaa8 - aa2: 88 30 cpi r24, 0x08 ; 8 - aa4: 91 05 cpc r25, r1 - aa6: 98 f3 brcs .-26 ; 0xa8e + cac: 61 15 cp r22, r1 + cae: 71 05 cpc r23, r1 + cb0: 19 f0 breq .+6 ; 0xcb8 + cb2: 88 30 cpi r24, 0x08 ; 8 + cb4: 91 05 cpc r25, r1 + cb6: 98 f3 brcs .-26 ; 0xc9e TEMPLATE_BUFFER_MOVE(DataStream, 1); Length--; BytesInEndpoint++; } LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); - aa8: 21 e0 ldi r18, 0x01 ; 1 - aaa: 88 30 cpi r24, 0x08 ; 8 - aac: 91 05 cpc r25, r1 - aae: 09 f0 breq .+2 ; 0xab2 - ab0: 20 e0 ldi r18, 0x00 ; 0 + cb8: 21 e0 ldi r18, 0x01 ; 1 + cba: 88 30 cpi r24, 0x08 ; 8 + cbc: 91 05 cpc r25, r1 + cbe: 09 f0 breq .+2 ; 0xcc2 + cc0: 20 e0 ldi r18, 0x00 ; 0 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - ab2: 80 91 e8 00 lds r24, 0x00E8 - ab6: 8e 77 andi r24, 0x7E ; 126 - ab8: 80 93 e8 00 sts 0x00E8, r24 + cc2: 80 91 e8 00 lds r24, 0x00E8 + cc6: 8e 77 andi r24, 0x7E ; 126 + cc8: 80 93 e8 00 sts 0x00E8, r24 if (Length > USB_ControlRequest.wLength) Length = USB_ControlRequest.wLength; else if (!(Length)) Endpoint_ClearIN(); while (Length || LastPacketFull) - abc: 61 15 cp r22, r1 - abe: 71 05 cpc r23, r1 - ac0: 79 f6 brne .-98 ; 0xa60 - ac2: 22 23 and r18, r18 - ac4: 69 f6 brne .-102 ; 0xa60 - ac6: 06 c0 rjmp .+12 ; 0xad4 + ccc: 61 15 cp r22, r1 + cce: 71 05 cpc r23, r1 + cd0: 81 f6 brne .-96 ; 0xc72 + cd2: 22 23 and r18, r18 + cd4: 71 f6 brne .-100 ; 0xc72 + cd6: 05 c0 rjmp .+10 ; 0xce2 } } while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; - ac8: 80 91 8e 02 lds r24, 0x028E + cd8: 8e b3 in r24, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - acc: 88 23 and r24, r24 - ace: 61 f0 breq .+24 ; 0xae8 + cda: 88 23 and r24, r24 + cdc: 61 f0 breq .+24 ; 0xcf6 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - ad0: 85 30 cpi r24, 0x05 ; 5 - ad2: 61 f0 breq .+24 ; 0xaec + cde: 85 30 cpi r24, 0x05 ; 5 + ce0: 61 f0 breq .+24 ; 0xcfa * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - ad4: 80 91 e8 00 lds r24, 0x00E8 + ce2: 80 91 e8 00 lds r24, 0x00E8 LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); Endpoint_ClearIN(); } } while (!(Endpoint_IsOUTReceived())) - ad8: 82 ff sbrs r24, 2 - ada: f6 cf rjmp .-20 ; 0xac8 + ce6: 82 ff sbrs r24, 2 + ce8: f7 cf rjmp .-18 ; 0xcd8 return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; } return ENDPOINT_RWCSTREAM_NoError; - adc: 80 e0 ldi r24, 0x00 ; 0 - ade: 08 95 ret + cea: 80 e0 ldi r24, 0x00 ; 0 + cec: 08 95 ret uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - ae0: 83 e0 ldi r24, 0x03 ; 3 - ae2: 08 95 ret + cee: 83 e0 ldi r24, 0x03 ; 3 + cf0: 08 95 ret else if (Endpoint_IsSETUPReceived()) return ENDPOINT_RWCSTREAM_HostAborted; - ae4: 81 e0 ldi r24, 0x01 ; 1 - ae6: 08 95 ret + cf2: 81 e0 ldi r24, 0x01 ; 1 + cf4: 08 95 ret while (!(Endpoint_IsOUTReceived())) { uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_RWCSTREAM_DeviceDisconnected; - ae8: 82 e0 ldi r24, 0x02 ; 2 - aea: 08 95 ret + cf6: 82 e0 ldi r24, 0x02 ; 2 + cf8: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_RWCSTREAM_BusSuspended; - aec: 83 e0 ldi r24, 0x03 ; 3 + cfa: 83 e0 ldi r24, 0x03 ; 3 } return ENDPOINT_RWCSTREAM_NoError; } - aee: 08 95 ret + cfc: 08 95 ret -00000af0 : +00000cfe : UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - af0: 98 2f mov r25, r24 - af2: 2c c0 rjmp .+88 ; 0xb4c + cfe: 98 2f mov r25, r24 + d00: 2c c0 rjmp .+88 ; 0xd5a */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - af4: 29 2f mov r18, r25 - af6: 2f 70 andi r18, 0x0F ; 15 - af8: 20 93 e9 00 sts 0x00E9, r18 + d02: 29 2f mov r18, r25 + d04: 2f 70 andi r18, 0x0F ; 15 + d06: 20 93 e9 00 sts 0x00E9, r18 uint8_t UECFG1XTemp; uint8_t UEIENXTemp; Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) - afc: 98 17 cp r25, r24 - afe: 39 f0 breq .+14 ; 0xb0e + d0a: 98 17 cp r25, r24 + d0c: 39 f0 breq .+14 ; 0xd1c UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; } else { UECFG0XTemp = UECFG0X; - b00: 70 91 ec 00 lds r23, 0x00EC + d0e: 70 91 ec 00 lds r23, 0x00EC UECFG1XTemp = UECFG1X; - b04: 20 91 ed 00 lds r18, 0x00ED + d12: 20 91 ed 00 lds r18, 0x00ED UEIENXTemp = UEIENX; - b08: 50 91 f0 00 lds r21, 0x00F0 - b0c: 03 c0 rjmp .+6 ; 0xb14 + d16: 50 91 f0 00 lds r21, 0x00F0 + d1a: 03 c0 rjmp .+6 ; 0xd22 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; UECFG1XTemp = UECFG1XData; - b0e: 24 2f mov r18, r20 + d1c: 24 2f mov r18, r20 Endpoint_SelectEndpoint(EPNum); if (EPNum == Number) { UECFG0XTemp = UECFG0XData; - b10: 76 2f mov r23, r22 + d1e: 76 2f mov r23, r22 UECFG1XTemp = UECFG1XData; UEIENXTemp = 0; - b12: 50 e0 ldi r21, 0x00 ; 0 + d20: 50 e0 ldi r21, 0x00 ; 0 UECFG0XTemp = UECFG0X; UECFG1XTemp = UECFG1X; UEIENXTemp = UEIENX; } if (!(UECFG1XTemp & (1 << ALLOC))) - b14: 21 ff sbrs r18, 1 - b16: 19 c0 rjmp .+50 ; 0xb4a + d22: 21 ff sbrs r18, 1 + d24: 19 c0 rjmp .+50 ; 0xd58 * to and from a host. */ static inline void Endpoint_DisableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_DisableEndpoint(void) { UECONX &= ~(1 << EPEN); - b18: 30 91 eb 00 lds r19, 0x00EB - b1c: 3e 7f andi r19, 0xFE ; 254 - b1e: 30 93 eb 00 sts 0x00EB, r19 + d26: 30 91 eb 00 lds r19, 0x00EB + d2a: 3e 7f andi r19, 0xFE ; 254 + d2c: 30 93 eb 00 sts 0x00EB, r19 continue; Endpoint_DisableEndpoint(); UECFG1X &= ~(1 << ALLOC); - b22: 30 91 ed 00 lds r19, 0x00ED - b26: 3d 7f andi r19, 0xFD ; 253 - b28: 30 93 ed 00 sts 0x00ED, r19 + d30: 30 91 ed 00 lds r19, 0x00ED + d34: 3d 7f andi r19, 0xFD ; 253 + d36: 30 93 ed 00 sts 0x00ED, r19 * \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint(). */ static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_EnableEndpoint(void) { UECONX |= (1 << EPEN); - b2c: 30 91 eb 00 lds r19, 0x00EB - b30: 31 60 ori r19, 0x01 ; 1 - b32: 30 93 eb 00 sts 0x00EB, r19 + d3a: 30 91 eb 00 lds r19, 0x00EB + d3e: 31 60 ori r19, 0x01 ; 1 + d40: 30 93 eb 00 sts 0x00EB, r19 Endpoint_EnableEndpoint(); UECFG0X = UECFG0XTemp; - b36: 70 93 ec 00 sts 0x00EC, r23 + d44: 70 93 ec 00 sts 0x00EC, r23 UECFG1X = UECFG1XTemp; - b3a: 20 93 ed 00 sts 0x00ED, r18 + d48: 20 93 ed 00 sts 0x00ED, r18 UEIENX = UEIENXTemp; - b3e: 50 93 f0 00 sts 0x00F0, r21 + d4c: 50 93 f0 00 sts 0x00F0, r21 * \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise. */ static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsConfigured(void) { return ((UESTA0X & (1 << CFGOK)) ? true : false); - b42: 20 91 ee 00 lds r18, 0x00EE + d50: 20 91 ee 00 lds r18, 0x00EE if (!(Endpoint_IsConfigured())) - b46: 27 ff sbrs r18, 7 - b48: 08 c0 rjmp .+16 ; 0xb5a + d54: 27 ff sbrs r18, 7 + d56: 08 c0 rjmp .+16 ; 0xd68 UECFG0X = UECFG0XData; UECFG1X = UECFG1XData; return Endpoint_IsConfigured(); #else for (uint8_t EPNum = Number; EPNum < ENDPOINT_TOTAL_ENDPOINTS; EPNum++) - b4a: 9f 5f subi r25, 0xFF ; 255 - b4c: 95 30 cpi r25, 0x05 ; 5 - b4e: 90 f2 brcs .-92 ; 0xaf4 + d58: 9f 5f subi r25, 0xFF ; 255 + d5a: 95 30 cpi r25, 0x05 ; 5 + d5c: 90 f2 brcs .-92 ; 0xd02 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - b50: 8f 70 andi r24, 0x0F ; 15 - b52: 80 93 e9 00 sts 0x00E9, r24 + d5e: 8f 70 andi r24, 0x0F ; 15 + d60: 80 93 e9 00 sts 0x00E9, r24 if (!(Endpoint_IsConfigured())) return false; } Endpoint_SelectEndpoint(Number); return true; - b56: 81 e0 ldi r24, 0x01 ; 1 - b58: 08 95 ret + d64: 81 e0 ldi r24, 0x01 ; 1 + d66: 08 95 ret UECFG0X = UECFG0XTemp; UECFG1X = UECFG1XTemp; UEIENX = UEIENXTemp; if (!(Endpoint_IsConfigured())) return false; - b5a: 80 e0 ldi r24, 0x00 ; 0 + d68: 80 e0 ldi r24, 0x00 ; 0 } Endpoint_SelectEndpoint(Number); return true; #endif } - b5c: 08 95 ret + d6a: 08 95 ret -00000b5e : +00000d6c : uint8_t USB_Device_ControlEndpointSize = ENDPOINT_CONTROLEP_DEFAULT_SIZE; #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { - b5e: ef 92 push r14 - b60: ff 92 push r15 - b62: 0f 93 push r16 - b64: 1f 93 push r17 - b66: cf 93 push r28 - b68: df 93 push r29 - b6a: 16 2f mov r17, r22 + d6c: ef 92 push r14 + d6e: ff 92 push r15 + d70: 0f 93 push r16 + d72: 1f 93 push r17 + d74: cf 93 push r28 + d76: df 93 push r29 + d78: 16 2f mov r17, r22 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - b6c: e8 2e mov r14, r24 - b6e: e7 01 movw r28, r14 - b70: 7e 01 movw r14, r28 - b72: f9 2e mov r15, r25 - b74: e7 01 movw r28, r14 + d7a: e8 2e mov r14, r24 + d7c: e7 01 movw r28, r14 + d7e: 7e 01 movw r14, r28 + d80: f9 2e mov r15, r25 + d82: e7 01 movw r28, r14 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - b76: 00 e0 ldi r16, 0x00 ; 0 - b78: 2a c0 rjmp .+84 ; 0xbce + d84: 00 e0 ldi r16, 0x00 ; 0 + d86: 2a c0 rjmp .+84 ; 0xddc { if (!(Table[i].Address)) - b7a: 98 81 ld r25, Y - b7c: 99 23 and r25, r25 - b7e: 29 f1 breq .+74 ; 0xbca + d88: 98 81 ld r25, Y + d8a: 99 23 and r25, r25 + d8c: 29 f1 breq .+74 ; 0xdd8 continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) - b80: 6b 81 ldd r22, Y+3 ; 0x03 - b82: e9 81 ldd r30, Y+1 ; 0x01 - b84: fa 81 ldd r31, Y+2 ; 0x02 - b86: 2c 81 ldd r18, Y+4 ; 0x04 + d8e: 6b 81 ldd r22, Y+3 ; 0x03 + d90: e9 81 ldd r30, Y+1 ; 0x01 + d92: fa 81 ldd r31, Y+2 ; 0x02 + d94: 2c 81 ldd r18, Y+4 ; 0x04 static inline bool Endpoint_ConfigureEndpoint(const uint8_t Address, const uint8_t Type, const uint16_t Size, const uint8_t Banks) { uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); - b88: 89 2f mov r24, r25 - b8a: 8f 70 andi r24, 0x0F ; 15 + d96: 89 2f mov r24, r25 + d98: 8f 70 andi r24, 0x0F ; 15 if (Number >= ENDPOINT_TOTAL_ENDPOINTS) - b8c: 85 30 cpi r24, 0x05 ; 5 - b8e: 18 f5 brcc .+70 ; 0xbd6 + d9a: 85 30 cpi r24, 0x05 ; 5 + d9c: 18 f5 brcc .+70 ; 0xde4 return false; return Endpoint_ConfigureEndpoint_Prv(Number, ((Type << EPTYPE0) | ((Address & ENDPOINT_DIR_IN) ? (1 << EPDIR) : 0)), - b90: 62 95 swap r22 - b92: 66 0f add r22, r22 - b94: 66 0f add r22, r22 - b96: 60 7c andi r22, 0xC0 ; 192 - b98: 99 1f adc r25, r25 - b9a: 99 27 eor r25, r25 - b9c: 99 1f adc r25, r25 + d9e: 62 95 swap r22 + da0: 66 0f add r22, r22 + da2: 66 0f add r22, r22 + da4: 60 7c andi r22, 0xC0 ; 192 + da6: 99 1f adc r25, r25 + da8: 99 27 eor r25, r25 + daa: 99 1f adc r25, r25 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - b9e: 69 2b or r22, r25 - ba0: 22 30 cpi r18, 0x02 ; 2 - ba2: 10 f0 brcs .+4 ; 0xba8 - ba4: 96 e0 ldi r25, 0x06 ; 6 - ba6: 01 c0 rjmp .+2 ; 0xbaa - ba8: 92 e0 ldi r25, 0x02 ; 2 + dac: 69 2b or r22, r25 + dae: 22 30 cpi r18, 0x02 ; 2 + db0: 10 f0 brcs .+4 ; 0xdb6 + db2: 96 e0 ldi r25, 0x06 ; 6 + db4: 01 c0 rjmp .+2 ; 0xdb8 + db6: 92 e0 ldi r25, 0x02 ; 2 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; - baa: 28 e0 ldi r18, 0x08 ; 8 - bac: 30 e0 ldi r19, 0x00 ; 0 + db8: 28 e0 ldi r18, 0x08 ; 8 + dba: 30 e0 ldi r19, 0x00 ; 0 /* Inline Functions: */ static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) ATTR_WARN_UNUSED_RESULT ATTR_CONST ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; - bae: 40 e0 ldi r20, 0x00 ; 0 - bb0: 03 c0 rjmp .+6 ; 0xbb8 + dbc: 40 e0 ldi r20, 0x00 ; 0 + dbe: 03 c0 rjmp .+6 ; 0xdc6 uint16_t CheckBytes = 8; while (CheckBytes < Bytes) { MaskVal++; - bb2: 4f 5f subi r20, 0xFF ; 255 + dc0: 4f 5f subi r20, 0xFF ; 255 CheckBytes <<= 1; - bb4: 22 0f add r18, r18 - bb6: 33 1f adc r19, r19 + dc2: 22 0f add r18, r18 + dc4: 33 1f adc r19, r19 static inline uint8_t Endpoint_BytesToEPSizeMask(const uint16_t Bytes) { uint8_t MaskVal = 0; uint16_t CheckBytes = 8; while (CheckBytes < Bytes) - bb8: 2e 17 cp r18, r30 - bba: 3f 07 cpc r19, r31 - bbc: d0 f3 brcs .-12 ; 0xbb2 + dc6: 2e 17 cp r18, r30 + dc8: 3f 07 cpc r19, r31 + dca: d0 f3 brcs .-12 ; 0xdc0 { MaskVal++; CheckBytes <<= 1; } return (MaskVal << EPSIZE0); - bbe: 42 95 swap r20 - bc0: 40 7f andi r20, 0xF0 ; 240 + dcc: 42 95 swap r20 + dce: 40 7f andi r20, 0xF0 ; 240 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - bc2: 49 2b or r20, r25 - bc4: 95 df rcall .-214 ; 0xaf0 - bc6: 88 23 and r24, r24 - bc8: 31 f0 breq .+12 ; 0xbd6 + dd0: 49 2b or r20, r25 + dd2: 95 df rcall .-214 ; 0xcfe + dd4: 88 23 and r24, r24 + dd6: 31 f0 breq .+12 ; 0xde4 #endif bool Endpoint_ConfigureEndpointTable(const USB_Endpoint_Table_t* const Table, const uint8_t Entries) { for (uint8_t i = 0; i < Entries; i++) - bca: 0f 5f subi r16, 0xFF ; 255 - bcc: 25 96 adiw r28, 0x05 ; 5 - bce: 01 17 cp r16, r17 - bd0: a0 f2 brcs .-88 ; 0xb7a + dd8: 0f 5f subi r16, 0xFF ; 255 + dda: 25 96 adiw r28, 0x05 ; 5 + ddc: 01 17 cp r16, r17 + dde: a0 f2 brcs .-88 ; 0xd88 if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; } return true; - bd2: 81 e0 ldi r24, 0x01 ; 1 - bd4: 01 c0 rjmp .+2 ; 0xbd8 + de0: 81 e0 ldi r24, 0x01 ; 1 + de2: 01 c0 rjmp .+2 ; 0xde6 { if (!(Table[i].Address)) continue; if (!(Endpoint_ConfigureEndpoint(Table[i].Address, Table[i].Type, Table[i].Size, Table[i].Banks))) return false; - bd6: 80 e0 ldi r24, 0x00 ; 0 + de4: 80 e0 ldi r24, 0x00 ; 0 } return true; } - bd8: df 91 pop r29 - bda: cf 91 pop r28 - bdc: 1f 91 pop r17 - bde: 0f 91 pop r16 - be0: ff 90 pop r15 - be2: ef 90 pop r14 - be4: 08 95 ret - -00000be6 : + de6: df 91 pop r29 + de8: cf 91 pop r28 + dea: 1f 91 pop r17 + dec: 0f 91 pop r16 + dee: ff 90 pop r15 + df0: ef 90 pop r14 + df2: 08 95 ret + +00000df4 : } } void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) - be6: 80 91 8f 02 lds r24, 0x028F - bea: 87 ff sbrs r24, 7 - bec: 13 c0 rjmp .+38 ; 0xc14 - bee: 04 c0 rjmp .+8 ; 0xbf8 + df4: 80 91 9c 02 lds r24, 0x029C + df8: 87 ff sbrs r24, 7 + dfa: 11 c0 rjmp .+34 ; 0xe1e + dfc: 03 c0 rjmp .+6 ; 0xe04 { while (!(Endpoint_IsOUTReceived())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - bf0: 80 91 8e 02 lds r24, 0x028E - bf4: 88 23 and r24, r24 - bf6: b9 f0 breq .+46 ; 0xc26 + dfe: 8e b3 in r24, 0x1e ; 30 + e00: 88 23 and r24, r24 + e02: b1 f0 breq .+44 ; 0xe30 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - bf8: 80 91 e8 00 lds r24, 0x00E8 + e04: 80 91 e8 00 lds r24, 0x00E8 void Endpoint_ClearStatusStage(void) { if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) { while (!(Endpoint_IsOUTReceived())) - bfc: 82 ff sbrs r24, 2 - bfe: f8 cf rjmp .-16 ; 0xbf0 + e08: 82 ff sbrs r24, 2 + e0a: f9 cf rjmp .-14 ; 0xdfe */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - c00: 80 91 e8 00 lds r24, 0x00E8 - c04: 8b 77 andi r24, 0x7B ; 123 - c06: 80 93 e8 00 sts 0x00E8, r24 - c0a: 08 95 ret + e0c: 80 91 e8 00 lds r24, 0x00E8 + e10: 8b 77 andi r24, 0x7B ; 123 + e12: 80 93 e8 00 sts 0x00E8, r24 + e16: 08 95 ret } else { while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) - c0c: 80 91 8e 02 lds r24, 0x028E - c10: 88 23 and r24, r24 - c12: 49 f0 breq .+18 ; 0xc26 + e18: 8e b3 in r24, 0x1e ; 30 + e1a: 88 23 and r24, r24 + e1c: 49 f0 breq .+18 ; 0xe30 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - c14: 80 91 e8 00 lds r24, 0x00E8 + e1e: 80 91 e8 00 lds r24, 0x00E8 Endpoint_ClearOUT(); } else { while (!(Endpoint_IsINReady())) - c18: 80 ff sbrs r24, 0 - c1a: f8 cf rjmp .-16 ; 0xc0c + e22: 80 ff sbrs r24, 0 + e24: f9 cf rjmp .-14 ; 0xe18 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - c1c: 80 91 e8 00 lds r24, 0x00E8 - c20: 8e 77 andi r24, 0x7E ; 126 - c22: 80 93 e8 00 sts 0x00E8, r24 - c26: 08 95 ret + e26: 80 91 e8 00 lds r24, 0x00E8 + e2a: 8e 77 andi r24, 0x7E ; 126 + e2c: 80 93 e8 00 sts 0x00E8, r24 + e30: 08 95 ret -00000c28 : +00000e32 : * \return Current USB frame number from the USB controller. */ static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint16_t USB_Device_GetFrameNumber(void) { return UDFNUM; - c28: 80 91 e4 00 lds r24, 0x00E4 - c2c: 90 91 e5 00 lds r25, 0x00E5 + e32: 80 91 e4 00 lds r24, 0x00E4 + e36: 90 91 e5 00 lds r25, 0x00E5 #if !defined(CONTROL_ONLY_DEVICE) uint8_t Endpoint_WaitUntilReady(void) { #if (USB_STREAM_TIMEOUT_MS < 0xFF) uint8_t TimeoutMSRem = USB_STREAM_TIMEOUT_MS; - c30: 44 e6 ldi r20, 0x64 ; 100 + e3a: 44 e6 ldi r20, 0x64 ; 100 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - c32: 20 91 ec 00 lds r18, 0x00EC - c36: 20 ff sbrs r18, 0 - c38: 26 c0 rjmp .+76 ; 0xc86 + e3c: 20 91 ec 00 lds r18, 0x00EC + e40: 20 ff sbrs r18, 0 + e42: 25 c0 rjmp .+74 ; 0xe8e * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - c3a: 20 91 e8 00 lds r18, 0x00E8 + e44: 20 91 e8 00 lds r18, 0x00E8 for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) - c3e: 20 fd sbrc r18, 0 - c40: 16 c0 rjmp .+44 ; 0xc6e + e48: 20 fd sbrc r18, 0 + e4a: 15 c0 rjmp .+42 ; 0xe76 { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; } uint8_t USB_DeviceState_LCL = USB_DeviceState; - c42: 20 91 8e 02 lds r18, 0x028E + e4c: 2e b3 in r18, 0x1e ; 30 if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) - c46: 22 23 and r18, r18 - c48: a1 f0 breq .+40 ; 0xc72 + e4e: 22 23 and r18, r18 + e50: a1 f0 breq .+40 ; 0xe7a return ENDPOINT_READYWAIT_DeviceDisconnected; else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) - c4a: 25 30 cpi r18, 0x05 ; 5 - c4c: a1 f0 breq .+40 ; 0xc76 + e52: 25 30 cpi r18, 0x05 ; 5 + e54: a1 f0 breq .+40 ; 0xe7e * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - c4e: 20 91 eb 00 lds r18, 0x00EB + e56: 20 91 eb 00 lds r18, 0x00EB return ENDPOINT_READYWAIT_BusSuspended; else if (Endpoint_IsStalled()) - c52: 25 fd sbrc r18, 5 - c54: 12 c0 rjmp .+36 ; 0xc7a - c56: 20 91 e4 00 lds r18, 0x00E4 - c5a: 30 91 e5 00 lds r19, 0x00E5 + e5a: 25 fd sbrc r18, 5 + e5c: 12 c0 rjmp .+36 ; 0xe82 + e5e: 20 91 e4 00 lds r18, 0x00E4 + e62: 30 91 e5 00 lds r19, 0x00E5 return ENDPOINT_READYWAIT_EndpointStalled; uint16_t CurrentFrameNumber = USB_Device_GetFrameNumber(); if (CurrentFrameNumber != PreviousFrameNumber) - c5e: 28 17 cp r18, r24 - c60: 39 07 cpc r19, r25 - c62: 39 f3 breq .-50 ; 0xc32 + e66: 28 17 cp r18, r24 + e68: 39 07 cpc r19, r25 + e6a: 41 f3 breq .-48 ; 0xe3c { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) - c64: 44 23 and r20, r20 - c66: 59 f0 breq .+22 ; 0xc7e - c68: 41 50 subi r20, 0x01 ; 1 - c6a: c9 01 movw r24, r18 - c6c: e2 cf rjmp .-60 ; 0xc32 + e6c: 44 23 and r20, r20 + e6e: 59 f0 breq .+22 ; 0xe86 + e70: 41 50 subi r20, 0x01 ; 1 + e72: c9 01 movw r24, r18 + e74: e3 cf rjmp .-58 ; 0xe3c for (;;) { if (Endpoint_GetEndpointDirection() == ENDPOINT_DIR_IN) { if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; - c6e: 80 e0 ldi r24, 0x00 ; 0 - c70: 08 95 ret + e76: 80 e0 ldi r24, 0x00 ; 0 + e78: 08 95 ret } uint8_t USB_DeviceState_LCL = USB_DeviceState; if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) return ENDPOINT_READYWAIT_DeviceDisconnected; - c72: 82 e0 ldi r24, 0x02 ; 2 - c74: 08 95 ret + e7a: 82 e0 ldi r24, 0x02 ; 2 + e7c: 08 95 ret else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) return ENDPOINT_READYWAIT_BusSuspended; - c76: 83 e0 ldi r24, 0x03 ; 3 - c78: 08 95 ret + e7e: 83 e0 ldi r24, 0x03 ; 3 + e80: 08 95 ret else if (Endpoint_IsStalled()) return ENDPOINT_READYWAIT_EndpointStalled; - c7a: 81 e0 ldi r24, 0x01 ; 1 - c7c: 08 95 ret + e82: 81 e0 ldi r24, 0x01 ; 1 + e84: 08 95 ret if (CurrentFrameNumber != PreviousFrameNumber) { PreviousFrameNumber = CurrentFrameNumber; if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; - c7e: 84 e0 ldi r24, 0x04 ; 4 - c80: 08 95 ret + e86: 84 e0 ldi r24, 0x04 ; 4 + e88: 08 95 ret return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) return ENDPOINT_READYWAIT_NoError; - c82: 80 e0 ldi r24, 0x00 ; 0 + e8a: 80 e0 ldi r24, 0x00 ; 0 if (!(TimeoutMSRem--)) return ENDPOINT_READYWAIT_Timeout; } } } - c84: 08 95 ret + e8c: 08 95 ret * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - c86: 20 91 e8 00 lds r18, 0x00E8 + e8e: 20 91 e8 00 lds r18, 0x00E8 if (Endpoint_IsINReady()) return ENDPOINT_READYWAIT_NoError; } else { if (Endpoint_IsOUTReceived()) - c8a: 22 ff sbrs r18, 2 - c8c: da cf rjmp .-76 ; 0xc42 - c8e: f9 cf rjmp .-14 ; 0xc82 + e92: 22 ff sbrs r18, 2 + e94: db cf rjmp .-74 ; 0xe4c + e96: f9 cf rjmp .-14 ; 0xe8a -00000c90 : +00000e98 : { #if defined(USB_CAN_BE_BOTH) bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); #endif USB_INT_DisableAllInterrupts(); - c90: 41 d0 rcall .+130 ; 0xd14 + e98: 40 d0 rcall .+128 ; 0xf1a USB_INT_ClearAllInterrupts(); - c92: 43 d0 rcall .+134 ; 0xd1a + e9a: 42 d0 rcall .+132 ; 0xf20 } static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; static inline void USB_Controller_Reset(void) { USBCON &= ~(1 << USBE); - c94: 80 91 d8 00 lds r24, 0x00D8 - c98: 8f 77 andi r24, 0x7F ; 127 - c9a: 80 93 d8 00 sts 0x00D8, r24 + e9c: 80 91 d8 00 lds r24, 0x00D8 + ea0: 8f 77 andi r24, 0x7F ; 127 + ea2: 80 93 d8 00 sts 0x00D8, r24 USBCON |= (1 << USBE); - c9e: 80 91 d8 00 lds r24, 0x00D8 - ca2: 80 68 ori r24, 0x80 ; 128 - ca4: 80 93 d8 00 sts 0x00D8, r24 + ea6: 80 91 d8 00 lds r24, 0x00D8 + eaa: 80 68 ori r24, 0x80 ; 128 + eac: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - ca8: 80 91 d8 00 lds r24, 0x00D8 - cac: 8f 7d andi r24, 0xDF ; 223 - cae: 80 93 d8 00 sts 0x00D8, r24 + eb0: 80 91 d8 00 lds r24, 0x00D8 + eb4: 8f 7d andi r24, 0xDF ; 223 + eb6: 80 93 d8 00 sts 0x00D8, r24 /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - cb2: 84 e0 ldi r24, 0x04 ; 4 - cb4: 89 bd out 0x29, r24 ; 41 + eba: 84 e0 ldi r24, 0x04 ; 4 + ebc: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - cb6: 86 e0 ldi r24, 0x06 ; 6 - cb8: 89 bd out 0x29, r24 ; 41 + ebe: 86 e0 ldi r24, 0x06 ; 6 + ec0: 89 bd out 0x29, r24 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) { #if defined(USB_SERIES_2_AVR) USB_PLL_On(); while (!(USB_PLL_IsReady())); - cba: 09 b4 in r0, 0x29 ; 41 - cbc: 00 fe sbrs r0, 0 - cbe: fd cf rjmp .-6 ; 0xcba + ec2: 09 b4 in r0, 0x29 ; 41 + ec4: 00 fe sbrs r0, 0 + ec6: fd cf rjmp .-6 ; 0xec2 } #if defined(USB_CAN_BE_DEVICE) static void USB_Init_Device(void) { USB_DeviceState = DEVICE_STATE_Unattached; - cc0: 10 92 8e 02 sts 0x028E, r1 + ec8: 1e ba out 0x1e, r1 ; 30 USB_Device_ConfigurationNumber = 0; - cc4: 10 92 8a 02 sts 0x028A, r1 + eca: 10 92 98 02 sts 0x0298, r1 #if !defined(NO_DEVICE_REMOTE_WAKEUP) USB_Device_RemoteWakeupEnabled = false; - cc8: 10 92 8c 02 sts 0x028C, r1 + ece: 10 92 9a 02 sts 0x029A, r1 #endif #if !defined(NO_DEVICE_SELF_POWER) USB_Device_CurrentlySelfPowered = false; - ccc: 10 92 8b 02 sts 0x028B, r1 + ed2: 10 92 99 02 sts 0x0299, r1 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - cd0: 80 e0 ldi r24, 0x00 ; 0 - cd2: 60 e0 ldi r22, 0x00 ; 0 - cd4: 42 e0 ldi r20, 0x02 ; 2 - cd6: 0c df rcall .-488 ; 0xaf0 + ed6: 80 e0 ldi r24, 0x00 ; 0 + ed8: 60 e0 ldi r22, 0x00 ; 0 + eda: 42 e0 ldi r20, 0x02 ; 2 + edc: 10 df rcall .-480 ; 0xcfe #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - cd8: 80 91 e1 00 lds r24, 0x00E1 - cdc: 8e 7f andi r24, 0xFE ; 254 - cde: 80 93 e1 00 sts 0x00E1, r24 + ede: 80 91 e1 00 lds r24, 0x00E1 + ee2: 8e 7f andi r24, 0xFE ; 254 + ee4: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - ce2: 80 91 e2 00 lds r24, 0x00E2 - ce6: 81 60 ori r24, 0x01 ; 1 - ce8: 80 93 e2 00 sts 0x00E2, r24 + ee8: 80 91 e2 00 lds r24, 0x00E2 + eec: 81 60 ori r24, 0x01 ; 1 + eee: 80 93 e2 00 sts 0x00E2, r24 break; case USB_INT_EORSTI: UDIEN |= (1 << EORSTE); - cec: 80 91 e2 00 lds r24, 0x00E2 - cf0: 88 60 ori r24, 0x08 ; 8 - cf2: 80 93 e2 00 sts 0x00E2, r24 + ef2: 80 91 e2 00 lds r24, 0x00E2 + ef6: 88 60 ori r24, 0x08 ; 8 + ef8: 80 93 e2 00 sts 0x00E2, r24 * register and despite the datasheet making no mention of its requirement in host mode. */ static inline void USB_Attach(void) ATTR_ALWAYS_INLINE; static inline void USB_Attach(void) { UDCON &= ~(1 << DETACH); - cf6: 80 91 e0 00 lds r24, 0x00E0 - cfa: 8e 7f andi r24, 0xFE ; 254 - cfc: 80 93 e0 00 sts 0x00E0, r24 + efc: 80 91 e0 00 lds r24, 0x00E0 + f00: 8e 7f andi r24, 0xFE ; 254 + f02: 80 93 e0 00 sts 0x00E0, r24 } #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) USB_OTGPAD_On(); #endif } - d00: 08 95 ret + f06: 08 95 ret -00000d02 : +00000f08 : static inline void USB_REG_On(void) { #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) UHWCON |= (1 << UVREGE); #else REGCR &= ~(1 << REGDIS); - d02: e3 e6 ldi r30, 0x63 ; 99 - d04: f0 e0 ldi r31, 0x00 ; 0 - d06: 80 81 ld r24, Z - d08: 8e 7f andi r24, 0xFE ; 254 - d0a: 80 83 st Z, r24 + f08: e3 e6 ldi r30, 0x63 ; 99 + f0a: f0 e0 ldi r31, 0x00 ; 0 + f0c: 80 81 ld r24, Z + f0e: 8e 7f andi r24, 0xFE ; 254 + f10: 80 83 st Z, r24 UHWCON &= ~(1 << UIDE); USB_CurrentMode = Mode; } #endif USB_IsInitialized = true; - d0c: 81 e0 ldi r24, 0x01 ; 1 - d0e: 80 93 8d 02 sts 0x028D, r24 + f12: 81 e0 ldi r24, 0x01 ; 1 + f14: 80 93 9b 02 sts 0x029B, r24 USB_ResetInterface(); } - d12: be cf rjmp .-132 ; 0xc90 + f18: bf cf rjmp .-130 ; 0xe98 -00000d14 : +00000f1a : #if defined(USB_CAN_BE_HOST) UHIEN = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDIEN = 0; - d14: 10 92 e2 00 sts 0x00E2, r1 + f1a: 10 92 e2 00 sts 0x00E2, r1 #endif } - d18: 08 95 ret + f1e: 08 95 ret -00000d1a : +00000f20 : #if defined(USB_CAN_BE_HOST) UHINT = 0; #endif #if defined(USB_CAN_BE_DEVICE) UDINT = 0; - d1a: 10 92 e1 00 sts 0x00E1, r1 + f20: 10 92 e1 00 sts 0x00E1, r1 #endif } - d1e: 08 95 ret + f24: 08 95 ret -00000d20 <__vector_11>: +00000f26 <__vector_11>: ISR(USB_GEN_vect, ISR_BLOCK) { - d20: 1f 92 push r1 - d22: 0f 92 push r0 - d24: 0f b6 in r0, 0x3f ; 63 - d26: 0f 92 push r0 - d28: 11 24 eor r1, r1 - d2a: 2f 93 push r18 - d2c: 3f 93 push r19 - d2e: 4f 93 push r20 - d30: 5f 93 push r21 - d32: 6f 93 push r22 - d34: 7f 93 push r23 - d36: 8f 93 push r24 - d38: 9f 93 push r25 - d3a: af 93 push r26 - d3c: bf 93 push r27 - d3e: ef 93 push r30 - d40: ff 93 push r31 + f26: 1f 92 push r1 + f28: 0f 92 push r0 + f2a: 0f b6 in r0, 0x3f ; 63 + f2c: 0f 92 push r0 + f2e: 11 24 eor r1, r1 + f30: 2f 93 push r18 + f32: 3f 93 push r19 + f34: 4f 93 push r20 + f36: 5f 93 push r21 + f38: 6f 93 push r22 + f3a: 7f 93 push r23 + f3c: 8f 93 push r24 + f3e: 9f 93 push r25 + f40: af 93 push r26 + f42: bf 93 push r27 + f44: ef 93 push r30 + f46: ff 93 push r31 case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); case USB_INT_SOFI: return (UDINT & (1 << SOFI)); - d42: 80 91 e1 00 lds r24, 0x00E1 + f48: 80 91 e1 00 lds r24, 0x00E1 #if defined(USB_CAN_BE_DEVICE) #if !defined(NO_SOF_EVENTS) if (USB_INT_HasOccurred(USB_INT_SOFI) && USB_INT_IsEnabled(USB_INT_SOFI)) - d46: 82 ff sbrs r24, 2 - d48: 0a c0 rjmp .+20 ; 0xd5e <__vector_11+0x3e> + f4c: 82 ff sbrs r24, 2 + f4e: 0a c0 rjmp .+20 ; 0xf64 <__vector_11+0x3e> case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); case USB_INT_SOFI: return (UDIEN & (1 << SOFE)); - d4a: 80 91 e2 00 lds r24, 0x00E2 - d4e: 82 ff sbrs r24, 2 - d50: 06 c0 rjmp .+12 ; 0xd5e <__vector_11+0x3e> + f50: 80 91 e2 00 lds r24, 0x00E2 + f54: 82 ff sbrs r24, 2 + f56: 06 c0 rjmp .+12 ; 0xf64 <__vector_11+0x3e> break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); break; case USB_INT_SOFI: UDINT &= ~(1 << SOFI); - d52: 80 91 e1 00 lds r24, 0x00E1 - d56: 8b 7f andi r24, 0xFB ; 251 - d58: 80 93 e1 00 sts 0x00E1, r24 + f58: 80 91 e1 00 lds r24, 0x00E1 + f5c: 8b 7f andi r24, 0xFB ; 251 + f5e: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_SOFI); EVENT_USB_Device_StartOfFrame(); - d5c: e6 d1 rcall .+972 ; 0x112a + f62: 21 d2 rcall .+1090 ; 0x13a6 #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); - d5e: 80 91 e1 00 lds r24, 0x00E1 + f64: 80 91 e1 00 lds r24, 0x00E1 EVENT_USB_Device_Disconnect(); } } #endif if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) - d62: 80 ff sbrs r24, 0 - d64: 17 c0 rjmp .+46 ; 0xd94 <__vector_11+0x74> + f68: 80 ff sbrs r24, 0 + f6a: 16 c0 rjmp .+44 ; 0xf98 <__vector_11+0x72> #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); - d66: 80 91 e2 00 lds r24, 0x00E2 - d6a: 80 ff sbrs r24, 0 - d6c: 13 c0 rjmp .+38 ; 0xd94 <__vector_11+0x74> + f6c: 80 91 e2 00 lds r24, 0x00E2 + f70: 80 ff sbrs r24, 0 + f72: 12 c0 rjmp .+36 ; 0xf98 <__vector_11+0x72> #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - d6e: 80 91 e2 00 lds r24, 0x00E2 - d72: 8e 7f andi r24, 0xFE ; 254 - d74: 80 93 e2 00 sts 0x00E2, r24 + f74: 80 91 e2 00 lds r24, 0x00E2 + f78: 8e 7f andi r24, 0xFE ; 254 + f7a: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - d78: 80 91 e2 00 lds r24, 0x00E2 - d7c: 80 61 ori r24, 0x10 ; 16 - d7e: 80 93 e2 00 sts 0x00E2, r24 + f7e: 80 91 e2 00 lds r24, 0x00E2 + f82: 80 61 ori r24, 0x10 ; 16 + f84: 80 93 e2 00 sts 0x00E2, r24 #endif static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Freeze(void) { USBCON |= (1 << FRZCLK); - d82: 80 91 d8 00 lds r24, 0x00D8 - d86: 80 62 ori r24, 0x20 ; 32 - d88: 80 93 d8 00 sts 0x00D8, r24 + f88: 80 91 d8 00 lds r24, 0x00D8 + f8c: 80 62 ori r24, 0x20 ; 32 + f8e: 80 93 d8 00 sts 0x00D8, r24 } static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_Off(void) { PLLCSR = 0; - d8c: 19 bc out 0x29, r1 ; 41 + f92: 19 bc out 0x29, r1 ; 41 if (!(USB_Options & USB_OPT_MANUAL_PLL)) USB_PLL_Off(); #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) USB_DeviceState = DEVICE_STATE_Unattached; - d8e: 10 92 8e 02 sts 0x028E, r1 + f94: 1e ba out 0x1e, r1 ; 30 EVENT_USB_Device_Disconnect(); - d92: 36 dc rcall .-1940 ; 0x600 + f96: aa db rcall .-2220 ; 0x6ec case USB_INT_IDTI: return (USBINT & (1 << IDTI)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); - d94: 80 91 e1 00 lds r24, 0x00E1 + f98: 80 91 e1 00 lds r24, 0x00E1 USB_DeviceState = DEVICE_STATE_Suspended; EVENT_USB_Device_Suspend(); #endif } if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) - d98: 84 ff sbrs r24, 4 - d9a: 2d c0 rjmp .+90 ; 0xdf6 <__vector_11+0xd6> + f9c: 84 ff sbrs r24, 4 + f9e: 2c c0 rjmp .+88 ; 0xff8 <__vector_11+0xd2> case USB_INT_IDTI: return (USBCON & (1 << IDTE)); #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); - d9c: 80 91 e2 00 lds r24, 0x00E2 - da0: 84 ff sbrs r24, 4 - da2: 29 c0 rjmp .+82 ; 0xdf6 <__vector_11+0xd6> + fa0: 80 91 e2 00 lds r24, 0x00E2 + fa4: 84 ff sbrs r24, 4 + fa6: 28 c0 rjmp .+80 ; 0xff8 <__vector_11+0xd2> /* Inline Functions: */ static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; static inline void USB_PLL_On(void) { PLLCSR = USB_PLL_PSC; - da4: 84 e0 ldi r24, 0x04 ; 4 - da6: 89 bd out 0x29, r24 ; 41 + fa8: 84 e0 ldi r24, 0x04 ; 4 + faa: 89 bd out 0x29, r24 ; 41 PLLCSR = (USB_PLL_PSC | (1 << PLLE)); - da8: 86 e0 ldi r24, 0x06 ; 6 - daa: 89 bd out 0x29, r24 ; 41 + fac: 86 e0 ldi r24, 0x06 ; 6 + fae: 89 bd out 0x29, r24 ; 41 { if (!(USB_Options & USB_OPT_MANUAL_PLL)) { USB_PLL_On(); while (!(USB_PLL_IsReady())); - dac: 09 b4 in r0, 0x29 ; 41 - dae: 00 fe sbrs r0, 0 - db0: fd cf rjmp .-6 ; 0xdac <__vector_11+0x8c> + fb0: 09 b4 in r0, 0x29 ; 41 + fb2: 00 fe sbrs r0, 0 + fb4: fd cf rjmp .-6 ; 0xfb0 <__vector_11+0x8a> } static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; static inline void USB_CLK_Unfreeze(void) { USBCON &= ~(1 << FRZCLK); - db2: 80 91 d8 00 lds r24, 0x00D8 - db6: 8f 7d andi r24, 0xDF ; 223 - db8: 80 93 d8 00 sts 0x00D8, r24 + fb6: 80 91 d8 00 lds r24, 0x00D8 + fba: 8f 7d andi r24, 0xDF ; 223 + fbc: 80 93 d8 00 sts 0x00D8, r24 USBINT &= ~(1 << IDTI); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); - dbc: 80 91 e1 00 lds r24, 0x00E1 - dc0: 8f 7e andi r24, 0xEF ; 239 - dc2: 80 93 e1 00 sts 0x00E1, r24 + fc0: 80 91 e1 00 lds r24, 0x00E1 + fc4: 8f 7e andi r24, 0xEF ; 239 + fc6: 80 93 e1 00 sts 0x00E1, r24 USBCON &= ~(1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); - dc6: 80 91 e2 00 lds r24, 0x00E2 - dca: 8f 7e andi r24, 0xEF ; 239 - dcc: 80 93 e2 00 sts 0x00E2, r24 + fca: 80 91 e2 00 lds r24, 0x00E2 + fce: 8f 7e andi r24, 0xEF ; 239 + fd0: 80 93 e2 00 sts 0x00E2, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN |= (1 << SUSPE); - dd0: 80 91 e2 00 lds r24, 0x00E2 - dd4: 81 60 ori r24, 0x01 ; 1 - dd6: 80 93 e2 00 sts 0x00E2, r24 + fd4: 80 91 e2 00 lds r24, 0x00E2 + fd8: 81 60 ori r24, 0x01 ; 1 + fda: 80 93 e2 00 sts 0x00E2, r24 USB_INT_Clear(USB_INT_WAKEUPI); USB_INT_Disable(USB_INT_WAKEUPI); USB_INT_Enable(USB_INT_SUSPI); if (USB_Device_ConfigurationNumber) - dda: 80 91 8a 02 lds r24, 0x028A - dde: 88 23 and r24, r24 - de0: 21 f4 brne .+8 ; 0xdea <__vector_11+0xca> + fde: 80 91 98 02 lds r24, 0x0298 + fe2: 88 23 and r24, r24 + fe4: 21 f4 brne .+8 ; 0xfee <__vector_11+0xc8> } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - de2: 80 91 e3 00 lds r24, 0x00E3 + fe6: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - de6: 87 ff sbrs r24, 7 - de8: 02 c0 rjmp .+4 ; 0xdee <__vector_11+0xce> - dea: 84 e0 ldi r24, 0x04 ; 4 - dec: 01 c0 rjmp .+2 ; 0xdf0 <__vector_11+0xd0> - dee: 81 e0 ldi r24, 0x01 ; 1 - df0: 80 93 8e 02 sts 0x028E, r24 + fea: 87 ff sbrs r24, 7 + fec: 02 c0 rjmp .+4 ; 0xff2 <__vector_11+0xcc> + fee: 84 e0 ldi r24, 0x04 ; 4 + ff0: 01 c0 rjmp .+2 ; 0xff4 <__vector_11+0xce> + ff2: 81 e0 ldi r24, 0x01 ; 1 + ff4: 8e bb out 0x1e, r24 ; 30 #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) EVENT_USB_Device_Connect(); - df4: 04 dc rcall .-2040 ; 0x5fe + ff6: 79 db rcall .-2318 ; 0x6ea case USB_INT_WAKEUPI: return (UDINT & (1 << WAKEUPI)); case USB_INT_SUSPI: return (UDINT & (1 << SUSPI)); case USB_INT_EORSTI: return (UDINT & (1 << EORSTI)); - df6: 80 91 e1 00 lds r24, 0x00E1 + ff8: 80 91 e1 00 lds r24, 0x00E1 #else EVENT_USB_Device_WakeUp(); #endif } if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) - dfa: 83 ff sbrs r24, 3 - dfc: 22 c0 rjmp .+68 ; 0xe42 <__vector_11+0x122> + ffc: 83 ff sbrs r24, 3 + ffe: 26 c0 rjmp .+76 ; 0x104c <__vector_11+0x126> case USB_INT_WAKEUPI: return (UDIEN & (1 << WAKEUPE)); case USB_INT_SUSPI: return (UDIEN & (1 << SUSPE)); case USB_INT_EORSTI: return (UDIEN & (1 << EORSTE)); - dfe: 80 91 e2 00 lds r24, 0x00E2 - e02: 83 ff sbrs r24, 3 - e04: 1e c0 rjmp .+60 ; 0xe42 <__vector_11+0x122> + 1000: 80 91 e2 00 lds r24, 0x00E2 + 1004: 83 ff sbrs r24, 3 + 1006: 22 c0 rjmp .+68 ; 0x104c <__vector_11+0x126> break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); break; case USB_INT_EORSTI: UDINT &= ~(1 << EORSTI); - e06: 80 91 e1 00 lds r24, 0x00E1 - e0a: 87 7f andi r24, 0xF7 ; 247 - e0c: 80 93 e1 00 sts 0x00E1, r24 + 1008: 80 91 e1 00 lds r24, 0x00E1 + 100c: 87 7f andi r24, 0xF7 ; 247 + 100e: 80 93 e1 00 sts 0x00E1, r24 { USB_INT_Clear(USB_INT_EORSTI); USB_DeviceState = DEVICE_STATE_Default; - e10: 82 e0 ldi r24, 0x02 ; 2 - e12: 80 93 8e 02 sts 0x028E, r24 + 1012: 82 e0 ldi r24, 0x02 ; 2 + 1014: 8e bb out 0x1e, r24 ; 30 USB_Device_ConfigurationNumber = 0; - e16: 10 92 8a 02 sts 0x028A, r1 + 1016: 10 92 98 02 sts 0x0298, r1 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDINT &= ~(1 << WAKEUPI); break; case USB_INT_SUSPI: UDINT &= ~(1 << SUSPI); - e1a: 80 91 e1 00 lds r24, 0x00E1 - e1e: 8e 7f andi r24, 0xFE ; 254 - e20: 80 93 e1 00 sts 0x00E1, r24 + 101a: 80 91 e1 00 lds r24, 0x00E1 + 101e: 8e 7f andi r24, 0xFE ; 254 + 1020: 80 93 e1 00 sts 0x00E1, r24 #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN &= ~(1 << WAKEUPE); break; case USB_INT_SUSPI: UDIEN &= ~(1 << SUSPE); - e24: 80 91 e2 00 lds r24, 0x00E2 - e28: 8e 7f andi r24, 0xFE ; 254 - e2a: 80 93 e2 00 sts 0x00E2, r24 + 1024: 80 91 e2 00 lds r24, 0x00E2 + 1028: 8e 7f andi r24, 0xFE ; 254 + 102a: 80 93 e2 00 sts 0x00E2, r24 USBCON |= (1 << IDTE); break; #endif #if defined(USB_CAN_BE_DEVICE) case USB_INT_WAKEUPI: UDIEN |= (1 << WAKEUPE); - e2e: 80 91 e2 00 lds r24, 0x00E2 - e32: 80 61 ori r24, 0x10 ; 16 - e34: 80 93 e2 00 sts 0x00E2, r24 + 102e: 80 91 e2 00 lds r24, 0x00E2 + 1032: 80 61 ori r24, 0x10 ; 16 + 1034: 80 93 e2 00 sts 0x00E2, r24 uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); if (Number >= ENDPOINT_TOTAL_ENDPOINTS) return false; return Endpoint_ConfigureEndpoint_Prv(Number, - e38: 80 e0 ldi r24, 0x00 ; 0 - e3a: 60 e0 ldi r22, 0x00 ; 0 - e3c: 42 e0 ldi r20, 0x02 ; 2 - e3e: 58 de rcall .-848 ; 0xaf0 + 1038: 80 e0 ldi r24, 0x00 ; 0 + 103a: 60 e0 ldi r22, 0x00 ; 0 + 103c: 42 e0 ldi r20, 0x02 ; 2 + 103e: 5f de rcall .-834 ; 0xcfe + break; + case USB_INT_SOFI: + UDIEN |= (1 << SOFE); + break; + case USB_INT_RXSTPI: + UEIENX |= (1 << RXSTPE); + 1040: 80 91 f0 00 lds r24, 0x00F0 + 1044: 88 60 ori r24, 0x08 ; 8 + 1046: 80 93 f0 00 sts 0x00F0, r24 #if defined(INTERRUPT_CONTROL_ENDPOINT) USB_INT_Enable(USB_INT_RXSTPI); #endif EVENT_USB_Device_Reset(); - e40: 74 d1 rcall .+744 ; 0x112a + 104a: ad d1 rcall .+858 ; 0x13a6 USB_ResetInterface(); EVENT_USB_UIDChange(); } #endif } - e42: ff 91 pop r31 - e44: ef 91 pop r30 - e46: bf 91 pop r27 - e48: af 91 pop r26 - e4a: 9f 91 pop r25 - e4c: 8f 91 pop r24 - e4e: 7f 91 pop r23 - e50: 6f 91 pop r22 - e52: 5f 91 pop r21 - e54: 4f 91 pop r20 - e56: 3f 91 pop r19 - e58: 2f 91 pop r18 - e5a: 0f 90 pop r0 - e5c: 0f be out 0x3f, r0 ; 63 - e5e: 0f 90 pop r0 - e60: 1f 90 pop r1 - e62: 18 95 reti - -00000e64 : + 104c: ff 91 pop r31 + 104e: ef 91 pop r30 + 1050: bf 91 pop r27 + 1052: af 91 pop r26 + 1054: 9f 91 pop r25 + 1056: 8f 91 pop r24 + 1058: 7f 91 pop r23 + 105a: 6f 91 pop r22 + 105c: 5f 91 pop r21 + 105e: 4f 91 pop r20 + 1060: 3f 91 pop r19 + 1062: 2f 91 pop r18 + 1064: 0f 90 pop r0 + 1066: 0f be out 0x3f, r0 ; 63 + 1068: 0f 90 pop r0 + 106a: 1f 90 pop r1 + 106c: 18 95 reti + +0000106e <__vector_12>: + +#if defined(INTERRUPT_CONTROL_ENDPOINT) && defined(USB_CAN_BE_DEVICE) +ISR(USB_COM_vect, ISR_BLOCK) +{ + 106e: 1f 92 push r1 + 1070: 0f 92 push r0 + 1072: 0f b6 in r0, 0x3f ; 63 + 1074: 0f 92 push r0 + 1076: 11 24 eor r1, r1 + 1078: 1f 93 push r17 + 107a: 2f 93 push r18 + 107c: 3f 93 push r19 + 107e: 4f 93 push r20 + 1080: 5f 93 push r21 + 1082: 6f 93 push r22 + 1084: 7f 93 push r23 + 1086: 8f 93 push r24 + 1088: 9f 93 push r25 + 108a: af 93 push r26 + 108c: bf 93 push r27 + 108e: ef 93 push r30 + 1090: ff 93 push r31 + */ + static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_GetCurrentEndpoint(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); + 1092: 10 91 e9 00 lds r17, 0x00E9 + 1096: 1f 70 andi r17, 0x0F ; 15 + * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. + */ + static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_GetEndpointDirection(void) + { + return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; + 1098: 80 91 ec 00 lds r24, 0x00EC + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 109c: 10 92 e9 00 sts 0x00E9, r1 + break; + case USB_INT_SOFI: + UDIEN &= ~(1 << SOFE); + break; + case USB_INT_RXSTPI: + UEIENX &= ~(1 << RXSTPE); + 10a0: 80 91 f0 00 lds r24, 0x00F0 + 10a4: 87 7f andi r24, 0xF7 ; 247 + 10a6: 80 93 f0 00 sts 0x00F0, r24 + static inline void GlobalInterruptEnable(void) + { + GCC_MEMORY_BARRIER(); + + #if (ARCH == ARCH_AVR8) + sei(); + 10aa: 78 94 sei + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); + USB_INT_Disable(USB_INT_RXSTPI); + + GlobalInterruptEnable(); + + USB_Device_ProcessControlRequest(); + 10ac: 1b d0 rcall .+54 ; 0x10e4 + 10ae: 10 92 e9 00 sts 0x00E9, r1 + break; + case USB_INT_SOFI: + UDIEN |= (1 << SOFE); + break; + case USB_INT_RXSTPI: + UEIENX |= (1 << RXSTPE); + 10b2: 80 91 f0 00 lds r24, 0x00F0 + 10b6: 88 60 ori r24, 0x08 ; 8 + 10b8: 80 93 f0 00 sts 0x00F0, r24 + 10bc: 10 93 e9 00 sts 0x00E9, r17 + + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); + USB_INT_Enable(USB_INT_RXSTPI); + Endpoint_SelectEndpoint(PrevSelectedEndpoint); +} + 10c0: ff 91 pop r31 + 10c2: ef 91 pop r30 + 10c4: bf 91 pop r27 + 10c6: af 91 pop r26 + 10c8: 9f 91 pop r25 + 10ca: 8f 91 pop r24 + 10cc: 7f 91 pop r23 + 10ce: 6f 91 pop r22 + 10d0: 5f 91 pop r21 + 10d2: 4f 91 pop r20 + 10d4: 3f 91 pop r19 + 10d6: 2f 91 pop r18 + 10d8: 1f 91 pop r17 + 10da: 0f 90 pop r0 + 10dc: 0f be out 0x3f, r0 ; 63 + 10de: 0f 90 pop r0 + 10e0: 1f 90 pop r1 + 10e2: 18 95 reti + +000010e4 : #if !defined(NO_DEVICE_REMOTE_WAKEUP) bool USB_Device_RemoteWakeupEnabled; #endif void USB_Device_ProcessControlRequest(void) { - e64: 1f 93 push r17 - e66: df 93 push r29 - e68: cf 93 push r28 - e6a: cd b7 in r28, 0x3d ; 61 - e6c: de b7 in r29, 0x3e ; 62 - e6e: ac 97 sbiw r28, 0x2c ; 44 - e70: 0f b6 in r0, 0x3f ; 63 - e72: f8 94 cli - e74: de bf out 0x3e, r29 ; 62 - e76: 0f be out 0x3f, r0 ; 63 - e78: cd bf out 0x3d, r28 ; 61 + 10e4: 1f 93 push r17 + 10e6: df 93 push r29 + 10e8: cf 93 push r28 + 10ea: cd b7 in r28, 0x3d ; 61 + 10ec: de b7 in r29, 0x3e ; 62 + 10ee: ac 97 sbiw r28, 0x2c ; 44 + 10f0: 0f b6 in r0, 0x3f ; 63 + 10f2: f8 94 cli + 10f4: de bf out 0x3e, r29 ; 62 + 10f6: 0f be out 0x3f, r0 ; 63 + 10f8: cd bf out 0x3d, r28 ; 61 USB_ControlRequest.bRequest = Endpoint_Read_8(); USB_ControlRequest.wValue = Endpoint_Read_16_LE(); USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; - e7a: ef e8 ldi r30, 0x8F ; 143 - e7c: f2 e0 ldi r31, 0x02 ; 2 + 10fa: ec e9 ldi r30, 0x9C ; 156 + 10fc: f2 e0 ldi r31, 0x02 ; 2 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - e7e: 80 91 f1 00 lds r24, 0x00F1 + 10fe: 80 91 f1 00 lds r24, 0x00F1 for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) *(RequestHeader++) = Endpoint_Read_8(); - e82: 81 93 st Z+, r24 + 1102: 81 93 st Z+, r24 USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); USB_ControlRequest.wLength = Endpoint_Read_16_LE(); #else uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) - e84: 22 e0 ldi r18, 0x02 ; 2 - e86: e7 39 cpi r30, 0x97 ; 151 - e88: f2 07 cpc r31, r18 - e8a: c9 f7 brne .-14 ; 0xe7e + 1104: 22 e0 ldi r18, 0x02 ; 2 + 1106: e4 3a cpi r30, 0xA4 ; 164 + 1108: f2 07 cpc r31, r18 + 110a: c9 f7 brne .-14 ; 0x10fe *(RequestHeader++) = Endpoint_Read_8(); #endif EVENT_USB_Device_ControlRequest(); - e8c: bd db rcall .-2182 ; 0x608 + 110c: f3 da rcall .-2586 ; 0x6f4 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - e8e: 80 91 e8 00 lds r24, 0x00E8 + 110e: 80 91 e8 00 lds r24, 0x00E8 if (Endpoint_IsSETUPReceived()) - e92: 83 ff sbrs r24, 3 - e94: 32 c1 rjmp .+612 ; 0x10fa + 1112: 83 ff sbrs r24, 3 + 1114: 30 c1 rjmp .+608 ; 0x1376 { uint8_t bmRequestType = USB_ControlRequest.bmRequestType; - e96: 80 91 8f 02 lds r24, 0x028F + 1116: 80 91 9c 02 lds r24, 0x029C switch (USB_ControlRequest.bRequest) - e9a: 20 91 90 02 lds r18, 0x0290 - e9e: 25 30 cpi r18, 0x05 ; 5 - ea0: 09 f4 brne .+2 ; 0xea4 - ea2: 84 c0 rjmp .+264 ; 0xfac - ea4: 26 30 cpi r18, 0x06 ; 6 - ea6: 40 f4 brcc .+16 ; 0xeb8 - ea8: 21 30 cpi r18, 0x01 ; 1 - eaa: a1 f1 breq .+104 ; 0xf14 - eac: 21 30 cpi r18, 0x01 ; 1 - eae: 70 f0 brcs .+28 ; 0xecc - eb0: 23 30 cpi r18, 0x03 ; 3 - eb2: 09 f0 breq .+2 ; 0xeb6 - eb4: 22 c1 rjmp .+580 ; 0x10fa - eb6: 2e c0 rjmp .+92 ; 0xf14 - eb8: 28 30 cpi r18, 0x08 ; 8 - eba: 09 f4 brne .+2 ; 0xebe - ebc: f0 c0 rjmp .+480 ; 0x109e - ebe: 29 30 cpi r18, 0x09 ; 9 - ec0: 09 f4 brne .+2 ; 0xec4 - ec2: ff c0 rjmp .+510 ; 0x10c2 - ec4: 26 30 cpi r18, 0x06 ; 6 - ec6: 09 f0 breq .+2 ; 0xeca - ec8: 18 c1 rjmp .+560 ; 0x10fa - eca: 93 c0 rjmp .+294 ; 0xff2 + 111a: 20 91 9d 02 lds r18, 0x029D + 111e: 25 30 cpi r18, 0x05 ; 5 + 1120: 09 f4 brne .+2 ; 0x1124 + 1122: 84 c0 rjmp .+264 ; 0x122c + 1124: 26 30 cpi r18, 0x06 ; 6 + 1126: 40 f4 brcc .+16 ; 0x1138 + 1128: 21 30 cpi r18, 0x01 ; 1 + 112a: a1 f1 breq .+104 ; 0x1194 + 112c: 21 30 cpi r18, 0x01 ; 1 + 112e: 70 f0 brcs .+28 ; 0x114c + 1130: 23 30 cpi r18, 0x03 ; 3 + 1132: 09 f0 breq .+2 ; 0x1136 + 1134: 20 c1 rjmp .+576 ; 0x1376 + 1136: 2e c0 rjmp .+92 ; 0x1194 + 1138: 28 30 cpi r18, 0x08 ; 8 + 113a: 09 f4 brne .+2 ; 0x113e + 113c: ef c0 rjmp .+478 ; 0x131c + 113e: 29 30 cpi r18, 0x09 ; 9 + 1140: 09 f4 brne .+2 ; 0x1144 + 1142: fe c0 rjmp .+508 ; 0x1340 + 1144: 26 30 cpi r18, 0x06 ; 6 + 1146: 09 f0 breq .+2 ; 0x114a + 1148: 16 c1 rjmp .+556 ; 0x1376 + 114a: 92 c0 rjmp .+292 ; 0x1270 { case REQ_GetStatus: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - ecc: 80 38 cpi r24, 0x80 ; 128 - ece: 21 f0 breq .+8 ; 0xed8 - ed0: 82 38 cpi r24, 0x82 ; 130 - ed2: 09 f0 breq .+2 ; 0xed6 - ed4: 12 c1 rjmp .+548 ; 0x10fa - ed6: 08 c0 rjmp .+16 ; 0xee8 + 114c: 80 38 cpi r24, 0x80 ; 128 + 114e: 21 f0 breq .+8 ; 0x1158 + 1150: 82 38 cpi r24, 0x82 ; 130 + 1152: 09 f0 breq .+2 ; 0x1156 + 1154: 10 c1 rjmp .+544 ; 0x1376 + 1156: 08 c0 rjmp .+16 ; 0x1168 Endpoint_ClearOUT(); } static void USB_Device_GetStatus(void) { uint8_t CurrentStatus = 0; - ed8: 80 91 8b 02 lds r24, 0x028B + 1158: 80 91 99 02 lds r24, 0x0299 if (USB_Device_CurrentlySelfPowered) CurrentStatus |= FEATURE_SELFPOWERED_ENABLED; #endif #if !defined(NO_DEVICE_REMOTE_WAKEUP) if (USB_Device_RemoteWakeupEnabled) - edc: 90 91 8c 02 lds r25, 0x028C - ee0: 99 23 and r25, r25 - ee2: 71 f0 breq .+28 ; 0xf00 + 115c: 90 91 9a 02 lds r25, 0x029A + 1160: 99 23 and r25, r25 + 1162: 71 f0 breq .+28 ; 0x1180 CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; - ee4: 82 60 ori r24, 0x02 ; 2 - ee6: 0c c0 rjmp .+24 ; 0xf00 + 1164: 82 60 ori r24, 0x02 ; 2 + 1166: 0c c0 rjmp .+24 ; 0x1180 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - ee8: 80 91 93 02 lds r24, 0x0293 - eec: 8f 70 andi r24, 0x0F ; 15 - eee: 80 93 e9 00 sts 0x00E9, r24 + 1168: 80 91 a0 02 lds r24, 0x02A0 + 116c: 8f 70 andi r24, 0x0F ; 15 + 116e: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. */ static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsStalled(void) { return ((UECONX & (1 << STALLRQ)) ? true : false); - ef2: 90 91 eb 00 lds r25, 0x00EB + 1172: 90 91 eb 00 lds r25, 0x00EB break; case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): #if !defined(CONTROL_ONLY_DEVICE) Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); CurrentStatus = Endpoint_IsStalled(); - ef6: 81 e0 ldi r24, 0x01 ; 1 - ef8: 95 ff sbrs r25, 5 - efa: 80 e0 ldi r24, 0x00 ; 0 + 1176: 81 e0 ldi r24, 0x01 ; 1 + 1178: 95 ff sbrs r25, 5 + 117a: 80 e0 ldi r24, 0x00 ; 0 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - efc: 10 92 e9 00 sts 0x00E9, r1 + 117c: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - f00: 90 91 e8 00 lds r25, 0x00E8 - f04: 97 7f andi r25, 0xF7 ; 247 - f06: 90 93 e8 00 sts 0x00E8, r25 + 1180: 90 91 e8 00 lds r25, 0x00E8 + 1184: 97 7f andi r25, 0xF7 ; 247 + 1186: 90 93 e8 00 sts 0x00E8, r25 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_16_LE(const uint16_t Data) { UEDATX = (Data & 0xFF); - f0a: 80 93 f1 00 sts 0x00F1, r24 + 118a: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - f0e: 10 92 f1 00 sts 0x00F1, r1 - f12: d0 c0 rjmp .+416 ; 0x10b4 + 118e: 10 92 f1 00 sts 0x00F1, r1 + 1192: cf c0 rjmp .+414 ; 0x1332 } break; case REQ_ClearFeature: case REQ_SetFeature: if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || - f14: 88 23 and r24, r24 - f16: 19 f0 breq .+6 ; 0xf1e - f18: 82 30 cpi r24, 0x02 ; 2 - f1a: 09 f0 breq .+2 ; 0xf1e - f1c: ee c0 rjmp .+476 ; 0x10fa + 1194: 88 23 and r24, r24 + 1196: 19 f0 breq .+6 ; 0x119e + 1198: 82 30 cpi r24, 0x02 ; 2 + 119a: 09 f0 breq .+2 ; 0x119e + 119c: ec c0 rjmp .+472 ; 0x1376 Endpoint_ClearStatusStage(); } static void USB_Device_ClearSetFeature(void) { switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) - f1e: 90 e0 ldi r25, 0x00 ; 0 - f20: 8f 71 andi r24, 0x1F ; 31 - f22: 90 70 andi r25, 0x00 ; 0 - f24: 00 97 sbiw r24, 0x00 ; 0 - f26: 29 f0 breq .+10 ; 0xf32 - f28: 82 30 cpi r24, 0x02 ; 2 - f2a: 91 05 cpc r25, r1 - f2c: 09 f0 breq .+2 ; 0xf30 - f2e: e5 c0 rjmp .+458 ; 0x10fa - f30: 0b c0 rjmp .+22 ; 0xf48 + 119e: 90 e0 ldi r25, 0x00 ; 0 + 11a0: 8f 71 andi r24, 0x1F ; 31 + 11a2: 90 70 andi r25, 0x00 ; 0 + 11a4: 00 97 sbiw r24, 0x00 ; 0 + 11a6: 29 f0 breq .+10 ; 0x11b2 + 11a8: 82 30 cpi r24, 0x02 ; 2 + 11aa: 91 05 cpc r25, r1 + 11ac: 09 f0 breq .+2 ; 0x11b0 + 11ae: e3 c0 rjmp .+454 ; 0x1376 + 11b0: 0b c0 rjmp .+22 ; 0x11c8 { #if !defined(NO_DEVICE_REMOTE_WAKEUP) case REQREC_DEVICE: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_DeviceRemoteWakeup) - f32: 80 91 91 02 lds r24, 0x0291 - f36: 81 30 cpi r24, 0x01 ; 1 - f38: 09 f0 breq .+2 ; 0xf3c - f3a: df c0 rjmp .+446 ; 0x10fa + 11b2: 80 91 9e 02 lds r24, 0x029E + 11b6: 81 30 cpi r24, 0x01 ; 1 + 11b8: 09 f0 breq .+2 ; 0x11bc + 11ba: dd c0 rjmp .+442 ; 0x1376 USB_Device_RemoteWakeupEnabled = (USB_ControlRequest.bRequest == REQ_SetFeature); - f3c: 23 30 cpi r18, 0x03 ; 3 - f3e: 09 f0 breq .+2 ; 0xf42 - f40: 80 e0 ldi r24, 0x00 ; 0 - f42: 80 93 8c 02 sts 0x028C, r24 - f46: 2c c0 rjmp .+88 ; 0xfa0 + 11bc: 23 30 cpi r18, 0x03 ; 3 + 11be: 09 f0 breq .+2 ; 0x11c2 + 11c0: 80 e0 ldi r24, 0x00 ; 0 + 11c2: 80 93 9a 02 sts 0x029A, r24 + 11c6: 2c c0 rjmp .+88 ; 0x1220 break; #endif #if !defined(CONTROL_ONLY_DEVICE) case REQREC_ENDPOINT: if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) - f48: 80 91 91 02 lds r24, 0x0291 - f4c: 88 23 and r24, r24 - f4e: 41 f5 brne .+80 ; 0xfa0 + 11c8: 80 91 9e 02 lds r24, 0x029E + 11cc: 88 23 and r24, r24 + 11ce: 41 f5 brne .+80 ; 0x1220 { uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); - f50: 20 91 93 02 lds r18, 0x0293 - f54: 2f 70 andi r18, 0x0F ; 15 + 11d0: 20 91 a0 02 lds r18, 0x02A0 + 11d4: 2f 70 andi r18, 0x0F ; 15 if (EndpointIndex == ENDPOINT_CONTROLEP) - f56: 09 f4 brne .+2 ; 0xf5a - f58: d0 c0 rjmp .+416 ; 0x10fa + 11d6: 09 f4 brne .+2 ; 0x11da + 11d8: ce c0 rjmp .+412 ; 0x1376 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - f5a: 20 93 e9 00 sts 0x00E9, r18 + 11da: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise. */ static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsEnabled(void) { return ((UECONX & (1 << EPEN)) ? true : false); - f5e: 80 91 eb 00 lds r24, 0x00EB + 11de: 80 91 eb 00 lds r24, 0x00EB return; Endpoint_SelectEndpoint(EndpointIndex); if (Endpoint_IsEnabled()) - f62: 80 ff sbrs r24, 0 - f64: 1d c0 rjmp .+58 ; 0xfa0 + 11e2: 80 ff sbrs r24, 0 + 11e4: 1d c0 rjmp .+58 ; 0x1220 { if (USB_ControlRequest.bRequest == REQ_SetFeature) - f66: 80 91 90 02 lds r24, 0x0290 - f6a: 83 30 cpi r24, 0x03 ; 3 - f6c: 21 f4 brne .+8 ; 0xf76 + 11e6: 80 91 9d 02 lds r24, 0x029D + 11ea: 83 30 cpi r24, 0x03 ; 3 + 11ec: 21 f4 brne .+8 ; 0x11f6 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - f6e: 80 91 eb 00 lds r24, 0x00EB - f72: 80 62 ori r24, 0x20 ; 32 - f74: 13 c0 rjmp .+38 ; 0xf9c + 11ee: 80 91 eb 00 lds r24, 0x00EB + 11f2: 80 62 ori r24, 0x20 ; 32 + 11f4: 13 c0 rjmp .+38 ; 0x121c * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearStall(void) { UECONX |= (1 << STALLRQC); - f76: 80 91 eb 00 lds r24, 0x00EB - f7a: 80 61 ori r24, 0x10 ; 16 - f7c: 80 93 eb 00 sts 0x00EB, r24 + 11f6: 80 91 eb 00 lds r24, 0x00EB + 11fa: 80 61 ori r24, 0x10 ; 16 + 11fc: 80 93 eb 00 sts 0x00EB, r24 * \param[in] Address Endpoint address whose FIFO buffers are to be reset. */ static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetEndpoint(const uint8_t Address) { UERST = (1 << (Address & ENDPOINT_EPNUM_MASK)); - f80: 81 e0 ldi r24, 0x01 ; 1 - f82: 90 e0 ldi r25, 0x00 ; 0 - f84: 02 c0 rjmp .+4 ; 0xf8a - f86: 88 0f add r24, r24 - f88: 99 1f adc r25, r25 - f8a: 2a 95 dec r18 - f8c: e2 f7 brpl .-8 ; 0xf86 - f8e: 80 93 ea 00 sts 0x00EA, r24 + 1200: 81 e0 ldi r24, 0x01 ; 1 + 1202: 90 e0 ldi r25, 0x00 ; 0 + 1204: 02 c0 rjmp .+4 ; 0x120a + 1206: 88 0f add r24, r24 + 1208: 99 1f adc r25, r25 + 120a: 2a 95 dec r18 + 120c: e2 f7 brpl .-8 ; 0x1206 + 120e: 80 93 ea 00 sts 0x00EA, r24 UERST = 0; - f92: 10 92 ea 00 sts 0x00EA, r1 + 1212: 10 92 ea 00 sts 0x00EA, r1 /** Resets the data toggle of the currently selected endpoint. */ static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ResetDataToggle(void) { UECONX |= (1 << RSTDT); - f96: 80 91 eb 00 lds r24, 0x00EB - f9a: 88 60 ori r24, 0x08 ; 8 - f9c: 80 93 eb 00 sts 0x00EB, r24 + 1216: 80 91 eb 00 lds r24, 0x00EB + 121a: 88 60 ori r24, 0x08 ; 8 + 121c: 80 93 eb 00 sts 0x00EB, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - fa0: 10 92 e9 00 sts 0x00E9, r1 + 1220: 10 92 e9 00 sts 0x00E9, r1 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - fa4: 80 91 e8 00 lds r24, 0x00E8 - fa8: 87 7f andi r24, 0xF7 ; 247 - faa: 87 c0 rjmp .+270 ; 0x10ba + 1224: 80 91 e8 00 lds r24, 0x00E8 + 1228: 87 7f andi r24, 0xF7 ; 247 + 122a: 86 c0 rjmp .+268 ; 0x1338 USB_Device_ClearSetFeature(); } break; case REQ_SetAddress: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - fac: 88 23 and r24, r24 - fae: 09 f0 breq .+2 ; 0xfb2 - fb0: a4 c0 rjmp .+328 ; 0x10fa + 122c: 88 23 and r24, r24 + 122e: 09 f0 breq .+2 ; 0x1232 + 1230: a2 c0 rjmp .+324 ; 0x1376 } } static void USB_Device_SetAddress(void) { uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); - fb2: 10 91 91 02 lds r17, 0x0291 - fb6: 1f 77 andi r17, 0x7F ; 127 + 1232: 10 91 9e 02 lds r17, 0x029E + 1236: 1f 77 andi r17, 0x7F ; 127 #endif static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_SetDeviceAddress(const uint8_t Address) { UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F); - fb8: 80 91 e3 00 lds r24, 0x00E3 - fbc: 80 78 andi r24, 0x80 ; 128 - fbe: 81 2b or r24, r17 - fc0: 80 93 e3 00 sts 0x00E3, r24 - fc4: 80 91 e8 00 lds r24, 0x00E8 - fc8: 87 7f andi r24, 0xF7 ; 247 - fca: 80 93 e8 00 sts 0x00E8, r24 + 1238: 80 91 e3 00 lds r24, 0x00E3 + 123c: 80 78 andi r24, 0x80 ; 128 + 123e: 81 2b or r24, r17 + 1240: 80 93 e3 00 sts 0x00E3, r24 + 1244: 80 91 e8 00 lds r24, 0x00E8 + 1248: 87 7f andi r24, 0xF7 ; 247 + 124a: 80 93 e8 00 sts 0x00E8, r24 USB_Device_SetDeviceAddress(DeviceAddress); Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - fce: 0b de rcall .-1002 ; 0xbe6 + 124e: d2 dd rcall .-1116 ; 0xdf4 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - fd0: 80 91 e8 00 lds r24, 0x00E8 + 1250: 80 91 e8 00 lds r24, 0x00E8 while (!(Endpoint_IsINReady())); - fd4: 80 ff sbrs r24, 0 - fd6: fc cf rjmp .-8 ; 0xfd0 + 1254: 80 ff sbrs r24, 0 + 1256: fc cf rjmp .-8 ; 0x1250 static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) { (void)Address; UDADDR |= (1 << ADDEN); - fd8: 80 91 e3 00 lds r24, 0x00E3 - fdc: 80 68 ori r24, 0x80 ; 128 - fde: 80 93 e3 00 sts 0x00E3, r24 + 1258: 80 91 e3 00 lds r24, 0x00E3 + 125c: 80 68 ori r24, 0x80 ; 128 + 125e: 80 93 e3 00 sts 0x00E3, r24 USB_Device_EnableDeviceAddress(DeviceAddress); USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; - fe2: 11 23 and r17, r17 - fe4: 11 f0 breq .+4 ; 0xfea - fe6: 83 e0 ldi r24, 0x03 ; 3 - fe8: 01 c0 rjmp .+2 ; 0xfec - fea: 82 e0 ldi r24, 0x02 ; 2 - fec: 80 93 8e 02 sts 0x028E, r24 - ff0: 84 c0 rjmp .+264 ; 0x10fa + 1262: 11 23 and r17, r17 + 1264: 11 f0 breq .+4 ; 0x126a + 1266: 83 e0 ldi r24, 0x03 ; 3 + 1268: 01 c0 rjmp .+2 ; 0x126c + 126a: 82 e0 ldi r24, 0x02 ; 2 + 126c: 8e bb out 0x1e, r24 ; 30 + 126e: 83 c0 rjmp .+262 ; 0x1376 if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_SetAddress(); break; case REQ_GetDescriptor: if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || - ff2: 80 58 subi r24, 0x80 ; 128 - ff4: 82 30 cpi r24, 0x02 ; 2 - ff6: 08 f0 brcs .+2 ; 0xffa - ff8: 80 c0 rjmp .+256 ; 0x10fa + 1270: 80 58 subi r24, 0x80 ; 128 + 1272: 82 30 cpi r24, 0x02 ; 2 + 1274: 08 f0 brcs .+2 ; 0x1278 + 1276: 7f c0 rjmp .+254 ; 0x1376 !(defined(USE_FLASH_DESCRIPTORS) || defined(USE_EEPROM_DESCRIPTORS) || defined(USE_RAM_DESCRIPTORS)) uint8_t DescriptorAddressSpace; #endif #if !defined(NO_INTERNAL_SERIAL) && (USE_INTERNAL_SERIAL != NO_DESCRIPTOR) if (USB_ControlRequest.wValue == ((DTYPE_String << 8) | USE_INTERNAL_SERIAL)) - ffa: 80 91 91 02 lds r24, 0x0291 - ffe: 90 91 92 02 lds r25, 0x0292 - 1002: 23 e0 ldi r18, 0x03 ; 3 - 1004: 8c 3d cpi r24, 0xDC ; 220 - 1006: 92 07 cpc r25, r18 - 1008: 91 f5 brne .+100 ; 0x106e + 1278: 80 91 9e 02 lds r24, 0x029E + 127c: 90 91 9f 02 lds r25, 0x029F + 1280: 23 e0 ldi r18, 0x03 ; 3 + 1282: 8c 3d cpi r24, 0xDC ; 220 + 1284: 92 07 cpc r25, r18 + 1286: 91 f5 brne .+100 ; 0x12ec { USB_Descriptor_Header_t Header; uint16_t UnicodeString[INTERNAL_SERIAL_LENGTH_BITS / 4]; } SignatureDescriptor; SignatureDescriptor.Header.Type = DTYPE_String; - 100a: 83 e0 ldi r24, 0x03 ; 3 - 100c: 8c 83 std Y+4, r24 ; 0x04 + 1288: 83 e0 ldi r24, 0x03 ; 3 + 128a: 8c 83 std Y+4, r24 ; 0x04 SignatureDescriptor.Header.Size = USB_STRING_LEN(INTERNAL_SERIAL_LENGTH_BITS / 4); - 100e: 8a e2 ldi r24, 0x2A ; 42 - 1010: 8b 83 std Y+3, r24 ; 0x03 + 128c: 8a e2 ldi r24, 0x2A ; 42 + 128e: 8b 83 std Y+3, r24 ; 0x03 static inline uint_reg_t GetGlobalInterruptMask(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) return SREG; - 1012: 5f b7 in r21, 0x3f ; 63 + 1290: 5f b7 in r21, 0x3f ; 63 static inline void GlobalInterruptDisable(void) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) cli(); - 1014: f8 94 cli + 1292: f8 94 cli __builtin_ssrf(AVR32_SR_GM_OFFSET); #elif (ARCH == ARCH_XMEGA) cli(); #endif GCC_MEMORY_BARRIER(); - 1016: de 01 movw r26, r28 - 1018: 15 96 adiw r26, 0x05 ; 5 - 101a: 80 e0 ldi r24, 0x00 ; 0 - 101c: 90 e0 ldi r25, 0x00 ; 0 + 1294: de 01 movw r26, r28 + 1296: 15 96 adiw r26, 0x05 ; 5 + 1298: 80 e0 ldi r24, 0x00 ; 0 + 129a: 90 e0 ldi r25, 0x00 ; 0 static inline void USB_Device_GetSerialString(uint16_t* const UnicodeString) { uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; - 101e: 4e e0 ldi r20, 0x0E ; 14 + 129c: 4e e0 ldi r20, 0x0E ; 14 for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) { uint8_t SerialByte = boot_signature_byte_get(SigReadAddress); - 1020: 61 e2 ldi r22, 0x21 ; 33 - 1022: e4 2f mov r30, r20 - 1024: f0 e0 ldi r31, 0x00 ; 0 - 1026: 60 93 57 00 sts 0x0057, r22 - 102a: e4 91 lpm r30, Z+ + 129e: 61 e2 ldi r22, 0x21 ; 33 + 12a0: e4 2f mov r30, r20 + 12a2: f0 e0 ldi r31, 0x00 ; 0 + 12a4: 60 93 57 00 sts 0x0057, r22 + 12a8: e4 91 lpm r30, Z+ if (SerialCharNum & 0x01) - 102c: 80 ff sbrs r24, 0 - 102e: 03 c0 rjmp .+6 ; 0x1036 + 12aa: 80 ff sbrs r24, 0 + 12ac: 03 c0 rjmp .+6 ; 0x12b4 { SerialByte >>= 4; - 1030: e2 95 swap r30 - 1032: ef 70 andi r30, 0x0F ; 15 + 12ae: e2 95 swap r30 + 12b0: ef 70 andi r30, 0x0F ; 15 SigReadAddress++; - 1034: 4f 5f subi r20, 0xFF ; 255 + 12b2: 4f 5f subi r20, 0xFF ; 255 } SerialByte &= 0x0F; - 1036: ef 70 andi r30, 0x0F ; 15 - 1038: 2e 2f mov r18, r30 - 103a: 30 e0 ldi r19, 0x00 ; 0 + 12b4: ef 70 andi r30, 0x0F ; 15 + 12b6: 2e 2f mov r18, r30 + 12b8: 30 e0 ldi r19, 0x00 ; 0 UnicodeString[SerialCharNum] = cpu_to_le16((SerialByte >= 10) ? - 103c: ea 30 cpi r30, 0x0A ; 10 - 103e: 18 f0 brcs .+6 ; 0x1046 - 1040: 29 5c subi r18, 0xC9 ; 201 - 1042: 3f 4f sbci r19, 0xFF ; 255 - 1044: 02 c0 rjmp .+4 ; 0x104a - 1046: 20 5d subi r18, 0xD0 ; 208 - 1048: 3f 4f sbci r19, 0xFF ; 255 - 104a: 2d 93 st X+, r18 - 104c: 3d 93 st X+, r19 - 104e: 01 96 adiw r24, 0x01 ; 1 + 12ba: ea 30 cpi r30, 0x0A ; 10 + 12bc: 18 f0 brcs .+6 ; 0x12c4 + 12be: 29 5c subi r18, 0xC9 ; 201 + 12c0: 3f 4f sbci r19, 0xFF ; 255 + 12c2: 02 c0 rjmp .+4 ; 0x12c8 + 12c4: 20 5d subi r18, 0xD0 ; 208 + 12c6: 3f 4f sbci r19, 0xFF ; 255 + 12c8: 2d 93 st X+, r18 + 12ca: 3d 93 st X+, r19 + 12cc: 01 96 adiw r24, 0x01 ; 1 uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); uint8_t SigReadAddress = INTERNAL_SERIAL_START_ADDRESS; for (uint8_t SerialCharNum = 0; SerialCharNum < (INTERNAL_SERIAL_LENGTH_BITS / 4); SerialCharNum++) - 1050: 84 31 cpi r24, 0x14 ; 20 - 1052: 91 05 cpc r25, r1 - 1054: 31 f7 brne .-52 ; 0x1022 + 12ce: 84 31 cpi r24, 0x14 ; 20 + 12d0: 91 05 cpc r25, r1 + 12d2: 31 f7 brne .-52 ; 0x12a0 static inline void SetGlobalInterruptMask(const uint_reg_t GlobalIntState) { GCC_MEMORY_BARRIER(); #if (ARCH == ARCH_AVR8) SREG = GlobalIntState; - 1056: 5f bf out 0x3f, r21 ; 63 + 12d4: 5f bf out 0x3f, r21 ; 63 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1058: 80 91 e8 00 lds r24, 0x00E8 - 105c: 87 7f andi r24, 0xF7 ; 247 - 105e: 80 93 e8 00 sts 0x00E8, r24 + 12d6: 80 91 e8 00 lds r24, 0x00E8 + 12da: 87 7f andi r24, 0xF7 ; 247 + 12dc: 80 93 e8 00 sts 0x00E8, r24 USB_Device_GetSerialString(SignatureDescriptor.UnicodeString); Endpoint_ClearSETUP(); Endpoint_Write_Control_Stream_LE(&SignatureDescriptor, sizeof(SignatureDescriptor)); - 1062: ce 01 movw r24, r28 - 1064: 03 96 adiw r24, 0x03 ; 3 - 1066: 6a e2 ldi r22, 0x2A ; 42 - 1068: 70 e0 ldi r23, 0x00 ; 0 - 106a: 89 dc rcall .-1774 ; 0x97e - 106c: 12 c0 rjmp .+36 ; 0x1092 + 12e0: ce 01 movw r24, r28 + 12e2: 03 96 adiw r24, 0x03 ; 3 + 12e4: 6a e2 ldi r22, 0x2A ; 42 + 12e6: 70 e0 ldi r23, 0x00 ; 0 + 12e8: 55 dc rcall .-1878 ; 0xb94 + 12ea: 12 c0 rjmp .+36 ; 0x1310 USB_Device_GetInternalSerialDescriptor(); return; } #endif if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, - 106e: 60 91 93 02 lds r22, 0x0293 - 1072: ae 01 movw r20, r28 - 1074: 4f 5f subi r20, 0xFF ; 255 - 1076: 5f 4f sbci r21, 0xFF ; 255 - 1078: 55 dc rcall .-1878 ; 0x924 - 107a: bc 01 movw r22, r24 - 107c: 00 97 sbiw r24, 0x00 ; 0 - 107e: 09 f4 brne .+2 ; 0x1082 - 1080: 3c c0 rjmp .+120 ; 0x10fa - 1082: 80 91 e8 00 lds r24, 0x00E8 - 1086: 87 7f andi r24, 0xF7 ; 247 - 1088: 80 93 e8 00 sts 0x00E8, r24 + 12ec: 60 91 a0 02 lds r22, 0x02A0 + 12f0: ae 01 movw r20, r28 + 12f2: 4f 5f subi r20, 0xFF ; 255 + 12f4: 5f 4f sbci r21, 0xFF ; 255 + 12f6: 21 dc rcall .-1982 ; 0xb3a + 12f8: bc 01 movw r22, r24 + 12fa: 00 97 sbiw r24, 0x00 ; 0 + 12fc: 09 f4 brne .+2 ; 0x1300 + 12fe: 3b c0 rjmp .+118 ; 0x1376 + 1300: 80 91 e8 00 lds r24, 0x00E8 + 1304: 87 7f andi r24, 0xF7 ; 247 + 1306: 80 93 e8 00 sts 0x00E8, r24 #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE) Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_EEPROM_DESCRIPTORS) Endpoint_Write_Control_EStream_LE(DescriptorPointer, DescriptorSize); #elif defined(USE_FLASH_DESCRIPTORS) Endpoint_Write_Control_PStream_LE(DescriptorPointer, DescriptorSize); - 108c: 89 81 ldd r24, Y+1 ; 0x01 - 108e: 9a 81 ldd r25, Y+2 ; 0x02 - 1090: d2 dc rcall .-1628 ; 0xa36 + 130a: 89 81 ldd r24, Y+1 ; 0x01 + 130c: 9a 81 ldd r25, Y+2 ; 0x02 + 130e: 9c dc rcall .-1736 ; 0xc48 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1092: 80 91 e8 00 lds r24, 0x00E8 - 1096: 8b 77 andi r24, 0x7B ; 123 - 1098: 80 93 e8 00 sts 0x00E8, r24 - 109c: 2e c0 rjmp .+92 ; 0x10fa + 1310: 80 91 e8 00 lds r24, 0x00E8 + 1314: 8b 77 andi r24, 0x7B ; 123 + 1316: 80 93 e8 00 sts 0x00E8, r24 + 131a: 2d c0 rjmp .+90 ; 0x1376 USB_Device_GetDescriptor(); } break; case REQ_GetConfiguration: if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) - 109e: 80 38 cpi r24, 0x80 ; 128 - 10a0: 61 f5 brne .+88 ; 0x10fa + 131c: 80 38 cpi r24, 0x80 ; 128 + 131e: 59 f5 brne .+86 ; 0x1376 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 10a2: 80 91 e8 00 lds r24, 0x00E8 - 10a6: 87 7f andi r24, 0xF7 ; 247 - 10a8: 80 93 e8 00 sts 0x00E8, r24 + 1320: 80 91 e8 00 lds r24, 0x00E8 + 1324: 87 7f andi r24, 0xF7 ; 247 + 1326: 80 93 e8 00 sts 0x00E8, r24 static void USB_Device_GetConfiguration(void) { Endpoint_ClearSETUP(); Endpoint_Write_8(USB_Device_ConfigurationNumber); - 10ac: 80 91 8a 02 lds r24, 0x028A + 132a: 80 91 98 02 lds r24, 0x0298 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 10b0: 80 93 f1 00 sts 0x00F1, r24 + 132e: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 10b4: 80 91 e8 00 lds r24, 0x00E8 - 10b8: 8e 77 andi r24, 0x7E ; 126 - 10ba: 80 93 e8 00 sts 0x00E8, r24 + 1332: 80 91 e8 00 lds r24, 0x00E8 + 1336: 8e 77 andi r24, 0x7E ; 126 + 1338: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 10be: 93 dd rcall .-1242 ; 0xbe6 - 10c0: 1c c0 rjmp .+56 ; 0x10fa + 133c: 5b dd rcall .-1354 ; 0xdf4 + 133e: 1b c0 rjmp .+54 ; 0x1376 if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) USB_Device_GetConfiguration(); break; case REQ_SetConfiguration: if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) - 10c2: 88 23 and r24, r24 - 10c4: d1 f4 brne .+52 ; 0x10fa + 1340: 88 23 and r24, r24 + 1342: c9 f4 brne .+50 ; 0x1376 } static void USB_Device_SetConfiguration(void) { #if defined(FIXED_NUM_CONFIGURATIONS) if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) - 10c6: 90 91 91 02 lds r25, 0x0291 - 10ca: 92 30 cpi r25, 0x02 ; 2 - 10cc: b0 f4 brcc .+44 ; 0x10fa + 1344: 90 91 9e 02 lds r25, 0x029E + 1348: 92 30 cpi r25, 0x02 ; 2 + 134a: a8 f4 brcc .+42 ; 0x1376 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 10ce: 80 91 e8 00 lds r24, 0x00E8 - 10d2: 87 7f andi r24, 0xF7 ; 247 - 10d4: 80 93 e8 00 sts 0x00E8, r24 + 134c: 80 91 e8 00 lds r24, 0x00E8 + 1350: 87 7f andi r24, 0xF7 ; 247 + 1352: 80 93 e8 00 sts 0x00E8, r24 #endif #endif Endpoint_ClearSETUP(); USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; - 10d8: 90 93 8a 02 sts 0x028A, r25 + 1356: 90 93 98 02 sts 0x0298, r25 Endpoint_ClearStatusStage(); - 10dc: 84 dd rcall .-1272 ; 0xbe6 + 135a: 4c dd rcall .-1384 ; 0xdf4 if (USB_Device_ConfigurationNumber) - 10de: 80 91 8a 02 lds r24, 0x028A - 10e2: 88 23 and r24, r24 - 10e4: 21 f4 brne .+8 ; 0x10ee + 135c: 80 91 98 02 lds r24, 0x0298 + 1360: 88 23 and r24, r24 + 1362: 21 f4 brne .+8 ; 0x136c } static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); - 10e6: 80 91 e3 00 lds r24, 0x00E3 + 1364: 80 91 e3 00 lds r24, 0x00E3 USB_DeviceState = DEVICE_STATE_Configured; else USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; - 10ea: 87 ff sbrs r24, 7 - 10ec: 02 c0 rjmp .+4 ; 0x10f2 - 10ee: 84 e0 ldi r24, 0x04 ; 4 - 10f0: 01 c0 rjmp .+2 ; 0x10f4 - 10f2: 81 e0 ldi r24, 0x01 ; 1 - 10f4: 80 93 8e 02 sts 0x028E, r24 + 1368: 87 ff sbrs r24, 7 + 136a: 02 c0 rjmp .+4 ; 0x1370 + 136c: 84 e0 ldi r24, 0x04 ; 4 + 136e: 01 c0 rjmp .+2 ; 0x1372 + 1370: 81 e0 ldi r24, 0x01 ; 1 + 1372: 8e bb out 0x1e, r24 ; 30 EVENT_USB_Device_ConfigurationChanged(); - 10f8: 84 da rcall .-2808 ; 0x602 + 1374: bc d9 rcall .-3208 ; 0x6ee * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 10fa: 80 91 e8 00 lds r24, 0x00E8 + 1376: 80 91 e8 00 lds r24, 0x00E8 default: break; } } if (Endpoint_IsSETUPReceived()) - 10fe: 83 ff sbrs r24, 3 - 1100: 0a c0 rjmp .+20 ; 0x1116 + 137a: 83 ff sbrs r24, 3 + 137c: 0a c0 rjmp .+20 ; 0x1392 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 1102: 80 91 e8 00 lds r24, 0x00E8 - 1106: 87 7f andi r24, 0xF7 ; 247 - 1108: 80 93 e8 00 sts 0x00E8, r24 + 137e: 80 91 e8 00 lds r24, 0x00E8 + 1382: 87 7f andi r24, 0xF7 ; 247 + 1384: 80 93 e8 00 sts 0x00E8, r24 * \ingroup Group_EndpointPacketManagement_AVR8 */ static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_StallTransaction(void) { UECONX |= (1 << STALLRQ); - 110c: 80 91 eb 00 lds r24, 0x00EB - 1110: 80 62 ori r24, 0x20 ; 32 - 1112: 80 93 eb 00 sts 0x00EB, r24 + 1388: 80 91 eb 00 lds r24, 0x00EB + 138c: 80 62 ori r24, 0x20 ; 32 + 138e: 80 93 eb 00 sts 0x00EB, r24 { Endpoint_ClearSETUP(); Endpoint_StallTransaction(); } } - 1116: ac 96 adiw r28, 0x2c ; 44 - 1118: 0f b6 in r0, 0x3f ; 63 - 111a: f8 94 cli - 111c: de bf out 0x3e, r29 ; 62 - 111e: 0f be out 0x3f, r0 ; 63 - 1120: cd bf out 0x3d, r28 ; 61 - 1122: cf 91 pop r28 - 1124: df 91 pop r29 - 1126: 1f 91 pop r17 - 1128: 08 95 ret - -0000112a : + 1392: ac 96 adiw r28, 0x2c ; 44 + 1394: 0f b6 in r0, 0x3f ; 63 + 1396: f8 94 cli + 1398: de bf out 0x3e, r29 ; 62 + 139a: 0f be out 0x3f, r0 ; 63 + 139c: cd bf out 0x3d, r28 ; 61 + 139e: cf 91 pop r28 + 13a0: df 91 pop r29 + 13a2: 1f 91 pop r17 + 13a4: 08 95 ret + +000013a6 : #include "Events.h" void USB_Event_Stub(void) { } - 112a: 08 95 ret + 13a6: 08 95 ret -0000112c : +000013a8 : #if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) volatile uint8_t USB_DeviceState; #endif void USB_USBTask(void) { - 112c: 1f 93 push r17 + 13a8: 1f 93 push r17 } #if defined(USB_CAN_BE_DEVICE) static void USB_DeviceTask(void) { if (USB_DeviceState == DEVICE_STATE_Unattached) - 112e: 80 91 8e 02 lds r24, 0x028E - 1132: 88 23 and r24, r24 - 1134: a9 f0 breq .+42 ; 0x1160 + 13aa: 8e b3 in r24, 0x1e ; 30 + 13ac: 88 23 and r24, r24 + 13ae: a9 f0 breq .+42 ; 0x13da */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 1136: 80 91 e9 00 lds r24, 0x00E9 - 113a: 8f 70 andi r24, 0x0F ; 15 + 13b0: 80 91 e9 00 lds r24, 0x00E9 + 13b4: 8f 70 andi r24, 0x0F ; 15 * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. */ static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetEndpointDirection(void) { return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; - 113c: 90 91 ec 00 lds r25, 0x00EC - 1140: 90 ff sbrs r25, 0 - 1142: 02 c0 rjmp .+4 ; 0x1148 - 1144: 10 e8 ldi r17, 0x80 ; 128 - 1146: 01 c0 rjmp .+2 ; 0x114a - 1148: 10 e0 ldi r17, 0x00 ; 0 + 13b6: 90 91 ec 00 lds r25, 0x00EC + 13ba: 90 ff sbrs r25, 0 + 13bc: 02 c0 rjmp .+4 ; 0x13c2 + 13be: 10 e8 ldi r17, 0x80 ; 128 + 13c0: 01 c0 rjmp .+2 ; 0x13c4 + 13c2: 10 e0 ldi r17, 0x00 ; 0 */ static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_GetCurrentEndpoint(void) { #if !defined(CONTROL_ONLY_DEVICE) return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); - 114a: 18 2b or r17, r24 + 13c4: 18 2b or r17, r24 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 114c: 10 92 e9 00 sts 0x00E9, r1 + 13c6: 10 92 e9 00 sts 0x00E9, r1 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 1150: 80 91 e8 00 lds r24, 0x00E8 + 13ca: 80 91 e8 00 lds r24, 0x00E8 uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); if (Endpoint_IsSETUPReceived()) - 1154: 83 ff sbrs r24, 3 - 1156: 01 c0 rjmp .+2 ; 0x115a + 13ce: 83 ff sbrs r24, 3 + 13d0: 01 c0 rjmp .+2 ; 0x13d4 USB_Device_ProcessControlRequest(); - 1158: 85 de rcall .-758 ; 0xe64 + 13d2: 88 de rcall .-752 ; 0x10e4 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 115a: 1f 70 andi r17, 0x0F ; 15 - 115c: 10 93 e9 00 sts 0x00E9, r17 + 13d4: 1f 70 andi r17, 0x0F ; 15 + 13d6: 10 93 e9 00 sts 0x00E9, r17 #elif defined(USB_CAN_BE_HOST) USB_HostTask(); #elif defined(USB_CAN_BE_DEVICE) USB_DeviceTask(); #endif } - 1160: 1f 91 pop r17 - 1162: 08 95 ret + 13da: 1f 91 pop r17 + 13dc: 08 95 ret -00001164 : +000013de : #define __INCLUDE_FROM_CDC_DRIVER #define __INCLUDE_FROM_CDC_DEVICE_C #include "CDCClassDevice.h" void CDC_Device_ProcessControlRequest(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1164: cf 93 push r28 - 1166: df 93 push r29 - 1168: ec 01 movw r28, r24 + 13de: cf 93 push r28 + 13e0: df 93 push r29 + 13e2: ec 01 movw r28, r24 * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. */ static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsSETUPReceived(void) { return ((UEINTX & (1 << RXSTPI)) ? true : false); - 116a: 80 91 e8 00 lds r24, 0x00E8 + 13e4: 80 91 e8 00 lds r24, 0x00E8 if (!(Endpoint_IsSETUPReceived())) - 116e: 83 ff sbrs r24, 3 - 1170: a3 c0 rjmp .+326 ; 0x12b8 + 13e8: 83 ff sbrs r24, 3 + 13ea: a2 c0 rjmp .+324 ; 0x1530 return; if (USB_ControlRequest.wIndex != CDCInterfaceInfo->Config.ControlInterfaceNumber) - 1172: 88 81 ld r24, Y - 1174: 90 e0 ldi r25, 0x00 ; 0 - 1176: 20 91 93 02 lds r18, 0x0293 - 117a: 30 91 94 02 lds r19, 0x0294 - 117e: 28 17 cp r18, r24 - 1180: 39 07 cpc r19, r25 - 1182: 09 f0 breq .+2 ; 0x1186 - 1184: 99 c0 rjmp .+306 ; 0x12b8 + 13ec: 88 81 ld r24, Y + 13ee: 90 e0 ldi r25, 0x00 ; 0 + 13f0: 20 91 a0 02 lds r18, 0x02A0 + 13f4: 30 91 a1 02 lds r19, 0x02A1 + 13f8: 28 17 cp r18, r24 + 13fa: 39 07 cpc r19, r25 + 13fc: 09 f0 breq .+2 ; 0x1400 + 13fe: 98 c0 rjmp .+304 ; 0x1530 return; switch (USB_ControlRequest.bRequest) - 1186: 80 91 90 02 lds r24, 0x0290 - 118a: 81 32 cpi r24, 0x21 ; 33 - 118c: 69 f0 breq .+26 ; 0x11a8 - 118e: 82 32 cpi r24, 0x22 ; 34 - 1190: 20 f4 brcc .+8 ; 0x119a - 1192: 80 32 cpi r24, 0x20 ; 32 - 1194: 09 f0 breq .+2 ; 0x1198 - 1196: 90 c0 rjmp .+288 ; 0x12b8 - 1198: 3c c0 rjmp .+120 ; 0x1212 - 119a: 82 32 cpi r24, 0x22 ; 34 - 119c: 09 f4 brne .+2 ; 0x11a0 - 119e: 6b c0 rjmp .+214 ; 0x1276 - 11a0: 83 32 cpi r24, 0x23 ; 35 - 11a2: 09 f0 breq .+2 ; 0x11a6 - 11a4: 89 c0 rjmp .+274 ; 0x12b8 - 11a6: 7a c0 rjmp .+244 ; 0x129c + 1400: 80 91 9d 02 lds r24, 0x029D + 1404: 81 32 cpi r24, 0x21 ; 33 + 1406: 69 f0 breq .+26 ; 0x1422 + 1408: 82 32 cpi r24, 0x22 ; 34 + 140a: 20 f4 brcc .+8 ; 0x1414 + 140c: 80 32 cpi r24, 0x20 ; 32 + 140e: 09 f0 breq .+2 ; 0x1412 + 1410: 8f c0 rjmp .+286 ; 0x1530 + 1412: 3c c0 rjmp .+120 ; 0x148c + 1414: 82 32 cpi r24, 0x22 ; 34 + 1416: 09 f4 brne .+2 ; 0x141a + 1418: 6a c0 rjmp .+212 ; 0x14ee + 141a: 83 32 cpi r24, 0x23 ; 35 + 141c: 09 f0 breq .+2 ; 0x1420 + 141e: 88 c0 rjmp .+272 ; 0x1530 + 1420: 79 c0 rjmp .+242 ; 0x1514 { case CDC_REQ_GetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) - 11a8: 80 91 8f 02 lds r24, 0x028F - 11ac: 81 3a cpi r24, 0xA1 ; 161 - 11ae: 09 f0 breq .+2 ; 0x11b2 - 11b0: 83 c0 rjmp .+262 ; 0x12b8 + 1422: 80 91 9c 02 lds r24, 0x029C + 1426: 81 3a cpi r24, 0xA1 ; 161 + 1428: 09 f0 breq .+2 ; 0x142c + 142a: 82 c0 rjmp .+260 ; 0x1530 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 11b2: 80 91 e8 00 lds r24, 0x00E8 - 11b6: 87 7f andi r24, 0xF7 ; 247 - 11b8: 80 93 e8 00 sts 0x00E8, r24 + 142c: 80 91 e8 00 lds r24, 0x00E8 + 1430: 87 7f andi r24, 0xF7 ; 247 + 1432: 80 93 e8 00 sts 0x00E8, r24 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 11bc: 80 91 e8 00 lds r24, 0x00E8 + 1436: 80 91 e8 00 lds r24, 0x00E8 { Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())); - 11c0: 80 ff sbrs r24, 0 - 11c2: fc cf rjmp .-8 ; 0x11bc + 143a: 80 ff sbrs r24, 0 + 143c: fc cf rjmp .-8 ; 0x1436 Endpoint_Write_32_LE(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS); - 11c4: 8c 89 ldd r24, Y+20 ; 0x14 - 11c6: 9d 89 ldd r25, Y+21 ; 0x15 - 11c8: ae 89 ldd r26, Y+22 ; 0x16 - 11ca: bf 89 ldd r27, Y+23 ; 0x17 + 143e: 8c 89 ldd r24, Y+20 ; 0x14 + 1440: 9d 89 ldd r25, Y+21 ; 0x15 + 1442: ae 89 ldd r26, Y+22 ; 0x16 + 1444: bf 89 ldd r27, Y+23 ; 0x17 * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_32_LE(const uint32_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_32_LE(const uint32_t Data) { UEDATX = (Data & 0xFF); - 11cc: 80 93 f1 00 sts 0x00F1, r24 + 1446: 80 93 f1 00 sts 0x00F1, r24 UEDATX = (Data >> 8); - 11d0: 29 2f mov r18, r25 - 11d2: 3a 2f mov r19, r26 - 11d4: 4b 2f mov r20, r27 - 11d6: 55 27 eor r21, r21 - 11d8: 20 93 f1 00 sts 0x00F1, r18 + 144a: 29 2f mov r18, r25 + 144c: 3a 2f mov r19, r26 + 144e: 4b 2f mov r20, r27 + 1450: 55 27 eor r21, r21 + 1452: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 16); - 11dc: 9d 01 movw r18, r26 - 11de: 44 27 eor r20, r20 - 11e0: 55 27 eor r21, r21 - 11e2: 20 93 f1 00 sts 0x00F1, r18 + 1456: 9d 01 movw r18, r26 + 1458: 44 27 eor r20, r20 + 145a: 55 27 eor r21, r21 + 145c: 20 93 f1 00 sts 0x00F1, r18 UEDATX = (Data >> 24); - 11e6: 8b 2f mov r24, r27 - 11e8: 99 27 eor r25, r25 - 11ea: aa 27 eor r26, r26 - 11ec: bb 27 eor r27, r27 - 11ee: 80 93 f1 00 sts 0x00F1, r24 + 1460: 8b 2f mov r24, r27 + 1462: 99 27 eor r25, r25 + 1464: aa 27 eor r26, r26 + 1466: bb 27 eor r27, r27 + 1468: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.CharFormat); - 11f2: 88 8d ldd r24, Y+24 ; 0x18 + 146c: 88 8d ldd r24, Y+24 ; 0x18 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 11f4: 80 93 f1 00 sts 0x00F1, r24 + 146e: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.ParityType); - 11f8: 89 8d ldd r24, Y+25 ; 0x19 - 11fa: 80 93 f1 00 sts 0x00F1, r24 + 1472: 89 8d ldd r24, Y+25 ; 0x19 + 1474: 80 93 f1 00 sts 0x00F1, r24 Endpoint_Write_8(CDCInterfaceInfo->State.LineEncoding.DataBits); - 11fe: 8a 8d ldd r24, Y+26 ; 0x1a - 1200: 80 93 f1 00 sts 0x00F1, r24 + 1478: 8a 8d ldd r24, Y+26 ; 0x1a + 147a: 80 93 f1 00 sts 0x00F1, r24 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1204: 80 91 e8 00 lds r24, 0x00E8 - 1208: 8e 77 andi r24, 0x7E ; 126 - 120a: 80 93 e8 00 sts 0x00E8, r24 + 147e: 80 91 e8 00 lds r24, 0x00E8 + 1482: 8e 77 andi r24, 0x7E ; 126 + 1484: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearIN(); Endpoint_ClearStatusStage(); - 120e: eb dc rcall .-1578 ; 0xbe6 - 1210: 53 c0 rjmp .+166 ; 0x12b8 + 1488: b5 dc rcall .-1686 ; 0xdf4 + 148a: 52 c0 rjmp .+164 ; 0x1530 } break; case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1212: 80 91 8f 02 lds r24, 0x028F - 1216: 81 32 cpi r24, 0x21 ; 33 - 1218: 09 f0 breq .+2 ; 0x121c - 121a: 4e c0 rjmp .+156 ; 0x12b8 + 148c: 80 91 9c 02 lds r24, 0x029C + 1490: 81 32 cpi r24, 0x21 ; 33 + 1492: 09 f0 breq .+2 ; 0x1496 + 1494: 4d c0 rjmp .+154 ; 0x1530 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 121c: 80 91 e8 00 lds r24, 0x00E8 - 1220: 87 7f andi r24, 0xF7 ; 247 - 1222: 80 93 e8 00 sts 0x00E8, r24 + 1496: 80 91 e8 00 lds r24, 0x00E8 + 149a: 87 7f andi r24, 0xF7 ; 247 + 149c: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 1226: 05 c0 rjmp .+10 ; 0x1232 + 14a0: 04 c0 rjmp .+8 ; 0x14aa { if (USB_DeviceState == DEVICE_STATE_Unattached) - 1228: 80 91 8e 02 lds r24, 0x028E - 122c: 88 23 and r24, r24 - 122e: 09 f4 brne .+2 ; 0x1232 - 1230: 43 c0 rjmp .+134 ; 0x12b8 + 14a2: 8e b3 in r24, 0x1e ; 30 + 14a4: 88 23 and r24, r24 + 14a6: 09 f4 brne .+2 ; 0x14aa + 14a8: 43 c0 rjmp .+134 ; 0x1530 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1232: 80 91 e8 00 lds r24, 0x00E8 + 14aa: 80 91 e8 00 lds r24, 0x00E8 case CDC_REQ_SetLineEncoding: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) { Endpoint_ClearSETUP(); while (!(Endpoint_IsOUTReceived())) - 1236: 82 ff sbrs r24, 2 - 1238: f7 cf rjmp .-18 ; 0x1228 + 14ae: 82 ff sbrs r24, 2 + 14b0: f8 cf rjmp .-16 ; 0x14a2 { uint32_t Value; uint8_t Bytes[4]; } Data; Data.Bytes[0] = UEDATX; - 123a: 30 91 f1 00 lds r19, 0x00F1 + 14b2: 30 91 f1 00 lds r19, 0x00F1 Data.Bytes[1] = UEDATX; - 123e: 20 91 f1 00 lds r18, 0x00F1 + 14b6: 20 91 f1 00 lds r18, 0x00F1 Data.Bytes[2] = UEDATX; - 1242: 90 91 f1 00 lds r25, 0x00F1 + 14ba: 90 91 f1 00 lds r25, 0x00F1 Data.Bytes[3] = UEDATX; - 1246: 80 91 f1 00 lds r24, 0x00F1 + 14be: 80 91 f1 00 lds r24, 0x00F1 { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } CDCInterfaceInfo->State.LineEncoding.BaudRateBPS = Endpoint_Read_32_LE(); - 124a: 3c 8b std Y+20, r19 ; 0x14 - 124c: 2d 8b std Y+21, r18 ; 0x15 - 124e: 9e 8b std Y+22, r25 ; 0x16 - 1250: 8f 8b std Y+23, r24 ; 0x17 + 14c2: 3c 8b std Y+20, r19 ; 0x14 + 14c4: 2d 8b std Y+21, r18 ; 0x15 + 14c6: 9e 8b std Y+22, r25 ; 0x16 + 14c8: 8f 8b std Y+23, r24 ; 0x17 * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 1252: 80 91 f1 00 lds r24, 0x00F1 + 14ca: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.CharFormat = Endpoint_Read_8(); - 1256: 88 8f std Y+24, r24 ; 0x18 - 1258: 80 91 f1 00 lds r24, 0x00F1 + 14ce: 88 8f std Y+24, r24 ; 0x18 + 14d0: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.ParityType = Endpoint_Read_8(); - 125c: 89 8f std Y+25, r24 ; 0x19 - 125e: 80 91 f1 00 lds r24, 0x00F1 + 14d4: 89 8f std Y+25, r24 ; 0x19 + 14d6: 80 91 f1 00 lds r24, 0x00F1 CDCInterfaceInfo->State.LineEncoding.DataBits = Endpoint_Read_8(); - 1262: 8a 8f std Y+26, r24 ; 0x1a + 14da: 8a 8f std Y+26, r24 ; 0x1a */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1264: 80 91 e8 00 lds r24, 0x00E8 - 1268: 8b 77 andi r24, 0x7B ; 123 - 126a: 80 93 e8 00 sts 0x00E8, r24 + 14dc: 80 91 e8 00 lds r24, 0x00E8 + 14e0: 8b 77 andi r24, 0x7B ; 123 + 14e2: 80 93 e8 00 sts 0x00E8, r24 Endpoint_ClearOUT(); Endpoint_ClearStatusStage(); - 126e: bb dc rcall .-1674 ; 0xbe6 + 14e6: 86 dc rcall .-1780 ; 0xdf4 EVENT_CDC_Device_LineEncodingChanged(CDCInterfaceInfo); - 1270: ce 01 movw r24, r28 - 1272: f7 d9 rcall .-3090 ; 0x662 - 1274: 21 c0 rjmp .+66 ; 0x12b8 + 14e8: ce 01 movw r24, r28 + 14ea: 31 d9 rcall .-3486 ; 0x74e + 14ec: 21 c0 rjmp .+66 ; 0x1530 } break; case CDC_REQ_SetControlLineState: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 1276: 80 91 8f 02 lds r24, 0x028F - 127a: 81 32 cpi r24, 0x21 ; 33 - 127c: e9 f4 brne .+58 ; 0x12b8 + 14ee: 80 91 9c 02 lds r24, 0x029C + 14f2: 81 32 cpi r24, 0x21 ; 33 + 14f4: e9 f4 brne .+58 ; 0x1530 * \note This is not applicable for non CONTROL type endpoints. */ static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearSETUP(void) { UEINTX &= ~(1 << RXSTPI); - 127e: 80 91 e8 00 lds r24, 0x00E8 - 1282: 87 7f andi r24, 0xF7 ; 247 - 1284: 80 93 e8 00 sts 0x00E8, r24 + 14f6: 80 91 e8 00 lds r24, 0x00E8 + 14fa: 87 7f andi r24, 0xF7 ; 247 + 14fc: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 1288: ae dc rcall .-1700 ; 0xbe6 + 1500: 79 dc rcall .-1806 ; 0xdf4 CDCInterfaceInfo->State.ControlLineStates.HostToDevice = USB_ControlRequest.wValue; - 128a: 80 91 91 02 lds r24, 0x0291 - 128e: 90 91 92 02 lds r25, 0x0292 - 1292: 99 8b std Y+17, r25 ; 0x11 - 1294: 88 8b std Y+16, r24 ; 0x10 + 1502: 80 91 9e 02 lds r24, 0x029E + 1506: 90 91 9f 02 lds r25, 0x029F + 150a: 99 8b std Y+17, r25 ; 0x11 + 150c: 88 8b std Y+16, r24 ; 0x10 EVENT_CDC_Device_ControLineStateChanged(CDCInterfaceInfo); - 1296: ce 01 movw r24, r28 - 1298: d8 d0 rcall .+432 ; 0x144a - 129a: 0e c0 rjmp .+28 ; 0x12b8 + 150e: ce 01 movw r24, r28 + 1510: d4 d0 rcall .+424 ; 0x16ba + 1512: 0e c0 rjmp .+28 ; 0x1530 } break; case CDC_REQ_SendBreak: if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) - 129c: 80 91 8f 02 lds r24, 0x028F - 12a0: 81 32 cpi r24, 0x21 ; 33 - 12a2: 51 f4 brne .+20 ; 0x12b8 - 12a4: 80 91 e8 00 lds r24, 0x00E8 - 12a8: 87 7f andi r24, 0xF7 ; 247 - 12aa: 80 93 e8 00 sts 0x00E8, r24 + 1514: 80 91 9c 02 lds r24, 0x029C + 1518: 81 32 cpi r24, 0x21 ; 33 + 151a: 51 f4 brne .+20 ; 0x1530 + 151c: 80 91 e8 00 lds r24, 0x00E8 + 1520: 87 7f andi r24, 0xF7 ; 247 + 1522: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); - 12ae: 9b dc rcall .-1738 ; 0xbe6 + 1526: 66 dc rcall .-1844 ; 0xdf4 EVENT_CDC_Device_BreakSent(CDCInterfaceInfo, (uint8_t)USB_ControlRequest.wValue); - 12b0: ce 01 movw r24, r28 - 12b2: 60 91 91 02 lds r22, 0x0291 - 12b6: c9 d0 rcall .+402 ; 0x144a + 1528: ce 01 movw r24, r28 + 152a: 60 91 9e 02 lds r22, 0x029E + 152e: c5 d0 rcall .+394 ; 0x16ba } break; } } - 12b8: df 91 pop r29 - 12ba: cf 91 pop r28 - 12bc: 08 95 ret + 1530: df 91 pop r29 + 1532: cf 91 pop r28 + 1534: 08 95 ret -000012be : +00001536 : bool CDC_Device_ConfigureEndpoints(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 12be: cf 93 push r28 - 12c0: df 93 push r29 - 12c2: ec 01 movw r28, r24 + 1536: cf 93 push r28 + 1538: df 93 push r29 + 153a: ec 01 movw r28, r24 memset(&CDCInterfaceInfo->State, 0x00, sizeof(CDCInterfaceInfo->State)); - 12c4: 40 96 adiw r24, 0x10 ; 16 - 12c6: fc 01 movw r30, r24 - 12c8: 8b e0 ldi r24, 0x0B ; 11 - 12ca: df 01 movw r26, r30 - 12cc: 1d 92 st X+, r1 - 12ce: 8a 95 dec r24 - 12d0: e9 f7 brne .-6 ; 0x12cc + 153c: 40 96 adiw r24, 0x10 ; 16 + 153e: fc 01 movw r30, r24 + 1540: 8b e0 ldi r24, 0x0B ; 11 + 1542: df 01 movw r26, r30 + 1544: 1d 92 st X+, r1 + 1546: 8a 95 dec r24 + 1548: e9 f7 brne .-6 ; 0x1544 CDCInterfaceInfo->Config.DataINEndpoint.Type = EP_TYPE_BULK; - 12d2: 82 e0 ldi r24, 0x02 ; 2 - 12d4: 8c 83 std Y+4, r24 ; 0x04 + 154a: 82 e0 ldi r24, 0x02 ; 2 + 154c: 8c 83 std Y+4, r24 ; 0x04 CDCInterfaceInfo->Config.DataOUTEndpoint.Type = EP_TYPE_BULK; - 12d6: 89 87 std Y+9, r24 ; 0x09 + 154e: 89 87 std Y+9, r24 ; 0x09 CDCInterfaceInfo->Config.NotificationEndpoint.Type = EP_TYPE_INTERRUPT; - 12d8: 83 e0 ldi r24, 0x03 ; 3 - 12da: 8e 87 std Y+14, r24 ; 0x0e + 1550: 83 e0 ldi r24, 0x03 ; 3 + 1552: 8e 87 std Y+14, r24 ; 0x0e if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) - 12dc: ce 01 movw r24, r28 - 12de: 01 96 adiw r24, 0x01 ; 1 - 12e0: 61 e0 ldi r22, 0x01 ; 1 - 12e2: 3d dc rcall .-1926 ; 0xb5e - 12e4: 88 23 and r24, r24 - 12e6: 59 f0 breq .+22 ; 0x12fe + 1554: ce 01 movw r24, r28 + 1556: 01 96 adiw r24, 0x01 ; 1 + 1558: 61 e0 ldi r22, 0x01 ; 1 + 155a: 08 dc rcall .-2032 ; 0xd6c + 155c: 88 23 and r24, r24 + 155e: 59 f0 breq .+22 ; 0x1576 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) - 12e8: ce 01 movw r24, r28 - 12ea: 06 96 adiw r24, 0x06 ; 6 - 12ec: 61 e0 ldi r22, 0x01 ; 1 - 12ee: 37 dc rcall .-1938 ; 0xb5e - 12f0: 88 23 and r24, r24 - 12f2: 29 f0 breq .+10 ; 0x12fe + 1560: ce 01 movw r24, r28 + 1562: 06 96 adiw r24, 0x06 ; 6 + 1564: 61 e0 ldi r22, 0x01 ; 1 + 1566: 02 dc rcall .-2044 ; 0xd6c + 1568: 88 23 and r24, r24 + 156a: 29 f0 breq .+10 ; 0x1576 return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) - 12f4: ce 01 movw r24, r28 - 12f6: 0b 96 adiw r24, 0x0b ; 11 - 12f8: 61 e0 ldi r22, 0x01 ; 1 - 12fa: 31 dc rcall .-1950 ; 0xb5e - 12fc: 01 c0 rjmp .+2 ; 0x1300 + 156c: ce 01 movw r24, r28 + 156e: 0b 96 adiw r24, 0x0b ; 11 + 1570: 61 e0 ldi r22, 0x01 ; 1 + 1572: fc db rcall .-2056 ; 0xd6c + 1574: 01 c0 rjmp .+2 ; 0x1578 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataINEndpoint, 1))) return false; if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.DataOUTEndpoint, 1))) return false; - 12fe: 80 e0 ldi r24, 0x00 ; 0 + 1576: 80 e0 ldi r24, 0x00 ; 0 if (!(Endpoint_ConfigureEndpointTable(&CDCInterfaceInfo->Config.NotificationEndpoint, 1))) return false; return true; } - 1300: df 91 pop r29 - 1302: cf 91 pop r28 - 1304: 08 95 ret + 1578: df 91 pop r29 + 157a: cf 91 pop r28 + 157c: 08 95 ret -00001306 : +0000157e : return Endpoint_Write_Stream_LE(Buffer, Length, NULL); } uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { - 1306: df 93 push r29 - 1308: cf 93 push r28 - 130a: 0f 92 push r0 - 130c: cd b7 in r28, 0x3d ; 61 - 130e: de b7 in r29, 0x3e ; 62 - 1310: fc 01 movw r30, r24 + 157e: df 93 push r29 + 1580: cf 93 push r28 + 1582: 0f 92 push r0 + 1584: cd b7 in r28, 0x3d ; 61 + 1586: de b7 in r29, 0x3e ; 62 + 1588: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1312: 80 91 8e 02 lds r24, 0x028E - 1316: 84 30 cpi r24, 0x04 ; 4 - 1318: f9 f4 brne .+62 ; 0x1358 - 131a: 24 89 ldd r18, Z+20 ; 0x14 - 131c: 35 89 ldd r19, Z+21 ; 0x15 - 131e: 46 89 ldd r20, Z+22 ; 0x16 - 1320: 57 89 ldd r21, Z+23 ; 0x17 - 1322: 21 15 cp r18, r1 - 1324: 31 05 cpc r19, r1 - 1326: 41 05 cpc r20, r1 - 1328: 51 05 cpc r21, r1 - 132a: b1 f0 breq .+44 ; 0x1358 + 158a: 8e b3 in r24, 0x1e ; 30 + 158c: 84 30 cpi r24, 0x04 ; 4 + 158e: f9 f4 brne .+62 ; 0x15ce + 1590: 24 89 ldd r18, Z+20 ; 0x14 + 1592: 35 89 ldd r19, Z+21 ; 0x15 + 1594: 46 89 ldd r20, Z+22 ; 0x16 + 1596: 57 89 ldd r21, Z+23 ; 0x17 + 1598: 21 15 cp r18, r1 + 159a: 31 05 cpc r19, r1 + 159c: 41 05 cpc r20, r1 + 159e: 51 05 cpc r21, r1 + 15a0: b1 f0 breq .+44 ; 0x15ce */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 132c: 81 81 ldd r24, Z+1 ; 0x01 - 132e: 8f 70 andi r24, 0x0F ; 15 - 1330: 80 93 e9 00 sts 0x00E9, r24 + 15a2: 81 81 ldd r24, Z+1 ; 0x01 + 15a4: 8f 70 andi r24, 0x0F ; 15 + 15a6: 80 93 e9 00 sts 0x00E9, r24 * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 1334: 80 91 e8 00 lds r24, 0x00E8 + 15aa: 80 91 e8 00 lds r24, 0x00E8 return ENDPOINT_RWSTREAM_DeviceDisconnected; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_IsReadWriteAllowed())) - 1338: 85 fd sbrc r24, 5 - 133a: 0a c0 rjmp .+20 ; 0x1350 + 15ae: 85 fd sbrc r24, 5 + 15b0: 0a c0 rjmp .+20 ; 0x15c6 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 133c: 80 91 e8 00 lds r24, 0x00E8 - 1340: 8e 77 andi r24, 0x7E ; 126 - 1342: 80 93 e8 00 sts 0x00E8, r24 + 15b2: 80 91 e8 00 lds r24, 0x00E8 + 15b6: 8e 77 andi r24, 0x7E ; 126 + 15b8: 80 93 e8 00 sts 0x00E8, r24 { Endpoint_ClearIN(); uint8_t ErrorCode; if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 1346: 69 83 std Y+1, r22 ; 0x01 - 1348: 6f dc rcall .-1826 ; 0xc28 - 134a: 69 81 ldd r22, Y+1 ; 0x01 - 134c: 88 23 and r24, r24 - 134e: 29 f4 brne .+10 ; 0x135a + 15bc: 69 83 std Y+1, r22 ; 0x01 + 15be: 39 dc rcall .-1934 ; 0xe32 + 15c0: 69 81 ldd r22, Y+1 ; 0x01 + 15c2: 88 23 and r24, r24 + 15c4: 29 f4 brne .+10 ; 0x15d0 * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. */ static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; static inline void Endpoint_Write_8(const uint8_t Data) { UEDATX = Data; - 1350: 60 93 f1 00 sts 0x00F1, r22 + 15c6: 60 93 f1 00 sts 0x00F1, r22 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; - 1354: 80 e0 ldi r24, 0x00 ; 0 - 1356: 01 c0 rjmp .+2 ; 0x135a + 15ca: 80 e0 ldi r24, 0x00 ; 0 + 15cc: 01 c0 rjmp .+2 ; 0x15d0 uint8_t CDC_Device_SendByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo, const uint8_t Data) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 1358: 82 e0 ldi r24, 0x02 ; 2 + 15ce: 82 e0 ldi r24, 0x02 ; 2 return ErrorCode; } Endpoint_Write_8(Data); return ENDPOINT_READYWAIT_NoError; } - 135a: 0f 90 pop r0 - 135c: cf 91 pop r28 - 135e: df 91 pop r29 - 1360: 08 95 ret + 15d0: 0f 90 pop r0 + 15d2: cf 91 pop r28 + 15d4: df 91 pop r29 + 15d6: 08 95 ret -00001362 : +000015d8 : uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 1362: fc 01 movw r30, r24 + 15d8: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 1364: 80 91 8e 02 lds r24, 0x028E - 1368: 84 30 cpi r24, 0x04 ; 4 - 136a: 19 f5 brne .+70 ; 0x13b2 - 136c: 24 89 ldd r18, Z+20 ; 0x14 - 136e: 35 89 ldd r19, Z+21 ; 0x15 - 1370: 46 89 ldd r20, Z+22 ; 0x16 - 1372: 57 89 ldd r21, Z+23 ; 0x17 - 1374: 21 15 cp r18, r1 - 1376: 31 05 cpc r19, r1 - 1378: 41 05 cpc r20, r1 - 137a: 51 05 cpc r21, r1 - 137c: d1 f0 breq .+52 ; 0x13b2 + 15da: 8e b3 in r24, 0x1e ; 30 + 15dc: 84 30 cpi r24, 0x04 ; 4 + 15de: 19 f5 brne .+70 ; 0x1626 + 15e0: 24 89 ldd r18, Z+20 ; 0x14 + 15e2: 35 89 ldd r19, Z+21 ; 0x15 + 15e4: 46 89 ldd r20, Z+22 ; 0x16 + 15e6: 57 89 ldd r21, Z+23 ; 0x17 + 15e8: 21 15 cp r18, r1 + 15ea: 31 05 cpc r19, r1 + 15ec: 41 05 cpc r20, r1 + 15ee: 51 05 cpc r21, r1 + 15f0: d1 f0 breq .+52 ; 0x1626 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 137e: 81 81 ldd r24, Z+1 ; 0x01 - 1380: 8f 70 andi r24, 0x0F ; 15 - 1382: 80 93 e9 00 sts 0x00E9, r24 + 15f2: 81 81 ldd r24, Z+1 ; 0x01 + 15f4: 8f 70 andi r24, 0x0F ; 15 + 15f6: 80 93 e9 00 sts 0x00E9, r24 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 1386: 80 91 f2 00 lds r24, 0x00F2 + 15fa: 80 91 f2 00 lds r24, 0x00F2 uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) - 138a: 88 23 and r24, r24 - 138c: a1 f0 breq .+40 ; 0x13b6 + 15fe: 88 23 and r24, r24 + 1600: a1 f0 breq .+40 ; 0x162a * on its direction. */ static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsReadWriteAllowed(void) { return ((UEINTX & (1 << RWAL)) ? true : false); - 138e: 90 91 e8 00 lds r25, 0x00E8 + 1602: 90 91 e8 00 lds r25, 0x00E8 */ static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearIN(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); - 1392: 80 91 e8 00 lds r24, 0x00E8 - 1396: 8e 77 andi r24, 0x7E ; 126 - 1398: 80 93 e8 00 sts 0x00E8, r24 + 1606: 80 91 e8 00 lds r24, 0x00E8 + 160a: 8e 77 andi r24, 0x7E ; 126 + 160c: 80 93 e8 00 sts 0x00E8, r24 bool BankFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); if (BankFull) - 139c: 95 fd sbrc r25, 5 - 139e: 0d c0 rjmp .+26 ; 0x13ba + 1610: 95 fd sbrc r25, 5 + 1612: 0d c0 rjmp .+26 ; 0x162e { if ((ErrorCode = Endpoint_WaitUntilReady()) != ENDPOINT_READYWAIT_NoError) - 13a0: 43 dc rcall .-1914 ; 0xc28 - 13a2: 88 23 and r24, r24 - 13a4: 59 f4 brne .+22 ; 0x13bc - 13a6: 90 91 e8 00 lds r25, 0x00E8 - 13aa: 9e 77 andi r25, 0x7E ; 126 - 13ac: 90 93 e8 00 sts 0x00E8, r25 - 13b0: 08 95 ret + 1614: 0e dc rcall .-2020 ; 0xe32 + 1616: 88 23 and r24, r24 + 1618: 59 f4 brne .+22 ; 0x1630 + 161a: 90 91 e8 00 lds r25, 0x00E8 + 161e: 9e 77 andi r25, 0x7E ; 126 + 1620: 90 93 e8 00 sts 0x00E8, r25 + 1624: 08 95 ret } uint8_t CDC_Device_Flush(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return ENDPOINT_RWSTREAM_DeviceDisconnected; - 13b2: 82 e0 ldi r24, 0x02 ; 2 - 13b4: 08 95 ret + 1626: 82 e0 ldi r24, 0x02 ; 2 + 1628: 08 95 ret uint8_t ErrorCode; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (!(Endpoint_BytesInEndpoint())) return ENDPOINT_READYWAIT_NoError; - 13b6: 80 e0 ldi r24, 0x00 ; 0 - 13b8: 08 95 ret + 162a: 80 e0 ldi r24, 0x00 ; 0 + 162c: 08 95 ret return ErrorCode; Endpoint_ClearIN(); } return ENDPOINT_READYWAIT_NoError; - 13ba: 80 e0 ldi r24, 0x00 ; 0 + 162e: 80 e0 ldi r24, 0x00 ; 0 } - 13bc: 08 95 ret + 1630: 08 95 ret -000013be : +00001632 : return true; } void CDC_Device_USBTask(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 13be: 20 91 8e 02 lds r18, 0x028E - 13c2: 24 30 cpi r18, 0x04 ; 4 - 13c4: 99 f4 brne .+38 ; 0x13ec - 13c6: fc 01 movw r30, r24 - 13c8: 24 89 ldd r18, Z+20 ; 0x14 - 13ca: 35 89 ldd r19, Z+21 ; 0x15 - 13cc: 46 89 ldd r20, Z+22 ; 0x16 - 13ce: 57 89 ldd r21, Z+23 ; 0x17 - 13d0: 21 15 cp r18, r1 - 13d2: 31 05 cpc r19, r1 - 13d4: 41 05 cpc r20, r1 - 13d6: 51 05 cpc r21, r1 - 13d8: 49 f0 breq .+18 ; 0x13ec + 1632: 2e b3 in r18, 0x1e ; 30 + 1634: 24 30 cpi r18, 0x04 ; 4 + 1636: 99 f4 brne .+38 ; 0x165e + 1638: fc 01 movw r30, r24 + 163a: 24 89 ldd r18, Z+20 ; 0x14 + 163c: 35 89 ldd r19, Z+21 ; 0x15 + 163e: 46 89 ldd r20, Z+22 ; 0x16 + 1640: 57 89 ldd r21, Z+23 ; 0x17 + 1642: 21 15 cp r18, r1 + 1644: 31 05 cpc r19, r1 + 1646: 41 05 cpc r20, r1 + 1648: 51 05 cpc r21, r1 + 164a: 49 f0 breq .+18 ; 0x165e */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 13da: 21 81 ldd r18, Z+1 ; 0x01 - 13dc: 2f 70 andi r18, 0x0F ; 15 - 13de: 20 93 e9 00 sts 0x00E9, r18 + 164c: 21 81 ldd r18, Z+1 ; 0x01 + 164e: 2f 70 andi r18, 0x0F ; 15 + 1650: 20 93 e9 00 sts 0x00E9, r18 * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. */ static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsINReady(void) { return ((UEINTX & (1 << TXINI)) ? true : false); - 13e2: 20 91 e8 00 lds r18, 0x00E8 + 1654: 20 91 e8 00 lds r18, 0x00E8 return; #if !defined(NO_CLASS_DRIVER_AUTOFLUSH) Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataINEndpoint.Address); if (Endpoint_IsINReady()) - 13e6: 20 ff sbrs r18, 0 - 13e8: 01 c0 rjmp .+2 ; 0x13ec + 1658: 20 ff sbrs r18, 0 + 165a: 01 c0 rjmp .+2 ; 0x165e CDC_Device_Flush(CDCInterfaceInfo); - 13ea: bb cf rjmp .-138 ; 0x1362 - 13ec: 08 95 ret + 165c: bd cf rjmp .-134 ; 0x15d8 + 165e: 08 95 ret -000013ee : +00001660 : return 0; } } int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { - 13ee: fc 01 movw r30, r24 + 1660: fc 01 movw r30, r24 if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) - 13f0: 80 91 8e 02 lds r24, 0x028E - 13f4: 84 30 cpi r24, 0x04 ; 4 - 13f6: 29 f5 brne .+74 ; 0x1442 - 13f8: 24 89 ldd r18, Z+20 ; 0x14 - 13fa: 35 89 ldd r19, Z+21 ; 0x15 - 13fc: 46 89 ldd r20, Z+22 ; 0x16 - 13fe: 57 89 ldd r21, Z+23 ; 0x17 - 1400: 21 15 cp r18, r1 - 1402: 31 05 cpc r19, r1 - 1404: 41 05 cpc r20, r1 - 1406: 51 05 cpc r21, r1 - 1408: e1 f0 breq .+56 ; 0x1442 + 1662: 8e b3 in r24, 0x1e ; 30 + 1664: 84 30 cpi r24, 0x04 ; 4 + 1666: 29 f5 brne .+74 ; 0x16b2 + 1668: 24 89 ldd r18, Z+20 ; 0x14 + 166a: 35 89 ldd r19, Z+21 ; 0x15 + 166c: 46 89 ldd r20, Z+22 ; 0x16 + 166e: 57 89 ldd r21, Z+23 ; 0x17 + 1670: 21 15 cp r18, r1 + 1672: 31 05 cpc r19, r1 + 1674: 41 05 cpc r20, r1 + 1676: 51 05 cpc r21, r1 + 1678: e1 f0 breq .+56 ; 0x16b2 */ static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; static inline void Endpoint_SelectEndpoint(const uint8_t Address) { #if !defined(CONTROL_ONLY_DEVICE) UENUM = (Address & ENDPOINT_EPNUM_MASK); - 140a: 86 81 ldd r24, Z+6 ; 0x06 - 140c: 8f 70 andi r24, 0x0F ; 15 - 140e: 80 93 e9 00 sts 0x00E9, r24 + 167a: 86 81 ldd r24, Z+6 ; 0x06 + 167c: 8f 70 andi r24, 0x0F ; 15 + 167e: 80 93 e9 00 sts 0x00E9, r24 * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. */ static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool Endpoint_IsOUTReceived(void) { return ((UEINTX & (1 << RXOUTI)) ? true : false); - 1412: 80 91 e8 00 lds r24, 0x00E8 + 1682: 80 91 e8 00 lds r24, 0x00E8 int16_t ReceivedByte = -1; Endpoint_SelectEndpoint(CDCInterfaceInfo->Config.DataOUTEndpoint.Address); if (Endpoint_IsOUTReceived()) - 1416: 82 ff sbrs r24, 2 - 1418: 14 c0 rjmp .+40 ; 0x1442 + 1686: 82 ff sbrs r24, 2 + 1688: 14 c0 rjmp .+40 ; 0x16b2 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 141a: 80 91 f2 00 lds r24, 0x00F2 + 168a: 80 91 f2 00 lds r24, 0x00F2 { if (Endpoint_BytesInEndpoint()) - 141e: 88 23 and r24, r24 - 1420: 21 f0 breq .+8 ; 0x142a + 168e: 88 23 and r24, r24 + 1690: 21 f0 breq .+8 ; 0x169a * \return Next byte in the currently selected endpoint's FIFO buffer. */ static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Endpoint_Read_8(void) { return UEDATX; - 1422: 20 91 f1 00 lds r18, 0x00F1 + 1692: 20 91 f1 00 lds r18, 0x00F1 ReceivedByte = Endpoint_Read_8(); - 1426: 30 e0 ldi r19, 0x00 ; 0 - 1428: 02 c0 rjmp .+4 ; 0x142e + 1696: 30 e0 ldi r19, 0x00 ; 0 + 1698: 02 c0 rjmp .+4 ; 0x169e int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 142a: 2f ef ldi r18, 0xFF ; 255 - 142c: 3f ef ldi r19, 0xFF ; 255 + 169a: 2f ef ldi r18, 0xFF ; 255 + 169c: 3f ef ldi r19, 0xFF ; 255 #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) return UEBCX; #elif defined(USB_SERIES_4_AVR) return (((uint16_t)UEBCHX << 8) | UEBCLX); #elif defined(USB_SERIES_2_AVR) return UEBCLX; - 142e: 80 91 f2 00 lds r24, 0x00F2 + 169e: 80 91 f2 00 lds r24, 0x00F2 if (Endpoint_IsOUTReceived()) { if (Endpoint_BytesInEndpoint()) ReceivedByte = Endpoint_Read_8(); if (!(Endpoint_BytesInEndpoint())) - 1432: 88 23 and r24, r24 - 1434: 41 f4 brne .+16 ; 0x1446 + 16a2: 88 23 and r24, r24 + 16a4: 41 f4 brne .+16 ; 0x16b6 */ static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; static inline void Endpoint_ClearOUT(void) { #if !defined(CONTROL_ONLY_DEVICE) UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); - 1436: 80 91 e8 00 lds r24, 0x00E8 - 143a: 8b 77 andi r24, 0x7B ; 123 - 143c: 80 93 e8 00 sts 0x00E8, r24 - 1440: 02 c0 rjmp .+4 ; 0x1446 + 16a6: 80 91 e8 00 lds r24, 0x00E8 + 16aa: 8b 77 andi r24, 0x7B ; 123 + 16ac: 80 93 e8 00 sts 0x00E8, r24 + 16b0: 02 c0 rjmp .+4 ; 0x16b6 int16_t CDC_Device_ReceiveByte(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo) { if ((USB_DeviceState != DEVICE_STATE_Configured) || !(CDCInterfaceInfo->State.LineEncoding.BaudRateBPS)) return -1; int16_t ReceivedByte = -1; - 1442: 2f ef ldi r18, 0xFF ; 255 - 1444: 3f ef ldi r19, 0xFF ; 255 + 16b2: 2f ef ldi r18, 0xFF ; 255 + 16b4: 3f ef ldi r19, 0xFF ; 255 if (!(Endpoint_BytesInEndpoint())) Endpoint_ClearOUT(); } return ReceivedByte; } - 1446: c9 01 movw r24, r18 - 1448: 08 95 ret + 16b6: c9 01 movw r24, r18 + 16b8: 08 95 ret -0000144a : +000016ba : #endif void CDC_Device_Event_Stub(void) { } - 144a: 08 95 ret - -0000144c <__subsf3>: - 144c: 50 58 subi r21, 0x80 ; 128 - -0000144e <__addsf3>: - 144e: bb 27 eor r27, r27 - 1450: aa 27 eor r26, r26 - 1452: 0e d0 rcall .+28 ; 0x1470 <__addsf3x> - 1454: 70 c1 rjmp .+736 ; 0x1736 <__fp_round> - 1456: 61 d1 rcall .+706 ; 0x171a <__fp_pscA> - 1458: 30 f0 brcs .+12 ; 0x1466 <__addsf3+0x18> - 145a: 66 d1 rcall .+716 ; 0x1728 <__fp_pscB> - 145c: 20 f0 brcs .+8 ; 0x1466 <__addsf3+0x18> - 145e: 31 f4 brne .+12 ; 0x146c <__addsf3+0x1e> - 1460: 9f 3f cpi r25, 0xFF ; 255 - 1462: 11 f4 brne .+4 ; 0x1468 <__addsf3+0x1a> - 1464: 1e f4 brtc .+6 ; 0x146c <__addsf3+0x1e> - 1466: 56 c1 rjmp .+684 ; 0x1714 <__fp_nan> - 1468: 0e f4 brtc .+2 ; 0x146c <__addsf3+0x1e> - 146a: e0 95 com r30 - 146c: e7 fb bst r30, 7 - 146e: 4c c1 rjmp .+664 ; 0x1708 <__fp_inf> - -00001470 <__addsf3x>: - 1470: e9 2f mov r30, r25 - 1472: 72 d1 rcall .+740 ; 0x1758 <__fp_split3> - 1474: 80 f3 brcs .-32 ; 0x1456 <__addsf3+0x8> - 1476: ba 17 cp r27, r26 - 1478: 62 07 cpc r22, r18 - 147a: 73 07 cpc r23, r19 - 147c: 84 07 cpc r24, r20 - 147e: 95 07 cpc r25, r21 - 1480: 18 f0 brcs .+6 ; 0x1488 <__addsf3x+0x18> - 1482: 71 f4 brne .+28 ; 0x14a0 <__addsf3x+0x30> - 1484: 9e f5 brtc .+102 ; 0x14ec <__addsf3x+0x7c> - 1486: 8a c1 rjmp .+788 ; 0x179c <__fp_zero> - 1488: 0e f4 brtc .+2 ; 0x148c <__addsf3x+0x1c> - 148a: e0 95 com r30 - 148c: 0b 2e mov r0, r27 - 148e: ba 2f mov r27, r26 - 1490: a0 2d mov r26, r0 - 1492: 0b 01 movw r0, r22 - 1494: b9 01 movw r22, r18 - 1496: 90 01 movw r18, r0 - 1498: 0c 01 movw r0, r24 - 149a: ca 01 movw r24, r20 - 149c: a0 01 movw r20, r0 - 149e: 11 24 eor r1, r1 - 14a0: ff 27 eor r31, r31 - 14a2: 59 1b sub r21, r25 - 14a4: 99 f0 breq .+38 ; 0x14cc <__addsf3x+0x5c> - 14a6: 59 3f cpi r21, 0xF9 ; 249 - 14a8: 50 f4 brcc .+20 ; 0x14be <__addsf3x+0x4e> - 14aa: 50 3e cpi r21, 0xE0 ; 224 - 14ac: 68 f1 brcs .+90 ; 0x1508 <__addsf3x+0x98> - 14ae: 1a 16 cp r1, r26 - 14b0: f0 40 sbci r31, 0x00 ; 0 - 14b2: a2 2f mov r26, r18 - 14b4: 23 2f mov r18, r19 - 14b6: 34 2f mov r19, r20 - 14b8: 44 27 eor r20, r20 - 14ba: 58 5f subi r21, 0xF8 ; 248 - 14bc: f3 cf rjmp .-26 ; 0x14a4 <__addsf3x+0x34> - 14be: 46 95 lsr r20 - 14c0: 37 95 ror r19 - 14c2: 27 95 ror r18 - 14c4: a7 95 ror r26 - 14c6: f0 40 sbci r31, 0x00 ; 0 - 14c8: 53 95 inc r21 - 14ca: c9 f7 brne .-14 ; 0x14be <__addsf3x+0x4e> - 14cc: 7e f4 brtc .+30 ; 0x14ec <__addsf3x+0x7c> - 14ce: 1f 16 cp r1, r31 - 14d0: ba 0b sbc r27, r26 - 14d2: 62 0b sbc r22, r18 - 14d4: 73 0b sbc r23, r19 - 14d6: 84 0b sbc r24, r20 - 14d8: ba f0 brmi .+46 ; 0x1508 <__addsf3x+0x98> - 14da: 91 50 subi r25, 0x01 ; 1 - 14dc: a1 f0 breq .+40 ; 0x1506 <__addsf3x+0x96> - 14de: ff 0f add r31, r31 - 14e0: bb 1f adc r27, r27 - 14e2: 66 1f adc r22, r22 - 14e4: 77 1f adc r23, r23 - 14e6: 88 1f adc r24, r24 - 14e8: c2 f7 brpl .-16 ; 0x14da <__addsf3x+0x6a> - 14ea: 0e c0 rjmp .+28 ; 0x1508 <__addsf3x+0x98> - 14ec: ba 0f add r27, r26 - 14ee: 62 1f adc r22, r18 - 14f0: 73 1f adc r23, r19 - 14f2: 84 1f adc r24, r20 - 14f4: 48 f4 brcc .+18 ; 0x1508 <__addsf3x+0x98> - 14f6: 87 95 ror r24 - 14f8: 77 95 ror r23 - 14fa: 67 95 ror r22 - 14fc: b7 95 ror r27 - 14fe: f7 95 ror r31 - 1500: 9e 3f cpi r25, 0xFE ; 254 - 1502: 08 f0 brcs .+2 ; 0x1506 <__addsf3x+0x96> - 1504: b3 cf rjmp .-154 ; 0x146c <__addsf3+0x1e> - 1506: 93 95 inc r25 - 1508: 88 0f add r24, r24 - 150a: 08 f0 brcs .+2 ; 0x150e <__addsf3x+0x9e> - 150c: 99 27 eor r25, r25 - 150e: ee 0f add r30, r30 - 1510: 97 95 ror r25 - 1512: 87 95 ror r24 - 1514: 08 95 ret - -00001516 <__cmpsf2>: - 1516: d4 d0 rcall .+424 ; 0x16c0 <__fp_cmp> - 1518: 08 f4 brcc .+2 ; 0x151c <__cmpsf2+0x6> - 151a: 81 e0 ldi r24, 0x01 ; 1 - 151c: 08 95 ret - -0000151e <__divsf3>: - 151e: 0c d0 rcall .+24 ; 0x1538 <__divsf3x> - 1520: 0a c1 rjmp .+532 ; 0x1736 <__fp_round> - 1522: 02 d1 rcall .+516 ; 0x1728 <__fp_pscB> - 1524: 40 f0 brcs .+16 ; 0x1536 <__divsf3+0x18> - 1526: f9 d0 rcall .+498 ; 0x171a <__fp_pscA> - 1528: 30 f0 brcs .+12 ; 0x1536 <__divsf3+0x18> - 152a: 21 f4 brne .+8 ; 0x1534 <__divsf3+0x16> - 152c: 5f 3f cpi r21, 0xFF ; 255 - 152e: 19 f0 breq .+6 ; 0x1536 <__divsf3+0x18> - 1530: eb c0 rjmp .+470 ; 0x1708 <__fp_inf> - 1532: 51 11 cpse r21, r1 - 1534: 34 c1 rjmp .+616 ; 0x179e <__fp_szero> - 1536: ee c0 rjmp .+476 ; 0x1714 <__fp_nan> - -00001538 <__divsf3x>: - 1538: 0f d1 rcall .+542 ; 0x1758 <__fp_split3> - 153a: 98 f3 brcs .-26 ; 0x1522 <__divsf3+0x4> - -0000153c <__divsf3_pse>: - 153c: 99 23 and r25, r25 - 153e: c9 f3 breq .-14 ; 0x1532 <__divsf3+0x14> - 1540: 55 23 and r21, r21 - 1542: b1 f3 breq .-20 ; 0x1530 <__divsf3+0x12> - 1544: 95 1b sub r25, r21 - 1546: 55 0b sbc r21, r21 - 1548: bb 27 eor r27, r27 - 154a: aa 27 eor r26, r26 - 154c: 62 17 cp r22, r18 - 154e: 73 07 cpc r23, r19 - 1550: 84 07 cpc r24, r20 - 1552: 38 f0 brcs .+14 ; 0x1562 <__divsf3_pse+0x26> - 1554: 9f 5f subi r25, 0xFF ; 255 - 1556: 5f 4f sbci r21, 0xFF ; 255 - 1558: 22 0f add r18, r18 - 155a: 33 1f adc r19, r19 - 155c: 44 1f adc r20, r20 - 155e: aa 1f adc r26, r26 - 1560: a9 f3 breq .-22 ; 0x154c <__divsf3_pse+0x10> - 1562: 33 d0 rcall .+102 ; 0x15ca <__divsf3_pse+0x8e> - 1564: 0e 2e mov r0, r30 - 1566: 3a f0 brmi .+14 ; 0x1576 <__divsf3_pse+0x3a> - 1568: e0 e8 ldi r30, 0x80 ; 128 - 156a: 30 d0 rcall .+96 ; 0x15cc <__divsf3_pse+0x90> - 156c: 91 50 subi r25, 0x01 ; 1 - 156e: 50 40 sbci r21, 0x00 ; 0 - 1570: e6 95 lsr r30 - 1572: 00 1c adc r0, r0 - 1574: ca f7 brpl .-14 ; 0x1568 <__divsf3_pse+0x2c> - 1576: 29 d0 rcall .+82 ; 0x15ca <__divsf3_pse+0x8e> - 1578: fe 2f mov r31, r30 - 157a: 27 d0 rcall .+78 ; 0x15ca <__divsf3_pse+0x8e> - 157c: 66 0f add r22, r22 - 157e: 77 1f adc r23, r23 - 1580: 88 1f adc r24, r24 - 1582: bb 1f adc r27, r27 - 1584: 26 17 cp r18, r22 - 1586: 37 07 cpc r19, r23 - 1588: 48 07 cpc r20, r24 - 158a: ab 07 cpc r26, r27 - 158c: b0 e8 ldi r27, 0x80 ; 128 - 158e: 09 f0 breq .+2 ; 0x1592 <__divsf3_pse+0x56> - 1590: bb 0b sbc r27, r27 - 1592: 80 2d mov r24, r0 - 1594: bf 01 movw r22, r30 - 1596: ff 27 eor r31, r31 - 1598: 93 58 subi r25, 0x83 ; 131 - 159a: 5f 4f sbci r21, 0xFF ; 255 - 159c: 2a f0 brmi .+10 ; 0x15a8 <__divsf3_pse+0x6c> - 159e: 9e 3f cpi r25, 0xFE ; 254 - 15a0: 51 05 cpc r21, r1 - 15a2: 68 f0 brcs .+26 ; 0x15be <__divsf3_pse+0x82> - 15a4: b1 c0 rjmp .+354 ; 0x1708 <__fp_inf> - 15a6: fb c0 rjmp .+502 ; 0x179e <__fp_szero> - 15a8: 5f 3f cpi r21, 0xFF ; 255 - 15aa: ec f3 brlt .-6 ; 0x15a6 <__divsf3_pse+0x6a> - 15ac: 98 3e cpi r25, 0xE8 ; 232 - 15ae: dc f3 brlt .-10 ; 0x15a6 <__divsf3_pse+0x6a> - 15b0: 86 95 lsr r24 - 15b2: 77 95 ror r23 - 15b4: 67 95 ror r22 - 15b6: b7 95 ror r27 - 15b8: f7 95 ror r31 - 15ba: 9f 5f subi r25, 0xFF ; 255 - 15bc: c9 f7 brne .-14 ; 0x15b0 <__divsf3_pse+0x74> - 15be: 88 0f add r24, r24 - 15c0: 91 1d adc r25, r1 - 15c2: 96 95 lsr r25 - 15c4: 87 95 ror r24 - 15c6: 97 f9 bld r25, 7 - 15c8: 08 95 ret - 15ca: e1 e0 ldi r30, 0x01 ; 1 - 15cc: 66 0f add r22, r22 - 15ce: 77 1f adc r23, r23 - 15d0: 88 1f adc r24, r24 - 15d2: bb 1f adc r27, r27 - 15d4: 62 17 cp r22, r18 - 15d6: 73 07 cpc r23, r19 - 15d8: 84 07 cpc r24, r20 - 15da: ba 07 cpc r27, r26 - 15dc: 20 f0 brcs .+8 ; 0x15e6 <__divsf3_pse+0xaa> - 15de: 62 1b sub r22, r18 - 15e0: 73 0b sbc r23, r19 - 15e2: 84 0b sbc r24, r20 - 15e4: ba 0b sbc r27, r26 - 15e6: ee 1f adc r30, r30 - 15e8: 88 f7 brcc .-30 ; 0x15cc <__divsf3_pse+0x90> - 15ea: e0 95 com r30 - 15ec: 08 95 ret - -000015ee <__fixunssfsi>: - 15ee: bc d0 rcall .+376 ; 0x1768 <__fp_splitA> - 15f0: 88 f0 brcs .+34 ; 0x1614 <__fixunssfsi+0x26> - 15f2: 9f 57 subi r25, 0x7F ; 127 - 15f4: 90 f0 brcs .+36 ; 0x161a <__fixunssfsi+0x2c> - 15f6: b9 2f mov r27, r25 - 15f8: 99 27 eor r25, r25 - 15fa: b7 51 subi r27, 0x17 ; 23 - 15fc: a0 f0 brcs .+40 ; 0x1626 <__fixunssfsi+0x38> - 15fe: d1 f0 breq .+52 ; 0x1634 <__fixunssfsi+0x46> - 1600: 66 0f add r22, r22 - 1602: 77 1f adc r23, r23 - 1604: 88 1f adc r24, r24 - 1606: 99 1f adc r25, r25 - 1608: 1a f0 brmi .+6 ; 0x1610 <__fixunssfsi+0x22> - 160a: ba 95 dec r27 - 160c: c9 f7 brne .-14 ; 0x1600 <__fixunssfsi+0x12> - 160e: 12 c0 rjmp .+36 ; 0x1634 <__fixunssfsi+0x46> - 1610: b1 30 cpi r27, 0x01 ; 1 - 1612: 81 f0 breq .+32 ; 0x1634 <__fixunssfsi+0x46> - 1614: c3 d0 rcall .+390 ; 0x179c <__fp_zero> - 1616: b1 e0 ldi r27, 0x01 ; 1 - 1618: 08 95 ret - 161a: c0 c0 rjmp .+384 ; 0x179c <__fp_zero> - 161c: 67 2f mov r22, r23 - 161e: 78 2f mov r23, r24 - 1620: 88 27 eor r24, r24 - 1622: b8 5f subi r27, 0xF8 ; 248 - 1624: 39 f0 breq .+14 ; 0x1634 <__fixunssfsi+0x46> - 1626: b9 3f cpi r27, 0xF9 ; 249 - 1628: cc f3 brlt .-14 ; 0x161c <__fixunssfsi+0x2e> - 162a: 86 95 lsr r24 - 162c: 77 95 ror r23 - 162e: 67 95 ror r22 - 1630: b3 95 inc r27 - 1632: d9 f7 brne .-10 ; 0x162a <__fixunssfsi+0x3c> - 1634: 3e f4 brtc .+14 ; 0x1644 <__fixunssfsi+0x56> - 1636: 90 95 com r25 - 1638: 80 95 com r24 - 163a: 70 95 com r23 - 163c: 61 95 neg r22 - 163e: 7f 4f sbci r23, 0xFF ; 255 - 1640: 8f 4f sbci r24, 0xFF ; 255 - 1642: 9f 4f sbci r25, 0xFF ; 255 - 1644: 08 95 ret - -00001646 <__floatunsisf>: - 1646: e8 94 clt - 1648: 09 c0 rjmp .+18 ; 0x165c <__floatsisf+0x12> - -0000164a <__floatsisf>: - 164a: 97 fb bst r25, 7 - 164c: 3e f4 brtc .+14 ; 0x165c <__floatsisf+0x12> - 164e: 90 95 com r25 - 1650: 80 95 com r24 - 1652: 70 95 com r23 - 1654: 61 95 neg r22 - 1656: 7f 4f sbci r23, 0xFF ; 255 - 1658: 8f 4f sbci r24, 0xFF ; 255 - 165a: 9f 4f sbci r25, 0xFF ; 255 - 165c: 99 23 and r25, r25 - 165e: a9 f0 breq .+42 ; 0x168a <__floatsisf+0x40> - 1660: f9 2f mov r31, r25 - 1662: 96 e9 ldi r25, 0x96 ; 150 - 1664: bb 27 eor r27, r27 - 1666: 93 95 inc r25 - 1668: f6 95 lsr r31 - 166a: 87 95 ror r24 - 166c: 77 95 ror r23 - 166e: 67 95 ror r22 - 1670: b7 95 ror r27 - 1672: f1 11 cpse r31, r1 - 1674: f8 cf rjmp .-16 ; 0x1666 <__floatsisf+0x1c> - 1676: fa f4 brpl .+62 ; 0x16b6 <__floatsisf+0x6c> - 1678: bb 0f add r27, r27 - 167a: 11 f4 brne .+4 ; 0x1680 <__floatsisf+0x36> - 167c: 60 ff sbrs r22, 0 - 167e: 1b c0 rjmp .+54 ; 0x16b6 <__floatsisf+0x6c> - 1680: 6f 5f subi r22, 0xFF ; 255 - 1682: 7f 4f sbci r23, 0xFF ; 255 - 1684: 8f 4f sbci r24, 0xFF ; 255 - 1686: 9f 4f sbci r25, 0xFF ; 255 - 1688: 16 c0 rjmp .+44 ; 0x16b6 <__floatsisf+0x6c> - 168a: 88 23 and r24, r24 - 168c: 11 f0 breq .+4 ; 0x1692 <__floatsisf+0x48> - 168e: 96 e9 ldi r25, 0x96 ; 150 - 1690: 11 c0 rjmp .+34 ; 0x16b4 <__floatsisf+0x6a> - 1692: 77 23 and r23, r23 - 1694: 21 f0 breq .+8 ; 0x169e <__floatsisf+0x54> - 1696: 9e e8 ldi r25, 0x8E ; 142 - 1698: 87 2f mov r24, r23 - 169a: 76 2f mov r23, r22 - 169c: 05 c0 rjmp .+10 ; 0x16a8 <__floatsisf+0x5e> - 169e: 66 23 and r22, r22 - 16a0: 71 f0 breq .+28 ; 0x16be <__floatsisf+0x74> - 16a2: 96 e8 ldi r25, 0x86 ; 134 - 16a4: 86 2f mov r24, r22 - 16a6: 70 e0 ldi r23, 0x00 ; 0 - 16a8: 60 e0 ldi r22, 0x00 ; 0 - 16aa: 2a f0 brmi .+10 ; 0x16b6 <__floatsisf+0x6c> - 16ac: 9a 95 dec r25 - 16ae: 66 0f add r22, r22 - 16b0: 77 1f adc r23, r23 - 16b2: 88 1f adc r24, r24 - 16b4: da f7 brpl .-10 ; 0x16ac <__floatsisf+0x62> - 16b6: 88 0f add r24, r24 - 16b8: 96 95 lsr r25 - 16ba: 87 95 ror r24 - 16bc: 97 f9 bld r25, 7 - 16be: 08 95 ret - -000016c0 <__fp_cmp>: - 16c0: 99 0f add r25, r25 - 16c2: 00 08 sbc r0, r0 - 16c4: 55 0f add r21, r21 - 16c6: aa 0b sbc r26, r26 - 16c8: e0 e8 ldi r30, 0x80 ; 128 - 16ca: fe ef ldi r31, 0xFE ; 254 - 16cc: 16 16 cp r1, r22 - 16ce: 17 06 cpc r1, r23 - 16d0: e8 07 cpc r30, r24 - 16d2: f9 07 cpc r31, r25 - 16d4: c0 f0 brcs .+48 ; 0x1706 <__fp_cmp+0x46> - 16d6: 12 16 cp r1, r18 - 16d8: 13 06 cpc r1, r19 - 16da: e4 07 cpc r30, r20 - 16dc: f5 07 cpc r31, r21 - 16de: 98 f0 brcs .+38 ; 0x1706 <__fp_cmp+0x46> - 16e0: 62 1b sub r22, r18 - 16e2: 73 0b sbc r23, r19 - 16e4: 84 0b sbc r24, r20 - 16e6: 95 0b sbc r25, r21 - 16e8: 39 f4 brne .+14 ; 0x16f8 <__fp_cmp+0x38> - 16ea: 0a 26 eor r0, r26 - 16ec: 61 f0 breq .+24 ; 0x1706 <__fp_cmp+0x46> - 16ee: 23 2b or r18, r19 - 16f0: 24 2b or r18, r20 - 16f2: 25 2b or r18, r21 - 16f4: 21 f4 brne .+8 ; 0x16fe <__fp_cmp+0x3e> - 16f6: 08 95 ret - 16f8: 0a 26 eor r0, r26 - 16fa: 09 f4 brne .+2 ; 0x16fe <__fp_cmp+0x3e> - 16fc: a1 40 sbci r26, 0x01 ; 1 - 16fe: a6 95 lsr r26 - 1700: 8f ef ldi r24, 0xFF ; 255 - 1702: 81 1d adc r24, r1 - 1704: 81 1d adc r24, r1 - 1706: 08 95 ret - -00001708 <__fp_inf>: - 1708: 97 f9 bld r25, 7 - 170a: 9f 67 ori r25, 0x7F ; 127 - 170c: 80 e8 ldi r24, 0x80 ; 128 - 170e: 70 e0 ldi r23, 0x00 ; 0 - 1710: 60 e0 ldi r22, 0x00 ; 0 - 1712: 08 95 ret - -00001714 <__fp_nan>: - 1714: 9f ef ldi r25, 0xFF ; 255 - 1716: 80 ec ldi r24, 0xC0 ; 192 - 1718: 08 95 ret - -0000171a <__fp_pscA>: - 171a: 00 24 eor r0, r0 - 171c: 0a 94 dec r0 - 171e: 16 16 cp r1, r22 - 1720: 17 06 cpc r1, r23 - 1722: 18 06 cpc r1, r24 - 1724: 09 06 cpc r0, r25 - 1726: 08 95 ret - -00001728 <__fp_pscB>: - 1728: 00 24 eor r0, r0 - 172a: 0a 94 dec r0 - 172c: 12 16 cp r1, r18 - 172e: 13 06 cpc r1, r19 - 1730: 14 06 cpc r1, r20 - 1732: 05 06 cpc r0, r21 - 1734: 08 95 ret - -00001736 <__fp_round>: - 1736: 09 2e mov r0, r25 - 1738: 03 94 inc r0 - 173a: 00 0c add r0, r0 - 173c: 11 f4 brne .+4 ; 0x1742 <__fp_round+0xc> - 173e: 88 23 and r24, r24 - 1740: 52 f0 brmi .+20 ; 0x1756 <__fp_round+0x20> - 1742: bb 0f add r27, r27 - 1744: 40 f4 brcc .+16 ; 0x1756 <__fp_round+0x20> - 1746: bf 2b or r27, r31 - 1748: 11 f4 brne .+4 ; 0x174e <__fp_round+0x18> - 174a: 60 ff sbrs r22, 0 - 174c: 04 c0 rjmp .+8 ; 0x1756 <__fp_round+0x20> - 174e: 6f 5f subi r22, 0xFF ; 255 - 1750: 7f 4f sbci r23, 0xFF ; 255 - 1752: 8f 4f sbci r24, 0xFF ; 255 - 1754: 9f 4f sbci r25, 0xFF ; 255 - 1756: 08 95 ret - -00001758 <__fp_split3>: - 1758: 57 fd sbrc r21, 7 - 175a: 90 58 subi r25, 0x80 ; 128 - 175c: 44 0f add r20, r20 - 175e: 55 1f adc r21, r21 - 1760: 59 f0 breq .+22 ; 0x1778 <__fp_splitA+0x10> - 1762: 5f 3f cpi r21, 0xFF ; 255 - 1764: 71 f0 breq .+28 ; 0x1782 <__fp_splitA+0x1a> - 1766: 47 95 ror r20 - -00001768 <__fp_splitA>: - 1768: 88 0f add r24, r24 - 176a: 97 fb bst r25, 7 - 176c: 99 1f adc r25, r25 - 176e: 61 f0 breq .+24 ; 0x1788 <__fp_splitA+0x20> - 1770: 9f 3f cpi r25, 0xFF ; 255 - 1772: 79 f0 breq .+30 ; 0x1792 <__fp_splitA+0x2a> - 1774: 87 95 ror r24 - 1776: 08 95 ret - 1778: 12 16 cp r1, r18 - 177a: 13 06 cpc r1, r19 - 177c: 14 06 cpc r1, r20 - 177e: 55 1f adc r21, r21 - 1780: f2 cf rjmp .-28 ; 0x1766 <__fp_split3+0xe> - 1782: 46 95 lsr r20 - 1784: f1 df rcall .-30 ; 0x1768 <__fp_splitA> - 1786: 08 c0 rjmp .+16 ; 0x1798 <__fp_splitA+0x30> - 1788: 16 16 cp r1, r22 - 178a: 17 06 cpc r1, r23 - 178c: 18 06 cpc r1, r24 - 178e: 99 1f adc r25, r25 - 1790: f1 cf rjmp .-30 ; 0x1774 <__fp_splitA+0xc> - 1792: 86 95 lsr r24 - 1794: 71 05 cpc r23, r1 - 1796: 61 05 cpc r22, r1 - 1798: 08 94 sec - 179a: 08 95 ret - -0000179c <__fp_zero>: - 179c: e8 94 clt - -0000179e <__fp_szero>: - 179e: bb 27 eor r27, r27 - 17a0: 66 27 eor r22, r22 - 17a2: 77 27 eor r23, r23 - 17a4: cb 01 movw r24, r22 - 17a6: 97 f9 bld r25, 7 - 17a8: 08 95 ret - -000017aa <__gesf2>: - 17aa: 8a df rcall .-236 ; 0x16c0 <__fp_cmp> - 17ac: 08 f4 brcc .+2 ; 0x17b0 <__gesf2+0x6> - 17ae: 8f ef ldi r24, 0xFF ; 255 - 17b0: 08 95 ret - -000017b2 <__udivmodsi4>: - 17b2: a1 e2 ldi r26, 0x21 ; 33 - 17b4: 1a 2e mov r1, r26 - 17b6: aa 1b sub r26, r26 - 17b8: bb 1b sub r27, r27 - 17ba: fd 01 movw r30, r26 - 17bc: 0d c0 rjmp .+26 ; 0x17d8 <__udivmodsi4_ep> - -000017be <__udivmodsi4_loop>: - 17be: aa 1f adc r26, r26 - 17c0: bb 1f adc r27, r27 - 17c2: ee 1f adc r30, r30 - 17c4: ff 1f adc r31, r31 - 17c6: a2 17 cp r26, r18 - 17c8: b3 07 cpc r27, r19 - 17ca: e4 07 cpc r30, r20 - 17cc: f5 07 cpc r31, r21 - 17ce: 20 f0 brcs .+8 ; 0x17d8 <__udivmodsi4_ep> - 17d0: a2 1b sub r26, r18 - 17d2: b3 0b sbc r27, r19 - 17d4: e4 0b sbc r30, r20 - 17d6: f5 0b sbc r31, r21 - -000017d8 <__udivmodsi4_ep>: - 17d8: 66 1f adc r22, r22 - 17da: 77 1f adc r23, r23 - 17dc: 88 1f adc r24, r24 - 17de: 99 1f adc r25, r25 - 17e0: 1a 94 dec r1 - 17e2: 69 f7 brne .-38 ; 0x17be <__udivmodsi4_loop> - 17e4: 60 95 com r22 - 17e6: 70 95 com r23 - 17e8: 80 95 com r24 - 17ea: 90 95 com r25 - 17ec: 9b 01 movw r18, r22 - 17ee: ac 01 movw r20, r24 - 17f0: bd 01 movw r22, r26 - 17f2: cf 01 movw r24, r30 - 17f4: 08 95 ret - -000017f6 <_exit>: - 17f6: f8 94 cli - -000017f8 <__stop_program>: - 17f8: ff cf rjmp .-2 ; 0x17f8 <__stop_program> + 16ba: 08 95 ret + +000016bc <__subsf3>: + 16bc: 50 58 subi r21, 0x80 ; 128 + +000016be <__addsf3>: + 16be: bb 27 eor r27, r27 + 16c0: aa 27 eor r26, r26 + 16c2: 0e d0 rcall .+28 ; 0x16e0 <__addsf3x> + 16c4: 70 c1 rjmp .+736 ; 0x19a6 <__fp_round> + 16c6: 61 d1 rcall .+706 ; 0x198a <__fp_pscA> + 16c8: 30 f0 brcs .+12 ; 0x16d6 <__addsf3+0x18> + 16ca: 66 d1 rcall .+716 ; 0x1998 <__fp_pscB> + 16cc: 20 f0 brcs .+8 ; 0x16d6 <__addsf3+0x18> + 16ce: 31 f4 brne .+12 ; 0x16dc <__addsf3+0x1e> + 16d0: 9f 3f cpi r25, 0xFF ; 255 + 16d2: 11 f4 brne .+4 ; 0x16d8 <__addsf3+0x1a> + 16d4: 1e f4 brtc .+6 ; 0x16dc <__addsf3+0x1e> + 16d6: 56 c1 rjmp .+684 ; 0x1984 <__fp_nan> + 16d8: 0e f4 brtc .+2 ; 0x16dc <__addsf3+0x1e> + 16da: e0 95 com r30 + 16dc: e7 fb bst r30, 7 + 16de: 4c c1 rjmp .+664 ; 0x1978 <__fp_inf> + +000016e0 <__addsf3x>: + 16e0: e9 2f mov r30, r25 + 16e2: 72 d1 rcall .+740 ; 0x19c8 <__fp_split3> + 16e4: 80 f3 brcs .-32 ; 0x16c6 <__addsf3+0x8> + 16e6: ba 17 cp r27, r26 + 16e8: 62 07 cpc r22, r18 + 16ea: 73 07 cpc r23, r19 + 16ec: 84 07 cpc r24, r20 + 16ee: 95 07 cpc r25, r21 + 16f0: 18 f0 brcs .+6 ; 0x16f8 <__addsf3x+0x18> + 16f2: 71 f4 brne .+28 ; 0x1710 <__addsf3x+0x30> + 16f4: 9e f5 brtc .+102 ; 0x175c <__addsf3x+0x7c> + 16f6: 8a c1 rjmp .+788 ; 0x1a0c <__fp_zero> + 16f8: 0e f4 brtc .+2 ; 0x16fc <__addsf3x+0x1c> + 16fa: e0 95 com r30 + 16fc: 0b 2e mov r0, r27 + 16fe: ba 2f mov r27, r26 + 1700: a0 2d mov r26, r0 + 1702: 0b 01 movw r0, r22 + 1704: b9 01 movw r22, r18 + 1706: 90 01 movw r18, r0 + 1708: 0c 01 movw r0, r24 + 170a: ca 01 movw r24, r20 + 170c: a0 01 movw r20, r0 + 170e: 11 24 eor r1, r1 + 1710: ff 27 eor r31, r31 + 1712: 59 1b sub r21, r25 + 1714: 99 f0 breq .+38 ; 0x173c <__addsf3x+0x5c> + 1716: 59 3f cpi r21, 0xF9 ; 249 + 1718: 50 f4 brcc .+20 ; 0x172e <__addsf3x+0x4e> + 171a: 50 3e cpi r21, 0xE0 ; 224 + 171c: 68 f1 brcs .+90 ; 0x1778 <__addsf3x+0x98> + 171e: 1a 16 cp r1, r26 + 1720: f0 40 sbci r31, 0x00 ; 0 + 1722: a2 2f mov r26, r18 + 1724: 23 2f mov r18, r19 + 1726: 34 2f mov r19, r20 + 1728: 44 27 eor r20, r20 + 172a: 58 5f subi r21, 0xF8 ; 248 + 172c: f3 cf rjmp .-26 ; 0x1714 <__addsf3x+0x34> + 172e: 46 95 lsr r20 + 1730: 37 95 ror r19 + 1732: 27 95 ror r18 + 1734: a7 95 ror r26 + 1736: f0 40 sbci r31, 0x00 ; 0 + 1738: 53 95 inc r21 + 173a: c9 f7 brne .-14 ; 0x172e <__addsf3x+0x4e> + 173c: 7e f4 brtc .+30 ; 0x175c <__addsf3x+0x7c> + 173e: 1f 16 cp r1, r31 + 1740: ba 0b sbc r27, r26 + 1742: 62 0b sbc r22, r18 + 1744: 73 0b sbc r23, r19 + 1746: 84 0b sbc r24, r20 + 1748: ba f0 brmi .+46 ; 0x1778 <__addsf3x+0x98> + 174a: 91 50 subi r25, 0x01 ; 1 + 174c: a1 f0 breq .+40 ; 0x1776 <__addsf3x+0x96> + 174e: ff 0f add r31, r31 + 1750: bb 1f adc r27, r27 + 1752: 66 1f adc r22, r22 + 1754: 77 1f adc r23, r23 + 1756: 88 1f adc r24, r24 + 1758: c2 f7 brpl .-16 ; 0x174a <__addsf3x+0x6a> + 175a: 0e c0 rjmp .+28 ; 0x1778 <__addsf3x+0x98> + 175c: ba 0f add r27, r26 + 175e: 62 1f adc r22, r18 + 1760: 73 1f adc r23, r19 + 1762: 84 1f adc r24, r20 + 1764: 48 f4 brcc .+18 ; 0x1778 <__addsf3x+0x98> + 1766: 87 95 ror r24 + 1768: 77 95 ror r23 + 176a: 67 95 ror r22 + 176c: b7 95 ror r27 + 176e: f7 95 ror r31 + 1770: 9e 3f cpi r25, 0xFE ; 254 + 1772: 08 f0 brcs .+2 ; 0x1776 <__addsf3x+0x96> + 1774: b3 cf rjmp .-154 ; 0x16dc <__addsf3+0x1e> + 1776: 93 95 inc r25 + 1778: 88 0f add r24, r24 + 177a: 08 f0 brcs .+2 ; 0x177e <__addsf3x+0x9e> + 177c: 99 27 eor r25, r25 + 177e: ee 0f add r30, r30 + 1780: 97 95 ror r25 + 1782: 87 95 ror r24 + 1784: 08 95 ret + +00001786 <__cmpsf2>: + 1786: d4 d0 rcall .+424 ; 0x1930 <__fp_cmp> + 1788: 08 f4 brcc .+2 ; 0x178c <__cmpsf2+0x6> + 178a: 81 e0 ldi r24, 0x01 ; 1 + 178c: 08 95 ret + +0000178e <__divsf3>: + 178e: 0c d0 rcall .+24 ; 0x17a8 <__divsf3x> + 1790: 0a c1 rjmp .+532 ; 0x19a6 <__fp_round> + 1792: 02 d1 rcall .+516 ; 0x1998 <__fp_pscB> + 1794: 40 f0 brcs .+16 ; 0x17a6 <__divsf3+0x18> + 1796: f9 d0 rcall .+498 ; 0x198a <__fp_pscA> + 1798: 30 f0 brcs .+12 ; 0x17a6 <__divsf3+0x18> + 179a: 21 f4 brne .+8 ; 0x17a4 <__divsf3+0x16> + 179c: 5f 3f cpi r21, 0xFF ; 255 + 179e: 19 f0 breq .+6 ; 0x17a6 <__divsf3+0x18> + 17a0: eb c0 rjmp .+470 ; 0x1978 <__fp_inf> + 17a2: 51 11 cpse r21, r1 + 17a4: 34 c1 rjmp .+616 ; 0x1a0e <__fp_szero> + 17a6: ee c0 rjmp .+476 ; 0x1984 <__fp_nan> + +000017a8 <__divsf3x>: + 17a8: 0f d1 rcall .+542 ; 0x19c8 <__fp_split3> + 17aa: 98 f3 brcs .-26 ; 0x1792 <__divsf3+0x4> + +000017ac <__divsf3_pse>: + 17ac: 99 23 and r25, r25 + 17ae: c9 f3 breq .-14 ; 0x17a2 <__divsf3+0x14> + 17b0: 55 23 and r21, r21 + 17b2: b1 f3 breq .-20 ; 0x17a0 <__divsf3+0x12> + 17b4: 95 1b sub r25, r21 + 17b6: 55 0b sbc r21, r21 + 17b8: bb 27 eor r27, r27 + 17ba: aa 27 eor r26, r26 + 17bc: 62 17 cp r22, r18 + 17be: 73 07 cpc r23, r19 + 17c0: 84 07 cpc r24, r20 + 17c2: 38 f0 brcs .+14 ; 0x17d2 <__divsf3_pse+0x26> + 17c4: 9f 5f subi r25, 0xFF ; 255 + 17c6: 5f 4f sbci r21, 0xFF ; 255 + 17c8: 22 0f add r18, r18 + 17ca: 33 1f adc r19, r19 + 17cc: 44 1f adc r20, r20 + 17ce: aa 1f adc r26, r26 + 17d0: a9 f3 breq .-22 ; 0x17bc <__divsf3_pse+0x10> + 17d2: 33 d0 rcall .+102 ; 0x183a <__divsf3_pse+0x8e> + 17d4: 0e 2e mov r0, r30 + 17d6: 3a f0 brmi .+14 ; 0x17e6 <__divsf3_pse+0x3a> + 17d8: e0 e8 ldi r30, 0x80 ; 128 + 17da: 30 d0 rcall .+96 ; 0x183c <__divsf3_pse+0x90> + 17dc: 91 50 subi r25, 0x01 ; 1 + 17de: 50 40 sbci r21, 0x00 ; 0 + 17e0: e6 95 lsr r30 + 17e2: 00 1c adc r0, r0 + 17e4: ca f7 brpl .-14 ; 0x17d8 <__divsf3_pse+0x2c> + 17e6: 29 d0 rcall .+82 ; 0x183a <__divsf3_pse+0x8e> + 17e8: fe 2f mov r31, r30 + 17ea: 27 d0 rcall .+78 ; 0x183a <__divsf3_pse+0x8e> + 17ec: 66 0f add r22, r22 + 17ee: 77 1f adc r23, r23 + 17f0: 88 1f adc r24, r24 + 17f2: bb 1f adc r27, r27 + 17f4: 26 17 cp r18, r22 + 17f6: 37 07 cpc r19, r23 + 17f8: 48 07 cpc r20, r24 + 17fa: ab 07 cpc r26, r27 + 17fc: b0 e8 ldi r27, 0x80 ; 128 + 17fe: 09 f0 breq .+2 ; 0x1802 <__divsf3_pse+0x56> + 1800: bb 0b sbc r27, r27 + 1802: 80 2d mov r24, r0 + 1804: bf 01 movw r22, r30 + 1806: ff 27 eor r31, r31 + 1808: 93 58 subi r25, 0x83 ; 131 + 180a: 5f 4f sbci r21, 0xFF ; 255 + 180c: 2a f0 brmi .+10 ; 0x1818 <__divsf3_pse+0x6c> + 180e: 9e 3f cpi r25, 0xFE ; 254 + 1810: 51 05 cpc r21, r1 + 1812: 68 f0 brcs .+26 ; 0x182e <__divsf3_pse+0x82> + 1814: b1 c0 rjmp .+354 ; 0x1978 <__fp_inf> + 1816: fb c0 rjmp .+502 ; 0x1a0e <__fp_szero> + 1818: 5f 3f cpi r21, 0xFF ; 255 + 181a: ec f3 brlt .-6 ; 0x1816 <__divsf3_pse+0x6a> + 181c: 98 3e cpi r25, 0xE8 ; 232 + 181e: dc f3 brlt .-10 ; 0x1816 <__divsf3_pse+0x6a> + 1820: 86 95 lsr r24 + 1822: 77 95 ror r23 + 1824: 67 95 ror r22 + 1826: b7 95 ror r27 + 1828: f7 95 ror r31 + 182a: 9f 5f subi r25, 0xFF ; 255 + 182c: c9 f7 brne .-14 ; 0x1820 <__divsf3_pse+0x74> + 182e: 88 0f add r24, r24 + 1830: 91 1d adc r25, r1 + 1832: 96 95 lsr r25 + 1834: 87 95 ror r24 + 1836: 97 f9 bld r25, 7 + 1838: 08 95 ret + 183a: e1 e0 ldi r30, 0x01 ; 1 + 183c: 66 0f add r22, r22 + 183e: 77 1f adc r23, r23 + 1840: 88 1f adc r24, r24 + 1842: bb 1f adc r27, r27 + 1844: 62 17 cp r22, r18 + 1846: 73 07 cpc r23, r19 + 1848: 84 07 cpc r24, r20 + 184a: ba 07 cpc r27, r26 + 184c: 20 f0 brcs .+8 ; 0x1856 <__divsf3_pse+0xaa> + 184e: 62 1b sub r22, r18 + 1850: 73 0b sbc r23, r19 + 1852: 84 0b sbc r24, r20 + 1854: ba 0b sbc r27, r26 + 1856: ee 1f adc r30, r30 + 1858: 88 f7 brcc .-30 ; 0x183c <__divsf3_pse+0x90> + 185a: e0 95 com r30 + 185c: 08 95 ret + +0000185e <__fixunssfsi>: + 185e: bc d0 rcall .+376 ; 0x19d8 <__fp_splitA> + 1860: 88 f0 brcs .+34 ; 0x1884 <__fixunssfsi+0x26> + 1862: 9f 57 subi r25, 0x7F ; 127 + 1864: 90 f0 brcs .+36 ; 0x188a <__fixunssfsi+0x2c> + 1866: b9 2f mov r27, r25 + 1868: 99 27 eor r25, r25 + 186a: b7 51 subi r27, 0x17 ; 23 + 186c: a0 f0 brcs .+40 ; 0x1896 <__fixunssfsi+0x38> + 186e: d1 f0 breq .+52 ; 0x18a4 <__fixunssfsi+0x46> + 1870: 66 0f add r22, r22 + 1872: 77 1f adc r23, r23 + 1874: 88 1f adc r24, r24 + 1876: 99 1f adc r25, r25 + 1878: 1a f0 brmi .+6 ; 0x1880 <__fixunssfsi+0x22> + 187a: ba 95 dec r27 + 187c: c9 f7 brne .-14 ; 0x1870 <__fixunssfsi+0x12> + 187e: 12 c0 rjmp .+36 ; 0x18a4 <__fixunssfsi+0x46> + 1880: b1 30 cpi r27, 0x01 ; 1 + 1882: 81 f0 breq .+32 ; 0x18a4 <__fixunssfsi+0x46> + 1884: c3 d0 rcall .+390 ; 0x1a0c <__fp_zero> + 1886: b1 e0 ldi r27, 0x01 ; 1 + 1888: 08 95 ret + 188a: c0 c0 rjmp .+384 ; 0x1a0c <__fp_zero> + 188c: 67 2f mov r22, r23 + 188e: 78 2f mov r23, r24 + 1890: 88 27 eor r24, r24 + 1892: b8 5f subi r27, 0xF8 ; 248 + 1894: 39 f0 breq .+14 ; 0x18a4 <__fixunssfsi+0x46> + 1896: b9 3f cpi r27, 0xF9 ; 249 + 1898: cc f3 brlt .-14 ; 0x188c <__fixunssfsi+0x2e> + 189a: 86 95 lsr r24 + 189c: 77 95 ror r23 + 189e: 67 95 ror r22 + 18a0: b3 95 inc r27 + 18a2: d9 f7 brne .-10 ; 0x189a <__fixunssfsi+0x3c> + 18a4: 3e f4 brtc .+14 ; 0x18b4 <__fixunssfsi+0x56> + 18a6: 90 95 com r25 + 18a8: 80 95 com r24 + 18aa: 70 95 com r23 + 18ac: 61 95 neg r22 + 18ae: 7f 4f sbci r23, 0xFF ; 255 + 18b0: 8f 4f sbci r24, 0xFF ; 255 + 18b2: 9f 4f sbci r25, 0xFF ; 255 + 18b4: 08 95 ret + +000018b6 <__floatunsisf>: + 18b6: e8 94 clt + 18b8: 09 c0 rjmp .+18 ; 0x18cc <__floatsisf+0x12> + +000018ba <__floatsisf>: + 18ba: 97 fb bst r25, 7 + 18bc: 3e f4 brtc .+14 ; 0x18cc <__floatsisf+0x12> + 18be: 90 95 com r25 + 18c0: 80 95 com r24 + 18c2: 70 95 com r23 + 18c4: 61 95 neg r22 + 18c6: 7f 4f sbci r23, 0xFF ; 255 + 18c8: 8f 4f sbci r24, 0xFF ; 255 + 18ca: 9f 4f sbci r25, 0xFF ; 255 + 18cc: 99 23 and r25, r25 + 18ce: a9 f0 breq .+42 ; 0x18fa <__floatsisf+0x40> + 18d0: f9 2f mov r31, r25 + 18d2: 96 e9 ldi r25, 0x96 ; 150 + 18d4: bb 27 eor r27, r27 + 18d6: 93 95 inc r25 + 18d8: f6 95 lsr r31 + 18da: 87 95 ror r24 + 18dc: 77 95 ror r23 + 18de: 67 95 ror r22 + 18e0: b7 95 ror r27 + 18e2: f1 11 cpse r31, r1 + 18e4: f8 cf rjmp .-16 ; 0x18d6 <__floatsisf+0x1c> + 18e6: fa f4 brpl .+62 ; 0x1926 <__floatsisf+0x6c> + 18e8: bb 0f add r27, r27 + 18ea: 11 f4 brne .+4 ; 0x18f0 <__floatsisf+0x36> + 18ec: 60 ff sbrs r22, 0 + 18ee: 1b c0 rjmp .+54 ; 0x1926 <__floatsisf+0x6c> + 18f0: 6f 5f subi r22, 0xFF ; 255 + 18f2: 7f 4f sbci r23, 0xFF ; 255 + 18f4: 8f 4f sbci r24, 0xFF ; 255 + 18f6: 9f 4f sbci r25, 0xFF ; 255 + 18f8: 16 c0 rjmp .+44 ; 0x1926 <__floatsisf+0x6c> + 18fa: 88 23 and r24, r24 + 18fc: 11 f0 breq .+4 ; 0x1902 <__floatsisf+0x48> + 18fe: 96 e9 ldi r25, 0x96 ; 150 + 1900: 11 c0 rjmp .+34 ; 0x1924 <__floatsisf+0x6a> + 1902: 77 23 and r23, r23 + 1904: 21 f0 breq .+8 ; 0x190e <__floatsisf+0x54> + 1906: 9e e8 ldi r25, 0x8E ; 142 + 1908: 87 2f mov r24, r23 + 190a: 76 2f mov r23, r22 + 190c: 05 c0 rjmp .+10 ; 0x1918 <__floatsisf+0x5e> + 190e: 66 23 and r22, r22 + 1910: 71 f0 breq .+28 ; 0x192e <__floatsisf+0x74> + 1912: 96 e8 ldi r25, 0x86 ; 134 + 1914: 86 2f mov r24, r22 + 1916: 70 e0 ldi r23, 0x00 ; 0 + 1918: 60 e0 ldi r22, 0x00 ; 0 + 191a: 2a f0 brmi .+10 ; 0x1926 <__floatsisf+0x6c> + 191c: 9a 95 dec r25 + 191e: 66 0f add r22, r22 + 1920: 77 1f adc r23, r23 + 1922: 88 1f adc r24, r24 + 1924: da f7 brpl .-10 ; 0x191c <__floatsisf+0x62> + 1926: 88 0f add r24, r24 + 1928: 96 95 lsr r25 + 192a: 87 95 ror r24 + 192c: 97 f9 bld r25, 7 + 192e: 08 95 ret + +00001930 <__fp_cmp>: + 1930: 99 0f add r25, r25 + 1932: 00 08 sbc r0, r0 + 1934: 55 0f add r21, r21 + 1936: aa 0b sbc r26, r26 + 1938: e0 e8 ldi r30, 0x80 ; 128 + 193a: fe ef ldi r31, 0xFE ; 254 + 193c: 16 16 cp r1, r22 + 193e: 17 06 cpc r1, r23 + 1940: e8 07 cpc r30, r24 + 1942: f9 07 cpc r31, r25 + 1944: c0 f0 brcs .+48 ; 0x1976 <__fp_cmp+0x46> + 1946: 12 16 cp r1, r18 + 1948: 13 06 cpc r1, r19 + 194a: e4 07 cpc r30, r20 + 194c: f5 07 cpc r31, r21 + 194e: 98 f0 brcs .+38 ; 0x1976 <__fp_cmp+0x46> + 1950: 62 1b sub r22, r18 + 1952: 73 0b sbc r23, r19 + 1954: 84 0b sbc r24, r20 + 1956: 95 0b sbc r25, r21 + 1958: 39 f4 brne .+14 ; 0x1968 <__fp_cmp+0x38> + 195a: 0a 26 eor r0, r26 + 195c: 61 f0 breq .+24 ; 0x1976 <__fp_cmp+0x46> + 195e: 23 2b or r18, r19 + 1960: 24 2b or r18, r20 + 1962: 25 2b or r18, r21 + 1964: 21 f4 brne .+8 ; 0x196e <__fp_cmp+0x3e> + 1966: 08 95 ret + 1968: 0a 26 eor r0, r26 + 196a: 09 f4 brne .+2 ; 0x196e <__fp_cmp+0x3e> + 196c: a1 40 sbci r26, 0x01 ; 1 + 196e: a6 95 lsr r26 + 1970: 8f ef ldi r24, 0xFF ; 255 + 1972: 81 1d adc r24, r1 + 1974: 81 1d adc r24, r1 + 1976: 08 95 ret + +00001978 <__fp_inf>: + 1978: 97 f9 bld r25, 7 + 197a: 9f 67 ori r25, 0x7F ; 127 + 197c: 80 e8 ldi r24, 0x80 ; 128 + 197e: 70 e0 ldi r23, 0x00 ; 0 + 1980: 60 e0 ldi r22, 0x00 ; 0 + 1982: 08 95 ret + +00001984 <__fp_nan>: + 1984: 9f ef ldi r25, 0xFF ; 255 + 1986: 80 ec ldi r24, 0xC0 ; 192 + 1988: 08 95 ret + +0000198a <__fp_pscA>: + 198a: 00 24 eor r0, r0 + 198c: 0a 94 dec r0 + 198e: 16 16 cp r1, r22 + 1990: 17 06 cpc r1, r23 + 1992: 18 06 cpc r1, r24 + 1994: 09 06 cpc r0, r25 + 1996: 08 95 ret + +00001998 <__fp_pscB>: + 1998: 00 24 eor r0, r0 + 199a: 0a 94 dec r0 + 199c: 12 16 cp r1, r18 + 199e: 13 06 cpc r1, r19 + 19a0: 14 06 cpc r1, r20 + 19a2: 05 06 cpc r0, r21 + 19a4: 08 95 ret + +000019a6 <__fp_round>: + 19a6: 09 2e mov r0, r25 + 19a8: 03 94 inc r0 + 19aa: 00 0c add r0, r0 + 19ac: 11 f4 brne .+4 ; 0x19b2 <__fp_round+0xc> + 19ae: 88 23 and r24, r24 + 19b0: 52 f0 brmi .+20 ; 0x19c6 <__fp_round+0x20> + 19b2: bb 0f add r27, r27 + 19b4: 40 f4 brcc .+16 ; 0x19c6 <__fp_round+0x20> + 19b6: bf 2b or r27, r31 + 19b8: 11 f4 brne .+4 ; 0x19be <__fp_round+0x18> + 19ba: 60 ff sbrs r22, 0 + 19bc: 04 c0 rjmp .+8 ; 0x19c6 <__fp_round+0x20> + 19be: 6f 5f subi r22, 0xFF ; 255 + 19c0: 7f 4f sbci r23, 0xFF ; 255 + 19c2: 8f 4f sbci r24, 0xFF ; 255 + 19c4: 9f 4f sbci r25, 0xFF ; 255 + 19c6: 08 95 ret + +000019c8 <__fp_split3>: + 19c8: 57 fd sbrc r21, 7 + 19ca: 90 58 subi r25, 0x80 ; 128 + 19cc: 44 0f add r20, r20 + 19ce: 55 1f adc r21, r21 + 19d0: 59 f0 breq .+22 ; 0x19e8 <__fp_splitA+0x10> + 19d2: 5f 3f cpi r21, 0xFF ; 255 + 19d4: 71 f0 breq .+28 ; 0x19f2 <__fp_splitA+0x1a> + 19d6: 47 95 ror r20 + +000019d8 <__fp_splitA>: + 19d8: 88 0f add r24, r24 + 19da: 97 fb bst r25, 7 + 19dc: 99 1f adc r25, r25 + 19de: 61 f0 breq .+24 ; 0x19f8 <__fp_splitA+0x20> + 19e0: 9f 3f cpi r25, 0xFF ; 255 + 19e2: 79 f0 breq .+30 ; 0x1a02 <__fp_splitA+0x2a> + 19e4: 87 95 ror r24 + 19e6: 08 95 ret + 19e8: 12 16 cp r1, r18 + 19ea: 13 06 cpc r1, r19 + 19ec: 14 06 cpc r1, r20 + 19ee: 55 1f adc r21, r21 + 19f0: f2 cf rjmp .-28 ; 0x19d6 <__fp_split3+0xe> + 19f2: 46 95 lsr r20 + 19f4: f1 df rcall .-30 ; 0x19d8 <__fp_splitA> + 19f6: 08 c0 rjmp .+16 ; 0x1a08 <__fp_splitA+0x30> + 19f8: 16 16 cp r1, r22 + 19fa: 17 06 cpc r1, r23 + 19fc: 18 06 cpc r1, r24 + 19fe: 99 1f adc r25, r25 + 1a00: f1 cf rjmp .-30 ; 0x19e4 <__fp_splitA+0xc> + 1a02: 86 95 lsr r24 + 1a04: 71 05 cpc r23, r1 + 1a06: 61 05 cpc r22, r1 + 1a08: 08 94 sec + 1a0a: 08 95 ret + +00001a0c <__fp_zero>: + 1a0c: e8 94 clt + +00001a0e <__fp_szero>: + 1a0e: bb 27 eor r27, r27 + 1a10: 66 27 eor r22, r22 + 1a12: 77 27 eor r23, r23 + 1a14: cb 01 movw r24, r22 + 1a16: 97 f9 bld r25, 7 + 1a18: 08 95 ret + +00001a1a <__gesf2>: + 1a1a: 8a df rcall .-236 ; 0x1930 <__fp_cmp> + 1a1c: 08 f4 brcc .+2 ; 0x1a20 <__gesf2+0x6> + 1a1e: 8f ef ldi r24, 0xFF ; 255 + 1a20: 08 95 ret + +00001a22 <__udivmodhi4>: + 1a22: aa 1b sub r26, r26 + 1a24: bb 1b sub r27, r27 + 1a26: 51 e1 ldi r21, 0x11 ; 17 + 1a28: 07 c0 rjmp .+14 ; 0x1a38 <__udivmodhi4_ep> + +00001a2a <__udivmodhi4_loop>: + 1a2a: aa 1f adc r26, r26 + 1a2c: bb 1f adc r27, r27 + 1a2e: a6 17 cp r26, r22 + 1a30: b7 07 cpc r27, r23 + 1a32: 10 f0 brcs .+4 ; 0x1a38 <__udivmodhi4_ep> + 1a34: a6 1b sub r26, r22 + 1a36: b7 0b sbc r27, r23 + +00001a38 <__udivmodhi4_ep>: + 1a38: 88 1f adc r24, r24 + 1a3a: 99 1f adc r25, r25 + 1a3c: 5a 95 dec r21 + 1a3e: a9 f7 brne .-22 ; 0x1a2a <__udivmodhi4_loop> + 1a40: 80 95 com r24 + 1a42: 90 95 com r25 + 1a44: bc 01 movw r22, r24 + 1a46: cd 01 movw r24, r26 + 1a48: 08 95 ret + +00001a4a <__divmodhi4>: + 1a4a: 97 fb bst r25, 7 + 1a4c: 09 2e mov r0, r25 + 1a4e: 07 26 eor r0, r23 + 1a50: 0a d0 rcall .+20 ; 0x1a66 <__divmodhi4_neg1> + 1a52: 77 fd sbrc r23, 7 + 1a54: 04 d0 rcall .+8 ; 0x1a5e <__divmodhi4_neg2> + 1a56: e5 df rcall .-54 ; 0x1a22 <__udivmodhi4> + 1a58: 06 d0 rcall .+12 ; 0x1a66 <__divmodhi4_neg1> + 1a5a: 00 20 and r0, r0 + 1a5c: 1a f4 brpl .+6 ; 0x1a64 <__divmodhi4_exit> + +00001a5e <__divmodhi4_neg2>: + 1a5e: 70 95 com r23 + 1a60: 61 95 neg r22 + 1a62: 7f 4f sbci r23, 0xFF ; 255 + +00001a64 <__divmodhi4_exit>: + 1a64: 08 95 ret + +00001a66 <__divmodhi4_neg1>: + 1a66: f6 f7 brtc .-4 ; 0x1a64 <__divmodhi4_exit> + 1a68: 90 95 com r25 + 1a6a: 81 95 neg r24 + 1a6c: 9f 4f sbci r25, 0xFF ; 255 + 1a6e: 08 95 ret + +00001a70 <__udivmodsi4>: + 1a70: a1 e2 ldi r26, 0x21 ; 33 + 1a72: 1a 2e mov r1, r26 + 1a74: aa 1b sub r26, r26 + 1a76: bb 1b sub r27, r27 + 1a78: fd 01 movw r30, r26 + 1a7a: 0d c0 rjmp .+26 ; 0x1a96 <__udivmodsi4_ep> + +00001a7c <__udivmodsi4_loop>: + 1a7c: aa 1f adc r26, r26 + 1a7e: bb 1f adc r27, r27 + 1a80: ee 1f adc r30, r30 + 1a82: ff 1f adc r31, r31 + 1a84: a2 17 cp r26, r18 + 1a86: b3 07 cpc r27, r19 + 1a88: e4 07 cpc r30, r20 + 1a8a: f5 07 cpc r31, r21 + 1a8c: 20 f0 brcs .+8 ; 0x1a96 <__udivmodsi4_ep> + 1a8e: a2 1b sub r26, r18 + 1a90: b3 0b sbc r27, r19 + 1a92: e4 0b sbc r30, r20 + 1a94: f5 0b sbc r31, r21 + +00001a96 <__udivmodsi4_ep>: + 1a96: 66 1f adc r22, r22 + 1a98: 77 1f adc r23, r23 + 1a9a: 88 1f adc r24, r24 + 1a9c: 99 1f adc r25, r25 + 1a9e: 1a 94 dec r1 + 1aa0: 69 f7 brne .-38 ; 0x1a7c <__udivmodsi4_loop> + 1aa2: 60 95 com r22 + 1aa4: 70 95 com r23 + 1aa6: 80 95 com r24 + 1aa8: 90 95 com r25 + 1aaa: 9b 01 movw r18, r22 + 1aac: ac 01 movw r20, r24 + 1aae: bd 01 movw r22, r26 + 1ab0: cf 01 movw r24, r30 + 1ab2: 08 95 ret + +00001ab4 <_exit>: + 1ab4: f8 94 cli + +00001ab6 <__stop_program>: + 1ab6: ff cf rjmp .-2 ; 0x1ab6 <__stop_program> diff --git a/firmware/USBtoSerial.map b/firmware/USBtoSerial.map index 19b7efe..846a971 100644 --- a/firmware/USBtoSerial.map +++ b/firmware/USBtoSerial.map @@ -36,6 +36,8 @@ Archive member included because of file (symbol) ../../LUFA/Drivers/USB/Class/Common/HIDParser.o (__mulhi3) /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) USBtoSerial.o (__udivmodhi4) +/usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) + USBtoSerial.o (__divmodhi4) /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) USBtoSerial.o (__udivmodsi4) /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) @@ -62,7 +64,6 @@ Common symbol size file adb_werte 0x9 USBtoSerial.o USB_IsInitialized 0x1 ../../LUFA/Drivers/USB/Core/USBTask.o -USB_DeviceState 0x1 ../../LUFA/Drivers/USB/Core/USBTask.o USB_Device_ConfigurationNumber 0x1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o USB_Device_CurrentlySelfPowered @@ -113,41 +114,41 @@ Discarded input sections .text.Endpoint_Null_Stream 0x0000000000000000 0x8e ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_Stream_LE - 0x0000000000000000 0xc2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_Stream_BE - 0x0000000000000000 0xb2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xae ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_Stream_LE - 0x0000000000000000 0xc2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_Stream_BE - 0x0000000000000000 0xb2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xae ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_PStream_LE - 0x0000000000000000 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xc2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_PStream_BE - 0x0000000000000000 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xae ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_EStream_LE - 0x0000000000000000 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xc4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_EStream_BE - 0x0000000000000000 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xb0 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_EStream_LE - 0x0000000000000000 0xc6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xc2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_EStream_BE - 0x0000000000000000 0xb8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xb2 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_Control_Stream_BE - 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xb8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_Control_Stream_LE - 0x0000000000000000 0x7c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0x78 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_Control_Stream_BE - 0x0000000000000000 0x7e ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0x7a ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_Control_PStream_BE - 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xba ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_Control_EStream_LE - 0x0000000000000000 0xd4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xcc ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Write_Control_EStream_BE - 0x0000000000000000 0xde ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0xda ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_Control_EStream_LE - 0x0000000000000000 0x88 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0x84 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text.Endpoint_Read_Control_EStream_BE - 0x0000000000000000 0x8e ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000000 0x8a ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o @@ -206,19 +207,19 @@ Discarded input sections .data 0x0000000000000000 0x8 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_SendString - 0x0000000000000000 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000000 0x46 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_SendData - 0x0000000000000000 0x3a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000000 0x38 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_putchar 0x0000000000000000 0x20 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_BytesReceived - 0x0000000000000000 0x50 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000000 0x4e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_getchar_Blocking - 0x0000000000000000 0x38 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000000 0x36 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_getchar 0x0000000000000000 0x18 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_SendControlLineStateChange - 0x0000000000000000 0x8e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000000 0x8c ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_CreateStream 0x0000000000000000 0x26 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .text.CDC_Device_CreateBlockingStream @@ -231,7 +232,7 @@ Discarded input sections .text.HID_Device_ConfigureEndpoints 0x0000000000000000 0x34 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o .text.HID_Device_USBTask - 0x0000000000000000 0x1a2 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + 0x0000000000000000 0x1a0 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o @@ -240,20 +241,20 @@ Discarded input sections .text.MS_Device_ConfigureEndpoints 0x0000000000000000 0x3c ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .text.MS_Device_USBTask - 0x0000000000000000 0x270 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + 0x0000000000000000 0x266 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .text.MIDI_Device_ConfigureEndpoints 0x0000000000000000 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .text.MIDI_Device_SendEventPacket - 0x0000000000000000 0x3c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000000 0x3a ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .text.MIDI_Device_Flush - 0x0000000000000000 0x32 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000000 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .text.MIDI_Device_USBTask - 0x0000000000000000 0x20 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000000 0x1e ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .text.MIDI_Device_ReceiveEventPacket - 0x0000000000000000 0x46 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000000 0x44 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .data 0x0000000000000000 0x8 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .bss 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o @@ -262,13 +263,13 @@ Discarded input sections .text.RNDIS_Device_ConfigureEndpoints 0x0000000000000000 0x4e ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .text.RNDIS_Device_USBTask - 0x0000000000000000 0x88 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000000 0x86 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .text.RNDIS_Device_IsPacketReceived - 0x0000000000000000 0x30 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000000 0x2e ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .text.RNDIS_Device_ReadPacket - 0x0000000000000000 0xc0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000000 0xbe ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .text.RNDIS_Device_SendPacket - 0x0000000000000000 0xe0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000000 0xde ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .progmem.data 0x0000000000000000 0x6c ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .text 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o .data 0x0000000000000000 0x0 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o @@ -352,7 +353,9 @@ Discarded input sections .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) - .text.libgcc 0x0000000000000000 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) + .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) + .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) + .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) .text 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) .data 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) .bss 0x0000000000000000 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) @@ -540,7 +543,7 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .rela.plt *(.rela.plt) -.text 0x0000000000000000 0x17fa +.text 0x0000000000000000 0x1ab8 *(.vectors) .vectors 0x0000000000000000 0x98 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o 0x0000000000000000 __vectors @@ -608,7 +611,6 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a 0x000000000000016e __vector_32 0x000000000000016e __vector_34 0x000000000000016e __vector_24 - 0x000000000000016e __vector_12 0x000000000000016e __bad_interrupt 0x000000000000016e __vector_6 0x000000000000016e __vector_31 @@ -643,205 +645,228 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a 0x0000000000000170 0x36 USBtoSerial.o .text.RingBuffer_Remove 0x00000000000001a6 0x32 USBtoSerial.o + .text.set_x 0x00000000000001d8 0x76 USBtoSerial.o + 0x00000000000001d8 set_x + .text.set_y 0x000000000000024e 0x74 USBtoSerial.o + 0x000000000000024e set_y .text.RingBuffer_InitBuffer.clone.0 - 0x00000000000001d8 0x2a USBtoSerial.o + 0x00000000000002c2 0x2a USBtoSerial.o .text.__vector_21 - 0x0000000000000202 0x22 USBtoSerial.o - 0x0000000000000202 __vector_21 - .text.t0ext 0x0000000000000224 0x10 USBtoSerial.o - 0x0000000000000224 t0ext - .text.t0rst 0x0000000000000234 0x8 USBtoSerial.o - 0x0000000000000234 t0rst - .text.adb 0x000000000000023c 0x220 USBtoSerial.o - 0x000000000000023c adb + 0x00000000000002ec 0x22 USBtoSerial.o + 0x00000000000002ec __vector_21 + .text.t0ext 0x000000000000030e 0x10 USBtoSerial.o + 0x000000000000030e t0ext + .text.t0rst 0x000000000000031e 0x8 USBtoSerial.o + 0x000000000000031e t0rst + .text.adb 0x0000000000000326 0x220 USBtoSerial.o + 0x0000000000000326 adb .text.touchpad_init - 0x000000000000045c 0x10 USBtoSerial.o - 0x000000000000045c touchpad_init + 0x0000000000000546 0x10 USBtoSerial.o + 0x0000000000000546 touchpad_init .text.touchpad_read - 0x000000000000046c 0x12 USBtoSerial.o - 0x000000000000046c touchpad_read + 0x0000000000000556 0x12 USBtoSerial.o + 0x0000000000000556 touchpad_read .text.touchpad_set_abs_mode - 0x000000000000047e 0x3c USBtoSerial.o - 0x000000000000047e touchpad_set_abs_mode + 0x0000000000000568 0x3c USBtoSerial.o + 0x0000000000000568 touchpad_set_abs_mode .text.touchpad_set_rel_mode_100dpi - 0x00000000000004ba 0x28 USBtoSerial.o - 0x00000000000004ba touchpad_set_rel_mode_100dpi - .text.delta_y 0x00000000000004e2 0x20 USBtoSerial.o - 0x00000000000004e2 delta_y - .text.delta_x 0x0000000000000502 0x20 USBtoSerial.o - 0x0000000000000502 delta_x + 0x00000000000005a4 0x28 USBtoSerial.o + 0x00000000000005a4 touchpad_set_rel_mode_100dpi + .text.delta_y 0x00000000000005cc 0x20 USBtoSerial.o + 0x00000000000005cc delta_y + .text.delta_x 0x00000000000005ec 0x20 USBtoSerial.o + 0x00000000000005ec delta_x .text.Usb2SerialTask - 0x0000000000000522 0xb2 USBtoSerial.o - 0x0000000000000522 Usb2SerialTask + 0x000000000000060c 0xb4 USBtoSerial.o + 0x000000000000060c Usb2SerialTask .text.SetupHardware - 0x00000000000005d4 0x2a USBtoSerial.o - 0x00000000000005d4 SetupHardware + 0x00000000000006c0 0x2a USBtoSerial.o + 0x00000000000006c0 SetupHardware .text.EVENT_USB_Device_Connect - 0x00000000000005fe 0x2 USBtoSerial.o - 0x00000000000005fe EVENT_USB_Device_Connect + 0x00000000000006ea 0x2 USBtoSerial.o + 0x00000000000006ea EVENT_USB_Device_Connect .text.EVENT_USB_Device_Disconnect - 0x0000000000000600 0x2 USBtoSerial.o - 0x0000000000000600 EVENT_USB_Device_Disconnect + 0x00000000000006ec 0x2 USBtoSerial.o + 0x00000000000006ec EVENT_USB_Device_Disconnect .text.EVENT_USB_Device_ConfigurationChanged - 0x0000000000000602 0x6 USBtoSerial.o - 0x0000000000000602 EVENT_USB_Device_ConfigurationChanged + 0x00000000000006ee 0x6 USBtoSerial.o + 0x00000000000006ee EVENT_USB_Device_ConfigurationChanged .text.EVENT_USB_Device_ControlRequest - 0x0000000000000608 0x6 USBtoSerial.o - 0x0000000000000608 EVENT_USB_Device_ControlRequest + 0x00000000000006f4 0x6 USBtoSerial.o + 0x00000000000006f4 EVENT_USB_Device_ControlRequest .text.__vector_23 - 0x000000000000060e 0x54 USBtoSerial.o - 0x000000000000060e __vector_23 + 0x00000000000006fa 0x54 USBtoSerial.o + 0x00000000000006fa __vector_23 .text.EVENT_CDC_Device_LineEncodingChanged - 0x0000000000000662 0xc0 USBtoSerial.o - 0x0000000000000662 EVENT_CDC_Device_LineEncodingChanged + 0x000000000000074e 0xc6 USBtoSerial.o + 0x000000000000074e EVENT_CDC_Device_LineEncodingChanged .text.uart_putc - 0x0000000000000722 0x10 USBtoSerial.o - 0x0000000000000722 uart_putc + 0x0000000000000814 0x10 USBtoSerial.o + 0x0000000000000814 uart_putc .text.uart_puts - 0x0000000000000732 0x26 USBtoSerial.o - 0x0000000000000732 uart_puts + 0x0000000000000824 0x26 USBtoSerial.o + 0x0000000000000824 uart_puts .text.my_uitoa - 0x0000000000000758 0xcc USBtoSerial.o - 0x0000000000000758 my_uitoa - .text.main 0x0000000000000824 0x100 USBtoSerial.o - 0x0000000000000824 main + 0x000000000000084a 0xd0 USBtoSerial.o + 0x000000000000084a my_uitoa + .text.init_motors + 0x000000000000091a 0x1a USBtoSerial.o + 0x000000000000091a init_motors + .text.motor_step + 0x0000000000000934 0x64 USBtoSerial.o + 0x0000000000000934 motor_step + .text.sign 0x0000000000000998 0x18 USBtoSerial.o + 0x0000000000000998 sign + .text.move_plate + 0x00000000000009b0 0x84 USBtoSerial.o + 0x00000000000009b0 move_plate + .text.main 0x0000000000000a34 0x106 USBtoSerial.o + 0x0000000000000a34 main .text.CALLBACK_USB_GetDescriptor - 0x0000000000000924 0x5a Descriptors.o - 0x0000000000000924 CALLBACK_USB_GetDescriptor + 0x0000000000000b3a 0x5a Descriptors.o + 0x0000000000000b3a CALLBACK_USB_GetDescriptor .text.Endpoint_Write_Control_Stream_LE - 0x000000000000097e 0xb8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x000000000000097e Endpoint_Write_Control_Stream_LE + 0x0000000000000b94 0xb4 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000b94 Endpoint_Write_Control_Stream_LE .text.Endpoint_Write_Control_PStream_LE - 0x0000000000000a36 0xba ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x0000000000000a36 Endpoint_Write_Control_PStream_LE + 0x0000000000000c48 0xb6 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000c48 Endpoint_Write_Control_PStream_LE .text.Endpoint_ConfigureEndpoint_Prv - 0x0000000000000af0 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000af0 Endpoint_ConfigureEndpoint_Prv + 0x0000000000000cfe 0x6e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000cfe Endpoint_ConfigureEndpoint_Prv .text.Endpoint_ConfigureEndpointTable - 0x0000000000000b5e 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000b5e Endpoint_ConfigureEndpointTable + 0x0000000000000d6c 0x88 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000d6c Endpoint_ConfigureEndpointTable .text.Endpoint_ClearStatusStage - 0x0000000000000be6 0x42 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000be6 Endpoint_ClearStatusStage + 0x0000000000000df4 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000df4 Endpoint_ClearStatusStage .text.Endpoint_WaitUntilReady - 0x0000000000000c28 0x68 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x0000000000000c28 Endpoint_WaitUntilReady + 0x0000000000000e32 0x66 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000e32 Endpoint_WaitUntilReady .text.USB_ResetInterface - 0x0000000000000c90 0x72 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000c90 USB_ResetInterface + 0x0000000000000e98 0x70 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000e98 USB_ResetInterface .text.USB_Init - 0x0000000000000d02 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x0000000000000d02 USB_Init + 0x0000000000000f08 0x12 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x0000000000000f08 USB_Init .text.USB_INT_DisableAllInterrupts - 0x0000000000000d14 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000d14 USB_INT_DisableAllInterrupts + 0x0000000000000f1a 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000f1a USB_INT_DisableAllInterrupts .text.USB_INT_ClearAllInterrupts - 0x0000000000000d1a 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000d1a USB_INT_ClearAllInterrupts + 0x0000000000000f20 0x6 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000f20 USB_INT_ClearAllInterrupts .text.__vector_11 - 0x0000000000000d20 0x144 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x0000000000000d20 __vector_11 + 0x0000000000000f26 0x148 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x0000000000000f26 __vector_11 + .text.__vector_12 + 0x000000000000106e 0x76 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x000000000000106e __vector_12 .text.USB_Device_ProcessControlRequest - 0x0000000000000e64 0x2c6 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x0000000000000e64 USB_Device_ProcessControlRequest + 0x00000000000010e4 0x2c2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x00000000000010e4 USB_Device_ProcessControlRequest .text.USB_Event_Stub - 0x000000000000112a 0x2 ../../LUFA/Drivers/USB/Core/Events.o - 0x000000000000112a EVENT_USB_Device_WakeUp - 0x000000000000112a USB_Event_Stub - 0x000000000000112a EVENT_USB_Device_Suspend - 0x000000000000112a EVENT_USB_Device_StartOfFrame - 0x000000000000112a EVENT_USB_Device_Reset + 0x00000000000013a6 0x2 ../../LUFA/Drivers/USB/Core/Events.o + 0x00000000000013a6 EVENT_USB_Device_WakeUp + 0x00000000000013a6 USB_Event_Stub + 0x00000000000013a6 EVENT_USB_Device_Suspend + 0x00000000000013a6 EVENT_USB_Device_StartOfFrame + 0x00000000000013a6 EVENT_USB_Device_Reset .text.USB_USBTask - 0x000000000000112c 0x38 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x000000000000112c USB_USBTask + 0x00000000000013a8 0x36 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x00000000000013a8 USB_USBTask .text.CDC_Device_ProcessControlRequest - 0x0000000000001164 0x15a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001164 CDC_Device_ProcessControlRequest + 0x00000000000013de 0x158 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000013de CDC_Device_ProcessControlRequest .text.CDC_Device_ConfigureEndpoints - 0x00000000000012be 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000012be CDC_Device_ConfigureEndpoints + 0x0000000000001536 0x48 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001536 CDC_Device_ConfigureEndpoints .text.CDC_Device_SendByte - 0x0000000000001306 0x5c ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001306 CDC_Device_SendByte + 0x000000000000157e 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x000000000000157e CDC_Device_SendByte .text.CDC_Device_Flush - 0x0000000000001362 0x5c ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x0000000000001362 CDC_Device_Flush + 0x00000000000015d8 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000015d8 CDC_Device_Flush .text.CDC_Device_USBTask - 0x00000000000013be 0x30 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000013be CDC_Device_USBTask + 0x0000000000001632 0x2e ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001632 CDC_Device_USBTask .text.CDC_Device_ReceiveByte - 0x00000000000013ee 0x5c ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x00000000000013ee CDC_Device_ReceiveByte + 0x0000000000001660 0x5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000001660 CDC_Device_ReceiveByte .text.CDC_Device_Event_Stub - 0x000000000000144a 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x000000000000144a EVENT_CDC_Device_ControLineStateChanged - 0x000000000000144a EVENT_CDC_Device_BreakSent - 0x000000000000144a CDC_Device_Event_Stub + 0x00000000000016ba 0x2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000016ba EVENT_CDC_Device_ControLineStateChanged + 0x00000000000016ba EVENT_CDC_Device_BreakSent + 0x00000000000016ba CDC_Device_Event_Stub .text.avr-libc.fplib - 0x000000000000144c 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) - 0x000000000000144c __subsf3 - 0x000000000000144e __addsf3 + 0x00000000000016bc 0xa /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) + 0x00000000000016bc __subsf3 + 0x00000000000016be __addsf3 .text.avr-libc.fplib - 0x0000000000001456 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) - 0x0000000000001470 __addsf3x + 0x00000000000016c6 0xc0 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3x.o) + 0x00000000000016e0 __addsf3x .text.avr-libc.fplib - 0x0000000000001516 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) - 0x0000000000001516 __lesf2 - 0x0000000000001516 __nesf2 - 0x0000000000001516 __eqsf2 - 0x0000000000001516 __cmpsf2 - 0x0000000000001516 __ltsf2 + 0x0000000000001786 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(cmpsf2.o) + 0x0000000000001786 __lesf2 + 0x0000000000001786 __nesf2 + 0x0000000000001786 __eqsf2 + 0x0000000000001786 __cmpsf2 + 0x0000000000001786 __ltsf2 .text.avr-libc.fplib - 0x000000000000151e 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) - 0x000000000000151e __divsf3 + 0x000000000000178e 0x4 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) + 0x000000000000178e __divsf3 .text.avr-libc.fplib - 0x0000000000001522 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) - 0x0000000000001538 __divsf3x - 0x000000000000153c __divsf3_pse + 0x0000000000001792 0xcc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) + 0x00000000000017a8 __divsf3x + 0x00000000000017ac __divsf3_pse .text.avr-libc.fplib - 0x00000000000015ee 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) - 0x00000000000015ee __fixunssfsi + 0x000000000000185e 0x58 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fixunssfsi.o) + 0x000000000000185e __fixunssfsi .text.avr-libc.fplib - 0x0000000000001646 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) - 0x0000000000001646 __floatunsisf - 0x000000000000164a __floatsisf + 0x00000000000018b6 0x7a /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(floatsisf.o) + 0x00000000000018b6 __floatunsisf + 0x00000000000018ba __floatsisf .text.avr-libc.fplib - 0x00000000000016c0 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) - 0x00000000000016c0 __fp_cmp + 0x0000000000001930 0x48 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_cmp.o) + 0x0000000000001930 __fp_cmp .text.avr-libc.fplib - 0x0000000000001708 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) - 0x0000000000001708 __fp_inf + 0x0000000000001978 0xc /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_inf.o) + 0x0000000000001978 __fp_inf .text.avr-libc.fplib - 0x0000000000001714 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) - 0x0000000000001714 __fp_nan + 0x0000000000001984 0x6 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_nan.o) + 0x0000000000001984 __fp_nan .text.avr-libc.fplib - 0x000000000000171a 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) - 0x000000000000171a __fp_pscA + 0x000000000000198a 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscA.o) + 0x000000000000198a __fp_pscA .text.avr-libc.fplib - 0x0000000000001728 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) - 0x0000000000001728 __fp_pscB + 0x0000000000001998 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_pscB.o) + 0x0000000000001998 __fp_pscB .text.avr-libc.fplib - 0x0000000000001736 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) - 0x0000000000001736 __fp_round + 0x00000000000019a6 0x22 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_round.o) + 0x00000000000019a6 __fp_round .text.avr-libc.fplib - 0x0000000000001758 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) - 0x0000000000001758 __fp_split3 - 0x0000000000001768 __fp_splitA + 0x00000000000019c8 0x44 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_split3.o) + 0x00000000000019c8 __fp_split3 + 0x00000000000019d8 __fp_splitA .text.avr-libc.fplib - 0x000000000000179c 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) - 0x000000000000179c __fp_zero - 0x000000000000179e __fp_szero + 0x0000000000001a0c 0xe /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(fp_zero.o) + 0x0000000000001a0c __fp_zero + 0x0000000000001a0e __fp_szero .text.avr-libc.fplib - 0x00000000000017aa 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) - 0x00000000000017aa __gtsf2 - 0x00000000000017aa __gesf2 - .text.libgcc 0x00000000000017b2 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) - 0x00000000000017b2 __udivmodsi4 - 0x00000000000017f6 . = ALIGN (0x2) + 0x0000000000001a1a 0x8 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(gesf2.o) + 0x0000000000001a1a __gtsf2 + 0x0000000000001a1a __gesf2 + .text.libgcc 0x0000000000001a22 0x28 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) + 0x0000000000001a22 __udivmodhi4 + .text.libgcc 0x0000000000001a4a 0x26 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) + 0x0000000000001a4a __divmodhi4 + 0x0000000000001a4a _div + .text.libgcc 0x0000000000001a70 0x44 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) + 0x0000000000001a70 __udivmodsi4 + 0x0000000000001ab4 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000000000017f6 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) - 0x00000000000017f6 exit - 0x00000000000017f6 _exit + .fini9 0x0000000000001ab4 0x0 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + 0x0000000000001ab4 exit + 0x0000000000001ab4 _exit *(.fini9) *(.fini8) *(.fini8) @@ -860,51 +885,51 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000000000017f6 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) + .fini0 0x0000000000001ab4 0x4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) *(.fini0) - 0x00000000000017fa _etext = . + 0x0000000000001ab8 _etext = . -.data 0x0000000000800100 0x62 load address 0x00000000000017fa +.data 0x0000000000800100 0x6a load address 0x0000000000001ab8 0x0000000000800100 PROVIDE (__data_start, .) *(.data) - .data 0x0000000000800100 0x62 USBtoSerial.o + .data 0x0000000000800100 0x6a USBtoSerial.o 0x0000000000800145 VirtualSerial_CDC_Interface + 0x0000000000800160 phase_pattern *(.data*) *(.rodata) *(.rodata*) *(.gnu.linkonce.d*) - 0x0000000000800162 . = ALIGN (0x2) - 0x0000000000800162 _edata = . - 0x0000000000800162 PROVIDE (__data_end, .) + 0x000000000080016a . = ALIGN (0x2) + 0x000000000080016a _edata = . + 0x000000000080016a PROVIDE (__data_end, .) -.bss 0x0000000000800162 0x135 - 0x0000000000800162 PROVIDE (__bss_start, .) +.bss 0x000000000080016a 0x13a + 0x000000000080016a PROVIDE (__bss_start, .) *(.bss) - .bss 0x0000000000800162 0x11d USBtoSerial.o + .bss 0x000000000080016a 0x123 USBtoSerial.o *(.bss*) *(COMMON) - COMMON 0x000000000080027f 0xb USBtoSerial.o - 0x000000000080027f adb_werte - 0x0000000000800288 t0ovfcount - 0x0000000000800289 adb_data_length - COMMON 0x000000000080028a 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x000000000080028a USB_Device_ConfigurationNumber - 0x000000000080028b USB_Device_CurrentlySelfPowered - 0x000000000080028c USB_Device_RemoteWakeupEnabled - COMMON 0x000000000080028d 0xa ../../LUFA/Drivers/USB/Core/USBTask.o - 0x000000000080028d USB_IsInitialized - 0x000000000080028e USB_DeviceState - 0x000000000080028f USB_ControlRequest - 0x0000000000800297 PROVIDE (__bss_end, .) - 0x00000000000017fa __data_load_start = LOADADDR (.data) - 0x000000000000185c __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x0000000000800297 0x0 - 0x0000000000800297 PROVIDE (__noinit_start, .) + COMMON 0x000000000080028d 0xb USBtoSerial.o + 0x000000000080028d adb_werte + 0x0000000000800296 t0ovfcount + 0x0000000000800297 adb_data_length + COMMON 0x0000000000800298 0x3 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000800298 USB_Device_ConfigurationNumber + 0x0000000000800299 USB_Device_CurrentlySelfPowered + 0x000000000080029a USB_Device_RemoteWakeupEnabled + COMMON 0x000000000080029b 0x9 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x000000000080029b USB_IsInitialized + 0x000000000080029c USB_ControlRequest + 0x00000000008002a4 PROVIDE (__bss_end, .) + 0x0000000000001ab8 __data_load_start = LOADADDR (.data) + 0x0000000000001b22 __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00000000008002a4 0x0 + 0x00000000008002a4 PROVIDE (__noinit_start, .) *(.noinit*) - 0x0000000000800297 PROVIDE (__noinit_end, .) - 0x0000000000800297 _end = . - 0x0000000000800297 PROVIDE (__heap_start, .) + 0x00000000008002a4 PROVIDE (__noinit_end, .) + 0x00000000008002a4 _end = . + 0x00000000008002a4 PROVIDE (__heap_start, .) .eeprom 0x0000000000810000 0x0 *(.eeprom*) @@ -1001,291 +1026,291 @@ LOAD /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x0000000000000000 0x530 +.debug_aranges 0x0000000000000000 0x568 *(.debug_aranges) .debug_aranges - 0x0000000000000000 0x108 USBtoSerial.o + 0x0000000000000000 0x138 USBtoSerial.o .debug_aranges - 0x0000000000000108 0x20 Descriptors.o + 0x0000000000000138 0x20 Descriptors.o .debug_aranges - 0x0000000000000128 0x38 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + 0x0000000000000158 0x38 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o .debug_aranges - 0x0000000000000160 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + 0x0000000000000190 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o .debug_aranges - 0x0000000000000180 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x00000000000001b0 0xc8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .debug_aranges - 0x0000000000000248 0x40 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000278 0x40 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o .debug_aranges - 0x0000000000000288 0x30 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x00000000000002b8 0x30 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o .debug_aranges - 0x00000000000002b8 0x30 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00000000000002e8 0x38 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o .debug_aranges - 0x00000000000002e8 0x38 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + 0x0000000000000320 0x38 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o .debug_aranges - 0x0000000000000320 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000000358 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o .debug_aranges - 0x0000000000000340 0x20 ../../LUFA/Drivers/USB/Core/Events.o + 0x0000000000000378 0x20 ../../LUFA/Drivers/USB/Core/Events.o .debug_aranges - 0x0000000000000360 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x0000000000000398 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o .debug_aranges - 0x0000000000000380 0x30 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + 0x00000000000003b8 0x30 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o .debug_aranges - 0x00000000000003b0 0x98 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x00000000000003e8 0x98 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .debug_aranges - 0x0000000000000448 0x30 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + 0x0000000000000480 0x30 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o .debug_aranges - 0x0000000000000478 0x30 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + 0x00000000000004b0 0x30 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .debug_aranges - 0x00000000000004a8 0x40 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x00000000000004e0 0x40 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .debug_aranges - 0x00000000000004e8 0x48 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000520 0x48 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_pubnames - 0x0000000000000000 0xe15 + 0x0000000000000000 0xe6e *(.debug_pubnames) .debug_pubnames - 0x0000000000000000 0x276 USBtoSerial.o + 0x0000000000000000 0x2d3 USBtoSerial.o .debug_pubnames - 0x0000000000000276 0x9e Descriptors.o + 0x00000000000002d3 0x9e Descriptors.o .debug_pubnames - 0x0000000000000314 0x7e ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + 0x0000000000000371 0x7e ../../LUFA/Drivers/USB/Class/Common/HIDParser.o .debug_pubnames - 0x0000000000000392 0x32 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + 0x00000000000003ef 0x32 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o .debug_pubnames - 0x00000000000003c4 0x2df ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000000000000421 0x2df ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o .debug_pubnames - 0x00000000000006a3 0xaf ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x0000000000000700 0xaf ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o .debug_pubnames - 0x0000000000000752 0x46 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x00000000000007af 0x46 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o .debug_pubnames - 0x0000000000000798 0x62 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00000000000007f5 0x72 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o .debug_pubnames - 0x00000000000007fa 0x9b ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + 0x0000000000000867 0x9b ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o .debug_pubnames - 0x0000000000000895 0xa1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x0000000000000902 0xa1 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o .debug_pubnames - 0x0000000000000936 0x25 ../../LUFA/Drivers/USB/Core/Events.o + 0x00000000000009a3 0x25 ../../LUFA/Drivers/USB/Core/Events.o .debug_pubnames - 0x000000000000095b 0x63 ../../LUFA/Drivers/USB/Core/USBTask.o + 0x00000000000009c8 0x4f ../../LUFA/Drivers/USB/Core/USBTask.o .debug_pubnames - 0x00000000000009be 0x79 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + 0x0000000000000a17 0x79 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o .debug_pubnames - 0x0000000000000a37 0x18b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x0000000000000a90 0x18b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o .debug_pubnames - 0x0000000000000bc2 0x70 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + 0x0000000000000c1b 0x70 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o .debug_pubnames - 0x0000000000000c32 0x6d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + 0x0000000000000c8b 0x6d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o .debug_pubnames - 0x0000000000000c9f 0xa6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x0000000000000cf8 0xa6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o .debug_pubnames - 0x0000000000000d45 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0x0000000000000d9e 0xd0 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o -.debug_info 0x0000000000000000 0x8daf +.debug_info 0x0000000000000000 0x8f87 *(.debug_info) - .debug_info 0x0000000000000000 0xfb1 USBtoSerial.o - .debug_info 0x0000000000000fb1 0x77d Descriptors.o - .debug_info 0x000000000000172e 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_info 0x0000000000001e27 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_info 0x0000000000001eff 0x156b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_info 0x000000000000346a 0x622 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_info 0x0000000000003a8c 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_info 0x0000000000003af8 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_info 0x0000000000003b64 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_info 0x0000000000003bd0 0x431 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_info 0x0000000000004001 0x548 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_info 0x0000000000004549 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_info 0x00000000000048d5 0x992 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_info 0x0000000000005267 0x85 ../../LUFA/Drivers/USB/Core/Events.o - .debug_info 0x00000000000052ec 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_info 0x0000000000005358 0x269 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_info 0x00000000000055c1 0x58b ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_info 0x0000000000005b4c 0xc5a ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_info 0x00000000000067a6 0x699 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_info 0x0000000000006e3f 0x7e9 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_info 0x0000000000007628 0x4e0 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_info 0x0000000000007b08 0xedb ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_info 0x00000000000089e3 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_info 0x0000000000008a4f 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_info 0x0000000000008abb 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_info 0x0000000000008b27 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_info 0x0000000000008b93 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_info 0x0000000000008bff 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_info 0x0000000000008c6b 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_info 0x0000000000008cd7 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_info 0x0000000000008d43 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + .debug_info 0x0000000000000000 0x11c9 USBtoSerial.o + .debug_info 0x00000000000011c9 0x77d Descriptors.o + .debug_info 0x0000000000001946 0x6f9 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_info 0x000000000000203f 0xd8 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_info 0x0000000000002117 0x154c ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_info 0x0000000000003663 0x603 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_info 0x0000000000003c66 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_info 0x0000000000003cd2 0x6c ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_info 0x0000000000003d3e 0x6c ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_info 0x0000000000003daa 0x412 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_info 0x00000000000041bc 0x662 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_info 0x000000000000481e 0x38c ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_info 0x0000000000004baa 0x973 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_info 0x000000000000551d 0x85 ../../LUFA/Drivers/USB/Core/Events.o + .debug_info 0x00000000000055a2 0x6c ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_info 0x000000000000560e 0x245 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_info 0x0000000000005853 0x56c ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_info 0x0000000000005dbf 0xc3b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_info 0x00000000000069fa 0x67a ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_info 0x0000000000007074 0x7ca ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_info 0x000000000000783e 0x4c1 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_info 0x0000000000007cff 0xebc ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_info 0x0000000000008bbb 0x6c ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_info 0x0000000000008c27 0x6c ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_info 0x0000000000008c93 0x6c ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_info 0x0000000000008cff 0x6c ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_info 0x0000000000008d6b 0x6c ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_info 0x0000000000008dd7 0x6c ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_info 0x0000000000008e43 0x6c ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_info 0x0000000000008eaf 0x6c ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_info 0x0000000000008f1b 0x6c ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o *(.gnu.linkonce.wi.*) -.debug_abbrev 0x0000000000000000 0x219a +.debug_abbrev 0x0000000000000000 0x21f5 *(.debug_abbrev) - .debug_abbrev 0x0000000000000000 0x41b USBtoSerial.o - .debug_abbrev 0x000000000000041b 0x153 Descriptors.o - .debug_abbrev 0x000000000000056e 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_abbrev 0x000000000000075a 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_abbrev 0x00000000000007d7 0x192 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_abbrev 0x0000000000000969 0x1f5 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_abbrev 0x0000000000000b5e 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_abbrev 0x0000000000000b88 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_abbrev 0x0000000000000bb2 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_abbrev 0x0000000000000bdc 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_abbrev 0x0000000000000d29 0x17e ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_abbrev 0x0000000000000ea7 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_abbrev 0x0000000000000fef 0x212 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_abbrev 0x0000000000001201 0x41 ../../LUFA/Drivers/USB/Core/Events.o - .debug_abbrev 0x0000000000001242 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_abbrev 0x000000000000126c 0x15c ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_abbrev 0x00000000000013c8 0x167 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_abbrev 0x000000000000152f 0x2f3 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_abbrev 0x0000000000001822 0x1bc ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_abbrev 0x00000000000019de 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_abbrev 0x0000000000001be3 0x184 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_abbrev 0x0000000000001d67 0x2b9 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_abbrev 0x0000000000002020 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_abbrev 0x000000000000204a 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_abbrev 0x0000000000002074 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_abbrev 0x000000000000209e 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_abbrev 0x00000000000020c8 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_abbrev 0x00000000000020f2 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_abbrev 0x000000000000211c 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_abbrev 0x0000000000002146 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_abbrev 0x0000000000002170 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_line 0x0000000000000000 0x77dd + .debug_abbrev 0x0000000000000000 0x46c USBtoSerial.o + .debug_abbrev 0x000000000000046c 0x153 Descriptors.o + .debug_abbrev 0x00000000000005bf 0x1ec ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_abbrev 0x00000000000007ab 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_abbrev 0x0000000000000828 0x18b ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_abbrev 0x00000000000009b3 0x1ee ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_abbrev 0x0000000000000ba1 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_abbrev 0x0000000000000bcb 0x2a ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_abbrev 0x0000000000000bf5 0x2a ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_abbrev 0x0000000000000c1f 0x14d ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_abbrev 0x0000000000000d6c 0x1e2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_abbrev 0x0000000000000f4e 0x148 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_abbrev 0x0000000000001096 0x20b ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_abbrev 0x00000000000012a1 0x41 ../../LUFA/Drivers/USB/Core/Events.o + .debug_abbrev 0x00000000000012e2 0x2a ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_abbrev 0x000000000000130c 0x14b ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_abbrev 0x0000000000001457 0x160 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_abbrev 0x00000000000015b7 0x2ec ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_abbrev 0x00000000000018a3 0x1b5 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_abbrev 0x0000000000001a58 0x205 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_abbrev 0x0000000000001c5d 0x16c ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_abbrev 0x0000000000001dc9 0x2b2 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_abbrev 0x000000000000207b 0x2a ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_abbrev 0x00000000000020a5 0x2a ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_abbrev 0x00000000000020cf 0x2a ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_abbrev 0x00000000000020f9 0x2a ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_abbrev 0x0000000000002123 0x2a ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_abbrev 0x000000000000214d 0x2a ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_abbrev 0x0000000000002177 0x2a ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_abbrev 0x00000000000021a1 0x2a ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_abbrev 0x00000000000021cb 0x2a ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + +.debug_line 0x0000000000000000 0x781c *(.debug_line) - .debug_line 0x0000000000000000 0x1022 USBtoSerial.o - .debug_line 0x0000000000001022 0x1d9 Descriptors.o - .debug_line 0x00000000000011fb 0x768 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_line 0x0000000000001963 0x16b ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_line 0x0000000000001ace 0x1aee ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_line 0x00000000000035bc 0x5fe ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_line 0x0000000000003bba 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - .debug_line 0x0000000000003bf8 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - .debug_line 0x0000000000003c36 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - .debug_line 0x0000000000003c74 0x323 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_line 0x0000000000003f97 0x4a2 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_line 0x0000000000004439 0x275 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_line 0x00000000000046ae 0x5ba ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_line 0x0000000000004c68 0x86 ../../LUFA/Drivers/USB/Core/Events.o - .debug_line 0x0000000000004cee 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o - .debug_line 0x0000000000004d2c 0x1cd ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_line 0x0000000000004ef9 0x515 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_line 0x000000000000540e 0x9e0 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_line 0x0000000000005dee 0x5e1 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_line 0x00000000000063cf 0x5f4 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_line 0x00000000000069c3 0x436 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_line 0x0000000000006df9 0x7b6 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - .debug_line 0x00000000000075af 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - .debug_line 0x00000000000075ed 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - .debug_line 0x000000000000762b 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - .debug_line 0x0000000000007669 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - .debug_line 0x00000000000076a7 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - .debug_line 0x00000000000076e5 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - .debug_line 0x0000000000007723 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - .debug_line 0x0000000000007761 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - .debug_line 0x000000000000779f 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - -.debug_frame 0x0000000000000000 0x820 + .debug_line 0x0000000000000000 0x1239 USBtoSerial.o + .debug_line 0x0000000000001239 0x1d9 Descriptors.o + .debug_line 0x0000000000001412 0x762 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_line 0x0000000000001b74 0x15f ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_line 0x0000000000001cd3 0x1a80 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_line 0x0000000000003753 0x5a1 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_line 0x0000000000003cf4 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_line 0x0000000000003d32 0x3e ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_line 0x0000000000003d70 0x3e ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_line 0x0000000000003dae 0x312 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_line 0x00000000000040c0 0x55a ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_line 0x000000000000461a 0x269 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_line 0x0000000000004883 0x5a2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_line 0x0000000000004e25 0x80 ../../LUFA/Drivers/USB/Core/Events.o + .debug_line 0x0000000000004ea5 0x3e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_line 0x0000000000004ee3 0x1ae ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_line 0x0000000000005091 0x4be ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_line 0x000000000000554f 0x9c2 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_line 0x0000000000005f11 0x5c3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_line 0x00000000000064d4 0x5c6 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_line 0x0000000000006a9a 0x3bc ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_line 0x0000000000006e56 0x798 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_line 0x00000000000075ee 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + .debug_line 0x000000000000762c 0x3e ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + .debug_line 0x000000000000766a 0x3e ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + .debug_line 0x00000000000076a8 0x3e ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + .debug_line 0x00000000000076e6 0x3e ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + .debug_line 0x0000000000007724 0x3e ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + .debug_line 0x0000000000007762 0x3e ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + .debug_line 0x00000000000077a0 0x3e ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + .debug_line 0x00000000000077de 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + +.debug_frame 0x0000000000000000 0x890 *(.debug_frame) - .debug_frame 0x0000000000000000 0x1f0 USBtoSerial.o - .debug_frame 0x00000000000001f0 0x20 Descriptors.o - .debug_frame 0x0000000000000210 0x50 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_frame 0x0000000000000260 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_frame 0x0000000000000280 0x170 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_frame 0x00000000000003f0 0x60 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_frame 0x0000000000000450 0x40 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_frame 0x0000000000000490 0x40 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_frame 0x00000000000004d0 0x50 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_frame 0x0000000000000520 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_frame 0x0000000000000540 0x20 ../../LUFA/Drivers/USB/Core/Events.o - .debug_frame 0x0000000000000560 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_frame 0x0000000000000580 0x40 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_frame 0x00000000000005c0 0x110 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_frame 0x00000000000006d0 0x40 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_frame 0x0000000000000710 0x40 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_frame 0x0000000000000750 0x60 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_frame 0x00000000000007b0 0x70 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - -.debug_str 0x0000000000000000 0x3ce7 + .debug_frame 0x0000000000000000 0x250 USBtoSerial.o + .debug_frame 0x0000000000000250 0x20 Descriptors.o + .debug_frame 0x0000000000000270 0x50 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_frame 0x00000000000002c0 0x20 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_frame 0x00000000000002e0 0x170 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_frame 0x0000000000000450 0x60 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_frame 0x00000000000004b0 0x40 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_frame 0x00000000000004f0 0x50 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_frame 0x0000000000000540 0x50 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_frame 0x0000000000000590 0x20 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_frame 0x00000000000005b0 0x20 ../../LUFA/Drivers/USB/Core/Events.o + .debug_frame 0x00000000000005d0 0x20 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_frame 0x00000000000005f0 0x40 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_frame 0x0000000000000630 0x110 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_frame 0x0000000000000740 0x40 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_frame 0x0000000000000780 0x40 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_frame 0x00000000000007c0 0x60 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_frame 0x0000000000000820 0x70 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + +.debug_str 0x0000000000000000 0x3c87 *(.debug_str) - .debug_str 0x0000000000000000 0x939 USBtoSerial.o - 0x9db (size before relaxing) - .debug_str 0x0000000000000939 0x8ba Descriptors.o - 0xa0a (size before relaxing) - .debug_str 0x00000000000011f3 0x4d5 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - 0x5fa (size before relaxing) - .debug_str 0x00000000000016c8 0x7d ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - 0x15d (size before relaxing) - .debug_str 0x0000000000001745 0x5a8 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - 0x783 (size before relaxing) - .debug_str 0x0000000000001ced 0x218 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - 0x57f (size before relaxing) - .debug_str 0x0000000000001f05 0x33 ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o - 0x105 (size before relaxing) - .debug_str 0x0000000000001f38 0x39 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o - 0x10b (size before relaxing) - .debug_str 0x0000000000001f71 0x33 ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o - 0x105 (size before relaxing) - .debug_str 0x0000000000001fa4 0x20f ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - 0x43e (size before relaxing) - .debug_str 0x00000000000021b3 0xdc ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - 0x3b7 (size before relaxing) - .debug_str 0x000000000000228f 0x22d ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - 0x345 (size before relaxing) - .debug_str 0x00000000000024bc 0x3b8 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - 0x873 (size before relaxing) - .debug_str 0x0000000000002874 0x3a ../../LUFA/Drivers/USB/Core/Events.o - 0x10c (size before relaxing) - .debug_str 0x00000000000028ae 0x34 ../../LUFA/Drivers/USB/Core/HostStandardReq.o - 0x106 (size before relaxing) - .debug_str 0x00000000000028e2 0x70 ../../LUFA/Drivers/USB/Core/USBTask.o - 0x2c3 (size before relaxing) - .debug_str 0x0000000000002952 0x23f ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - 0x543 (size before relaxing) - .debug_str 0x0000000000002b91 0x300 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - 0x8f7 (size before relaxing) - .debug_str 0x0000000000002e91 0x1f3 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - 0x572 (size before relaxing) - .debug_str 0x0000000000003084 0x243 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - 0x6d3 (size before relaxing) - .debug_str 0x00000000000032c7 0x11e ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - 0x55a (size before relaxing) - .debug_str 0x00000000000033e5 0x6ee ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - 0xc0b (size before relaxing) - .debug_str 0x0000000000003ad3 0x44 ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o - 0x116 (size before relaxing) - .debug_str 0x0000000000003b17 0x39 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o - 0x10b (size before relaxing) - .debug_str 0x0000000000003b50 0x37 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o - 0x109 (size before relaxing) - .debug_str 0x0000000000003b87 0x37 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o - 0x109 (size before relaxing) - .debug_str 0x0000000000003bbe 0x3f ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o - 0x111 (size before relaxing) - .debug_str 0x0000000000003bfd 0x38 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o - 0x10a (size before relaxing) - .debug_str 0x0000000000003c35 0x3b ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o - 0x10d (size before relaxing) - .debug_str 0x0000000000003c70 0x39 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o - 0x10b (size before relaxing) - .debug_str 0x0000000000003ca9 0x3e ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o - 0x110 (size before relaxing) - -.debug_loc 0x0000000000000000 0x4631 + .debug_str 0x0000000000000000 0x9c9 USBtoSerial.o + 0xa70 (size before relaxing) + .debug_str 0x00000000000009c9 0x8ba Descriptors.o + 0xa07 (size before relaxing) + .debug_str 0x0000000000001283 0x47c ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + 0x5e7 (size before relaxing) + .debug_str 0x00000000000016ff 0x77 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + 0x14a (size before relaxing) + .debug_str 0x0000000000001776 0x592 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x760 (size before relaxing) + .debug_str 0x0000000000001d08 0x212 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x55c (size before relaxing) + .debug_str 0x0000000000001f1a 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + 0xf2 (size before relaxing) + .debug_str 0x0000000000001f47 0x33 ../../LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + 0xf8 (size before relaxing) + .debug_str 0x0000000000001f7a 0x2d ../../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + 0xf2 (size before relaxing) + .debug_str 0x0000000000001fa7 0x209 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x41b (size before relaxing) + .debug_str 0x00000000000021b0 0x113 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x41d (size before relaxing) + .debug_str 0x00000000000022c3 0x227 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + 0x332 (size before relaxing) + .debug_str 0x00000000000024ea 0x3b2 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x850 (size before relaxing) + .debug_str 0x000000000000289c 0x34 ../../LUFA/Drivers/USB/Core/Events.o + 0xf9 (size before relaxing) + .debug_str 0x00000000000028d0 0x2e ../../LUFA/Drivers/USB/Core/HostStandardReq.o + 0xf3 (size before relaxing) + .debug_str 0x00000000000028fe 0x4e ../../LUFA/Drivers/USB/Core/USBTask.o + 0x2a0 (size before relaxing) + .debug_str 0x000000000000294c 0x239 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + 0x520 (size before relaxing) + .debug_str 0x0000000000002b85 0x2fa ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + 0x8d4 (size before relaxing) + .debug_str 0x0000000000002e7f 0x1ed ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + 0x54f (size before relaxing) + .debug_str 0x000000000000306c 0x23d ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + 0x6b0 (size before relaxing) + .debug_str 0x00000000000032a9 0x118 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + 0x537 (size before relaxing) + .debug_str 0x00000000000033c1 0x6e8 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + 0xbe8 (size before relaxing) + .debug_str 0x0000000000003aa9 0x3e ../../LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.o + 0x103 (size before relaxing) + .debug_str 0x0000000000003ae7 0x33 ../../LUFA/Drivers/USB/Class/Host/AudioClassHost.o + 0xf8 (size before relaxing) + .debug_str 0x0000000000003b1a 0x31 ../../LUFA/Drivers/USB/Class/Host/CDCClassHost.o + 0xf6 (size before relaxing) + .debug_str 0x0000000000003b4b 0x31 ../../LUFA/Drivers/USB/Class/Host/HIDClassHost.o + 0xf6 (size before relaxing) + .debug_str 0x0000000000003b7c 0x39 ../../LUFA/Drivers/USB/Class/Host/MassStorageClassHost.o + 0xfe (size before relaxing) + .debug_str 0x0000000000003bb5 0x32 ../../LUFA/Drivers/USB/Class/Host/MIDIClassHost.o + 0xf7 (size before relaxing) + .debug_str 0x0000000000003be7 0x35 ../../LUFA/Drivers/USB/Class/Host/PrinterClassHost.o + 0xfa (size before relaxing) + .debug_str 0x0000000000003c1c 0x33 ../../LUFA/Drivers/USB/Class/Host/RNDISClassHost.o + 0xf8 (size before relaxing) + .debug_str 0x0000000000003c4f 0x38 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o + 0xfd (size before relaxing) + +.debug_loc 0x0000000000000000 0x4764 *(.debug_loc) - .debug_loc 0x0000000000000000 0x5a9 USBtoSerial.o - .debug_loc 0x00000000000005a9 0xd3 Descriptors.o - .debug_loc 0x000000000000067c 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_loc 0x0000000000000f0b 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_loc 0x000000000000288d 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_loc 0x0000000000002c1d 0x17c ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_loc 0x0000000000002d99 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_loc 0x0000000000003055 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_loc 0x000000000000327f 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_loc 0x00000000000032a6 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_loc 0x0000000000003413 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_loc 0x000000000000393e 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_loc 0x0000000000003b87 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_loc 0x0000000000003cd9 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_loc 0x0000000000003ecf 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o + .debug_loc 0x0000000000000000 0x6c8 USBtoSerial.o + .debug_loc 0x00000000000006c8 0xd3 Descriptors.o + .debug_loc 0x000000000000079b 0x88f ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_loc 0x000000000000102a 0x1982 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_loc 0x00000000000029ac 0x390 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_loc 0x0000000000002d3c 0x190 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_loc 0x0000000000002ecc 0x2bc ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_loc 0x0000000000003188 0x22a ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_loc 0x00000000000033b2 0x27 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_loc 0x00000000000033d9 0x16d ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_loc 0x0000000000003546 0x52b ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_loc 0x0000000000003a71 0x249 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_loc 0x0000000000003cba 0x152 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_loc 0x0000000000003e0c 0x1f6 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_loc 0x0000000000004002 0x762 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o .debug_macinfo *(.debug_macinfo) @@ -1357,25 +1382,25 @@ LOAD linker stubs .debug_pubtypes 0x00000000000010ff 0x12 ../../LUFA/Drivers/USB/Class/Host/StillImageClassHost.o -.debug_ranges 0x0000000000000000 0x788 - .debug_ranges 0x0000000000000000 0xf8 USBtoSerial.o - .debug_ranges 0x00000000000000f8 0x10 Descriptors.o - .debug_ranges 0x0000000000000108 0x100 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o - .debug_ranges 0x0000000000000208 0x10 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o - .debug_ranges 0x0000000000000218 0x298 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o - .debug_ranges 0x00000000000004b0 0xa8 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - .debug_ranges 0x0000000000000558 0x20 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - .debug_ranges 0x0000000000000578 0x20 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - .debug_ranges 0x0000000000000598 0x28 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o - .debug_ranges 0x00000000000005c0 0x10 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - .debug_ranges 0x00000000000005d0 0x10 ../../LUFA/Drivers/USB/Core/Events.o - .debug_ranges 0x00000000000005e0 0x10 ../../LUFA/Drivers/USB/Core/USBTask.o - .debug_ranges 0x00000000000005f0 0x20 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o - .debug_ranges 0x0000000000000610 0x88 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - .debug_ranges 0x0000000000000698 0x20 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - .debug_ranges 0x00000000000006b8 0x20 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - .debug_ranges 0x00000000000006d8 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - .debug_ranges 0x0000000000000708 0x80 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o +.debug_ranges 0x0000000000000000 0x7c0 + .debug_ranges 0x0000000000000000 0x128 USBtoSerial.o + .debug_ranges 0x0000000000000128 0x10 Descriptors.o + .debug_ranges 0x0000000000000138 0x100 ../../LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_ranges 0x0000000000000238 0x10 ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_ranges 0x0000000000000248 0x298 ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_ranges 0x00000000000004e0 0xa8 ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_ranges 0x0000000000000588 0x20 ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_ranges 0x00000000000005a8 0x28 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_ranges 0x00000000000005d0 0x28 ../../LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_ranges 0x00000000000005f8 0x10 ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_ranges 0x0000000000000608 0x10 ../../LUFA/Drivers/USB/Core/Events.o + .debug_ranges 0x0000000000000618 0x10 ../../LUFA/Drivers/USB/Core/USBTask.o + .debug_ranges 0x0000000000000628 0x20 ../../LUFA/Drivers/USB/Class/Device/AudioClassDevice.o + .debug_ranges 0x0000000000000648 0x88 ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o + .debug_ranges 0x00000000000006d0 0x20 ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o + .debug_ranges 0x00000000000006f0 0x20 ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o + .debug_ranges 0x0000000000000710 0x30 ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o + .debug_ranges 0x0000000000000740 0x80 ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o Cross Reference Table @@ -1519,17 +1544,6 @@ USB_ControlRequest ../../LUFA/Drivers/USB/Class/D ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o -USB_DeviceState ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o - ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - ../../LUFA/Drivers/USB/Core/USBTask.o - ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o - ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o USB_Device_ConfigurationNumber ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o @@ -1537,6 +1551,7 @@ USB_Device_CurrentlySelfPowered ../../LUFA/Drivers/USB/Core/De ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o USB_Device_ProcessControlRequest ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o ../../LUFA/Drivers/USB/Core/USBTask.o + ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o USB_Device_RemoteWakeupEnabled ../../LUFA/Drivers/USB/Core/DeviceStandardReq.o ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o USB_Device_SendRemoteWakeup ../../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o @@ -1560,9 +1575,7 @@ USB_ProcessHIDReport ../../LUFA/Drivers/USB/Class/C USB_ResetInterface ../../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o USB_SetHIDReportItemInfo ../../LUFA/Drivers/USB/Class/Common/HIDParser.o USB_USBTask ../../LUFA/Drivers/USB/Core/USBTask.o - ../../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.o ../../LUFA/Drivers/USB/Class/Device/CDCClassDevice.o - ../../LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o USBtoSerial.o Usb2SerialTask USBtoSerial.o VirtualSerial_CDC_Interface USBtoSerial.o @@ -1577,6 +1590,8 @@ __cmpsf2 /usr/lib/gcc/avr/4.5.3/../../. __data_end /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) __data_load_start /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) __data_start /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_copy_data.o) +__divmodhi4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) + USBtoSerial.o __divsf3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3.o) USBtoSerial.o __divsf3_pse /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(divsf3x.o) @@ -1644,6 +1659,7 @@ __stack /usr/lib/gcc/avr/4.5.3/../../. __subsf3 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libm.a(addsf3.o) USBtoSerial.o __udivmodhi4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodhi4.o) + /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) USBtoSerial.o __udivmodsi4 /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_udivmodsi4.o) USBtoSerial.o @@ -1651,7 +1667,8 @@ __vector_1 /usr/lib/gcc/avr/4.5.3/../../. __vector_10 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o __vector_11 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o -__vector_12 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o +__vector_12 ../../LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o __vector_13 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o __vector_14 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o __vector_15 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o @@ -1689,6 +1706,7 @@ __vector_8 /usr/lib/gcc/avr/4.5.3/../../. __vector_9 /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o __vector_default /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o __vectors /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o +_div /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_divmodhi4.o) _exit /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) adb USBtoSerial.o adb_data_length USBtoSerial.o @@ -1698,6 +1716,7 @@ delta_x USBtoSerial.o delta_y USBtoSerial.o exit /usr/lib/gcc/avr/4.5.3/avr35/libgcc.a(_exit.o) /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o +init_motors USBtoSerial.o main USBtoSerial.o /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/crtm32u2.o memcmp /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memcmp.o) @@ -1709,7 +1728,13 @@ memcpy_P /usr/lib/gcc/avr/4.5.3/../../. ../../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.o memset /usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr35/libc.a(memset.o) ../../LUFA/Drivers/USB/Class/Device/HIDClassDevice.o +motor_step USBtoSerial.o +move_plate USBtoSerial.o my_uitoa USBtoSerial.o +phase_pattern USBtoSerial.o +set_x USBtoSerial.o +set_y USBtoSerial.o +sign USBtoSerial.o t0ext USBtoSerial.o t0ovfcount USBtoSerial.o t0rst USBtoSerial.o diff --git a/firmware/USBtoSerial.o b/firmware/USBtoSerial.o index cca561e..60e5cf0 100644 Binary files a/firmware/USBtoSerial.o and b/firmware/USBtoSerial.o differ diff --git a/firmware/USBtoSerial.sym b/firmware/USBtoSerial.sym index b70739d..560cc8a 100644 --- a/firmware/USBtoSerial.sym +++ b/firmware/USBtoSerial.sym @@ -212,7 +212,6 @@ 0000016e T __bad_interrupt 0000016e W __vector_1 0000016e W __vector_10 -0000016e W __vector_12 0000016e W __vector_13 0000016e W __vector_14 0000016e W __vector_15 @@ -246,115 +245,134 @@ 0000016e W __vector_9 00000170 t RingBuffer_Insert 000001a6 t RingBuffer_Remove -000001d8 t RingBuffer_InitBuffer.clone.0 -00000202 T __vector_21 -00000224 T t0ext -00000234 T t0rst -0000023c T adb -0000045c T touchpad_init -0000046c T touchpad_read -0000047e T touchpad_set_abs_mode -000004ba T touchpad_set_rel_mode_100dpi -000004e2 T delta_y +000001d8 T set_x +0000024e T set_y +000002c2 t RingBuffer_InitBuffer.clone.0 +000002ec T __vector_21 +0000030e T t0ext +0000031e T t0rst +00000326 T adb 000004ff W __stack -00000502 T delta_x -00000522 T Usb2SerialTask -000005d4 T SetupHardware -000005fe T EVENT_USB_Device_Connect -00000600 T EVENT_USB_Device_Disconnect -00000602 T EVENT_USB_Device_ConfigurationChanged -00000608 T EVENT_USB_Device_ControlRequest -0000060e T __vector_23 -00000662 T EVENT_CDC_Device_LineEncodingChanged -00000722 T uart_putc -00000732 T uart_puts -00000758 T my_uitoa -00000824 T main -00000924 T CALLBACK_USB_GetDescriptor -0000097e T Endpoint_Write_Control_Stream_LE -00000a36 T Endpoint_Write_Control_PStream_LE -00000af0 T Endpoint_ConfigureEndpoint_Prv -00000b5e T Endpoint_ConfigureEndpointTable -00000be6 T Endpoint_ClearStatusStage -00000c28 T Endpoint_WaitUntilReady -00000c90 T USB_ResetInterface -00000d02 T USB_Init -00000d14 T USB_INT_DisableAllInterrupts -00000d1a T USB_INT_ClearAllInterrupts -00000d20 T __vector_11 -00000e64 T USB_Device_ProcessControlRequest -0000112a W EVENT_USB_Device_Reset -0000112a W EVENT_USB_Device_StartOfFrame -0000112a W EVENT_USB_Device_Suspend -0000112a W EVENT_USB_Device_WakeUp -0000112a T USB_Event_Stub -0000112c T USB_USBTask -00001164 T CDC_Device_ProcessControlRequest -000012be T CDC_Device_ConfigureEndpoints -00001306 T CDC_Device_SendByte -00001362 T CDC_Device_Flush -000013be T CDC_Device_USBTask -000013ee T CDC_Device_ReceiveByte -0000144a T CDC_Device_Event_Stub -0000144a W EVENT_CDC_Device_BreakSent -0000144a W EVENT_CDC_Device_ControLineStateChanged -0000144c T __subsf3 -0000144e T __addsf3 -00001470 T __addsf3x -00001516 T __cmpsf2 -00001516 T __eqsf2 -00001516 T __lesf2 -00001516 T __ltsf2 -00001516 T __nesf2 -0000151e T __divsf3 -00001538 T __divsf3x -0000153c T __divsf3_pse -000015ee T __fixunssfsi -00001646 T __floatunsisf -0000164a T __floatsisf -000016c0 T __fp_cmp -00001708 T __fp_inf -00001714 T __fp_nan -0000171a T __fp_pscA -00001728 T __fp_pscB -00001736 T __fp_round -00001758 T __fp_split3 -00001768 T __fp_splitA -0000179c T __fp_zero -0000179e T __fp_szero -000017aa T __gesf2 -000017aa T __gtsf2 -000017b2 T __udivmodsi4 -000017be t __udivmodsi4_loop -000017d8 t __udivmodsi4_ep -000017f6 T _exit -000017f6 W exit -000017f8 t __stop_program -000017fa A __data_load_start -000017fa T _etext -0000185c A __data_load_end +00000546 T touchpad_init +00000556 T touchpad_read +00000568 T touchpad_set_abs_mode +000005a4 T touchpad_set_rel_mode_100dpi +000005cc T delta_y +000005ec T delta_x +0000060c T Usb2SerialTask +000006c0 T SetupHardware +000006ea T EVENT_USB_Device_Connect +000006ec T EVENT_USB_Device_Disconnect +000006ee T EVENT_USB_Device_ConfigurationChanged +000006f4 T EVENT_USB_Device_ControlRequest +000006fa T __vector_23 +0000074e T EVENT_CDC_Device_LineEncodingChanged +00000814 T uart_putc +00000824 T uart_puts +0000084a T my_uitoa +0000091a T init_motors +00000934 T motor_step +00000998 T sign +000009b0 T move_plate +00000a34 T main +00000b3a T CALLBACK_USB_GetDescriptor +00000b94 T Endpoint_Write_Control_Stream_LE +00000c48 T Endpoint_Write_Control_PStream_LE +00000cfe T Endpoint_ConfigureEndpoint_Prv +00000d6c T Endpoint_ConfigureEndpointTable +00000df4 T Endpoint_ClearStatusStage +00000e32 T Endpoint_WaitUntilReady +00000e98 T USB_ResetInterface +00000f08 T USB_Init +00000f1a T USB_INT_DisableAllInterrupts +00000f20 T USB_INT_ClearAllInterrupts +00000f26 T __vector_11 +0000106e T __vector_12 +000010e4 T USB_Device_ProcessControlRequest +000013a6 W EVENT_USB_Device_Reset +000013a6 W EVENT_USB_Device_StartOfFrame +000013a6 W EVENT_USB_Device_Suspend +000013a6 W EVENT_USB_Device_WakeUp +000013a6 T USB_Event_Stub +000013a8 T USB_USBTask +000013de T CDC_Device_ProcessControlRequest +00001536 T CDC_Device_ConfigureEndpoints +0000157e T CDC_Device_SendByte +000015d8 T CDC_Device_Flush +00001632 T CDC_Device_USBTask +00001660 T CDC_Device_ReceiveByte +000016ba T CDC_Device_Event_Stub +000016ba W EVENT_CDC_Device_BreakSent +000016ba W EVENT_CDC_Device_ControLineStateChanged +000016bc T __subsf3 +000016be T __addsf3 +000016e0 T __addsf3x +00001786 T __cmpsf2 +00001786 T __eqsf2 +00001786 T __lesf2 +00001786 T __ltsf2 +00001786 T __nesf2 +0000178e T __divsf3 +000017a8 T __divsf3x +000017ac T __divsf3_pse +0000185e T __fixunssfsi +000018b6 T __floatunsisf +000018ba T __floatsisf +00001930 T __fp_cmp +00001978 T __fp_inf +00001984 T __fp_nan +0000198a T __fp_pscA +00001998 T __fp_pscB +000019a6 T __fp_round +000019c8 T __fp_split3 +000019d8 T __fp_splitA +00001a0c T __fp_zero +00001a0e T __fp_szero +00001a1a T __gesf2 +00001a1a T __gtsf2 +00001a22 T __udivmodhi4 +00001a2a t __udivmodhi4_loop +00001a38 t __udivmodhi4_ep +00001a4a T __divmodhi4 +00001a4a T _div +00001a5e t __divmodhi4_neg2 +00001a64 t __divmodhi4_exit +00001a66 t __divmodhi4_neg1 +00001a70 T __udivmodsi4 +00001a7c t __udivmodsi4_loop +00001a96 t __udivmodsi4_ep +00001ab4 T _exit +00001ab4 W exit +00001ab6 t __stop_program +00001ab8 A __data_load_start +00001ab8 T _etext +00001b22 A __data_load_end 00800100 D __data_start 00800145 D VirtualSerial_CDC_Interface -00800160 d CSWTCH.10 -00800162 b USBtoUSART_Buffer -00800162 B __bss_start -00800162 D __data_end -00800162 D _edata -0080016e b USBtoUSART_Buffer_Data -008001ee b USARTtoUSB_Buffer -008001fa b USARTtoUSB_Buffer_Data -0080027a b y_mem.3984 -0080027c b x_mem.3983 -0080027e b last_pressure.3978 -0080027f B adb_werte -00800288 B t0ovfcount -00800289 B adb_data_length -0080028a B USB_Device_ConfigurationNumber -0080028b B USB_Device_CurrentlySelfPowered -0080028c B USB_Device_RemoteWakeupEnabled -0080028d B USB_IsInitialized -0080028e B USB_DeviceState -0080028f B USB_ControlRequest -00800297 B __bss_end -00800297 N _end +00800160 D phase_pattern +00800164 d CSWTCH.16 +00800166 d CSWTCH.19 +0080016a b USBtoUSART_Buffer +0080016a B __bss_start +0080016a D __data_end +0080016a D _edata +00800176 b USBtoUSART_Buffer_Data +008001f6 b USARTtoUSB_Buffer +00800202 b USARTtoUSB_Buffer_Data +00800282 b todo_y.4082 +00800284 b todo_x.4081 +00800286 b phase_memory.4068 +00800288 b y_mem.3984 +0080028a b x_mem.3983 +0080028c b last_pressure.3978 +0080028d B adb_werte +00800296 B t0ovfcount +00800297 B adb_data_length +00800298 B USB_Device_ConfigurationNumber +00800299 B USB_Device_CurrentlySelfPowered +0080029a B USB_Device_RemoteWakeupEnabled +0080029b B USB_IsInitialized +0080029c B USB_ControlRequest +008002a4 B __bss_end +008002a4 N _end 00810000 N __eeprom_end diff --git a/firmware/pins.h b/firmware/pins.h new file mode 100644 index 0000000..a1c5389 --- /dev/null +++ b/firmware/pins.h @@ -0,0 +1,45 @@ + +#define X0 2 +#define DDRX0 DDRB +#define PORTX0 PORTB +#define PINX0 PINB + +#define X1 3 +#define DDRX1 DDRB +#define PORTX1 PORTB +#define PINX1 PINB + +#define X2 4 +#define DDRX2 DDRB +#define PORTX2 PORTB +#define PINX2 PINB + +#define X3 5 +#define DDRX3 DDRB +#define PORTX3 PORTB +#define PINX3 PINB + + +#define Y0 7 +#define DDRY0 DDRB +#define PORTY0 PORTB +#define PINY0 PINB + +#define Y1 6 +#define DDRY1 DDRB +#define PORTY1 PORTB +#define PINY1 PINB + +#define Y2 7 +#define DDRY2 DDRC +#define PORTY2 PORTC +#define PINY2 PINC + +#define Y3 6 +#define DDRY3 DDRC +#define PORTY3 PORTC +#define PINY3 PINC + +#define X 0 +#define Y 1 + diff --git a/firmware/pins.h~ b/firmware/pins.h~ new file mode 100644 index 0000000..c0f65af --- /dev/null +++ b/firmware/pins.h~ @@ -0,0 +1,42 @@ + +#define X0 2 +#define DDRX0 DDRB +#define PORTX0 PORTB +#define PINX0 PINB + +#define X1 3 +#define DDRX1 DDRB +#define PORTX1 PORTB +#define PINX1 PINB + +#define X2 4 +#define DDRX2 DDRB +#define PORTX2 PORTB +#define PINX2 PINB + +#define X3 5 +#define DDRX3 DDRB +#define PORTX3 PORTB +#define PINX3 PINB + + +#define Y0 7 +#define DDRY0 DDRB +#define PORTY0 PORTB +#define PINY0 PINB + +#define Y1 6 +#define DDRY1 DDRB +#define PORTY1 PORTB +#define PINY1 PINC + +#define Y2 7 +#define DDRY2 DDRC +#define PORTY2 PORTC +#define PINY2 PINC + +#define Y3 6 +#define DDRY3 DDRC +#define PORTY3 PORTC +#define PINY3 PINC + diff --git a/firmware/project.ps b/firmware/project.ps new file mode 100644 index 0000000..5665ff6 --- /dev/null +++ b/firmware/project.ps @@ -0,0 +1,13846 @@ +%!PS-Adobe-3.0 +%%Creator: EESchema-PS +%%CreationDate: Sun Oct 13 22:43:28 2013 +%%Title: project.ps +%%Pages: 1 +%%PageOrder: Ascend +%%BoundingBox: 0 0 596 843 +%%DocumentMedia: A4 595 842 0 () () +%%Orientation: Landscape +%%EndComments +%%Page: 1 1 +/line { + newpath + moveto + lineto + stroke +} bind def +/cir0 { newpath 0 360 arc stroke } bind def +/cir1 { newpath 0 360 arc gsave fill grestore stroke } bind def +/cir2 { newpath 0 360 arc gsave fill grestore stroke } bind def +/arc0 { newpath arc stroke } bind def +/arc1 { newpath 4 index 4 index moveto arc closepath gsave fill grestore stroke } bind def +/arc2 { newpath 4 index 4 index moveto arc closepath gsave fill grestore stroke } bind def +/poly0 { stroke } bind def +/poly1 { closepath gsave fill grestore stroke } bind def +/poly2 { closepath gsave fill grestore stroke } bind def +/rect0 { rectstroke } bind def +/rect1 { rectfill } bind def +/rect2 { rectfill } bind def +/linemode0 { 0 setlinecap 0 setlinejoin 0 setlinewidth } bind def +/linemode1 { 1 setlinecap 1 setlinejoin } bind def +/dashedline { [50 50] 0 setdash } bind def +/solidline { [] 0 setdash } bind def +gsave +0.0072 0.0072 scale +linemode1 +82670 0 translate 90 rotate +60 setlinewidth +0 0 0 setrgbcolor +0 0 0 setrgbcolor +newpath +4000 78670 moveto +113000 78670 lineto +113000 4000 lineto +4000 4000 lineto +4000 78670 lineto +stroke +newpath +4700 77970 moveto +112300 77970 lineto +112300 4700 lineto +4700 4700 lineto +4700 77970 lineto +stroke +newpath +25800 78670 moveto +25800 77970 lineto +stroke +0 setlinewidth +0 0 0 setrgbcolor +newpath +15040 78120 moveto +14760 78120 lineto +stroke +newpath +14900 78120 moveto +14900 78620 lineto +14850 78550 lineto +14800 78500 lineto +14760 78470 lineto +stroke +newpath +25800 4000 moveto +25800 4700 lineto +stroke +0 0 0 setrgbcolor +newpath +15040 4150 moveto +14760 4150 lineto +stroke +newpath +14900 4150 moveto +14900 4650 lineto +14850 4580 lineto +14800 4530 lineto +14760 4500 lineto +stroke +newpath +47600 78670 moveto +47600 77970 lineto +stroke +0 0 0 setrgbcolor +newpath +36560 78570 moveto +36580 78590 lineto +36630 78620 lineto +36750 78620 lineto +36790 78590 lineto +36820 78570 lineto +36840 78520 lineto +36840 78470 lineto +36820 78400 lineto +36530 78120 lineto +36840 78120 lineto +stroke +newpath +47600 4000 moveto +47600 4700 lineto +stroke +0 0 0 setrgbcolor +newpath +36560 4600 moveto +36580 4620 lineto +36630 4650 lineto +36750 4650 lineto +36790 4620 lineto +36820 4600 lineto +36840 4550 lineto +36840 4500 lineto +36820 4430 lineto +36530 4150 lineto +36840 4150 lineto +stroke +newpath +69400 78670 moveto +69400 77970 lineto +stroke +0 0 0 setrgbcolor +newpath +58330 78620 moveto +58640 78620 lineto +58470 78430 lineto +58550 78430 lineto +58590 78400 lineto +58620 78380 lineto +58640 78330 lineto +58640 78210 lineto +58620 78170 lineto +58590 78140 lineto +58550 78120 lineto +58400 78120 lineto +58360 78140 lineto +58330 78170 lineto +stroke +newpath +69400 4000 moveto +69400 4700 lineto +stroke +0 0 0 setrgbcolor +newpath +58330 4650 moveto +58640 4650 lineto +58470 4460 lineto +58550 4460 lineto +58590 4430 lineto +58620 4410 lineto +58640 4360 lineto +58640 4240 lineto +58620 4200 lineto +58590 4170 lineto +58550 4150 lineto +58400 4150 lineto +58360 4170 lineto +58330 4200 lineto +stroke +newpath +91200 78670 moveto +91200 77970 lineto +stroke +0 0 0 setrgbcolor +newpath +80390 78450 moveto +80390 78120 lineto +stroke +newpath +80270 78640 moveto +80160 78280 lineto +80460 78280 lineto +stroke +newpath +91200 4000 moveto +91200 4700 lineto +stroke +0 0 0 setrgbcolor +newpath +80390 4480 moveto +80390 4150 lineto +stroke +newpath +80270 4670 moveto +80160 4310 lineto +80460 4310 lineto +stroke +0 0 0 setrgbcolor +newpath +102220 78620 moveto +101980 78620 lineto +101960 78380 lineto +101980 78400 lineto +102030 78430 lineto +102150 78430 lineto +102190 78400 lineto +102220 78380 lineto +102240 78330 lineto +102240 78210 lineto +102220 78170 lineto +102190 78140 lineto +102150 78120 lineto +102030 78120 lineto +101980 78140 lineto +101960 78170 lineto +stroke +0 0 0 setrgbcolor +newpath +102220 4650 moveto +101980 4650 lineto +101960 4410 lineto +101980 4430 lineto +102030 4460 lineto +102150 4460 lineto +102190 4430 lineto +102220 4410 lineto +102240 4360 lineto +102240 4240 lineto +102220 4200 lineto +102190 4170 lineto +102150 4150 lineto +102030 4150 lineto +101980 4170 lineto +101960 4200 lineto +stroke +newpath +4000 53780 moveto +4700 53780 lineto +stroke +0 0 0 setrgbcolor +newpath +4240 66160 moveto +4470 66160 lineto +stroke +newpath +4190 66020 moveto +4350 66520 lineto +4520 66020 lineto +stroke +newpath +113000 53780 moveto +112300 53780 lineto +stroke +0 0 0 setrgbcolor +newpath +112540 66160 moveto +112770 66160 lineto +stroke +newpath +112490 66020 moveto +112650 66520 lineto +112820 66020 lineto +stroke +newpath +4000 28890 moveto +4700 28890 lineto +stroke +0 0 0 setrgbcolor +newpath +4390 41390 moveto +4460 41370 lineto +4480 41340 lineto +4500 41290 lineto +4500 41220 lineto +4480 41180 lineto +4460 41150 lineto +4410 41130 lineto +4220 41130 lineto +4220 41630 lineto +4390 41630 lineto +4430 41600 lineto +4460 41580 lineto +4480 41530 lineto +4480 41480 lineto +4460 41440 lineto +4430 41410 lineto +4390 41390 lineto +4220 41390 lineto +stroke +newpath +113000 28890 moveto +112300 28890 lineto +stroke +0 0 0 setrgbcolor +newpath +112690 41390 moveto +112760 41370 lineto +112780 41340 lineto +112800 41290 lineto +112800 41220 lineto +112780 41180 lineto +112760 41150 lineto +112710 41130 lineto +112520 41130 lineto +112520 41630 lineto +112690 41630 lineto +112730 41600 lineto +112760 41580 lineto +112780 41530 lineto +112780 41480 lineto +112760 41440 lineto +112730 41410 lineto +112690 41390 lineto +112520 41390 lineto +stroke +0 0 0 setrgbcolor +newpath +4500 16290 moveto +4480 16260 lineto +4410 16240 lineto +4360 16240 lineto +4290 16260 lineto +4240 16310 lineto +4220 16360 lineto +4200 16450 lineto +4200 16520 lineto +4220 16620 lineto +4240 16670 lineto +4290 16710 lineto +4360 16740 lineto +4410 16740 lineto +4480 16710 lineto +4500 16690 lineto +stroke +0 0 0 setrgbcolor +newpath +112800 16290 moveto +112780 16260 lineto +112710 16240 lineto +112660 16240 lineto +112590 16260 lineto +112540 16310 lineto +112520 16360 lineto +112500 16450 lineto +112500 16520 lineto +112520 16620 lineto +112540 16670 lineto +112590 16710 lineto +112660 16740 lineto +112710 16740 lineto +112780 16710 lineto +112800 16690 lineto +stroke +120 setlinewidth +0 0 0 setrgbcolor +newpath +79440 6260 moveto +79440 6860 lineto +79590 6860 lineto +79670 6830 lineto +79730 6770 lineto +79760 6710 lineto +79790 6600 lineto +79790 6510 lineto +79760 6400 lineto +79730 6340 lineto +79670 6290 lineto +79590 6260 lineto +79440 6260 lineto +stroke +newpath +80300 6260 moveto +80300 6570 lineto +80270 6630 lineto +80210 6660 lineto +80100 6660 lineto +80040 6630 lineto +stroke +newpath +80300 6290 moveto +80240 6260 lineto +80100 6260 lineto +80040 6290 lineto +80010 6340 lineto +80010 6400 lineto +80040 6460 lineto +80100 6490 lineto +80240 6490 lineto +80300 6510 lineto +stroke +newpath +80500 6660 moveto +80730 6660 lineto +stroke +newpath +80580 6860 moveto +80580 6340 lineto +80610 6290 lineto +80670 6260 lineto +80730 6260 lineto +stroke +newpath +81150 6290 moveto +81090 6260 lineto +80980 6260 lineto +80920 6290 lineto +80890 6340 lineto +80890 6570 lineto +80920 6630 lineto +80980 6660 lineto +81090 6660 lineto +81150 6630 lineto +81180 6570 lineto +81180 6510 lineto +80890 6460 lineto +stroke +newpath +81430 6310 moveto +81460 6290 lineto +81430 6260 lineto +81400 6290 lineto +81430 6310 lineto +81430 6260 lineto +stroke +newpath +81430 6630 moveto +81460 6600 lineto +81430 6570 lineto +81400 6600 lineto +81430 6630 lineto +81430 6570 lineto +stroke +newpath +82500 6260 moveto +82150 6260 lineto +stroke +newpath +82330 6260 moveto +82330 6860 lineto +82270 6770 lineto +82210 6710 lineto +82150 6690 lineto +stroke +newpath +83070 6260 moveto +82720 6260 lineto +stroke +newpath +82900 6260 moveto +82900 6860 lineto +82840 6770 lineto +82780 6710 lineto +82720 6690 lineto +stroke +newpath +83870 6260 moveto +83810 6290 lineto +83780 6310 lineto +83750 6370 lineto +83750 6540 lineto +83780 6600 lineto +83810 6630 lineto +83870 6660 lineto +83950 6660 lineto +84010 6630 lineto +84040 6600 lineto +84070 6540 lineto +84070 6370 lineto +84040 6310 lineto +84010 6290 lineto +83950 6260 lineto +83870 6260 lineto +stroke +newpath +84580 6290 moveto +84520 6260 lineto +84410 6260 lineto +84350 6290 lineto +84320 6310 lineto +84290 6370 lineto +84290 6540 lineto +84320 6600 lineto +84350 6630 lineto +84410 6660 lineto +84520 6660 lineto +84580 6630 lineto +stroke +newpath +84750 6660 moveto +84980 6660 lineto +stroke +newpath +84830 6860 moveto +84830 6340 lineto +84860 6290 lineto +84920 6260 lineto +84980 6260 lineto +stroke +newpath +85600 6800 moveto +85630 6830 lineto +85690 6860 lineto +85830 6860 lineto +85890 6830 lineto +85920 6800 lineto +85950 6740 lineto +85950 6690 lineto +85920 6600 lineto +85580 6260 lineto +85950 6260 lineto +stroke +newpath +86320 6860 moveto +86370 6860 lineto +86430 6830 lineto +86460 6800 lineto +86490 6740 lineto +86520 6630 lineto +86520 6490 lineto +86490 6370 lineto +86460 6310 lineto +86430 6290 lineto +86370 6260 lineto +86320 6260 lineto +86260 6290 lineto +86230 6310 lineto +86200 6370 lineto +86170 6490 lineto +86170 6630 lineto +86200 6740 lineto +86230 6800 lineto +86260 6830 lineto +86320 6860 lineto +stroke +newpath +87090 6260 moveto +86740 6260 lineto +stroke +newpath +86920 6260 moveto +86920 6860 lineto +86860 6770 lineto +86800 6710 lineto +86740 6690 lineto +stroke +newpath +87290 6860 moveto +87660 6860 lineto +87460 6630 lineto +87540 6630 lineto +87600 6600 lineto +87630 6570 lineto +87660 6510 lineto +87660 6370 lineto +87630 6310 lineto +87600 6290 lineto +87540 6260 lineto +87370 6260 lineto +87310 6290 lineto +87290 6310 lineto +stroke +0 setlinewidth +0 0 0 setrgbcolor +newpath +71040 5060 moveto +71040 5660 lineto +stroke +newpath +71390 5060 moveto +71130 5400 lineto +stroke +newpath +71390 5660 moveto +71040 5310 lineto +stroke +newpath +71640 5060 moveto +71640 5460 lineto +stroke +newpath +71640 5660 moveto +71610 5630 lineto +71640 5600 lineto +71670 5630 lineto +71640 5660 lineto +71640 5600 lineto +stroke +newpath +72280 5110 moveto +72250 5090 lineto +72160 5060 lineto +72100 5060 lineto +72020 5090 lineto +71960 5140 lineto +71930 5200 lineto +71900 5310 lineto +71900 5400 lineto +71930 5510 lineto +71960 5570 lineto +72020 5630 lineto +72100 5660 lineto +72160 5660 lineto +72250 5630 lineto +72280 5600 lineto +stroke +newpath +72790 5060 moveto +72790 5370 lineto +72760 5430 lineto +72700 5460 lineto +72590 5460 lineto +72530 5430 lineto +stroke +newpath +72790 5090 moveto +72730 5060 lineto +72590 5060 lineto +72530 5090 lineto +72500 5140 lineto +72500 5200 lineto +72530 5260 lineto +72590 5290 lineto +72730 5290 lineto +72790 5310 lineto +stroke +newpath +73330 5060 moveto +73330 5660 lineto +stroke +newpath +73330 5090 moveto +73270 5060 lineto +73160 5060 lineto +73100 5090 lineto +73070 5110 lineto +73040 5170 lineto +73040 5340 lineto +73070 5400 lineto +73100 5430 lineto +73160 5460 lineto +73270 5460 lineto +73330 5430 lineto +stroke +newpath +74070 5370 moveto +74270 5370 lineto +stroke +newpath +74360 5060 moveto +74070 5060 lineto +74070 5660 lineto +74360 5660 lineto +stroke +newpath +74610 5110 moveto +74640 5090 lineto +74610 5060 lineto +74580 5090 lineto +74610 5110 lineto +74610 5060 lineto +stroke +newpath +74900 5060 moveto +74900 5660 lineto +75050 5660 lineto +75130 5630 lineto +75190 5570 lineto +75220 5510 lineto +75250 5400 lineto +75250 5310 lineto +75220 5200 lineto +75190 5140 lineto +75130 5090 lineto +75050 5060 lineto +74900 5060 lineto +stroke +newpath +75500 5110 moveto +75530 5090 lineto +75500 5060 lineto +75470 5090 lineto +75500 5110 lineto +75500 5060 lineto +stroke +newpath +75760 5230 moveto +76050 5230 lineto +stroke +newpath +75710 5060 moveto +75910 5660 lineto +76110 5060 lineto +stroke +newpath +76300 5110 moveto +76330 5090 lineto +76300 5060 lineto +76270 5090 lineto +76300 5110 lineto +76300 5060 lineto +stroke +120 setlinewidth +0 0 0 setrgbcolor +newpath +104590 6260 moveto +104390 6540 lineto +stroke +newpath +104240 6260 moveto +104240 6860 lineto +104470 6860 lineto +104530 6830 lineto +104560 6800 lineto +104590 6740 lineto +104590 6660 lineto +104560 6600 lineto +104530 6570 lineto +104470 6540 lineto +104240 6540 lineto +stroke +newpath +105070 6290 moveto +105010 6260 lineto +104900 6260 lineto +104840 6290 lineto +104810 6340 lineto +104810 6570 lineto +104840 6630 lineto +104900 6660 lineto +105010 6660 lineto +105070 6630 lineto +105100 6570 lineto +105100 6510 lineto +104810 6460 lineto +stroke +newpath +105300 6660 moveto +105440 6260 lineto +105580 6660 lineto +stroke +newpath +105810 6310 moveto +105840 6290 lineto +105810 6260 lineto +105780 6290 lineto +105810 6310 lineto +105810 6260 lineto +stroke +newpath +105810 6630 moveto +105840 6600 lineto +105810 6570 lineto +105780 6600 lineto +105810 6630 lineto +105810 6570 lineto +stroke +0 setlinewidth +0 0 0 setrgbcolor +newpath +71010 6290 moveto +71100 6260 lineto +71240 6260 lineto +71300 6290 lineto +71330 6310 lineto +71360 6370 lineto +71360 6430 lineto +71330 6490 lineto +71300 6510 lineto +71240 6540 lineto +71130 6570 lineto +71070 6600 lineto +71040 6630 lineto +71010 6690 lineto +71010 6740 lineto +71040 6800 lineto +71070 6830 lineto +71130 6860 lineto +71270 6860 lineto +71360 6830 lineto +stroke +newpath +71610 6260 moveto +71610 6660 lineto +stroke +newpath +71610 6860 moveto +71580 6830 lineto +71610 6800 lineto +71640 6830 lineto +71610 6860 lineto +71610 6800 lineto +stroke +newpath +71850 6660 moveto +72160 6660 lineto +71850 6260 lineto +72160 6260 lineto +stroke +newpath +72620 6290 moveto +72560 6260 lineto +72450 6260 lineto +72390 6290 lineto +72360 6340 lineto +72360 6570 lineto +72390 6630 lineto +72450 6660 lineto +72560 6660 lineto +72620 6630 lineto +72650 6570 lineto +72650 6510 lineto +72360 6460 lineto +stroke +newpath +72900 6310 moveto +72930 6290 lineto +72900 6260 lineto +72870 6290 lineto +72900 6310 lineto +72900 6260 lineto +stroke +newpath +72900 6630 moveto +72930 6600 lineto +72900 6570 lineto +72870 6600 lineto +72900 6630 lineto +72900 6570 lineto +stroke +newpath +73620 6430 moveto +73910 6430 lineto +stroke +newpath +73570 6260 moveto +73770 6860 lineto +73970 6260 lineto +stroke +newpath +74420 6660 moveto +74420 6260 lineto +stroke +newpath +74280 6890 moveto +74130 6460 lineto +74510 6460 lineto +stroke +0 0 0 setrgbcolor +newpath +104240 5060 moveto +104240 5660 lineto +stroke +newpath +104790 5060 moveto +104790 5660 lineto +stroke +newpath +104790 5090 moveto +104730 5060 lineto +104620 5060 lineto +104560 5090 lineto +104530 5110 lineto +104500 5170 lineto +104500 5340 lineto +104530 5400 lineto +104560 5430 lineto +104620 5460 lineto +104730 5460 lineto +104790 5430 lineto +stroke +newpath +105070 5110 moveto +105100 5090 lineto +105070 5060 lineto +105040 5090 lineto +105070 5110 lineto +105070 5060 lineto +stroke +newpath +105070 5430 moveto +105100 5400 lineto +105070 5370 lineto +105040 5400 lineto +105070 5430 lineto +105070 5370 lineto +stroke +newpath +106140 5060 moveto +105790 5060 lineto +stroke +newpath +105970 5060 moveto +105970 5660 lineto +105910 5570 lineto +105850 5510 lineto +105790 5490 lineto +stroke +newpath +106820 5690 moveto +106310 4910 lineto +stroke +newpath +107340 5060 moveto +106990 5060 lineto +stroke +newpath +107170 5060 moveto +107170 5660 lineto +107110 5570 lineto +107050 5510 lineto +106990 5490 lineto +stroke +120 setlinewidth +0 0 0 setrgbcolor +newpath +70960 8060 moveto +71300 8060 lineto +stroke +newpath +71130 7460 moveto +71130 8060 lineto +stroke +newpath +71500 7460 moveto +71500 7860 lineto +stroke +newpath +71500 8060 moveto +71470 8030 lineto +71500 8000 lineto +71530 8030 lineto +71500 8060 lineto +71500 8000 lineto +stroke +newpath +71710 7860 moveto +71940 7860 lineto +stroke +newpath +71790 8060 moveto +71790 7540 lineto +71820 7490 lineto +71880 7460 lineto +71940 7460 lineto +stroke +newpath +72220 7460 moveto +72160 7490 lineto +72130 7540 lineto +72130 8060 lineto +stroke +newpath +72670 7490 moveto +72610 7460 lineto +72500 7460 lineto +72440 7490 lineto +72410 7540 lineto +72410 7770 lineto +72440 7830 lineto +72500 7860 lineto +72610 7860 lineto +72670 7830 lineto +72700 7770 lineto +72700 7710 lineto +72410 7660 lineto +stroke +newpath +72950 7510 moveto +72980 7490 lineto +72950 7460 lineto +72920 7490 lineto +72950 7510 lineto +72950 7460 lineto +stroke +newpath +72950 7830 moveto +72980 7800 lineto +72950 7770 lineto +72920 7800 lineto +72950 7830 lineto +72950 7770 lineto +stroke +0 setlinewidth +0 0 0 setrgbcolor +newpath +71240 10170 moveto +71040 10170 lineto +stroke +newpath +71040 9860 moveto +71040 10460 lineto +71330 10460 lineto +stroke +newpath +71550 9860 moveto +71550 10260 lineto +stroke +newpath +71550 10460 moveto +71520 10430 lineto +71550 10400 lineto +71580 10430 lineto +71550 10460 lineto +71550 10400 lineto +stroke +newpath +71930 9860 moveto +71870 9890 lineto +71840 9940 lineto +71840 10460 lineto +stroke +newpath +72380 9890 moveto +72320 9860 lineto +72210 9860 lineto +72150 9890 lineto +72120 9940 lineto +72120 10170 lineto +72150 10230 lineto +72210 10260 lineto +72320 10260 lineto +72380 10230 lineto +72410 10170 lineto +72410 10110 lineto +72120 10060 lineto +stroke +newpath +72660 9910 moveto +72690 9890 lineto +72660 9860 lineto +72630 9890 lineto +72660 9910 lineto +72660 9860 lineto +stroke +newpath +72660 10230 moveto +72690 10200 lineto +72660 10170 lineto +72630 10200 lineto +72660 10230 lineto +72660 10170 lineto +stroke +newpath +73410 10260 moveto +73410 9660 lineto +stroke +newpath +73410 10230 moveto +73470 10260 lineto +73580 10260 lineto +73640 10230 lineto +73670 10200 lineto +73700 10140 lineto +73700 9970 lineto +73670 9910 lineto +73640 9890 lineto +73580 9860 lineto +73470 9860 lineto +73410 9890 lineto +stroke +newpath +73950 9860 moveto +73950 10260 lineto +stroke +newpath +73950 10140 moveto +73980 10200 lineto +74010 10230 lineto +74070 10260 lineto +74120 10260 lineto +stroke +newpath +74410 9860 moveto +74350 9890 lineto +74320 9910 lineto +74290 9970 lineto +74290 10140 lineto +74320 10200 lineto +74350 10230 lineto +74410 10260 lineto +74490 10260 lineto +74550 10230 lineto +74580 10200 lineto +74610 10140 lineto +74610 9970 lineto +74580 9910 lineto +74550 9890 lineto +74490 9860 lineto +74410 9860 lineto +stroke +newpath +74860 10260 moveto +74860 9740 lineto +74830 9690 lineto +74780 9660 lineto +74750 9660 lineto +stroke +newpath +74860 10460 moveto +74830 10430 lineto +74860 10400 lineto +74890 10430 lineto +74860 10460 lineto +74860 10400 lineto +stroke +newpath +75380 9890 moveto +75320 9860 lineto +75210 9860 lineto +75150 9890 lineto +75120 9940 lineto +75120 10170 lineto +75150 10230 lineto +75210 10260 lineto +75320 10260 lineto +75380 10230 lineto +75410 10170 lineto +75410 10110 lineto +75120 10060 lineto +stroke +newpath +75920 9890 moveto +75860 9860 lineto +75750 9860 lineto +75690 9890 lineto +75660 9910 lineto +75630 9970 lineto +75630 10140 lineto +75660 10200 lineto +75690 10230 lineto +75750 10260 lineto +75860 10260 lineto +75920 10230 lineto +stroke +newpath +76090 10260 moveto +76320 10260 lineto +stroke +newpath +76170 10460 moveto +76170 9940 lineto +76200 9890 lineto +76260 9860 lineto +76320 9860 lineto +stroke +newpath +76510 9910 moveto +76540 9890 lineto +76510 9860 lineto +76480 9890 lineto +76510 9910 lineto +76510 9860 lineto +stroke +newpath +76770 9890 moveto +76830 9860 lineto +76950 9860 lineto +77000 9890 lineto +77030 9940 lineto +77030 9970 lineto +77000 10030 lineto +76950 10060 lineto +76860 10060 lineto +76800 10090 lineto +76770 10140 lineto +76770 10170 lineto +76800 10230 lineto +76860 10260 lineto +76950 10260 lineto +77000 10230 lineto +stroke +newpath +77550 9890 moveto +77490 9860 lineto +77380 9860 lineto +77320 9890 lineto +77290 9910 lineto +77260 9970 lineto +77260 10140 lineto +77290 10200 lineto +77320 10230 lineto +77380 10260 lineto +77490 10260 lineto +77550 10230 lineto +stroke +newpath +77800 9860 moveto +77800 10460 lineto +stroke +newpath +78060 9860 moveto +78060 10170 lineto +78030 10230 lineto +77970 10260 lineto +77890 10260 lineto +77830 10230 lineto +77800 10200 lineto +stroke +0 0 0 setrgbcolor +newpath +71010 8690 moveto +71100 8660 lineto +71240 8660 lineto +71300 8690 lineto +71330 8710 lineto +71360 8770 lineto +71360 8830 lineto +71330 8890 lineto +71300 8910 lineto +71240 8940 lineto +71130 8970 lineto +71070 9000 lineto +71040 9030 lineto +71010 9090 lineto +71010 9140 lineto +71040 9200 lineto +71070 9230 lineto +71130 9260 lineto +71270 9260 lineto +71360 9230 lineto +stroke +newpath +71610 8660 moveto +71610 9260 lineto +stroke +newpath +71870 8660 moveto +71870 8970 lineto +71840 9030 lineto +71780 9060 lineto +71700 9060 lineto +71640 9030 lineto +71610 9000 lineto +stroke +newpath +72380 8690 moveto +72320 8660 lineto +72210 8660 lineto +72150 8690 lineto +72120 8740 lineto +72120 8970 lineto +72150 9030 lineto +72210 9060 lineto +72320 9060 lineto +72380 9030 lineto +72410 8970 lineto +72410 8910 lineto +72120 8860 lineto +stroke +newpath +72890 8690 moveto +72830 8660 lineto +72720 8660 lineto +72660 8690 lineto +72630 8740 lineto +72630 8970 lineto +72660 9030 lineto +72720 9060 lineto +72830 9060 lineto +72890 9030 lineto +72920 8970 lineto +72920 8910 lineto +72630 8860 lineto +stroke +newpath +73090 9060 moveto +73320 9060 lineto +stroke +newpath +73170 9260 moveto +73170 8740 lineto +73200 8690 lineto +73260 8660 lineto +73320 8660 lineto +stroke +newpath +73510 8710 moveto +73540 8690 lineto +73510 8660 lineto +73480 8690 lineto +73510 8710 lineto +73510 8660 lineto +stroke +newpath +73510 9030 moveto +73540 9000 lineto +73510 8970 lineto +73480 9000 lineto +73510 9030 lineto +73510 8970 lineto +stroke +newpath +74690 9290 moveto +74180 8510 lineto +stroke +newpath +70300 10700 moveto +70300 4700 lineto +stroke +newpath +70300 10700 moveto +112300 10700 lineto +stroke +newpath +70300 10700 moveto +112300 10700 lineto +stroke +newpath +70300 8300 moveto +112300 8300 lineto +stroke +newpath +103500 7100 moveto +103500 4700 lineto +stroke +newpath +70300 5900 moveto +112300 5900 lineto +stroke +newpath +70300 7100 moveto +112300 7100 lineto +stroke +newpath +76900 7100 moveto +76900 5900 lineto +stroke +60 setlinewidth +0 0 0 setrgbcolor +newpath +55900 54730 moveto +55900 54240 lineto +55870 54180 lineto +55840 54160 lineto +55790 54130 lineto +55700 54130 lineto +55640 54160 lineto +stroke +newpath +55900 54360 moveto +55840 54330 lineto +55730 54330 lineto +55670 54360 lineto +55640 54380 lineto +55610 54440 lineto +55610 54610 lineto +55640 54670 lineto +55670 54700 lineto +55730 54730 lineto +55840 54730 lineto +55900 54700 lineto +stroke +newpath +56180 54730 moveto +56180 54330 lineto +stroke +newpath +56180 54670 moveto +56210 54700 lineto +56270 54730 lineto +56350 54730 lineto +56410 54700 lineto +56440 54640 lineto +56440 54330 lineto +stroke +newpath +56980 54330 moveto +56980 54930 lineto +stroke +newpath +56980 54360 moveto +56920 54330 lineto +56810 54330 lineto +56750 54360 lineto +56720 54380 lineto +56690 54440 lineto +56690 54610 lineto +56720 54670 lineto +56750 54700 lineto +56810 54730 lineto +56920 54730 lineto +56980 54700 lineto +stroke +0 0 0 setrgbcolor +newpath +52400 54730 moveto +52400 54240 lineto +52370 54180 lineto +52340 54160 lineto +52290 54130 lineto +52200 54130 lineto +52140 54160 lineto +stroke +newpath +52400 54360 moveto +52340 54330 lineto +52230 54330 lineto +52170 54360 lineto +52140 54380 lineto +52110 54440 lineto +52110 54610 lineto +52140 54670 lineto +52170 54700 lineto +52230 54730 lineto +52340 54730 lineto +52400 54700 lineto +stroke +newpath +52680 54730 moveto +52680 54330 lineto +stroke +newpath +52680 54670 moveto +52710 54700 lineto +52770 54730 lineto +52850 54730 lineto +52910 54700 lineto +52940 54640 lineto +52940 54330 lineto +stroke +newpath +53480 54330 moveto +53480 54930 lineto +stroke +newpath +53480 54360 moveto +53420 54330 lineto +53310 54330 lineto +53250 54360 lineto +53220 54380 lineto +53190 54440 lineto +53190 54610 lineto +53220 54670 lineto +53250 54700 lineto +53310 54730 lineto +53420 54730 lineto +53480 54700 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +55000 61670 moveto +56000 61670 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +55000 60670 moveto +55500 61670 lineto +56000 60670 lineto +poly1 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +55900 61820 moveto +56300 62270 lineto +56050 62220 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +55750 61970 moveto +56150 62420 lineto +55900 62370 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +55500 60670 moveto +55500 59170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +55360 60030 moveto +55360 59810 lineto +stroke +newpath +55360 59920 moveto +54960 59920 lineto +55020 59880 lineto +55060 59840 lineto +55080 59810 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +55500 61670 moveto +55500 63170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +55000 62310 moveto +54980 62330 lineto +54960 62360 lineto +54960 62460 lineto +54980 62500 lineto +55000 62520 lineto +55040 62530 lineto +55080 62530 lineto +55130 62520 lineto +55360 62290 lineto +55360 62530 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +54700 60320 moveto +54200 60320 lineto +54200 60440 lineto +54230 60510 lineto +54270 60560 lineto +54320 60580 lineto +54420 60600 lineto +54490 60600 lineto +54580 60580 lineto +54630 60560 lineto +54680 60510 lineto +54700 60440 lineto +54700 60320 lineto +stroke +newpath +54700 61080 moveto +54700 60800 lineto +stroke +newpath +54700 60940 moveto +54200 60940 lineto +54270 60890 lineto +54320 60840 lineto +54350 60800 lineto +stroke +newpath +54200 61390 moveto +54200 61440 lineto +54230 61490 lineto +54250 61510 lineto +54300 61540 lineto +54390 61560 lineto +54510 61560 lineto +54610 61540 lineto +54650 61510 lineto +54680 61490 lineto +54700 61440 lineto +54700 61390 lineto +54680 61350 lineto +54650 61320 lineto +54610 61300 lineto +54510 61280 lineto +54390 61280 lineto +54300 61300 lineto +54250 61320 lineto +54230 61350 lineto +54200 61390 lineto +stroke +newpath +54700 62040 moveto +54700 61760 lineto +stroke +newpath +54700 61900 moveto +54200 61900 lineto +54270 61850 lineto +54320 61800 lineto +54350 61760 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +56700 60860 moveto +56700 60620 lineto +56200 60620 lineto +stroke +newpath +56440 61020 moveto +56440 61190 lineto +stroke +newpath +56700 61260 moveto +56700 61020 lineto +56200 61020 lineto +56200 61260 lineto +stroke +newpath +56700 61470 moveto +56200 61470 lineto +56200 61590 lineto +56230 61660 lineto +56270 61710 lineto +56320 61730 lineto +56420 61750 lineto +56490 61750 lineto +56580 61730 lineto +56630 61710 lineto +56680 61660 lineto +56700 61590 lineto +56700 61470 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +120 setlinewidth +55100 58170 800 -3000 rect0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +55500 58170 moveto +55500 59170 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +55500 55170 moveto +55500 54170 lineto +stroke +0 0.627 0.627 setrgbcolor +0 0.627 0.627 setrgbcolor +newpath +56500 56100 moveto +56260 55940 lineto +stroke +newpath +56500 55820 moveto +56000 55820 lineto +56000 56010 lineto +56030 56060 lineto +56050 56080 lineto +56100 56100 lineto +56170 56100 lineto +56220 56080 lineto +56240 56060 lineto +56260 56010 lineto +56260 55820 lineto +stroke +newpath +56500 56580 moveto +56500 56300 lineto +stroke +newpath +56500 56440 moveto +56000 56440 lineto +56070 56390 lineto +56120 56340 lineto +56150 56300 lineto +stroke +newpath +56000 56890 moveto +56000 56940 lineto +56030 56990 lineto +56050 57010 lineto +56100 57040 lineto +56190 57060 lineto +56310 57060 lineto +56410 57040 lineto +56450 57010 lineto +56480 56990 lineto +56500 56940 lineto +56500 56890 lineto +56480 56850 lineto +56450 56820 lineto +56410 56800 lineto +56310 56780 lineto +56190 56780 lineto +56100 56800 lineto +56050 56820 lineto +56030 56850 lineto +56000 56890 lineto +stroke +newpath +56050 57260 moveto +56030 57280 lineto +56000 57330 lineto +56000 57450 lineto +56030 57490 lineto +56050 57520 lineto +56100 57540 lineto +56150 57540 lineto +56220 57520 lineto +56500 57230 lineto +56500 57540 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +55370 56280 moveto +55700 56280 lineto +stroke +newpath +55180 56160 moveto +55540 56050 lineto +55540 56350 lineto +stroke +newpath +55200 56500 moveto +55200 56830 lineto +55700 56620 lineto +stroke +newpath +55200 57120 moveto +55200 57170 lineto +55230 57220 lineto +55250 57240 lineto +55300 57270 lineto +55390 57290 lineto +55510 57290 lineto +55610 57270 lineto +55650 57240 lineto +55680 57220 lineto +55700 57170 lineto +55700 57120 lineto +55680 57080 lineto +55650 57050 lineto +55610 57030 lineto +55510 57010 lineto +55390 57010 lineto +55300 57030 lineto +55250 57050 lineto +55230 57080 lineto +55200 57120 lineto +stroke +0 0 0 setrgbcolor +newpath +55640 63730 moveto +55640 63130 lineto +stroke +newpath +55640 63700 moveto +55700 63730 lineto +55810 63730 lineto +55870 63700 lineto +55900 63670 lineto +55930 63610 lineto +55930 63440 lineto +55900 63380 lineto +55870 63360 lineto +55810 63330 lineto +55700 63330 lineto +55640 63360 lineto +stroke +newpath +56440 63330 moveto +56440 63930 lineto +stroke +newpath +56440 63360 moveto +56380 63330 lineto +56270 63330 lineto +56210 63360 lineto +56180 63380 lineto +56150 63440 lineto +56150 63610 lineto +56180 63670 lineto +56210 63700 lineto +56270 63730 lineto +56380 63730 lineto +56440 63700 lineto +stroke +newpath +57010 63930 moveto +56720 63930 lineto +56690 63640 lineto +56720 63670 lineto +56780 63700 lineto +56920 63700 lineto +56980 63670 lineto +57010 63640 lineto +57040 63580 lineto +57040 63440 lineto +57010 63380 lineto +56980 63360 lineto +56920 63330 lineto +56780 63330 lineto +56720 63360 lineto +56690 63380 lineto +stroke +0 0 1 setrgbcolor +newpath +71140 20330 moveto +71140 20730 lineto +stroke +newpath +71140 20610 moveto +71170 20670 lineto +71200 20700 lineto +71260 20730 lineto +71310 20730 lineto +stroke +newpath +71460 20330 moveto +71770 20730 lineto +stroke +newpath +71460 20730 moveto +71770 20330 lineto +stroke +0 0 1 setrgbcolor +newpath +71060 21730 moveto +71290 21730 lineto +stroke +newpath +71140 21930 moveto +71140 21410 lineto +71170 21360 lineto +71230 21330 lineto +71290 21330 lineto +stroke +newpath +71430 21330 moveto +71740 21730 lineto +stroke +newpath +71430 21730 moveto +71740 21330 lineto +stroke +0 0 1 setrgbcolor +newpath +71140 25730 moveto +71140 25330 lineto +stroke +newpath +71140 25670 moveto +71170 25700 lineto +71230 25730 lineto +71310 25730 lineto +71370 25700 lineto +71400 25640 lineto +71400 25330 lineto +stroke +newpath +72030 25380 moveto +72000 25360 lineto +71910 25330 lineto +71850 25330 lineto +71770 25360 lineto +71710 25410 lineto +71680 25470 lineto +71650 25580 lineto +71650 25670 lineto +71680 25780 lineto +71710 25840 lineto +71770 25900 lineto +71850 25930 lineto +71910 25930 lineto +72000 25900 lineto +72030 25870 lineto +stroke +newpath +72250 25360 moveto +72340 25330 lineto +72480 25330 lineto +72540 25360 lineto +72570 25380 lineto +72600 25440 lineto +72600 25500 lineto +72570 25560 lineto +72540 25580 lineto +72480 25610 lineto +72370 25640 lineto +72310 25670 lineto +72280 25700 lineto +72250 25760 lineto +72250 25810 lineto +72280 25870 lineto +72310 25900 lineto +72370 25930 lineto +72510 25930 lineto +72600 25900 lineto +stroke +0 0 1 setrgbcolor +newpath +71110 26360 moveto +71170 26330 lineto +71290 26330 lineto +71340 26360 lineto +71370 26410 lineto +71370 26440 lineto +71340 26500 lineto +71290 26530 lineto +71200 26530 lineto +71140 26560 lineto +71110 26610 lineto +71110 26640 lineto +71140 26700 lineto +71200 26730 lineto +71290 26730 lineto +71340 26700 lineto +stroke +newpath +71890 26360 moveto +71830 26330 lineto +71720 26330 lineto +71660 26360 lineto +71630 26380 lineto +71600 26440 lineto +71600 26610 lineto +71630 26670 lineto +71660 26700 lineto +71720 26730 lineto +71830 26730 lineto +71890 26700 lineto +stroke +newpath +72140 26330 moveto +72140 26930 lineto +stroke +newpath +72200 26560 moveto +72370 26330 lineto +stroke +newpath +72370 26730 moveto +72140 26500 lineto +stroke +0 0 1 setrgbcolor +newpath +51640 26330 moveto +51640 26730 lineto +stroke +newpath +51640 26670 moveto +51670 26700 lineto +51730 26730 lineto +51810 26730 lineto +51870 26700 lineto +51900 26640 lineto +51900 26330 lineto +stroke +newpath +51900 26640 moveto +51930 26700 lineto +51990 26730 lineto +52070 26730 lineto +52130 26700 lineto +52160 26640 lineto +52160 26330 lineto +stroke +newpath +52530 26330 moveto +52470 26360 lineto +52440 26380 lineto +52410 26440 lineto +52410 26610 lineto +52440 26670 lineto +52470 26700 lineto +52530 26730 lineto +52610 26730 lineto +52670 26700 lineto +52700 26670 lineto +52730 26610 lineto +52730 26440 lineto +52700 26380 lineto +52670 26360 lineto +52610 26330 lineto +52530 26330 lineto +stroke +newpath +52950 26360 moveto +53010 26330 lineto +53130 26330 lineto +53180 26360 lineto +53210 26410 lineto +53210 26440 lineto +53180 26500 lineto +53130 26530 lineto +53040 26530 lineto +52980 26560 lineto +52950 26610 lineto +52950 26640 lineto +52980 26700 lineto +53040 26730 lineto +53130 26730 lineto +53180 26700 lineto +stroke +newpath +53470 26330 moveto +53470 26730 lineto +stroke +newpath +53470 26930 moveto +53440 26900 lineto +53470 26870 lineto +53500 26900 lineto +53470 26930 lineto +53470 26870 lineto +stroke +0 0 1 setrgbcolor +newpath +51640 25330 moveto +51640 25730 lineto +stroke +newpath +51640 25670 moveto +51670 25700 lineto +51730 25730 lineto +51810 25730 lineto +51870 25700 lineto +51900 25640 lineto +51900 25330 lineto +stroke +newpath +51900 25640 moveto +51930 25700 lineto +51990 25730 lineto +52070 25730 lineto +52130 25700 lineto +52160 25640 lineto +52160 25330 lineto +stroke +newpath +52440 25330 moveto +52440 25730 lineto +stroke +newpath +52440 25930 moveto +52410 25900 lineto +52440 25870 lineto +52470 25900 lineto +52440 25930 lineto +52440 25870 lineto +stroke +newpath +52700 25360 moveto +52760 25330 lineto +52880 25330 lineto +52930 25360 lineto +52960 25410 lineto +52960 25440 lineto +52930 25500 lineto +52880 25530 lineto +52790 25530 lineto +52730 25560 lineto +52700 25610 lineto +52700 25640 lineto +52730 25700 lineto +52790 25730 lineto +52880 25730 lineto +52930 25700 lineto +stroke +newpath +53310 25330 moveto +53250 25360 lineto +53220 25380 lineto +53190 25440 lineto +53190 25610 lineto +53220 25670 lineto +53250 25700 lineto +53310 25730 lineto +53390 25730 lineto +53450 25700 lineto +53480 25670 lineto +53510 25610 lineto +53510 25440 lineto +53480 25380 lineto +53450 25360 lineto +53390 25330 lineto +53310 25330 lineto +stroke +0 0 0 setrgbcolor +newpath +52140 63730 moveto +52140 63130 lineto +stroke +newpath +52140 63700 moveto +52200 63730 lineto +52310 63730 lineto +52370 63700 lineto +52400 63670 lineto +52430 63610 lineto +52430 63440 lineto +52400 63380 lineto +52370 63360 lineto +52310 63330 lineto +52200 63330 lineto +52140 63360 lineto +stroke +newpath +52940 63360 moveto +52880 63330 lineto +52770 63330 lineto +52710 63360 lineto +52680 63380 lineto +52650 63440 lineto +52650 63610 lineto +52680 63670 lineto +52710 63700 lineto +52770 63730 lineto +52880 63730 lineto +52940 63700 lineto +stroke +newpath +53450 63730 moveto +53450 63330 lineto +stroke +newpath +53310 63960 moveto +53160 63530 lineto +53540 63530 lineto +stroke +0 setlinewidth +0 0.627 0 setrgbcolor +60 setlinewidth +89500 39670 160 cir1 +0 0.627 0 setrgbcolor +newpath +89500 37170 moveto +89500 39670 lineto +stroke +0 setlinewidth +0 0.627 0 setrgbcolor +60 setlinewidth +91500 39670 160 cir1 +0 0.627 0 setrgbcolor +newpath +29500 48170 moveto +29500 50170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +29500 50170 moveto +38500 50170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +38500 50170 moveto +38500 48670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +38500 48670 moveto +45500 48670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +33500 45670 moveto +40000 45670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +40000 45670 moveto +40000 46670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +45500 40170 moveto +42500 40170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +40000 46670 moveto +45500 46670 lineto +stroke +0 setlinewidth +0 0.627 0 setrgbcolor +60 setlinewidth +76000 48670 160 cir1 +0 0.627 0 setrgbcolor +newpath +76000 50170 moveto +89000 50170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +76000 50170 moveto +76000 47670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +85000 43670 moveto +74500 43670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +79500 44670 moveto +74500 44670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +74500 47670 moveto +79500 47670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +76000 48670 moveto +74500 48670 lineto +stroke +0 setlinewidth +0 0.627 0 setrgbcolor +60 setlinewidth +76000 47670 160 cir1 +0 0.627 0 setrgbcolor +newpath +92000 39670 moveto +85000 39670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +45500 45670 moveto +41500 45670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +45500 41670 moveto +42500 41670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +89500 39670 moveto +89000 39670 lineto +stroke +0 setlinewidth +0 0.627 0 setrgbcolor +60 setlinewidth +89000 39670 160 cir1 +0 0.627 0 setrgbcolor +newpath +37500 48170 moveto +41000 48170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +41000 48170 moveto +41000 47670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +41000 47670 moveto +45500 47670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +89000 50170 moveto +89000 43670 lineto +stroke +0 0.627 0 setrgbcolor +newpath +74500 40170 moveto +77000 40170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +77000 40170 moveto +77000 37170 lineto +stroke +0 0.627 0 setrgbcolor +newpath +77000 37170 moveto +83500 37170 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +79000 23170 310 cir0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +78700 23170 moveto +78500 23170 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +78500 23170 moveto +77500 23170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +79900 23010 moveto +79900 23410 lineto +80050 23410 lineto +80090 23390 lineto +80100 23370 lineto +80120 23330 lineto +80120 23270 lineto +80100 23240 lineto +80090 23220 lineto +80050 23200 lineto +79900 23200 lineto +stroke +newpath +80500 23010 moveto +80280 23010 lineto +stroke +newpath +80390 23010 moveto +80390 23410 lineto +80350 23350 lineto +80310 23310 lineto +80280 23290 lineto +stroke +newpath +80750 23410 moveto +80790 23410 lineto +80830 23390 lineto +80850 23370 lineto +80870 23330 lineto +80880 23260 lineto +80880 23160 lineto +80870 23080 lineto +80850 23050 lineto +80830 23030 lineto +80790 23010 lineto +80750 23010 lineto +80710 23030 lineto +80690 23050 lineto +80680 23080 lineto +80660 23160 lineto +80660 23260 lineto +80680 23330 lineto +80690 23370 lineto +80710 23390 lineto +80750 23410 lineto +stroke +newpath +81250 23410 moveto +81060 23410 lineto +81040 23220 lineto +81060 23240 lineto +81090 23260 lineto +81190 23260 lineto +81230 23240 lineto +81250 23220 lineto +81260 23180 lineto +81260 23080 lineto +81250 23050 lineto +81230 23030 lineto +81190 23010 lineto +81090 23010 lineto +81060 23030 lineto +81040 23050 lineto +stroke +0 0 1 setrgbcolor +newpath +77640 27330 moveto +77640 27730 lineto +stroke +newpath +77640 27670 moveto +77670 27700 lineto +77730 27730 lineto +77810 27730 lineto +77870 27700 lineto +77900 27640 lineto +77900 27330 lineto +stroke +newpath +77900 27640 moveto +77930 27700 lineto +77990 27730 lineto +78070 27730 lineto +78130 27700 lineto +78160 27640 lineto +78160 27330 lineto +stroke +newpath +78530 27330 moveto +78470 27360 lineto +78440 27380 lineto +78410 27440 lineto +78410 27610 lineto +78440 27670 lineto +78470 27700 lineto +78530 27730 lineto +78610 27730 lineto +78670 27700 lineto +78700 27670 lineto +78730 27610 lineto +78730 27440 lineto +78700 27380 lineto +78670 27360 lineto +78610 27330 lineto +78530 27330 lineto +stroke +newpath +79240 27730 moveto +79240 27330 lineto +stroke +newpath +78980 27730 moveto +78980 27410 lineto +79010 27360 lineto +79070 27330 lineto +79150 27330 lineto +79210 27360 lineto +79240 27380 lineto +stroke +newpath +79520 27730 moveto +79520 27330 lineto +stroke +newpath +79520 27670 moveto +79550 27700 lineto +79610 27730 lineto +79690 27730 lineto +79750 27700 lineto +79780 27640 lineto +79780 27330 lineto +stroke +newpath +79980 27730 moveto +80210 27730 lineto +stroke +newpath +80060 27930 moveto +80060 27410 lineto +80090 27360 lineto +80150 27330 lineto +80210 27330 lineto +stroke +newpath +80400 27330 moveto +80400 27730 lineto +stroke +newpath +80400 27930 moveto +80370 27900 lineto +80400 27870 lineto +80430 27900 lineto +80400 27930 lineto +80400 27870 lineto +stroke +newpath +80690 27730 moveto +80690 27330 lineto +stroke +newpath +80690 27670 moveto +80720 27700 lineto +80780 27730 lineto +80860 27730 lineto +80920 27700 lineto +80950 27640 lineto +80950 27330 lineto +stroke +newpath +81490 27730 moveto +81490 27240 lineto +81460 27180 lineto +81430 27160 lineto +81380 27130 lineto +81290 27130 lineto +81230 27160 lineto +stroke +newpath +81490 27360 moveto +81430 27330 lineto +81320 27330 lineto +81260 27360 lineto +81230 27380 lineto +81200 27440 lineto +81200 27610 lineto +81230 27670 lineto +81260 27700 lineto +81320 27730 lineto +81430 27730 lineto +81490 27700 lineto +stroke +newpath +82230 27330 moveto +82230 27930 lineto +stroke +newpath +82490 27330 moveto +82490 27640 lineto +82460 27700 lineto +82400 27730 lineto +82320 27730 lineto +82260 27700 lineto +82230 27670 lineto +stroke +newpath +82860 27330 moveto +82800 27360 lineto +82770 27380 lineto +82740 27440 lineto +82740 27610 lineto +82770 27670 lineto +82800 27700 lineto +82860 27730 lineto +82940 27730 lineto +83000 27700 lineto +83030 27670 lineto +83060 27610 lineto +83060 27440 lineto +83030 27380 lineto +83000 27360 lineto +82940 27330 lineto +82860 27330 lineto +stroke +newpath +83400 27330 moveto +83340 27360 lineto +83310 27410 lineto +83310 27930 lineto +stroke +newpath +83850 27360 moveto +83790 27330 lineto +83680 27330 lineto +83620 27360 lineto +83590 27410 lineto +83590 27640 lineto +83620 27700 lineto +83680 27730 lineto +83790 27730 lineto +83850 27700 lineto +83880 27640 lineto +83880 27580 lineto +83590 27530 lineto +stroke +newpath +84100 27360 moveto +84160 27330 lineto +84280 27330 lineto +84330 27360 lineto +84360 27410 lineto +84360 27440 lineto +84330 27500 lineto +84280 27530 lineto +84190 27530 lineto +84130 27560 lineto +84100 27610 lineto +84100 27640 lineto +84130 27700 lineto +84190 27730 lineto +84280 27730 lineto +84330 27700 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +79000 24170 310 cir0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +78700 24170 moveto +78500 24170 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +78500 24170 moveto +77500 24170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +79900 24010 moveto +79900 24410 lineto +80050 24410 lineto +80090 24390 lineto +80100 24370 lineto +80120 24330 lineto +80120 24270 lineto +80100 24240 lineto +80090 24220 lineto +80050 24200 lineto +79900 24200 lineto +stroke +newpath +80500 24010 moveto +80280 24010 lineto +stroke +newpath +80390 24010 moveto +80390 24410 lineto +80350 24350 lineto +80310 24310 lineto +80280 24290 lineto +stroke +newpath +80750 24410 moveto +80790 24410 lineto +80830 24390 lineto +80850 24370 lineto +80870 24330 lineto +80880 24260 lineto +80880 24160 lineto +80870 24080 lineto +80850 24050 lineto +80830 24030 lineto +80790 24010 lineto +80750 24010 lineto +80710 24030 lineto +80690 24050 lineto +80680 24080 lineto +80660 24160 lineto +80660 24260 lineto +80680 24330 lineto +80690 24370 lineto +80710 24390 lineto +80750 24410 lineto +stroke +newpath +81230 24270 moveto +81230 24010 lineto +stroke +newpath +81130 24430 moveto +81040 24140 lineto +81280 24140 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +79000 25170 310 cir0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +78700 25170 moveto +78500 25170 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +78500 25170 moveto +77500 25170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +79900 25010 moveto +79900 25410 lineto +80050 25410 lineto +80090 25390 lineto +80100 25370 lineto +80120 25330 lineto +80120 25270 lineto +80100 25240 lineto +80090 25220 lineto +80050 25200 lineto +79900 25200 lineto +stroke +newpath +80500 25010 moveto +80280 25010 lineto +stroke +newpath +80390 25010 moveto +80390 25410 lineto +80350 25350 lineto +80310 25310 lineto +80280 25290 lineto +stroke +newpath +80750 25410 moveto +80790 25410 lineto +80830 25390 lineto +80850 25370 lineto +80870 25330 lineto +80880 25260 lineto +80880 25160 lineto +80870 25080 lineto +80850 25050 lineto +80830 25030 lineto +80790 25010 lineto +80750 25010 lineto +80710 25030 lineto +80690 25050 lineto +80680 25080 lineto +80660 25160 lineto +80660 25260 lineto +80680 25330 lineto +80690 25370 lineto +80710 25390 lineto +80750 25410 lineto +stroke +newpath +81020 25410 moveto +81260 25410 lineto +81130 25260 lineto +81190 25260 lineto +81230 25240 lineto +81250 25220 lineto +81260 25180 lineto +81260 25080 lineto +81250 25050 lineto +81230 25030 lineto +81190 25010 lineto +81070 25010 lineto +81040 25030 lineto +81020 25050 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 24730 moveto +68140 24130 lineto +stroke +newpath +68140 24700 moveto +68200 24730 lineto +68310 24730 lineto +68370 24700 lineto +68400 24670 lineto +68430 24610 lineto +68430 24440 lineto +68400 24380 lineto +68370 24360 lineto +68310 24330 lineto +68200 24330 lineto +68140 24360 lineto +stroke +newpath +68940 24330 moveto +68940 24930 lineto +stroke +newpath +68940 24360 moveto +68880 24330 lineto +68770 24330 lineto +68710 24360 lineto +68680 24380 lineto +68650 24440 lineto +68650 24610 lineto +68680 24670 lineto +68710 24700 lineto +68770 24730 lineto +68880 24730 lineto +68940 24700 lineto +stroke +newpath +69170 24930 moveto +69570 24930 lineto +69310 24330 lineto +stroke +0 0 0 setrgbcolor +newpath +71610 59730 moveto +71750 59330 lineto +71890 59730 lineto +stroke +newpath +72380 59360 moveto +72320 59330 lineto +72210 59330 lineto +72150 59360 lineto +72120 59380 lineto +72090 59440 lineto +72090 59610 lineto +72120 59670 lineto +72150 59700 lineto +72210 59730 lineto +72320 59730 lineto +72380 59700 lineto +stroke +newpath +72890 59360 moveto +72830 59330 lineto +72720 59330 lineto +72660 59360 lineto +72630 59380 lineto +72600 59440 lineto +72600 59610 lineto +72630 59670 lineto +72660 59700 lineto +72720 59730 lineto +72830 59730 lineto +72890 59700 lineto +stroke +0 0 0 setrgbcolor +newpath +78090 59730 moveto +78230 59330 lineto +78370 59730 lineto +stroke +newpath +78860 59360 moveto +78800 59330 lineto +78690 59330 lineto +78630 59360 lineto +78600 59380 lineto +78570 59440 lineto +78570 59610 lineto +78600 59670 lineto +78630 59700 lineto +78690 59730 lineto +78800 59730 lineto +78860 59700 lineto +stroke +newpath +79370 59360 moveto +79310 59330 lineto +79200 59330 lineto +79140 59360 lineto +79110 59380 lineto +79080 59440 lineto +79080 59610 lineto +79110 59670 lineto +79140 59700 lineto +79200 59730 lineto +79310 59730 lineto +79370 59700 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +120 setlinewidth +77000 59570 -3000 -800 rect0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +77000 59170 moveto +78000 59170 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +74000 59170 moveto +73000 59170 lineto +stroke +0 0.627 0.627 setrgbcolor +0 0.627 0.627 setrgbcolor +newpath +74930 58170 moveto +74770 58410 lineto +stroke +newpath +74650 58170 moveto +74650 58670 lineto +74840 58670 lineto +74890 58640 lineto +74910 58620 lineto +74930 58570 lineto +74930 58500 lineto +74910 58450 lineto +74890 58430 lineto +74840 58410 lineto +74650 58410 lineto +stroke +newpath +75410 58170 moveto +75130 58170 lineto +stroke +newpath +75270 58170 moveto +75270 58670 lineto +75220 58600 lineto +75170 58550 lineto +75130 58520 lineto +stroke +newpath +75720 58670 moveto +75770 58670 lineto +75820 58640 lineto +75840 58620 lineto +75870 58570 lineto +75890 58480 lineto +75890 58360 lineto +75870 58260 lineto +75840 58220 lineto +75820 58190 lineto +75770 58170 lineto +75720 58170 lineto +75680 58190 lineto +75650 58220 lineto +75630 58260 lineto +75610 58360 lineto +75610 58480 lineto +75630 58570 lineto +75650 58620 lineto +75680 58640 lineto +75720 58670 lineto +stroke +newpath +76370 58170 moveto +76090 58170 lineto +stroke +newpath +76230 58170 moveto +76230 58670 lineto +76180 58600 lineto +76130 58550 lineto +76090 58520 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +75470 59470 moveto +75520 59470 lineto +75570 59440 lineto +75590 59420 lineto +75620 59370 lineto +75640 59280 lineto +75640 59160 lineto +75620 59060 lineto +75590 59020 lineto +75570 58990 lineto +75520 58970 lineto +75470 58970 lineto +75430 58990 lineto +75400 59020 lineto +75380 59060 lineto +75360 59160 lineto +75360 59280 lineto +75380 59370 lineto +75400 59420 lineto +75430 59440 lineto +75470 59470 lineto +stroke +0 0 0 setrgbcolor +newpath +68090 16730 moveto +68230 16330 lineto +68370 16730 lineto +stroke +newpath +68860 16360 moveto +68800 16330 lineto +68690 16330 lineto +68630 16360 lineto +68600 16380 lineto +68570 16440 lineto +68570 16610 lineto +68600 16670 lineto +68630 16700 lineto +68690 16730 lineto +68800 16730 lineto +68860 16700 lineto +stroke +newpath +69370 16360 moveto +69310 16330 lineto +69200 16330 lineto +69140 16360 lineto +69110 16380 lineto +69080 16440 lineto +69080 16610 lineto +69110 16670 lineto +69140 16700 lineto +69200 16730 lineto +69310 16730 lineto +69370 16700 lineto +stroke +0 0 0 setrgbcolor +newpath +55780 15730 moveto +55780 15240 lineto +55750 15180 lineto +55720 15160 lineto +55670 15130 lineto +55580 15130 lineto +55520 15160 lineto +stroke +newpath +55780 15360 moveto +55720 15330 lineto +55610 15330 lineto +55550 15360 lineto +55520 15380 lineto +55490 15440 lineto +55490 15610 lineto +55520 15670 lineto +55550 15700 lineto +55610 15730 lineto +55720 15730 lineto +55780 15700 lineto +stroke +newpath +56060 15730 moveto +56060 15330 lineto +stroke +newpath +56060 15670 moveto +56090 15700 lineto +56150 15730 lineto +56230 15730 lineto +56290 15700 lineto +56320 15640 lineto +56320 15330 lineto +stroke +newpath +56860 15330 moveto +56860 15930 lineto +stroke +newpath +56860 15360 moveto +56800 15330 lineto +56690 15330 lineto +56630 15360 lineto +56600 15380 lineto +56570 15440 lineto +56570 15610 lineto +56600 15670 lineto +56630 15700 lineto +56690 15730 lineto +56800 15730 lineto +56860 15700 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +59500 26670 2000 -12000 rect0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 26170 350 cir0 +newpath +58800 26170 moveto +57000 26170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58390 26320 moveto +58110 26320 lineto +stroke +newpath +58250 26320 moveto +58250 26820 lineto +58200 26750 lineto +58150 26700 lineto +58110 26670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 25170 350 cir0 +newpath +58800 25170 moveto +57000 25170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58110 25770 moveto +58130 25790 lineto +58180 25820 lineto +58300 25820 lineto +58340 25790 lineto +58370 25770 lineto +58390 25720 lineto +58390 25670 lineto +58370 25600 lineto +58080 25320 lineto +58390 25320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 24170 350 cir0 +newpath +58800 24170 moveto +57000 24170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58080 24820 moveto +58390 24820 lineto +58220 24630 lineto +58300 24630 lineto +58340 24600 lineto +58370 24580 lineto +58390 24530 lineto +58390 24410 lineto +58370 24370 lineto +58340 24340 lineto +58300 24320 lineto +58150 24320 lineto +58110 24340 lineto +58080 24370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 23170 350 cir0 +newpath +58800 23170 moveto +57000 23170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58340 23650 moveto +58340 23320 lineto +stroke +newpath +58220 23840 moveto +58110 23480 lineto +58410 23480 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 22170 350 cir0 +newpath +58800 22170 moveto +57000 22170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58370 22820 moveto +58130 22820 lineto +58110 22580 lineto +58130 22600 lineto +58180 22630 lineto +58300 22630 lineto +58340 22600 lineto +58370 22580 lineto +58390 22530 lineto +58390 22410 lineto +58370 22370 lineto +58340 22340 lineto +58300 22320 lineto +58180 22320 lineto +58130 22340 lineto +58110 22370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 21170 350 cir0 +newpath +58800 21170 moveto +57000 21170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58340 21820 moveto +58250 21820 lineto +58200 21790 lineto +58180 21770 lineto +58130 21700 lineto +58110 21600 lineto +58110 21410 lineto +58130 21370 lineto +58150 21340 lineto +58200 21320 lineto +58300 21320 lineto +58340 21340 lineto +58370 21370 lineto +58390 21410 lineto +58390 21530 lineto +58370 21580 lineto +58340 21600 lineto +58300 21630 lineto +58200 21630 lineto +58150 21600 lineto +58130 21580 lineto +58110 21530 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 20170 350 cir0 +newpath +58800 20170 moveto +57000 20170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58080 20820 moveto +58410 20820 lineto +58200 20320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 19170 350 cir0 +newpath +58800 19170 moveto +57000 19170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58200 19600 moveto +58150 19630 lineto +58130 19650 lineto +58110 19700 lineto +58110 19720 lineto +58130 19770 lineto +58150 19790 lineto +58200 19820 lineto +58300 19820 lineto +58340 19790 lineto +58370 19770 lineto +58390 19720 lineto +58390 19700 lineto +58370 19650 lineto +58340 19630 lineto +58300 19600 lineto +58200 19600 lineto +58150 19580 lineto +58130 19560 lineto +58110 19510 lineto +58110 19410 lineto +58130 19370 lineto +58150 19340 lineto +58200 19320 lineto +58300 19320 lineto +58340 19340 lineto +58370 19370 lineto +58390 19410 lineto +58390 19510 lineto +58370 19560 lineto +58340 19580 lineto +58300 19600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 18170 350 cir0 +newpath +58800 18170 moveto +57000 18170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58150 18320 moveto +58250 18320 lineto +58300 18340 lineto +58320 18370 lineto +58370 18440 lineto +58390 18530 lineto +58390 18720 lineto +58370 18770 lineto +58340 18790 lineto +58300 18820 lineto +58200 18820 lineto +58150 18790 lineto +58130 18770 lineto +58110 18720 lineto +58110 18600 lineto +58130 18560 lineto +58150 18530 lineto +58200 18510 lineto +58300 18510 lineto +58340 18530 lineto +58370 18560 lineto +58390 18600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 17170 350 cir0 +newpath +58800 17170 moveto +57000 17170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58150 17320 moveto +57870 17320 lineto +stroke +newpath +58010 17320 moveto +58010 17820 lineto +57960 17750 lineto +57910 17700 lineto +57870 17670 lineto +stroke +newpath +58460 17820 moveto +58510 17820 lineto +58560 17790 lineto +58580 17770 lineto +58610 17720 lineto +58630 17630 lineto +58630 17510 lineto +58610 17410 lineto +58580 17370 lineto +58560 17340 lineto +58510 17320 lineto +58460 17320 lineto +58420 17340 lineto +58390 17370 lineto +58370 17410 lineto +58350 17510 lineto +58350 17630 lineto +58370 17720 lineto +58390 17770 lineto +58420 17790 lineto +58460 17820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 16170 350 cir0 +newpath +58800 16170 moveto +57000 16170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58150 16320 moveto +57870 16320 lineto +stroke +newpath +58010 16320 moveto +58010 16820 lineto +57960 16750 lineto +57910 16700 lineto +57870 16670 lineto +stroke +newpath +58630 16320 moveto +58350 16320 lineto +stroke +newpath +58490 16320 moveto +58490 16820 lineto +58440 16750 lineto +58390 16700 lineto +58350 16670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +59150 15170 350 cir0 +newpath +58800 15170 moveto +57000 15170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +58150 15320 moveto +57870 15320 lineto +stroke +newpath +58010 15320 moveto +58010 15820 lineto +57960 15750 lineto +57910 15700 lineto +57870 15670 lineto +stroke +newpath +58350 15770 moveto +58370 15790 lineto +58420 15820 lineto +58540 15820 lineto +58580 15790 lineto +58610 15770 lineto +58630 15720 lineto +58630 15670 lineto +58610 15600 lineto +58320 15320 lineto +58630 15320 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +60240 19660 moveto +59640 19660 lineto +59640 19890 lineto +59670 19950 lineto +59700 19980 lineto +59760 20010 lineto +59840 20010 lineto +59900 19980 lineto +59930 19950 lineto +59960 19890 lineto +59960 19660 lineto +stroke +newpath +60240 20580 moveto +60240 20230 lineto +stroke +newpath +60240 20410 moveto +59640 20410 lineto +59730 20350 lineto +59790 20290 lineto +59810 20230 lineto +stroke +newpath +59640 20950 moveto +59640 21000 lineto +59670 21060 lineto +59700 21090 lineto +59760 21120 lineto +59870 21150 lineto +60010 21150 lineto +60130 21120 lineto +60190 21090 lineto +60210 21060 lineto +60240 21000 lineto +60240 20950 lineto +60210 20890 lineto +60190 20860 lineto +60130 20830 lineto +60010 20800 lineto +59870 20800 lineto +59760 20830 lineto +59700 20860 lineto +59670 20890 lineto +59640 20950 lineto +stroke +newpath +59700 21370 moveto +59670 21400 lineto +59640 21460 lineto +59640 21600 lineto +59670 21660 lineto +59700 21690 lineto +59760 21720 lineto +59810 21720 lineto +59900 21690 lineto +60240 21350 lineto +60240 21720 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +61190 19120 moveto +61210 19090 lineto +61240 19000 lineto +61240 18940 lineto +61210 18860 lineto +61160 18800 lineto +61100 18770 lineto +60990 18740 lineto +60900 18740 lineto +60790 18770 lineto +60730 18800 lineto +60670 18860 lineto +60640 18940 lineto +60640 19000 lineto +60670 19090 lineto +60700 19120 lineto +stroke +newpath +60640 19490 moveto +60640 19600 lineto +60670 19660 lineto +60730 19720 lineto +60840 19740 lineto +61040 19740 lineto +61160 19720 lineto +61210 19660 lineto +61240 19600 lineto +61240 19490 lineto +61210 19430 lineto +61160 19370 lineto +61040 19340 lineto +60840 19340 lineto +60730 19370 lineto +60670 19430 lineto +60640 19490 lineto +stroke +newpath +61240 20000 moveto +60640 20000 lineto +61240 20350 lineto +60640 20350 lineto +stroke +newpath +61240 20630 moveto +60640 20630 lineto +61240 20980 lineto +60640 20980 lineto +stroke +newpath +61300 21120 moveto +61300 21580 lineto +stroke +newpath +61240 22040 moveto +61240 21690 lineto +stroke +newpath +61240 21870 moveto +60640 21870 lineto +60730 21810 lineto +60790 21750 lineto +60810 21690 lineto +stroke +newpath +60700 22260 moveto +60670 22290 lineto +60640 22350 lineto +60640 22490 lineto +60670 22550 lineto +60700 22580 lineto +60760 22610 lineto +60810 22610 lineto +60900 22580 lineto +61240 22240 lineto +61240 22610 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +65500 14670 -2000 12000 rect0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 15170 350 cir0 +newpath +66200 15170 moveto +68000 15170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66890 15320 moveto +66610 15320 lineto +stroke +newpath +66750 15320 moveto +66750 15820 lineto +66700 15750 lineto +66650 15700 lineto +66610 15670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 16170 350 cir0 +newpath +66200 16170 moveto +68000 16170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66610 16770 moveto +66630 16790 lineto +66680 16820 lineto +66800 16820 lineto +66840 16790 lineto +66870 16770 lineto +66890 16720 lineto +66890 16670 lineto +66870 16600 lineto +66580 16320 lineto +66890 16320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 17170 350 cir0 +newpath +66200 17170 moveto +68000 17170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66580 17820 moveto +66890 17820 lineto +66720 17630 lineto +66800 17630 lineto +66840 17600 lineto +66870 17580 lineto +66890 17530 lineto +66890 17410 lineto +66870 17370 lineto +66840 17340 lineto +66800 17320 lineto +66650 17320 lineto +66610 17340 lineto +66580 17370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 18170 350 cir0 +newpath +66200 18170 moveto +68000 18170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66840 18650 moveto +66840 18320 lineto +stroke +newpath +66720 18840 moveto +66610 18480 lineto +66910 18480 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 19170 350 cir0 +newpath +66200 19170 moveto +68000 19170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66870 19820 moveto +66630 19820 lineto +66610 19580 lineto +66630 19600 lineto +66680 19630 lineto +66800 19630 lineto +66840 19600 lineto +66870 19580 lineto +66890 19530 lineto +66890 19410 lineto +66870 19370 lineto +66840 19340 lineto +66800 19320 lineto +66680 19320 lineto +66630 19340 lineto +66610 19370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 20170 350 cir0 +newpath +66200 20170 moveto +68000 20170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66840 20820 moveto +66750 20820 lineto +66700 20790 lineto +66680 20770 lineto +66630 20700 lineto +66610 20600 lineto +66610 20410 lineto +66630 20370 lineto +66650 20340 lineto +66700 20320 lineto +66800 20320 lineto +66840 20340 lineto +66870 20370 lineto +66890 20410 lineto +66890 20530 lineto +66870 20580 lineto +66840 20600 lineto +66800 20630 lineto +66700 20630 lineto +66650 20600 lineto +66630 20580 lineto +66610 20530 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 21170 350 cir0 +newpath +66200 21170 moveto +68000 21170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66580 21820 moveto +66910 21820 lineto +66700 21320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 22170 350 cir0 +newpath +66200 22170 moveto +68000 22170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66700 22600 moveto +66650 22630 lineto +66630 22650 lineto +66610 22700 lineto +66610 22720 lineto +66630 22770 lineto +66650 22790 lineto +66700 22820 lineto +66800 22820 lineto +66840 22790 lineto +66870 22770 lineto +66890 22720 lineto +66890 22700 lineto +66870 22650 lineto +66840 22630 lineto +66800 22600 lineto +66700 22600 lineto +66650 22580 lineto +66630 22560 lineto +66610 22510 lineto +66610 22410 lineto +66630 22370 lineto +66650 22340 lineto +66700 22320 lineto +66800 22320 lineto +66840 22340 lineto +66870 22370 lineto +66890 22410 lineto +66890 22510 lineto +66870 22560 lineto +66840 22580 lineto +66800 22600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 23170 350 cir0 +newpath +66200 23170 moveto +68000 23170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66650 23320 moveto +66750 23320 lineto +66800 23340 lineto +66820 23370 lineto +66870 23440 lineto +66890 23530 lineto +66890 23720 lineto +66870 23770 lineto +66840 23790 lineto +66800 23820 lineto +66700 23820 lineto +66650 23790 lineto +66630 23770 lineto +66610 23720 lineto +66610 23600 lineto +66630 23560 lineto +66650 23530 lineto +66700 23510 lineto +66800 23510 lineto +66840 23530 lineto +66870 23560 lineto +66890 23600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 24170 350 cir0 +newpath +66200 24170 moveto +68000 24170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66650 24320 moveto +66370 24320 lineto +stroke +newpath +66510 24320 moveto +66510 24820 lineto +66460 24750 lineto +66410 24700 lineto +66370 24670 lineto +stroke +newpath +66960 24820 moveto +67010 24820 lineto +67060 24790 lineto +67080 24770 lineto +67110 24720 lineto +67130 24630 lineto +67130 24510 lineto +67110 24410 lineto +67080 24370 lineto +67060 24340 lineto +67010 24320 lineto +66960 24320 lineto +66920 24340 lineto +66890 24370 lineto +66870 24410 lineto +66850 24510 lineto +66850 24630 lineto +66870 24720 lineto +66890 24770 lineto +66920 24790 lineto +66960 24820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 25170 350 cir0 +newpath +66200 25170 moveto +68000 25170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66650 25320 moveto +66370 25320 lineto +stroke +newpath +66510 25320 moveto +66510 25820 lineto +66460 25750 lineto +66410 25700 lineto +66370 25670 lineto +stroke +newpath +67130 25320 moveto +66850 25320 lineto +stroke +newpath +66990 25320 moveto +66990 25820 lineto +66940 25750 lineto +66890 25700 lineto +66850 25670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +65850 26170 350 cir0 +newpath +66200 26170 moveto +68000 26170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +66650 26320 moveto +66370 26320 lineto +stroke +newpath +66510 26320 moveto +66510 26820 lineto +66460 26750 lineto +66410 26700 lineto +66370 26670 lineto +stroke +newpath +66850 26770 moveto +66870 26790 lineto +66920 26820 lineto +67040 26820 lineto +67080 26790 lineto +67110 26770 lineto +67130 26720 lineto +67130 26670 lineto +67110 26600 lineto +66820 26320 lineto +67130 26320 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +65240 19660 moveto +64640 19660 lineto +64640 19890 lineto +64670 19950 lineto +64700 19980 lineto +64760 20010 lineto +64840 20010 lineto +64900 19980 lineto +64930 19950 lineto +64960 19890 lineto +64960 19660 lineto +stroke +newpath +65240 20580 moveto +65240 20230 lineto +stroke +newpath +65240 20410 moveto +64640 20410 lineto +64730 20350 lineto +64790 20290 lineto +64810 20230 lineto +stroke +newpath +64640 20950 moveto +64640 21000 lineto +64670 21060 lineto +64700 21090 lineto +64760 21120 lineto +64870 21150 lineto +65010 21150 lineto +65130 21120 lineto +65190 21090 lineto +65210 21060 lineto +65240 21000 lineto +65240 20950 lineto +65210 20890 lineto +65190 20860 lineto +65130 20830 lineto +65010 20800 lineto +64870 20800 lineto +64760 20830 lineto +64700 20860 lineto +64670 20890 lineto +64640 20950 lineto +stroke +newpath +65240 21720 moveto +65240 21370 lineto +stroke +newpath +65240 21550 moveto +64640 21550 lineto +64730 21490 lineto +64790 21430 lineto +64810 21370 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +64190 19120 moveto +64210 19090 lineto +64240 19000 lineto +64240 18940 lineto +64210 18860 lineto +64160 18800 lineto +64100 18770 lineto +63990 18740 lineto +63900 18740 lineto +63790 18770 lineto +63730 18800 lineto +63670 18860 lineto +63640 18940 lineto +63640 19000 lineto +63670 19090 lineto +63700 19120 lineto +stroke +newpath +63640 19490 moveto +63640 19600 lineto +63670 19660 lineto +63730 19720 lineto +63840 19740 lineto +64040 19740 lineto +64160 19720 lineto +64210 19660 lineto +64240 19600 lineto +64240 19490 lineto +64210 19430 lineto +64160 19370 lineto +64040 19340 lineto +63840 19340 lineto +63730 19370 lineto +63670 19430 lineto +63640 19490 lineto +stroke +newpath +64240 20000 moveto +63640 20000 lineto +64240 20350 lineto +63640 20350 lineto +stroke +newpath +64240 20630 moveto +63640 20630 lineto +64240 20980 lineto +63640 20980 lineto +stroke +newpath +64300 21120 moveto +64300 21580 lineto +stroke +newpath +64240 22040 moveto +64240 21690 lineto +stroke +newpath +64240 21870 moveto +63640 21870 lineto +63730 21810 lineto +63790 21750 lineto +63810 21690 lineto +stroke +newpath +63700 22260 moveto +63670 22290 lineto +63640 22350 lineto +63640 22490 lineto +63670 22550 lineto +63700 22580 lineto +63760 22610 lineto +63810 22610 lineto +63900 22580 lineto +64240 22240 lineto +64240 22610 lineto +stroke +0 0 0 setrgbcolor +newpath +68400 15730 moveto +68400 15240 lineto +68370 15180 lineto +68340 15160 lineto +68290 15130 lineto +68200 15130 lineto +68140 15160 lineto +stroke +newpath +68400 15360 moveto +68340 15330 lineto +68230 15330 lineto +68170 15360 lineto +68140 15380 lineto +68110 15440 lineto +68110 15610 lineto +68140 15670 lineto +68170 15700 lineto +68230 15730 lineto +68340 15730 lineto +68400 15700 lineto +stroke +newpath +68680 15730 moveto +68680 15330 lineto +stroke +newpath +68680 15670 moveto +68710 15700 lineto +68770 15730 lineto +68850 15730 lineto +68910 15700 lineto +68940 15640 lineto +68940 15330 lineto +stroke +newpath +69480 15330 moveto +69480 15930 lineto +stroke +newpath +69480 15360 moveto +69420 15330 lineto +69310 15330 lineto +69250 15360 lineto +69220 15380 lineto +69190 15440 lineto +69190 15610 lineto +69220 15670 lineto +69250 15700 lineto +69310 15730 lineto +69420 15730 lineto +69480 15700 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 17730 moveto +68140 17130 lineto +stroke +newpath +68140 17700 moveto +68200 17730 lineto +68310 17730 lineto +68370 17700 lineto +68400 17670 lineto +68430 17610 lineto +68430 17440 lineto +68400 17380 lineto +68370 17360 lineto +68310 17330 lineto +68200 17330 lineto +68140 17360 lineto +stroke +newpath +68940 17360 moveto +68880 17330 lineto +68770 17330 lineto +68710 17360 lineto +68680 17380 lineto +68650 17440 lineto +68650 17610 lineto +68680 17670 lineto +68710 17700 lineto +68770 17730 lineto +68880 17730 lineto +68940 17700 lineto +stroke +newpath +69160 17870 moveto +69190 17900 lineto +69250 17930 lineto +69390 17930 lineto +69450 17900 lineto +69480 17870 lineto +69510 17810 lineto +69510 17760 lineto +69480 17670 lineto +69140 17330 lineto +69510 17330 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 19730 moveto +68140 19130 lineto +stroke +newpath +68140 19700 moveto +68200 19730 lineto +68310 19730 lineto +68370 19700 lineto +68400 19670 lineto +68430 19610 lineto +68430 19440 lineto +68400 19380 lineto +68370 19360 lineto +68310 19330 lineto +68200 19330 lineto +68140 19360 lineto +stroke +newpath +68940 19330 moveto +68940 19930 lineto +stroke +newpath +68940 19360 moveto +68880 19330 lineto +68770 19330 lineto +68710 19360 lineto +68680 19380 lineto +68650 19440 lineto +68650 19610 lineto +68680 19670 lineto +68710 19700 lineto +68770 19730 lineto +68880 19730 lineto +68940 19700 lineto +stroke +newpath +69340 19930 moveto +69390 19930 lineto +69450 19900 lineto +69480 19870 lineto +69510 19810 lineto +69540 19700 lineto +69540 19560 lineto +69510 19440 lineto +69480 19380 lineto +69450 19360 lineto +69390 19330 lineto +69340 19330 lineto +69280 19360 lineto +69250 19380 lineto +69220 19440 lineto +69190 19560 lineto +69190 19700 lineto +69220 19810 lineto +69250 19870 lineto +69280 19900 lineto +69340 19930 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 18730 moveto +68140 18130 lineto +stroke +newpath +68140 18700 moveto +68200 18730 lineto +68310 18730 lineto +68370 18700 lineto +68400 18670 lineto +68430 18610 lineto +68430 18440 lineto +68400 18380 lineto +68370 18360 lineto +68310 18330 lineto +68200 18330 lineto +68140 18360 lineto +stroke +newpath +68940 18330 moveto +68940 18930 lineto +stroke +newpath +68940 18360 moveto +68880 18330 lineto +68770 18330 lineto +68710 18360 lineto +68680 18380 lineto +68650 18440 lineto +68650 18610 lineto +68680 18670 lineto +68710 18700 lineto +68770 18730 lineto +68880 18730 lineto +68940 18700 lineto +stroke +newpath +69540 18330 moveto +69190 18330 lineto +stroke +newpath +69370 18330 moveto +69370 18930 lineto +69310 18840 lineto +69250 18780 lineto +69190 18760 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 20730 moveto +68140 20130 lineto +stroke +newpath +68140 20700 moveto +68200 20730 lineto +68310 20730 lineto +68370 20700 lineto +68400 20670 lineto +68430 20610 lineto +68430 20440 lineto +68400 20380 lineto +68370 20360 lineto +68310 20330 lineto +68200 20330 lineto +68140 20360 lineto +stroke +newpath +68940 20330 moveto +68940 20930 lineto +stroke +newpath +68940 20360 moveto +68880 20330 lineto +68770 20330 lineto +68710 20360 lineto +68680 20380 lineto +68650 20440 lineto +68650 20610 lineto +68680 20670 lineto +68710 20700 lineto +68770 20730 lineto +68880 20730 lineto +68940 20700 lineto +stroke +newpath +69190 20870 moveto +69220 20900 lineto +69280 20930 lineto +69420 20930 lineto +69480 20900 lineto +69510 20870 lineto +69540 20810 lineto +69540 20760 lineto +69510 20670 lineto +69170 20330 lineto +69540 20330 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 21730 moveto +68140 21130 lineto +stroke +newpath +68140 21700 moveto +68200 21730 lineto +68310 21730 lineto +68370 21700 lineto +68400 21670 lineto +68430 21610 lineto +68430 21440 lineto +68400 21380 lineto +68370 21360 lineto +68310 21330 lineto +68200 21330 lineto +68140 21360 lineto +stroke +newpath +68940 21330 moveto +68940 21930 lineto +stroke +newpath +68940 21360 moveto +68880 21330 lineto +68770 21330 lineto +68710 21360 lineto +68680 21380 lineto +68650 21440 lineto +68650 21610 lineto +68680 21670 lineto +68710 21700 lineto +68770 21730 lineto +68880 21730 lineto +68940 21700 lineto +stroke +newpath +69170 21930 moveto +69540 21930 lineto +69340 21700 lineto +69420 21700 lineto +69480 21670 lineto +69510 21640 lineto +69540 21580 lineto +69540 21440 lineto +69510 21380 lineto +69480 21360 lineto +69420 21330 lineto +69250 21330 lineto +69190 21360 lineto +69170 21380 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 18730 moveto +55490 18130 lineto +stroke +newpath +55490 18700 moveto +55550 18730 lineto +55660 18730 lineto +55720 18700 lineto +55750 18670 lineto +55780 18610 lineto +55780 18440 lineto +55750 18380 lineto +55720 18360 lineto +55660 18330 lineto +55550 18330 lineto +55490 18360 lineto +stroke +newpath +56290 18330 moveto +56290 18930 lineto +stroke +newpath +56290 18360 moveto +56230 18330 lineto +56120 18330 lineto +56060 18360 lineto +56030 18380 lineto +56000 18440 lineto +56000 18610 lineto +56030 18670 lineto +56060 18700 lineto +56120 18730 lineto +56230 18730 lineto +56290 18700 lineto +stroke +newpath +56830 18730 moveto +56830 18330 lineto +stroke +newpath +56690 18960 moveto +56540 18530 lineto +56920 18530 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 22730 moveto +68140 22130 lineto +stroke +newpath +68140 22700 moveto +68200 22730 lineto +68310 22730 lineto +68370 22700 lineto +68400 22670 lineto +68430 22610 lineto +68430 22440 lineto +68400 22380 lineto +68370 22360 lineto +68310 22330 lineto +68200 22330 lineto +68140 22360 lineto +stroke +newpath +68940 22330 moveto +68940 22930 lineto +stroke +newpath +68940 22360 moveto +68880 22330 lineto +68770 22330 lineto +68710 22360 lineto +68680 22380 lineto +68650 22440 lineto +68650 22610 lineto +68680 22670 lineto +68710 22700 lineto +68770 22730 lineto +68880 22730 lineto +68940 22700 lineto +stroke +newpath +69510 22930 moveto +69220 22930 lineto +69190 22640 lineto +69220 22670 lineto +69280 22700 lineto +69420 22700 lineto +69480 22670 lineto +69510 22640 lineto +69540 22580 lineto +69540 22440 lineto +69510 22380 lineto +69480 22360 lineto +69420 22330 lineto +69280 22330 lineto +69220 22360 lineto +69190 22380 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 23730 moveto +68140 23130 lineto +stroke +newpath +68140 23700 moveto +68200 23730 lineto +68310 23730 lineto +68370 23700 lineto +68400 23670 lineto +68430 23610 lineto +68430 23440 lineto +68400 23380 lineto +68370 23360 lineto +68310 23330 lineto +68200 23330 lineto +68140 23360 lineto +stroke +newpath +68940 23330 moveto +68940 23930 lineto +stroke +newpath +68940 23360 moveto +68880 23330 lineto +68770 23330 lineto +68710 23360 lineto +68680 23380 lineto +68650 23440 lineto +68650 23610 lineto +68680 23670 lineto +68710 23700 lineto +68770 23730 lineto +68880 23730 lineto +68940 23700 lineto +stroke +newpath +69480 23930 moveto +69370 23930 lineto +69310 23900 lineto +69280 23870 lineto +69220 23780 lineto +69190 23670 lineto +69190 23440 lineto +69220 23380 lineto +69250 23360 lineto +69310 23330 lineto +69420 23330 lineto +69480 23360 lineto +69510 23380 lineto +69540 23440 lineto +69540 23580 lineto +69510 23640 lineto +69480 23670 lineto +69420 23700 lineto +69310 23700 lineto +69250 23670 lineto +69220 23640 lineto +69190 23580 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 25730 moveto +68140 25130 lineto +stroke +newpath +68140 25700 moveto +68200 25730 lineto +68310 25730 lineto +68370 25700 lineto +68400 25670 lineto +68430 25610 lineto +68430 25440 lineto +68400 25380 lineto +68370 25360 lineto +68310 25330 lineto +68200 25330 lineto +68140 25360 lineto +stroke +newpath +68680 25330 moveto +68680 25930 lineto +stroke +newpath +68680 25700 moveto +68740 25730 lineto +68850 25730 lineto +68910 25700 lineto +68940 25670 lineto +68970 25610 lineto +68970 25440 lineto +68940 25380 lineto +68910 25360 lineto +68850 25330 lineto +68740 25330 lineto +68680 25360 lineto +stroke +newpath +69340 25930 moveto +69390 25930 lineto +69450 25900 lineto +69480 25870 lineto +69510 25810 lineto +69540 25700 lineto +69540 25560 lineto +69510 25440 lineto +69480 25380 lineto +69450 25360 lineto +69390 25330 lineto +69340 25330 lineto +69280 25360 lineto +69250 25380 lineto +69220 25440 lineto +69190 25560 lineto +69190 25700 lineto +69220 25810 lineto +69250 25870 lineto +69280 25900 lineto +69340 25930 lineto +stroke +0 0 0 setrgbcolor +newpath +68140 26730 moveto +68140 26130 lineto +stroke +newpath +68140 26700 moveto +68200 26730 lineto +68310 26730 lineto +68370 26700 lineto +68400 26670 lineto +68430 26610 lineto +68430 26440 lineto +68400 26380 lineto +68370 26360 lineto +68310 26330 lineto +68200 26330 lineto +68140 26360 lineto +stroke +newpath +68680 26330 moveto +68680 26930 lineto +stroke +newpath +68680 26700 moveto +68740 26730 lineto +68850 26730 lineto +68910 26700 lineto +68940 26670 lineto +68970 26610 lineto +68970 26440 lineto +68940 26380 lineto +68910 26360 lineto +68850 26330 lineto +68740 26330 lineto +68680 26360 lineto +stroke +newpath +69540 26330 moveto +69190 26330 lineto +stroke +newpath +69370 26330 moveto +69370 26930 lineto +69310 26840 lineto +69250 26780 lineto +69190 26760 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 26730 moveto +55490 26130 lineto +stroke +newpath +55490 26700 moveto +55550 26730 lineto +55660 26730 lineto +55720 26700 lineto +55750 26670 lineto +55780 26610 lineto +55780 26440 lineto +55750 26380 lineto +55720 26360 lineto +55660 26330 lineto +55550 26330 lineto +55490 26360 lineto +stroke +newpath +56030 26330 moveto +56030 26930 lineto +stroke +newpath +56030 26700 moveto +56090 26730 lineto +56200 26730 lineto +56260 26700 lineto +56290 26670 lineto +56320 26610 lineto +56320 26440 lineto +56290 26380 lineto +56260 26360 lineto +56200 26330 lineto +56090 26330 lineto +56030 26360 lineto +stroke +newpath +56540 26870 moveto +56570 26900 lineto +56630 26930 lineto +56770 26930 lineto +56830 26900 lineto +56860 26870 lineto +56890 26810 lineto +56890 26760 lineto +56860 26670 lineto +56520 26330 lineto +56890 26330 lineto +stroke +0 0 0 setrgbcolor +newpath +55520 20730 moveto +55520 20130 lineto +stroke +newpath +55520 20700 moveto +55580 20730 lineto +55690 20730 lineto +55750 20700 lineto +55780 20670 lineto +55810 20610 lineto +55810 20440 lineto +55780 20380 lineto +55750 20360 lineto +55690 20330 lineto +55580 20330 lineto +55520 20360 lineto +stroke +newpath +56320 20360 moveto +56260 20330 lineto +56150 20330 lineto +56090 20360 lineto +56060 20380 lineto +56030 20440 lineto +56030 20610 lineto +56060 20670 lineto +56090 20700 lineto +56150 20730 lineto +56260 20730 lineto +56320 20700 lineto +stroke +newpath +56520 20930 moveto +56920 20930 lineto +56660 20330 lineto +stroke +0 0 0 setrgbcolor +newpath +55520 19730 moveto +55520 19130 lineto +stroke +newpath +55520 19700 moveto +55580 19730 lineto +55690 19730 lineto +55750 19700 lineto +55780 19670 lineto +55810 19610 lineto +55810 19440 lineto +55780 19380 lineto +55750 19360 lineto +55690 19330 lineto +55580 19330 lineto +55520 19360 lineto +stroke +newpath +56320 19360 moveto +56260 19330 lineto +56150 19330 lineto +56090 19360 lineto +56060 19380 lineto +56030 19440 lineto +56030 19610 lineto +56060 19670 lineto +56090 19700 lineto +56150 19730 lineto +56260 19730 lineto +56320 19700 lineto +stroke +newpath +56830 19930 moveto +56720 19930 lineto +56660 19900 lineto +56630 19870 lineto +56570 19780 lineto +56540 19670 lineto +56540 19440 lineto +56570 19380 lineto +56600 19360 lineto +56660 19330 lineto +56770 19330 lineto +56830 19360 lineto +56860 19380 lineto +56890 19440 lineto +56890 19580 lineto +56860 19640 lineto +56830 19670 lineto +56770 19700 lineto +56660 19700 lineto +56600 19670 lineto +56570 19640 lineto +56540 19580 lineto +stroke +0 0 0 setrgbcolor +newpath +55520 17730 moveto +55520 17130 lineto +stroke +newpath +55520 17700 moveto +55580 17730 lineto +55690 17730 lineto +55750 17700 lineto +55780 17670 lineto +55810 17610 lineto +55810 17440 lineto +55780 17380 lineto +55750 17360 lineto +55690 17330 lineto +55580 17330 lineto +55520 17360 lineto +stroke +newpath +56320 17360 moveto +56260 17330 lineto +56150 17330 lineto +56090 17360 lineto +56060 17380 lineto +56030 17440 lineto +56030 17610 lineto +56060 17670 lineto +56090 17700 lineto +56150 17730 lineto +56260 17730 lineto +56320 17700 lineto +stroke +newpath +56860 17930 moveto +56570 17930 lineto +56540 17640 lineto +56570 17670 lineto +56630 17700 lineto +56770 17700 lineto +56830 17670 lineto +56860 17640 lineto +56890 17580 lineto +56890 17440 lineto +56860 17380 lineto +56830 17360 lineto +56770 17330 lineto +56630 17330 lineto +56570 17360 lineto +56540 17380 lineto +stroke +0 0 0 setrgbcolor +newpath +55520 16730 moveto +55520 16130 lineto +stroke +newpath +55520 16700 moveto +55580 16730 lineto +55690 16730 lineto +55750 16700 lineto +55780 16670 lineto +55810 16610 lineto +55810 16440 lineto +55780 16380 lineto +55750 16360 lineto +55690 16330 lineto +55580 16330 lineto +55520 16360 lineto +stroke +newpath +56320 16360 moveto +56260 16330 lineto +56150 16330 lineto +56090 16360 lineto +56060 16380 lineto +56030 16440 lineto +56030 16610 lineto +56060 16670 lineto +56090 16700 lineto +56150 16730 lineto +56260 16730 lineto +56320 16700 lineto +stroke +newpath +56830 16730 moveto +56830 16330 lineto +stroke +newpath +56690 16960 moveto +56540 16530 lineto +56920 16530 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 22730 moveto +55490 22130 lineto +stroke +newpath +55490 22700 moveto +55550 22730 lineto +55660 22730 lineto +55720 22700 lineto +55750 22670 lineto +55780 22610 lineto +55780 22440 lineto +55750 22380 lineto +55720 22360 lineto +55660 22330 lineto +55550 22330 lineto +55490 22360 lineto +stroke +newpath +56030 22330 moveto +56030 22930 lineto +stroke +newpath +56030 22700 moveto +56090 22730 lineto +56200 22730 lineto +56260 22700 lineto +56290 22670 lineto +56320 22610 lineto +56320 22440 lineto +56290 22380 lineto +56260 22360 lineto +56200 22330 lineto +56090 22330 lineto +56030 22360 lineto +stroke +newpath +56520 22930 moveto +56920 22930 lineto +56660 22330 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 21730 moveto +55490 21130 lineto +stroke +newpath +55490 21700 moveto +55550 21730 lineto +55660 21730 lineto +55720 21700 lineto +55750 21670 lineto +55780 21610 lineto +55780 21440 lineto +55750 21380 lineto +55720 21360 lineto +55660 21330 lineto +55550 21330 lineto +55490 21360 lineto +stroke +newpath +56030 21330 moveto +56030 21930 lineto +stroke +newpath +56030 21700 moveto +56090 21730 lineto +56200 21730 lineto +56260 21700 lineto +56290 21670 lineto +56320 21610 lineto +56320 21440 lineto +56290 21380 lineto +56260 21360 lineto +56200 21330 lineto +56090 21330 lineto +56030 21360 lineto +stroke +newpath +56830 21930 moveto +56720 21930 lineto +56660 21900 lineto +56630 21870 lineto +56570 21780 lineto +56540 21670 lineto +56540 21440 lineto +56570 21380 lineto +56600 21360 lineto +56660 21330 lineto +56770 21330 lineto +56830 21360 lineto +56860 21380 lineto +56890 21440 lineto +56890 21580 lineto +56860 21640 lineto +56830 21670 lineto +56770 21700 lineto +56660 21700 lineto +56600 21670 lineto +56570 21640 lineto +56540 21580 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 23730 moveto +55490 23130 lineto +stroke +newpath +55490 23700 moveto +55550 23730 lineto +55660 23730 lineto +55720 23700 lineto +55750 23670 lineto +55780 23610 lineto +55780 23440 lineto +55750 23380 lineto +55720 23360 lineto +55660 23330 lineto +55550 23330 lineto +55490 23360 lineto +stroke +newpath +56030 23330 moveto +56030 23930 lineto +stroke +newpath +56030 23700 moveto +56090 23730 lineto +56200 23730 lineto +56260 23700 lineto +56290 23670 lineto +56320 23610 lineto +56320 23440 lineto +56290 23380 lineto +56260 23360 lineto +56200 23330 lineto +56090 23330 lineto +56030 23360 lineto +stroke +newpath +56860 23930 moveto +56570 23930 lineto +56540 23640 lineto +56570 23670 lineto +56630 23700 lineto +56770 23700 lineto +56830 23670 lineto +56860 23640 lineto +56890 23580 lineto +56890 23440 lineto +56860 23380 lineto +56830 23360 lineto +56770 23330 lineto +56630 23330 lineto +56570 23360 lineto +56540 23380 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 24730 moveto +55490 24130 lineto +stroke +newpath +55490 24700 moveto +55550 24730 lineto +55660 24730 lineto +55720 24700 lineto +55750 24670 lineto +55780 24610 lineto +55780 24440 lineto +55750 24380 lineto +55720 24360 lineto +55660 24330 lineto +55550 24330 lineto +55490 24360 lineto +stroke +newpath +56030 24330 moveto +56030 24930 lineto +stroke +newpath +56030 24700 moveto +56090 24730 lineto +56200 24730 lineto +56260 24700 lineto +56290 24670 lineto +56320 24610 lineto +56320 24440 lineto +56290 24380 lineto +56260 24360 lineto +56200 24330 lineto +56090 24330 lineto +56030 24360 lineto +stroke +newpath +56830 24730 moveto +56830 24330 lineto +stroke +newpath +56690 24960 moveto +56540 24530 lineto +56920 24530 lineto +stroke +0 0 0 setrgbcolor +newpath +55490 25730 moveto +55490 25130 lineto +stroke +newpath +55490 25700 moveto +55550 25730 lineto +55660 25730 lineto +55720 25700 lineto +55750 25670 lineto +55780 25610 lineto +55780 25440 lineto +55750 25380 lineto +55720 25360 lineto +55660 25330 lineto +55550 25330 lineto +55490 25360 lineto +stroke +newpath +56030 25330 moveto +56030 25930 lineto +stroke +newpath +56030 25700 moveto +56090 25730 lineto +56200 25730 lineto +56260 25700 lineto +56290 25670 lineto +56320 25610 lineto +56320 25440 lineto +56290 25380 lineto +56260 25360 lineto +56200 25330 lineto +56090 25330 lineto +56030 25360 lineto +stroke +newpath +56520 25930 moveto +56890 25930 lineto +56690 25700 lineto +56770 25700 lineto +56830 25670 lineto +56860 25640 lineto +56890 25580 lineto +56890 25440 lineto +56860 25380 lineto +56830 25360 lineto +56770 25330 lineto +56600 25330 lineto +56540 25360 lineto +56520 25380 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +88200 37670 -3400 100 rect0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +86900 37770 moveto +86800 38070 lineto +86200 38070 lineto +86100 37770 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +87850 37170 350 cir0 +newpath +88200 37170 moveto +89500 37170 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +85150 37170 350 cir0 +newpath +84800 37170 moveto +83500 37170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +83860 38090 moveto +83930 38070 lineto +84050 38070 lineto +84090 38090 lineto +84120 38120 lineto +84140 38160 lineto +84140 38210 lineto +84120 38260 lineto +84090 38280 lineto +84050 38310 lineto +83950 38330 lineto +83900 38350 lineto +83880 38380 lineto +83860 38420 lineto +83860 38470 lineto +83880 38520 lineto +83900 38540 lineto +83950 38570 lineto +84070 38570 lineto +84140 38540 lineto +stroke +newpath +84310 38570 moveto +84430 38070 lineto +84530 38420 lineto +84620 38070 lineto +84740 38570 lineto +stroke +newpath +85190 38070 moveto +84910 38070 lineto +stroke +newpath +85050 38070 moveto +85050 38570 lineto +85000 38500 lineto +84950 38450 lineto +84910 38420 lineto +stroke +newpath +85500 38570 moveto +85550 38570 lineto +85600 38540 lineto +85620 38520 lineto +85650 38470 lineto +85670 38380 lineto +85670 38260 lineto +85650 38160 lineto +85620 38120 lineto +85600 38090 lineto +85550 38070 lineto +85500 38070 lineto +85460 38090 lineto +85430 38120 lineto +85410 38160 lineto +85390 38260 lineto +85390 38380 lineto +85410 38470 lineto +85430 38520 lineto +85460 38540 lineto +85500 38570 lineto +stroke +newpath +86150 38070 moveto +85870 38070 lineto +stroke +newpath +86010 38070 moveto +86010 38570 lineto +85960 38500 lineto +85910 38450 lineto +85870 38420 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +84880 36190 moveto +84950 36170 lineto +85070 36170 lineto +85110 36190 lineto +85140 36220 lineto +85160 36260 lineto +85160 36310 lineto +85140 36360 lineto +85110 36380 lineto +85070 36410 lineto +84970 36430 lineto +84920 36450 lineto +84900 36480 lineto +84880 36520 lineto +84880 36570 lineto +84900 36620 lineto +84920 36640 lineto +84970 36670 lineto +85090 36670 lineto +85160 36640 lineto +stroke +newpath +85330 36670 moveto +85450 36170 lineto +85550 36520 lineto +85640 36170 lineto +85760 36670 lineto +stroke +newpath +85830 36120 moveto +86210 36120 lineto +stroke +newpath +86330 36170 moveto +86330 36670 lineto +86520 36670 lineto +86570 36640 lineto +86590 36620 lineto +86610 36570 lineto +86610 36500 lineto +86590 36450 lineto +86570 36430 lineto +86520 36410 lineto +86330 36410 lineto +stroke +newpath +86830 36670 moveto +86830 36260 lineto +86850 36220 lineto +86880 36190 lineto +86920 36170 lineto +87020 36170 lineto +87070 36190 lineto +87090 36220 lineto +87110 36260 lineto +87110 36670 lineto +stroke +newpath +87330 36190 moveto +87400 36170 lineto +87520 36170 lineto +87560 36190 lineto +87590 36220 lineto +87610 36260 lineto +87610 36310 lineto +87590 36360 lineto +87560 36380 lineto +87520 36410 lineto +87420 36430 lineto +87370 36450 lineto +87350 36480 lineto +87330 36520 lineto +87330 36570 lineto +87350 36620 lineto +87370 36640 lineto +87420 36670 lineto +87540 36670 lineto +87610 36640 lineto +stroke +newpath +87830 36170 moveto +87830 36670 lineto +stroke +newpath +87830 36430 moveto +88110 36430 lineto +stroke +newpath +88110 36170 moveto +88110 36670 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 33730 moveto +74640 33130 lineto +stroke +newpath +74640 33700 moveto +74700 33730 lineto +74810 33730 lineto +74870 33700 lineto +74900 33670 lineto +74930 33610 lineto +74930 33440 lineto +74900 33380 lineto +74870 33360 lineto +74810 33330 lineto +74700 33330 lineto +74640 33360 lineto +stroke +newpath +75180 33330 moveto +75180 33930 lineto +stroke +newpath +75180 33700 moveto +75240 33730 lineto +75350 33730 lineto +75410 33700 lineto +75440 33670 lineto +75470 33610 lineto +75470 33440 lineto +75440 33380 lineto +75410 33360 lineto +75350 33330 lineto +75240 33330 lineto +75180 33360 lineto +stroke +newpath +75670 33930 moveto +76040 33930 lineto +75840 33700 lineto +75920 33700 lineto +75980 33670 lineto +76010 33640 lineto +76040 33580 lineto +76040 33440 lineto +76010 33380 lineto +75980 33360 lineto +75920 33330 lineto +75750 33330 lineto +75690 33360 lineto +75670 33380 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 34730 moveto +74640 34130 lineto +stroke +newpath +74640 34700 moveto +74700 34730 lineto +74810 34730 lineto +74870 34700 lineto +74900 34670 lineto +74930 34610 lineto +74930 34440 lineto +74900 34380 lineto +74870 34360 lineto +74810 34330 lineto +74700 34330 lineto +74640 34360 lineto +stroke +newpath +75180 34330 moveto +75180 34930 lineto +stroke +newpath +75180 34700 moveto +75240 34730 lineto +75350 34730 lineto +75410 34700 lineto +75440 34670 lineto +75470 34610 lineto +75470 34440 lineto +75440 34380 lineto +75410 34360 lineto +75350 34330 lineto +75240 34330 lineto +75180 34360 lineto +stroke +newpath +75980 34730 moveto +75980 34330 lineto +stroke +newpath +75840 34960 moveto +75690 34530 lineto +76070 34530 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 35730 moveto +74640 35130 lineto +stroke +newpath +74640 35700 moveto +74700 35730 lineto +74810 35730 lineto +74870 35700 lineto +74900 35670 lineto +74930 35610 lineto +74930 35440 lineto +74900 35380 lineto +74870 35360 lineto +74810 35330 lineto +74700 35330 lineto +74640 35360 lineto +stroke +newpath +75180 35330 moveto +75180 35930 lineto +stroke +newpath +75180 35700 moveto +75240 35730 lineto +75350 35730 lineto +75410 35700 lineto +75440 35670 lineto +75470 35610 lineto +75470 35440 lineto +75440 35380 lineto +75410 35360 lineto +75350 35330 lineto +75240 35330 lineto +75180 35360 lineto +stroke +newpath +76010 35930 moveto +75720 35930 lineto +75690 35640 lineto +75720 35670 lineto +75780 35700 lineto +75920 35700 lineto +75980 35670 lineto +76010 35640 lineto +76040 35580 lineto +76040 35440 lineto +76010 35380 lineto +75980 35360 lineto +75920 35330 lineto +75780 35330 lineto +75720 35360 lineto +75690 35380 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 36730 moveto +74640 36130 lineto +stroke +newpath +74640 36700 moveto +74700 36730 lineto +74810 36730 lineto +74870 36700 lineto +74900 36670 lineto +74930 36610 lineto +74930 36440 lineto +74900 36380 lineto +74870 36360 lineto +74810 36330 lineto +74700 36330 lineto +74640 36360 lineto +stroke +newpath +75180 36330 moveto +75180 36930 lineto +stroke +newpath +75180 36700 moveto +75240 36730 lineto +75350 36730 lineto +75410 36700 lineto +75440 36670 lineto +75470 36610 lineto +75470 36440 lineto +75440 36380 lineto +75410 36360 lineto +75350 36330 lineto +75240 36330 lineto +75180 36360 lineto +stroke +newpath +75980 36930 moveto +75870 36930 lineto +75810 36900 lineto +75780 36870 lineto +75720 36780 lineto +75690 36670 lineto +75690 36440 lineto +75720 36380 lineto +75750 36360 lineto +75810 36330 lineto +75920 36330 lineto +75980 36360 lineto +76010 36380 lineto +76040 36440 lineto +76040 36580 lineto +76010 36640 lineto +75980 36670 lineto +75920 36700 lineto +75810 36700 lineto +75750 36670 lineto +75720 36640 lineto +75690 36580 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 37730 moveto +74640 37130 lineto +stroke +newpath +74640 37700 moveto +74700 37730 lineto +74810 37730 lineto +74870 37700 lineto +74900 37670 lineto +74930 37610 lineto +74930 37440 lineto +74900 37380 lineto +74870 37360 lineto +74810 37330 lineto +74700 37330 lineto +74640 37360 lineto +stroke +newpath +75180 37330 moveto +75180 37930 lineto +stroke +newpath +75180 37700 moveto +75240 37730 lineto +75350 37730 lineto +75410 37700 lineto +75440 37670 lineto +75470 37610 lineto +75470 37440 lineto +75440 37380 lineto +75410 37360 lineto +75350 37330 lineto +75240 37330 lineto +75180 37360 lineto +stroke +newpath +75670 37930 moveto +76070 37930 lineto +75810 37330 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 33730 moveto +43990 33130 lineto +stroke +newpath +43990 33700 moveto +44050 33730 lineto +44160 33730 lineto +44220 33700 lineto +44250 33670 lineto +44280 33610 lineto +44280 33440 lineto +44250 33380 lineto +44220 33360 lineto +44160 33330 lineto +44050 33330 lineto +43990 33360 lineto +stroke +newpath +44530 33330 moveto +44530 33930 lineto +stroke +newpath +44530 33700 moveto +44590 33730 lineto +44700 33730 lineto +44760 33700 lineto +44790 33670 lineto +44820 33610 lineto +44820 33440 lineto +44790 33380 lineto +44760 33360 lineto +44700 33330 lineto +44590 33330 lineto +44530 33360 lineto +stroke +newpath +45040 33870 moveto +45070 33900 lineto +45130 33930 lineto +45270 33930 lineto +45330 33900 lineto +45360 33870 lineto +45390 33810 lineto +45390 33760 lineto +45360 33670 lineto +45020 33330 lineto +45390 33330 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 34730 moveto +43990 34130 lineto +stroke +newpath +43990 34700 moveto +44050 34730 lineto +44160 34730 lineto +44220 34700 lineto +44250 34670 lineto +44280 34610 lineto +44280 34440 lineto +44250 34380 lineto +44220 34360 lineto +44160 34330 lineto +44050 34330 lineto +43990 34360 lineto +stroke +newpath +44530 34330 moveto +44530 34930 lineto +stroke +newpath +44530 34700 moveto +44590 34730 lineto +44700 34730 lineto +44760 34700 lineto +44790 34670 lineto +44820 34610 lineto +44820 34440 lineto +44790 34380 lineto +44760 34360 lineto +44700 34330 lineto +44590 34330 lineto +44530 34360 lineto +stroke +newpath +45390 34330 moveto +45040 34330 lineto +stroke +newpath +45220 34330 moveto +45220 34930 lineto +45160 34840 lineto +45100 34780 lineto +45040 34760 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 35730 moveto +43990 35130 lineto +stroke +newpath +43990 35700 moveto +44050 35730 lineto +44160 35730 lineto +44220 35700 lineto +44250 35670 lineto +44280 35610 lineto +44280 35440 lineto +44250 35380 lineto +44220 35360 lineto +44160 35330 lineto +44050 35330 lineto +43990 35360 lineto +stroke +newpath +44530 35330 moveto +44530 35930 lineto +stroke +newpath +44530 35700 moveto +44590 35730 lineto +44700 35730 lineto +44760 35700 lineto +44790 35670 lineto +44820 35610 lineto +44820 35440 lineto +44790 35380 lineto +44760 35360 lineto +44700 35330 lineto +44590 35330 lineto +44530 35360 lineto +stroke +newpath +45190 35930 moveto +45240 35930 lineto +45300 35900 lineto +45330 35870 lineto +45360 35810 lineto +45390 35700 lineto +45390 35560 lineto +45360 35440 lineto +45330 35380 lineto +45300 35360 lineto +45240 35330 lineto +45190 35330 lineto +45130 35360 lineto +45100 35380 lineto +45070 35440 lineto +45040 35560 lineto +45040 35700 lineto +45070 35810 lineto +45100 35870 lineto +45130 35900 lineto +45190 35930 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 36730 moveto +43990 36130 lineto +stroke +newpath +43990 36700 moveto +44050 36730 lineto +44160 36730 lineto +44220 36700 lineto +44250 36670 lineto +44280 36610 lineto +44280 36440 lineto +44250 36380 lineto +44220 36360 lineto +44160 36330 lineto +44050 36330 lineto +43990 36360 lineto +stroke +newpath +44790 36330 moveto +44790 36930 lineto +stroke +newpath +44790 36360 moveto +44730 36330 lineto +44620 36330 lineto +44560 36360 lineto +44530 36380 lineto +44500 36440 lineto +44500 36610 lineto +44530 36670 lineto +44560 36700 lineto +44620 36730 lineto +44730 36730 lineto +44790 36700 lineto +stroke +newpath +45020 36930 moveto +45420 36930 lineto +45160 36330 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 37730 moveto +43990 37130 lineto +stroke +newpath +43990 37700 moveto +44050 37730 lineto +44160 37730 lineto +44220 37700 lineto +44250 37670 lineto +44280 37610 lineto +44280 37440 lineto +44250 37380 lineto +44220 37360 lineto +44160 37330 lineto +44050 37330 lineto +43990 37360 lineto +stroke +newpath +44790 37330 moveto +44790 37930 lineto +stroke +newpath +44790 37360 moveto +44730 37330 lineto +44620 37330 lineto +44560 37360 lineto +44530 37380 lineto +44500 37440 lineto +44500 37610 lineto +44530 37670 lineto +44560 37700 lineto +44620 37730 lineto +44730 37730 lineto +44790 37700 lineto +stroke +newpath +45330 37930 moveto +45220 37930 lineto +45160 37900 lineto +45130 37870 lineto +45070 37780 lineto +45040 37670 lineto +45040 37440 lineto +45070 37380 lineto +45100 37360 lineto +45160 37330 lineto +45270 37330 lineto +45330 37360 lineto +45360 37380 lineto +45390 37440 lineto +45390 37580 lineto +45360 37640 lineto +45330 37670 lineto +45270 37700 lineto +45160 37700 lineto +45100 37670 lineto +45070 37640 lineto +45040 37580 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 38730 moveto +43990 38130 lineto +stroke +newpath +43990 38700 moveto +44050 38730 lineto +44160 38730 lineto +44220 38700 lineto +44250 38670 lineto +44280 38610 lineto +44280 38440 lineto +44250 38380 lineto +44220 38360 lineto +44160 38330 lineto +44050 38330 lineto +43990 38360 lineto +stroke +newpath +44790 38330 moveto +44790 38930 lineto +stroke +newpath +44790 38360 moveto +44730 38330 lineto +44620 38330 lineto +44560 38360 lineto +44530 38380 lineto +44500 38440 lineto +44500 38610 lineto +44530 38670 lineto +44560 38700 lineto +44620 38730 lineto +44730 38730 lineto +44790 38700 lineto +stroke +newpath +45360 38930 moveto +45070 38930 lineto +45040 38640 lineto +45070 38670 lineto +45130 38700 lineto +45270 38700 lineto +45330 38670 lineto +45360 38640 lineto +45390 38580 lineto +45390 38440 lineto +45360 38380 lineto +45330 38360 lineto +45270 38330 lineto +45130 38330 lineto +45070 38360 lineto +45040 38380 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 39730 moveto +43990 39130 lineto +stroke +newpath +43990 39700 moveto +44050 39730 lineto +44160 39730 lineto +44220 39700 lineto +44250 39670 lineto +44280 39610 lineto +44280 39440 lineto +44250 39380 lineto +44220 39360 lineto +44160 39330 lineto +44050 39330 lineto +43990 39360 lineto +stroke +newpath +44790 39330 moveto +44790 39930 lineto +stroke +newpath +44790 39360 moveto +44730 39330 lineto +44620 39330 lineto +44560 39360 lineto +44530 39380 lineto +44500 39440 lineto +44500 39610 lineto +44530 39670 lineto +44560 39700 lineto +44620 39730 lineto +44730 39730 lineto +44790 39700 lineto +stroke +newpath +45330 39730 moveto +45330 39330 lineto +stroke +newpath +45190 39960 moveto +45040 39530 lineto +45420 39530 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 40730 moveto +43990 40130 lineto +stroke +newpath +43990 40700 moveto +44050 40730 lineto +44160 40730 lineto +44220 40700 lineto +44250 40670 lineto +44280 40610 lineto +44280 40440 lineto +44250 40380 lineto +44220 40360 lineto +44160 40330 lineto +44050 40330 lineto +43990 40360 lineto +stroke +newpath +44790 40330 moveto +44790 40930 lineto +stroke +newpath +44790 40360 moveto +44730 40330 lineto +44620 40330 lineto +44560 40360 lineto +44530 40380 lineto +44500 40440 lineto +44500 40610 lineto +44530 40670 lineto +44560 40700 lineto +44620 40730 lineto +44730 40730 lineto +44790 40700 lineto +stroke +newpath +45020 40930 moveto +45390 40930 lineto +45190 40700 lineto +45270 40700 lineto +45330 40670 lineto +45360 40640 lineto +45390 40580 lineto +45390 40440 lineto +45360 40380 lineto +45330 40360 lineto +45270 40330 lineto +45100 40330 lineto +45040 40360 lineto +45020 40380 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 42230 moveto +43990 41630 lineto +stroke +newpath +43990 42200 moveto +44050 42230 lineto +44160 42230 lineto +44220 42200 lineto +44250 42170 lineto +44280 42110 lineto +44280 41940 lineto +44250 41880 lineto +44220 41860 lineto +44160 41830 lineto +44050 41830 lineto +43990 41860 lineto +stroke +newpath +44790 41830 moveto +44790 42430 lineto +stroke +newpath +44790 41860 moveto +44730 41830 lineto +44620 41830 lineto +44560 41860 lineto +44530 41880 lineto +44500 41940 lineto +44500 42110 lineto +44530 42170 lineto +44560 42200 lineto +44620 42230 lineto +44730 42230 lineto +44790 42200 lineto +stroke +newpath +45040 42370 moveto +45070 42400 lineto +45130 42430 lineto +45270 42430 lineto +45330 42400 lineto +45360 42370 lineto +45390 42310 lineto +45390 42260 lineto +45360 42170 lineto +45020 41830 lineto +45390 41830 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 43230 moveto +43990 42630 lineto +stroke +newpath +43990 43200 moveto +44050 43230 lineto +44160 43230 lineto +44220 43200 lineto +44250 43170 lineto +44280 43110 lineto +44280 42940 lineto +44250 42880 lineto +44220 42860 lineto +44160 42830 lineto +44050 42830 lineto +43990 42860 lineto +stroke +newpath +44790 42830 moveto +44790 43430 lineto +stroke +newpath +44790 42860 moveto +44730 42830 lineto +44620 42830 lineto +44560 42860 lineto +44530 42880 lineto +44500 42940 lineto +44500 43110 lineto +44530 43170 lineto +44560 43200 lineto +44620 43230 lineto +44730 43230 lineto +44790 43200 lineto +stroke +newpath +45390 42830 moveto +45040 42830 lineto +stroke +newpath +45220 42830 moveto +45220 43430 lineto +45160 43340 lineto +45100 43280 lineto +45040 43260 lineto +stroke +0 0 0 setrgbcolor +newpath +43990 44230 moveto +43990 43630 lineto +stroke +newpath +43990 44200 moveto +44050 44230 lineto +44160 44230 lineto +44220 44200 lineto +44250 44170 lineto +44280 44110 lineto +44280 43940 lineto +44250 43880 lineto +44220 43860 lineto +44160 43830 lineto +44050 43830 lineto +43990 43860 lineto +stroke +newpath +44790 43830 moveto +44790 44430 lineto +stroke +newpath +44790 43860 moveto +44730 43830 lineto +44620 43830 lineto +44560 43860 lineto +44530 43880 lineto +44500 43940 lineto +44500 44110 lineto +44530 44170 lineto +44560 44200 lineto +44620 44230 lineto +44730 44230 lineto +44790 44200 lineto +stroke +newpath +45190 44430 moveto +45240 44430 lineto +45300 44400 lineto +45330 44370 lineto +45360 44310 lineto +45390 44200 lineto +45390 44060 lineto +45360 43940 lineto +45330 43880 lineto +45300 43860 lineto +45240 43830 lineto +45190 43830 lineto +45130 43860 lineto +45100 43880 lineto +45070 43940 lineto +45040 44060 lineto +45040 44200 lineto +45070 44310 lineto +45100 44370 lineto +45130 44400 lineto +45190 44430 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 43230 moveto +74640 42630 lineto +stroke +newpath +74640 43200 moveto +74700 43230 lineto +74810 43230 lineto +74870 43200 lineto +74900 43170 lineto +74930 43110 lineto +74930 42940 lineto +74900 42880 lineto +74870 42860 lineto +74810 42830 lineto +74700 42830 lineto +74640 42860 lineto +stroke +newpath +75440 42860 moveto +75380 42830 lineto +75270 42830 lineto +75210 42860 lineto +75180 42880 lineto +75150 42940 lineto +75150 43110 lineto +75180 43170 lineto +75210 43200 lineto +75270 43230 lineto +75380 43230 lineto +75440 43200 lineto +stroke +newpath +75950 43230 moveto +75950 42830 lineto +stroke +newpath +75810 43460 moveto +75660 43030 lineto +76040 43030 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 42230 moveto +74640 41630 lineto +stroke +newpath +74640 42200 moveto +74700 42230 lineto +74810 42230 lineto +74870 42200 lineto +74900 42170 lineto +74930 42110 lineto +74930 41940 lineto +74900 41880 lineto +74870 41860 lineto +74810 41830 lineto +74700 41830 lineto +74640 41860 lineto +stroke +newpath +75440 41860 moveto +75380 41830 lineto +75270 41830 lineto +75210 41860 lineto +75180 41880 lineto +75150 41940 lineto +75150 42110 lineto +75180 42170 lineto +75210 42200 lineto +75270 42230 lineto +75380 42230 lineto +75440 42200 lineto +stroke +newpath +75980 42430 moveto +75690 42430 lineto +75660 42140 lineto +75690 42170 lineto +75750 42200 lineto +75890 42200 lineto +75950 42170 lineto +75980 42140 lineto +76010 42080 lineto +76010 41940 lineto +75980 41880 lineto +75950 41860 lineto +75890 41830 lineto +75750 41830 lineto +75690 41860 lineto +75660 41880 lineto +stroke +0 0 0 setrgbcolor +newpath +44020 45230 moveto +44020 44630 lineto +stroke +newpath +44020 45200 moveto +44080 45230 lineto +44190 45230 lineto +44250 45200 lineto +44280 45170 lineto +44310 45110 lineto +44310 44940 lineto +44280 44880 lineto +44250 44860 lineto +44190 44830 lineto +44080 44830 lineto +44020 44860 lineto +stroke +newpath +44820 44860 moveto +44760 44830 lineto +44650 44830 lineto +44590 44860 lineto +44560 44880 lineto +44530 44940 lineto +44530 45110 lineto +44560 45170 lineto +44590 45200 lineto +44650 45230 lineto +44760 45230 lineto +44820 45200 lineto +stroke +newpath +45040 45370 moveto +45070 45400 lineto +45130 45430 lineto +45270 45430 lineto +45330 45400 lineto +45360 45370 lineto +45390 45310 lineto +45390 45260 lineto +45360 45170 lineto +45020 44830 lineto +45390 44830 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 40330 moveto +74640 40730 lineto +stroke +newpath +74640 40610 moveto +74670 40670 lineto +74700 40700 lineto +74760 40730 lineto +74810 40730 lineto +stroke +newpath +74980 40360 moveto +75040 40330 lineto +75160 40330 lineto +75210 40360 lineto +75240 40410 lineto +75240 40440 lineto +75210 40500 lineto +75160 40530 lineto +75070 40530 lineto +75010 40560 lineto +74980 40610 lineto +74980 40640 lineto +75010 40700 lineto +75070 40730 lineto +75160 40730 lineto +75210 40700 lineto +stroke +newpath +75420 40730 moveto +75650 40730 lineto +stroke +newpath +75500 40930 moveto +75500 40410 lineto +75530 40360 lineto +75590 40330 lineto +75650 40330 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 39730 moveto +74640 39130 lineto +stroke +newpath +74640 39700 moveto +74700 39730 lineto +74810 39730 lineto +74870 39700 lineto +74900 39670 lineto +74930 39610 lineto +74930 39440 lineto +74900 39380 lineto +74870 39360 lineto +74810 39330 lineto +74700 39330 lineto +74640 39360 lineto +stroke +newpath +75440 39360 moveto +75380 39330 lineto +75270 39330 lineto +75210 39360 lineto +75180 39380 lineto +75150 39440 lineto +75150 39610 lineto +75180 39670 lineto +75210 39700 lineto +75270 39730 lineto +75380 39730 lineto +75440 39700 lineto +stroke +newpath +75950 39930 moveto +75840 39930 lineto +75780 39900 lineto +75750 39870 lineto +75690 39780 lineto +75660 39670 lineto +75660 39440 lineto +75690 39380 lineto +75720 39360 lineto +75780 39330 lineto +75890 39330 lineto +75950 39360 lineto +75980 39380 lineto +76010 39440 lineto +76010 39580 lineto +75980 39640 lineto +75950 39670 lineto +75890 39700 lineto +75780 39700 lineto +75720 39670 lineto +75690 39640 lineto +75660 39580 lineto +stroke +0 0 0 setrgbcolor +newpath +74640 38730 moveto +74640 38130 lineto +stroke +newpath +74640 38700 moveto +74700 38730 lineto +74810 38730 lineto +74870 38700 lineto +74900 38670 lineto +74930 38610 lineto +74930 38440 lineto +74900 38380 lineto +74870 38360 lineto +74810 38330 lineto +74700 38330 lineto +74640 38360 lineto +stroke +newpath +75440 38360 moveto +75380 38330 lineto +75270 38330 lineto +75210 38360 lineto +75180 38380 lineto +75150 38440 lineto +75150 38610 lineto +75180 38670 lineto +75210 38700 lineto +75270 38730 lineto +75380 38730 lineto +75440 38700 lineto +stroke +newpath +75640 38930 moveto +76040 38930 lineto +75780 38330 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +80 setlinewidth +32500 48670 2000 -1500 rect0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +32000 48670 moveto +32000 47170 lineto +32250 47170 lineto +32250 48670 lineto +32000 48670 lineto +32000 48670 lineto +poly1 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +35000 48670 moveto +35000 47170 lineto +34750 47170 lineto +34750 48670 lineto +35000 48670 lineto +35000 48670 lineto +poly1 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +31650 48170 350 cir0 +newpath +31300 48170 moveto +29500 48170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +30930 48330 moveto +30580 48330 lineto +stroke +newpath +30760 48330 moveto +30760 48930 lineto +30700 48840 lineto +30640 48780 lineto +30580 48760 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +33500 46820 350 cir0 +newpath +33500 46470 moveto +33500 45670 lineto +stroke +30 setlinewidth +0.627 0 0 setrgbcolor +newpath +33200 46370 moveto +33190 46380 lineto +33180 46400 lineto +33180 46440 lineto +33190 46460 lineto +33200 46470 lineto +33220 46480 lineto +33240 46480 lineto +33270 46470 lineto +33380 46360 lineto +33380 46480 lineto +stroke +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +35350 48170 350 cir0 +newpath +35700 48170 moveto +37500 48170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +36060 48930 moveto +36430 48930 lineto +36230 48700 lineto +36310 48700 lineto +36370 48670 lineto +36400 48640 lineto +36430 48580 lineto +36430 48440 lineto +36400 48380 lineto +36370 48360 lineto +36310 48330 lineto +36140 48330 lineto +36080 48360 lineto +36060 48380 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +33840 49230 moveto +33670 49230 lineto +stroke +newpath +33670 48970 moveto +33670 49470 lineto +33910 49470 lineto +stroke +newpath +34360 48970 moveto +34080 48970 lineto +stroke +newpath +34220 48970 moveto +34220 49470 lineto +34170 49400 lineto +34120 49350 lineto +34080 49320 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +34320 46550 moveto +34300 46530 lineto +34250 46510 lineto +34210 46510 lineto +34150 46530 lineto +34110 46570 lineto +34100 46600 lineto +34080 46680 lineto +34080 46740 lineto +34100 46810 lineto +34110 46850 lineto +34150 46890 lineto +34210 46910 lineto +34250 46910 lineto +34300 46890 lineto +34320 46870 lineto +stroke +newpath +34500 46720 moveto +34630 46720 lineto +stroke +newpath +34690 46510 moveto +34500 46510 lineto +34500 46910 lineto +34690 46910 lineto +stroke +newpath +35080 46510 moveto +34950 46700 lineto +stroke +newpath +34860 46510 moveto +34860 46910 lineto +35010 46910 lineto +35050 46890 lineto +35060 46870 lineto +35080 46830 lineto +35080 46770 lineto +35060 46740 lineto +35050 46720 lineto +35010 46700 lineto +34860 46700 lineto +stroke +newpath +35240 46620 moveto +35430 46620 lineto +stroke +newpath +35200 46510 moveto +35330 46910 lineto +35460 46510 lineto +stroke +newpath +35600 46510 moveto +35600 46910 lineto +35730 46620 lineto +35860 46910 lineto +35860 46510 lineto +stroke +newpath +36060 46510 moveto +36060 46910 lineto +stroke +newpath +36470 46550 moveto +36450 46530 lineto +36400 46510 lineto +36360 46510 lineto +36300 46530 lineto +36260 46570 lineto +36250 46600 lineto +36230 46680 lineto +36230 46740 lineto +36250 46810 lineto +36260 46850 lineto +36300 46890 lineto +36360 46910 lineto +36400 46910 lineto +36450 46890 lineto +36470 46870 lineto +stroke +newpath +36550 46470 moveto +36850 46470 lineto +stroke +newpath +37080 46720 moveto +36950 46720 lineto +stroke +newpath +36950 46510 moveto +36950 46910 lineto +37140 46910 lineto +stroke +newpath +37290 46510 moveto +37290 46910 lineto +stroke +newpath +37670 46510 moveto +37480 46510 lineto +37480 46910 lineto +stroke +newpath +37740 46910 moveto +37970 46910 lineto +stroke +newpath +37850 46510 moveto +37850 46910 lineto +stroke +newpath +38100 46720 moveto +38230 46720 lineto +stroke +newpath +38290 46510 moveto +38100 46510 lineto +38100 46910 lineto +38290 46910 lineto +stroke +newpath +38680 46510 moveto +38550 46700 lineto +stroke +newpath +38460 46510 moveto +38460 46910 lineto +38610 46910 lineto +38650 46890 lineto +38660 46870 lineto +38680 46830 lineto +38680 46770 lineto +38660 46740 lineto +38650 46720 lineto +38610 46700 lineto +38460 46700 lineto +stroke +0 0 0 setrgbcolor +newpath +41730 40730 moveto +41960 40730 lineto +stroke +newpath +41810 40930 moveto +41810 40410 lineto +41840 40360 lineto +41900 40330 lineto +41960 40330 lineto +stroke +newpath +42100 40330 moveto +42410 40730 lineto +stroke +newpath +42100 40730 moveto +42410 40330 lineto +stroke +0 0 0 setrgbcolor +newpath +41780 41830 moveto +41780 42230 lineto +stroke +newpath +41780 42110 moveto +41810 42170 lineto +41840 42200 lineto +41900 42230 lineto +41950 42230 lineto +stroke +newpath +42100 41830 moveto +42410 42230 lineto +stroke +newpath +42100 42230 moveto +42410 41830 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +120 setlinewidth +51600 58170 800 -3000 rect0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +52000 58170 moveto +52000 59170 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +52000 55170 moveto +52000 54170 lineto +stroke +0 0.627 0.627 setrgbcolor +0 0.627 0.627 setrgbcolor +newpath +53000 56580 moveto +52760 56420 lineto +stroke +newpath +53000 56300 moveto +52500 56300 lineto +52500 56490 lineto +52530 56540 lineto +52550 56560 lineto +52600 56580 lineto +52670 56580 lineto +52720 56560 lineto +52740 56540 lineto +52760 56490 lineto +52760 56300 lineto +stroke +newpath +52500 57040 moveto +52500 56800 lineto +52740 56780 lineto +52720 56800 lineto +52690 56850 lineto +52690 56970 lineto +52720 57010 lineto +52740 57040 lineto +52790 57060 lineto +52910 57060 lineto +52950 57040 lineto +52980 57010 lineto +53000 56970 lineto +53000 56850 lineto +52980 56800 lineto +52950 56780 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +51870 56280 moveto +52200 56280 lineto +stroke +newpath +51680 56160 moveto +52040 56050 lineto +52040 56350 lineto +stroke +newpath +51700 56500 moveto +51700 56830 lineto +52200 56620 lineto +stroke +newpath +51700 57120 moveto +51700 57170 lineto +51730 57220 lineto +51750 57240 lineto +51800 57270 lineto +51890 57290 lineto +52010 57290 lineto +52110 57270 lineto +52150 57240 lineto +52180 57220 lineto +52200 57170 lineto +52200 57120 lineto +52180 57080 lineto +52150 57050 lineto +52110 57030 lineto +52010 57010 lineto +51890 57010 lineto +51800 57030 lineto +51750 57050 lineto +51730 57080 lineto +51700 57120 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +51500 61670 moveto +52500 61670 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +51500 60670 moveto +52000 61670 lineto +52500 60670 lineto +poly1 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +52400 61820 moveto +52800 62270 lineto +52550 62220 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +52250 61970 moveto +52650 62420 lineto +52400 62370 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +52000 60670 moveto +52000 59170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +51860 60030 moveto +51860 59810 lineto +stroke +newpath +51860 59920 moveto +51460 59920 lineto +51520 59880 lineto +51560 59840 lineto +51580 59810 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +52000 61670 moveto +52000 63170 lineto +stroke +0.627 0 0 setrgbcolor +newpath +51500 62310 moveto +51480 62330 lineto +51460 62360 lineto +51460 62460 lineto +51480 62500 lineto +51500 62520 lineto +51540 62530 lineto +51580 62530 lineto +51630 62520 lineto +51860 62290 lineto +51860 62530 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +51200 60800 moveto +50700 60800 lineto +50700 60920 lineto +50730 60990 lineto +50770 61040 lineto +50820 61060 lineto +50920 61080 lineto +50990 61080 lineto +51080 61060 lineto +51130 61040 lineto +51180 60990 lineto +51200 60920 lineto +51200 60800 lineto +stroke +newpath +50750 61280 moveto +50730 61300 lineto +50700 61350 lineto +50700 61470 lineto +50730 61510 lineto +50750 61540 lineto +50800 61560 lineto +50850 61560 lineto +50920 61540 lineto +51200 61250 lineto +51200 61560 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +53200 60860 moveto +53200 60620 lineto +52700 60620 lineto +stroke +newpath +52940 61020 moveto +52940 61190 lineto +stroke +newpath +53200 61260 moveto +53200 61020 lineto +52700 61020 lineto +52700 61260 lineto +stroke +newpath +53200 61470 moveto +52700 61470 lineto +52700 61590 lineto +52730 61660 lineto +52770 61710 lineto +52820 61730 lineto +52920 61750 lineto +52990 61750 lineto +53080 61730 lineto +53130 61710 lineto +53180 61660 lineto +53200 61590 lineto +53200 61470 lineto +stroke +0 0 0 setrgbcolor +newpath +41900 47230 moveto +41900 46740 lineto +41870 46680 lineto +41840 46660 lineto +41790 46630 lineto +41700 46630 lineto +41640 46660 lineto +stroke +newpath +41900 46860 moveto +41840 46830 lineto +41730 46830 lineto +41670 46860 lineto +41640 46880 lineto +41610 46940 lineto +41610 47110 lineto +41640 47170 lineto +41670 47200 lineto +41730 47230 lineto +41840 47230 lineto +41900 47200 lineto +stroke +newpath +42180 47230 moveto +42180 46830 lineto +stroke +newpath +42180 47170 moveto +42210 47200 lineto +42270 47230 lineto +42350 47230 lineto +42410 47200 lineto +42440 47140 lineto +42440 46830 lineto +stroke +newpath +42980 46830 moveto +42980 47430 lineto +stroke +newpath +42980 46860 moveto +42920 46830 lineto +42810 46830 lineto +42750 46860 lineto +42720 46880 lineto +42690 46940 lineto +42690 47110 lineto +42720 47170 lineto +42750 47200 lineto +42810 47230 lineto +42920 47230 lineto +42980 47200 lineto +stroke +0 0 0 setrgbcolor +newpath +41590 46230 moveto +41730 45830 lineto +41870 46230 lineto +stroke +newpath +42360 45860 moveto +42300 45830 lineto +42190 45830 lineto +42130 45860 lineto +42100 45880 lineto +42070 45940 lineto +42070 46110 lineto +42100 46170 lineto +42130 46200 lineto +42190 46230 lineto +42300 46230 lineto +42360 46200 lineto +stroke +newpath +42870 45860 moveto +42810 45830 lineto +42700 45830 lineto +42640 45860 lineto +42610 45880 lineto +42580 45940 lineto +42580 46110 lineto +42610 46170 lineto +42640 46200 lineto +42700 46230 lineto +42810 46230 lineto +42870 46200 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +88200 42650 moveto +88810 42650 lineto +stroke +newpath +88510 42350 moveto +88510 42960 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +100 setlinewidth +89000 39920 1600 -308.8 -231.5 arc0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +89000 42170 moveto +89000 41970 lineto +89000 41970 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +100 setlinewidth +newpath +90000 41920 moveto +88000 41920 lineto +88000 41920 lineto +poly0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +89000 42170 moveto +89000 43670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +89000 41470 moveto +89000 39670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +89900 42520 moveto +89880 42490 lineto +89810 42470 lineto +89760 42470 lineto +89690 42490 lineto +89640 42540 lineto +89620 42590 lineto +89600 42680 lineto +89600 42750 lineto +89620 42850 lineto +89640 42900 lineto +89690 42940 lineto +89760 42970 lineto +89810 42970 lineto +89880 42940 lineto +89900 42920 lineto +stroke +newpath +90330 42800 moveto +90330 42470 lineto +stroke +newpath +90210 42990 moveto +90100 42630 lineto +90400 42630 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +89880 40470 moveto +89600 40470 lineto +stroke +newpath +89740 40470 moveto +89740 40970 lineto +89690 40900 lineto +89640 40850 lineto +89600 40820 lineto +stroke +newpath +90190 40970 moveto +90240 40970 lineto +90290 40940 lineto +90310 40920 lineto +90340 40870 lineto +90360 40780 lineto +90360 40660 lineto +90340 40560 lineto +90310 40520 lineto +90290 40490 lineto +90240 40470 lineto +90190 40470 lineto +90150 40490 lineto +90120 40520 lineto +90100 40560 lineto +90080 40660 lineto +90080 40780 lineto +90100 40870 lineto +90120 40920 lineto +90150 40940 lineto +90190 40970 lineto +stroke +newpath +90790 40800 moveto +90790 40470 lineto +stroke +newpath +90580 40800 moveto +90580 40540 lineto +90600 40490 lineto +90650 40470 lineto +90720 40470 lineto +90770 40490 lineto +90790 40520 lineto +stroke +0 0 0 setrgbcolor +newpath +92400 40230 moveto +92400 39740 lineto +92370 39680 lineto +92340 39660 lineto +92290 39630 lineto +92200 39630 lineto +92140 39660 lineto +stroke +newpath +92400 39860 moveto +92340 39830 lineto +92230 39830 lineto +92170 39860 lineto +92140 39880 lineto +92110 39940 lineto +92110 40110 lineto +92140 40170 lineto +92170 40200 lineto +92230 40230 lineto +92340 40230 lineto +92400 40200 lineto +stroke +newpath +92680 40230 moveto +92680 39830 lineto +stroke +newpath +92680 40170 moveto +92710 40200 lineto +92770 40230 lineto +92850 40230 lineto +92910 40200 lineto +92940 40140 lineto +92940 39830 lineto +stroke +newpath +93480 39830 moveto +93480 40430 lineto +stroke +newpath +93480 39860 moveto +93420 39830 lineto +93310 39830 lineto +93250 39860 lineto +93220 39880 lineto +93190 39940 lineto +93190 40110 lineto +93220 40170 lineto +93250 40200 lineto +93310 40230 lineto +93420 40230 lineto +93480 40200 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +84200 42650 moveto +84810 42650 lineto +stroke +newpath +84510 42350 moveto +84510 42960 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +100 setlinewidth +85000 39920 1600 -308.8 -231.5 arc0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +85000 42170 moveto +85000 41970 lineto +85000 41970 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +100 setlinewidth +newpath +86000 41920 moveto +84000 41920 lineto +84000 41920 lineto +poly0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +85000 42170 moveto +85000 43670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +85000 41470 moveto +85000 39670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +85900 42520 moveto +85880 42490 lineto +85810 42470 lineto +85760 42470 lineto +85690 42490 lineto +85640 42540 lineto +85620 42590 lineto +85600 42680 lineto +85600 42750 lineto +85620 42850 lineto +85640 42900 lineto +85690 42940 lineto +85760 42970 lineto +85810 42970 lineto +85880 42940 lineto +85900 42920 lineto +stroke +newpath +86070 42970 moveto +86380 42970 lineto +86210 42780 lineto +86290 42780 lineto +86330 42750 lineto +86360 42730 lineto +86380 42680 lineto +86380 42560 lineto +86360 42520 lineto +86330 42490 lineto +86290 42470 lineto +86140 42470 lineto +86100 42490 lineto +86070 42520 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +85880 40470 moveto +85600 40470 lineto +stroke +newpath +85740 40470 moveto +85740 40970 lineto +85690 40900 lineto +85640 40850 lineto +85600 40820 lineto +stroke +newpath +86310 40800 moveto +86310 40470 lineto +stroke +newpath +86100 40800 moveto +86100 40540 lineto +86120 40490 lineto +86170 40470 lineto +86240 40470 lineto +86290 40490 lineto +86310 40520 lineto +stroke +0 0 0 setrgbcolor +newpath +78940 43450 moveto +79430 43450 lineto +79490 43420 lineto +79510 43390 lineto +79540 43340 lineto +79540 43250 lineto +79510 43190 lineto +stroke +newpath +79310 43450 moveto +79340 43390 lineto +79340 43280 lineto +79310 43220 lineto +79290 43190 lineto +79230 43160 lineto +79060 43160 lineto +79000 43190 lineto +78970 43220 lineto +78940 43280 lineto +78940 43390 lineto +78970 43450 lineto +stroke +newpath +78940 43730 moveto +79340 43730 lineto +stroke +newpath +79000 43730 moveto +78970 43760 lineto +78940 43820 lineto +78940 43900 lineto +78970 43960 lineto +79030 43990 lineto +79340 43990 lineto +stroke +newpath +79340 44530 moveto +78740 44530 lineto +stroke +newpath +79310 44530 moveto +79340 44470 lineto +79340 44360 lineto +79310 44300 lineto +79290 44270 lineto +79230 44240 lineto +79060 44240 lineto +79000 44270 lineto +78970 44300 lineto +78940 44360 lineto +78940 44470 lineto +78970 44530 lineto +stroke +0 0 0 setrgbcolor +newpath +78940 47760 moveto +79340 47900 lineto +78940 48040 lineto +stroke +newpath +79310 48530 moveto +79340 48470 lineto +79340 48360 lineto +79310 48300 lineto +79290 48270 lineto +79230 48240 lineto +79060 48240 lineto +79000 48270 lineto +78970 48300 lineto +78940 48360 lineto +78940 48470 lineto +78970 48530 lineto +stroke +newpath +79310 49040 moveto +79340 48980 lineto +79340 48870 lineto +79310 48810 lineto +79290 48780 lineto +79230 48750 lineto +79060 48750 lineto +79000 48780 lineto +78970 48810 lineto +78940 48870 lineto +78940 48980 lineto +78970 49040 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +120 setlinewidth +78500 46070 -3000 -800 rect0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +78500 45670 moveto +79500 45670 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +75500 45670 moveto +74500 45670 lineto +stroke +0 0.627 0.627 setrgbcolor +0 0.627 0.627 setrgbcolor +newpath +76910 44670 moveto +76750 44910 lineto +stroke +newpath +76630 44670 moveto +76630 45170 lineto +76820 45170 lineto +76870 45140 lineto +76890 45120 lineto +76910 45070 lineto +76910 45000 lineto +76890 44950 lineto +76870 44930 lineto +76820 44910 lineto +76630 44910 lineto +stroke +newpath +77200 44950 moveto +77150 44980 lineto +77130 45000 lineto +77110 45050 lineto +77110 45070 lineto +77130 45120 lineto +77150 45140 lineto +77200 45170 lineto +77300 45170 lineto +77340 45140 lineto +77370 45120 lineto +77390 45070 lineto +77390 45050 lineto +77370 45000 lineto +77340 44980 lineto +77300 44950 lineto +77200 44950 lineto +77150 44930 lineto +77130 44910 lineto +77110 44860 lineto +77110 44760 lineto +77130 44720 lineto +77150 44690 lineto +77200 44670 lineto +77300 44670 lineto +77340 44690 lineto +77370 44720 lineto +77390 44760 lineto +77390 44860 lineto +77370 44910 lineto +77340 44930 lineto +77300 44950 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +76660 45470 moveto +76380 45470 lineto +stroke +newpath +76520 45470 moveto +76520 45970 lineto +76470 45900 lineto +76420 45850 lineto +76380 45820 lineto +stroke +newpath +76970 45970 moveto +77020 45970 lineto +77070 45940 lineto +77090 45920 lineto +77120 45870 lineto +77140 45780 lineto +77140 45660 lineto +77120 45560 lineto +77090 45520 lineto +77070 45490 lineto +77020 45470 lineto +76970 45470 lineto +76930 45490 lineto +76900 45520 lineto +76880 45560 lineto +76860 45660 lineto +76860 45780 lineto +76880 45870 lineto +76900 45920 lineto +76930 45940 lineto +76970 45970 lineto +stroke +newpath +77450 45970 moveto +77500 45970 lineto +77550 45940 lineto +77570 45920 lineto +77600 45870 lineto +77620 45780 lineto +77620 45660 lineto +77600 45560 lineto +77570 45520 lineto +77550 45490 lineto +77500 45470 lineto +77450 45470 lineto +77410 45490 lineto +77380 45520 lineto +77360 45560 lineto +77340 45660 lineto +77340 45780 lineto +77360 45870 lineto +77380 45920 lineto +77410 45940 lineto +77450 45970 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +120 setlinewidth +78500 47070 -3000 -800 rect0 +0.627 0 0 setrgbcolor +60 setlinewidth +0.627 0 0 setrgbcolor +newpath +78500 46670 moveto +79500 46670 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +75500 46670 moveto +74500 46670 lineto +stroke +0 0.627 0.627 setrgbcolor +0 0.627 0.627 setrgbcolor +newpath +76910 45670 moveto +76750 45910 lineto +stroke +newpath +76630 45670 moveto +76630 46170 lineto +76820 46170 lineto +76870 46140 lineto +76890 46120 lineto +76910 46070 lineto +76910 46000 lineto +76890 45950 lineto +76870 45930 lineto +76820 45910 lineto +76630 45910 lineto +stroke +newpath +77080 46170 moveto +77410 46170 lineto +77200 45670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +76660 46470 moveto +76380 46470 lineto +stroke +newpath +76520 46470 moveto +76520 46970 lineto +76470 46900 lineto +76420 46850 lineto +76380 46820 lineto +stroke +newpath +76970 46970 moveto +77020 46970 lineto +77070 46940 lineto +77090 46920 lineto +77120 46870 lineto +77140 46780 lineto +77140 46660 lineto +77120 46560 lineto +77090 46520 lineto +77070 46490 lineto +77020 46470 lineto +76970 46470 lineto +76930 46490 lineto +76900 46520 lineto +76880 46560 lineto +76860 46660 lineto +76860 46780 lineto +76880 46870 lineto +76900 46920 lineto +76930 46940 lineto +76970 46970 lineto +stroke +newpath +77450 46970 moveto +77500 46970 lineto +77550 46940 lineto +77570 46920 lineto +77600 46870 lineto +77620 46780 lineto +77620 46660 lineto +77600 46560 lineto +77570 46520 lineto +77550 46490 lineto +77500 46470 lineto +77450 46470 lineto +77410 46490 lineto +77380 46520 lineto +77360 46560 lineto +77340 46660 lineto +77340 46780 lineto +77360 46870 lineto +77380 46920 lineto +77410 46940 lineto +77450 46970 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +120 setlinewidth +newpath +82140 45410 moveto +82630 45410 lineto +82690 45440 lineto +82710 45470 lineto +82740 45530 lineto +82740 45640 lineto +82710 45700 lineto +82690 45730 lineto +82630 45760 lineto +82140 45760 lineto +stroke +newpath +82710 46010 moveto +82740 46100 lineto +82740 46240 lineto +82710 46300 lineto +82690 46330 lineto +82630 46360 lineto +82570 46360 lineto +82510 46330 lineto +82490 46300 lineto +82460 46240 lineto +82430 46130 lineto +82400 46070 lineto +82370 46040 lineto +82310 46010 lineto +82260 46010 lineto +82200 46040 lineto +82170 46070 lineto +82140 46130 lineto +82140 46270 lineto +82170 46360 lineto +stroke +newpath +82430 46810 moveto +82460 46900 lineto +82490 46930 lineto +82540 46960 lineto +82630 46960 lineto +82690 46930 lineto +82710 46900 lineto +82740 46840 lineto +82740 46610 lineto +82140 46610 lineto +82140 46810 lineto +82170 46870 lineto +82200 46900 lineto +82260 46930 lineto +82310 46930 lineto +82370 46900 lineto +82400 46870 lineto +82430 46810 lineto +82430 46610 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +newpath +83000 48170 moveto +81500 48170 lineto +81500 44170 lineto +83000 44170 lineto +83000 44170 lineto +poly0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +81500 47670 moveto +79500 47670 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +newpath +80640 47820 moveto +80360 47820 lineto +stroke +newpath +80500 47820 moveto +80500 48320 lineto +80450 48250 lineto +80400 48200 lineto +80360 48170 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +81500 46670 moveto +79500 46670 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +newpath +80360 47270 moveto +80380 47290 lineto +80430 47320 lineto +80550 47320 lineto +80590 47290 lineto +80620 47270 lineto +80640 47220 lineto +80640 47170 lineto +80620 47100 lineto +80330 46820 lineto +80640 46820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +81500 45670 moveto +79500 45670 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +newpath +80330 46320 moveto +80640 46320 lineto +80470 46130 lineto +80550 46130 lineto +80590 46100 lineto +80620 46080 lineto +80640 46030 lineto +80640 45910 lineto +80620 45870 lineto +80590 45840 lineto +80550 45820 lineto +80400 45820 lineto +80360 45840 lineto +80330 45870 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +81500 44670 moveto +79500 44670 lineto +stroke +0 0.627 0.627 setrgbcolor +0.627 0 0 setrgbcolor +newpath +80590 45150 moveto +80590 44820 lineto +stroke +newpath +80470 45340 moveto +80360 44980 lineto +80660 44980 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +82050 49030 moveto +82050 48600 lineto +82030 48510 lineto +81970 48460 lineto +81880 48430 lineto +81830 48430 lineto +stroke +newpath +82660 48430 moveto +82310 48430 lineto +stroke +newpath +82490 48430 moveto +82490 49030 lineto +82430 48940 lineto +82370 48880 lineto +82310 48860 lineto +stroke +0 setlinewidth +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +60 setlinewidth +48500 49670 23000 -17500 rect0 +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 48670 moveto +45500 48670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +48970 48970 moveto +49300 48470 lineto +stroke +newpath +49300 48970 moveto +48970 48470 lineto +stroke +newpath +49430 48970 moveto +49710 48970 lineto +stroke +newpath +49570 48470 moveto +49570 48970 lineto +stroke +newpath +49860 48610 moveto +50090 48610 lineto +stroke +newpath +49810 48470 moveto +49970 48970 lineto +50140 48470 lineto +stroke +newpath +50550 48470 moveto +50310 48470 lineto +50310 48970 lineto +stroke +newpath +50970 48470 moveto +50690 48470 lineto +stroke +newpath +50830 48470 moveto +50830 48970 lineto +50780 48900 lineto +50730 48850 lineto +50690 48820 lineto +stroke +0.627 0 0 setrgbcolor +newpath +47140 48820 moveto +46860 48820 lineto +stroke +newpath +47000 48820 moveto +47000 49320 lineto +46950 49250 lineto +46900 49200 lineto +46860 49170 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 47670 moveto +45500 47670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 47280 moveto +49140 47300 lineto +49090 47370 lineto +49070 47420 lineto +49040 47490 lineto +49020 47610 lineto +49020 47710 lineto +49040 47820 lineto +49070 47900 lineto +49090 47940 lineto +49140 48020 lineto +49160 48040 lineto +stroke +newpath +49350 47470 moveto +49350 47970 lineto +49540 47970 lineto +49590 47940 lineto +49610 47920 lineto +49630 47870 lineto +49630 47800 lineto +49610 47750 lineto +49590 47730 lineto +49540 47710 lineto +49350 47710 lineto +stroke +newpath +50130 47520 moveto +50110 47490 lineto +50040 47470 lineto +49990 47470 lineto +49920 47490 lineto +49870 47540 lineto +49850 47590 lineto +49830 47680 lineto +49830 47750 lineto +49850 47850 lineto +49870 47900 lineto +49920 47940 lineto +49990 47970 lineto +50040 47970 lineto +50110 47940 lineto +50130 47920 lineto +stroke +newpath +50440 47970 moveto +50490 47970 lineto +50540 47940 lineto +50560 47920 lineto +50590 47870 lineto +50610 47780 lineto +50610 47660 lineto +50590 47560 lineto +50560 47520 lineto +50540 47490 lineto +50490 47470 lineto +50440 47470 lineto +50400 47490 lineto +50370 47520 lineto +50350 47560 lineto +50330 47660 lineto +50330 47780 lineto +50350 47870 lineto +50370 47920 lineto +50400 47940 lineto +50440 47970 lineto +stroke +newpath +50780 47280 moveto +50810 47300 lineto +50850 47370 lineto +50880 47420 lineto +50900 47490 lineto +50920 47610 lineto +50920 47710 lineto +50900 47820 lineto +50880 47900 lineto +50850 47940 lineto +50810 48020 lineto +50780 48040 lineto +stroke +newpath +51110 47970 moveto +51440 47470 lineto +stroke +newpath +51440 47970 moveto +51110 47470 lineto +stroke +newpath +51570 47970 moveto +51850 47970 lineto +stroke +newpath +51710 47470 moveto +51710 47970 lineto +stroke +newpath +52000 47610 moveto +52230 47610 lineto +stroke +newpath +51950 47470 moveto +52110 47970 lineto +52280 47470 lineto +stroke +newpath +52690 47470 moveto +52450 47470 lineto +52450 47970 lineto +stroke +newpath +52830 47920 moveto +52850 47940 lineto +52900 47970 lineto +53020 47970 lineto +53060 47940 lineto +53090 47920 lineto +53110 47870 lineto +53110 47820 lineto +53090 47750 lineto +52800 47470 lineto +53110 47470 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46860 48270 moveto +46880 48290 lineto +46930 48320 lineto +47050 48320 lineto +47090 48290 lineto +47120 48270 lineto +47140 48220 lineto +47140 48170 lineto +47120 48100 lineto +46830 47820 lineto +47140 47820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 46670 moveto +45500 46670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49280 46940 moveto +49230 46970 lineto +49160 46970 lineto +49090 46940 lineto +49040 46900 lineto +49020 46850 lineto +49000 46750 lineto +49000 46680 lineto +49020 46590 lineto +49040 46540 lineto +49090 46490 lineto +49160 46470 lineto +49210 46470 lineto +49280 46490 lineto +49300 46520 lineto +49300 46680 lineto +49210 46680 lineto +stroke +newpath +49520 46470 moveto +49520 46970 lineto +49800 46470 lineto +49800 46970 lineto +stroke +newpath +50040 46470 moveto +50040 46970 lineto +50160 46970 lineto +50230 46940 lineto +50280 46900 lineto +50300 46850 lineto +50320 46750 lineto +50320 46680 lineto +50300 46590 lineto +50280 46540 lineto +50230 46490 lineto +50160 46470 lineto +50040 46470 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46830 47320 moveto +47140 47320 lineto +46970 47130 lineto +47050 47130 lineto +47090 47100 lineto +47120 47080 lineto +47140 47030 lineto +47140 46910 lineto +47120 46870 lineto +47090 46840 lineto +47050 46820 lineto +46900 46820 lineto +46860 46840 lineto +46830 46870 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 45670 moveto +45500 45670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +48950 45970 moveto +49110 45470 lineto +49280 45970 lineto +stroke +newpath +49730 45520 moveto +49710 45490 lineto +49640 45470 lineto +49590 45470 lineto +49520 45490 lineto +49470 45540 lineto +49450 45590 lineto +49430 45680 lineto +49430 45750 lineto +49450 45850 lineto +49470 45900 lineto +49520 45940 lineto +49590 45970 lineto +49640 45970 lineto +49710 45940 lineto +49730 45920 lineto +stroke +newpath +50230 45520 moveto +50210 45490 lineto +50140 45470 lineto +50090 45470 lineto +50020 45490 lineto +49970 45540 lineto +49950 45590 lineto +49930 45680 lineto +49930 45750 lineto +49950 45850 lineto +49970 45900 lineto +50020 45940 lineto +50090 45970 lineto +50140 45970 lineto +50210 45940 lineto +50230 45920 lineto +stroke +0.627 0 0 setrgbcolor +newpath +47090 46150 moveto +47090 45820 lineto +stroke +newpath +46970 46340 moveto +46860 45980 lineto +47160 45980 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 44670 moveto +45500 44670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 44280 moveto +49140 44300 lineto +49090 44370 lineto +49070 44420 lineto +49040 44490 lineto +49020 44610 lineto +49020 44710 lineto +49040 44820 lineto +49070 44900 lineto +49090 44940 lineto +49140 45020 lineto +49160 45040 lineto +stroke +newpath +49350 44470 moveto +49350 44970 lineto +49540 44970 lineto +49590 44940 lineto +49610 44920 lineto +49630 44870 lineto +49630 44800 lineto +49610 44750 lineto +49590 44730 lineto +49540 44710 lineto +49350 44710 lineto +stroke +newpath +50130 44520 moveto +50110 44490 lineto +50040 44470 lineto +49990 44470 lineto +49920 44490 lineto +49870 44540 lineto +49850 44590 lineto +49830 44680 lineto +49830 44750 lineto +49850 44850 lineto +49870 44900 lineto +49920 44940 lineto +49990 44970 lineto +50040 44970 lineto +50110 44940 lineto +50130 44920 lineto +stroke +newpath +50350 44470 moveto +50350 44970 lineto +stroke +newpath +50590 44470 moveto +50590 44970 lineto +50870 44470 lineto +50870 44970 lineto +stroke +newpath +51040 44970 moveto +51320 44970 lineto +stroke +newpath +51180 44470 moveto +51180 44970 lineto +stroke +newpath +51750 44470 moveto +51470 44470 lineto +stroke +newpath +51610 44470 moveto +51610 44970 lineto +51560 44900 lineto +51510 44850 lineto +51470 44820 lineto +stroke +newpath +52230 44470 moveto +51950 44470 lineto +stroke +newpath +52090 44470 moveto +52090 44970 lineto +52040 44900 lineto +51990 44850 lineto +51950 44820 lineto +stroke +newpath +52810 44990 moveto +52380 44350 lineto +stroke +newpath +52950 44610 moveto +53180 44610 lineto +stroke +newpath +52900 44470 moveto +53060 44970 lineto +53230 44470 lineto +stroke +newpath +53400 44470 moveto +53400 44970 lineto +stroke +newpath +53640 44470 moveto +53640 44970 lineto +53920 44470 lineto +53920 44970 lineto +stroke +newpath +54140 44920 moveto +54160 44940 lineto +54210 44970 lineto +54330 44970 lineto +54370 44940 lineto +54400 44920 lineto +54420 44870 lineto +54420 44820 lineto +54400 44750 lineto +54110 44470 lineto +54420 44470 lineto +stroke +newpath +54590 44280 moveto +54620 44300 lineto +54660 44370 lineto +54690 44420 lineto +54710 44490 lineto +54730 44610 lineto +54730 44710 lineto +54710 44820 lineto +54690 44900 lineto +54660 44940 lineto +54620 45020 lineto +54590 45040 lineto +stroke +newpath +54970 44470 moveto +54970 44970 lineto +55160 44970 lineto +55210 44940 lineto +55230 44920 lineto +55250 44870 lineto +55250 44800 lineto +55230 44750 lineto +55210 44730 lineto +55160 44710 lineto +54970 44710 lineto +stroke +newpath +55750 44520 moveto +55730 44490 lineto +55660 44470 lineto +55610 44470 lineto +55540 44490 lineto +55490 44540 lineto +55470 44590 lineto +55450 44680 lineto +55450 44750 lineto +55470 44850 lineto +55490 44900 lineto +55540 44940 lineto +55610 44970 lineto +55660 44970 lineto +55730 44940 lineto +55750 44920 lineto +stroke +newpath +55950 44920 moveto +55970 44940 lineto +56020 44970 lineto +56140 44970 lineto +56180 44940 lineto +56210 44920 lineto +56230 44870 lineto +56230 44820 lineto +56210 44750 lineto +55920 44470 lineto +56230 44470 lineto +stroke +0.627 0 0 setrgbcolor +newpath +47120 45320 moveto +46880 45320 lineto +46860 45080 lineto +46880 45100 lineto +46930 45130 lineto +47050 45130 lineto +47090 45100 lineto +47120 45080 lineto +47140 45030 lineto +47140 44910 lineto +47120 44870 lineto +47090 44840 lineto +47050 44820 lineto +46930 44820 lineto +46880 44840 lineto +46860 44870 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 43670 moveto +45500 43670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 43280 moveto +49140 43300 lineto +49090 43370 lineto +49070 43420 lineto +49040 43490 lineto +49020 43610 lineto +49020 43710 lineto +49040 43820 lineto +49070 43900 lineto +49090 43940 lineto +49140 44020 lineto +49160 44040 lineto +stroke +newpath +49440 43970 moveto +49540 43970 lineto +49590 43940 lineto +49630 43900 lineto +49660 43800 lineto +49660 43630 lineto +49630 43540 lineto +49590 43490 lineto +49540 43470 lineto +49440 43470 lineto +49400 43490 lineto +49350 43540 lineto +49330 43630 lineto +49330 43800 lineto +49350 43900 lineto +49400 43940 lineto +49440 43970 lineto +stroke +newpath +50150 43520 moveto +50130 43490 lineto +50060 43470 lineto +50010 43470 lineto +49940 43490 lineto +49890 43540 lineto +49870 43590 lineto +49850 43680 lineto +49850 43750 lineto +49870 43850 lineto +49890 43900 lineto +49940 43940 lineto +50010 43970 lineto +50060 43970 lineto +50130 43940 lineto +50150 43920 lineto +stroke +newpath +50370 43520 moveto +50390 43490 lineto +50370 43470 lineto +50350 43490 lineto +50370 43520 lineto +50370 43470 lineto +stroke +newpath +50700 43970 moveto +50750 43970 lineto +50800 43940 lineto +50820 43920 lineto +50850 43870 lineto +50870 43780 lineto +50870 43660 lineto +50850 43560 lineto +50820 43520 lineto +50800 43490 lineto +50750 43470 lineto +50700 43470 lineto +50660 43490 lineto +50630 43520 lineto +50610 43560 lineto +50590 43660 lineto +50590 43780 lineto +50610 43870 lineto +50630 43920 lineto +50660 43940 lineto +50700 43970 lineto +stroke +newpath +51260 43730 moveto +51330 43710 lineto +51350 43680 lineto +51370 43630 lineto +51370 43560 lineto +51350 43520 lineto +51330 43490 lineto +51280 43470 lineto +51090 43470 lineto +51090 43970 lineto +51260 43970 lineto +51300 43940 lineto +51330 43920 lineto +51350 43870 lineto +51350 43820 lineto +51330 43780 lineto +51300 43750 lineto +51260 43730 lineto +51090 43730 lineto +stroke +newpath +51950 43990 moveto +51520 43350 lineto +stroke +newpath +52110 43470 moveto +52110 43970 lineto +stroke +newpath +52350 43470 moveto +52350 43970 lineto +52630 43470 lineto +52630 43970 lineto +stroke +newpath +52800 43970 moveto +53080 43970 lineto +stroke +newpath +52940 43470 moveto +52940 43970 lineto +stroke +newpath +53340 43970 moveto +53390 43970 lineto +53440 43940 lineto +53460 43920 lineto +53490 43870 lineto +53510 43780 lineto +53510 43660 lineto +53490 43560 lineto +53460 43520 lineto +53440 43490 lineto +53390 43470 lineto +53340 43470 lineto +53300 43490 lineto +53270 43520 lineto +53250 43560 lineto +53230 43660 lineto +53230 43780 lineto +53250 43870 lineto +53270 43920 lineto +53300 43940 lineto +53340 43970 lineto +stroke +newpath +53680 43280 moveto +53710 43300 lineto +53750 43370 lineto +53780 43420 lineto +53800 43490 lineto +53820 43610 lineto +53820 43710 lineto +53800 43820 lineto +53780 43900 lineto +53750 43940 lineto +53710 44020 lineto +53680 44040 lineto +stroke +newpath +54060 43470 moveto +54060 43970 lineto +54250 43970 lineto +54300 43940 lineto +54320 43920 lineto +54340 43870 lineto +54340 43800 lineto +54320 43750 lineto +54300 43730 lineto +54250 43710 lineto +54060 43710 lineto +stroke +newpath +54560 43470 moveto +54560 43970 lineto +54680 43970 lineto +54750 43940 lineto +54800 43900 lineto +54820 43850 lineto +54840 43750 lineto +54840 43680 lineto +54820 43590 lineto +54800 43540 lineto +54750 43490 lineto +54680 43470 lineto +54560 43470 lineto +stroke +newpath +55150 43970 moveto +55200 43970 lineto +55250 43940 lineto +55270 43920 lineto +55300 43870 lineto +55320 43780 lineto +55320 43660 lineto +55300 43560 lineto +55270 43520 lineto +55250 43490 lineto +55200 43470 lineto +55150 43470 lineto +55110 43490 lineto +55080 43520 lineto +55060 43560 lineto +55040 43660 lineto +55040 43780 lineto +55060 43870 lineto +55080 43920 lineto +55110 43940 lineto +55150 43970 lineto +stroke +0.627 0 0 setrgbcolor +newpath +47090 44320 moveto +47000 44320 lineto +46950 44290 lineto +46930 44270 lineto +46880 44200 lineto +46860 44100 lineto +46860 43910 lineto +46880 43870 lineto +46900 43840 lineto +46950 43820 lineto +47050 43820 lineto +47090 43840 lineto +47120 43870 lineto +47140 43910 lineto +47140 44030 lineto +47120 44080 lineto +47090 44100 lineto +47050 44130 lineto +46950 44130 lineto +46900 44100 lineto +46880 44080 lineto +46860 44030 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 42670 moveto +45500 42670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 42280 moveto +49140 42300 lineto +49090 42370 lineto +49070 42420 lineto +49040 42490 lineto +49020 42610 lineto +49020 42710 lineto +49040 42820 lineto +49070 42900 lineto +49090 42940 lineto +49140 43020 lineto +49160 43040 lineto +stroke +newpath +49330 42610 moveto +49560 42610 lineto +stroke +newpath +49280 42470 moveto +49440 42970 lineto +49610 42470 lineto +stroke +newpath +49780 42470 moveto +49780 42970 lineto +stroke +newpath +50020 42470 moveto +50020 42970 lineto +50300 42470 lineto +50300 42970 lineto +stroke +newpath +50630 42970 moveto +50680 42970 lineto +50730 42940 lineto +50750 42920 lineto +50780 42870 lineto +50800 42780 lineto +50800 42660 lineto +50780 42560 lineto +50750 42520 lineto +50730 42490 lineto +50680 42470 lineto +50630 42470 lineto +50590 42490 lineto +50560 42520 lineto +50540 42560 lineto +50520 42660 lineto +50520 42780 lineto +50540 42870 lineto +50560 42920 lineto +50590 42940 lineto +50630 42970 lineto +stroke +newpath +51380 42990 moveto +50950 42350 lineto +stroke +newpath +51540 42470 moveto +51540 42970 lineto +stroke +newpath +51780 42470 moveto +51780 42970 lineto +52060 42470 lineto +52060 42970 lineto +stroke +newpath +52230 42970 moveto +52510 42970 lineto +stroke +newpath +52370 42470 moveto +52370 42970 lineto +stroke +newpath +52940 42470 moveto +52660 42470 lineto +stroke +newpath +52800 42470 moveto +52800 42970 lineto +52750 42900 lineto +52700 42850 lineto +52660 42820 lineto +stroke +newpath +53110 42280 moveto +53140 42300 lineto +53180 42370 lineto +53210 42420 lineto +53230 42490 lineto +53250 42610 lineto +53250 42710 lineto +53230 42820 lineto +53210 42900 lineto +53180 42940 lineto +53140 43020 lineto +53110 43040 lineto +stroke +newpath +53490 42470 moveto +53490 42970 lineto +53680 42970 lineto +53730 42940 lineto +53750 42920 lineto +53770 42870 lineto +53770 42800 lineto +53750 42750 lineto +53730 42730 lineto +53680 42710 lineto +53490 42710 lineto +stroke +newpath +53990 42470 moveto +53990 42970 lineto +54110 42970 lineto +54180 42940 lineto +54230 42900 lineto +54250 42850 lineto +54270 42750 lineto +54270 42680 lineto +54250 42590 lineto +54230 42540 lineto +54180 42490 lineto +54110 42470 lineto +53990 42470 lineto +stroke +newpath +54750 42470 moveto +54470 42470 lineto +stroke +newpath +54610 42470 moveto +54610 42970 lineto +54560 42900 lineto +54510 42850 lineto +54470 42820 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46830 43320 moveto +47160 43320 lineto +46950 42820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 41670 moveto +45500 41670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 41280 moveto +49140 41300 lineto +49090 41370 lineto +49070 41420 lineto +49040 41490 lineto +49020 41610 lineto +49020 41710 lineto +49040 41820 lineto +49070 41900 lineto +49090 41940 lineto +49140 42020 lineto +49160 42040 lineto +stroke +newpath +49630 41470 moveto +49470 41710 lineto +stroke +newpath +49350 41470 moveto +49350 41970 lineto +49540 41970 lineto +49590 41940 lineto +49610 41920 lineto +49630 41870 lineto +49630 41800 lineto +49610 41750 lineto +49590 41730 lineto +49540 41710 lineto +49350 41710 lineto +stroke +newpath +49800 41970 moveto +50130 41470 lineto +stroke +newpath +50130 41970 moveto +49800 41470 lineto +stroke +newpath +50330 41470 moveto +50330 41970 lineto +50450 41970 lineto +50520 41940 lineto +50570 41900 lineto +50590 41850 lineto +50610 41750 lineto +50610 41680 lineto +50590 41590 lineto +50570 41540 lineto +50520 41490 lineto +50450 41470 lineto +50330 41470 lineto +stroke +newpath +51090 41470 moveto +50810 41470 lineto +stroke +newpath +50950 41470 moveto +50950 41970 lineto +50900 41900 lineto +50850 41850 lineto +50810 41820 lineto +stroke +newpath +51670 41990 moveto +51240 41350 lineto +stroke +newpath +51810 41610 moveto +52040 41610 lineto +stroke +newpath +51760 41470 moveto +51920 41970 lineto +52090 41470 lineto +stroke +newpath +52260 41470 moveto +52260 41970 lineto +stroke +newpath +52500 41470 moveto +52500 41970 lineto +52780 41470 lineto +52780 41970 lineto +stroke +newpath +53280 41470 moveto +53000 41470 lineto +stroke +newpath +53140 41470 moveto +53140 41970 lineto +53090 41900 lineto +53040 41850 lineto +53000 41820 lineto +stroke +newpath +53860 41990 moveto +53430 41350 lineto +stroke +newpath +54020 41470 moveto +54020 41970 lineto +stroke +newpath +54260 41470 moveto +54260 41970 lineto +54540 41470 lineto +54540 41970 lineto +stroke +newpath +54710 41970 moveto +54990 41970 lineto +stroke +newpath +54850 41470 moveto +54850 41970 lineto +stroke +newpath +55140 41920 moveto +55160 41940 lineto +55210 41970 lineto +55330 41970 lineto +55370 41940 lineto +55400 41920 lineto +55420 41870 lineto +55420 41820 lineto +55400 41750 lineto +55110 41470 lineto +55420 41470 lineto +stroke +newpath +55590 41280 moveto +55620 41300 lineto +55660 41370 lineto +55690 41420 lineto +55710 41490 lineto +55730 41610 lineto +55730 41710 lineto +55710 41820 lineto +55690 41900 lineto +55660 41940 lineto +55620 42020 lineto +55590 42040 lineto +stroke +newpath +55970 41470 moveto +55970 41970 lineto +56160 41970 lineto +56210 41940 lineto +56230 41920 lineto +56250 41870 lineto +56250 41800 lineto +56230 41750 lineto +56210 41730 lineto +56160 41710 lineto +55970 41710 lineto +stroke +newpath +56470 41470 moveto +56470 41970 lineto +56590 41970 lineto +56660 41940 lineto +56710 41900 lineto +56730 41850 lineto +56750 41750 lineto +56750 41680 lineto +56730 41590 lineto +56710 41540 lineto +56660 41490 lineto +56590 41470 lineto +56470 41470 lineto +stroke +newpath +56950 41920 moveto +56970 41940 lineto +57020 41970 lineto +57140 41970 lineto +57180 41940 lineto +57210 41920 lineto +57230 41870 lineto +57230 41820 lineto +57210 41750 lineto +56920 41470 lineto +57230 41470 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46950 42100 moveto +46900 42130 lineto +46880 42150 lineto +46860 42200 lineto +46860 42220 lineto +46880 42270 lineto +46900 42290 lineto +46950 42320 lineto +47050 42320 lineto +47090 42290 lineto +47120 42270 lineto +47140 42220 lineto +47140 42200 lineto +47120 42150 lineto +47090 42130 lineto +47050 42100 lineto +46950 42100 lineto +46900 42080 lineto +46880 42060 lineto +46860 42010 lineto +46860 41910 lineto +46880 41870 lineto +46900 41840 lineto +46950 41820 lineto +47050 41820 lineto +47090 41840 lineto +47120 41870 lineto +47140 41910 lineto +47140 42010 lineto +47120 42060 lineto +47090 42080 lineto +47050 42100 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 40170 moveto +45500 40170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 39780 moveto +49140 39800 lineto +49090 39870 lineto +49070 39920 lineto +49040 39990 lineto +49020 40110 lineto +49020 40210 lineto +49040 40320 lineto +49070 40400 lineto +49090 40440 lineto +49140 40520 lineto +49160 40540 lineto +stroke +newpath +49280 40470 moveto +49560 40470 lineto +stroke +newpath +49420 39970 moveto +49420 40470 lineto +stroke +newpath +49680 40470 moveto +50010 39970 lineto +stroke +newpath +50010 40470 moveto +49680 39970 lineto +stroke +newpath +50210 39970 moveto +50210 40470 lineto +50330 40470 lineto +50400 40440 lineto +50450 40400 lineto +50470 40350 lineto +50490 40250 lineto +50490 40180 lineto +50470 40090 lineto +50450 40040 lineto +50400 39990 lineto +50330 39970 lineto +50210 39970 lineto +stroke +newpath +50970 39970 moveto +50690 39970 lineto +stroke +newpath +50830 39970 moveto +50830 40470 lineto +50780 40400 lineto +50730 40350 lineto +50690 40320 lineto +stroke +newpath +51550 40490 moveto +51120 39850 lineto +stroke +newpath +51710 39970 moveto +51710 40470 lineto +stroke +newpath +51950 39970 moveto +51950 40470 lineto +52230 39970 lineto +52230 40470 lineto +stroke +newpath +52400 40470 moveto +52680 40470 lineto +stroke +newpath +52540 39970 moveto +52540 40470 lineto +stroke +newpath +52800 40470 moveto +53110 40470 lineto +52940 40280 lineto +53020 40280 lineto +53060 40250 lineto +53090 40230 lineto +53110 40180 lineto +53110 40060 lineto +53090 40020 lineto +53060 39990 lineto +53020 39970 lineto +52870 39970 lineto +52830 39990 lineto +52800 40020 lineto +stroke +newpath +53280 39780 moveto +53310 39800 lineto +53350 39870 lineto +53380 39920 lineto +53400 39990 lineto +53420 40110 lineto +53420 40210 lineto +53400 40320 lineto +53380 40400 lineto +53350 40440 lineto +53310 40520 lineto +53280 40540 lineto +stroke +newpath +53660 39970 moveto +53660 40470 lineto +53850 40470 lineto +53900 40440 lineto +53920 40420 lineto +53940 40370 lineto +53940 40300 lineto +53920 40250 lineto +53900 40230 lineto +53850 40210 lineto +53660 40210 lineto +stroke +newpath +54160 39970 moveto +54160 40470 lineto +54280 40470 lineto +54350 40440 lineto +54400 40400 lineto +54420 40350 lineto +54440 40250 lineto +54440 40180 lineto +54420 40090 lineto +54400 40040 lineto +54350 39990 lineto +54280 39970 lineto +54160 39970 lineto +stroke +newpath +54610 40470 moveto +54920 40470 lineto +54750 40280 lineto +54830 40280 lineto +54870 40250 lineto +54900 40230 lineto +54920 40180 lineto +54920 40060 lineto +54900 40020 lineto +54870 39990 lineto +54830 39970 lineto +54680 39970 lineto +54640 39990 lineto +54610 40020 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 40320 moveto +47000 40320 lineto +47050 40340 lineto +47070 40370 lineto +47120 40440 lineto +47140 40530 lineto +47140 40720 lineto +47120 40770 lineto +47090 40790 lineto +47050 40820 lineto +46950 40820 lineto +46900 40790 lineto +46880 40770 lineto +46860 40720 lineto +46860 40600 lineto +46880 40560 lineto +46900 40530 lineto +46950 40510 lineto +47050 40510 lineto +47090 40530 lineto +47120 40560 lineto +47140 40600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 39170 moveto +45500 39170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 38780 moveto +49140 38800 lineto +49090 38870 lineto +49070 38920 lineto +49040 38990 lineto +49020 39110 lineto +49020 39210 lineto +49040 39320 lineto +49070 39400 lineto +49090 39440 lineto +49140 39520 lineto +49160 39540 lineto +stroke +newpath +49350 38970 moveto +49350 39470 lineto +stroke +newpath +49590 38970 moveto +49590 39470 lineto +49870 38970 lineto +49870 39470 lineto +stroke +newpath +50040 39470 moveto +50320 39470 lineto +stroke +newpath +50180 38970 moveto +50180 39470 lineto +stroke +newpath +50730 39470 moveto +50490 39470 lineto +50470 39230 lineto +50490 39250 lineto +50540 39280 lineto +50660 39280 lineto +50700 39250 lineto +50730 39230 lineto +50750 39180 lineto +50750 39060 lineto +50730 39020 lineto +50700 38990 lineto +50660 38970 lineto +50540 38970 lineto +50490 38990 lineto +50470 39020 lineto +stroke +newpath +51330 39490 moveto +50900 38850 lineto +stroke +newpath +51470 39110 moveto +51700 39110 lineto +stroke +newpath +51420 38970 moveto +51580 39470 lineto +51750 38970 lineto +stroke +newpath +51920 38970 moveto +51920 39470 lineto +stroke +newpath +52160 38970 moveto +52160 39470 lineto +52440 38970 lineto +52440 39470 lineto +stroke +newpath +52630 39470 moveto +52940 39470 lineto +52770 39280 lineto +52850 39280 lineto +52890 39250 lineto +52920 39230 lineto +52940 39180 lineto +52940 39060 lineto +52920 39020 lineto +52890 38990 lineto +52850 38970 lineto +52700 38970 lineto +52660 38990 lineto +52630 39020 lineto +stroke +newpath +53110 38780 moveto +53140 38800 lineto +53180 38870 lineto +53210 38920 lineto +53230 38990 lineto +53250 39110 lineto +53250 39210 lineto +53230 39320 lineto +53210 39400 lineto +53180 39440 lineto +53140 39520 lineto +53110 39540 lineto +stroke +newpath +53490 38970 moveto +53490 39470 lineto +53680 39470 lineto +53730 39440 lineto +53750 39420 lineto +53770 39370 lineto +53770 39300 lineto +53750 39250 lineto +53730 39230 lineto +53680 39210 lineto +53490 39210 lineto +stroke +newpath +53990 38970 moveto +53990 39470 lineto +54110 39470 lineto +54180 39440 lineto +54230 39400 lineto +54250 39350 lineto +54270 39250 lineto +54270 39180 lineto +54250 39090 lineto +54230 39040 lineto +54180 38990 lineto +54110 38970 lineto +53990 38970 lineto +stroke +newpath +54700 39300 moveto +54700 38970 lineto +stroke +newpath +54580 39490 moveto +54470 39130 lineto +54770 39130 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 39320 moveto +46620 39320 lineto +stroke +newpath +46760 39320 moveto +46760 39820 lineto +46710 39750 lineto +46660 39700 lineto +46620 39670 lineto +stroke +newpath +47210 39820 moveto +47260 39820 lineto +47310 39790 lineto +47330 39770 lineto +47360 39720 lineto +47380 39630 lineto +47380 39510 lineto +47360 39410 lineto +47330 39370 lineto +47310 39340 lineto +47260 39320 lineto +47210 39320 lineto +47170 39340 lineto +47140 39370 lineto +47120 39410 lineto +47100 39510 lineto +47100 39630 lineto +47120 39720 lineto +47140 39770 lineto +47170 39790 lineto +47210 39820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 36170 moveto +74500 36170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +66460 35970 moveto +66460 36470 lineto +66650 36470 lineto +66700 36440 lineto +66720 36420 lineto +66740 36370 lineto +66740 36300 lineto +66720 36250 lineto +66700 36230 lineto +66650 36210 lineto +66460 36210 lineto +stroke +newpath +67130 36230 moveto +67200 36210 lineto +67220 36180 lineto +67240 36130 lineto +67240 36060 lineto +67220 36020 lineto +67200 35990 lineto +67150 35970 lineto +66960 35970 lineto +66960 36470 lineto +67130 36470 lineto +67170 36440 lineto +67200 36420 lineto +67220 36370 lineto +67220 36320 lineto +67200 36280 lineto +67170 36250 lineto +67130 36230 lineto +66960 36230 lineto +stroke +newpath +67670 36470 moveto +67580 36470 lineto +67530 36440 lineto +67510 36420 lineto +67460 36350 lineto +67440 36250 lineto +67440 36060 lineto +67460 36020 lineto +67480 35990 lineto +67530 35970 lineto +67630 35970 lineto +67670 35990 lineto +67700 36020 lineto +67720 36060 lineto +67720 36180 lineto +67700 36230 lineto +67670 36250 lineto +67630 36280 lineto +67530 36280 lineto +67480 36250 lineto +67460 36230 lineto +67440 36180 lineto +stroke +newpath +68080 35780 moveto +68060 35800 lineto +68010 35870 lineto +67990 35920 lineto +67960 35990 lineto +67940 36110 lineto +67940 36210 lineto +67960 36320 lineto +67990 36400 lineto +68010 36440 lineto +68060 36520 lineto +68080 36540 lineto +stroke +newpath +68270 35970 moveto +68270 36470 lineto +68460 36470 lineto +68510 36440 lineto +68530 36420 lineto +68550 36370 lineto +68550 36300 lineto +68530 36250 lineto +68510 36230 lineto +68460 36210 lineto +68270 36210 lineto +stroke +newpath +69050 36020 moveto +69030 35990 lineto +68960 35970 lineto +68910 35970 lineto +68840 35990 lineto +68790 36040 lineto +68770 36090 lineto +68750 36180 lineto +68750 36250 lineto +68770 36350 lineto +68790 36400 lineto +68840 36440 lineto +68910 36470 lineto +68960 36470 lineto +69030 36440 lineto +69050 36420 lineto +stroke +newpath +69270 35970 moveto +69270 36470 lineto +stroke +newpath +69510 35970 moveto +69510 36470 lineto +69790 35970 lineto +69790 36470 lineto +stroke +newpath +69960 36470 moveto +70240 36470 lineto +stroke +newpath +70100 35970 moveto +70100 36470 lineto +stroke +newpath +70620 36470 moveto +70530 36470 lineto +70480 36440 lineto +70460 36420 lineto +70410 36350 lineto +70390 36250 lineto +70390 36060 lineto +70410 36020 lineto +70430 35990 lineto +70480 35970 lineto +70580 35970 lineto +70620 35990 lineto +70650 36020 lineto +70670 36060 lineto +70670 36180 lineto +70650 36230 lineto +70620 36250 lineto +70580 36280 lineto +70480 36280 lineto +70430 36250 lineto +70410 36230 lineto +70390 36180 lineto +stroke +newpath +70840 35780 moveto +70870 35800 lineto +70910 35870 lineto +70940 35920 lineto +70960 35990 lineto +70980 36110 lineto +70980 36210 lineto +70960 36320 lineto +70940 36400 lineto +70910 36440 lineto +70870 36520 lineto +70840 36540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 36770 moveto +72640 36790 lineto +72690 36820 lineto +72810 36820 lineto +72850 36790 lineto +72880 36770 lineto +72900 36720 lineto +72900 36670 lineto +72880 36600 lineto +72590 36320 lineto +72900 36320 lineto +stroke +newpath +73210 36820 moveto +73260 36820 lineto +73310 36790 lineto +73330 36770 lineto +73360 36720 lineto +73380 36630 lineto +73380 36510 lineto +73360 36410 lineto +73330 36370 lineto +73310 36340 lineto +73260 36320 lineto +73210 36320 lineto +73170 36340 lineto +73140 36370 lineto +73120 36410 lineto +73100 36510 lineto +73100 36630 lineto +73120 36720 lineto +73140 36770 lineto +73170 36790 lineto +73210 36820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 46670 moveto +74500 46670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +70100 46470 moveto +70100 46970 lineto +70220 46970 lineto +70290 46940 lineto +70340 46900 lineto +70360 46850 lineto +70380 46750 lineto +70380 46680 lineto +70360 46590 lineto +70340 46540 lineto +70290 46490 lineto +70220 46470 lineto +70100 46470 lineto +stroke +newpath +70600 46660 moveto +70980 46660 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72590 47320 moveto +72900 47320 lineto +72730 47130 lineto +72810 47130 lineto +72850 47100 lineto +72880 47080 lineto +72900 47030 lineto +72900 46910 lineto +72880 46870 lineto +72850 46840 lineto +72810 46820 lineto +72660 46820 lineto +72620 46840 lineto +72590 46870 lineto +stroke +newpath +73210 47320 moveto +73260 47320 lineto +73310 47290 lineto +73330 47270 lineto +73360 47220 lineto +73380 47130 lineto +73380 47010 lineto +73360 46910 lineto +73330 46870 lineto +73310 46840 lineto +73260 46820 lineto +73210 46820 lineto +73170 46840 lineto +73140 46870 lineto +73120 46910 lineto +73100 47010 lineto +73100 47130 lineto +73120 47220 lineto +73140 47270 lineto +73170 47290 lineto +73210 47320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 38170 moveto +45500 38170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 37780 moveto +49140 37800 lineto +49090 37870 lineto +49070 37920 lineto +49040 37990 lineto +49020 38110 lineto +49020 38210 lineto +49040 38320 lineto +49070 38400 lineto +49090 38440 lineto +49140 38520 lineto +49160 38540 lineto +stroke +newpath +49300 38470 moveto +49630 37970 lineto +stroke +newpath +49630 38470 moveto +49300 37970 lineto +stroke +newpath +50110 38020 moveto +50090 37990 lineto +50020 37970 lineto +49970 37970 lineto +49900 37990 lineto +49850 38040 lineto +49830 38090 lineto +49810 38180 lineto +49810 38250 lineto +49830 38350 lineto +49850 38400 lineto +49900 38440 lineto +49970 38470 lineto +50020 38470 lineto +50090 38440 lineto +50110 38420 lineto +stroke +newpath +50330 37970 moveto +50330 38470 lineto +stroke +newpath +50610 37970 moveto +50400 38250 lineto +stroke +newpath +50610 38470 moveto +50330 38180 lineto +stroke +newpath +51190 38490 moveto +50760 37850 lineto +stroke +newpath +51330 38110 moveto +51560 38110 lineto +stroke +newpath +51280 37970 moveto +51440 38470 lineto +51610 37970 lineto +stroke +newpath +51780 37970 moveto +51780 38470 lineto +stroke +newpath +52020 37970 moveto +52020 38470 lineto +52300 37970 lineto +52300 38470 lineto +stroke +newpath +52750 38300 moveto +52750 37970 lineto +stroke +newpath +52630 38490 moveto +52520 38130 lineto +52820 38130 lineto +stroke +newpath +53380 38490 moveto +52950 37850 lineto +stroke +newpath +53540 37970 moveto +53540 38470 lineto +53730 38470 lineto +53780 38440 lineto +53800 38420 lineto +53820 38370 lineto +53820 38300 lineto +53800 38250 lineto +53780 38230 lineto +53730 38210 lineto +53540 38210 lineto +stroke +newpath +54320 38020 moveto +54300 37990 lineto +54230 37970 lineto +54180 37970 lineto +54110 37990 lineto +54060 38040 lineto +54040 38090 lineto +54020 38180 lineto +54020 38250 lineto +54040 38350 lineto +54060 38400 lineto +54110 38440 lineto +54180 38470 lineto +54230 38470 lineto +54300 38440 lineto +54320 38420 lineto +stroke +newpath +54540 37970 moveto +54540 38470 lineto +stroke +newpath +54780 37970 moveto +54780 38470 lineto +55060 37970 lineto +55060 38470 lineto +stroke +newpath +55230 38470 moveto +55510 38470 lineto +stroke +newpath +55370 37970 moveto +55370 38470 lineto +stroke +newpath +55940 37970 moveto +55660 37970 lineto +stroke +newpath +55800 37970 moveto +55800 38470 lineto +55750 38400 lineto +55700 38350 lineto +55660 38320 lineto +stroke +newpath +56140 38420 moveto +56160 38440 lineto +56210 38470 lineto +56330 38470 lineto +56370 38440 lineto +56400 38420 lineto +56420 38370 lineto +56420 38320 lineto +56400 38250 lineto +56110 37970 lineto +56420 37970 lineto +stroke +newpath +56590 37780 moveto +56620 37800 lineto +56660 37870 lineto +56690 37920 lineto +56710 37990 lineto +56730 38110 lineto +56730 38210 lineto +56710 38320 lineto +56690 38400 lineto +56660 38440 lineto +56620 38520 lineto +56590 38540 lineto +stroke +newpath +56970 37970 moveto +56970 38470 lineto +57160 38470 lineto +57210 38440 lineto +57230 38420 lineto +57250 38370 lineto +57250 38300 lineto +57230 38250 lineto +57210 38230 lineto +57160 38210 lineto +56970 38210 lineto +stroke +newpath +57470 37970 moveto +57470 38470 lineto +57590 38470 lineto +57660 38440 lineto +57710 38400 lineto +57730 38350 lineto +57750 38250 lineto +57750 38180 lineto +57730 38090 lineto +57710 38040 lineto +57660 37990 lineto +57590 37970 lineto +57470 37970 lineto +stroke +newpath +58210 38470 moveto +57970 38470 lineto +57950 38230 lineto +57970 38250 lineto +58020 38280 lineto +58140 38280 lineto +58180 38250 lineto +58210 38230 lineto +58230 38180 lineto +58230 38060 lineto +58210 38020 lineto +58180 37990 lineto +58140 37970 lineto +58020 37970 lineto +57970 37990 lineto +57950 38020 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 38320 moveto +46620 38320 lineto +stroke +newpath +46760 38320 moveto +46760 38820 lineto +46710 38750 lineto +46660 38700 lineto +46620 38670 lineto +stroke +newpath +47380 38320 moveto +47100 38320 lineto +stroke +newpath +47240 38320 moveto +47240 38820 lineto +47190 38750 lineto +47140 38700 lineto +47100 38670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 37170 moveto +74500 37170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +61010 36970 moveto +61010 37470 lineto +61200 37470 lineto +61250 37440 lineto +61270 37420 lineto +61290 37370 lineto +61290 37300 lineto +61270 37250 lineto +61250 37230 lineto +61200 37210 lineto +61010 37210 lineto +stroke +newpath +61680 37230 moveto +61750 37210 lineto +61770 37180 lineto +61790 37130 lineto +61790 37060 lineto +61770 37020 lineto +61750 36990 lineto +61700 36970 lineto +61510 36970 lineto +61510 37470 lineto +61680 37470 lineto +61720 37440 lineto +61750 37420 lineto +61770 37370 lineto +61770 37320 lineto +61750 37280 lineto +61720 37250 lineto +61680 37230 lineto +61510 37230 lineto +stroke +newpath +61960 37470 moveto +62290 37470 lineto +62080 36970 lineto +stroke +newpath +62630 36780 moveto +62610 36800 lineto +62560 36870 lineto +62540 36920 lineto +62510 36990 lineto +62490 37110 lineto +62490 37210 lineto +62510 37320 lineto +62540 37400 lineto +62560 37440 lineto +62610 37520 lineto +62630 37540 lineto +stroke +newpath +62820 36970 moveto +62820 37470 lineto +63010 37470 lineto +63060 37440 lineto +63080 37420 lineto +63100 37370 lineto +63100 37300 lineto +63080 37250 lineto +63060 37230 lineto +63010 37210 lineto +62820 37210 lineto +stroke +newpath +63600 37020 moveto +63580 36990 lineto +63510 36970 lineto +63460 36970 lineto +63390 36990 lineto +63340 37040 lineto +63320 37090 lineto +63300 37180 lineto +63300 37250 lineto +63320 37350 lineto +63340 37400 lineto +63390 37440 lineto +63460 37470 lineto +63510 37470 lineto +63580 37440 lineto +63600 37420 lineto +stroke +newpath +63820 36970 moveto +63820 37470 lineto +stroke +newpath +64060 36970 moveto +64060 37470 lineto +64340 36970 lineto +64340 37470 lineto +stroke +newpath +64510 37470 moveto +64790 37470 lineto +stroke +newpath +64650 36970 moveto +64650 37470 lineto +stroke +newpath +64910 37470 moveto +65240 37470 lineto +65030 36970 lineto +stroke +newpath +65800 37490 moveto +65370 36850 lineto +stroke +newpath +66050 37470 moveto +66150 37470 lineto +66200 37440 lineto +66240 37400 lineto +66270 37300 lineto +66270 37130 lineto +66240 37040 lineto +66200 36990 lineto +66150 36970 lineto +66050 36970 lineto +66010 36990 lineto +65960 37040 lineto +65940 37130 lineto +65940 37300 lineto +65960 37400 lineto +66010 37440 lineto +66050 37470 lineto +stroke +newpath +66760 37020 moveto +66740 36990 lineto +66670 36970 lineto +66620 36970 lineto +66550 36990 lineto +66500 37040 lineto +66480 37090 lineto +66460 37180 lineto +66460 37250 lineto +66480 37350 lineto +66500 37400 lineto +66550 37440 lineto +66620 37470 lineto +66670 37470 lineto +66740 37440 lineto +66760 37420 lineto +stroke +newpath +66980 37020 moveto +67000 36990 lineto +66980 36970 lineto +66960 36990 lineto +66980 37020 lineto +66980 36970 lineto +stroke +newpath +67310 37470 moveto +67360 37470 lineto +67410 37440 lineto +67430 37420 lineto +67460 37370 lineto +67480 37280 lineto +67480 37160 lineto +67460 37060 lineto +67430 37020 lineto +67410 36990 lineto +67360 36970 lineto +67310 36970 lineto +67270 36990 lineto +67240 37020 lineto +67220 37060 lineto +67200 37160 lineto +67200 37280 lineto +67220 37370 lineto +67240 37420 lineto +67270 37440 lineto +67310 37470 lineto +stroke +newpath +67680 37110 moveto +67910 37110 lineto +stroke +newpath +67630 36970 moveto +67790 37470 lineto +67960 36970 lineto +stroke +newpath +68490 37490 moveto +68060 36850 lineto +stroke +newpath +68740 37470 moveto +68840 37470 lineto +68890 37440 lineto +68930 37400 lineto +68960 37300 lineto +68960 37130 lineto +68930 37040 lineto +68890 36990 lineto +68840 36970 lineto +68740 36970 lineto +68700 36990 lineto +68650 37040 lineto +68630 37130 lineto +68630 37300 lineto +68650 37400 lineto +68700 37440 lineto +68740 37470 lineto +stroke +newpath +69450 37020 moveto +69430 36990 lineto +69360 36970 lineto +69310 36970 lineto +69240 36990 lineto +69190 37040 lineto +69170 37090 lineto +69150 37180 lineto +69150 37250 lineto +69170 37350 lineto +69190 37400 lineto +69240 37440 lineto +69310 37470 lineto +69360 37470 lineto +69430 37440 lineto +69450 37420 lineto +stroke +newpath +69670 37020 moveto +69690 36990 lineto +69670 36970 lineto +69650 36990 lineto +69670 37020 lineto +69670 36970 lineto +stroke +newpath +70170 36970 moveto +69890 36970 lineto +stroke +newpath +70030 36970 moveto +70030 37470 lineto +69980 37400 lineto +69930 37350 lineto +69890 37320 lineto +stroke +newpath +70670 37020 moveto +70650 36990 lineto +70580 36970 lineto +70530 36970 lineto +70460 36990 lineto +70410 37040 lineto +70390 37090 lineto +70370 37180 lineto +70370 37250 lineto +70390 37350 lineto +70410 37400 lineto +70460 37440 lineto +70530 37470 lineto +70580 37470 lineto +70650 37440 lineto +70670 37420 lineto +stroke +newpath +70840 36780 moveto +70870 36800 lineto +70910 36870 lineto +70940 36920 lineto +70960 36990 lineto +70980 37110 lineto +70980 37210 lineto +70960 37320 lineto +70940 37400 lineto +70910 37440 lineto +70870 37520 lineto +70840 37540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 37770 moveto +72640 37790 lineto +72690 37820 lineto +72810 37820 lineto +72850 37790 lineto +72880 37770 lineto +72900 37720 lineto +72900 37670 lineto +72880 37600 lineto +72590 37320 lineto +72900 37320 lineto +stroke +newpath +73380 37320 moveto +73100 37320 lineto +stroke +newpath +73240 37320 moveto +73240 37820 lineto +73190 37750 lineto +73140 37700 lineto +73100 37670 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 47670 moveto +74500 47670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +69270 47970 moveto +69270 47560 lineto +69290 47520 lineto +69320 47490 lineto +69360 47470 lineto +69460 47470 lineto +69510 47490 lineto +69530 47520 lineto +69550 47560 lineto +69550 47970 lineto +stroke +newpath +69720 47970 moveto +69880 47470 lineto +70050 47970 lineto +stroke +newpath +70500 47520 moveto +70480 47490 lineto +70410 47470 lineto +70360 47470 lineto +70290 47490 lineto +70240 47540 lineto +70220 47590 lineto +70200 47680 lineto +70200 47750 lineto +70220 47850 lineto +70240 47900 lineto +70290 47940 lineto +70360 47970 lineto +70410 47970 lineto +70480 47940 lineto +70500 47920 lineto +stroke +newpath +71000 47520 moveto +70980 47490 lineto +70910 47470 lineto +70860 47470 lineto +70790 47490 lineto +70740 47540 lineto +70720 47590 lineto +70700 47680 lineto +70700 47750 lineto +70720 47850 lineto +70740 47900 lineto +70790 47940 lineto +70860 47970 lineto +70910 47970 lineto +70980 47940 lineto +71000 47920 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72590 48320 moveto +72900 48320 lineto +72730 48130 lineto +72810 48130 lineto +72850 48100 lineto +72880 48080 lineto +72900 48030 lineto +72900 47910 lineto +72880 47870 lineto +72850 47840 lineto +72810 47820 lineto +72660 47820 lineto +72620 47840 lineto +72590 47870 lineto +stroke +newpath +73380 47820 moveto +73100 47820 lineto +stroke +newpath +73240 47820 moveto +73240 48320 lineto +73190 48250 lineto +73140 48200 lineto +73100 48170 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 37170 moveto +45500 37170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 36780 moveto +49140 36800 lineto +49090 36870 lineto +49070 36920 lineto +49040 36990 lineto +49020 37110 lineto +49020 37210 lineto +49040 37320 lineto +49070 37400 lineto +49090 37440 lineto +49140 37520 lineto +49160 37540 lineto +stroke +newpath +49630 36970 moveto +49470 37210 lineto +stroke +newpath +49350 36970 moveto +49350 37470 lineto +49540 37470 lineto +49590 37440 lineto +49610 37420 lineto +49630 37370 lineto +49630 37300 lineto +49610 37250 lineto +49590 37230 lineto +49540 37210 lineto +49350 37210 lineto +stroke +newpath +49780 37470 moveto +50060 37470 lineto +stroke +newpath +49920 36970 moveto +49920 37470 lineto +stroke +newpath +50210 36990 moveto +50280 36970 lineto +50400 36970 lineto +50440 36990 lineto +50470 37020 lineto +50490 37060 lineto +50490 37110 lineto +50470 37160 lineto +50440 37180 lineto +50400 37210 lineto +50300 37230 lineto +50250 37250 lineto +50230 37280 lineto +50210 37320 lineto +50210 37370 lineto +50230 37420 lineto +50250 37440 lineto +50300 37470 lineto +50420 37470 lineto +50490 37440 lineto +stroke +newpath +49230 37630 moveto +50590 37630 lineto +stroke +newpath +51070 37490 moveto +50640 36850 lineto +stroke +newpath +51210 37110 moveto +51440 37110 lineto +stroke +newpath +51160 36970 moveto +51320 37470 lineto +51490 36970 lineto +stroke +newpath +51660 36970 moveto +51660 37470 lineto +stroke +newpath +51900 36970 moveto +51900 37470 lineto +52180 36970 lineto +52180 37470 lineto +stroke +newpath +52660 37470 moveto +52420 37470 lineto +52400 37230 lineto +52420 37250 lineto +52470 37280 lineto +52590 37280 lineto +52630 37250 lineto +52660 37230 lineto +52680 37180 lineto +52680 37060 lineto +52660 37020 lineto +52630 36990 lineto +52590 36970 lineto +52470 36970 lineto +52420 36990 lineto +52400 37020 lineto +stroke +newpath +53260 37490 moveto +52830 36850 lineto +stroke +newpath +53420 36970 moveto +53420 37470 lineto +stroke +newpath +53660 36970 moveto +53660 37470 lineto +53940 36970 lineto +53940 37470 lineto +stroke +newpath +54110 37470 moveto +54390 37470 lineto +stroke +newpath +54250 36970 moveto +54250 37470 lineto +stroke +newpath +54770 37470 moveto +54680 37470 lineto +54630 37440 lineto +54610 37420 lineto +54560 37350 lineto +54540 37250 lineto +54540 37060 lineto +54560 37020 lineto +54580 36990 lineto +54630 36970 lineto +54730 36970 lineto +54770 36990 lineto +54800 37020 lineto +54820 37060 lineto +54820 37180 lineto +54800 37230 lineto +54770 37250 lineto +54730 37280 lineto +54630 37280 lineto +54580 37250 lineto +54560 37230 lineto +54540 37180 lineto +stroke +newpath +54990 36780 moveto +55020 36800 lineto +55060 36870 lineto +55090 36920 lineto +55110 36990 lineto +55130 37110 lineto +55130 37210 lineto +55110 37320 lineto +55090 37400 lineto +55060 37440 lineto +55020 37520 lineto +54990 37540 lineto +stroke +newpath +55370 36970 moveto +55370 37470 lineto +55560 37470 lineto +55610 37440 lineto +55630 37420 lineto +55650 37370 lineto +55650 37300 lineto +55630 37250 lineto +55610 37230 lineto +55560 37210 lineto +55370 37210 lineto +stroke +newpath +55870 36970 moveto +55870 37470 lineto +55990 37470 lineto +56060 37440 lineto +56110 37400 lineto +56130 37350 lineto +56150 37250 lineto +56150 37180 lineto +56130 37090 lineto +56110 37040 lineto +56060 36990 lineto +55990 36970 lineto +55870 36970 lineto +stroke +newpath +56580 37470 moveto +56490 37470 lineto +56440 37440 lineto +56420 37420 lineto +56370 37350 lineto +56350 37250 lineto +56350 37060 lineto +56370 37020 lineto +56390 36990 lineto +56440 36970 lineto +56540 36970 lineto +56580 36990 lineto +56610 37020 lineto +56630 37060 lineto +56630 37180 lineto +56610 37230 lineto +56580 37250 lineto +56540 37280 lineto +56440 37280 lineto +56390 37250 lineto +56370 37230 lineto +56350 37180 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 37320 moveto +46620 37320 lineto +stroke +newpath +46760 37320 moveto +46760 37820 lineto +46710 37750 lineto +46660 37700 lineto +46620 37670 lineto +stroke +newpath +47100 37770 moveto +47120 37790 lineto +47170 37820 lineto +47290 37820 lineto +47330 37790 lineto +47360 37770 lineto +47380 37720 lineto +47380 37670 lineto +47360 37600 lineto +47070 37320 lineto +47380 37320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 38170 moveto +74500 38170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +62780 37970 moveto +62780 38470 lineto +62970 38470 lineto +63020 38440 lineto +63040 38420 lineto +63060 38370 lineto +63060 38300 lineto +63040 38250 lineto +63020 38230 lineto +62970 38210 lineto +62780 38210 lineto +stroke +newpath +63560 38020 moveto +63540 37990 lineto +63470 37970 lineto +63420 37970 lineto +63350 37990 lineto +63300 38040 lineto +63280 38090 lineto +63260 38180 lineto +63260 38250 lineto +63280 38350 lineto +63300 38400 lineto +63350 38440 lineto +63420 38470 lineto +63470 38470 lineto +63540 38440 lineto +63560 38420 lineto +stroke +newpath +63730 38470 moveto +64060 38470 lineto +63850 37970 lineto +stroke +newpath +64400 37780 moveto +64380 37800 lineto +64330 37870 lineto +64310 37920 lineto +64280 37990 lineto +64260 38110 lineto +64260 38210 lineto +64280 38320 lineto +64310 38400 lineto +64330 38440 lineto +64380 38520 lineto +64400 38540 lineto +stroke +newpath +64590 37970 moveto +64590 38470 lineto +stroke +newpath +64830 37970 moveto +64830 38470 lineto +65110 37970 lineto +65110 38470 lineto +stroke +newpath +65280 38470 moveto +65560 38470 lineto +stroke +newpath +65420 37970 moveto +65420 38470 lineto +stroke +newpath +65940 38300 moveto +65940 37970 lineto +stroke +newpath +65820 38490 moveto +65710 38130 lineto +66010 38130 lineto +stroke +newpath +66570 38490 moveto +66140 37850 lineto +stroke +newpath +66730 37970 moveto +66730 38470 lineto +stroke +newpath +67250 38020 moveto +67230 37990 lineto +67160 37970 lineto +67110 37970 lineto +67040 37990 lineto +66990 38040 lineto +66970 38090 lineto +66950 38180 lineto +66950 38250 lineto +66970 38350 lineto +66990 38400 lineto +67040 38440 lineto +67110 38470 lineto +67160 38470 lineto +67230 38440 lineto +67250 38420 lineto +stroke +newpath +67470 37970 moveto +67470 38470 lineto +67660 38470 lineto +67710 38440 lineto +67730 38420 lineto +67750 38370 lineto +67750 38300 lineto +67730 38250 lineto +67710 38230 lineto +67660 38210 lineto +67470 38210 lineto +stroke +newpath +68230 37970 moveto +67950 37970 lineto +stroke +newpath +68090 37970 moveto +68090 38470 lineto +68040 38400 lineto +67990 38350 lineto +67950 38320 lineto +stroke +newpath +68810 38490 moveto +68380 37850 lineto +stroke +newpath +69250 38020 moveto +69230 37990 lineto +69160 37970 lineto +69110 37970 lineto +69040 37990 lineto +68990 38040 lineto +68970 38090 lineto +68950 38180 lineto +68950 38250 lineto +68970 38350 lineto +68990 38400 lineto +69040 38440 lineto +69110 38470 lineto +69160 38470 lineto +69230 38440 lineto +69250 38420 lineto +stroke +newpath +69710 37970 moveto +69470 37970 lineto +69470 38470 lineto +stroke +newpath +69870 37970 moveto +69870 38470 lineto +stroke +newpath +70150 37970 moveto +69940 38250 lineto +stroke +newpath +70150 38470 moveto +69870 38180 lineto +stroke +newpath +70460 38470 moveto +70560 38470 lineto +70610 38440 lineto +70650 38400 lineto +70680 38300 lineto +70680 38130 lineto +70650 38040 lineto +70610 37990 lineto +70560 37970 lineto +70460 37970 lineto +70420 37990 lineto +70370 38040 lineto +70350 38130 lineto +70350 38300 lineto +70370 38400 lineto +70420 38440 lineto +70460 38470 lineto +stroke +newpath +70840 37780 moveto +70870 37800 lineto +70910 37870 lineto +70940 37920 lineto +70960 37990 lineto +70980 38110 lineto +70980 38210 lineto +70960 38320 lineto +70940 38400 lineto +70910 38440 lineto +70870 38520 lineto +70840 38540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 38770 moveto +72640 38790 lineto +72690 38820 lineto +72810 38820 lineto +72850 38790 lineto +72880 38770 lineto +72900 38720 lineto +72900 38670 lineto +72880 38600 lineto +72590 38320 lineto +72900 38320 lineto +stroke +newpath +73100 38770 moveto +73120 38790 lineto +73170 38820 lineto +73290 38820 lineto +73330 38790 lineto +73360 38770 lineto +73380 38720 lineto +73380 38670 lineto +73360 38600 lineto +73070 38320 lineto +73380 38320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 48670 moveto +74500 48670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +69340 48610 moveto +69570 48610 lineto +stroke +newpath +69290 48470 moveto +69450 48970 lineto +69620 48470 lineto +stroke +newpath +69720 48970 moveto +69880 48470 lineto +70050 48970 lineto +stroke +newpath +70500 48520 moveto +70480 48490 lineto +70410 48470 lineto +70360 48470 lineto +70290 48490 lineto +70240 48540 lineto +70220 48590 lineto +70200 48680 lineto +70200 48750 lineto +70220 48850 lineto +70240 48900 lineto +70290 48940 lineto +70360 48970 lineto +70410 48970 lineto +70480 48940 lineto +70500 48920 lineto +stroke +newpath +71000 48520 moveto +70980 48490 lineto +70910 48470 lineto +70860 48470 lineto +70790 48490 lineto +70740 48540 lineto +70720 48590 lineto +70700 48680 lineto +70700 48750 lineto +70720 48850 lineto +70740 48900 lineto +70790 48940 lineto +70860 48970 lineto +70910 48970 lineto +70980 48940 lineto +71000 48920 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72590 49320 moveto +72900 49320 lineto +72730 49130 lineto +72810 49130 lineto +72850 49100 lineto +72880 49080 lineto +72900 49030 lineto +72900 48910 lineto +72880 48870 lineto +72850 48840 lineto +72810 48820 lineto +72660 48820 lineto +72620 48840 lineto +72590 48870 lineto +stroke +newpath +73100 49270 moveto +73120 49290 lineto +73170 49320 lineto +73290 49320 lineto +73330 49290 lineto +73360 49270 lineto +73380 49220 lineto +73380 49170 lineto +73360 49100 lineto +73070 48820 lineto +73380 48820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 36170 moveto +45500 36170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 35780 moveto +49140 35800 lineto +49090 35870 lineto +49070 35920 lineto +49040 35990 lineto +49020 36110 lineto +49020 36210 lineto +49040 36320 lineto +49070 36400 lineto +49090 36440 lineto +49140 36520 lineto +49160 36540 lineto +stroke +newpath +49630 36020 moveto +49610 35990 lineto +49540 35970 lineto +49490 35970 lineto +49420 35990 lineto +49370 36040 lineto +49350 36090 lineto +49330 36180 lineto +49330 36250 lineto +49350 36350 lineto +49370 36400 lineto +49420 36440 lineto +49490 36470 lineto +49540 36470 lineto +49610 36440 lineto +49630 36420 lineto +stroke +newpath +49780 36470 moveto +50060 36470 lineto +stroke +newpath +49920 35970 moveto +49920 36470 lineto +stroke +newpath +50210 35990 moveto +50280 35970 lineto +50400 35970 lineto +50440 35990 lineto +50470 36020 lineto +50490 36060 lineto +50490 36110 lineto +50470 36160 lineto +50440 36180 lineto +50400 36210 lineto +50300 36230 lineto +50250 36250 lineto +50230 36280 lineto +50210 36320 lineto +50210 36370 lineto +50230 36420 lineto +50250 36440 lineto +50300 36470 lineto +50420 36470 lineto +50490 36440 lineto +stroke +newpath +49230 36630 moveto +50590 36630 lineto +stroke +newpath +51070 36490 moveto +50640 35850 lineto +stroke +newpath +51230 35970 moveto +51230 36470 lineto +stroke +newpath +51230 36230 moveto +51510 36230 lineto +stroke +newpath +51510 35970 moveto +51510 36470 lineto +stroke +newpath +51700 36470 moveto +51820 35970 lineto +51920 36320 lineto +52010 35970 lineto +52130 36470 lineto +stroke +newpath +52490 36230 moveto +52560 36210 lineto +52580 36180 lineto +52600 36130 lineto +52600 36060 lineto +52580 36020 lineto +52560 35990 lineto +52510 35970 lineto +52320 35970 lineto +52320 36470 lineto +52490 36470 lineto +52530 36440 lineto +52560 36420 lineto +52580 36370 lineto +52580 36320 lineto +52560 36280 lineto +52530 36250 lineto +52490 36230 lineto +52320 36230 lineto +stroke +newpath +51110 36630 moveto +52700 36630 lineto +stroke +newpath +53180 36490 moveto +52750 35850 lineto +stroke +newpath +53320 36110 moveto +53550 36110 lineto +stroke +newpath +53270 35970 moveto +53430 36470 lineto +53600 35970 lineto +stroke +newpath +53770 35970 moveto +53770 36470 lineto +stroke +newpath +54010 35970 moveto +54010 36470 lineto +54290 35970 lineto +54290 36470 lineto +stroke +newpath +54740 36470 moveto +54650 36470 lineto +54600 36440 lineto +54580 36420 lineto +54530 36350 lineto +54510 36250 lineto +54510 36060 lineto +54530 36020 lineto +54550 35990 lineto +54600 35970 lineto +54700 35970 lineto +54740 35990 lineto +54770 36020 lineto +54790 36060 lineto +54790 36180 lineto +54770 36230 lineto +54740 36250 lineto +54700 36280 lineto +54600 36280 lineto +54550 36250 lineto +54530 36230 lineto +54510 36180 lineto +stroke +newpath +55370 36490 moveto +54940 35850 lineto +stroke +newpath +55460 36470 moveto +55740 36470 lineto +stroke +newpath +55600 35970 moveto +55600 36470 lineto +stroke +newpath +56000 36470 moveto +56050 36470 lineto +56100 36440 lineto +56120 36420 lineto +56150 36370 lineto +56170 36280 lineto +56170 36160 lineto +56150 36060 lineto +56120 36020 lineto +56100 35990 lineto +56050 35970 lineto +56000 35970 lineto +55960 35990 lineto +55930 36020 lineto +55910 36060 lineto +55890 36160 lineto +55890 36280 lineto +55910 36370 lineto +55930 36420 lineto +55960 36440 lineto +56000 36470 lineto +stroke +newpath +56750 36490 moveto +56320 35850 lineto +stroke +newpath +56910 35970 moveto +56910 36470 lineto +stroke +newpath +57150 35970 moveto +57150 36470 lineto +57430 35970 lineto +57430 36470 lineto +stroke +newpath +57600 36470 moveto +57880 36470 lineto +stroke +newpath +57740 35970 moveto +57740 36470 lineto +stroke +newpath +58000 36470 moveto +58330 36470 lineto +58120 35970 lineto +stroke +newpath +58480 35780 moveto +58510 35800 lineto +58550 35870 lineto +58580 35920 lineto +58600 35990 lineto +58620 36110 lineto +58620 36210 lineto +58600 36320 lineto +58580 36400 lineto +58550 36440 lineto +58510 36520 lineto +58480 36540 lineto +stroke +newpath +58860 35970 moveto +58860 36470 lineto +59050 36470 lineto +59100 36440 lineto +59120 36420 lineto +59140 36370 lineto +59140 36300 lineto +59120 36250 lineto +59100 36230 lineto +59050 36210 lineto +58860 36210 lineto +stroke +newpath +59360 35970 moveto +59360 36470 lineto +59480 36470 lineto +59550 36440 lineto +59600 36400 lineto +59620 36350 lineto +59640 36250 lineto +59640 36180 lineto +59620 36090 lineto +59600 36040 lineto +59550 35990 lineto +59480 35970 lineto +59360 35970 lineto +stroke +newpath +59810 36470 moveto +60140 36470 lineto +59930 35970 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 36320 moveto +46620 36320 lineto +stroke +newpath +46760 36320 moveto +46760 36820 lineto +46710 36750 lineto +46660 36700 lineto +46620 36670 lineto +stroke +newpath +47070 36820 moveto +47380 36820 lineto +47210 36630 lineto +47290 36630 lineto +47330 36600 lineto +47360 36580 lineto +47380 36530 lineto +47380 36410 lineto +47360 36370 lineto +47330 36340 lineto +47290 36320 lineto +47140 36320 lineto +47100 36340 lineto +47070 36370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 39170 moveto +74500 39170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +63770 38970 moveto +63770 39470 lineto +63960 39470 lineto +64010 39440 lineto +64030 39420 lineto +64050 39370 lineto +64050 39300 lineto +64030 39250 lineto +64010 39230 lineto +63960 39210 lineto +63770 39210 lineto +stroke +newpath +64550 39020 moveto +64530 38990 lineto +64460 38970 lineto +64410 38970 lineto +64340 38990 lineto +64290 39040 lineto +64270 39090 lineto +64250 39180 lineto +64250 39250 lineto +64270 39350 lineto +64290 39400 lineto +64340 39440 lineto +64410 39470 lineto +64460 39470 lineto +64530 39440 lineto +64550 39420 lineto +stroke +newpath +64980 39470 moveto +64890 39470 lineto +64840 39440 lineto +64820 39420 lineto +64770 39350 lineto +64750 39250 lineto +64750 39060 lineto +64770 39020 lineto +64790 38990 lineto +64840 38970 lineto +64940 38970 lineto +64980 38990 lineto +65010 39020 lineto +65030 39060 lineto +65030 39180 lineto +65010 39230 lineto +64980 39250 lineto +64940 39280 lineto +64840 39280 lineto +64790 39250 lineto +64770 39230 lineto +64750 39180 lineto +stroke +newpath +65390 38780 moveto +65370 38800 lineto +65320 38870 lineto +65300 38920 lineto +65270 38990 lineto +65250 39110 lineto +65250 39210 lineto +65270 39320 lineto +65300 39400 lineto +65320 39440 lineto +65370 39520 lineto +65390 39540 lineto +stroke +newpath +65670 39470 moveto +65770 39470 lineto +65820 39440 lineto +65860 39400 lineto +65890 39300 lineto +65890 39130 lineto +65860 39040 lineto +65820 38990 lineto +65770 38970 lineto +65670 38970 lineto +65630 38990 lineto +65580 39040 lineto +65560 39130 lineto +65560 39300 lineto +65580 39400 lineto +65630 39440 lineto +65670 39470 lineto +stroke +newpath +66380 39020 moveto +66360 38990 lineto +66290 38970 lineto +66240 38970 lineto +66170 38990 lineto +66120 39040 lineto +66100 39090 lineto +66080 39180 lineto +66080 39250 lineto +66100 39350 lineto +66120 39400 lineto +66170 39440 lineto +66240 39470 lineto +66290 39470 lineto +66360 39440 lineto +66380 39420 lineto +stroke +newpath +66600 39020 moveto +66620 38990 lineto +66600 38970 lineto +66580 38990 lineto +66600 39020 lineto +66600 38970 lineto +stroke +newpath +67100 38970 moveto +66820 38970 lineto +stroke +newpath +66960 38970 moveto +66960 39470 lineto +66910 39400 lineto +66860 39350 lineto +66820 39320 lineto +stroke +newpath +67300 39110 moveto +67530 39110 lineto +stroke +newpath +67250 38970 moveto +67410 39470 lineto +67580 38970 lineto +stroke +newpath +68110 39490 moveto +67680 38850 lineto +stroke +newpath +68270 38970 moveto +68270 39470 lineto +68460 39470 lineto +68510 39440 lineto +68530 39420 lineto +68550 39370 lineto +68550 39300 lineto +68530 39250 lineto +68510 39230 lineto +68460 39210 lineto +68270 39210 lineto +stroke +newpath +69050 39020 moveto +69030 38990 lineto +68960 38970 lineto +68910 38970 lineto +68840 38990 lineto +68790 39040 lineto +68770 39090 lineto +68750 39180 lineto +68750 39250 lineto +68770 39350 lineto +68790 39400 lineto +68840 39440 lineto +68910 39470 lineto +68960 39470 lineto +69030 39440 lineto +69050 39420 lineto +stroke +newpath +69270 38970 moveto +69270 39470 lineto +stroke +newpath +69510 38970 moveto +69510 39470 lineto +69790 38970 lineto +69790 39470 lineto +stroke +newpath +69960 39470 moveto +70240 39470 lineto +stroke +newpath +70100 38970 moveto +70100 39470 lineto +stroke +newpath +70480 39250 moveto +70430 39280 lineto +70410 39300 lineto +70390 39350 lineto +70390 39370 lineto +70410 39420 lineto +70430 39440 lineto +70480 39470 lineto +70580 39470 lineto +70620 39440 lineto +70650 39420 lineto +70670 39370 lineto +70670 39350 lineto +70650 39300 lineto +70620 39280 lineto +70580 39250 lineto +70480 39250 lineto +70430 39230 lineto +70410 39210 lineto +70390 39160 lineto +70390 39060 lineto +70410 39020 lineto +70430 38990 lineto +70480 38970 lineto +70580 38970 lineto +70620 38990 lineto +70650 39020 lineto +70670 39060 lineto +70670 39160 lineto +70650 39210 lineto +70620 39230 lineto +70580 39250 lineto +stroke +newpath +70840 38780 moveto +70870 38800 lineto +70910 38870 lineto +70940 38920 lineto +70960 38990 lineto +70980 39110 lineto +70980 39210 lineto +70960 39320 lineto +70940 39400 lineto +70910 39440 lineto +70870 39520 lineto +70840 39540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 39770 moveto +72640 39790 lineto +72690 39820 lineto +72810 39820 lineto +72850 39790 lineto +72880 39770 lineto +72900 39720 lineto +72900 39670 lineto +72880 39600 lineto +72590 39320 lineto +72900 39320 lineto +stroke +newpath +73070 39820 moveto +73380 39820 lineto +73210 39630 lineto +73290 39630 lineto +73330 39600 lineto +73360 39580 lineto +73380 39530 lineto +73380 39410 lineto +73360 39370 lineto +73330 39340 lineto +73290 39320 lineto +73140 39320 lineto +73100 39340 lineto +73070 39370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 35170 moveto +45500 35170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 34780 moveto +49140 34800 lineto +49090 34870 lineto +49070 34920 lineto +49040 34990 lineto +49020 35110 lineto +49020 35210 lineto +49040 35320 lineto +49070 35400 lineto +49090 35440 lineto +49140 35520 lineto +49160 35540 lineto +stroke +newpath +49330 34990 moveto +49400 34970 lineto +49520 34970 lineto +49560 34990 lineto +49590 35020 lineto +49610 35060 lineto +49610 35110 lineto +49590 35160 lineto +49560 35180 lineto +49520 35210 lineto +49420 35230 lineto +49370 35250 lineto +49350 35280 lineto +49330 35320 lineto +49330 35370 lineto +49350 35420 lineto +49370 35440 lineto +49420 35470 lineto +49540 35470 lineto +49610 35440 lineto +stroke +newpath +49810 34990 moveto +49880 34970 lineto +50000 34970 lineto +50040 34990 lineto +50070 35020 lineto +50090 35060 lineto +50090 35110 lineto +50070 35160 lineto +50040 35180 lineto +50000 35210 lineto +49900 35230 lineto +49850 35250 lineto +49830 35280 lineto +49810 35320 lineto +49810 35370 lineto +49830 35420 lineto +49850 35440 lineto +49900 35470 lineto +50020 35470 lineto +50090 35440 lineto +stroke +newpath +49230 35630 moveto +50190 35630 lineto +stroke +newpath +50670 35490 moveto +50240 34850 lineto +stroke +newpath +50830 34970 moveto +50830 35470 lineto +51020 35470 lineto +51070 35440 lineto +51090 35420 lineto +51110 35370 lineto +51110 35300 lineto +51090 35250 lineto +51070 35230 lineto +51020 35210 lineto +50830 35210 lineto +stroke +newpath +51610 35020 moveto +51590 34990 lineto +51520 34970 lineto +51470 34970 lineto +51400 34990 lineto +51350 35040 lineto +51330 35090 lineto +51310 35180 lineto +51310 35250 lineto +51330 35350 lineto +51350 35400 lineto +51400 35440 lineto +51470 35470 lineto +51520 35470 lineto +51590 35440 lineto +51610 35420 lineto +stroke +newpath +51830 34970 moveto +51830 35470 lineto +stroke +newpath +52070 34970 moveto +52070 35470 lineto +52350 34970 lineto +52350 35470 lineto +stroke +newpath +52520 35470 moveto +52800 35470 lineto +stroke +newpath +52660 34970 moveto +52660 35470 lineto +stroke +newpath +53060 35470 moveto +53110 35470 lineto +53160 35440 lineto +53180 35420 lineto +53210 35370 lineto +53230 35280 lineto +53230 35160 lineto +53210 35060 lineto +53180 35020 lineto +53160 34990 lineto +53110 34970 lineto +53060 34970 lineto +53020 34990 lineto +52990 35020 lineto +52970 35060 lineto +52950 35160 lineto +52950 35280 lineto +52970 35370 lineto +52990 35420 lineto +53020 35440 lineto +53060 35470 lineto +stroke +newpath +53400 34780 moveto +53430 34800 lineto +53470 34870 lineto +53500 34920 lineto +53520 34990 lineto +53540 35110 lineto +53540 35210 lineto +53520 35320 lineto +53500 35400 lineto +53470 35440 lineto +53430 35520 lineto +53400 35540 lineto +stroke +newpath +53780 34970 moveto +53780 35470 lineto +53970 35470 lineto +54020 35440 lineto +54040 35420 lineto +54060 35370 lineto +54060 35300 lineto +54040 35250 lineto +54020 35230 lineto +53970 35210 lineto +53780 35210 lineto +stroke +newpath +54450 35230 moveto +54520 35210 lineto +54540 35180 lineto +54560 35130 lineto +54560 35060 lineto +54540 35020 lineto +54520 34990 lineto +54470 34970 lineto +54280 34970 lineto +54280 35470 lineto +54450 35470 lineto +54490 35440 lineto +54520 35420 lineto +54540 35370 lineto +54540 35320 lineto +54520 35280 lineto +54490 35250 lineto +54450 35230 lineto +54280 35230 lineto +stroke +newpath +54870 35470 moveto +54920 35470 lineto +54970 35440 lineto +54990 35420 lineto +55020 35370 lineto +55040 35280 lineto +55040 35160 lineto +55020 35060 lineto +54990 35020 lineto +54970 34990 lineto +54920 34970 lineto +54870 34970 lineto +54830 34990 lineto +54800 35020 lineto +54780 35060 lineto +54760 35160 lineto +54760 35280 lineto +54780 35370 lineto +54800 35420 lineto +54830 35440 lineto +54870 35470 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 35320 moveto +46620 35320 lineto +stroke +newpath +46760 35320 moveto +46760 35820 lineto +46710 35750 lineto +46660 35700 lineto +46620 35670 lineto +stroke +newpath +47330 35650 moveto +47330 35320 lineto +stroke +newpath +47210 35840 moveto +47100 35480 lineto +47400 35480 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 40170 moveto +74500 40170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +65770 39970 moveto +65610 40210 lineto +stroke +newpath +65490 39970 moveto +65490 40470 lineto +65680 40470 lineto +65730 40440 lineto +65750 40420 lineto +65770 40370 lineto +65770 40300 lineto +65750 40250 lineto +65730 40230 lineto +65680 40210 lineto +65490 40210 lineto +stroke +newpath +66180 39990 moveto +66130 39970 lineto +66040 39970 lineto +65990 39990 lineto +65970 40040 lineto +65970 40230 lineto +65990 40280 lineto +66040 40300 lineto +66130 40300 lineto +66180 40280 lineto +66200 40230 lineto +66200 40180 lineto +65970 40130 lineto +stroke +newpath +66400 39990 moveto +66440 39970 lineto +66540 39970 lineto +66590 39990 lineto +66610 40040 lineto +66610 40060 lineto +66590 40110 lineto +66540 40130 lineto +66470 40130 lineto +66420 40160 lineto +66400 40210 lineto +66400 40230 lineto +66420 40280 lineto +66470 40300 lineto +66540 40300 lineto +66590 40280 lineto +stroke +newpath +67010 39990 moveto +66960 39970 lineto +66870 39970 lineto +66820 39990 lineto +66800 40040 lineto +66800 40230 lineto +66820 40280 lineto +66870 40300 lineto +66960 40300 lineto +67010 40280 lineto +67030 40230 lineto +67030 40180 lineto +66800 40130 lineto +stroke +newpath +67180 40300 moveto +67370 40300 lineto +stroke +newpath +67250 40470 moveto +67250 40040 lineto +67270 39990 lineto +67320 39970 lineto +67370 39970 lineto +stroke +newpath +65370 40630 moveto +67420 40630 lineto +stroke +newpath +67680 39780 moveto +67660 39800 lineto +67610 39870 lineto +67590 39920 lineto +67560 39990 lineto +67540 40110 lineto +67540 40210 lineto +67560 40320 lineto +67590 40400 lineto +67610 40440 lineto +67660 40520 lineto +67680 40540 lineto +stroke +newpath +67870 39970 moveto +67870 40470 lineto +68060 40470 lineto +68110 40440 lineto +68130 40420 lineto +68150 40370 lineto +68150 40300 lineto +68130 40250 lineto +68110 40230 lineto +68060 40210 lineto +67870 40210 lineto +stroke +newpath +68650 40020 moveto +68630 39990 lineto +68560 39970 lineto +68510 39970 lineto +68440 39990 lineto +68390 40040 lineto +68370 40090 lineto +68350 40180 lineto +68350 40250 lineto +68370 40350 lineto +68390 40400 lineto +68440 40440 lineto +68510 40470 lineto +68560 40470 lineto +68630 40440 lineto +68650 40420 lineto +stroke +newpath +69130 39970 moveto +68850 39970 lineto +stroke +newpath +68990 39970 moveto +68990 40470 lineto +68940 40400 lineto +68890 40350 lineto +68850 40320 lineto +stroke +newpath +69710 40490 moveto +69280 39850 lineto +stroke +newpath +70080 39970 moveto +70080 40470 lineto +stroke +newpath +70080 39990 moveto +70040 39970 lineto +69940 39970 lineto +69890 39990 lineto +69870 40020 lineto +69850 40060 lineto +69850 40210 lineto +69870 40250 lineto +69890 40280 lineto +69940 40300 lineto +70040 40300 lineto +70080 40280 lineto +stroke +newpath +70270 40470 moveto +70390 39970 lineto +70490 40320 lineto +70580 39970 lineto +70700 40470 lineto +stroke +newpath +70840 39780 moveto +70870 39800 lineto +70910 39870 lineto +70940 39920 lineto +70960 39990 lineto +70980 40110 lineto +70980 40210 lineto +70960 40320 lineto +70940 40400 lineto +70910 40440 lineto +70870 40520 lineto +70840 40540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 40770 moveto +72640 40790 lineto +72690 40820 lineto +72810 40820 lineto +72850 40790 lineto +72880 40770 lineto +72900 40720 lineto +72900 40670 lineto +72880 40600 lineto +72590 40320 lineto +72900 40320 lineto +stroke +newpath +73330 40650 moveto +73330 40320 lineto +stroke +newpath +73210 40840 moveto +73100 40480 lineto +73400 40480 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 34170 moveto +45500 34170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 33780 moveto +49140 33800 lineto +49090 33870 lineto +49070 33920 lineto +49040 33990 lineto +49020 34110 lineto +49020 34210 lineto +49040 34320 lineto +49070 34400 lineto +49090 34440 lineto +49140 34520 lineto +49160 34540 lineto +stroke +newpath +49330 33990 moveto +49400 33970 lineto +49520 33970 lineto +49560 33990 lineto +49590 34020 lineto +49610 34060 lineto +49610 34110 lineto +49590 34160 lineto +49560 34180 lineto +49520 34210 lineto +49420 34230 lineto +49370 34250 lineto +49350 34280 lineto +49330 34320 lineto +49330 34370 lineto +49350 34420 lineto +49370 34440 lineto +49420 34470 lineto +49540 34470 lineto +49610 34440 lineto +stroke +newpath +50110 34020 moveto +50090 33990 lineto +50020 33970 lineto +49970 33970 lineto +49900 33990 lineto +49850 34040 lineto +49830 34090 lineto +49810 34180 lineto +49810 34250 lineto +49830 34350 lineto +49850 34400 lineto +49900 34440 lineto +49970 34470 lineto +50020 34470 lineto +50090 34440 lineto +50110 34420 lineto +stroke +newpath +50570 33970 moveto +50330 33970 lineto +50330 34470 lineto +stroke +newpath +50730 33970 moveto +50730 34470 lineto +stroke +newpath +51010 33970 moveto +50800 34250 lineto +stroke +newpath +51010 34470 moveto +50730 34180 lineto +stroke +newpath +51590 34490 moveto +51160 33850 lineto +stroke +newpath +51750 33970 moveto +51750 34470 lineto +51940 34470 lineto +51990 34440 lineto +52010 34420 lineto +52030 34370 lineto +52030 34300 lineto +52010 34250 lineto +51990 34230 lineto +51940 34210 lineto +51750 34210 lineto +stroke +newpath +52530 34020 moveto +52510 33990 lineto +52440 33970 lineto +52390 33970 lineto +52320 33990 lineto +52270 34040 lineto +52250 34090 lineto +52230 34180 lineto +52230 34250 lineto +52250 34350 lineto +52270 34400 lineto +52320 34440 lineto +52390 34470 lineto +52440 34470 lineto +52510 34440 lineto +52530 34420 lineto +stroke +newpath +52750 33970 moveto +52750 34470 lineto +stroke +newpath +52990 33970 moveto +52990 34470 lineto +53270 33970 lineto +53270 34470 lineto +stroke +newpath +53440 34470 moveto +53720 34470 lineto +stroke +newpath +53580 33970 moveto +53580 34470 lineto +stroke +newpath +54150 33970 moveto +53870 33970 lineto +stroke +newpath +54010 33970 moveto +54010 34470 lineto +53960 34400 lineto +53910 34350 lineto +53870 34320 lineto +stroke +newpath +54320 33780 moveto +54350 33800 lineto +54390 33870 lineto +54420 33920 lineto +54440 33990 lineto +54460 34110 lineto +54460 34210 lineto +54440 34320 lineto +54420 34400 lineto +54390 34440 lineto +54350 34520 lineto +54320 34540 lineto +stroke +newpath +54700 33970 moveto +54700 34470 lineto +54890 34470 lineto +54940 34440 lineto +54960 34420 lineto +54980 34370 lineto +54980 34300 lineto +54960 34250 lineto +54940 34230 lineto +54890 34210 lineto +54700 34210 lineto +stroke +newpath +55370 34230 moveto +55440 34210 lineto +55460 34180 lineto +55480 34130 lineto +55480 34060 lineto +55460 34020 lineto +55440 33990 lineto +55390 33970 lineto +55200 33970 lineto +55200 34470 lineto +55370 34470 lineto +55410 34440 lineto +55440 34420 lineto +55460 34370 lineto +55460 34320 lineto +55440 34280 lineto +55410 34250 lineto +55370 34230 lineto +55200 34230 lineto +stroke +newpath +55960 33970 moveto +55680 33970 lineto +stroke +newpath +55820 33970 moveto +55820 34470 lineto +55770 34400 lineto +55720 34350 lineto +55680 34320 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 34320 moveto +46620 34320 lineto +stroke +newpath +46760 34320 moveto +46760 34820 lineto +46710 34750 lineto +46660 34700 lineto +46620 34670 lineto +stroke +newpath +47360 34820 moveto +47120 34820 lineto +47100 34580 lineto +47120 34600 lineto +47170 34630 lineto +47290 34630 lineto +47330 34600 lineto +47360 34580 lineto +47380 34530 lineto +47380 34410 lineto +47360 34370 lineto +47330 34340 lineto +47290 34320 lineto +47170 34320 lineto +47120 34340 lineto +47100 34370 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 41670 moveto +74500 41670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +63700 41470 moveto +63700 41970 lineto +63890 41970 lineto +63940 41940 lineto +63960 41920 lineto +63980 41870 lineto +63980 41800 lineto +63960 41750 lineto +63940 41730 lineto +63890 41710 lineto +63700 41710 lineto +stroke +newpath +64480 41520 moveto +64460 41490 lineto +64390 41470 lineto +64340 41470 lineto +64270 41490 lineto +64220 41540 lineto +64200 41590 lineto +64180 41680 lineto +64180 41750 lineto +64200 41850 lineto +64220 41900 lineto +64270 41940 lineto +64340 41970 lineto +64390 41970 lineto +64460 41940 lineto +64480 41920 lineto +stroke +newpath +64940 41970 moveto +64700 41970 lineto +64680 41730 lineto +64700 41750 lineto +64750 41780 lineto +64870 41780 lineto +64910 41750 lineto +64940 41730 lineto +64960 41680 lineto +64960 41560 lineto +64940 41520 lineto +64910 41490 lineto +64870 41470 lineto +64750 41470 lineto +64700 41490 lineto +64680 41520 lineto +stroke +newpath +65320 41280 moveto +65300 41300 lineto +65250 41370 lineto +65230 41420 lineto +65200 41490 lineto +65180 41610 lineto +65180 41710 lineto +65200 41820 lineto +65230 41900 lineto +65250 41940 lineto +65300 42020 lineto +65320 42040 lineto +stroke +newpath +65510 41470 moveto +65510 41970 lineto +65700 41970 lineto +65750 41940 lineto +65770 41920 lineto +65790 41870 lineto +65790 41800 lineto +65770 41750 lineto +65750 41730 lineto +65700 41710 lineto +65510 41710 lineto +stroke +newpath +66290 41520 moveto +66270 41490 lineto +66200 41470 lineto +66150 41470 lineto +66080 41490 lineto +66030 41540 lineto +66010 41590 lineto +65990 41680 lineto +65990 41750 lineto +66010 41850 lineto +66030 41900 lineto +66080 41940 lineto +66150 41970 lineto +66200 41970 lineto +66270 41940 lineto +66290 41920 lineto +stroke +newpath +66510 41470 moveto +66510 41970 lineto +stroke +newpath +66750 41470 moveto +66750 41970 lineto +67030 41470 lineto +67030 41970 lineto +stroke +newpath +67200 41970 moveto +67480 41970 lineto +stroke +newpath +67340 41470 moveto +67340 41970 lineto +stroke +newpath +67670 41470 moveto +67770 41470 lineto +67820 41490 lineto +67840 41520 lineto +67890 41590 lineto +67910 41680 lineto +67910 41870 lineto +67890 41920 lineto +67860 41940 lineto +67820 41970 lineto +67720 41970 lineto +67670 41940 lineto +67650 41920 lineto +67630 41870 lineto +67630 41750 lineto +67650 41710 lineto +67670 41680 lineto +67720 41660 lineto +67820 41660 lineto +67860 41680 lineto +67890 41710 lineto +67910 41750 lineto +stroke +newpath +68490 41990 moveto +68060 41350 lineto +stroke +newpath +68740 41970 moveto +68840 41970 lineto +68890 41940 lineto +68930 41900 lineto +68960 41800 lineto +68960 41630 lineto +68930 41540 lineto +68890 41490 lineto +68840 41470 lineto +68740 41470 lineto +68700 41490 lineto +68650 41540 lineto +68630 41630 lineto +68630 41800 lineto +68650 41900 lineto +68700 41940 lineto +68740 41970 lineto +stroke +newpath +69450 41520 moveto +69430 41490 lineto +69360 41470 lineto +69310 41470 lineto +69240 41490 lineto +69190 41540 lineto +69170 41590 lineto +69150 41680 lineto +69150 41750 lineto +69170 41850 lineto +69190 41900 lineto +69240 41940 lineto +69310 41970 lineto +69360 41970 lineto +69430 41940 lineto +69450 41920 lineto +stroke +newpath +69670 41520 moveto +69690 41490 lineto +69670 41470 lineto +69650 41490 lineto +69670 41520 lineto +69670 41470 lineto +stroke +newpath +70170 41470 moveto +69890 41470 lineto +stroke +newpath +70030 41470 moveto +70030 41970 lineto +69980 41900 lineto +69930 41850 lineto +69890 41820 lineto +stroke +newpath +70560 41730 moveto +70630 41710 lineto +70650 41680 lineto +70670 41630 lineto +70670 41560 lineto +70650 41520 lineto +70630 41490 lineto +70580 41470 lineto +70390 41470 lineto +70390 41970 lineto +70560 41970 lineto +70600 41940 lineto +70630 41920 lineto +70650 41870 lineto +70650 41820 lineto +70630 41780 lineto +70600 41750 lineto +70560 41730 lineto +70390 41730 lineto +stroke +newpath +70840 41280 moveto +70870 41300 lineto +70910 41370 lineto +70940 41420 lineto +70960 41490 lineto +70980 41610 lineto +70980 41710 lineto +70960 41820 lineto +70940 41900 lineto +70910 41940 lineto +70870 42020 lineto +70840 42040 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 42270 moveto +72640 42290 lineto +72690 42320 lineto +72810 42320 lineto +72850 42290 lineto +72880 42270 lineto +72900 42220 lineto +72900 42170 lineto +72880 42100 lineto +72590 41820 lineto +72900 41820 lineto +stroke +newpath +73360 42320 moveto +73120 42320 lineto +73100 42080 lineto +73120 42100 lineto +73170 42130 lineto +73290 42130 lineto +73330 42100 lineto +73360 42080 lineto +73380 42030 lineto +73380 41910 lineto +73360 41870 lineto +73330 41840 lineto +73290 41820 lineto +73170 41820 lineto +73120 41840 lineto +73100 41870 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +48500 33170 moveto +45500 33170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49160 32780 moveto +49140 32800 lineto +49090 32870 lineto +49070 32920 lineto +49040 32990 lineto +49020 33110 lineto +49020 33210 lineto +49040 33320 lineto +49070 33400 lineto +49090 33440 lineto +49140 33520 lineto +49160 33540 lineto +stroke +newpath +49350 32970 moveto +49350 33470 lineto +49540 33470 lineto +49590 33440 lineto +49610 33420 lineto +49630 33370 lineto +49630 33300 lineto +49610 33250 lineto +49590 33230 lineto +49540 33210 lineto +49350 33210 lineto +stroke +newpath +49850 32970 moveto +49850 33470 lineto +49970 33470 lineto +50040 33440 lineto +50090 33400 lineto +50110 33350 lineto +50130 33250 lineto +50130 33180 lineto +50110 33090 lineto +50090 33040 lineto +50040 32990 lineto +49970 32970 lineto +49850 32970 lineto +stroke +newpath +50350 32970 moveto +50350 33470 lineto +stroke +newpath +50950 33490 moveto +50520 32850 lineto +stroke +newpath +51110 32970 moveto +51110 33470 lineto +51280 33110 lineto +51440 33470 lineto +51440 32970 lineto +stroke +newpath +51770 33470 moveto +51870 33470 lineto +51920 33440 lineto +51960 33400 lineto +51990 33300 lineto +51990 33130 lineto +51960 33040 lineto +51920 32990 lineto +51870 32970 lineto +51770 32970 lineto +51730 32990 lineto +51680 33040 lineto +51660 33130 lineto +51660 33300 lineto +51680 33400 lineto +51730 33440 lineto +51770 33470 lineto +stroke +newpath +52180 32990 moveto +52250 32970 lineto +52370 32970 lineto +52410 32990 lineto +52440 33020 lineto +52460 33060 lineto +52460 33110 lineto +52440 33160 lineto +52410 33180 lineto +52370 33210 lineto +52270 33230 lineto +52220 33250 lineto +52200 33280 lineto +52180 33320 lineto +52180 33370 lineto +52200 33420 lineto +52220 33440 lineto +52270 33470 lineto +52390 33470 lineto +52460 33440 lineto +stroke +newpath +52680 32970 moveto +52680 33470 lineto +stroke +newpath +53280 33490 moveto +52850 32850 lineto +stroke +newpath +53440 32970 moveto +53440 33470 lineto +53630 33470 lineto +53680 33440 lineto +53700 33420 lineto +53720 33370 lineto +53720 33300 lineto +53700 33250 lineto +53680 33230 lineto +53630 33210 lineto +53440 33210 lineto +stroke +newpath +54220 33020 moveto +54200 32990 lineto +54130 32970 lineto +54080 32970 lineto +54010 32990 lineto +53960 33040 lineto +53940 33090 lineto +53920 33180 lineto +53920 33250 lineto +53940 33350 lineto +53960 33400 lineto +54010 33440 lineto +54080 33470 lineto +54130 33470 lineto +54200 33440 lineto +54220 33420 lineto +stroke +newpath +54440 32970 moveto +54440 33470 lineto +stroke +newpath +54680 32970 moveto +54680 33470 lineto +54960 32970 lineto +54960 33470 lineto +stroke +newpath +55130 33470 moveto +55410 33470 lineto +stroke +newpath +55270 32970 moveto +55270 33470 lineto +stroke +newpath +55560 33420 moveto +55580 33440 lineto +55630 33470 lineto +55750 33470 lineto +55790 33440 lineto +55820 33420 lineto +55840 33370 lineto +55840 33320 lineto +55820 33250 lineto +55530 32970 lineto +55840 32970 lineto +stroke +newpath +56010 32780 moveto +56040 32800 lineto +56080 32870 lineto +56110 32920 lineto +56130 32990 lineto +56150 33110 lineto +56150 33210 lineto +56130 33320 lineto +56110 33400 lineto +56080 33440 lineto +56040 33520 lineto +56010 33540 lineto +stroke +newpath +56390 32970 moveto +56390 33470 lineto +56580 33470 lineto +56630 33440 lineto +56650 33420 lineto +56670 33370 lineto +56670 33300 lineto +56650 33250 lineto +56630 33230 lineto +56580 33210 lineto +56390 33210 lineto +stroke +newpath +57060 33230 moveto +57130 33210 lineto +57150 33180 lineto +57170 33130 lineto +57170 33060 lineto +57150 33020 lineto +57130 32990 lineto +57080 32970 lineto +56890 32970 lineto +56890 33470 lineto +57060 33470 lineto +57100 33440 lineto +57130 33420 lineto +57150 33370 lineto +57150 33320 lineto +57130 33280 lineto +57100 33250 lineto +57060 33230 lineto +56890 33230 lineto +stroke +newpath +57370 33420 moveto +57390 33440 lineto +57440 33470 lineto +57560 33470 lineto +57600 33440 lineto +57630 33420 lineto +57650 33370 lineto +57650 33320 lineto +57630 33250 lineto +57340 32970 lineto +57650 32970 lineto +stroke +0.627 0 0 setrgbcolor +newpath +46900 33320 moveto +46620 33320 lineto +stroke +newpath +46760 33320 moveto +46760 33820 lineto +46710 33750 lineto +46660 33700 lineto +46620 33670 lineto +stroke +newpath +47330 33820 moveto +47240 33820 lineto +47190 33790 lineto +47170 33770 lineto +47120 33700 lineto +47100 33600 lineto +47100 33410 lineto +47120 33370 lineto +47140 33340 lineto +47190 33320 lineto +47290 33320 lineto +47330 33340 lineto +47360 33370 lineto +47380 33410 lineto +47380 33530 lineto +47360 33580 lineto +47330 33600 lineto +47290 33630 lineto +47190 33630 lineto +47140 33600 lineto +47120 33580 lineto +47100 33530 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 42670 moveto +74500 42670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +65980 42470 moveto +65980 42970 lineto +66170 42970 lineto +66220 42940 lineto +66240 42920 lineto +66260 42870 lineto +66260 42800 lineto +66240 42750 lineto +66220 42730 lineto +66170 42710 lineto +65980 42710 lineto +stroke +newpath +66760 42520 moveto +66740 42490 lineto +66670 42470 lineto +66620 42470 lineto +66550 42490 lineto +66500 42540 lineto +66480 42590 lineto +66460 42680 lineto +66460 42750 lineto +66480 42850 lineto +66500 42900 lineto +66550 42940 lineto +66620 42970 lineto +66670 42970 lineto +66740 42940 lineto +66760 42920 lineto +stroke +newpath +67190 42800 moveto +67190 42470 lineto +stroke +newpath +67070 42990 moveto +66960 42630 lineto +67260 42630 lineto +stroke +newpath +67600 42280 moveto +67580 42300 lineto +67530 42370 lineto +67510 42420 lineto +67480 42490 lineto +67460 42610 lineto +67460 42710 lineto +67480 42820 lineto +67510 42900 lineto +67530 42940 lineto +67580 43020 lineto +67600 43040 lineto +stroke +newpath +67790 42470 moveto +67790 42970 lineto +67980 42970 lineto +68030 42940 lineto +68050 42920 lineto +68070 42870 lineto +68070 42800 lineto +68050 42750 lineto +68030 42730 lineto +67980 42710 lineto +67790 42710 lineto +stroke +newpath +68570 42520 moveto +68550 42490 lineto +68480 42470 lineto +68430 42470 lineto +68360 42490 lineto +68310 42540 lineto +68290 42590 lineto +68270 42680 lineto +68270 42750 lineto +68290 42850 lineto +68310 42900 lineto +68360 42940 lineto +68430 42970 lineto +68480 42970 lineto +68550 42940 lineto +68570 42920 lineto +stroke +newpath +68790 42470 moveto +68790 42970 lineto +stroke +newpath +69030 42470 moveto +69030 42970 lineto +69310 42470 lineto +69310 42970 lineto +stroke +newpath +69480 42970 moveto +69760 42970 lineto +stroke +newpath +69620 42470 moveto +69620 42970 lineto +stroke +newpath +70190 42470 moveto +69910 42470 lineto +stroke +newpath +70050 42470 moveto +70050 42970 lineto +70000 42900 lineto +69950 42850 lineto +69910 42820 lineto +stroke +newpath +70500 42970 moveto +70550 42970 lineto +70600 42940 lineto +70620 42920 lineto +70650 42870 lineto +70670 42780 lineto +70670 42660 lineto +70650 42560 lineto +70620 42520 lineto +70600 42490 lineto +70550 42470 lineto +70500 42470 lineto +70460 42490 lineto +70430 42520 lineto +70410 42560 lineto +70390 42660 lineto +70390 42780 lineto +70410 42870 lineto +70430 42920 lineto +70460 42940 lineto +70500 42970 lineto +stroke +newpath +70840 42280 moveto +70870 42300 lineto +70910 42370 lineto +70940 42420 lineto +70960 42490 lineto +70980 42610 lineto +70980 42710 lineto +70960 42820 lineto +70940 42900 lineto +70910 42940 lineto +70870 43020 lineto +70840 43040 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 43270 moveto +72640 43290 lineto +72690 43320 lineto +72810 43320 lineto +72850 43290 lineto +72880 43270 lineto +72900 43220 lineto +72900 43170 lineto +72880 43100 lineto +72590 42820 lineto +72900 42820 lineto +stroke +newpath +73330 43320 moveto +73240 43320 lineto +73190 43290 lineto +73170 43270 lineto +73120 43200 lineto +73100 43100 lineto +73100 42910 lineto +73120 42870 lineto +73140 42840 lineto +73190 42820 lineto +73290 42820 lineto +73330 42840 lineto +73360 42870 lineto +73380 42910 lineto +73380 43030 lineto +73360 43080 lineto +73330 43100 lineto +73290 43130 lineto +73190 43130 lineto +73140 43100 lineto +73120 43080 lineto +73100 43030 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 33170 moveto +74500 33170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +62130 32970 moveto +62130 33470 lineto +62320 33470 lineto +62370 33440 lineto +62390 33420 lineto +62410 33370 lineto +62410 33300 lineto +62390 33250 lineto +62370 33230 lineto +62320 33210 lineto +62130 33210 lineto +stroke +newpath +62800 33230 moveto +62870 33210 lineto +62890 33180 lineto +62910 33130 lineto +62910 33060 lineto +62890 33020 lineto +62870 32990 lineto +62820 32970 lineto +62630 32970 lineto +62630 33470 lineto +62800 33470 lineto +62840 33440 lineto +62870 33420 lineto +62890 33370 lineto +62890 33320 lineto +62870 33280 lineto +62840 33250 lineto +62800 33230 lineto +62630 33230 lineto +stroke +newpath +63080 33470 moveto +63390 33470 lineto +63220 33280 lineto +63300 33280 lineto +63340 33250 lineto +63370 33230 lineto +63390 33180 lineto +63390 33060 lineto +63370 33020 lineto +63340 32990 lineto +63300 32970 lineto +63150 32970 lineto +63110 32990 lineto +63080 33020 lineto +stroke +newpath +63750 32780 moveto +63730 32800 lineto +63680 32870 lineto +63660 32920 lineto +63630 32990 lineto +63610 33110 lineto +63610 33210 lineto +63630 33320 lineto +63660 33400 lineto +63680 33440 lineto +63730 33520 lineto +63750 33540 lineto +stroke +newpath +63940 32970 moveto +63940 33470 lineto +64130 33470 lineto +64180 33440 lineto +64200 33420 lineto +64220 33370 lineto +64220 33300 lineto +64200 33250 lineto +64180 33230 lineto +64130 33210 lineto +63940 33210 lineto +stroke +newpath +64440 32970 moveto +64440 33470 lineto +64560 33470 lineto +64630 33440 lineto +64680 33400 lineto +64700 33350 lineto +64720 33250 lineto +64720 33180 lineto +64700 33090 lineto +64680 33040 lineto +64630 32990 lineto +64560 32970 lineto +64440 32970 lineto +stroke +newpath +65030 33470 moveto +65080 33470 lineto +65130 33440 lineto +65150 33420 lineto +65180 33370 lineto +65200 33280 lineto +65200 33160 lineto +65180 33060 lineto +65150 33020 lineto +65130 32990 lineto +65080 32970 lineto +65030 32970 lineto +64990 32990 lineto +64960 33020 lineto +64940 33060 lineto +64920 33160 lineto +64920 33280 lineto +64940 33370 lineto +64960 33420 lineto +64990 33440 lineto +65030 33470 lineto +stroke +newpath +65780 33490 moveto +65350 32850 lineto +stroke +newpath +65940 32970 moveto +65940 33470 lineto +66110 33110 lineto +66270 33470 lineto +66270 32970 lineto +stroke +newpath +66510 32970 moveto +66510 33470 lineto +stroke +newpath +66730 32990 moveto +66800 32970 lineto +66920 32970 lineto +66960 32990 lineto +66990 33020 lineto +67010 33060 lineto +67010 33110 lineto +66990 33160 lineto +66960 33180 lineto +66920 33210 lineto +66820 33230 lineto +66770 33250 lineto +66750 33280 lineto +66730 33320 lineto +66730 33370 lineto +66750 33420 lineto +66770 33440 lineto +66820 33470 lineto +66940 33470 lineto +67010 33440 lineto +stroke +newpath +67320 33470 moveto +67420 33470 lineto +67470 33440 lineto +67510 33400 lineto +67540 33300 lineto +67540 33130 lineto +67510 33040 lineto +67470 32990 lineto +67420 32970 lineto +67320 32970 lineto +67280 32990 lineto +67230 33040 lineto +67210 33130 lineto +67210 33300 lineto +67230 33400 lineto +67280 33440 lineto +67320 33470 lineto +stroke +newpath +68110 33490 moveto +67680 32850 lineto +stroke +newpath +68270 32970 moveto +68270 33470 lineto +68460 33470 lineto +68510 33440 lineto +68530 33420 lineto +68550 33370 lineto +68550 33300 lineto +68530 33250 lineto +68510 33230 lineto +68460 33210 lineto +68270 33210 lineto +stroke +newpath +69050 33020 moveto +69030 32990 lineto +68960 32970 lineto +68910 32970 lineto +68840 32990 lineto +68790 33040 lineto +68770 33090 lineto +68750 33180 lineto +68750 33250 lineto +68770 33350 lineto +68790 33400 lineto +68840 33440 lineto +68910 33470 lineto +68960 33470 lineto +69030 33440 lineto +69050 33420 lineto +stroke +newpath +69270 32970 moveto +69270 33470 lineto +stroke +newpath +69510 32970 moveto +69510 33470 lineto +69790 32970 lineto +69790 33470 lineto +stroke +newpath +69960 33470 moveto +70240 33470 lineto +stroke +newpath +70100 32970 moveto +70100 33470 lineto +stroke +newpath +70360 33470 moveto +70670 33470 lineto +70500 33280 lineto +70580 33280 lineto +70620 33250 lineto +70650 33230 lineto +70670 33180 lineto +70670 33060 lineto +70650 33020 lineto +70620 32990 lineto +70580 32970 lineto +70430 32970 lineto +70390 32990 lineto +70360 33020 lineto +stroke +newpath +70840 32780 moveto +70870 32800 lineto +70910 32870 lineto +70940 32920 lineto +70960 32990 lineto +70980 33110 lineto +70980 33210 lineto +70960 33320 lineto +70940 33400 lineto +70910 33440 lineto +70870 33520 lineto +70840 33540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72900 33320 moveto +72620 33320 lineto +stroke +newpath +72760 33320 moveto +72760 33820 lineto +72710 33750 lineto +72660 33700 lineto +72620 33670 lineto +stroke +newpath +73070 33820 moveto +73400 33820 lineto +73190 33320 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 43670 moveto +74500 43670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +69270 43970 moveto +69270 43560 lineto +69290 43520 lineto +69320 43490 lineto +69360 43470 lineto +69460 43470 lineto +69510 43490 lineto +69530 43520 lineto +69550 43560 lineto +69550 43970 lineto +stroke +newpath +70070 43520 moveto +70050 43490 lineto +69980 43470 lineto +69930 43470 lineto +69860 43490 lineto +69810 43540 lineto +69790 43590 lineto +69770 43680 lineto +69770 43750 lineto +69790 43850 lineto +69810 43900 lineto +69860 43940 lineto +69930 43970 lineto +69980 43970 lineto +70050 43940 lineto +70070 43920 lineto +stroke +newpath +70270 43610 moveto +70500 43610 lineto +stroke +newpath +70220 43470 moveto +70380 43970 lineto +70550 43470 lineto +stroke +newpath +70720 43470 moveto +70720 43970 lineto +70910 43970 lineto +70960 43940 lineto +70980 43920 lineto +71000 43870 lineto +71000 43800 lineto +70980 43750 lineto +70960 43730 lineto +70910 43710 lineto +70720 43710 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 44270 moveto +72640 44290 lineto +72690 44320 lineto +72810 44320 lineto +72850 44290 lineto +72880 44270 lineto +72900 44220 lineto +72900 44170 lineto +72880 44100 lineto +72590 43820 lineto +72900 43820 lineto +stroke +newpath +73070 44320 moveto +73400 44320 lineto +73190 43820 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 34170 moveto +74500 34170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +65080 33970 moveto +65080 34470 lineto +65270 34470 lineto +65320 34440 lineto +65340 34420 lineto +65360 34370 lineto +65360 34300 lineto +65340 34250 lineto +65320 34230 lineto +65270 34210 lineto +65080 34210 lineto +stroke +newpath +65750 34230 moveto +65820 34210 lineto +65840 34180 lineto +65860 34130 lineto +65860 34060 lineto +65840 34020 lineto +65820 33990 lineto +65770 33970 lineto +65580 33970 lineto +65580 34470 lineto +65750 34470 lineto +65790 34440 lineto +65820 34420 lineto +65840 34370 lineto +65840 34320 lineto +65820 34280 lineto +65790 34250 lineto +65750 34230 lineto +65580 34230 lineto +stroke +newpath +66290 34300 moveto +66290 33970 lineto +stroke +newpath +66170 34490 moveto +66060 34130 lineto +66360 34130 lineto +stroke +newpath +66700 33780 moveto +66680 33800 lineto +66630 33870 lineto +66610 33920 lineto +66580 33990 lineto +66560 34110 lineto +66560 34210 lineto +66580 34320 lineto +66610 34400 lineto +66630 34440 lineto +66680 34520 lineto +66700 34540 lineto +stroke +newpath +66820 34470 moveto +67100 34470 lineto +stroke +newpath +66960 33970 moveto +66960 34470 lineto +stroke +newpath +67530 33970 moveto +67250 33970 lineto +stroke +newpath +67390 33970 moveto +67390 34470 lineto +67340 34400 lineto +67290 34350 lineto +67250 34320 lineto +stroke +newpath +68110 34490 moveto +67680 33850 lineto +stroke +newpath +68270 33970 moveto +68270 34470 lineto +68460 34470 lineto +68510 34440 lineto +68530 34420 lineto +68550 34370 lineto +68550 34300 lineto +68530 34250 lineto +68510 34230 lineto +68460 34210 lineto +68270 34210 lineto +stroke +newpath +69050 34020 moveto +69030 33990 lineto +68960 33970 lineto +68910 33970 lineto +68840 33990 lineto +68790 34040 lineto +68770 34090 lineto +68750 34180 lineto +68750 34250 lineto +68770 34350 lineto +68790 34400 lineto +68840 34440 lineto +68910 34470 lineto +68960 34470 lineto +69030 34440 lineto +69050 34420 lineto +stroke +newpath +69270 33970 moveto +69270 34470 lineto +stroke +newpath +69510 33970 moveto +69510 34470 lineto +69790 33970 lineto +69790 34470 lineto +stroke +newpath +69960 34470 moveto +70240 34470 lineto +stroke +newpath +70100 33970 moveto +70100 34470 lineto +stroke +newpath +70620 34300 moveto +70620 33970 lineto +stroke +newpath +70500 34490 moveto +70390 34130 lineto +70690 34130 lineto +stroke +newpath +70840 33780 moveto +70870 33800 lineto +70910 33870 lineto +70940 33920 lineto +70960 33990 lineto +70980 34110 lineto +70980 34210 lineto +70960 34320 lineto +70940 34400 lineto +70910 34440 lineto +70870 34520 lineto +70840 34540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72900 34320 moveto +72620 34320 lineto +stroke +newpath +72760 34320 moveto +72760 34820 lineto +72710 34750 lineto +72660 34700 lineto +72620 34670 lineto +stroke +newpath +73190 34600 moveto +73140 34630 lineto +73120 34650 lineto +73100 34700 lineto +73100 34720 lineto +73120 34770 lineto +73140 34790 lineto +73190 34820 lineto +73290 34820 lineto +73330 34790 lineto +73360 34770 lineto +73380 34720 lineto +73380 34700 lineto +73360 34650 lineto +73330 34630 lineto +73290 34600 lineto +73190 34600 lineto +73140 34580 lineto +73120 34560 lineto +73100 34510 lineto +73100 34410 lineto +73120 34370 lineto +73140 34340 lineto +73190 34320 lineto +73290 34320 lineto +73330 34340 lineto +73360 34370 lineto +73380 34410 lineto +73380 34510 lineto +73360 34560 lineto +73330 34580 lineto +73290 34600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 44670 moveto +74500 44670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +69180 44970 moveto +69180 44560 lineto +69200 44520 lineto +69230 44490 lineto +69270 44470 lineto +69370 44470 lineto +69420 44490 lineto +69440 44520 lineto +69460 44560 lineto +69460 44970 lineto +stroke +newpath +69960 44940 moveto +69910 44970 lineto +69840 44970 lineto +69770 44940 lineto +69720 44900 lineto +69700 44850 lineto +69680 44750 lineto +69680 44680 lineto +69700 44590 lineto +69720 44540 lineto +69770 44490 lineto +69840 44470 lineto +69890 44470 lineto +69960 44490 lineto +69980 44520 lineto +69980 44680 lineto +69890 44680 lineto +stroke +newpath +70200 44470 moveto +70200 44970 lineto +70480 44470 lineto +70480 44970 lineto +stroke +newpath +70720 44470 moveto +70720 44970 lineto +70840 44970 lineto +70910 44940 lineto +70960 44900 lineto +70980 44850 lineto +71000 44750 lineto +71000 44680 lineto +70980 44590 lineto +70960 44540 lineto +70910 44490 lineto +70840 44470 lineto +70720 44470 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 45270 moveto +72640 45290 lineto +72690 45320 lineto +72810 45320 lineto +72850 45290 lineto +72880 45270 lineto +72900 45220 lineto +72900 45170 lineto +72880 45100 lineto +72590 44820 lineto +72900 44820 lineto +stroke +newpath +73190 45100 moveto +73140 45130 lineto +73120 45150 lineto +73100 45200 lineto +73100 45220 lineto +73120 45270 lineto +73140 45290 lineto +73190 45320 lineto +73290 45320 lineto +73330 45290 lineto +73360 45270 lineto +73380 45220 lineto +73380 45200 lineto +73360 45150 lineto +73330 45130 lineto +73290 45100 lineto +73190 45100 lineto +73140 45080 lineto +73120 45060 lineto +73100 45010 lineto +73100 44910 lineto +73120 44870 lineto +73140 44840 lineto +73190 44820 lineto +73290 44820 lineto +73330 44840 lineto +73360 44870 lineto +73380 44910 lineto +73380 45010 lineto +73360 45060 lineto +73330 45080 lineto +73290 45100 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 35170 moveto +74500 35170 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +66460 34970 moveto +66460 35470 lineto +66650 35470 lineto +66700 35440 lineto +66720 35420 lineto +66740 35370 lineto +66740 35300 lineto +66720 35250 lineto +66700 35230 lineto +66650 35210 lineto +66460 35210 lineto +stroke +newpath +67130 35230 moveto +67200 35210 lineto +67220 35180 lineto +67240 35130 lineto +67240 35060 lineto +67220 35020 lineto +67200 34990 lineto +67150 34970 lineto +66960 34970 lineto +66960 35470 lineto +67130 35470 lineto +67170 35440 lineto +67200 35420 lineto +67220 35370 lineto +67220 35320 lineto +67200 35280 lineto +67170 35250 lineto +67130 35230 lineto +66960 35230 lineto +stroke +newpath +67700 35470 moveto +67460 35470 lineto +67440 35230 lineto +67460 35250 lineto +67510 35280 lineto +67630 35280 lineto +67670 35250 lineto +67700 35230 lineto +67720 35180 lineto +67720 35060 lineto +67700 35020 lineto +67670 34990 lineto +67630 34970 lineto +67510 34970 lineto +67460 34990 lineto +67440 35020 lineto +stroke +newpath +68080 34780 moveto +68060 34800 lineto +68010 34870 lineto +67990 34920 lineto +67960 34990 lineto +67940 35110 lineto +67940 35210 lineto +67960 35320 lineto +67990 35400 lineto +68010 35440 lineto +68060 35520 lineto +68080 35540 lineto +stroke +newpath +68270 34970 moveto +68270 35470 lineto +68460 35470 lineto +68510 35440 lineto +68530 35420 lineto +68550 35370 lineto +68550 35300 lineto +68530 35250 lineto +68510 35230 lineto +68460 35210 lineto +68270 35210 lineto +stroke +newpath +69050 35020 moveto +69030 34990 lineto +68960 34970 lineto +68910 34970 lineto +68840 34990 lineto +68790 35040 lineto +68770 35090 lineto +68750 35180 lineto +68750 35250 lineto +68770 35350 lineto +68790 35400 lineto +68840 35440 lineto +68910 35470 lineto +68960 35470 lineto +69030 35440 lineto +69050 35420 lineto +stroke +newpath +69270 34970 moveto +69270 35470 lineto +stroke +newpath +69510 34970 moveto +69510 35470 lineto +69790 34970 lineto +69790 35470 lineto +stroke +newpath +69960 35470 moveto +70240 35470 lineto +stroke +newpath +70100 34970 moveto +70100 35470 lineto +stroke +newpath +70650 35470 moveto +70410 35470 lineto +70390 35230 lineto +70410 35250 lineto +70460 35280 lineto +70580 35280 lineto +70620 35250 lineto +70650 35230 lineto +70670 35180 lineto +70670 35060 lineto +70650 35020 lineto +70620 34990 lineto +70580 34970 lineto +70460 34970 lineto +70410 34990 lineto +70390 35020 lineto +stroke +newpath +70840 34780 moveto +70870 34800 lineto +70910 34870 lineto +70940 34920 lineto +70960 34990 lineto +70980 35110 lineto +70980 35210 lineto +70960 35320 lineto +70940 35400 lineto +70910 35440 lineto +70870 35520 lineto +70840 35540 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72900 35320 moveto +72620 35320 lineto +stroke +newpath +72760 35320 moveto +72760 35820 lineto +72710 35750 lineto +72660 35700 lineto +72620 35670 lineto +stroke +newpath +73140 35320 moveto +73240 35320 lineto +73290 35340 lineto +73310 35370 lineto +73360 35440 lineto +73380 35530 lineto +73380 35720 lineto +73360 35770 lineto +73330 35790 lineto +73290 35820 lineto +73190 35820 lineto +73140 35790 lineto +73120 35770 lineto +73100 35720 lineto +73100 35600 lineto +73120 35560 lineto +73140 35530 lineto +73190 35510 lineto +73290 35510 lineto +73330 35530 lineto +73360 35560 lineto +73380 35600 lineto +stroke +0.627 0 0 setrgbcolor +0.627 0 0 setrgbcolor +newpath +71500 45670 moveto +74500 45670 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +70100 45470 moveto +70100 45970 lineto +70220 45970 lineto +70290 45940 lineto +70340 45900 lineto +70360 45850 lineto +70380 45750 lineto +70380 45680 lineto +70360 45590 lineto +70340 45540 lineto +70290 45490 lineto +70220 45470 lineto +70100 45470 lineto +stroke +newpath +70600 45660 moveto +70980 45660 lineto +stroke +newpath +70790 45470 moveto +70790 45850 lineto +stroke +0.627 0 0 setrgbcolor +newpath +72620 46270 moveto +72640 46290 lineto +72690 46320 lineto +72810 46320 lineto +72850 46290 lineto +72880 46270 lineto +72900 46220 lineto +72900 46170 lineto +72880 46100 lineto +72590 45820 lineto +72900 45820 lineto +stroke +newpath +73140 45820 moveto +73240 45820 lineto +73290 45840 lineto +73310 45870 lineto +73360 45940 lineto +73380 46030 lineto +73380 46220 lineto +73360 46270 lineto +73330 46290 lineto +73290 46320 lineto +73190 46320 lineto +73140 46290 lineto +73120 46270 lineto +73100 46220 lineto +73100 46100 lineto +73120 46060 lineto +73140 46030 lineto +73190 46010 lineto +73290 46010 lineto +73330 46030 lineto +73360 46060 lineto +73380 46100 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +49040 50530 moveto +49040 50040 lineto +49070 49980 lineto +49100 49960 lineto +49160 49930 lineto +49270 49930 lineto +49330 49960 lineto +49360 49980 lineto +49390 50040 lineto +49390 50530 lineto +stroke +newpath +49990 49930 moveto +49640 49930 lineto +stroke +newpath +49820 49930 moveto +49820 50530 lineto +49760 50440 lineto +49700 50380 lineto +49640 50360 lineto +stroke +0 0.627 0.627 setrgbcolor +newpath +61790 31100 moveto +62080 31100 lineto +stroke +newpath +61740 30930 moveto +61940 31530 lineto +62140 30930 lineto +stroke +newpath +62250 31530 moveto +62590 31530 lineto +stroke +newpath +62420 30930 moveto +62420 31530 lineto +stroke +newpath +62790 30930 moveto +62790 31530 lineto +62990 31100 lineto +63190 31530 lineto +63190 30930 lineto +stroke +newpath +63480 31240 moveto +63680 31240 lineto +stroke +newpath +63770 30930 moveto +63480 30930 lineto +63480 31530 lineto +63770 31530 lineto +stroke +newpath +64340 31500 moveto +64280 31530 lineto +64190 31530 lineto +64110 31500 lineto +64050 31440 lineto +64020 31380 lineto +63990 31270 lineto +63990 31180 lineto +64020 31070 lineto +64050 31010 lineto +64110 30960 lineto +64190 30930 lineto +64250 30930 lineto +64340 30960 lineto +64370 30980 lineto +64370 31180 lineto +64250 31180 lineto +stroke +newpath +64590 31100 moveto +64880 31100 lineto +stroke +newpath +64540 30930 moveto +64740 31530 lineto +64940 30930 lineto +stroke +newpath +65080 31530 moveto +65450 31530 lineto +65250 31300 lineto +65330 31300 lineto +65390 31270 lineto +65420 31240 lineto +65450 31180 lineto +65450 31040 lineto +65420 30980 lineto +65390 30960 lineto +65330 30930 lineto +65160 30930 lineto +65100 30960 lineto +65080 30980 lineto +stroke +newpath +65670 31470 moveto +65700 31500 lineto +65760 31530 lineto +65900 31530 lineto +65960 31500 lineto +65990 31470 lineto +66020 31410 lineto +66020 31360 lineto +65990 31270 lineto +65650 30930 lineto +66020 30930 lineto +stroke +newpath +66270 31530 moveto +66270 31040 lineto +66300 30980 lineto +66330 30960 lineto +66390 30930 lineto +66500 30930 lineto +66560 30960 lineto +66590 30980 lineto +66620 31040 lineto +66620 31530 lineto +stroke +newpath +66870 31470 moveto +66900 31500 lineto +66960 31530 lineto +67100 31530 lineto +67160 31500 lineto +67190 31470 lineto +67220 31410 lineto +67220 31360 lineto +67190 31270 lineto +66850 30930 lineto +67220 30930 lineto +stroke +showpage +grestore +%%EOF