avr/nano: i2c fixes
authorErik Andresen <erik@vontaene.de>
Sat, 16 Sep 2017 19:38:00 +0000 (21:38 +0200)
committerErik Andresen <erik@vontaene.de>
Sat, 16 Sep 2017 19:38:00 +0000 (21:38 +0200)
avr/nano/main.c
avr/nano/main.hex

index aba8aa1..16a316c 100644 (file)
@@ -5,6 +5,9 @@
 #include <avr/interrupt.h>
 #include <avr/sleep.h>
 #include <util/delay.h>
+#include <util/twi.h>
+#include <avr/eeprom.h>
+#include <avr/wdt.h>
 #include "uart.h"
 
 /*
@@ -34,9 +37,9 @@
  */
 
 
-#define TWI_ACK                TWCR = (1<<TWEA) | (1<<TWINT) | (1<<TWEN) | (1<<TWIE)
-#define TWI_RESET      TWCR &= ~((1 << TWSTO) | (1 << TWEN)); TWI_ACK
-#define TWI_NAK                TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE)
+#define TWI_ACK   TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN) | (1<<TWIE)
+#define TWI_NAK   TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWIE)
+#define TWI_RESET TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWSTO) | (1<<TWEN) | (1<<TWIE);
 
 static volatile uint8_t ireg=0;
 static volatile uint8_t bootloader=0;
@@ -55,13 +58,13 @@ ISR(TWI_vect)
 {
        static int16_t tmp16=0;
 
-       switch (TWSR & 0xF8)
+       switch(TW_STATUS)
        {  
-               case 0x60: // start write
+               case TW_SR_SLA_ACK: // start write
                        TWI_ACK;
                        ireg = 0;
                        break;
-               case 0x80: // write
+               case TW_SR_DATA_ACK: // write
                        switch(ireg) {
                                case 0x00: // register select
                                        ireg = TWDR;
@@ -80,8 +83,8 @@ ISR(TWI_vect)
                        }
                        ireg++;
                        break;
-               case 0xA8: // start read
-               case 0xB8: // read
+               case TW_ST_SLA_ACK: // start read
+               case TW_ST_DATA_ACK: // read
                        switch(ireg) {
                                case 0x01: // Distance left MSB
                                        tmp16 = dist_left;
@@ -170,6 +173,9 @@ ISR(TWI_vect)
                        }
                        ireg++;
                        break;
+               case TW_SR_STOP:
+                       TWI_ACK;
+                       break;
                default:
                        TWI_RESET;
        }
@@ -289,7 +295,7 @@ int main(void) {
 
        // I2C
        TWAR = 0x52;
-       TWI_RESET;
+       TWI_ACK;
 
        // Timer 1: Normal mode, Top: 0xffff, Prescaler: F_CPU/256=62500Hz
        TCCR1A = 0x0;
@@ -317,10 +323,11 @@ int main(void) {
                        case 0xff: // Magic reg that starts the bootloader
                                if (bootloader == 0xa5) {
                                        cli();
-                                       {
-                                               void (*start)(void) = (void*)0x1800;
-                                               start();
-                                       }
+                                       // write mark to first area in eeprom
+                                       eeprom_write_byte((uint8_t*)0, 123);
+                                       eeprom_busy_wait();
+                                       // Use watchdog to restart
+                                       wdt_enable(WDTO_15MS);
                                }
                                break;
                }
index be5260d..7f1bb78 100644 (file)
@@ -4,34 +4,34 @@
 :100030000C9477000C9477000C9477000C94770064\r
 :100040000C9477000C9477000C9443020C94770086\r
 :100050000C9477000C9477000C9477000C94770044\r
-:100060000C9479000C947700D000F400D500F400D3\r
-:10007000E500F400EA00F400E000F400EF00F40012\r
-:10008000FA00FA00FA00FA00FA00FA00FA00FA00A0\r
-:10009000E500F400EA00F400EF00F400454647658F\r
+:100060000C9479000C947700D300F700D800F700C7\r
+:10007000E800F700ED00F700E300F700F200F700FA\r
+:10008000FD00FD00FD00FD00FD00FD00FD00FD0088\r
+:10009000E800F700ED00F700F200F700454647657D\r
 :1000A000666700202B2D2E30313233343536373809\r
 :1000B0003968000011241FBECFEFD8E0DEBFCDBFEE\r
-:1000C00011E0A0E0B1E0EEE6F3E102C005900D9290\r
+:1000C00011E0A0E0B1E0ECE9F3E102C005900D928F\r
 :1000D000A031B107D9F721E0A0E1B1E001C01D9244\r
-:1000E000AF39B207E1F70E944D030C94B5090C94A7\r
+:1000E000AF39B207E1F70E944D030C94CC090C9490\r
 :1000F00000001F920F920FB60F9211248F939F93BF\r
-:10010000AF93BF93EF93FF938091B900887F8038BE\r
-:1001100079F048F4803609F078C085EC8093BC0013\r
-:10012000109229017AC0883A71F1883B61F16DC063\r
-:1001300080912901882341F08F3F09F05DC08091B3\r
-:10014000BB008093280158C08091BB008093290197\r
-:1001500080912901853019F481E080931D018091FF\r
-:100160002901873019F481E080931B0180912901D6\r
-:100170008B3019F481E080931C018091290181501A\r
-:100180008093290135C0E09129018E2F90E0FC0178\r
-:100190003197EA31F10570F5EC5CFF4F0C94EA06FB\r
-:1001A000809126019091270104C0809124019091B3\r
-:1001B000250180931601909317019093BB0018C0FE\r
-:1001C0008091190190911A01F4CF809122019091B0\r
-:1001D0002301EFCF80911E0190911F01EACF809102\r
-:1001E000200190912101E5CF809116018093BB0001\r
-:1001F00085EC03C01092BB0085E88093BC00809121\r
-:1002000029018F5F8093290108C08091BC008B7EFB\r
-:100210008093BC0085EC8093BC00FF91EF91BF916F\r
+:10010000AF93BF93EF93FF938091B900887F803ABC\r
+:1001100009F47EC028F4803641F0803861F07AC05E\r
+:10012000883AA1F1883B91F175C085EC8093BC00C1\r
+:100130001092290172C080912901882341F08F3FDC\r
+:1001400009F05DC08091BB008093280158C0809168\r
+:10015000BB008093290180912901853019F481E049\r
+:1001600080931D0180912901873019F481E08093EB\r
+:100170001B01809129018B3019F481E080931C01CF\r
+:100180008091290181508093290135C0E091290196\r
+:100190008E2F90E0FC013197EA31F10570F5EC5CAF\r
+:1001A000FF4F0C94F306809126019091270104C023\r
+:1001B000809124019091250180931601909317015D\r
+:1001C0009093BB0018C08091190190911A01F4CF4F\r
+:1001D0008091220190912301EFCF80911E01909197\r
+:1001E0001F01EACF8091200190912101E5CF8091FC\r
+:1001F00016018093BB0085EC03C01092BB0085E81C\r
+:100200008093BC00809129018F5F8093290105C0F4\r
+:1002100085EC01C085ED8093BC00FF91EF91BF910B\r
 :10022000AF919F918F910F900FBE0F901F901895D7\r
 :1002300093E890937A0080937C0080917C008064A6\r
 :1002400080937C0080917A00806480937A00809112\r
 :1002600080E090E030917A00306430937A003091F1\r
 :100270007A0036FDFCCF4091780050917900840FD0\r
 :10028000951F215079F720917A002F7720937A00DB\r
-:1002900065E070E00E94B706CB0108951F920F92AF\r
+:1002900065E070E00E94C006CB0108951F920F92A6\r
 :1002A0000FB60F9211242F933F934F935F936F9349\r
 :1002B0007F938F939F93AF93BF93EF93FF9360913F\r
 :1002C0008400709185004A9B05C07093150160936E\r
 :1002D00014011DC08091140190911501681B790BC8\r
-:1002E00080E090E00E94BC0527EE3CE840E350E44B\r
-:1002F0000E944A0620E030E040E05FE30E942105D2\r
-:100300000E948D057093230160932201E898FF916C\r
+:1002E00080E090E00E94C50527EE3CE840E350E442\r
+:1002F0000E94530620E030E040E05FE30E942A05C0\r
+:100300000E9496057093230160932201E898FF9163\r
 :10031000EF91BF91AF919F918F917F916F915F917D\r
 :100320004F913F912F910F900FBE0F901F901895F6\r
 :100330001F920F920FB60F9211242F933F934F935A\r
 :100340005F936F937F938F939F93AF93BF93EF933D\r
 :10035000FF9360918400709185004B9B05C0709362\r
 :100360001301609312011DC080911201909113013D\r
-:10037000681B790B80E090E00E94BC0527EE3CE80A\r
-:1003800040E350E40E944A0620E030E040E05FE3B2\r
-:100390000E9421050E948D0570931F0160931E012C\r
+:10037000681B790B80E090E00E94C50527EE3CE801\r
+:1003800040E350E40E94530620E030E040E05FE3A9\r
+:100390000E942A050E94960570931F0160931E011A\r
 :1003A000E998FF91EF91BF91AF919F918F917F91CC\r
 :1003B0006F915F914F913F912F910F900FBE0F90D2\r
 :1003C0001F9018951F920F920FB60F9211242F9322\r
@@ -64,9 +64,9 @@
 :1003F00089B1898390911801892784FF2DC060916C\r
 :10040000840070918500898184FF05C0709311017B\r
 :100410006093100121C08091100190911101681B1F\r
-:10042000790B80E090E00E94BC0527EE3CE840E3B9\r
-:1004300050E40E944A0620E030E040E05FE30E9482\r
-:1004400021050E948D057093210160932001809108\r
+:10042000790B80E090E00E94C50527EE3CE840E3B0\r
+:1004300050E40E94530620E030E040E05FE30E9479\r
+:100440002A050E94960570932101609320018091F6\r
 :100450006D008F7E80936D008981809318010F90CD\r
 :10046000DF91CF91FF91EF91BF91AF919F918F91CC\r
 :100470007F916F915F914F913F912F910F900FBEA0\r
@@ -79,7 +79,7 @@
 :1004E0009C01E1ECF0E080818861808380818068FC\r
 :1004F0008083E2ECF0E0808186608083C901A0E027\r
 :10050000B0E09C01AD0184E0220F331F441F551F52\r
-:100510008A95D1F760E074E284EF90E00E94CB0608\r
+:100510008A95D1F760E074E284EF90E00E94D406FF\r
 :10052000DA01C9010197A109B109892F9A2FAB2FCF\r
 :10053000BB27A7FDBA958093C50021502093C40026\r
 :100540008EE291E090932B0180932A0190932D01EC\r
@@ -90,7 +90,7 @@
 :100590002196FC012081222319F00E94AB02F7CFA3\r
 :1005A000DF91CF9108958091C00087FFFCCF8091AB\r
 :1005B000C60090E008950C94D3026BED72E084EBDA\r
-:1005C00092E00C945407CF93DF93FC01E253FF4F6A\r
+:1005C00092E00C945D07CF93DF93FC01E253FF4F61\r
 :1005D000A081B181EC01C453DF4F28813981A2177A\r
 :1005E000B307B9F02091C00025FF13C02C912093D0\r
 :1005F000C60020813181AC0145535F4F2417350778\r
 :100680002B01E0932A0106C08EE291E090932B01AA\r
 :1006900080932A01DF91CF9108951092280180E87C\r
 :1006A00095E20E9470020E94DD0282E58093BA000A\r
-:1006B0008091BC008B7E8093BC0085EC8093BC0055\r
-:1006C0001092800084E08093810095E0909369000F\r
-:1006D0008093680086E091E00E94D70783B7817F0E\r
-:1006E00083BF7894C0E0D8E180912901833081F004\r
-:1006F00050F4813089F580E00E9418019093270121\r
-:100700008093260129C0893059F08F3FF1F024C031\r
-:1007100081E00E94180190932501809324011CC060\r
-:1007200082E00E941801BC0180E090E00E94BC05BC\r
-:1007300028E431EE4AEB5FE30E944A060E948D05F1\r
-:1007400070931A016093190107C080912801853ABE\r
-:1007500019F4F894FE01099580911D01882391F008\r
-:1007600010921D011092230110922201529A5A9A5E\r
-:10077000F5E3FA95F1F700005A9852988CB381701E\r
-:100780008CBBE89A80911B01882391F010921B0189\r
-:1007900010921F0110921E01539A5B9A85E38A956D\r
-:1007A000F1F700005B9853988CB382708CBBE99A88\r
-:1007B00080911C018823B1F010921C01109221013C\r
-:1007C00010922001549A5C9AE5E3EA95F1F7000053\r
-:1007D0005C98549889B18093180180916D00806174\r
-:1007E00080936D0083B7816083BF889583B78E7FC8\r
-:1007F00083BF7ACFACE0B0E0E0E0F4E00C94F40624\r
-:100800006C015B017A01FC0117821682838181FFF2\r
-:100810000EC1CE0101964C01F6010381F50103FDE5\r
-:10082000159103FF11915F01112309F4FCC01532EA\r
-:1008300049F403FD159103FF11915F01153211F089\r
-:1008400020E01BC0B601812F90E00E949F07370176\r
-:100850007301E2CF112309F4E6C0612F70E083EA4F\r
-:1008600090E02C870E9449072C85892B49F0F501DF\r
-:1008700003FD159103FF11915F0127FFEBCF09C025\r
-:10088000133229F01C3609F0D5C02068F0CF20E1E2\r
-:10089000EECF022F112309F4C6C0612F70E08CE95E\r
-:1008A00090E02C870E9449072C85892B41F0370165\r
-:1008B000F4E06F0E711CB6018FE390E011C01336A7\r
-:1008C00039F0133781F0133519F5022F01600BC091\r
-:1008D000370182E0680E711CB601F70180819181B9\r
-:1008E0000E949F07B5CF3701F2E06F0E711CF70130\r
-:1008F000E080F180F70100FD859100FF81917F018B\r
-:10090000882309F4A5CFB60190E00E949F07F2CF9B\r
-:10091000143611F0193629F5370127FF09C0F4E024\r
-:100920006F0E711CF70160817181828193810AC011\r
-:10093000F2E06F0E711CF70160817181072E000CCF\r
-:10094000880B990B022F0F7E97FF08C0909580951A\r
-:10095000709561957F4F8F4F9F4F00642AE030E084\r
-:1009600033C0103799F040F41835B1F01F3609F054\r
-:100970005AC028E030E014C0153719F0183741F09C\r
-:1009800052C0022F0F7E2AE030E00AC0022F006121\r
-:10099000046220E130E004C0022F046020E132E074\r
-:1009A000370107FF09C0F4E06F0E711CF701608189\r
-:1009B00071818281938108C0F2E06F0E711CF70192\r
-:1009C0006081718180E090E0A4010E940708182FE7\r
-:1009D000181906FF05C0B6018DE290E00E949F073E\r
-:1009E00004FF15C0FE01E10FF11D8081803379F015\r
-:1009F000B60180E390E00E949F0702FF08C00072EA\r
-:100A0000802F90E0B601885A9F4F0E949F07115097\r
-:100A1000F401E10FF11D8081B60190E00E949F0773\r
-:100A20001111F5CF15CFF6018681978105C08FEFA3\r
-:100A30009FEF02C0022F31CF2C96EEE00C941007EE\r
-:100A40005058BB27AA270E9438050C9410060E9414\r
-:100A5000020638F00E94090620F039F49F3F19F48D\r
-:100A600026F40C94FF050EF4E095E7FB0C94F905D1\r
-:100A7000E92F0E94210658F3BA176207730784070B\r
-:100A8000950720F079F4A6F50C9443060EF4E09552\r
-:100A90000B2EBA2FA02D0B01B90190010C01CA0138\r
-:100AA000A0011124FF27591B99F0593F50F4503EE3\r
-:100AB00068F11A16F040A22F232F342F4427585FD5\r
-:100AC000F3CF469537952795A795F0405395C9F7ED\r
-:100AD0007EF41F16BA0B620B730B840BBAF09150A5\r
-:100AE000A1F0FF0FBB1F661F771F881FC2F70EC044\r
-:100AF000BA0F621F731F841F48F487957795679517\r
-:100B0000B795F7959E3F08F0B0CF9395880F08F002\r
-:100B10009927EE0F9795879508950E94290688F0EA\r
-:100B20009F5798F0B92F9927B751B0F0E1F0660FB1\r
-:100B3000771F881F991F1AF0BA95C9F714C0B130F2\r
-:100B400091F00E944306B1E008950C944306672F8C\r
-:100B5000782F8827B85F39F0B93FCCF38695779521\r
-:100B60006795B395D9F73EF490958095709561950A\r
-:100B70007F4F8F4F9F4F0895E89409C097FB3EF435\r
-:100B800090958095709561957F4F8F4F9F4F9923DA\r
-:100B9000A9F0F92F96E9BB279395F6958795779558\r
-:100BA0006795B795F111F8CFFAF4BB0F11F460FF18\r
-:100BB0001BC06F5F7F4F8F4F9F4F16C0882311F070\r
-:100BC00096E911C0772321F09EE8872F762F05C084\r
-:100BD000662371F096E8862F70E060E02AF09A951F\r
-:100BE000660F771F881FDAF7880F9695879597F914\r
-:100BF000089597F99F6780E870E060E008959FEF9F\r
-:100C000080EC089500240A941616170618060906A3\r
-:100C1000089500240A941216130614060506089572\r
-:100C2000092E0394000C11F4882352F0BB0F40F4FA\r
-:100C3000BF2B11F460FF04C06F5F7F4F8F4F9F4F3A\r
-:100C4000089557FD9058440F551F59F05F3F71F0BC\r
-:100C50004795880F97FB991F61F09F3F79F0879523\r
-:100C60000895121613061406551FF2CF4695F1DFAC\r
-:100C700008C0161617061806991FF1CF869571053C\r
-:100C8000610508940895E894BB2766277727CB0170\r
-:100C900097F908950E945D060C9410060E940206C2\r
-:100CA00038F00E94090620F0952311F00C94F90504\r
-:100CB0000C94FF0511240C9444060E94210670F345\r
-:100CC000959FC1F3950F50E0551F629FF001729FF1\r
-:100CD000BB27F00DB11D639FAA27F00DB11DAA1F00\r
-:100CE000649F6627B00DA11D661F829F2227B00D4D\r
-:100CF000A11D621F739FB00DA11D621F839FA00DD8\r
-:100D0000611D221F749F3327A00D611D231F849F27\r
-:100D1000600D211D822F762F6A2F11249F5750407E\r
-:100D20009AF0F1F088234AF0EE0FFF1FBB1F661FF9\r
-:100D3000771F881F91505040A9F79E3F510580F0C2\r
-:100D40000C94F9050C9444065F3FE4F3983ED4F309\r
-:100D5000869577956795B795F795E7959F5FC1F766\r
-:100D6000FE2B880F911D9695879597F90895AA1BDC\r
-:100D7000BB1B51E107C0AA1FBB1FA617B70710F086\r
-:100D8000A61BB70B881F991F5A95A9F780959095B8\r
-:100D9000BC01CD010895052E97FB1EF400940E941E\r
-:100DA000E20657FD07D00E94270707FC03D04EF448\r
-:100DB0000C94E20650954095309521953F4F4F4F4A\r
-:100DC0005F4F089590958095709561957F4F8F4FF7\r
-:100DD0009F4F0895EE0FFF1F0590F491E02D0994A9\r
-:100DE0002F923F924F925F926F927F928F929F923B\r
-:100DF000AF92BF92CF92DF92EF92FF920F931F9329\r
-:100E0000CF93DF93CDB7DEB7CA1BDB0B0FB6F894D9\r
-:100E1000DEBF0FBECDBF09942A88398848885F8419\r
-:100E20006E847D848C849B84AA84B984C884DF808A\r
-:100E3000EE80FD800C811B81AA81B981CE0FD11D6E\r
-:100E40000FB6F894DEBF0FBECDBFED010895A1E24D\r
-:100E50001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F34\r
-:100E6000FF1FA217B307E407F50720F0A21BB30B7F\r
-:100E7000E40BF50B661F771F881F991F1A9469F7FB\r
-:100E800060957095809590959B01AC01BD01CF0157\r
-:100E90000895FC010590061621F00020D9F7C00145\r
-:100EA00008953197CF0108950F931F93CF93DF9348\r
-:100EB000009731F46115710519F480E090E03AC0B3\r
-:100EC0008B01EC016EE070E081E090E00E9465082B\r
-:100ED000FC01892B91F380E883830115110571F0E2\r
-:100EE0001387028781E88383809195019091960111\r
-:100EF000892B21F4F0939601E09395012097C9F096\r
-:100F0000D187C0878381826083838091970190918C\r
-:100F10009801892B71F4F0939801E09397018091E7\r
-:100F2000990190919A01892B21F4F0939A01E09311\r
-:100F30009901CF01DF91CF911F910F9108950F93E8\r
-:100F40001F93CF93DF93FB01238121FD03C08FEF1C\r
-:100F50009FEF28C022FF16C046815781248135812A\r
-:100F60004217530744F4A081B1819D012F5F3F4F89\r
-:100F7000318320838C93268137812F5F3F4F3783C6\r
-:100F8000268310C0EB01092F182F0084F185E02D76\r
-:100F90000995892BE1F68E819F8101969F838E832F\r
-:100FA000812F902FDF91CF911F910F9108950F9373\r
-:100FB0001F93CF93DF93E0919701F09198012381E4\r
-:100FC00021FF1BC08C01D0E0C0E0F80181918F01AE\r
-:100FD0006091970170919801DB011896ED91FC9159\r
-:100FE0001997882331F00995892B79F3DFEFCFEF3B\r
-:100FF000ECCF8AE00995892B19F08FEF9FEF02C0A3\r
-:101000008D2F9C2FDF91CF911F910F910895FA01A1\r
-:10101000AA27283051F1203181F1E8946F936E7F37\r
-:101020006E5F7F4F8F4F9F4FAF4FB1E03ED0B4E028\r
-:101030003CD0670F781F891F9A1FA11D680F791F69\r
-:101040008A1F911DA11D6A0F711D811D911DA11D7A\r
-:1010500020D009F468943F912AE0269F112430198A\r
-:10106000305D3193DEF6CF010895462F4770405D25\r
-:101070004193B3E00FD0C9F7F6CF462F4F70405DD4\r
-:101080004A3318F0495D31FD4052419302D0A9F72F\r
-:10109000EACFB4E0A6959795879577956795BA9529\r
-:1010A000C9F700976105710508959B01AC010A2EEF\r
-:1010B00006945795479537952795BA95C9F7620FC6\r
-:1010C000731F841F951FA01D08950F931F93CF9327\r
-:1010D000DF93869F8001879F100D969F100D11242E\r
-:1010E000C8010E948108EC01009729F0A80160E086\r
-:1010F00070E00E94AE09CE01DF91CF911F910F9158\r
-:101100000895CF93DF938230910510F482E090E050\r
-:10111000E0919D01F0919E0120E030E0C0E0D0E040\r
-:10112000309711F14081518148175907C0F0481795\r
-:10113000590761F482819381209719F09B838A83F8\r
-:101140002BC090939E0180939D0126C021153105EF\r
-:1011500019F04217530718F49A01BE01DF01EF019D\r
-:101160000280F381E02DDCCF2115310509F1281B28\r
-:10117000390B2430310590F412968D919C91139780\r
-:101180006115710521F0FB019383828304C0909364\r
-:101190009E0180939D01FD01329644C0FD01E20F46\r
-:1011A000F31F81939193225031092D933C933AC0C0\r
-:1011B00020919B0130919C01232B41F4209102014D\r
-:1011C0003091030130939C0120939B0120910001F9\r
-:1011D000309101012115310541F42DB73EB7409101\r
-:1011E000040150910501241B350BE0919B01F09106\r
-:1011F0009C01E217F307A0F42E1B3F0B28173907B9\r
-:1012000078F0AC014E5F5F4F2417350748F04E0F62\r
-:101210005F1F50939C0140939B018193919302C067\r
-:10122000E0E0F0E0CF01DF91CF9108950F931F939D\r
-:10123000CF93DF93009709F48CC0FC01329713829F\r
-:10124000128200919D0110919E010115110581F4FA\r
-:1012500020813181820F931F20919B0130919C014D\r
-:101260002817390779F5F0939C01E0939B0171C031\r
-:10127000D80140E050E0AE17BF0750F412962D9110\r
-:101280003C911397AD012115310509F1D901F3CF37\r
-:101290009D01DA013383228360817181860F971F5C\r
-:1012A0008217930769F4EC0128813981260F371FD3\r
-:1012B0002E5F3F4F318320838A819B81938382837A\r
-:1012C000452B29F4F0939E01E0939D0142C01396B3\r
-:1012D000FC93EE931297ED01499159919E01240FD1\r
-:1012E000351FE217F30771F480819181840F951FF8\r
-:1012F000029611969C938E938281938113969C9370\r
-:101300008E931297E0E0F0E0D80112968D919C91B7\r
-:101310001397009719F0F8018C01F6CF8D919C91ED\r
-:1013200098012E5F3F4F820F931F20919B013091B8\r
-:101330009C012817390769F4309729F410929E010F\r
-:1013400010929D0102C01382128210939C0100939F\r
-:101350009B01DF91CF911F910F910895DC0101C096\r
-:0E1360006D9341505040E0F70895F894FFCF90\r
-:10136E0000009F0120000D0A53746172740D00007D\r
+:1006B00085EC8093BC001092800084E080938100E0\r
+:1006C00095E0909369008093680086E091E00E9435\r
+:1006D000E00783B7817F83BF7894C8E1D8E0809139\r
+:1006E0002901833089F058F4813009F03EC080E060\r
+:1006F0000E941801909327018093260136C089300B\r
+:1007000059F08F3FF1F031C081E00E9418019093C1\r
+:1007100025018093240129C082E00E941801BC01B8\r
+:1007200080E090E00E94C50528E431EE4AEB5FE3EB\r
+:100730000E9453060E94960570931A016093190156\r
+:1007400014C080912801853A81F4F8946BE780E029\r
+:1007500090E00E94BE09F999FECF0FB6F894A895D3\r
+:10076000C09360000FBED093600080911D0188236C\r
+:1007700091F010921D011092230110922201529AC1\r
+:100780005A9A85E38A95F1F700005A9852988CB3EB\r
+:1007900081708CBBE89A80911B01882391F01092A4\r
+:1007A0001B0110921F0110921E01539A5B9A85E360\r
+:1007B0008A95F1F700005B9853988CB382708CBBDC\r
+:1007C000E99A80911C018823B1F010921C011092CB\r
+:1007D000210110922001549A5C9A85E38A95F1F7E1\r
+:1007E00000005C98549889B18093180180916D0045\r
+:1007F000806180936D0083B7816083BF889583B7E4\r
+:100800008E7F83BF6CCFACE0B0E0E9E0F4E00C9405\r
+:10081000FD066C015B017A01FC011782168283815F\r
+:1008200081FF0EC1CE0101964C01F6010381F50155\r
+:1008300003FD159103FF11915F01112309F4FCC021\r
+:10084000153249F403FD159103FF11915F01153233\r
+:1008500011F020E01BC0B601812F90E00E94A80794\r
+:1008600037017301E2CF112309F4E6C0612F70E074\r
+:1008700083EA90E02C870E9452072C85892B49F04F\r
+:10088000F50103FD159103FF11915F0127FFEBCFE8\r
+:1008900009C0133229F01C3609F0D5C02068F0CF0A\r
+:1008A00020E1EECF022F112309F4C6C0612F70E0C2\r
+:1008B0008CE990E02C870E9452072C85892B41F00F\r
+:1008C0003701F4E06F0E711CB6018FE390E011C0A8\r
+:1008D000133639F0133781F0133519F5022F016003\r
+:1008E0000BC0370182E0680E711CB601F7018081F0\r
+:1008F00091810E94A807B5CF3701F2E06F0E711CFD\r
+:10090000F701E080F180F70100FD859100FF819102\r
+:100910007F01882309F4A5CFB60190E00E94A807C3\r
+:10092000F2CF143611F0193629F5370127FF09C027\r
+:10093000F4E06F0E711CF7016081718182819381F7\r
+:100940000AC0F2E06F0E711CF70160817181072E01\r
+:10095000000C880B990B022F0F7E97FF08C0909513\r
+:100960008095709561957F4F8F4F9F4F00642AE06F\r
+:1009700030E033C0103799F040F41835B1F01F362D\r
+:1009800009F05AC028E030E014C0153719F01837C4\r
+:1009900041F052C0022F0F7E2AE030E00AC0022F41\r
+:1009A0000061046220E130E004C0022F046020E115\r
+:1009B00032E0370107FF09C0F4E06F0E711CF70148\r
+:1009C000608171818281938108C0F2E06F0E711C99\r
+:1009D000F7016081718180E090E0A4010E9410081D\r
+:1009E000182F181906FF05C0B6018DE290E00E948D\r
+:1009F000A80704FF15C0FE01E10FF11D80818033BF\r
+:100A000079F0B60180E390E00E94A80702FF08C0D9\r
+:100A10000072802F90E0B601885A9F4F0E94A8076D\r
+:100A20001150F401E10FF11D8081B60190E00E94A8\r
+:100A3000A8071111F5CF15CFF6018681978105C062\r
+:100A40008FEF9FEF02C0022F31CF2C96EEE00C9477\r
+:100A500019075058BB27AA270E9441050C94190674\r
+:100A60000E940B0638F00E94120620F039F49F3FD6\r
+:100A700019F426F40C9408060EF4E095E7FB0C94A8\r
+:100A80000206E92F0E942A0658F3BA176207730775\r
+:100A90008407950720F079F4A6F50C944C060EF423\r
+:100AA000E0950B2EBA2FA02D0B01B90190010C017E\r
+:100AB000CA01A0011124FF27591B99F0593F50F496\r
+:100AC000503E68F11A16F040A22F232F342F4427EE\r
+:100AD000585FF3CF469537952795A795F0405395E6\r
+:100AE000C9F77EF41F16BA0B620B730B840BBAF0B6\r
+:100AF0009150A1F0FF0FBB1F661F771F881FC2F721\r
+:100B00000EC0BA0F621F731F841F48F48795779534\r
+:100B10006795B795F7959E3F08F0B0CF9395880FEE\r
+:100B200008F09927EE0F9795879508950E94320651\r
+:100B300088F09F5798F0B92F9927B751B0F0E1F09E\r
+:100B4000660F771F881F991F1AF0BA95C9F714C04E\r
+:100B5000B13091F00E944C06B1E008950C944C061F\r
+:100B6000672F782F8827B85F39F0B93FCCF3869587\r
+:100B700077956795B395D9F73EF4909580957095E4\r
+:100B800061957F4F8F4F9F4F0895E89409C097FB61\r
+:100B90003EF490958095709561957F4F8F4F9F4F54\r
+:100BA0009923A9F0F92F96E9BB279395F695879598\r
+:100BB00077956795B795F111F8CFFAF4BB0F11F45B\r
+:100BC00060FF1BC06F5F7F4F8F4F9F4F16C0882302\r
+:100BD00011F096E911C0772321F09EE8872F762F38\r
+:100BE00005C0662371F096E8862F70E060E02AF079\r
+:100BF0009A95660F771F881FDAF7880F9695879565\r
+:100C000097F9089597F99F6780E870E060E008958C\r
+:100C10009FEF80EC089500240A9416161706180614\r
+:100C20000906089500240A941216130614060506F0\r
+:100C30000895092E0394000C11F4882352F0BB0F81\r
+:100C400040F4BF2B11F460FF04C06F5F7F4F8F4FE4\r
+:100C50009F4F089557FD9058440F551F59F05F3F1F\r
+:100C600071F04795880F97FB991F61F09F3F79F0CE\r
+:100C700087950895121613061406551FF2CF469550\r
+:100C8000F1DF08C0161617061806991FF1CF8695D2\r
+:100C90007105610508940895E894BB2766277727B6\r
+:100CA000CB0197F908950E9466060C9419060E94DC\r
+:100CB0000B0638F00E94120620F0952311F00C94D8\r
+:100CC00002060C94080611240C944D060E942A0674\r
+:100CD00070F3959FC1F3950F50E0551F629FF0018F\r
+:100CE000729FBB27F00DB11D639FAA27F00DB11DA8\r
+:100CF000AA1F649F6627B00DA11D661F829F222731\r
+:100D0000B00DA11D621F739FB00DA11D621F839FB7\r
+:100D1000A00D611D221F749F3327A00D611D231F8D\r
+:100D2000849F600D211D822F762F6A2F11249F57DB\r
+:100D300050409AF0F1F088234AF0EE0FFF1FBB1FDE\r
+:100D4000661F771F881F91505040A9F79E3F51059D\r
+:100D500080F00C9402060C944D065F3FE4F3983E3D\r
+:100D6000D4F3869577956795B795F795E7959F5F47\r
+:100D7000C1F7FE2B880F911D9695879597F90895D9\r
+:100D8000AA1BBB1B51E107C0AA1FBB1FA617B707B1\r
+:100D900010F0A61BB70B881F991F5A95A9F78095CD\r
+:100DA0009095BC01CD010895052E97FB1EF400948B\r
+:100DB0000E94EB0657FD07D00E94300707FC03D0C6\r
+:100DC0004EF40C94EB0650954095309521953F4F8D\r
+:100DD0004F4F5F4F089590958095709561957F4F27\r
+:100DE0008F4F9F4F0895EE0FFF1F0590F491E02D58\r
+:100DF00009942F923F924F925F926F927F928F92BF\r
+:100E00009F92AF92BF92CF92DF92EF92FF920F9399\r
+:100E10001F93CF93DF93CDB7DEB7CA1BDB0B0FB6A3\r
+:100E2000F894DEBF0FBECDBF09942A883988488860\r
+:100E30005F846E847D848C849B84AA84B984C884F6\r
+:100E4000DF80EE80FD800C811B81AA81B981CE0FED\r
+:100E5000D11D0FB6F894DEBF0FBECDBFED010895D2\r
+:100E6000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FAE\r
+:100E7000EE1FFF1FA217B307E407F50720F0A21B20\r
+:100E8000B30BE40BF50B661F771F881F991F1A948D\r
+:100E900069F760957095809590959B01AC01BD01B7\r
+:100EA000CF010895FC010590061621F00020D9F726\r
+:100EB000C00108953197CF0108950F931F93CF93E9\r
+:100EC000DF93009731F46115710519F480E090E02B\r
+:100ED0003AC08B01EC016EE070E081E090E00E948E\r
+:100EE0006E08FC01892B91F380E8838301151105BD\r
+:100EF00071F01387028781E8838380919501909137\r
+:100F00009601892B21F4F0939601E09395012097A7\r
+:100F1000C9F0D187C08783818260838380919701E4\r
+:100F200090919801892B71F4F0939801E0939701C7\r
+:100F30008091990190919A01892B21F4F0939A0163\r
+:100F4000E0939901CF01DF91CF911F910F91089507\r
+:100F50000F931F93CF93DF93FB01238121FD03C0E8\r
+:100F60008FEF9FEF28C022FF16C046815781248152\r
+:100F700035814217530744F4A081B1819D012F5F51\r
+:100F80003F4F318320838C93268137812F5F3F4FE2\r
+:100F90003783268310C0EB01092F182F0084F185B9\r
+:100FA000E02D0995892BE1F68E819F8101969F8323\r
+:100FB0008E83812F902FDF91CF911F910F910895F4\r
+:100FC0000F931F93CF93DF93E0919701F0919801D6\r
+:100FD000238121FF1BC08C01D0E0C0E0F80181918A\r
+:100FE0008F016091970170919801DB011896ED9146\r
+:100FF000FC911997882331F00995892B79F3DFEF5C\r
+:10100000CFEFECCF8AE00995892B19F08FEF9FEF96\r
+:1010100002C08D2F9C2FDF91CF911F910F910895CA\r
+:10102000FA01AA27283051F1203181F1E8946F9319\r
+:101030006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED0BF\r
+:10104000B4E03CD0670F781F891F9A1FA11D680F5D\r
+:10105000791F8A1F911DA11D6A0F711D811D911D90\r
+:10106000A11D20D009F468943F912AE0269F112405\r
+:101070003019305D3193DEF6CF010895462F477069\r
+:10108000405D4193B3E00FD0C9F7F6CF462F4F70C4\r
+:10109000405D4A3318F0495D31FD4052419302D022\r
+:1010A000A9F7EACFB4E0A6959795879577956795C8\r
+:1010B000BA95C9F700976105710508959B01AC01C8\r
+:1010C0000A2E06945795479537952795BA95C9F7EF\r
+:1010D000620F731F841F951FA01D08950F931F9308\r
+:1010E000CF93DF93869F8001879F100D969F100DF1\r
+:1010F0001124C8010E948A08EC01009729F0A80178\r
+:1011000060E070E00E94B709CE01DF91CF911F919E\r
+:101110000F910895CF93DF938230910510F482E010\r
+:1011200090E0E0919D01F0919E0120E030E0C0E070\r
+:10113000D0E0309711F14081518148175907C0F034\r
+:101140004817590761F482819381209719F09B8396\r
+:101150008A832BC090939E0180939D0126C0211508\r
+:10116000310519F04217530718F49A01BE01DF0147\r
+:10117000EF010280F381E02DDCCF2115310509F16B\r
+:10118000281B390B2430310590F412968D919C91D7\r
+:1011900013976115710521F0FB019383828304C0CD\r
+:1011A00090939E0180939D01FD01329644C0FD0104\r
+:1011B000E20FF31F81939193225031092D933C93B9\r
+:1011C0003AC020919B0130919C01232B41F4209146\r
+:1011D00002013091030130939C0120939B012091E7\r
+:1011E0000001309101012115310541F42DB73EB7C1\r
+:1011F0004091040150910501241B350BE0919B01A6\r
+:10120000F0919C01E217F307A0F42E1B3F0B281767\r
+:10121000390778F0AC014E5F5F4F2417350748F06F\r
+:101220004E0F5F1F50939C0140939B0181939193BC\r
+:1012300002C0E0E0F0E0CF01DF91CF9108950F937D\r
+:101240001F93CF93DF93009709F48CC0FC01329772\r
+:101250001382128200919D0110919E0101151105CA\r
+:1012600081F420813181820F931F20919B01309165\r
+:101270009C012817390779F5F0939C01E0939B01B5\r
+:1012800071C0D80140E050E0AE17BF0750F412968D\r
+:101290002D913C911397AD012115310509F1D9012B\r
+:1012A000F3CF9D01DA013383228360817181860F40\r
+:1012B000971F8217930769F4EC0128813981260F63\r
+:1012C000371F2E5F3F4F318320838A819B81938319\r
+:1012D0008283452B29F4F0939E01E0939D0142C047\r
+:1012E0001396FC93EE931297ED01499159919E014B\r
+:1012F000240F351FE217F30771F480819181840F69\r
+:10130000951F029611969C938E93828193811396DA\r
+:101310009C938E931297E0E0F0E0D80112968D91A5\r
+:101320009C911397009719F0F8018C01F6CF8D91DD\r
+:101330009C9198012E5F3F4F820F931F20919B013C\r
+:1013400030919C012817390769F4309729F41092DD\r
+:101350009E0110929D0102C01382128210939C0183\r
+:1013600000939B01DF91CF911F910F910895DC01B4\r
+:1013700001C06D9341505040E0F70895262FF99930\r
+:10138000FECF1FBA92BD81BD20BD0FB6F894FA9A68\r
+:0C139000F99A0FBE01960895F894FFCF63\r
+:10139C0000009F0120000D0A53746172740D00004F\r
 :00000001FF\r