diff --git a/src/Makefile b/src/Makefile index 6d4862d..adc1650 100644 --- a/src/Makefile +++ b/src/Makefile @@ -21,7 +21,7 @@ CPPFLAGS += -D__MK20DX256__ -DTEENSYDUINO=128 include ../build_scripts/Teensy.mk -TEENSY_LOADER_CLI = ~/hardware/teensy_loader_cli/teensy_loader_cli +TEENSY_LOADER_CLI = ../teensy_loader_cli/teensy_loader_cli REBOOT_TEENSY = stty -f $(MONITOR_PORT) 134 burn: diff --git a/teensy_loader_cli/.gitignore b/teensy_loader_cli/.gitignore new file mode 100644 index 0000000..b1d0905 --- /dev/null +++ b/teensy_loader_cli/.gitignore @@ -0,0 +1 @@ +teensy_loader_cli diff --git a/teensy_loader_cli/Makefile b/teensy_loader_cli/Makefile new file mode 100644 index 0000000..6956d5d --- /dev/null +++ b/teensy_loader_cli/Makefile @@ -0,0 +1,40 @@ +#OS ?= LINUX +#OS ?= WINDOWS +OS ?= MACOSX +#OS ?= BSD + +ifeq ($(OS), LINUX) # also works on FreeBSD +CC ?= gcc +CFLAGS ?= -O2 -Wall +teensy_loader_cli: teensy_loader_cli.c + $(CC) $(CFLAGS) -s -DUSE_LIBUSB -o teensy_loader_cli teensy_loader_cli.c -lusb + + +else ifeq ($(OS), WINDOWS) +CC = i586-mingw32msvc-gcc +CFLAGS ?= -O2 -Wall +teensy_loader_cli.exe: teensy_loader_cli.c + $(CC) $(CFLAGS) -s -DUSE_WIN32 -o teensy_loader_cli.exe teensy_loader_cli.c -lhid -lsetupapi + + +else ifeq ($(OS), MACOSX) +CC ?= gcc +SDK ?= $(shell xcrun --show-sdk-path) +#SDK ?= /Developer/SDKs/MacOSX10.5.sdk # the old way... +CFLAGS ?= -O2 -Wall +teensy_loader_cli: teensy_loader_cli.c + $(CC) $(CFLAGS) -DUSE_APPLE_IOKIT -isysroot $(SDK) -o teensy_loader_cli teensy_loader_cli.c -Wl,-syslibroot,$(SDK) -framework IOKit -framework CoreFoundation + + +else ifeq ($(OS), BSD) # works on NetBSD and OpenBSD +CC ?= gcc +CFLAGS ?= -O2 -Wall +teensy_loader_cli: teensy_loader_cli.c + $(CC) $(CFLAGS) -s -DUSE_UHID -o teensy_loader_cli teensy_loader_cli.c + + +endif + + +clean: + rm -f teensy_loader_cli teensy_loader_cli.exe diff --git a/teensy_loader_cli/Makefile.bsd b/teensy_loader_cli/Makefile.bsd new file mode 100644 index 0000000..2aea86d --- /dev/null +++ b/teensy_loader_cli/Makefile.bsd @@ -0,0 +1,21 @@ +OS ?= FreeBSD +#OS ?= NetBSD +#OS ?= OpenBSD + +CFLAGS ?= -O2 -Wall +CC ?= gcc + +.if $(OS) == "FreeBSD" +CFLAGS += -DUSE_LIBUSB +LIBS = -lusb +.elif $(OS) == "NetBSD" || $(OS) == "OpenBSD" +CFLAGS += -DUSE_UHID +LIBS = +.endif + + +teensy_loader_cli: teensy_loader_cli.c + $(CC) $(CFLAGS) -s -o teensy_loader_cli teensy_loader_cli.c $(LIBS) + +clean: + rm -f teensy_loader_cli diff --git a/teensy_loader_cli/README.md b/teensy_loader_cli/README.md new file mode 100644 index 0000000..edf2864 --- /dev/null +++ b/teensy_loader_cli/README.md @@ -0,0 +1,8 @@ +#Teensy Loader - Command Line Version# + +The Teensy Loader is available in a command line version for advanced users who want to automate programming, typically using a Makefile. For most uses, the graphical version in Automatic Mode is much easier. + +http://www.pjrc.com/teensy/loader_cli.html + +![Teensy 3.1](http://www.pjrc.com/teensy/teensy31_front_small_green.jpg) + diff --git a/teensy_loader_cli/blink_slow_Teensy3.hex b/teensy_loader_cli/blink_slow_Teensy3.hex new file mode 100644 index 0000000..bf064b2 --- /dev/null +++ b/teensy_loader_cli/blink_slow_Teensy3.hex @@ -0,0 +1,767 @@ +:1000000000200020F9000000370F0000370F00002B +:10001000370F0000370F0000370F0000350F0000CA +:10002000350F0000350F0000350F0000370F0000BE +:10003000370F0000350F0000370F0000390F0000A8 +:10004000370F0000370F0000370F0000370F000098 +:10005000370F0000370F0000370F0000370F000088 +:10006000370F0000370F0000370F0000370F000078 +:10007000370F0000370F0000370F0000370F000068 +:10008000950C0000370F0000C5190000370F000065 +:10009000810E0000370F0000370F0000370F0000FF +:1000A000370F0000370F0000370F0000370F000038 +:1000B000370F0000370F0000BD1B0000D51B0000EC +:1000C000ED1B0000051C0000370F00005911000057 +:1000D000370F0000370F0000370F0000370F000008 +:1000E000310500008105000009060000C50600007A +:1000F00049070000370F00004A4B4CF2205210B560 +:100100001A804DF628121A80102223F80E2C00F0C7 +:100110001BFF454B454A1A60454A5A60454B1A68D1 +:1001200012F4807204D144490A604FF4A8521A6054 +:10013000424B1A7802F00802D2B21AB11A7842F091 +:1001400008021A7000233E4A3E483F4C02E019590B +:100150009950043399188142F9D33C4B3C4A002111 +:1001600001E043F8041B9342FBD33A4B00221A6090 +:10017000394B0A221A70394B24221A70A02203F834 +:10018000012C374A137803F00203DBB2002BF9D0BD +:10019000334A137803F01003DBB2002BF9D1304A55 +:1001A000137803F00C03082BFAD12E4B03221A709C +:1001B00040225A702A4A137803F02003DBB2002B46 +:1001C000F9D0274A137803F04003DBB2002BF9D0B3 +:1001D000254A264B1A60264B20221A70204A137893 +:1001E00003F00C030C2BFAD1224B02221A60224A94 +:1001F00043F8442C214B4BF67F321A60072243F818 +:10020000042C62B600F0C8FA0B4B1B68DB0702D562 +:100210001B4800F0B1FA01F001FE00F095FE01F07C +:10022000C1FDFEE70E20054038800440823F0400F7 +:100230000100002B10D0034014D0034002D007402F +:1002400040E4FF1F44EAFF1FD029000044EAFF1FDB +:100250001CEEFF1F08ED00E0005006400140064084 +:10026000064006400440064000000311448004405C +:100270000040064048800440C010050014E000E043 +:100280006B94CB51FFFFFFFFFFFFFFFFFFFFFFFF5F +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFD +:1004100008B54EF64420074BC1F6FF701B1A062B99 +:1004200000D808BD40F20003C0F20003002BF8D052 +:100430009847F6E747EAFF1F08B54EF644204EF608 +:100440004423C1F6FF70C1F6FF731B1A9B1003EB28 +:10045000D373591000D108BD40F20002C0F200026F +:10046000002AF8D09047F6E710B54EF64424C1F6BE +:10047000FF74237873B9FFF7CBFF40F20003C0F29B +:1004800000032BB142F6D010C0F20000AFF30080A1 +:100490000123237010BD00BF08B540F20003C0F275 +:1004A00000034BB142F6D0104EF64821C0F20000D6 +:1004B000C1F6FF71AFF300804EF64420C1F6FF7025 +:1004C00003682BB140F20003C0F2000303B1984768 +:1004D000BDE80840FFF7B0BF0D20012100F0B0B922 +:1004E00008B501210D2000F08BF94FF47A7000F06F +:1004F000E1F90D20002100F083F94FF47A70BDE896 +:10050000084000F0D7B9FFFF084B4FF480721A6023 +:100510004FF400721A604FF480621A604FF4006268 +:100520001A604FF480521A60704700BF04E100E087 +:10053000114B10B51C68E0041C6004D50F4BDA6841 +:100540000AB1DB689847A10404D50C4B1A690AB1BB +:100550001B699847A20604D5084B1A6E0AB11B6E98 +:100560009847E30606D5054BD3F8842012B1D3F89B +:100570008430984710BD00BFA090044060EAFF1F80 +:100580001F4B10B51C68E0031C6004D51D4B1A6896 +:100590000AB11B689847A10304D51A4B5A680AB1DF +:1005A0005B689847E20704D5164B1A6C0AB11B6CBE +:1005B0009847A30704D5134B5A6C0AB15B6C984754 +:1005C000200704D50F4B9A6C0AB19B6C98476107C2 +:1005D00004D50C4BDA6C0AB1DB6C9847220304D5C6 +:1005E000084B5A6E0AB15B6E9847630306D5054BFC +:1005F000D3F8802012B1D3F88030984710BD00BFE7 +:10060000A0A0044060EAFF1F2C4B10B51C68200717 +:100610001C6004D52A4B5A6A0AB15B6A9847E10606 +:1006200004D5274B9A6A0AB19B6A9847620604D59B +:10063000234BDA6A0AB1DB6A9847230604D5204BBC +:100640001A6B0AB11B6B9847A00604D51C4B5A6B5A +:100650000AB15B6B9847E10704D5194BDA6B0AB115 +:10066000DB6B9847A20704D5154B9A6D0AB19B6DB9 +:100670009847630704D5124BDA6D0AB1DB6D9847D2 +:10068000A00504D50E4BDA6E0AB1DB6E9847E10582 +:1006900004D50B4B1A6F0AB11B6F9847620504D53E +:1006A000074B5A6F0AB15B6F9847230504D5044B7B +:1006B0009A6F0AB19B6F984710BD00BFA0B004406D +:1006C00060EAFF1F1E4B10B51C68E0071C6004D5D4 +:1006D0001C4B9A680AB19B689847210604D5194BB0 +:1006E0005A690AB15B699847E20604D5154B9A69C5 +:1006F0000AB19B699847630704D5124BDA690AB1BE +:10070000DB699847200704D50E4B1A6A0AB11B6AA9 +:100710009847A10704D50B4B9A6B0AB19B6B98477E +:10072000A20604D5074B1A6D0AB11B6D98476306E4 +:1007300004D5044B5A6D0AB15B6D984710BD00BFDC +:10074000A0C0044060EAFF1F094B10B51C68A20757 +:100750001C6004D5074B9A6E0AB19B6E9847E3075D +:1007600004D5044BDA6F0AB1DB6F984710BD00BFA8 +:10077000A0D0044060EAFF1F044B054900221A6024 +:100780000A60044A106010221A60704714D00340B7 +:1007900004D0034000D0034010B5FFF7B5FE114B65 +:1007A000114A124C00204BF6FF7118605960282343 +:1007B0001360936013619361136293621363936395 +:1007C000092222600A4C20600A4801600A490B6035 +:1007D0008B600A4B1A6001F04FF9BDE8104000F041 +:1007E000D1BF00BF048003400C8003400080034061 +:1007F00004900340089003400C9003400090034095 +:10080000212810B518D80D4A52F8303093F880429C +:100810003CB1012211B183F8802010BD83F8002182 +:1008200010BD02EBC00043681A6811B142F0030228 +:1008300001E022F002021A6010BD00BF7427000020 +:10084000212816D80B4A02EBC00301295B6852F835 +:10085000302004D182F880124FF4A27208E0002008 +:1008600082F8800211B94FF4807201E040F2031265 +:100870001A6070477427000072B60B4B0B491A6858 +:100880000B4B1B68096862B6490102D5322A88BF42 +:100890000133C2F53B427F323021B2FBF1F24FF41B +:1008A0007A7000FB0320704718E000E004ED00E0E0 +:1008B000E8EAFF1F70B50446FFF7DEFF05466CB19E +:1008C00040F2E736FFF7D8FF401BB04203D9013CA6 +:1008D00004D005F57A7500F057FAF3E770BDFFFF15 +:1008E000F8B5124D124E2F463378DBB12B681BB989 +:1008F000022000F083FB2860386898B14388C21852 +:10090000147A5CB102880133934205D300F0A0FF52 +:10091000064B00221A6007E0438005E000F098FFD4 +:100920002C60E1E74FF0FF342046F8BDF8EAFF1FE6 +:10093000F3ECFF1FF8B50C4D0C4E2F4633787BB10E +:100940002B681BB9022000F059FB2860386838B1C9 +:100950004388C3181C7A2CB900F07AFF2C60EDE7AD +:100960004FF0FF342046F8BDF8EAFF1FF3ECFF1FFD +:1009700038B5124C236833B1104B1868438802888D +:100980000024C51810E00E4B1B781BB1022000F0AC +:1009900035FB20602468002CEED10DE02919097A7E +:1009A00009B94CB904E00134E1189142F6DBF8E7EB +:1009B00000F04EFF014B1C60204638BDF8EAFF1FD7 +:1009C000F3ECFF1F2DE9F843314B324DDFF8D090A7 +:1009D00001220C461A70064653E02B685BBB2C4F75 +:1009E00043F2292899F8003013B9294A137018E006 +:1009F000012000F01FFB052804D9B8F10108264AA0 +:100A000008D109E001233B7000F004FF28600028B2 +:100A1000F3D010E0137843B1012313701C4B002274 +:100A20001A704FF0FF30BDE8F8833B7000F0ACF96E +:100A300001233B70D6E72968174A488800231370C2 +:100A4000C0F14002944238BF224600F108078018E6 +:100A5000CF194880A41A02E0F05CF85401339342A5 +:100A6000FAD1F6184B883F2B0C4B02D805221A708E +:100A700007E040220A80002701201F7000F02CFBB5 +:100A80002F60002CA9D1024B20461C70BDE8F883D2 +:100A9000ECEAFF1FF0EAFF1FF4EAFF1FFCEAFF1F6A +:100AA000F3ECFF1F07B502AB012103F8010D184657 +:100AB000FFF788FF0EBDFFFF38B50E4B1B78C3B1A3 +:100AC0000D4B1968A9B14A889AB10C4800230370EC +:100AD0008C181D4602E0E0180133057298183F2873 +:100AE000F9DD40230B80012000F0F6FA024B0022D2 +:100AF0001A6038BDF3ECFF1FF0EAFF1FFCEAFF1F8E +:100B000038B50C4B1B789BB90B4A11684A881D46B7 +:100B10008C1802E0E0180133057298183F28F9DDBF +:100B200040230B80012000F0D7FA034B00221A600B +:100B300038BD00BFECEAFF1FF0EAFF1F0E4B1B6839 +:100B40005A0570B5064616D50C4B0D4D1C78013470 +:100B50003F2C88BF002401E000F016F92B78A34257 +:100B6000FAD0084B1E55084B01221A70034B1C701B +:100B7000064BBC221A7070BD3480044081EBFF1F0D +:100B800080EBFF1FFFEAFF1FFDEAFF1F03A00640E7 +:100B9000184B1B682DE9F0478A465905064627D5AC +:100BA0000546154FDFF860801BE03C7898F8009010 +:100BB00001343F2C88BF0024A14508D015F8012B33 +:100BC0000E4B1A550E4B01221A703C7009E00D4B6A +:100BD000BC221A7000F0D8F898F800304B45F9D0D4 +:100BE000ECE706EB0A039D42DFD3064BBC221A70EA +:100BF000BDE8F0873480044081EBFF1FFFEAFF1F50 +:100C0000FDEAFF1F03A0064080EBFF1F10B5044C58 +:100C100001E000F0B9F82378002BFAD110BD00BF35 +:100C2000FDEAFF1F044B1878044B1B78984238BF2D +:100C30004030C01A704700BF7FEBFF1FFEEAFF1F66 +:100C4000084B094A19781378994208D00133DBB26E +:100C50003F2B88BF00230549C85C137070474FF0D5 +:100C6000FF3070477FEBFF1FFEEAFF1F3FEBFF1FC8 +:100C7000054B1A78054B1B789A4202D0044AD05C87 +:100C800070474FF0FF3070477FEBFF1FFEEAFF1FFA +:100C90003FEBFF1FF0B52F4B1B7813F0300F21D027 +:100CA00072B62D4B197831B90F3B40221B782B4B74 +:100CB0001A7062B616E062B6294B2A4C1A782A4B93 +:100CC0002A4D1878531CDBB23F2B88BF00232678AF +:100CD00083421CBFEE541A46013911F0FF01F1D1D5 +:100CE0001F4B1A70224B1B7819465BB2002B20DA7F +:100CF000184A137818061CD51E4B1F4E1F781F4B21 +:100D0000184D1B781E4CBB420AD00133DBB23F2B7F +:100D100088BF00231078F05C287020780728F2D96B +:100D2000164A13700B4B1B781B0602D5104B7C2206 +:100D30001A7001F04003DBB25BB1064B1B7803F085 +:100D40004003DBB22BB10F4B00221A70084B3C2240 +:100D50001A70F0BD04A0064016A0064011A006407F +:100D60007FEBFF1F07A00640FEEAFF1F3FEBFF1FC0 +:100D700003A0064081EBFF1FFFEAFF1F80EBFF1F70 +:100D800014A00640FDEAFF1F7047FFFF0E4B1B68D3 +:100D9000DA0470B5064616D50C4B0D4D1C7801349F +:100DA000272C88BF002401E0FFF7EEFF2B78A34239 +:100DB000FAD0084B1E55084B01221A70034B1C70C9 +:100DC000064BAC221A7070BD34800440EEEBFF1F5E +:100DD000EDEBFF1F84EBFF1F82EBFF1F03C00640FC +:100DE00038B54518044603E014F8010BFFF7CEFFB1 +:100DF000AC42F9D138BDFFFF10B5044C01E0FFF75C +:100E0000C3FF2378002BFAD110BD00BF82EBFF1F78 +:100E1000044B1878044B1B78984238BF4030C01AF6 +:100E2000704700BFECEBFF1F83EBFF1F084B094A25 +:100E300019781378994208D00133DBB23F2B88BF71 +:100E400000230549C85C137070474FF0FF307047AE +:100E5000ECEBFF1F83EBFF1FACEBFF1F054B1A787A +:100E6000054B1B789A4202D0044AD05C70474FF081 +:100E7000FF307047ECEBFF1F83EBFF1FACEBFF1F56 +:100E800010B5224B1B7803F02003DBB27BB1204B63 +:100E9000204A1878137820490133DBB209783F2BB8 +:100EA00088BF00238B4202D01C49C85413701C49D0 +:100EB0000B7818465BB2002B16DA144B1B781B0616 +:100EC00012D5184B184A1C7813789C4202D16C2317 +:100ED0000B7009E00133DBB2272B88BF00231349D5 +:100EE000CC5C0B490C70137000F04003DBB25BB1BB +:100EF000064B1B7803F04003DBB22BB10C4B0022F6 +:100F00001A70074B2C221A7010BD00BF04C0064097 +:100F100007C00640ECEBFF1F83EBFF1FACEBFF1F8E +:100F200003C00640EEEBFF1FEDEBFF1F84EBFF1F3E +:100F300082EBFF1FFEE7FEE7024B1A6801321A60E0 +:100F4000704700BFE8EAFF1F7047FFFF024A1368BF +:100F5000181810601846704744E4FF1F1FB572B69A +:100F6000124B70221A70124A412111700F2102F89F +:100F7000011C80221A701A781206FCD562B60D4B3D +:100F800001A918680A2200F085FC0B48002301AA79 +:100F90009A5C2AB100EB430101330A2B4A80F6D157 +:100FA0000133054A5B00137005B000BD000002402C +:100FB000070002400800024022E5FF1FF0B50C4B7D +:100FC0000C4C1A7842F0020504EBC50682F00102CF +:100FD000706009481A700678002E0CBF8827C82751 +:100FE00047EA014186F0010644F835100670F0BD6D +:100FF0006CECFF1F00E0FF1FF4ECFF1F431E052BEE +:1010000010B510D872B6094A52F8230010B14168E1 +:1010100042F82310064A018832F81340611A22F878 +:10102000131062B610BD002010BD00BF54ECFF1FAE +:101030000CEEFF1F013805280BD8074B53F8203062 +:1010400072B6002001E05B680130002BFBD162B674 +:1010500070470020704700BFB0ECFF1F70B572B63C +:10106000184E194C01239A1912F8012C02F00802AB +:10107000D2B2E2B19900144A54F831502DB902EBC2 +:10108000431308305860114B09E041F0010154F856 +:10109000315065B902EBC103083058600C4B42F87F +:1010A00031300C4B1A78013A1A7062B670BD0133B8 +:1010B000072BD8D162B6074B00221A70BDE87040EA +:1010C00000F0C6BB8428000000E0FF1F880040003D +:1010D000C8004000EAECFF1F431E052B30B532D894 +:1010E0004001194A40F01000101872B6174CE25C2B +:1010F000032A09D8DFE802F0160218050830022298 +:1011000013E00830042210E01148124A50F823403E +:1011100014B940F8231002E052F82300416042F86D +:1011200023100FE0032200E00522E25410F0080F24 +:1011300001F108030A8843600CBF8823C82343EAEF +:101140000243036062B630BD00E0FF1F0CECFF1FDE +:10115000B0ECFF1FC8ECFF1F2DE9F74FA34EA44CC6 +:10116000357805F00403DBB2ABB1A24B1B7883B139 +:10117000A14A137823B1013BDBB2137003B900BE5F +:101180009E4A13782BB1013BDBB213700BB9FFF70A +:10119000B7FC0423337005F00802D2B2002A00F035 +:1011A0007B82974B1B781D094FEA930940F0F98128 +:1011B00054F8392004EBC903C2F38302013A5B6897 +:1011C0000C2A00F2EB81DFE812F0A001A001E90196 +:1011D000E901E901E901E901E901C001E901E901E8 +:1011E000E9010D001A6887495B68874D4B60874BA2 +:1011F0000A6044F83930864B0020186001232B70B8 +:1012000092B240F28165AA422061A06117D8B2F57E +:10121000D06F80F02881B2F5817F00F0D58006D8AC +:10122000802A00F0BB80822A40F03581BAE040F28B +:1012300002339A4200F00881B2F5A06F10E0B2F5D7 +:10124000106F10D004D8B2F5086F40F02481A0E0F0 +:1012500040F621139A4200F0558103F580739A42BB +:1012600040F019811BE18A78624B614D1A702B6A3C +:10127000180603D5686A083800F0EAFA65490835A7 +:101280008D42F4D1DFF8B491DFF8B4B10025A8465F +:10129000CA4655F8090005E04368009300F0D8FA03 +:1012A000009B18460028F7D15B4B4AF8050045F82B +:1012B0000B00E85807E042680093019200F0C8FA7A +:1012C000019A009B10460028F5D15851534BE85025 +:1012D000534B23F81800534B18F80320023A032A03 +:1012E00008D8DFE802F002040204002200E0012234 +:1012F00003F8082008F101080435B8F1060FC8D139 +:10130000494BDFF8409100221A7001259846474B5F +:1013100005EB0902EB1812F8012C9B001A7002F081 +:101320000802D2B23AB300F075FAAB0038B104EB60 +:101330004512083050603E4A44F8332006E044F835 +:10134000330098F80030013388F8003000F062FA7A +:10135000AB0043F0010338B104EBC3020830506026 +:101360002A4A44F8332006E044F8330098F8003065 +:10137000013388F80030AA0042F00201013542F042 +:1013800003020023072D44F8313044F83230BED137 +:1013900029E0184A274D12782A7083E0254D2870DD +:1013A00068707EE08A88062A00D974E09100224A9B +:1013B000204D8A1828706870127802F00202D2B2AA +:1013C000002A6ED02B706CE08A8802F07F03062B17 +:1013D00061DC4B8803B15EE09100174A8A181178EE +:1013E00021F0020111701D465CE000BF8020074023 +:1013F00000E0FF1FF3ECFF1F6DECFF1FFCEAFF1F77 +:1014000090200740E0ECFF1FF4ECFF1FC8004000F5 +:10141000F0EBFF1FA8E0FF1FB0ECFF1FC8ECFF1FA1 +:101420000CEEFF1F0CECFF1FEAECFF1F30C8011091 +:1014300088004000EBECFF1FC020074054ECFF1F6A +:10144000F4EBFF1F842800008A8802F07F03062B3C +:1014500021DC4B8803B11EE09100A04A8A18117864 +:1014600041F00201BEE74A889D4B898853F8085C29 +:10147000A3F10C007DB133F80CCC944509D133F8BD +:101480000ACC8C4505D1120A032A0CBF2B7803899C +:1014900008E00C33EAE7914B0F221A7032E0002388 +:1014A000A1E702238F4AB2F806904B4538BF994610 +:1014B000B9F1400F34BFC8464FF0400828464146B6 +:1014C000FFF77CFDB9EB0809454403D1B8F1400FA3 +:1014D00007D017E0B9F1400F34BFC8464FF04008BD +:1014E00000E0C84628464146FFF768FDB9EB080909 +:1014F000454402D1B8F1400F04D17B4B7B4A1D60BB +:10150000A2F8009001227A4B47E0764A79481168A8 +:10151000814216D15168784A914212D11A78A92A8B +:101520000FD15A78452A0CD19A78C22A09D1DB7892 +:101530006B2B06D1714B0020052201461A70FFF774 +:101540003DFD6F4B44F8393028E0674BD3F80080FD +:10155000B8F1000F18D0DFF89491B9F800A0BAF1F3 +:10156000400F34BF5546402540462946FFF726FD2B +:10157000C5EB0A039BB2A9F800300BB9402D01D18D +:1015800008EB0503584A1360564B1A88B2F5A06F52 +:1015900004D100225A709A785A4B1A700122544B87 +:1015A0006DE004EBC90803F00803D8F80420013DFE +:1015B000D9B2A2F10800EDB2002937D000F048F905 +:1015C0005148524B50F82510F1B14A6840F8252097 +:1015D00001F10802C8F804205A5D032A0BD8DFE89D +:1015E00002F002040608032204E0022202E00522BF +:1015F00000E004225A5518F0080F0A880CBF88230F +:10160000C82343EA024342E05A5D032A07D8DFE8D1 +:1016100002F040400204002206E0012204E018F03B +:10162000080F0CBF022203225A5532E054F8393019 +:101630001B0C22F8083C23B322F8061C42F8041CB9 +:10164000334A344952F8257017B942F8250002E0B0 +:1016500051F825205060304A41F8250032F8151025 +:101660005B1822F8153000F0D5F818B10830C8F82A +:10167000040006E0294B44F839001A7801321A7048 +:1016800007E01F4B264A18F0080F08BF134644F81E +:1016900039300823337063E5E90751D514492048F0 +:1016A000204C02230B70204B1A70204B186098605E +:1016B0001F481A61D8609A615C60084B0D20187051 +:1016C0001C48FF23037000F8083C02741A4A137088 +:1016D0001A4B9F221A7001230B704AE0C02007406A +:1016E00098280000E0ECFF1FF0EBFF1FE8ECFF1F65 +:1016F0009420074021090003010004006DECFF1F46 +:10170000C800400098200740B0ECFF1F0CECFF1F02 +:1017100054ECFF1FF4EBFF1F0CEEFF1FEAECFF1F62 +:101720008800400014ECFF1F6CECFF1F00E0FF1F5F +:1017300070ECFF1F882007408C2007408420074062 +:101740002B0605D50C4B0D221A70802203F8402C75 +:1017500005F00203DBB22BB1084B1A781A70022293 +:1017600003F8082C05F01005EDB215B1044B10225A +:101770001A70BDE8FE8F00BFC020074088200740D8 +:101780008020074008B5FFF7E9FB00231B491A46F4 +:101790005A50C8180833C82B4260F9D1184B1A6840 +:1017A00042F480221A60174B80221A701978154A69 +:1017B0000906FBD4114B1449C3F307200870C3F387 +:1017C00007401B0E08750B76FF2301F81C3C01F83F +:1017D000143C01F88C3C137843F040031370002153 +:1017E000012302F8783C02F80C1C02F8883C074BF5 +:1017F00008221A60064B10221A7008BD00E0FF1F75 +:10180000348004400C2107409C20074004E100E0A4 +:101810000821074072B60C4A1168B1FA81F30B2B0C +:1018200002D962B6002070474FF0004020FA03F062 +:1018300021EA0001116062B6044948225343C818E6 +:101840000022CA504260704738E5FF1FE0E0FF1FEA +:101850000C4B4822C31AB3FBF2F30B2B11D80A4AE4 +:10186000127822B1094A12780AB1FFF7F7BB72B6B3 +:10187000074A4FF0004121FA03F311681943116040 +:1018800062B67047E0E0FF1FEAECFF1FF3ECFF1FBA +:1018900038E5FF1F10B50023B0FBF2F402FB140083 +:1018A000092801D8303000E03730C85420460CB148 +:1018B0000133F1E7CA185470224605E0885CCC5C1D +:1018C0008C54C8540132013B9A42F7DB084610BDE4 +:1018D0000E4B1B681A0570B5064616D50C4B0D4D00 +:1018E0001C780134272C88BF002401E0FFF74CFA54 +:1018F0002B78A342FAD0084B1E55084B01221A70D0 +:10190000034B1C70064BAC221A7070BD348004402F +:1019100061EDFF1F60EDFF1FF7ECFF1FF5ECFF1FF0 +:1019200003B0064038B54518044603E014F8010B2F +:10193000FFF7CEFFAC42F9D138BDFFFF10B5044C24 +:1019400001E0FFF721FA2378002BFAD110BD00BF88 +:10195000F5ECFF1F044B1878044B1B78984238BFF6 +:101960004030C01A704700BF5FEDFF1FF6ECFF1F4D +:10197000084B094A19781378994208D00133DBB231 +:101980003F2B88BF00230549C85C137070474FF098 +:10199000FF3070475FEDFF1FF6ECFF1F1FEDFF1FCD +:1019A000054B1A78054B1B789A4202D0044AD05C4A +:1019B00070474FF0FF3070475FEDFF1FF6ECFF1FE1 +:1019C0001FEDFF1F10B5224B1B7803F02003DBB285 +:1019D0007BB1204B204A1878137820490133DBB2C1 +:1019E00009783F2B88BF00238B4202D01C49C85482 +:1019F00013701C490B7818465BB2002B16DA144B97 +:101A00001B781B0612D5184B184A1C7813789C4279 +:101A100002D16C230B7009E00133DBB2272B88BFA6 +:101A200000231349CC5C0B490C70137000F0400389 +:101A3000DBB25BB1064B1B7803F04003DBB22BB18A +:101A40000C4B00221A70074B2C221A7010BD00BFDD +:101A500004B0064007B006405FEDFF1FF6ECFF1F25 +:101A60001FEDFF1F03B0064061EDFF1F60EDFF1F7C +:101A7000F7ECFF1FF5ECFF1F1C4B60221A70E122F0 +:101A80005A701B4B1B4A19781B4B082901D10121A5 +:101A900002E00A2903D139211160132206E00C2942 +:101AA00001D1352100E03D21116012221A60134B53 +:101AB0001A78134B02B101221A60124B1A78124B9A +:101AC000012A01D880220CE0042A01D8842208E0EF +:101AD000082A01D8852204E0102A01D8862200E0D5 +:101AE00087221A60094B01221A7070470040074094 +:101AF0003CE5FF1F08B003400CB0034063EDFF1F3F +:101B000020B003403DE5FF1F24B0034062EDFF1FFE +:101B1000F0B505468BB022B90368C9B21B68984777 +:101B20002CE0012A08BF0A2221B930228DF8252095 +:101B3000212413E02124B1FBF2F002FB1011C9B201 +:101B4000092901D8303100E037310AAF3E1906F8D3 +:101B5000241C014610B1013CE4B2ECE733B1013C76 +:101B60000AAAE4B213192D2203F8242C2B6801AF22 +:101B70005B6828463919C4F1220298470BB0F0BDC2 +:101B800008461146FEF71EBF0846FEF78BBFFEF75C +:101B900093BFFEF7CFBEFEF7A3BEFEF7E9BEFFFF81 +:101BA000044B00221A711A73034A4FF47A71996038 +:101BB0001A60704764EDFF1F1829000008B5034B39 +:101BC00001221A60024B1B68984708BD0C71034044 +:101BD0007CEDFF1F08B5034B01221A60024B5B68C6 +:101BE000984708BD1C7103407CEDFF1F08B5034BEF +:101BF00001221A60024B9B68984708BD2C71034074 +:101C00007CEDFF1F08B5034B01221A60024BDB6815 +:101C1000984708BD3C7103407CEDFF1F054B012236 +:101C20001A60054B1A6822F400021A60034B002266 +:101C30001A707047007003403C80044078EDFF1F2D +:101C4000037B0122591103F01F0302FA03F3084A30 +:101C500042F821308268002313604178054A5354CA +:101C6000D15C21B90133042BFAD1FFF7D7BF7047FC +:101C700080E100E074EDFF1F037810B504460BB15E +:101C8000FFF7DEFF0023237010BD10B50446FFF7F9 +:101C9000F3FF204610BDFFFF03480449044A002318 +:101CA000037000F0ABB800BF8CEDFF1F8B1C000071 +:101CB00040E4FF1F10B5084614461146FFF790F8A0 +:101CC000204610BD084608B5FFF760F8012008BDA2 +:101CD000FFF792B8FFF7AAB8FFF7C0B8FFF798B8B8 +:101CE00010B5084614461146FEF752FF204610BDB7 +:101CF000084608B5FEF722FF012008BDFEF786BFA3 +:101D0000FEF79EBFFEF7B4BFFEF78CBF044B002268 +:101D10001A711A73034A4FF47A7199601A60704706 +:101D2000A0EDFF1F382900002DE9F04100240746EF +:101D30000D4626463B190A22197928460023FFF74B +:101D4000E7FE2B6880462E211B6828469847013401 +:101D50004044032C0644EDD12846F9790A22002399 +:101D6000FFF7D6FE8019BDE8F081FFFF044B054A5E +:101D70001A6000221A715A719A71DA71704700BFA5 +:101D8000B0EDFF1F58290000044B00221A711A738E +:101D9000034A4FF47A7199601A607047B8EDFF1FDB +:101DA0006829000008B5FEF797FBFEF799FBFEF7E0 +:101DB000EBFFFAE710B5084614461146FFF7B2FDEF +:101DC000204610BD084608B5FFF782FD012008BD7A +:101DD000FFF7B4BDFFF7CCBDFFF7E2BDFFF7BABD1B +:101DE000044B00221A711A73034A4FF47A719960F6 +:101DF0001A607047C8EDFF1F882900000346084697 +:101E0000194600F001B800BF30B405460C46134631 +:101E100002202946224630BC00F020BB70B542F6B5 +:101E2000B41642F6B415C0F20006C0F20005761BE7 +:101E3000B61007D0043D002455F8043F01349847FC +:101E4000A642F9D142F6D01642F6B415C0F2000609 +:101E5000C0F20005761B00F0A7FDB61008D0043DC7 +:101E6000002455F8043F01349847A642F9D170BDCB +:101E700070BD00BF4EF240530146C1F6FF731868B3 +:101E800000F008B84EF240530146C1F6FF731868DF +:101E900000F0A6BB2DE9F04F01F10B04162C83B026 +:101EA000074630D924F00704E30F8C422CBF1946B3 +:101EB00043F0010100292FD1384600F0B7FAB4F5FC +:101EC000FC7F2ED24FEAD40C4EF23466C1F6FF7678 +:101ED00006EBCC02D368934200F01182596803F1FB +:101EE0000808DA68384621F0030499681B195C6811 +:101EF000CA6044F0010491605C6000F099FA4046C9 +:101F000003B0BDE8F08F002310248C422CBF19468B +:101F100043F001010029CFD00C234FF000083B60B3 +:101F2000EDE75FEA542C04BF4FEAD40C4FEA4C05AE +:101F300040F08F804EF23466C1F6FF7606EB8505E1 +:101F4000EB689D4206D10DE0002A80F25581DB68E6 +:101F50009D4207D0596821F003010A1B0F2AF3DDC7 +:101F60000CF1FF3C0CF1010C4EF234623369C1F606 +:101F7000FF7202F1080E734508BFD2F8049022D018 +:101F8000586820F00300011B0F2900F38481002909 +:101F9000C2F814E0C2F810E066DAB0F5007F80F015 +:101FA0004E81C1084FF0010802EBC100891008FA08 +:101FB00001F851688568D86048EA0109C2F80490C0 +:101FC0009D60EB60836001224FEAAC0302FA03F3E9 +:101FD0004B4554D819EA030F0DD193402CF0030C54 +:101FE00019EA030F0CF1040C05D15B000CF1040C91 +:101FF00019EA030FF9D006EBCC09E0464846C2685F +:10200000904207D15BE1002980F28381D26890423F +:1020100000F05581556825F00305291B0F29F2DDD5 +:1020200090461319D56844F0010058F8084F41F064 +:10203000010C50603846C3F804C0E560AC607361C1 +:102040003361C3F80CE0C3F808E0595000F0F0F930 +:1020500055E7BCF1040F00F2DE804FEA941C0CF14E +:10206000380C4FEA4C0565E71A1803F108083846A2 +:10207000536843F00103536000F0DAF93FE7B568B5 +:102080006B6823F0030A544504D8C4EB0A030F2BF2 +:1020900000F3A4804EF6D859D6F80814C1F6FF799B +:1020A00005EB0A020131D9F80030234408BF03F1DF +:1020B000100B06D003F580530F3323F47F6323F016 +:1020C0000F0B38465946019200F0B4F9019A411CB1 +:1020D000804600F06881824200F23181D9F80430F4 +:1020E00042455B44C9F8043000F06681D6F8081414 +:1020F0004EF23460C1F6FF70013117BFC2EB080227 +:10210000C0F808849B18C9F8043018F00703384653 +:102110001FBFC3F10802C3F58053904403F10802C6 +:1021200008EB0B0308BF4FF480521B051B0DC3EBDC +:10213000020B594600F07EF9431C00F04981C8EBC0 +:102140000001594441F00101D9F80430B5424EF67E +:10215000D852C6F808805B44C1F6FF72C8F8041074 +:10216000C9F8043018D0BAF10F0F40F20B81AAF170 +:102170000C00696820F007004FF0050C05EB000E1D +:102180000F2801F0010140EA01016960CEF804C0A6 +:10219000CEF808C000F220814EF6D852D9F82C10A3 +:1021A000C1F6FF72B5688B42D9F8301088BFD36290 +:1021B0004EF6D852C1F6FF728B4288BF13636A682D +:1021C00022F003029442C4EB020301D80F2B05DC7A +:1021D00038464FF0000800F02BF990E62A1943F03A +:1021E000010344F0010438466C6005F108085360AF +:1021F000B26000F01DF982E65918DA689C6838462A +:102200004D6803F1080845F00105E26094604D60F7 +:1022100000F00EF973E6BCF1140F9CBF0CF15B0CDF +:102220004FEA4C057FF686AEBCF1540F00F2938066 +:102230004FEA143C0CF16E0C4FEA4C057AE6420A68 +:10224000042A75D9142A9CBF02F15B094FEA49059B +:1022500008D9542A00F2C9804FEA103909F16E09F1 +:102260004FEA490506EB85054EF23468C1F6FF7862 +:10227000AA68AA4279D0516821F00301884202D2AB +:1022800092689542F7D1D068D6F80490D8609A60E9 +:10229000D360836097E61D1941F00106556144F053 +:1022A0000104156138465C6003F10808C5F80CE0CC +:1022B000C5F808E06E60695000F0BAF81FE608F152 +:1022C0000108083018F0030F7FF499AE4A461CF05D +:1022D000030FA2F108010CF1FF3C00F09E80126890 +:1022E0008A42F4D072685B0093423FF6C8AE002B7E +:1022F0003FF4C5AE1A4200F09580C4467BE603F178 +:1023000008025B699A4208BF0CF1020C3FF42CAE44 +:10231000E4E590465519D368384658F8082F69689F +:10232000D36041F001019A60696000F081F8E6E550 +:102330004FEA901909F138094FEA490592E7B54289 +:102340004EF23463C1F6FF733FF4C8AE9D686A680D +:1023500022F0030236E7BCF5AA7F19D84FEAD43C35 +:102360000CF1770C4FEA4C05E4E50125D8F8041090 +:102370004FEAA909104605FA09F545EA0109C8F826 +:10238000049083E701234546C8F80430002219E78A +:1023900040F254539C450BD84FEA944C0CF17C0C02 +:1023A0004FEA4C05C6E5B5686A6822F0030209E702 +:1023B000FC254FF07E0CBDE51105090D00297FF4C9 +:1023C00095AEB2680BEB0A0141F001015160E3E602 +:1023D00001214FF0000BB7E6384605F108010192E4 +:1023E00000F0FEF8019A5368D6E6B2F5AA7F06D847 +:1023F0004FEAD03909F177094FEA490532E740F24F +:102400005451FC258A424FF07E099EBF4FEA904905 +:1024100009F17C094FEA490524E7726822EA0302C0 +:10242000726060E75B0008F1040863E7704700BF73 +:10243000704700BF38B54EF61864C1F6FF74054604 +:10244000084600232360FEF781FD431C00D038BD01 +:102450002368002BFBD02B6038BD00BF2DE9F04175 +:1024600042F6A014C0F2000484B007462568AC6CA4 +:10247000002C42D066681F2E1ADD41F67564C0F24A +:10248000000424B94FF0FF3004B0BDE8F0818C2087 +:10249000039102920193FFF7EDFC0399029A019BCD +:1024A00004460028EED0A86C002684E84100AC6405 +:1024B000DFB1D4F8886026B3D6F8008165680120C2 +:1024C000022F05F1200C00FA05F046F8252048EA15 +:1024D000000246F82C3008BFD6F80431C6F80021B7 +:1024E00004BF1843C6F8040100E06568AB1C002077 +:1024F0000135656044F82310C6E705F14C04AC646F +:10250000B8E741F67560C0F200000028BAD04FF479 +:102510008470039102920193FFF7ACFC0399029A35 +:10252000019B06460028ADD00020C6F80001C6F881 +:1025300004018046C4F88860C0E700BFF8B54EF2D9 +:102540003464C1F6FF740F460546FFF76FFFA368BA +:102550005E6826F0030606F6EF73DF1B3F0B013FB4 +:102560003F03B7F5805F07DB00212846FFF762FFD6 +:10257000A3689B19984204D02846FFF759FF002012 +:10258000F8BD79422846FFF755FF013010D04EF6CE +:10259000DC53A168C1F6FF73F61B284646F001061E +:1025A0001A684E60D71B1F60FFF742FF0120F8BD7D +:1025B00000212846FFF73EFFA368C21A0F2ADBDD81 +:1025C0004EF63C244EF6DC51C1F6FF74C1F6FF71A5 +:1025D00042F001025A602368C01A0860CCE700BFCD +:1025E0002DE9F0410E46804600295CD0FFF71EFF22 +:1025F0004EF2346556F8041CC1F6FF75A6F10804C6 +:1026000021F00103AF68E2189742506820F0030000 +:1026100067D011F00101506035D00021161876689E +:1026200016F0010F06D11B18906800294DD0D26812 +:10263000C260906043F00102E3506260F1B9B3F50B +:10264000007F32D35A0A042A6CD8980938304100E6 +:1026500005EB81054EF23461C1F6FF71AA68AA420A +:102660006BD0516821F003018B4202D292689542EF +:10267000F7D1D368E360A260D4609C604046BDE8B7 +:10268000F041FFF7D5BE56F8086C05F1080CA41B05 +:102690009B19A668664543D0D4F80CC0C6F80CC098 +:1026A000CCF80860BAE7BDE8F081DB080121686872 +:1026B00005EBC3029B1001FA03F3E2609168184333 +:1026C0006860A160CC609460D8E7294EB042AED17A +:1026D0006C6143F001022C61E060A0606260E35035 +:1026E000CCE7C018CB0707D456F8083CE41AC0184A +:1026F000A268E368D3609A604EF6402240F001037E +:10270000C1F6FF726360AC6013689842B6D34EF6B0 +:10271000D8534046C1F6FF731968FFF70FFFADE7C6 +:1027200001217BE702F15B004100142A90D9542A71 +:102730000CD8180B6E3041008AE701264D688010D6 +:10274000134606FA00F005434D6093E7B2F5AA7F01 +:1027500003D8D80B773041007AE740F254518A42CF +:1027600003D8980C7C30410072E7FC217E206FE793 +:102770003CE6FF1F4008FE4340A004404408FE43DF +:1027800044A004400018FE4300C004403000FE4353 +:10279000309004403400FE43349004401C18FE4343 +:1027A0001CC004401018FE4310C004400818FE432B +:1027B00008C004400C18FE430CC004400C10FE433B +:1027C0000CB004401010FE4310B004401810FE433B +:1027D00018B004401C10FE431CB004401410FE430B +:1027E00014B004400418FE4304C004400010FE432B +:1027F00000B004400008FE4300A004400408FE436B +:1028000004A004400C08FE430CA004400808FE434A +:1028100008A004401418FE4314C004401818FE43D6 +:1028200018C004400410FE4304B004400810FE43E6 +:1028300008B004401400FE43149004404C08FE43CA +:102840004CA004400420FE4304D004402410FE4366 +:1028500024B004402010FE4320B004402810FE4362 +:1028600028B004402C10FE432CB004400020FE434E +:1028700000D004404808FE4348A004401000FE4336 +:1028800010900440151915190000FFFF0001000009 +:1028900048E4FF1F120000000002000072E4FF1F66 +:1028A0004900000000220100BBE4FF1F21000000DE +:1028B00000210100A4E4FF1F090000000022000025 +:1028C000DCE4FF1F1C0000000021000084E4FF1F67 +:1028D00009000000000300001EE5FF1F00000000CB +:1028E000010309045AE4FF1F000000000203090469 +:1028F000F8E4FF1F000000000303090422E5FF1FA6 +:1029000000000000000000000000000000000000C7 +:102910000000000000000000891B0000811B000077 +:102920009B1B0000971B0000931B00008F1B0000E7 +:102930000000000000000000C51C0000B51C0000E5 +:10294000DD1C0000D51C0000D91C0000D11C0000BB +:102950000000000000000000291D00000000000031 +:102960000000000000000000F11C0000E11C00005D +:10297000091D0000011D0000051D0000FD1C0000D8 +:102980000000000000000000C51D0000B51D000093 +:10299000DD1D0000D51D0000D91D0000D11D000067 +:1029A00044E5FF1F43000000F8B500BFF8BC08BCB9 +:1029B0009E46704799040000A11B0000991C00006E +:1029C0000D1D00006D1D0000891D0000E11D0000AF +:1029D000000000001CEEFF1F12010002000000407A +:1029E000C0168604000101020301180354006500AB +:1029F00065006E00730079006400750069006E0068 +:102A00006F0009024900020100C0320904000002FF +:102A100003000000092111010001221C00070583A9 +:102A200003400001070504034000010904010002FE +:102A30000300000009211101000122210007058186 +:102A4000034000010705020320000206C9FF090434 +:102A5000A15C7508150026FF009540097581029557 +:102A6000200976910295040976B102C006ABFF0AEF +:102A70000002A1017508150026FF0095400901819B +:102A800002954009029102C02603540065006500CA +:102A90006E00730079006400750069006E006F00BD +:102AA0002000520061007700480049004400040300 +:102AB00009040C03000000000000000000000000FA +:102AC0000000000000000000FFFFFFFF0A040000FC +:102AD00044E5FF1F000000000000000000000000AF +:102AE00000000000000000000000000000000000E6 +:102AF00000000000A4290000000000000000000009 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC00000000000000000000000000034E6FF1FCD +:102BD00034E6FF1F3CE6FF1F3CE6FF1F44E6FF1FF5 +:102BE00044E6FF1F4CE6FF1F4CE6FF1F54E6FF1FA5 +:102BF00054E6FF1F5CE6FF1F5CE6FF1F64E6FF1F55 +:102C000064E6FF1F6CE6FF1F6CE6FF1F74E6FF1F04 +:102C100074E6FF1F7CE6FF1F7CE6FF1F84E6FF1FB4 +:102C200084E6FF1F8CE6FF1F8CE6FF1F94E6FF1F64 +:102C300094E6FF1F9CE6FF1F9CE6FF1FA4E6FF1F14 +:102C4000A4E6FF1FACE6FF1FACE6FF1FB4E6FF1FC4 +:102C5000B4E6FF1FBCE6FF1FBCE6FF1FC4E6FF1F74 +:102C6000C4E6FF1FCCE6FF1FCCE6FF1FD4E6FF1F24 +:102C7000D4E6FF1FDCE6FF1FDCE6FF1FE4E6FF1FD4 +:102C8000E4E6FF1FECE6FF1FECE6FF1FF4E6FF1F84 +:102C9000F4E6FF1FFCE6FF1FFCE6FF1F04E7FF1F33 +:102CA00004E7FF1F0CE7FF1F0CE7FF1F14E7FF1FE0 +:102CB00014E7FF1F1CE7FF1F1CE7FF1F24E7FF1F90 +:102CC00024E7FF1F2CE7FF1F2CE7FF1F34E7FF1F40 +:102CD00034E7FF1F3CE7FF1F3CE7FF1F44E7FF1FF0 +:102CE00044E7FF1F4CE7FF1F4CE7FF1F54E7FF1FA0 +:102CF00054E7FF1F5CE7FF1F5CE7FF1F64E7FF1F50 +:102D000064E7FF1F6CE7FF1F6CE7FF1F74E7FF1FFF +:102D100074E7FF1F7CE7FF1F7CE7FF1F84E7FF1FAF +:102D200084E7FF1F8CE7FF1F8CE7FF1F94E7FF1F5F +:102D300094E7FF1F9CE7FF1F9CE7FF1FA4E7FF1F0F +:102D4000A4E7FF1FACE7FF1FACE7FF1FB4E7FF1FBF +:102D5000B4E7FF1FBCE7FF1FBCE7FF1FC4E7FF1F6F +:102D6000C4E7FF1FCCE7FF1FCCE7FF1FD4E7FF1F1F +:102D7000D4E7FF1FDCE7FF1FDCE7FF1FE4E7FF1FCF +:102D8000E4E7FF1FECE7FF1FECE7FF1FF4E7FF1F7F +:102D9000F4E7FF1FFCE7FF1FFCE7FF1F04E8FF1F2E +:102DA00004E8FF1F0CE8FF1F0CE8FF1F14E8FF1FDB +:102DB00014E8FF1F1CE8FF1F1CE8FF1F24E8FF1F8B +:102DC00024E8FF1F2CE8FF1F2CE8FF1F34E8FF1F3B +:102DD00034E8FF1F3CE8FF1F3CE8FF1F44E8FF1FEB +:102DE00044E8FF1F4CE8FF1F4CE8FF1F54E8FF1F9B +:102DF00054E8FF1F5CE8FF1F5CE8FF1F64E8FF1F4B +:102E000064E8FF1F6CE8FF1F6CE8FF1F74E8FF1FFA +:102E100074E8FF1F7CE8FF1F7CE8FF1F84E8FF1FAA +:102E200084E8FF1F8CE8FF1F8CE8FF1F94E8FF1F5A +:102E300094E8FF1F9CE8FF1F9CE8FF1FA4E8FF1F0A +:102E4000A4E8FF1FACE8FF1FACE8FF1FB4E8FF1FBA +:102E5000B4E8FF1FBCE8FF1FBCE8FF1FC4E8FF1F6A +:102E6000C4E8FF1FCCE8FF1FCCE8FF1FD4E8FF1F1A +:102E7000D4E8FF1FDCE8FF1FDCE8FF1FE4E8FF1FCA +:102E8000E4E8FF1FECE8FF1FECE8FF1FF4E8FF1F7A +:102E9000F4E8FF1FFCE8FF1FFCE8FF1F04E9FF1F29 +:102EA00004E9FF1F0CE9FF1F0CE9FF1F14E9FF1FD6 +:102EB00014E9FF1F1CE9FF1F1CE9FF1F24E9FF1F86 +:102EC00024E9FF1F2CE9FF1F2CE9FF1F34E9FF1F36 +:102ED00034E9FF1F3CE9FF1F3CE9FF1F44E9FF1FE6 +:102EE00044E9FF1F4CE9FF1F4CE9FF1F54E9FF1F96 +:102EF00054E9FF1F5CE9FF1F5CE9FF1F64E9FF1F46 +:102F000064E9FF1F6CE9FF1F6CE9FF1F74E9FF1FF5 +:102F100074E9FF1F7CE9FF1F7CE9FF1F84E9FF1FA5 +:102F200084E9FF1F8CE9FF1F8CE9FF1F94E9FF1F55 +:102F300094E9FF1F9CE9FF1F9CE9FF1FA4E9FF1F05 +:102F4000A4E9FF1FACE9FF1FACE9FF1FB4E9FF1FB5 +:102F5000B4E9FF1FBCE9FF1FBCE9FF1FC4E9FF1F65 +:102F6000C4E9FF1FCCE9FF1FCCE9FF1FD4E9FF1F15 +:102F7000D4E9FF1FDCE9FF1FDCE9FF1FE4E9FF1FC5 +:102F8000E4E9FF1FECE9FF1FECE9FF1FF4E9FF1F75 +:102F9000F4E9FF1FFCE9FF1FFCE9FF1F04EAFF1F24 +:102FA00004EAFF1F0CEAFF1F0CEAFF1F14EAFF1FD1 +:102FB00014EAFF1F1CEAFF1F1CEAFF1F24EAFF1F81 +:102FC00024EAFF1F2CEAFF1F2CEAFF1FFFFFFFFF71 +:042FD00000000200FB +:00000001FF diff --git a/teensy_loader_cli/blink_slow_Teensy31.hex b/teensy_loader_cli/blink_slow_Teensy31.hex new file mode 100644 index 0000000..981b713 --- /dev/null +++ b/teensy_loader_cli/blink_slow_Teensy31.hex @@ -0,0 +1,897 @@ +:1000000000800020BD01000081130000811300006A +:100010008113000081130000811300004D130000C4 +:100020004D1300004D1300004D130000811300001C +:10003000811300004D130000811300003D130000E8 +:100040008113000081130000811300008113000060 +:100050008113000081130000811300008113000050 +:100060008113000081130000811300008113000040 +:100070008113000081130000811300008113000030 +:100080008113000081130000811300008113000020 +:100090008113000081130000811300008113000010 +:1000A0008113000081130000811300008113000000 +:1000B00081130000811300008113000081130000F0 +:1000C00081130000811300008113000081130000E0 +:1000D00081130000811300008113000081130000D0 +:1000E00081130000811300008113000081130000C0 +:1000F00081130000050F000081130000ED1F0000B8 +:10010000811300008D120000811300008113000094 +:10011000811300008113000081130000811300008F +:10012000811300008113000081130000811300007F +:10013000811300008113000081130000811300006F +:10014000811300008113000081130000811300005F +:100150007D22000095220000AD220000C522000093 +:1001600081130000E11500008113000081130000DD +:10017000811300008113000081130000811300002F +:10018000811300008113000081130000811300001F +:10019000811300008113000081130000310500006D +:1001A0008105000009060000C5060000490700009F +:1001B00081130000811300005D2100004F4B4CF2C1 +:1001C000205210B51A804DF628121A8000BF00BFC9 +:1001D00001F0DAF84A4B4FF010621A60494A9A600F +:1001E000494ADA60494B1A6812F4807204D14849CE +:1001F0000A604FF4A8521A60464B1A7802F00802BF +:10020000D2B21AB11A7842F008021A700023424A98 +:100210004248434C02E019599950043399188142DD +:10022000F9D3404B404A002101E043F8041B9342BC +:10023000FBD33E4B00221A603D4B3E4A802103F81F +:10024000011B9342FBD13C4B0A221A703B4B2422E8 +:100250001A70A02203F8012C394A137803F0020324 +:10026000DBB2002BF9D0364A137803F01003DBB26F +:10027000002BF9D1324A137803F00C03082BFAD182 +:10028000304B03221A7040225A702D4A137803F023 +:100290002003DBB2002BF9D0294A137803F0400386 +:1002A000DBB2002BF9D0284A284B1A60284B2022B9 +:1002B0001A70234A137803F00C030C2BFAD1254B48 +:1002C00002221A60244A43F8442C244B4BF67F3216 +:1002D0001A60072243F8042C62B600F0CDFA0C4BEA +:1002E0001B68DC0702D51E4800F046FA02F052F9FE +:1002F00001F050F802F0F4F8FEE700BF0E200540D0 +:1003000030800440823F04000100002B10D00340E5 +:1003100014D0034002D007404084FF1F448AFF1FCF +:10032000F0310000448AFF1F2C8EFF1F08ED00E013 +:1003300000E400E05FE400E00050064001400640B9 +:10034000064006400440064000000311448004407B +:100350000040064048800440C010050014E000E062 +:10036000370A1053FFFFFFFFFFFFFFFFFFFFFFFFF5 +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFD +:1004100008B548F64420074BC1F6FF701B1A062B9F +:1004200000D808BD40F20003C0F20003002BF8D052 +:100430009847F6E7478AFF1F08B548F6442048F674 +:100440004423C1F6FF70C1F6FF731B1A9B1003EB28 +:10045000D373591000D108BD40F20002C0F200026F +:10046000002AF8D09047F6E710B548F64424C1F6C4 +:10047000FF74237873B9FFF7CBFF40F20003C0F29B +:1004800000032BB143F2F010C0F20000AFF3008084 +:100490000123237010BD00BF08B540F20003C0F275 +:1004A00000034BB143F2F01048F64821C0F20000BF +:1004B000C1F6FF71AFF3008048F64420C1F6FF702B +:1004C00003682BB140F20003C0F2000303B1984768 +:1004D000BDE80840FFF7B0BF0D20012100F07CB956 +:1004E00008B501210D2000F057F94FF47A7000F0A3 +:1004F000ADF90D20002100F04FF94FF47A70BDE8FE +:10050000084000F0A3B9FFFF084B4FF400021A6047 +:100510004FF080721A604FF000721A604FF08062E4 +:100520001A604FF000621A60704700BF08E100E0F7 +:10053000114B10B51C68E0041C6004D50F4BDA6841 +:100540000AB1DB689847A10404D50C4B1A690AB1BB +:100550001B699847A20604D5084B1A6E0AB11B6E98 +:100560009847E30606D5054BD3F8842012B1D3F89B +:100570008430984710BD00BFA0900440608AFF1FE0 +:100580001F4B10B51C68E0031C6004D51D4B1A6896 +:100590000AB11B689847A10304D51A4B5A680AB1DF +:1005A0005B689847E20704D5164B1A6C0AB11B6CBE +:1005B0009847A30704D5134B5A6C0AB15B6C984754 +:1005C000200704D50F4B9A6C0AB19B6C98476107C2 +:1005D00004D50C4BDA6C0AB1DB6C9847220304D5C6 +:1005E000084B5A6E0AB15B6E9847630306D5054BFC +:1005F000D3F8802012B1D3F88030984710BD00BFE7 +:10060000A0A00440608AFF1F2C4B10B51C68200777 +:100610001C6004D52A4B5A6A0AB15B6A9847E10606 +:1006200004D5274B9A6A0AB19B6A9847620604D59B +:10063000234BDA6A0AB1DB6A9847230604D5204BBC +:100640001A6B0AB11B6B9847A00604D51C4B5A6B5A +:100650000AB15B6B9847E10704D5194BDA6B0AB115 +:10066000DB6B9847A20704D5154B9A6D0AB19B6DB9 +:100670009847630704D5124BDA6D0AB1DB6D9847D2 +:10068000A00504D50E4BDA6E0AB1DB6E9847E10582 +:1006900004D50B4B1A6F0AB11B6F9847620504D53E +:1006A000074B5A6F0AB15B6F9847230504D5044B7B +:1006B0009A6F0AB19B6F984710BD00BFA0B004406D +:1006C000608AFF1F1E4B10B51C68E0071C6004D534 +:1006D0001C4B9A680AB19B689847210604D5194BB0 +:1006E0005A690AB15B699847E20604D5154B9A69C5 +:1006F0000AB19B699847630704D5124BDA690AB1BE +:10070000DB699847200704D50E4B1A6A0AB11B6AA9 +:100710009847A10704D50B4B9A6B0AB19B6B98477E +:10072000A20604D5074B1A6D0AB11B6D98476306E4 +:1007300004D5044B5A6D0AB15B6D984710BD00BFDC +:10074000A0C00440608AFF1F094B10B51C68A207B7 +:100750001C6004D5074B9A6E0AB19B6E9847E3075D +:1007600004D5044BDA6F0AB1DB6F984710BD00BFA8 +:10077000A0D00440608AFF1F044B054900221A6084 +:100780000A60044A106010221A60704714D00340B7 +:1007900004D0034000D00340212810B518D80D4ADA +:1007A00052F8303093F880423CB1012211B183F805 +:1007B000802010BD83F8002110BD02EBC00043680B +:1007C0001A6811B142F0030201E022F002021A603D +:1007D00010BD00BFEC2E0000212816D80B4A02EBFA +:1007E000C00301295B6852F8302004D182F88012DE +:1007F0004FF4A27208E0002082F8800211B94FF491 +:10080000807201E040F203121A607047EC2E000083 +:1008100072B60B4B0B491A680B4B1B68096862B622 +:10082000490102D5322A88BF0133C2F53B427F32EB +:100830003021B2FBF1F24FF47A7000FB03207047D5 +:1008400018E000E004ED00E0E88AFF1F70B5044600 +:10085000FFF7DEFF05466CB140F2E736FFF7D8FF41 +:10086000401BB04203D9013C04D005F57A7500F075 +:10087000C7FBF3E770BDFFFF10B5FFF745FE164B52 +:10088000164A174C00204BF6FF7118605960282358 +:1008900013609360136193611362936213639363B4 +:1008A000092222600F4C20606160A360236144F83C +:1008B000042C0D4C20600D4801600D490B608B60CD +:1008C0000C4B1A6001F0EAFB0420FFF7BFFFBDE804 +:1008D000104001F09BB900BF048003400C8003402E +:1008E000008003400490034004800B4008800B40CC +:1008F0000C800B4000800B40F8B5124D124E2F4675 +:100900003378DBB12B681BB9022000F0BBFD2860F7 +:10091000386898B14388C218147A5CB102880133F0 +:10092000934205D301F0DEF9064B00221A6007E07E +:10093000438005E001F0D6F92C60E1E74FF0FF3489 +:100940002046F8BDF88AFF1FFB8CFF1FF8B50C4D41 +:100950000C4E2F4633787BB12B681BB9022000F078 +:1009600091FD2860386838B14388C3181C7A2CB9C7 +:1009700001F0B8F92C60EDE74FF0FF342046F8BDE8 +:10098000F88AFF1FFB8CFF1F38B5124C236833B168 +:10099000104B1868438802880024C51810E00E4BDD +:1009A0001B781BB1022000F06DFD20602468002C34 +:1009B000EED10DE02919097A09B94CB904E00134E6 +:1009C000E1189142F6DBF8E701F08CF9014B1C606D +:1009D000204638BDF88AFF1FFB8CFF1F2DE9F84326 +:1009E000314B324DDFF8D09001220C461A7006468A +:1009F00053E02B685BBB2C4F43F2292899F8003059 +:100A000013B9294A137018E0012000F057FD05289A +:100A100004D9B8F10108264A08D109E001233B7046 +:100A200001F042F928600028F3D010E0137843B1B8 +:100A3000012313701C4B00221A704FF0FF30BDE8E9 +:100A4000F8833B7000F0DCFA01233B70D6E729689D +:100A5000174A488800231370C0F14002944238BFFF +:100A6000224600F108078018CF194880A41A02E036 +:100A7000F05CF85401339342FAD1F6184B883F2BBF +:100A80000C4B02D805221A7007E040220A8000278A +:100A900001201F7000F064FD2F60002CA9D1024BD3 +:100AA00020461C70BDE8F883EC8AFF1FF08AFF1F08 +:100AB000F48AFF1FFC8AFF1FFB8CFF1F07B502ABE8 +:100AC000012103F8010D1846FFF788FF0EBDFFFF57 +:100AD00038B50E4B1B78C3B10D4B1968A9B14A88C4 +:100AE0009AB10C48002303708C181D4602E0E018F0 +:100AF0000133057298183F28F9DD40230B8001204F +:100B000000F02EFD024B00221A6038BDFB8CFF1F47 +:100B1000F08AFF1FFC8AFF1F38B50C4B1B789BB96E +:100B20000B4A11684A881D468C1802E0E018013310 +:100B3000057298183F28F9DD40230B80012000F052 +:100B40000FFD034B00221A6038BD00BFEC8AFF1F67 +:100B5000F08AFF1F1B4B1A6842F480621A601A4A1F +:100B600000231370194A1370194A1370194A13702D +:100B7000194A1370194B40F213321A604FF4517234 +:100B80005A60174BC0F344321A70C0F347125A70C0 +:100B900000F01F00134A987202210423137051744D +:100BA000D374114B88221A703C2203F80D2C0F4B82 +:100BB00040226FF44A711A705B184FF400521A60A9 +:100BC000704700BF348004407F8BFF1FFE8AFF1FE9 +:100BD000888BFF1F808BFF1FFD8AFF1F40A00440F2 +:100BE00000A0064002A0064010A006402DE400E050 +:100BF000134A137800F0030103F0EC030B434107A1 +:100C000048BF43F01003137000F00F03042B04D10E +:100C10000C4B1A7842F040021A700B4A1378C10646 +:100C200003F0EF0348BF43F010031370054A137835 +:100C3000800603F0EF0348BF43F0100313707047C2 +:100C400002A0064006A0064005A006400E4B1B6809 +:100C5000580510B503D410BD00F0D2F900E00B4CDC +:100C60002378002BF8D10A4A4FF400511160094A49 +:100C70000949137040F203120A604A60074A137070 +:100C8000074A137010BD00BF34800440FD8AFF1F67 +:100C900084E100E003A0064040A004407F8BFF1FDA +:100CA000FE8AFF1F38B5094B04461D78002DFCD184 +:100CB00020460121FFF790FD20462946FFF76CFDF5 +:100CC000034B53F83420034B1A6038BDFD8AFF1FD5 +:100CD000EC2E0000848BFF1F1D4B1B685A052DE96D +:100CE000F041064632D51B4B1B680BB101221A702E +:100CF000194B1A4D1C781A4FDFF86C8001343F2CC9 +:100D000088BF002415E000F04FFB40280DDC3B7845 +:100D10001B060ED52B78134A01333F2B88BF0023C7 +:100D200018F8031011702B7003E0FF2801DD00F0AC +:100D300067F92B78A342E6D00B4B1E550B4B0122D3 +:100D40001A70054B1C700A4BBC221A70BDE8F0816A +:100D500034800440848BFF1F888BFF1F808BFF1F14 +:100D600004A0064007A00640FF8AFF1FFD8AFF1F60 +:100D700003A006402DE9F84F254B1B680646580591 +:100D8000884643D5234B1B680BB101221A70224DB4 +:100D9000B346A94633E0214B1C782F7801343F2C11 +:100DA00088BF0024A74209D01BF8012B1C4B1A5501 +:100DB0001C4B01221A70194B1C7020E01A4BDFF8F3 +:100DC00070A0BC221A7000F0EFFA40280FDC9AF8ED +:100DD000003019060FD52B78114A01333F2B88BFFD +:100DE0000023D15C114A117089F8003003E0FF281C +:100DF00001DD00F005F92B78BB42E4D0D4E706EB27 +:100E000008039B45C7D3084BBC221A70BDE8F88F76 +:100E100034800440848BFF1F808BFF1F888BFF1F53 +:100E2000FF8AFF1FFD8AFF1F03A0064007A00640A0 +:100E300004A0064010B5044C01E000F0E1F823786E +:100E4000002BFAD110BD00BFFD8AFF1F044B18789C +:100E5000044B1B78984238BF4030C01A704700BF1F +:100E60007F8BFF1FFE8AFF1F084B094A19781378F2 +:100E7000994207D001333F2B88BF00230549C85C46 +:100E8000137070474FF0FF30704700BF7F8BFF1F1C +:100E9000FE8AFF1F3F8BFF1F074B1A78074B1B78FB +:100EA0009A4206D001333F2B88BF0023044AD05C0E +:100EB00070474FF0FF3070477F8BFF1FFE8AFF1F88 +:100EC0003F8BFF1F0A4B1B685B050FD5094B1A7838 +:100ED00002F0CB021A70084A402111701A7842F0D1 +:100EE00034021A70054B1A78054B1A70704700BF10 +:100EF0003480044003A0064011A00640FE8AFF1F74 +:100F00007F8BFF1FF0B5304B1B7813F0300F20D0D4 +:100F100072B62E4B197831B90F3B40221B782C4BFF +:100F20001A7062B615E062B62A4B2B4C1A782B4B1E +:100F30002B4D1878531C3F2B88BF00232678834203 +:100F40001CBFEE541A46013911F0FF01F2D1214BBA +:100F50001A70244B1B7819465BB2002B1FDA1A4A11 +:100F6000137818061BD5204B204E1F78204B1A4DA6 +:100F70001B78204CBB4209D001333F2B88BF002394 +:100F80001078F05C287020780728F3D9184A13707D +:100F90000D4B1B781A0602D5124B7C221A7001F0F9 +:100FA0004003DBB27BB1084B1B7803F04003DBB29C +:100FB0004BB1114B00221A70104B1B6803B11A7011 +:100FC000084B3C221A70F0BD04A0064016A0064053 +:100FD00011A006407F8BFF1F07A00640FE8AFF1F5F +:100FE0003F8BFF1F03A00640888BFF1FFF8AFF1F58 +:100FF000808BFF1F14A00640FD8AFF1F848BFF1FFC +:101000007047FFFF174B1A6842F480521A60164A65 +:1010100000231370154A1370154A1370154A137084 +:10102000154A1370154A40F2133111604FF4517193 +:101030005160134AC0F344311170C0F3471100F0FE +:101040001F0051709072937013740E4B2C221A7003 +:101050000D4B40226FF44B711A705B184FF4003245 +:101060001A60704734800440F38BFF1F8A8BFF1F88 +:10107000F58BFF1FF48BFF1F898BFF1F08C00440F7 +:1010800000C0064003C0064031E400E0134A137874 +:1010900000F0030103F0EC030B43410748BF43F0AA +:1010A0001003137000F00F03042B04D10C4B1A78BB +:1010B00042F040021A700B4A1378C10603F0EF03A6 +:1010C00048BF43F010031370054A1378800603F0FD +:1010D000EF0348BF43F010031370704702C006408F +:1010E00006C0064005C006400E4B1B68D80410B56C +:1010F00003D410BDFFF784FF00E00B4C2378002BD6 +:10110000F8D10A4A4FF400311160094A09491370B5 +:1011100040F203120A604A60074A1370074A1370CC +:1011200010BD00BF34800440898BFF1F84E100E0C4 +:1011300003C0064008C00440F38BFF1F8A8BFF1FCB +:101140001B4B1B68DA042DE9F04106462DD5194BDF +:10115000194D1C78194FDFF86C800134272C88BF9B +:10116000002415E000F020F940280DDC3B781B0638 +:101170000ED52B78124A0133272B88BF002318F88D +:10118000031011702B7003E0FF2801DDFFF738FF1B +:101190002B78A342E6D00B4B1E550B4B01221A7045 +:1011A000044B1C70094BAC221A70BDE8F08100BFE3 +:1011B00034800440F58BFF1FF48BFF1F04C00640F2 +:1011C00007C006408B8BFF1F898BFF1F03C00640A3 +:1011D00038B54518044603E014F8010BFFF7B0FFDB +:1011E000AC42F9D138BDFFFF10B5044C01E0FFF768 +:1011F00007FF2378002BFAD110BD00BF898BFF1F9A +:10120000044B1878044B1B78984238BF4030C01A02 +:10121000704700BFF38BFF1F8A8BFF1F084B094AE3 +:1012200019781378994207D001333F2B88BF0023E8 +:101230000549C85C137070474FF0FF30704700BF1E +:10124000F38BFF1F8A8BFF1FB38BFF1F074B1A788F +:10125000074B1B789A4206D001333F2B88BF0023EF +:10126000044AD05C70474FF0FF307047F38BFF1F8C +:101270008A8BFF1FB38BFF1F024B1A78024B1A7029 +:10128000704700BF8A8BFF1FF38BFF1F10B5214BE8 +:101290001B7803F02003DBB273B11F4B1F4A187891 +:1012A0001F491378097801333F2B88BF00238B42F5 +:1012B00002D01C49C85413701B490B7818465BB206 +:1012C000002B15DA134B1B781B0611D5174B184A48 +:1012D0001C7813789C4202D16C230B7008E0013318 +:1012E000272B88BF00231349CC5C0B490C7013706B +:1012F00000F04003DBB25BB1064B1B7803F0400308 +:10130000DBB22BB10C4B00221A70074B2C221A7047 +:1013100010BD00BF04C0064007C00640F38BFF1F8E +:101320008A8BFF1FB38BFF1F03C00640F58BFF1F87 +:10133000F48BFF1F8B8BFF1F898BFF1F024B1A68DB +:1013400001321A60704700BFE88AFF1F38B50B4CA6 +:1013500025462368580301D500F042F92B6859054A +:1013600001D5FFF7CFFD2B681A0501D500F03EFE31 +:101370002368DB04EDD5FFF789FFEAE734800440FA +:1013800008B5FFF7E3FFFFFF014B10221A807047FB +:10139000002005407047FFFF024A136818181060CC +:1013A000184670474484FF1FEFF313839BB9EFF394 +:1013B000108098B9EFF3058323B10F2B04D9084AA5 +:1013C000985C01E04FF48070EFF311833BB19842D9 +:1013D00028BF184670474FF0FF30704718467047D7 +:1013E000F0E300E01FB572B6124B70221A70124A79 +:1013F000412111700F2102F8011C80221A701A7805 +:101400001206FCD562B60D4B01A918680A2200F03D +:101410008BFC0B48002301AA9A5C2AB100EB430124 +:1014200001330A2B4A80F6D10133054A5B00137061 +:1014300005B000BD00000240070002400800024065 +:101440002285FF1FF0B50C4B0C4C1A7842F00205B8 +:1014500004EBC50682F00102706009481A70067834 +:10146000002E0CBF8827C82747EA014186F00106F5 +:1014700044F835100670F0BD748CFF1F0080FF1F0C +:10148000FC8CFF1F431E052B10B510D872B6094AFD +:1014900052F8230048B1416842F82310064A0188F7 +:1014A00032F81340611A22F8131062B610BD002002 +:1014B00010BD00BF5C8CFF1F1C8EFF1F013805286C +:1014C0000BD872B6064B53F82030002001E05B6861 +:1014D0000130002BFBD162B670470020704700BF7F +:1014E000B88CFF1F70B572B6184E194C01239A19AB +:1014F00012F8012C02F00802D2B2E2B19900144AAB +:1015000054F831502DB902EB431308305860114B99 +:1015100009E041F0010154F8315065B902EBC10313 +:10152000083058600C4B42F831300C4B1A78013AB5 +:101530001A7062B670BD0133072BD8D162B6074B63 +:1015400000221A70BDE8704000F0CCBBFC2F0000F8 +:101550000080FF1F88004000C8004000F28CFF1F81 +:10156000431E052B30B532D84001194A40F0100017 +:10157000101872B6174CE25C032A09D8DFE802F0B3 +:10158000160218050830022213E00830042210E089 +:101590001148124A50F8234014B940F8231002E0D1 +:1015A00052F82300416042F823100FE0032200E0CC +:1015B0000522E25410F0080F01F108030A88436085 +:1015C0000CBF8823C82343EA0243036062B630BDE0 +:1015D0000080FF1F148CFF1FB88CFF1FD08CFF1FD3 +:1015E0002DE9F74FA34EA44C357805F00403DBB288 +:1015F000ABB1A24B1B7883B1A14A137823B1013B55 +:10160000DBB2137003B900BE9E4A13782BB1013BC5 +:10161000DBB213700BB9FFF77FFA0423337005F0C8 +:101620000802D2B2002A00F07B82974B1B781D097A +:101630004FEA930940F0F98154F8392004EBC903CB +:10164000C2F38302013A5B680C2A00F2EB81DFE807 +:1016500012F0A001A001E901E901E901E901E901B4 +:10166000E901C001E901E901E9010D001A688749B2 +:101670005B68874D4B60874B0A6044F83930864B76 +:101680000020186001232B7092B240F28165AA42BB +:101690002061A06117D8B2F5D06F80F02881B2F533 +:1016A000817F00F0D58006D8802A00F0BB80822A96 +:1016B00040F03581BAE040F202339A4200F00881EE +:1016C000B2F5A06F10E0B2F5106F10D004D8B2F5EB +:1016D000086F40F02481A0E040F621139A4200F008 +:1016E000558103F580739A4240F019811BE18A7895 +:1016F000624B614D1A702B6A180603D5686A083868 +:1017000000F0F0FA654908358D42F4D1DFF8B49164 +:10171000DFF8B4B10025A846CA4655F8090005E02F +:101720004368009300F0DEFA009B18460028F7D1CA +:101730005B4B4AF8050045F80B00E85807E04268A3 +:101740000093019200F0CEFA019A009B1046002807 +:10175000F5D15851534BE850534B23F81800534BD5 +:1017600018F80320023A032A08D8DFE802F002043E +:101770000204002200E0012203F8082008F1010819 +:101780000435B8F1060FC8D1494BDFF8409100226B +:101790001A7001259846474B05EB0902EB1812F821 +:1017A000012C9B001A7002F00802D2B23AB300F08A +:1017B0007BFAAB0038B104EB4512083050603E4A6A +:1017C00044F8332006E044F8330098F80030013341 +:1017D00088F8003000F068FAAB0043F0010338B13C +:1017E00004EBC302083050602A4A44F8332006E074 +:1017F00044F8330098F80030013388F80030AA002C +:1018000042F00201013542F003020023072D44F8A3 +:10181000313044F83230BED129E0184A274D1278D1 +:101820002A7083E0254D287068707EE08A88062A39 +:1018300000D974E09100224A204D8A1828706870FF +:10184000127802F00202D2B2002A6ED02B706CE045 +:101850008A8802F07F03062B61DC4B8803B15EE0CF +:101860009100174A8A18117821F0020111701D4663 +:101870005CE000BF802007400080FF1FFB8CFF1F43 +:10188000758CFF1FFC8AFF1F90200740E88CFF1F0C +:10189000FC8CFF1FC8004000F88BFF1FC080FF1F9B +:1018A000B88CFF1FD08CFF1F1C8EFF1F148CFF1FD6 +:1018B000F28CFF1F30C8011088004000F38CFF1F1E +:1018C000C02007405C8CFF1FFC8BFF1FFC2F00001B +:1018D0008A8802F07F03062B21DC4B8803B11EE0CF +:1018E0009100A04A8A18117841F00201BEE74A88A7 +:1018F0009D4B898853F8085CA3F10C007DB133F847 +:101900000CCC944509D133F80ACC8C4505D1120A88 +:10191000032A0CBF2B78038908E00C33EAE7914BCC +:101920000F221A7032E00023A1E702238F4AB2F897 +:1019300006904B4538BF9946B9F1400F34BFC846B1 +:101940004FF0400828464146FFF77CFDB9EB0809F7 +:10195000454403D1B8F1400F07D017E0B9F1400F6B +:1019600034BFC8464FF0400800E0C846284641460C +:10197000FFF768FDB9EB0809454402D1B8F1400F03 +:1019800004D17B4B7B4A1D60A2F8009001227A4B68 +:1019900047E0764A79481168814216D15168784A01 +:1019A000914212D11A78A92A0FD15A78452A0CD11E +:1019B0009A78C22A09D1DB786B2B06D1714B0020B3 +:1019C000052201461A70FFF73DFD6F4B44F8393090 +:1019D00028E0674BD3F80080B8F1000F18D0DFF88B +:1019E0009491B9F800A0BAF1400F34BF5546402594 +:1019F00040462946FFF726FDC5EB0A039BB2A9F82E +:101A000000300BB9402D01D108EB0503584A136093 +:101A1000564B1A88B2F5A06F04D100225A709A78FA +:101A20005A4B1A700122544B6DE004EBC90803F0C5 +:101A30000803D8F80420013DD9B2A2F10800EDB2A4 +:101A4000002937D000F04EF95148524B50F825107C +:101A5000F1B14A6840F8252001F10802C8F80420D5 +:101A60005A5D032A0BD8DFE802F0020406080322BD +:101A700004E0022202E0052200E004225A5518F098 +:101A8000080F0A880CBF8823C82343EA024342E0B8 +:101A90005A5D032A07D8DFE802F040400204002222 +:101AA00006E0012204E018F0080F0CBF0222032216 +:101AB0005A5532E054F839301B0C22F8083C23B355 +:101AC00022F8061C42F8041C334A344952F82570A7 +:101AD00017B942F8250002E051F825205060304A3D +:101AE00041F8250032F815105B1822F8153000F087 +:101AF000DBF818B10830C8F8040006E0294B44F8B8 +:101B000039001A7801321A7007E01F4B264A18F084 +:101B1000080F08BF134644F839300823337063E5D3 +:101B2000E90751D514492048204C02230B70204B63 +:101B30001A70204B186098601F481A61D8609A612B +:101B40005C60084B0D2018701C48FF23037000F8E0 +:101B5000083C02741A4A13701A4B9F221A70012310 +:101B60000B704AE0C020074010300000E88CFF1FD7 +:101B7000F88BFF1FF08CFF1F942007402109000302 +:101B800001000400758CFF1FC8004000982007402A +:101B9000B88CFF1F148CFF1F5C8CFF1FFC8BFF1F7A +:101BA0001C8EFF1FF28CFF1F880040001C8CFF1F43 +:101BB000748CFF1F0080FF1F788CFF1F8820074058 +:101BC0008C200740842007402B0605D50C4B0D22A6 +:101BD0001A70802203F8402C05F00203DBB22BB10F +:101BE000084B1A781A70022203F8082C05F0100529 +:101BF000EDB215B1044B10221A70BDE8FE8F00BF84 +:101C0000C0200740882007408020074008B5FFF724 +:101C1000E9FB00231E491A465A50C8180833C82B3E +:101C20004260F9D11B4B1A6842F480221A601A4BA9 +:101C300080221A701978184A0906FBD4144B1749E8 +:101C4000C3F307200870C3F307401B0E08750B761B +:101C5000FF2301F81C3C01F8143C01F88C3C13787C +:101C600043F0400313700021012302F8783C02F88E +:101C70000C1C02F8883C0A4B70226FF4507C1A70DE +:101C800063444FF400721A60064B10221A7008BDAC +:101C90000080FF1F348004400C2107409C20074037 +:101CA00049E400E00821074072B60C4A1168B1FA15 +:101CB00081F30B2B02D962B6002070474FF0004031 +:101CC00020FA03F021EA0001116062B604494822BB +:101CD0005343C8180022CA50426070473885FF1F1E +:101CE000E080FF1F0C4B4822C31AB3FBF2F30B2B0F +:101CF00011D80A4A127822B1094A12780AB1FFF7BC +:101D0000F1BB72B6074A4FF0004121FA03F31168A4 +:101D10001943116062B67047E080FF1FF28CFF1F0D +:101D2000FB8CFF1F3885FF1F10B50023B0FBF2F4BA +:101D300002FB1400092801D8303000E03730C854C5 +:101D400020460CB10133F1E7CA185470224605E071 +:101D5000885CCC5C8C54C8540132013B9A42F7DB5E +:101D6000084610BD164B1A6842F400621A60154A04 +:101D700000231370144A1370144A1370144A13701A +:101D8000144A1370144A40F2133111604FF4517128 +:101D90005160124AC0F344311170C0F3471100F092 +:101DA0001F0051709072937013740D4B2C221A7097 +:101DB0000C4B40221A700C4B4FF400421A607047D3 +:101DC00034800440678DFF1FFE8CFF1F698DFF1F4D +:101DD000688DFF1FFD8CFF1F0CB0044000B0064053 +:101DE00003B006402FE400E004E100E0134A13785A +:101DF00000F0030103F0EC030B43410748BF43F03D +:101E00001003137000F00F03042B04D10C4B1A784D +:101E100042F040021A700B4A1378C10603F0EF0338 +:101E200048BF43F010031370054A1378810603F08E +:101E3000EF0348BF43F010031370704702B0064031 +:101E400006B0064005B006400E4B1B68180510B5DD +:101E500003D410BDFFF7D4F800E00B4C2378002B1F +:101E6000F8D10A4A4FF400411160094A0949137038 +:101E700040F203120A604A60074A1370074A13705F +:101E800010BD00BF34800440FD8CFF1F84E100E0E2 +:101E900003B006400CB00440678DFF1FFE8CFF1F8F +:101EA0001B4B1B681A052DE9F04106462DD5194B31 +:101EB000194D1C78194FDFF86C800134272C88BF2E +:101EC000002415E0FFF770FA40280DDC3B781B0674 +:101ED0000ED52B78124A0133272B88BF002318F820 +:101EE000031011702B7003E0FF2801DDFFF788F865 +:101EF0002B78A342E6D00B4B1E550B4B01221A70D8 +:101F0000044B1C70094BAC221A70BDE8F08100BF75 +:101F100034800440698DFF1F688DFF1F04B00640A8 +:101F200007B00640FF8CFF1FFD8CFF1F03B006406B +:101F300038B54518044603E014F8010BFFF7B0FF6D +:101F4000AC42F9D138BDFFFF10B5044C01E0FFF7FA +:101F500057F82378002BFAD110BD00BFFD8CFF1F6E +:101F6000044B1878044B1B78984238BF4030C01A95 +:101F7000704700BF678DFF1FFE8CFF1F084B094A8B +:101F800019781378994207D001333F2B88BF00237B +:101F90000549C85C137070474FF0FF30704700BFB1 +:101FA000678DFF1FFE8CFF1F278DFF1F074B1A78C1 +:101FB000074B1B789A4206D001333F2B88BF002382 +:101FC000044AD05C70474FF0FF307047678DFF1FA9 +:101FD000FE8CFF1F278DFF1F024B1A78024B1A70D1 +:101FE000704700BFFE8CFF1F678DFF1F10B5214B90 +:101FF0001B7803F02003DBB273B11F4B1F4A187824 +:102000001F491378097801333F2B88BF00238B4287 +:1020100002D01C49C85413701B490B7818465BB298 +:10202000002B15DA134B1B781B0611D5174B184ADA +:102030001C7813789C4202D16C230B7008E00133AA +:10204000272B88BF00231349CC5C0B490C701370FD +:1020500000F04003DBB25BB1064B1B7803F040039A +:10206000DBB22BB10C4B00221A70074B2C221A70DA +:1020700010BD00BF04B0064007B00640678DFF1FCB +:10208000FE8CFF1F278DFF1F03B00640698DFF1FC9 +:10209000688DFF1FFF8CFF1FFD8CFF1F224B6022EE +:1020A0001A70E1225A70214B214A1978214B0829D4 +:1020B00001D1012102E00A2907D13921116013223F +:1020C0001A601D4B19605A600BE00C291A4901D1A6 +:1020D000352000E03D20106012221A60174B086086 +:1020E0001A60174B17491B78174A03B101230B607D +:1020F0001360164B164A1978164B012901D8802116 +:102100000CE0042901D8842108E0082901D88521A0 +:1021100004E0102901D8862100E0872111601960B0 +:102120000D4B01221A707047004007403C85FF1F8D +:1021300008B003400CB0034008B00B400CB00B409B +:102140006B8DFF1F20B0034020B00B403D85FF1F6B +:1021500024B0034024B00B406A8DFF1FF8B5164B26 +:10216000164D1A6842F080721A60154B1A6842F0D8 +:1021700001021A60134B2E681C680FE0237A63B1CA +:1021800021682F680B68204698472A68E388D21B8D +:1021900012099A42A28088BFE2806469002CEDD1C6 +:1021A000064B094A1B689B1B1B091380074A1188B1 +:1021B0008B4288BF1380F8BDFCED00E0041000E006 +:1021C000001000E06C8DFF1F728DFF1F708DFF1FD0 +:1021D000F0B505468BB022B90368C9B21B689847B1 +:1021E0002CE0012A08BF0A2221B930228DF82520CF +:1021F000212413E02124B1FBF2F002FB1011C9B23B +:10220000092901D8303100E037310AAF3E1906F80C +:10221000241C014610B1013CE4B2ECE733B1013CAF +:102220000AAAE4B213192D2203F8242C2B6801AF5B +:102230005B6828463919C4F1220298470BB0F0BDFB +:1022400008461146FEF7CABB0846FEF737BCFEF744 +:102250003FBCFEF77BBBFEF74FBBFEF795BBFFFF16 +:10226000044B00221A711A73034A4FF47A71996071 +:102270001A607047748DFF1F9030000008B5034B43 +:1022800001221A60024B1B68984708BD0C7103407D +:102290008C8DFF1F08B5034B01221A60024B5B684F +:1022A000984708BD1C7103408C8DFF1F08B5034B78 +:1022B00001221A60024B9B68984708BD2C710340AD +:1022C0008C8DFF1F08B5034B01221A60024BDB689F +:1022D000984708BD3C7103408C8DFF1F054B0122C0 +:1022E0001A60054B1A6822F400021A60034B0022A0 +:1022F0001A707047007003403C800440888DFF1FB7 +:10230000037B0122591103F01F0302FA03F3084A69 +:1023100042F821308268002313604178054A535403 +:10232000D15C21B90133042BFAD1FFF7D7BF704735 +:1023300080E100E0848DFF1F037810B504460BB1E7 +:10234000FFF7DEFF0023237010BD10B50446FFF732 +:10235000F3FF204610BDFFFF03480449044A002351 +:10236000037000F007B900BF9C8DFF1F4B230000D6 +:102370004084FF1F10B5084614461146FEF728FF9B +:10238000204610BD084608B5FEF7DAFE012008BD5C +:10239000FEF772BFFEF728BFFEF740BFFEF756BF3D +:1023A000FEF72EBFFEF7A0BE480800F1B76000F5AB +:1023B0005840B0FBF1F0FEF725BE480800F1B760C9 +:1023C00010B500F55840B0FBF1F01446FEF71AFEC8 +:1023D0002046BDE81040FEF759BE10B50846144629 +:1023E0001146FEF7C7FC204610BD084608B5FEF7AB +:1023F00073FC012008BDFEF765BDFEF71BBDFEF7AF +:1024000033BDFEF749BDFEF721BD0846FEF74ABCC5 +:10241000FEF71CBC480800F1B76000F55840B0FB5F +:10242000F1F0FEF797BB480800F1B76010B500F572 +:102430005840B0FBF1F01446FEF78CFB2046BDE897 +:102440001040FEF7D5BBFFFF044B00221A711A7330 +:10245000034A4FF47A7199601A607047B08DFF1F7C +:10246000B03000002DE9F041002407460D46264615 +:102470003B190A22197928460023FFF7A9FE2B6889 +:1024800080462E211B682846984701344044032C7F +:102490000644EDD12846F9790A220023FFF798FE79 +:1024A0008019BDE8F081FFFF044B054A1A60002245 +:1024B0001A715A719A71DA71704700BFC08DFF1F8F +:1024C000E8300000044B00221A711A73034A4FF4DB +:1024D0007A7199601A607047C88DFF1FF83000004C +:1024E00008B5FDF7F9FFFDF7FBFFFEF789FDFAE7F9 +:1024F00010B5084614461146FFF71AFD204610BDD8 +:10250000084608B5FFF7CCFC012008BDFFF764BD05 +:10251000FFF71ABDFFF732BDFFF748BDFFF720BD3B +:10252000FFF792BC480800F1B76000F55840B0FBD7 +:10253000F1F0FFF717BC480800F1B76010B500F5DF +:102540005840B0FBF1F01446FFF70CFC2046BDE804 +:102550001040FFF74BBCFFFF044B00221A711A73A7 +:10256000034A4FF47A7199601A607047D88DFF1F43 +:102570003031000003460846194600F001B800BF9C +:1025800030B405460C46134602202946224630BC8C +:1025900000F020BB70B543F2D41643F2D415C0F25C +:1025A0000006C0F20005761BB61007D0043D0024DB +:1025B00055F8043F01349847A642F9D143F2F0168A +:1025C00043F2D415C0F20006C0F20005761B00F0FD +:1025D000FBFDB61008D0043D002455F8043F01343B +:1025E0009847A642F9D170BD70BD00BF48F2405374 +:1025F0000146C1F6FF73186800F008B848F240536E +:102600000146C1F6FF73186800F0A6BB2DE9F04F34 +:1026100001F10B04162C83B0074630D924F00704CF +:10262000E30F8C422CBF194643F0010100292FD142 +:10263000384600F0B7FAB4F5FC7F2ED24FEAD40C3E +:1026400048F23466C1F6FF7606EBCC02D3689342BB +:1026500000F01182596803F10808DA68384621F061 +:10266000030499681B195C68CA6044F00104916016 +:102670005C6000F099FA404603B0BDE8F08F00239B +:1026800010248C422CBF194643F001010029CFD001 +:102690000C234FF000083B60EDE75FEA542C04BFC9 +:1026A0004FEAD40C4FEA4C0540F08F8048F2346674 +:1026B000C1F6FF7606EB8505EB689D4206D10DE07D +:1026C000002A80F25581DB689D4207D0596821F0CD +:1026D00003010A1B0F2AF3DD0CF1FF3C0CF1010C86 +:1026E00048F234623369C1F6FF7202F1080E734595 +:1026F00008BFD2F8049022D0586820F00300011BD4 +:102700000F2900F384810029C2F814E0C2F810E018 +:1027100066DAB0F5007F80F04E81C1084FF0010805 +:1027200002EBC100891008FA01F851688568D86089 +:1027300048EA0109C2F804909D60EB6083600122C1 +:102740004FEAAC0302FA03F34B4554D819EA030FDE +:102750000DD193402CF0030C19EA030F0CF1040C7B +:1027600005D15B000CF1040C19EA030FF9D006EB5C +:10277000CC09E0464846C268904207D15BE1002997 +:1027800080F28381D268904200F05581556825F02F +:102790000305291B0F29F2DD90461319D56844F073 +:1027A000010058F8084F41F0010C50603846C3F85A +:1027B00004C0E560AC6073613361C3F80CE0C3F83A +:1027C00008E0595000F0F0F955E7BCF1040F00F2B1 +:1027D000DE804FEA941C0CF1380C4FEA4C0565E79B +:1027E0001A1803F108083846536843F00103536090 +:1027F00000F0DAF93FE7B5686B6823F0030A544547 +:1028000004D8C4EB0A030F2B00F3A48048F6E85960 +:10281000D6F80814C1F6FF7905EB0A020131D9F8A0 +:102820000030234408BF03F1100B06D003F580539A +:102830000F3323F47F6323F00F0B38465946019280 +:1028400000F0B4F9019A411C804600F06881824290 +:1028500000F23181D9F8043042455B44C9F80430B4 +:1028600000F06681D6F8081448F23460C1F6FF70B3 +:10287000013117BFC2EB0802C0F808849B18C9F8E1 +:10288000043018F0070338461FBFC3F10802C3F530 +:102890008053904403F1080208EB0B0308BF4FF488 +:1028A00080521B051B0DC3EB020B594600F07EF94D +:1028B000431C00F04981C8EB0001594441F001017B +:1028C000D9F80430B54248F6E852C6F808805B44AF +:1028D000C1F6FF72C8F80410C9F8043018D0BAF174 +:1028E0000F0F40F20B81AAF10C00696820F007007D +:1028F0004FF0050C05EB000E0F2801F0010140EA36 +:1029000001016960CEF804C0CEF808C000F2208151 +:1029100048F6E852D9F82C10C1F6FF72B5688B4220 +:10292000D9F8301088BFD36248F6E852C1F6FF727A +:102930008B4288BF13636A6822F003029442C4EB9F +:10294000020301D80F2B05DC38464FF0000800F0D9 +:102950002BF990E62A1943F0010344F001043846AC +:102960006C6005F108085360B26000F01DF982E662 +:102970005918DA689C6838464D6803F1080845F034 +:102980000105E26094604D6000F00EF973E6BCF161 +:10299000140F9CBF0CF15B0C4FEA4C057FF686AE22 +:1029A000BCF1540F00F293804FEA143C0CF16E0C12 +:1029B0004FEA4C057AE6420A042A75D9142A9CBFCC +:1029C00002F15B094FEA490508D9542A00F2C9808F +:1029D0004FEA103909F16E094FEA490506EB850502 +:1029E00048F23468C1F6FF78AA68AA4279D05168E3 +:1029F00021F00301884202D292689542F7D1D06853 +:102A0000D6F80490D8609A60D360836097E61D1969 +:102A100041F00106556144F00104156138465C60DF +:102A200003F10808C5F80CE0C5F808E06E606950CD +:102A300000F0BAF81FE608F10108083018F0030F9B +:102A40007FF499AE4A461CF0030FA2F108010CF185 +:102A5000FF3C00F09E8012688A42F4D072685B00EE +:102A600093423FF6C8AE002B3FF4C5AE1A4200F0C9 +:102A70009580C4467BE603F108025B699A4208BF71 +:102A80000CF1020C3FF42CAEE4E590465519D368E6 +:102A9000384658F8082F6968D36041F001019A6000 +:102AA000696000F081F8E6E54FEA901909F138090C +:102AB0004FEA490592E7B54248F23463C1F6FF7325 +:102AC0003FF4C8AE9D686A6822F0030236E7BCF5A1 +:102AD000AA7F19D84FEAD43C0CF1770C4FEA4C0589 +:102AE000E4E50125D8F804104FEAA909104605FAD3 +:102AF00009F545EA0109C8F8049083E70123454632 +:102B0000C8F80430002219E740F254539C450BD812 +:102B10004FEA944C0CF17C0C4FEA4C05C6E5B568C5 +:102B20006A6822F0030209E7FC254FF07E0CBDE540 +:102B30001105090D00297FF495AEB2680BEB0A016F +:102B400041F001015160E3E601214FF0000BB7E6CF +:102B5000384605F10801019200F0FEF8019A536829 +:102B6000D6E6B2F5AA7F06D84FEAD03909F177093F +:102B70004FEA490532E740F25451FC258A424FF0B2 +:102B80007E099EBF4FEA904909F17C094FEA490549 +:102B900024E7726822EA0302726060E75B0008F1D2 +:102BA000040863E7704700BF704700BF38B548F6B8 +:102BB0002864C1F6FF740546084600232360FEF72B +:102BC000EBFB431C00D038BD2368002BFBD02B60EF +:102BD00038BD00BF2DE9F04143F26014C0F200049B +:102BE00084B007462568AC6C002C42D066681F2E66 +:102BF0001ADD42F2ED54C0F2000424B94FF0FF3068 +:102C000004B0BDE8F0818C20039102920193FFF79C +:102C1000EDFC0399029A019B04460028EED0A86CB3 +:102C2000002684E84100AC64DFB1D4F8886026B3A4 +:102C3000D6F8008165680120022F05F1200C00FA0A +:102C400005F046F8252048EA000246F82C3008BF77 +:102C5000D6F80431C6F8002104BF1843C6F80401B1 +:102C600000E06568AB1C00200135656044F8231066 +:102C7000C6E705F14C04AC64B8E742F2ED50C0F28F +:102C800000000028BAD04FF484700391029201939F +:102C9000FFF7ACFC0399029A019B06460028ADD0D1 +:102CA0000020C6F80001C6F804018046C4F8886018 +:102CB000C0E700BFF8B548F23464C1F6FF740F46B0 +:102CC0000546FFF76FFFA3685E6826F0030606F669 +:102CD000EF73DF1B3F0B013F3F03B7F5805F07DB5F +:102CE00000212846FFF762FFA3689B19984204D091 +:102CF0002846FFF759FF0020F8BD79422846FFF724 +:102D000055FF013010D048F6EC53A168C1F6FF73AF +:102D1000F61B284646F001061A684E60D71B1F6056 +:102D2000FFF742FF0120F8BD00212846FFF73EFFD4 +:102D3000A368C21A0F2ADBDD48F63C2448F6EC51A2 +:102D4000C1F6FF74C1F6FF7142F001025A602368B8 +:102D5000C01A0860CCE700BF2DE9F0410E4680465E +:102D600000295CD0FFF71EFF48F2346556F8041CBA +:102D7000C1F6FF75A6F1080421F00103AF68E2185F +:102D80009742506820F0030067D011F001015060B5 +:102D900035D000211618766816F0010F06D11B18E1 +:102DA000906800294DD0D268C260906043F0010263 +:102DB000E3506260F1B9B3F5007F32D35A0A042AB6 +:102DC0006CD898093830410005EB810548F2346130 +:102DD000C1F6FF71AA68AA426BD0516821F00301C5 +:102DE0008B4202D292689542F7D1D368E360A26029 +:102DF000D4609C604046BDE8F041FFF7D5BE56F870 +:102E0000086C05F1080CA41B9B19A668664543D005 +:102E1000D4F80CC0C6F80CC0CCF80860BAE7BDE81E +:102E2000F081DB080121686805EBC3029B1001FA01 +:102E300003F3E260916818436860A160CC6094601D +:102E4000D8E7294EB042AED16C6143F001022C614B +:102E5000E060A0606260E350CCE7C018CB0707D405 +:102E600056F8083CE41AC018A268E368D3609A6078 +:102E700048F6402240F00103C1F6FF726360AC6087 +:102E800013689842B6D348F6E8534046C1F6FF733C +:102E90001968FFF70FFFADE701217BE702F15B0047 +:102EA0004100142A90D9542A0CD8180B6E304100D6 +:102EB0008AE701264D688010134606FA00F00543A4 +:102EC0004D6093E7B2F5AA7F03D8D80B7730410065 +:102ED0007AE740F254518A4203D8980C7C30410082 +:102EE00072E7FC217E206FE73C86FF1F4008FE430F +:102EF00040A004404408FE4344A004400018FE43A0 +:102F000000C004403000FE43309004403400FE43D3 +:102F1000349004401C18FE431CC004401018FE43AB +:102F200010C004400818FE4308C004400C18FE43BB +:102F30000CC004400C10FE430CB004401010FE43C3 +:102F400010B004401810FE4318B004401C10FE439B +:102F50001CB004401410FE4314B004400418FE4397 +:102F600004C004400010FE4300B004400008FE43CB +:102F700000A004400408FE4304A004400C08FE43E3 +:102F80000CA004400808FE4308A004401418FE43A7 +:102F900014C004401818FE4318C004400410FE4337 +:102FA00004B004400810FE4308B004401400FE437F +:102FB000149004404C08FE434CA004400420FE43FF +:102FC00004D004402410FE4324B004402010FE43EB +:102FD00020B004402810FE4328B004402C10FE43CB +:102FE0002CB004400020FE4300D004404808FE43BB +:102FF00048A004401000FE43109004401519151914 +:103000000000FFFF000100004884FF1F12000000C5 +:10301000000200007284FF1F49000000002201002E +:10302000BB84FF1F2100000000210100A484FF1FBA +:103030000900000000220000DC84FF1F1C000000CB +:10304000002100008484FF1F09000000000300002D +:103050001E85FF1F00000000010309045A84FF1FA2 +:103060000000000002030904F884FF1F00000000B4 +:10307000030309042285FF1F000000000000000078 +:103080000000000000000000000000000000000040 +:1030900049220000412200005B220000572200006C +:1030A000532200004F22000000000000000000003A +:1030B0008523000075230000A12300009923000050 +:1030C0009D23000095230000A9230000BB230000DE +:1030D000A52300000B240000912300000000000045 +:1030E0000000000000000000652400000000000057 +:1030F0000000000000000000EB230000DB230000C4 +:1031000007240000FF23000003240000FB2300002D +:103110001524000027240000112400000B240000C7 +:10312000F723000000000000000000000000000085 +:1031300001250000F12400001D25000015250000D8 +:103140001925000011250000252500003725000065 +:10315000212500000B2400000D25000000000000C8 +:103160004485FF1F43000000000000000000000035 +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C0000000000000000000F8B500BFF8BC08BC1B +:1031D0009E467047990400006122000059230000B8 +:1031E00049240000A9240000C5240000592500003E +:1031F000000000002C8EFF1F1201000200000040A2 +:10320000C016860400010102030118035400650082 +:1032100065006E00730079006400750069006E003F +:103220006F0009024900020100C0320904000002D7 +:1032300003000000092111010001221C0007058381 +:1032400003400001070504034000010904010002D6 +:10325000030000000921110100012221000705815E +:10326000034000010705020320000206C9FF09040C +:10327000A15C7508150026FF00954009758102952F +:10328000200976910295040976B102C006ABFF0AC7 +:103290000002A1017508150026FF00954009018173 +:1032A00002954009029102C02603540065006500A2 +:1032B0006E00730079006400750069006E006F0095 +:1032C00020005200610077004800490044000403D8 +:1032D00009040C03000000000000000000000000D2 +:1032E0000000000000000000FFFFFFFF0A040000D4 +:1032F0004485FF1F00000000A83100008831000055 +:103300006831000000000000000000000000000024 +:103310000000000064310000000000000000000018 +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E0000000000000000000000000003486FF1F05 +:1033F0003486FF1F3C86FF1F3C86FF1F4486FF1F4D +:103400004486FF1F4C86FF1F4C86FF1F5486FF1FFC +:103410005486FF1F5C86FF1F5C86FF1F6486FF1FAC +:103420006486FF1F6C86FF1F6C86FF1F7486FF1F5C +:103430007486FF1F7C86FF1F7C86FF1F8486FF1F0C +:103440008486FF1F8C86FF1F8C86FF1F9486FF1FBC +:103450009486FF1F9C86FF1F9C86FF1FA486FF1F6C +:10346000A486FF1FAC86FF1FAC86FF1FB486FF1F1C +:10347000B486FF1FBC86FF1FBC86FF1FC486FF1FCC +:10348000C486FF1FCC86FF1FCC86FF1FD486FF1F7C +:10349000D486FF1FDC86FF1FDC86FF1FE486FF1F2C +:1034A000E486FF1FEC86FF1FEC86FF1FF486FF1FDC +:1034B000F486FF1FFC86FF1FFC86FF1F0487FF1F8B +:1034C0000487FF1F0C87FF1F0C87FF1F1487FF1F38 +:1034D0001487FF1F1C87FF1F1C87FF1F2487FF1FE8 +:1034E0002487FF1F2C87FF1F2C87FF1F3487FF1F98 +:1034F0003487FF1F3C87FF1F3C87FF1F4487FF1F48 +:103500004487FF1F4C87FF1F4C87FF1F5487FF1FF7 +:103510005487FF1F5C87FF1F5C87FF1F6487FF1FA7 +:103520006487FF1F6C87FF1F6C87FF1F7487FF1F57 +:103530007487FF1F7C87FF1F7C87FF1F8487FF1F07 +:103540008487FF1F8C87FF1F8C87FF1F9487FF1FB7 +:103550009487FF1F9C87FF1F9C87FF1FA487FF1F67 +:10356000A487FF1FAC87FF1FAC87FF1FB487FF1F17 +:10357000B487FF1FBC87FF1FBC87FF1FC487FF1FC7 +:10358000C487FF1FCC87FF1FCC87FF1FD487FF1F77 +:10359000D487FF1FDC87FF1FDC87FF1FE487FF1F27 +:1035A000E487FF1FEC87FF1FEC87FF1FF487FF1FD7 +:1035B000F487FF1FFC87FF1FFC87FF1F0488FF1F86 +:1035C0000488FF1F0C88FF1F0C88FF1F1488FF1F33 +:1035D0001488FF1F1C88FF1F1C88FF1F2488FF1FE3 +:1035E0002488FF1F2C88FF1F2C88FF1F3488FF1F93 +:1035F0003488FF1F3C88FF1F3C88FF1F4488FF1F43 +:103600004488FF1F4C88FF1F4C88FF1F5488FF1FF2 +:103610005488FF1F5C88FF1F5C88FF1F6488FF1FA2 +:103620006488FF1F6C88FF1F6C88FF1F7488FF1F52 +:103630007488FF1F7C88FF1F7C88FF1F8488FF1F02 +:103640008488FF1F8C88FF1F8C88FF1F9488FF1FB2 +:103650009488FF1F9C88FF1F9C88FF1FA488FF1F62 +:10366000A488FF1FAC88FF1FAC88FF1FB488FF1F12 +:10367000B488FF1FBC88FF1FBC88FF1FC488FF1FC2 +:10368000C488FF1FCC88FF1FCC88FF1FD488FF1F72 +:10369000D488FF1FDC88FF1FDC88FF1FE488FF1F22 +:1036A000E488FF1FEC88FF1FEC88FF1FF488FF1FD2 +:1036B000F488FF1FFC88FF1FFC88FF1F0489FF1F81 +:1036C0000489FF1F0C89FF1F0C89FF1F1489FF1F2E +:1036D0001489FF1F1C89FF1F1C89FF1F2489FF1FDE +:1036E0002489FF1F2C89FF1F2C89FF1F3489FF1F8E +:1036F0003489FF1F3C89FF1F3C89FF1F4489FF1F3E +:103700004489FF1F4C89FF1F4C89FF1F5489FF1FED +:103710005489FF1F5C89FF1F5C89FF1F6489FF1F9D +:103720006489FF1F6C89FF1F6C89FF1F7489FF1F4D +:103730007489FF1F7C89FF1F7C89FF1F8489FF1FFD +:103740008489FF1F8C89FF1F8C89FF1F9489FF1FAD +:103750009489FF1F9C89FF1F9C89FF1FA489FF1F5D +:10376000A489FF1FAC89FF1FAC89FF1FB489FF1F0D +:10377000B489FF1FBC89FF1FBC89FF1FC489FF1FBD +:10378000C489FF1FCC89FF1FCC89FF1FD489FF1F6D +:10379000D489FF1FDC89FF1FDC89FF1FE489FF1F1D +:1037A000E489FF1FEC89FF1FEC89FF1FF489FF1FCD +:1037B000F489FF1FFC89FF1FFC89FF1F048AFF1F7C +:1037C000048AFF1F0C8AFF1F0C8AFF1F148AFF1F29 +:1037D000148AFF1F1C8AFF1F1C8AFF1F248AFF1FD9 +:1037E000248AFF1F2C8AFF1F2C8AFF1FFFFFFFFF69 +:0437F00000000200D3 +:00000001FF diff --git a/teensy_loader_cli/blink_slow_TeensyLC.hex b/teensy_loader_cli/blink_slow_TeensyLC.hex new file mode 100644 index 0000000..36dfc1f --- /dev/null +++ b/teensy_loader_cli/blink_slow_TeensyLC.hex @@ -0,0 +1,643 @@ +:1000000000180020C1000000A506000071060000D5 +:100010007106000071060000710600007106000004 +:10002000710600007106000071060000A5060000C0 +:10003000A506000071060000A5060000610600008C +:10004000A5060000A5060000A5060000A506000004 +:10005000A5060000A5060000A5060000A5060000F4 +:10006000A5060000A5060000A5060000A5060000E4 +:10007000791900000D220000591D0000A50600009E +:10008000A5060000A5060000A5060000A5060000C4 +:10009000A5060000A5060000A5060000A5060000B4 +:1000A00099080000A5060000A5060000A5060000AE +:1000B000A5060000A5060000A5060000A506000094 +:1000C00038B500F0F3FA444A444B1A60444A454BB1 +:1000D0001A60454A454B1A60454B0822197811426F +:1000E00002D019780A431A70424B2A221A70002350 +:1000F000414A42499A188A4204D24149C9580433B4 +:100100001160F5E73F4B40491A1F181D00238A4232 +:1001100002D21360031CF6E73C493D4A5958101CB3 +:1001200099500433C02BF7D100239A083949920023 +:10013000521803211940C9001568FF248C40A543BB +:100140002C1C80258D40291C214301331160202B5C +:10015000EBD1314B8A221860304B1A70304B24227D +:100160001A70304BA0221A701A1C2F4B197888076E +:10017000FBD51978CD06FCD418780C21014008294C +:10018000FAD12A49032008702949402008701978BB +:100190008806FCD519784D06FCD52649C020800577 +:1001A00008602021117019780C220A400C2AFAD11B +:1001B000214A224B1A60224A224B1A60224B072204 +:1001C0001A6062B600F0E8F902F002F900F074FA81 +:1001D00001F078F8FEE7C046300004F034800440B7 +:1001E000823F0000388004400100000F3C80044042 +:1001F00002D0074000E0074060FDFF1F58FEFF1FD0 +:100200001C2700005CFEFF1F5401002000000000BE +:1002100000F9FF1F00E400E008ED00E00050064098 +:1002200001400640004006400640064004400640AB +:100230000540064044800440C00005050480044099 +:10024000BF5D000014E000E010E000E0FFFFFFFFF2 +:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE +:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E +:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E +:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E +:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E +:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E +:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E +:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E +:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E +:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E +:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E +:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD +:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED +:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD +:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD +:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD +:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD +:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D +:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D +:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D +:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D +:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D +:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D +:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D +:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D +:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D +:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D +:10040000FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFD +:1004100010B5064C2378002B07D1054B002B02D0DA +:10042000044800E000BF0123237010BD58FEFF1FE9 +:10043000000000001C27000008B5084B002B03D06B +:100440000748084900E000BF07480368002B03D0B5 +:10045000064B002B00D0984708BDC04600000000A6 +:100460001C2700005CFEFF1F58FEFF1F000000005D +:1004700008B50D20012100F033F808BD10B5FA24AD +:100480000121A4000D2000F00BF8201C00F06AF8F8 +:1004900000210D2000F004F8201C00F063F810BDCE +:1004A00010B51A2818D80C2358430C4A8358101832 +:1004B0001C7D027A224205D0002901D01A710BE07E +:1004C0001A7209E043681A68002902D003210A431E +:1004D00001E002218A431A6010BDC0461C240000BE +:1004E00010B51A2818D80C2358430C4A14186368FE +:1004F0008258247A012904D1117D0C431475A2225B +:1005000005E0107DA0431075002902D18022520021 +:1005100001E00422FF321A6010BDC0461C24000016 +:1005200010B572B60B4B0C491A680C4B1B68096866 +:1005300062B6480104D532219142894149425B1893 +:100540000748FA24801A1821A4005C4301F0D2FE67 +:10055000201810BD18E000E004ED00E074FEFF1F5D +:10056000BF5D000038B5041CFFF7DAFF051C002C46 +:100570000ED0FFF7D5FF074B401B984205D9013C31 +:10058000002C05D0FA239B00ED1800F043FDF0E7A6 +:1005900038BDC046E70300001C4B8022D20510B5D1 +:1005A0001A60802212061A60194B0020186019493F +:1005B000194B1A4A196028231360194A194C136001 +:1005C000194A1360194A1360194A1360194A1360D3 +:1005D00009222260184C2060184C2160184C2360BE +:1005E000184C2360184C2260184C20601848016099 +:1005F00018490B6018490B60184B1A6000F0C2FCD8 +:100600000420FFF7AFFF00F021FC10BD00E100E087 +:1006100004800340FFBF0000088003400C800340BB +:1006200014800340008003401C800340248003406A +:100630002C80034034800340049003400890034022 +:100640000C900340149003400090034004A003402A +:1006500008A003400CA0034014A0034000A00340E6 +:10066000024B1A6801321A607047C04674FEFF1FC1 +:1006700010B50B4C23685A0301D500F00DF923681F +:100680005A0501D501F078F923681A0501D501F062 +:10069000BDFD2368DA04ECD501F05EFBE9E7C04656 +:1006A0003480044008B5FFF7E3FFFFFF014B002251 +:1006B0001A607047008104407047FFFFEFF313801A +:1006C000002821D1EFF31082002A1FD1EFF3058318 +:1006D000002B0FD0101C0F2B0ED91A1C103A9208A9 +:1006E0000B49032092000340521883401068D84001 +:1006F000C0B201E080204000EFF31182002A05D053 +:10070000824203D2101C01E0012040427047C046E3 +:1007100000E400E0F0B50B4F02223B780A4E1A438A +:10072000D2000A4DB418606028788824002800D0D0 +:10073000C82409040C43B45001225040534028708F +:100740003B70F0BDF4FEFF1F00F8FF1F7CFFFF1F92 +:10075000431E10B5052B0FD872B6084A9900885869 +:10076000002807D044685B008C50054A01889C5AD9 +:10077000611A995262B600E0002010BDDCFEFF1F36 +:1007800046010020431E0020052B09D872B6054AF9 +:100790009B009B58002B02D001305B68FAE762B6E1 +:1007A0007047C04638FFFF1F38B572B60123164A9E +:1007B0009A18013A127811071CD5144A5C01A55801 +:1007C0009900002D05D1131908305860104BA35023 +:1007D0000AE001242143C9008C58002C0AD1531887 +:1007E000083058600B4B8B500B4B1A78013A1A703B +:1007F00062B608E00133072BD9D162B6064B00225E +:100800001A7000F097FB38BD7026000000F8FF1F3B +:1008100088004000C800400072FFFF1F421E10B554 +:10082000052A30D8022380001843174BC0001B183C +:1008300072B6164CA05C032809D801F047FD1402DB +:1008400016050833022011E0083304200EE010489A +:10085000920014580F4B002C01D1115001E0985810 +:10086000416099500EE0032000E00520A0540A1CCE +:1008700008325A608822180700D5C822098809045E +:100880000A431A6062B610BD00F8FF1F94FEFF1FF6 +:1008900038FFFF1F50FFFF1FF7B5B9480478061C4B +:1008A000E4B261071DD5B74B1B78002B16D0B64AB2 +:1008B0001378DBB2002B05D0013BDBB21370002BA9 +:1008C00000D100BEB14A1378DBB2002B06D0013B49 +:1008D000DBB21370002B01D100F0A0FEA84A042364 +:1008E00013700825221C2A4000D146E2A84BA94CCF +:1008F0001B78DBB21E099A08002E00D0CFE1D5008C +:1009000065192B686A689806000F01380C2800D911 +:10091000C2E101F0E5FC7F017F01C101C101C1011C +:10092000C101C101C1019E01C101C101C1010D008F +:100930001368994F526899493B6029607A609848DA +:10094000984F9949002501229BB23D602561A56120 +:1009500002708B4218D8D021C9008B4200D3DFE04F +:10096000812191408B4200D1B9E006D8802B00D183 +:10097000A0E0822B00D1A2E0E8E08C4A934200D1B3 +:10098000BDE0A022D20014E0902109018B4215D0D5 +:100990000AD8882109018B4200D0D7E0794B844CDA +:1009A0001B78161C2370D6E0824A934200D12EE1B8 +:1009B000814A0026934200D1CCE0C7E0764F714BCC +:1009C000BA781A706319186A000603D5586A08388D +:1009D00000F0B0FA0835C02DF4D100252E1C774F59 +:1009E000E859002805D04168019100F0A3FA019868 +:1009F000F7E77851724B734FE850E859002805D05B +:100A00004268019200F096FA0198F7E76E4B6F4A40 +:100A1000E8507300D0526E4B7851F05C02380328D6 +:100A200007D801F053FC02040204002200E0012276 +:100A30009A5501360435062ED1D1664F00233B70FE +:100A40000125654BEA18654B9200EB18013B1B78BA +:100A50001370180720D500F04FFA6B01002805D05D +:100A6000E218083050605E4AE25003E0E0503B7804 +:100A700001333B7000F040FA0122AB001343DB006E +:100A8000002805D04549E21808305060E15003E0E5 +:100A9000E0503B7801333B70AB0002221A43D20096 +:100AA0000026A6500322134393400135E650072D3C +:100AB000C7D14FE03E4C0226257065704BE0364FA3 +:100AC000BB88062B42D83A4C46489B00257065707F +:100AD0001B181B78022633423DD022703BE02E4D7E +:100AE0007F22AB881A40062A30DC6E88002E2DD17A +:100AF0003C4F9B00DB191A7802218A430EE0264DF9 +:100B00007F22AB881A40062A20DC6E88002E1DD179 +:100B1000344F9B00DB191A7802210A431A7019E03E +:100B20001D4D314B6A88A9885C68002C0ED018884E +:100B3000904209D15888884206D1120A032A01D16D +:100B4000267808E01E8906E00C33EDE7254B0F22DE +:100B50001A705CE0341C104FFB889E4200D91E1CAA +:100B6000371E402F00D94027201C391CFFF7D2FD2B +:100B7000E419F61B3AD1351C402F3BD047E0C04664 +:100B8000802007407BFFFF1FF5FEFF1FD0FFFF1FE8 +:100B90009020074000F8FF1F68FFFF1FC8004000BB +:100BA0007CFFFF1F78FEFF1F81060000020300008C +:100BB00073FFFF1F21090000210A0000DCFEFF1F58 +:100BC0007CFEFF1F38FFFF1F50FFFF1F4601002064 +:100BD00094FEFF1F72FFFF1F30C801107026000037 +:100BE00088004000C0200740782600004025B5421C +:100BF00000D9351C201C291CFFF78CFD6419761BBD +:100C000001D1402D03D1784D784B2C601E800122FC +:100C1000774B40E0774B78491F688F4216D159686F +:100C2000764B994212D11378A92B0FD15378452BCB +:100C30000CD19378C22B09D1D3786B2B06D1704B92 +:100C400000200522011C1A70FFF764FD6D4B2B601C +:100C500022E0654F3D68002D13D064480688341E9D +:100C6000402C00D94024211C281CFFF753FD361BC3 +:100C70005E49B6B20E80002E01D1402C00D12E1953 +:100C80003E605C4BA0221988D200914204D1002220 +:100C90005A709A785C4B1A700122554B61E0D20071 +:100CA000A4186068013E0838F6B22B4036D000F038 +:100CB00041F95649B0004258554B002A1BD055689F +:100CC0004550111C985D0831616003280BD801F074 +:100CD000FDFA02040608032104E0022102E00521D6 +:100CE00000E0042199558823270700D5C8231288DE +:100CF000120413433CE0985D032808D801F0E6FA9B +:100D000039390204002200E001229A5531E02C40DA +:100D1000624262410324A41A9C552AE06288028040 +:100D2000002A20D03B4D43804360B3005F593A49CD +:100D3000002F01D1585101E0CD586860C850374BA1 +:100D40007600F15A5218F25200F0D6F8002804D07A +:100D50000830606020070AD507E0314B20601A7820 +:100D600001321A7005E02C4201D0264B00E02D4BD9 +:100D700023602D4908230B708FE5012004421ED00B +:100D80001B4902230B70294B264C1A70284B294D06 +:100D90001C609C60284C1A61DC609A615D60274B86 +:100DA0000D241C70264CFF232370174C33702270C7 +:100DB000244A1370244B9F221A70087013E063B208 +:100DC000002B04DA1D4B0D221A708023337002238E +:100DD0001C4204D01A4A1178C9B211703370102322 +:100DE0001C4200D03370F7BD78FEFF1F70FFFF1F5D +:100DF0009420074068FFFF1F210900030100040041 +:100E0000F5FEFF1FC80040009820074038FFFF1F75 +:100E100094FEFF1FDCFEFF1F7CFEFF1F460100202B +:100E200072FFFF1F8800400080200740F4FEFF1F74 +:100E300000F8FF1F9CFEFF1FF8FEFF1FC0200740A9 +:100E4000882007408C2007408420074010B500F020 +:100E5000E3FF00221A4B0021D1509818083241605C +:100E6000C82AF7D1174A80201468C00220431060B6 +:100E7000180A154AC0B21070180C144AC0B210708B +:100E8000134A1B0E1370134AFF231370124A1348A0 +:100E90001370134A13700122027012480170124934 +:100EA0000A70124A116899430B1C70210B4313609E +:100EB0000F4B802252041A600E4B10221A7010BD84 +:100EC00000F8FF1F348004409C200740B0200740FA +:100ED000B420074080200740882007409420074026 +:100EE00010200740002107408420074018E400E05C +:100EF00000E100E00821074038B572B60B4C2568C8 +:100F0000281C01F047FA0B2802D962B600200CE039 +:100F100080231B06C3409D43256062B64823584387 +:100F2000034B181800230360436038BD60FDFF1FAA +:100F300000FAFF1F10B5041C0E484821201A01F0CA +:100F4000D9F90B2815D80C4B1B78002B07D00B4B6D +:100F50001B78002B03D0201CFFF726FC09E072B69B +:100F60008022074B1206C240101C1A6810431860FA +:100F700062B610BD00FAFF1F72FFFF1F7BFFFF1F4D +:100F800060FDFF1F1B4B1C4A19781C4B082901D11F +:100F9000002102E00A2903D138211160132206E062 +:100FA0000C2901D1342100E03C21116012221A6089 +:100FB000134B1A78134B002A01D0002200E00122C3 +:100FC0001A60114B1A78114B012A01D880220CE0CB +:100FD000042A01D8842208E0082A01D8852204E0E6 +:100FE000102A01D8862200E087221A60084B0122CD +:100FF0001A70704764FDFF1F08B003400CB0034037 +:101000007EFFFF1F20B0034065FDFF1F24B003409B +:101010007DFFFF1F10B5104C2378002B1BD101233F +:10102000237000F02BFA002801D000F032F800F015 +:1010300051FC002801D000F035F901F095F80028A6 +:1010400001D000F0BCF900F035FE002801D000F01E +:101050001AF90023237010BD7FFFFF1F08B500F0B1 +:101060000DFA08BD08B500F0B9F908BD08B500F0E3 +:10107000E3F908BD08B500F0ABFA08BD08B5081CD7 +:1010800000F09CFA08BD08B5081C111C00F020FAFD +:1010900008BD7047044B00221A711A73FA21034AE3 +:1010A000890099601A60704780FFFF1F6825000063 +:1010B00008B50368C9B21B68984708BD08B503683E +:1010C000C9B21B68984708BD08B50368C9B21B6858 +:1010D000984708BD08B50368C9B21B68984708BDA2 +:1010E00008B50368C9B21B68984708BD08B503680E +:1010F000C9B21B68984708BD08B50368C9B21B6828 +:10110000984708BD08B50368C9B21B68984708BD71 +:1011100008B5044B4808C01801F0ECF800F09EFA3E +:1011200008BDC046C0C62D0010B5064B4808C01803 +:10113000141C01F0DFF800F091FA201C00F0D4FA42 +:1011400010BDC046C0C62D0008B500F0F5FA08BDB8 +:1011500008B5081C00F01EFB08BD08B500F0BAFB7E +:1011600008BD08B500F0E2FB08BD08B500F0C2FB01 +:1011700008BD08B500F090FB08BD08B500F0F2FB13 +:1011800008BD08B500F094FB08BD08B5081C00F0C8 +:1011900023FB012008BD08B5081C00F01DFB012041 +:1011A00008BD10B5081C141C111C00F069FB201CA4 +:1011B00010BD38B5081C0D1C00F068FE041C211C75 +:1011C000281C00F05DFB201C38BDFFFF08B5044B58 +:1011D0004808C01801F08EF800F02EFC08BDC0468B +:1011E00060E3160010B5064B4808C018141C01F047 +:1011F00081F800F021FC201C00F066FC10BDC04608 +:1012000060E3160008B500F087FC08BD08B5081CAF +:1012100000F0B0FC08BD08B500F04CFD08BD08B5F5 +:1012200000F074FD08BD08B500F054FD08BD08B518 +:1012300000F022FD08BD08B500F084FD08BD08B52A +:1012400000F026FD08BD08B5081C00F0B5FC012023 +:1012500008BD08B5081C00F0AFFC012008BD10B5A2 +:10126000081C141C111C00F0FBFC201C10BD38B520 +:10127000081C0D1C00F00AFE041C211C281C00F098 +:10128000EFFC201C38BD7047044B00221A711A7302 +:10129000FA21034A890099601A60704790FFFF1F86 +:1012A000882500007047FFFF044B00221A711A7353 +:1012B000FA21034A890099601A607047A0FFFF1F56 +:1012C000D825000008B5FFF7D3F8FFF7D7F8FFF7E8 +:1012D000A1FEFAE708B50368C9B21B68984708BDC4 +:1012E00008B50368C9B21B68984708BD08B503680C +:1012F000C9B21B68984708BD08B50368C9B21B6826 +:10130000984708BD08B5044B4808C01800F0F2FF24 +:1013100000F0ECFD08BDC04660E3160010B5064BBA +:101320004808C018141C00F0E5FF00F0DFFD201C89 +:1013300000F024FE10BDC046C0C62D0008B500F068 +:1013400045FE08BD08B5081C00F06EFE08BD08B5D6 +:1013500000F00AFF08BD08B500F032FF08BD08B56F +:1013600000F012FF08BD08B500F0E0FE08BD08B5AA +:1013700000F042FF08BD08B500F0E4FE08BD08B566 +:10138000081C00F073FE012008BD08B5081C00F021 +:101390006DFE012008BD10B5081C141C111C00F0C6 +:1013A000B9FE201C10BD38B5081C0D1C00F06EFDE8 +:1013B000041C211C281C00F0ADFE201C38BD704709 +:1013C000044B00221A711A73FA21034A89009960AA +:1013D0001A607047B0FFFF1F2826000070B5144B3D +:1013E0001B78002B20D0134C2368261C002B03D124 +:1013F0000220FFF7ADF920602068002814D0438850 +:10140000C218157A002D0BD002880133934204D301 +:10141000FFF790FD0023336000E04380281C05E0C7 +:10142000FFF788FD2560DAE70125684270BDC046F8 +:101430007BFFFF1FCCFFFF1F38B50E4B1B78002B27 +:1014400013D00D4C2368002B03D10220FFF780F945 +:1014500020602068002808D04388C3181D7A002D1A +:1014600006D1FFF767FD2560E7E70120404200E075 +:10147000281C38BD7BFFFF1FCCFFFF1F38B5124D66 +:101480002B68002B04D0286800240288438811E0D0 +:101490000E4B1B78002B03D00220FFF759F9286070 +:1014A0002C68002CEFD10DE0C1180919097A002928 +:1014B00003D00134E1189142F6DB002C02D1FFF792 +:1014C00039FD2C60201C38BDCCFFFF1F7BFFFF1FA8 +:1014D000F7B5344D0123071C0C1C2B70002C5DD07C +:1014E000314E306800282BD1304A0192304B1B78A6 +:1014F000DBB2002B1AD00120FFF744F9052806D9EA +:10150000019B2C4A013B0193002B09D10BE00123E5 +:101510002B70FFF7F1FC244A10600028F0D00FE098 +:101520001378002B06D001231370002301202B70A9 +:10153000404235E02B70FFF76DFD01232B70D5E79E +:101540001C4B002231681A704B884020C01A00944E +:10155000844200D90090181C0830081801900098A7 +:101560001B184B80241A0023009A934204D0FA5C83 +:101570000198C2540133F7E74A88FF180E4B3F2AFF +:1015800002D805221A70A9E7402200200A801870AC +:101590000120FFF743F9002232609FE72C70201CE6 +:1015A000FEBDC046C0FFFF1FC4FFFF1FB51E0000E9 +:1015B0007BFFFF1FC8FFFF1FD0FFFF1F07B56B4654 +:1015C000D8710733181C0121FFF782FF0EBDFFFF02 +:1015D00038B50F4B1B78002B19D00E4C2168002911 +:1015E00015D04A88002A12D00B480023037098189F +:1015F0003F2805DC8818C018002505720133F6E77E +:1016000040230B800120FFF709F90023236038BD38 +:101610007BFFFF1FC4FFFF1FD0FFFF1F38B50D4B1F +:101620001B78DBB2002B13D10B480168041C4A88DD +:1016300098183F2805DC8818C0180025057201336A +:10164000F6E740230B800120FFF7E8F80023236032 +:1016500038BDC046C0FFFF1FC4FFFF1F164B8022CE +:101660001968D2000A431A60144A00231370144AFE +:1016700014491370144A1370144A1370144A1370E7 +:10168000144A1160144AD12189001160134AC1041F +:10169000C90EC0B21170507093702C23D370104BD0 +:1016A000FF22196891430A1C40210A431A600D4B1E +:1016B000802252011A607047348004405400002098 +:1016C000D2FFFF1F130300005C0000205500002024 +:1016D000D1FFFF1F40A0044044A0044000A00640EA +:1016E0000CE400E000E100E010B5124B1322997801 +:1016F0009143032202400A43410701D510210A43C6 +:101700009A700F220B490240042A03D18A7940249F +:1017100022438A715A7910218A43084200D00A4331 +:101720005A719A7910218A43840600D50A439A7126 +:1017300010BDC04600A0064008B50E4B1B685A05F8 +:1017400017D50D4B1B78DBB2002B02D0FFF762FCE4 +:10175000F7E70A4A802149011160094A0949D37013 +:101760000422FF320A6008490A60084A1370084AD6 +:10177000137008BD34800440D1FFFF1F80E100E0FA +:1017800000A0064040A0044044A0044054000020B3 +:10179000D2FFFF1F38B5041C0B4B1D78EDB2002D96 +:1017A000FAD1201C0121FEF79BFE291C201CFEF70C +:1017B00077FE0C225443054B054AE1581C19116071 +:1017C000044B227A1A7038BDD1FFFF1F1C24000081 +:1017D0005800002053000020F8B5214B071C1B685F +:1017E0005A053BD51F4B1B68002B02D01E4A1278AE +:1017F0001A711E4E002334783F220134A2425B410D +:101800005B421C401A4D2B78A3421CD1FEF756FFB9 +:10181000402813DC174A13795BB2002BF2DA2B78DD +:10182000002101333F209842494149420B4012496F +:10183000C95CDBB2C9B2D1712B70E3E7FF28E1DDEF +:10184000FFF7E8FBDEE70C4BFFB21F550B4B012205 +:101850001A70084BE4B2AC223470DA70F8BDC0469E +:101860003480044058000020530000205C00002019 +:101870005500002000A00640D3FFFF1FD1FFFF1F2F +:1018800038B5041C4518AC4204D02078FFF7A4FFFB +:101890000134F8E738BDFFFF08B5044B1B78002B77 +:1018A00002D0FFF7B7FBF8E708BDC046D1FFFF1F26 +:1018B000064B074A1B781078DBB2C0B2834201D3D3 +:1018C0003F3000E00138C01A7047C0465C0000207D +:1018D00055000020054B1878054BC0B21B78DBB2D1 +:1018E000984200D24030C01A7047C04654000020D1 +:1018F000D2FFFF1F0A4B0B4A19781378DBB29942CB +:101900000BD001333F2000219842494149420B400E +:101910000549C85CDBB2137001E00120404270470A +:1019200054000020D2FFFF1F130000200A4B1A783A +:101930000A4B1B78DBB29A420AD0013300223F21C6 +:101940009942524152421340054AD05CC0B201E074 +:10195000012040427047C04654000020D2FFFF1FC4 +:1019600013000020024B1A78024BD2B21A70704753 +:10197000D2FFFF1F5400002030B5254A1379990685 +:1019800012D52449D4790B78002001333F259D429C +:101990004041404203402048E4B20078834203D0F3 +:1019A0001E48C454DBB20B70D178194CC9B24BB28B +:1019B000002B1ADA23795BB2002B16DA184B194880 +:1019C0001D780378DBB29D4202D16C23E3700CE0FA +:1019D000013300243F259D42644164422340124C60 +:1019E000E45CDBB2E4B2D4710370402319420ED040 +:1019F000117919420BD00D4B002119700C4B1B684B +:101A00008B4202D00B49097819722C23D37030BD58 +:101A100000A0064054000020D2FFFF1F130000204A +:101A20005C00002055000020D3FFFF1FD1FFFF1FE7 +:101A30005800002053000020164B802219685201E4 +:101A40000A431A60144A00231370144A144913708D +:101A5000144A1370144A1370144A1370144A116014 +:101A6000144AD12189001160134AC104C90EC0B2C1 +:101A70001170507093702C23D370104B104A19685A +:101A80000A408021C9030A431A600E4B8022D2010A +:101A90001A60704734800440C80000205E000020B7 +:101AA00013030000D0000020C90000205D000020CA +:101AB00008C004400CC0044000C006400CE400E034 +:101AC000FFFF00FF00E100E010B5124B13229978F0 +:101AD0009143032202400A43410701D510210A43E2 +:101AE0009A700F220B490240042A03D18A794024BC +:101AF00022438A715A7910218A43084200D00A434E +:101B00005A719A7910218A43840600D50A439A7142 +:101B100010BDC04600C0064008B50E4B1B68DA0475 +:101B200017D50D4B1B78DBB2002B02D0FFF772FAF2 +:101B3000F7E70A4A8021C9011160094A0949D370AF +:101B40000422FF320A6008490A60084A1370084AF2 +:101B5000137008BD348004405D00002080E100E087 +:101B600000C0064008C004400CC00440C80000206B +:101B70005E00002038B5041C0B4B1D78EDB2002D23 +:101B8000FAD1201C0121FEF7ABFC291C201CFEF71A +:101B900087FC0C225443054B054AE1581C1911607F +:101BA000044B227A1A7038BD5D0000201C2400000E +:101BB000CC000020C7000020F8B5214B071C1B6893 +:101BC000DA043BD51F4B1B68002B02D01E4A12784B +:101BD0001A711E4E0023347827220134A2425B4141 +:101BE0005B421C401A4D2B78A3421CD1FEF766FDC8 +:101BF000402813DC174A13795BB2002BF2DA2B78FA +:101C00000021013327209842494149420B401249A3 +:101C1000C95CDBB2C9B2D1712B70E3E7FF28E1DD0B +:101C2000FFF7F8F9DEE70C4BFFB21F550B4B012213 +:101C30001A70084BE4B2AC223470DA70F8BDC046BA +:101C400034800440CC000020C7000020D0000020D9 +:101C5000C900002000C006405F0000205D00002099 +:101C600038B5041C4518AC4204D02078FFF7A4FF17 +:101C70000134F8E738BDFFFF08B5044B1B78002B93 +:101C800002D0FFF7C7F9F8E708BDC0465D000020A5 +:101C9000064B074A1B781078DBB2C0B2834201D3EF +:101CA000273000E00138C01A7047C046D00000203D +:101CB000C9000020054B1878054BC0B21B78DBB279 +:101CC000984200D24030C01A7047C046C800002079 +:101CD0005E0000200A4B0B4A19781378DBB2994258 +:101CE0000BD001333F2000219842494149420B402B +:101CF0000549C85CDBB2137001E001204042704727 +:101D0000C80000205E000020870000200A4B1A78DF +:101D10000A4B1B78DBB29A420AD0013300223F21E2 +:101D20009942524152421340054AD05CC0B201E090 +:101D3000012040427047C046C80000205E000020DD +:101D400087000020024B1A78024BD2B21A707047FB +:101D50005E000020C800002030B5254A137999069E +:101D600012D52449D4790B78002001333F259D42B8 +:101D70004041404203402048E4B20078834203D00F +:101D80001E48C454DBB20B70D178194CC9B24BB2A7 +:101D9000002B1ADA23795BB2002B16DA184B19489C +:101DA0001D780378DBB29D4202D16C23E3700CE016 +:101DB0000133002427259D42644164422340124C94 +:101DC000E45CDBB2E4B2D4710370402319420ED05C +:101DD000117919420BD00D4B002119700C4B1B6867 +:101DE0008B4202D00B49097819722C23D37030BD75 +:101DF00000C00640C80000205E00002087000020D0 +:101E0000D0000020C90000205F0000205D000020FD +:101E1000CC000020C70000201FB572B6154B702201 +:101E20001A70154A41211170144A0F211170802235 +:101E30001A701A7852B2002AFBDA114B186862B68F +:101E4000104B984201D80A23584301AC211C0A22A6 +:101E500000F025F80023E15C0B4A002905D058006A +:101E60001018013341800A2BF5D101335B00137048 +:101E70001FBDC046000002400700024006000240AD +:101E8000080002407F96980040FEFF1F021C031CC2 +:101E9000981A0133591E09780029F9D17047F8B50D +:101EA000061C0D1C171C0024301C391C00F066FA9F +:101EB000092901D8303100E03731C9B22955301C29 +:101EC000391C00F017FA061E01D00134ECE72B197B +:101ED00058702B1C5A1BA24206DA1A78295D197019 +:101EE0002A550133013CF5E7281CF8BD164B80222A +:101EF000196812010A431A60144A00231370144A25 +:101F000014491370144A1370144A1370144A13704E +:101F1000144A1160144AD12189001160134AC10486 +:101F2000C90EC0B21170507093702C23D370104B37 +:101F3000104A19680A408021C9010A431A600E4BF1 +:101F4000802292011A607047348004403C010020D6 +:101F5000D200002013030000440100203D010020B6 +:101F6000D10000200CB0044010B0044000B0064086 +:101F70000CE400E0FF00FFFF00E100E010B5124BB1 +:101F8000132299789143032202400A43410701D565 +:101F900010210A439A700F220B490240042A03D1F0 +:101FA0008A79402422438A715A7910218A4308424F +:101FB00000D00A435A719A7910218A43840600D5C9 +:101FC0000A439A7110BDC04600B0064008B50E4BDA +:101FD0001B681A0517D50D4B1B78DBB2002B02D0FE +:101FE000FFF718F8F7E70A4A802189011160094ACA +:101FF0000949D3700422FF320A6008490A60084A7E +:102000001370084A137008BD34800440D1000020CA +:1020100080E100E000B006400CB0044010B0044085 +:102020003C010020D200002038B5041C0B4B1D7869 +:10203000EDB2002DFAD1201C0121FEF751FA291C26 +:10204000201CFEF72DFA0C225443054B054AE1589B +:102050001C191160044B227A1A7038BDD10000207F +:102060001C240000400100203B010020F8B5214B5A +:10207000071C1B681A053BD51F4B1B68002B02D0A1 +:102080001E4A12781A711E4E00233478272201341A +:10209000A2425B415B421C401A4D2B78A3421CD1EB +:1020A000FEF70CFB402813DC174A13795BB2002BB8 +:1020B000F2DA2B7800210133272098424941494226 +:1020C0000B401249C95CDBB2C9B2D1712B70E3E796 +:1020D000FF28E1DDFEF79EFFDEE70C4BFFB21F5548 +:1020E0000B4B01221A70084BE4B2AC223470DA7048 +:1020F000F8BDC04634800440400100203B01002070 +:10210000440100203D01002000B00640D300002023 +:10211000D100002038B5041C4518AC4204D020780A +:10212000FFF7A4FF0134F8E738BDFFFF08B5044B03 +:102130001B78002B02D0FEF76DFFF8E708BDC04604 +:10214000D1000020064B074A1B781078DBB2C0B2E2 +:10215000834201D3273000E00138C01A7047C046DF +:10216000440100203D010020054B1878054BC0B20A +:102170001B78DBB2984200D24030C01A7047C0468C +:102180003C010020D20000200A4B0B4A197813783A +:10219000DBB299420BD001333F20002198424941E4 +:1021A00049420B400549C85CDBB2137001E00120D5 +:1021B000404270473C010020D2000020FB0000207C +:1021C0000A4B1A780A4B1B78DBB29A420AD00133C9 +:1021D00000223F219942524152421340054AD05CAD +:1021E000C0B201E0012040427047C0463C010020DF +:1021F000D2000020FB000020024B1A78024BD2B222 +:102200001A707047D20000203C01002030B5254AEA +:102210001379990612D52449D4790B78002001331B +:102220003F259D424041404203402048E4B20078AF +:10223000834203D01E48C454DBB20B70D178194CD2 +:10224000C9B24BB2002B1ADA23795BB2002B16DA33 +:10225000184B19481D780378DBB29D4202D16C23DC +:10226000E3700CE00133002427259D426441644261 +:102270002340124CE45CDBB2E4B2D471037040231F +:1022800019420ED0117919420BD00D4B0021197053 +:102290000C4B1B688B4202D00B49097819722C2316 +:1022A000D37030BD00B006403C010020D2000020B9 +:1022B000FB000020440100203D010020D30000204D +:1022C000D1000020400100203B01002002B47146F3 +:1022D00049084900095C49008E4402BC7047C04669 +:1022E00003B47146490840004900095A49008E4428 +:1022F00003BC7047002934D00123002210B4884267 +:102300002CD301242407A14204D2814202D2090124 +:102310001B01F8E7E400A14204D2814202D2490045 +:102320005B00F8E7884201D3401A1A434C08A042E8 +:1023300002D3001B5C0822438C08A04202D3001B7E +:102340009C082243CC08A04202D3001BDC08224395 +:10235000002803D01B0901D00909E3E7101C10BCB9 +:102360007047002801D00020C04307B4024802A1F2 +:102370004018029003BDC046190000000029F0D0AB +:1023800003B5FFF7B9FF0EBC4243891A1847C04690 +:102390007047C0461C2101231B04984201D3000C46 +:1023A00010391B0A984201D3000A08391B099842C8 +:1023B00001D30009043902A2105C40187047C046DE +:1023C00004030202010101010000000000000000FE +:1023D00070B50E4B0E4D0024ED1AAD101E1CAC4214 +:1023E00004D0A300F35898470134F8E700F086F9C9 +:1023F000084B094D0024ED1AAD101E1CAC4204D050 +:10240000A300F35898470134F8E770BD082700008F +:1024100008270000082700001C270000420000F8E1 +:1024200040A0044001000000420000F844A0044025 +:1024300002000000C00000F800C0044001000000DD +:10244000000000F80490044002000000000000F8C2 +:102450000890044004000000C00000F81CC00440C4 +:1024600080000000C00000F810C004401000000010 +:10247000C00000F808C0044004000000C00000F8DC +:102480000CC0044008000000800000F80CB00440BC +:1024900008000000800000F810B0044010000000A8 +:1024A000800000F818B0044040000000800000F8F0 +:1024B0001CB0044080000000800000F814B004400C +:1024C00020000000C00000F804C00440020000002A +:1024D000800000F800B0044001000000400000F857 +:1024E00000A0044001000000400000F804A00440E7 +:1024F00002000000400000F80CA0044008000000AA +:10250000400000F808A0044004000000C00000F8EB +:1025100014C0044020000000C00000F818C00440AF +:1025200040000000800000F804B0044002000000F9 +:10253000800000F808B0044004000000020100F828 +:1025400050D0044010000000020100F854D00440B4 +:1025500020000000030100F878D004404000000093 +:1025600000000000000000007D1000008710000047 +:102570005D100000651000006D1000007510000077 +:102580000000000000000000471200005F12000081 +:1025900017120000271200001F1200002F12000067 +:1025A000CD110000E5110000051200000D12000021 +:1025B000371200003F120000E1100000ED10000093 +:1025C000F9100000051100006F1200005312000006 +:1025D00000000000000000008B110000A3110000AB +:1025E0005B1100006B11000063110000731100000B +:1025F00011110000291100004911000051110000C3 +:102600007B11000083110000B1100000BD1000001C +:10261000C9100000D5100000B31100009711000090 +:1026200000000000000000007F130000971300006E +:102630004F1300005F1300005713000067130000E2 +:10264000051300001D1300003D130000451300009A +:102650006F13000077130000D5120000E112000094 +:10266000ED120000F9120000A71300008B13000008 +:10267000151915190000FFFF0001000066FDFF1F7E +:10268000120000000002000090FDFF1F4900000042 +:1026900000220100D9FDFF1F2100000000210100E0 +:1026A000C2FDFF1F0900000000220000FAFDFF1F0D +:1026B0001C00000000210000A2FDFF1F0900000017 +:1026C000000300003CFEFF1F00000000010309049E +:1026D00078FDFF1F000000000203090416FEFF1F23 +:1026E000000000000303090440FEFF1F000000007B +:1026F000000000000000000000000000F8B5C04627 +:10270000F8BC08BC9E4670473904000095100000D4 +:0C27100089120000A9120000C113000093 +:10271C00FFFFFFFF0A041201000200000040C01678 +:10272C0086040001010203011803540065006500D2 +:10273C006E00730079006400750069006E006F0014 +:10274C0009024900020100C0320904000002030022 +:10275C000000092111010001221C00070583034020 +:10276C0000010705040340000109040100020300F5 +:10277C0000000921110100012221000705810340FD +:10278C0000010705020320000206C9FF0904A15C31 +:10279C007508150026FF00954009758102952009E2 +:1027AC0076910295040976B102C006ABFF0A0002CD +:1027BC00A1017508150026FF0095400901810295BD +:1027CC004009029102C026035400650065006E00AA +:1027DC00730079006400750069006E006F002000C2 +:1027EC0052006100770048004900440004030904CA +:1027FC000C030000000000000000000000000000BE +:08280C000000000000000000C4 +:00000001FF diff --git a/teensy_loader_cli/blinky-at90usb1286.hex b/teensy_loader_cli/blinky-at90usb1286.hex new file mode 100644 index 0000000..b9bbe56 --- /dev/null +++ b/teensy_loader_cli/blinky-at90usb1286.hex @@ -0,0 +1,120 @@ +:10000000E8C0000003C1000001C10000FFC0000003 +:10001000FDC00000FBC00000F9C00000F7C00000F8 +:10002000F5C00000F3C00000EEC100002CC20000CB +:10003000EDC00000EBC00000E9C00000E7C0000018 +:10004000E5C00000E3C00000E1C00000DFC0000028 +:10005000DDC00000DBC00000D9C00000D7C0000038 +:10006000D5C00000D3C00000D1C00000CFC0000048 +:10007000CDC00000CBC00000C9C00000C7C0000058 +:10008000C5C00000C3C00000C1C00000BFC0000068 +:10009000BDC00000BBC000004284A4830124C3048F +:1000A0000274A344C282E364D4430381231463949F +:1000B000B4C40A000A002064697400206461680006 +:1000C0004368617220000A004F7070732C20756EB7 +:1000D000737570706F7274656420636861726163B8 +:1000E0007465723A200053706163650A00444F459D +:1000F0005320414E59424F4459205354494C4C20AF +:100100004B4E4F57204D4F52534520434F44453F90 +:1001100000534F5300000100004C01120002000088 +:100120005E01220022000080011500210000700104 +:100130000900030000950104010309049901140258 +:10014000030904AF0120000001C1260012010002D2 +:1001500000000020C016790400010102000109021C +:100160002200010100C03209040000010300000068 +:100170000921110100012215000705830320000158 +:100180000631FF0974A1537508150026FF0095205C +:1001900009758102C004030904140359006F007536 +:1001A00000720020004E0061006D0065000000201C +:1001B0000359006F00750072002000550053004283 +:1001C00000200044006500760069006300650000BF +:1001D000000011241FBECFEFD0E2DEBFCDBF11E083 +:1001E000A0E0B1E0E0E7F7E000E00BBF02C007905D +:1001F0000D92A030B107D9F711E0A0E0B1E001C045 +:100200001D92A330B107E1F779D0B0C2F9CE0F93B8 +:100210001F93CF93DF93182F803269F486EE90E01E +:1002200091D280EE95E120E931E0F9013197F1F7C3 +:100230000197D9F74EC081548A3148F088EC90E09C +:1002400081D2812F9AD086EC90E07CD242C080ECA3 +:1002500090E078D2812F91D08AE38FD0E12FF0E027 +:10026000E95AFF4FE4910E2F07701E2FC0E9D1E02D +:1002700022C05E9A17FF0BC08BEB90E063D280E642 +:1002800099E0FE013197F1F70197D9F70AC086EBA3 +:1002900090E058D280E293E0FE013197F1F70197A8 +:1002A000D9F75E9880E293E0FE013197F1F701976C +:1002B000D9F7110F01500023E1F684EB90E042D210 +:1002C00080E496E020E931E0F9013197F1F70197F8 +:1002D000D9F7DF91CF911F910F910895CF93DF93BD +:1002E000EC01FE0121968491882311F090DFF9CF73 +:1002F00082EB90E027D2DF91CF9108951F93CF93A7 +:10030000DF9380E88093610010926100569A5E98B6 +:100310001DD010E0C0E9D1E00BC081E191E0DEDF4B +:1003200088E99AE3FE013197F1F70197D9F71F5F4A +:10033000163098F38DEE90E0D1DF80E49CE9FE0169 +:100340003197F1F70197D9F710E0E7CF81E8809373 +:10035000D70080EA8093D80086E189BD09B400FE09 +:10036000FDCF80E98093D8001092E0001092000148 +:100370008CE08093E20078940895482F80910001EA +:10038000882309F43EC02FB7F89483E08093E900F6 +:1003900080910201882341F08091E80085FD02C030 +:1003A0002FBF12C0109202019091E4009C5F33E0D5 +:1003B0008091E80085FD13C02FBF8091E40089176C +:1003C00029F481E0809302018FEF0895809100016C +:1003D0008823B9F02FB7F8943093E900E9CF409320 +:1003E000F1008091E80085FD06C08AE38093E80073 +:1003F0001092010103C082E0809301012FBF80E0D1 +:1004000008958FEF08951F920F920FB60F92112447 +:100410008F939F938091E1001092E100982F83FFCA +:100420000FC01092E90081E08093EB001092EC0085 +:1004300082E28093ED0088E08093F000109200014A +:1004400092FF1AC0809100018823B1F080910101D0 +:10045000882391F0815080930101882369F483E01F +:100460008093E90002C01092F1008091E80085FDC0 +:10047000FACF8AE38093E8009F918F910F900FBE8F +:100480000F901F9018951F920F920FB60F920BB6F8 +:100490000F9211242F933F934F935F936F937F930A +:1004A0008F939F93AF93BF93CF93DF93EF93FF937C +:1004B0001092E9008091E80083FF2CC14091F10087 +:1004C0003091F1008091F100A82FB0E02091F1006F +:1004D000922F80E0A82BB92B8091F100682F70E05B +:1004E0002091F100922F80E0682B792B8091F10010 +:1004F000C82FD0E02091F100922F80E0C82BD92B9B +:1005000082EF8093E800363009F056C02CE131E0EC +:10051000A90145505040F9013797859194918A1768 +:100520009B07E1F4FA018591949186179707B1F43E +:100530009A012E5F3F4FF901659174912E5F3F4FF5 +:10054000F9012491CE01CF3FD10519F010F08FEFC2 +:1005500090E0422F821758F4482F09C0295F3F4F7F +:10056000495F5F4FF1E02D343F07A9F6D3C05EEF3E +:100570008091E800282F30E0C90185709070892BA8 +:10058000B9F322FDCAC0342F413208F030E2232FE4 +:10059000CB0106C0FC010196E491E093F1002150EB +:1005A0002223C1F7630F711D431B5093E8004423BE +:1005B000F9F63032E9F2B1C0353061F48EEF809354 +:1005C000E8008091E80080FFFCCF8A2F806880934C +:1005D000E300A3C0393031F5442309F09BC0A09358 +:1005E00000018EEF8093E80086E491E021E0209303 +:1005F000E900FC010196E491E093EB00EE2369F041 +:10060000AC014F5F5F4FFC0184918093EC00CA0105 +:100610000196FA0134913093ED002F5F253039F7C0 +:100620008EE14DC0383061F4403809F073C08091DC +:10063000E80080FFFCCF809100018093F1001BC097 +:100640003323E9F48091E80080FFFCCF423811F0B9 +:1006500080E00DC06093E9008091EB0090E025E020 +:10066000969587952A95E1F781701092E90080931D +:10067000F1001092F1008EEF8093E8004EC031300F +:1006800019F0333009F046C04230F1F4AB2BE1F4FD +:10069000262F2F77822F81508430B0F48EEF8093F5 +:1006A000E8002093E9003330A9F189E18093EB0061 +:1006B00081E090E002C0880F991F2A95E2F78093AD +:1006C000EA001092EA0029C0313021F5413A11F5D3 +:1006D000672B01F54C2F5EEF8091E800282F30E06A +:1006E000C90185709070892BB9F322FD16C0942F33 +:1006F000413208F090E2892F03C01092F10081503E +:100700008823D9F7491B5093E800442329F79032F6 +:1007100019F303C081E28093EB00FF91EF91DF9129 +:10072000CF91BF91AF919F918F917F916F915F9189 +:100730004F913F912F910F900BBE0F900FBE0F90D6 +:100740001F9018951F93CF93DF93EC01FE01219624 +:100750001491112339F01A3011F48DE00EDE812F3F +:100760000CDEF4CFDF91CF911F910895F894FFCF65 +:00000001FF diff --git a/teensy_loader_cli/blinky-at90usb162.hex b/teensy_loader_cli/blinky-at90usb162.hex new file mode 100644 index 0000000..400df52 --- /dev/null +++ b/teensy_loader_cli/blinky-at90usb162.hex @@ -0,0 +1,117 @@ +:10000000D6C00000EFC00000EDC00000EBC0000053 +:10001000E9C00000E7C00000E5C00000E3C0000048 +:10002000E1C00000DFC00000DDC00000D5C100005D +:1000300013C20000D7C00000D5C00000D3C000002C +:10004000D1C00000CFC00000CDC00000CBC0000078 +:10005000C9C00000C7C00000C5C00000C3C0000088 +:10006000C1C00000BFC00000BDC00000BBC0000098 +:10007000B9C000004284A4830124C3040274A344D1 +:10008000C282E364D443038123146394B4C40A009A +:100090000A0020646974002064616800436861722A +:1000A00020000A004F7070732C20756E737570708D +:1000B0006F72746564206368617261637465723A1B +:1000C000200053706163650A00444F455320414E40 +:1000D00059424F4459205354494C4C204B4E4F5792 +:1000E000204D4F52534520434F44453F00534F53FB +:1000F0000000010000280112000200003A01220065 +:100100002200005C0115002100004C0109000300E1 +:100110000071010401030904750114020309048B31 +:100120000120000001C12600120100020000002091 +:10013000C016790400010102000109022200010138 +:1001400000C0320904000001030000000921110170 +:100150000001221500070583032000010631FF0975 +:1001600074A1537508150026FF00952009758102BA +:10017000C004030904140359006F007500720020C5 +:10018000004E0061006D0065000000200359006F03 +:10019000007500720020005500530042002000440A +:1001A000006500760069006300650000000011240E +:1001B0001FBECFEFD2E0DEBFCDBF11E0A0E0B1E0C7 +:1001C000EAE3F7E002C005900D92A030B107D9F73D +:1001D00011E0A0E0B1E001C01D92A330B107E1F74A +:1001E00079D0A9C20DCF0F931F93CF93DF93182F10 +:1001F000803269F482EC90E08AD280EE95E120E9C9 +:1002000031E0F9013197F1F70197D9F74EC08154E8 +:100210008A3148F084EA90E07AD2812F97D082EA3E +:1002200090E075D242C08CE990E071D2812F8ED0DF +:100230008AE38CD0E12FF0E0ED5CFF4FE4910E2FCC +:1002400007701E2FC0E9D1E022C05E9817FF0BC0D7 +:1002500087E990E05CD280E699E0FE013197F1F702 +:100260000197D9F70AC082E990E051D280E293E089 +:10027000FE013197F1F70197D9F75E9A80E293E09A +:10028000FE013197F1F70197D9F7110F01500023C3 +:10029000E1F680E990E03BD280E496E020E931E0AD +:1002A000F9013197F1F70197D9F7DF91CF911F91BC +:1002B0000F910895CF93DF93EC01FE012196849175 +:1002C000882311F090DFF9CF8EE890E020D2DF9103 +:1002D000CF9108951F93CF93DF9380E880936100BF +:1002E00010926100569A5E9A1DD010E0C0E9D1E0EC +:1002F0000BC08DEE90E0DEDF88E99AE3FE013197D6 +:10030000F1F70197D9F71F5F163098F389EC90E069 +:10031000D1DF80E49CE9FE013197F1F70197D9F72D +:1003200010E0E7CF80EA8093D80086E089BD09B469 +:1003300000FEFDCF80E88093D8001092E00010927C +:1003400000018CE08093E20078940895482F80911A +:100350000001882309F43EC02FB7F89483E080930E +:10036000E90080910201882341F08091E80085FD39 +:1003700002C02FBF12C0109202019091E4009C5F56 +:1003800033E08091E80085FD13C02FBF8091E40029 +:10039000891729F481E0809302018FEF08958091FD +:1003A00000018823B9F02FB7F8943093E900E9CF22 +:1003B0004093F1008091E80085FD06C08AE38093B8 +:1003C000E8001092010103C082E0809301012FBF79 +:1003D00080E008958FEF08951F920F920FB60F924D +:1003E00011248F939F938091E1001092E100982F48 +:1003F00083FF0FC01092E90081E08093EB00109220 +:10040000EC0082E28093ED0088E08093F00010928F +:10041000000192FF1AC0809100018823B1F0809101 +:100420000101882391F0815080930101882369F4B0 +:1004300083E08093E90002C01092F1008091E8000F +:1004400085FDFACF8AE38093E8009F918F910F900A +:100450000FBE0F901F9018951F920F920FB60F921C +:1004600011242F933F934F935F936F937F938F93B9 +:100470009F93AF93BF93CF93DF93EF93FF9310922C +:10048000E9008091E80083FF2CC14091F100309198 +:10049000F1008091F100A82FB0E02091F100922F9F +:1004A00080E0A82BB92B8091F100682F70E020919B +:1004B000F100922F80E0682B792B8091F100C82FFA +:1004C000D0E02091F100922F80E0C82BD92B82EF51 +:1004D0008093E800363009F056C028EF30E0A901DB +:1004E00045505040F9013797859194918A179B07A1 +:1004F000E1F4FA018591949186179707B1F49A0176 +:100500002E5F3F4FF901659174912E5F3F4FF901C6 +:100510002491CE01CF3FD10519F010F08FEF90E07C +:10052000422F821758F4482F09C0295F3F4F495F77 +:100530005F4FF1E029323F07A9F6D3C05EEF80910B +:10054000E800282F30E0C90185709070892BB9F33D +:1005500022FDCAC0342F413208F030E2232FCB01F4 +:1005600006C0FC010196E491E093F10021502223A2 +:10057000C1F7630F711D431B5093E8004423F9F644 +:100580003032E9F2B1C0353061F48EEF8093E8008B +:100590008091E80080FFFCCF8A2F80688093E30081 +:1005A000A3C0393031F5442309F09BC0A09300016A +:1005B0008EEF8093E80082E291E021E02093E90051 +:1005C000FC010196E491E093EB00EE2369F0AC01AD +:1005D0004F5F5F4FFC0184918093EC00CA0101964C +:1005E000FA0134913093ED002F5F253039F78EE119 +:1005F0004DC0383061F4403809F073C08091E80094 +:1006000080FFFCCF809100018093F1001BC0332359 +:10061000E9F48091E80080FFFCCF423811F080E0DF +:100620000DC06093E9008091EB0090E025E0969585 +:1006300087952A95E1F781701092E9008093F10087 +:100640001092F1008EEF8093E8004EC0313019F027 +:10065000333009F046C04230F1F4AB2BE1F4262FE1 +:100660002F77822F81508430B0F48EEF8093E80092 +:100670002093E9003330A9F189E18093EB0081E018 +:1006800090E002C0880F991F2A95E2F78093EA0054 +:100690001092EA0029C0313021F5413A11F5672B5B +:1006A00001F54C2F5EEF8091E800282F30E0C90162 +:1006B00085709070892BB9F322FD16C0942F4132BA +:1006C00008F090E2892F03C01092F1008150882336 +:1006D000D9F7491B5093E800442329F7903219F3C6 +:1006E00003C081E28093EB00FF91EF91DF91CF9106 +:1006F000BF91AF919F918F917F916F915F914F913A +:100700003F912F910F900FBE0F901F9018951F9340 +:10071000CF93DF93EC01FE0121961491112339F060 +:100720001A3011F48DE012DE812F10DEF4CFDF914C +:0A073000CF911F910895F894FFCFB8 +:00000001FF diff --git a/teensy_loader_cli/blinky-at90usb646.hex b/teensy_loader_cli/blinky-at90usb646.hex new file mode 100644 index 0000000..1e5b9c0 --- /dev/null +++ b/teensy_loader_cli/blinky-at90usb646.hex @@ -0,0 +1,120 @@ +:10000000E8C0000001C10000FFC00000FDC000000A +:10001000FBC00000F9C00000F7C00000F5C0000000 +:10002000F3C00000F1C00000ECC100002AC20000D3 +:10003000EBC00000E9C00000E7C00000E5C0000020 +:10004000E3C00000E1C00000DFC00000DDC0000030 +:10005000DBC00000D9C00000D7C00000D5C0000040 +:10006000D3C00000D1C00000CFC00000CDC0000050 +:10007000CBC00000C9C00000C7C00000C5C0000060 +:10008000C3C00000C1C00000BFC00000BDC0000070 +:10009000BBC00000B9C000004284A4830124C30493 +:1000A0000274A344C282E364D4430381231463949F +:1000B000B4C40A000A002064697400206461680006 +:1000C0004368617220000A004F7070732C20756EB7 +:1000D000737570706F7274656420636861726163B8 +:1000E0007465723A200053706163650A00444F459D +:1000F0005320414E59424F4459205354494C4C20AF +:100100004B4E4F57204D4F52534520434F44453F90 +:1001100000534F5300000100004C01120002000088 +:100120005E01220022000080011500210000700104 +:100130000900030000950104010309049901140258 +:10014000030904AF0120000001C1260012010002D2 +:1001500000000020C016790400010102000109021C +:100160002200010100C03209040000010300000068 +:100170000921110100012215000705830320000158 +:100180000631FF0974A1537508150026FF0095205C +:1001900009758102C004030904140359006F007536 +:1001A00000720020004E0061006D0065000000201C +:1001B0000359006F00750072002000550053004283 +:1001C00000200044006500760069006300650000BF +:1001D000000011241FBECFEFD0E1DEBFCDBF11E084 +:1001E000A0E0B1E0E4E6F7E002C005900D92A03097 +:1001F000B107D9F711E0A0E0B1E001C01D92A33032 +:10020000B107E1F779D0ACC2FBCE0F931F93CF9328 +:10021000DF93182F803269F486EE90E08DD280EE65 +:1002200095E120E931E0F9013197F1F70197D9F72C +:100230004EC081548A3148F088EC90E07DD2812F05 +:100240009AD086EC90E078D242C080EC90E074D2F4 +:10025000812F91D08AE38FD0E12FF0E0E95AFF4F50 +:10026000E4910E2F07701E2FC0E9D1E022C05E98E6 +:1002700017FF0BC08BEB90E05FD280E699E0FE01A8 +:100280003197F1F70197D9F70AC086EB90E054D285 +:1002900080E293E0FE013197F1F70197D9F75E9A7A +:1002A00080E293E0FE013197F1F70197D9F7110F42 +:1002B00001500023E1F684EB90E03ED280E496E02A +:1002C00020E931E0F9013197F1F70197D9F7DF9192 +:1002D000CF911F910F910895CF93DF93EC01FE0111 +:1002E00021968491882311F090DFF9CF82EB90E082 +:1002F00023D2DF91CF9108951F93CF93DF9380E8AE +:100300008093610010926100569A5E9A1DD010E0B1 +:10031000C0E9D1E00BC081E191E0DEDF88E99AE33A +:10032000FE013197F1F70197D9F71F5F163098F367 +:100330008DEE90E0D1DF80E49CE9FE013197F1F78A +:100340000197D9F710E0E7CF81E88093D70080EAE2 +:100350008093D8008AE189BD09B400FEFDCF80E911 +:100360008093D8001092E000109200018CE08093FE +:10037000E20078940895482F80910001882309F4C1 +:100380003EC02FB7F89483E08093E900809102018A +:10039000882341F08091E80085FD02C02FBF12C084 +:1003A000109202019091E4009C5F33E08091E8009C +:1003B00085FD13C02FBF8091E400891729F481E0E7 +:1003C000809302018FEF0895809100018823B9F096 +:1003D0002FB7F8943093E900E9CF4093F100809172 +:1003E000E80085FD06C08AE38093E80010920101D1 +:1003F00003C082E0809301012FBF80E008958FEF5A +:1004000008951F920F920FB60F9211248F939F930E +:100410008091E1001092E100982F83FF0FC01092AD +:10042000E90081E08093EB001092EC0082E280937F +:10043000ED0088E08093F0001092000192FF1AC056 +:10044000809100018823B1F080910101882391F00F +:10045000815080930101882369F483E08093E9004F +:1004600002C01092F1008091E80085FDFACF8AE386 +:100470008093E8009F918F910F900FBE0F901F9077 +:1004800018951F920F920FB60F9211242F933F933E +:100490004F935F936F937F938F939F93AF93BF938C +:1004A000CF93DF93EF93FF931092E9008091E800E0 +:1004B00083FF2CC14091F1003091F1008091F10057 +:1004C000A82FB0E02091F100922F80E0A82BB92B4B +:1004D0008091F100682F70E02091F100922F80E070 +:1004E000682B792B8091F100C82FD0E02091F1008A +:1004F000922F80E0C82BD92B82EF8093E800363012 +:1005000009F056C02CE131E0A90145505040F901F5 +:100510003797859194918A179B07E1F4FA018591A9 +:10052000949186179707B1F49A012E5F3F4FF90116 +:10053000659174912E5F3F4FF9012491CE01CF3F19 +:10054000D10519F010F08FEF90E0422F821758F488 +:10055000482F09C0295F3F4F495F5F4FF1E02D34BD +:100560003F07A9F6D3C05EEF8091E800282F30E066 +:10057000C90185709070892BB9F322FDCAC0342F50 +:10058000413208F030E2232FCB0106C0FC01019676 +:10059000E491E093F10021502223C1F7630F711D14 +:1005A000431B5093E8004423F9F63032E9F2B1C01E +:1005B000353061F48EEF8093E8008091E80080FF91 +:1005C000FCCF8A2F80688093E300A3C0393031F5D7 +:1005D000442309F09BC0A09300018EEF8093E800B4 +:1005E00086E491E021E02093E900FC010196E4918A +:1005F000E093EB00EE2369F0AC014F5F5F4FFC012D +:1006000084918093EC00CA010196FA0134913093F1 +:10061000ED002F5F253039F78EE14DC0383061F4A1 +:10062000403809F073C08091E80080FFFCCF8091D2 +:1006300000018093F1001BC03323E9F48091E800AE +:1006400080FFFCCF423811F080E00DC06093E900DC +:100650008091EB0090E025E0969587952A95E1F74B +:1006600081701092E9008093F1001092F1008EEFFA +:100670008093E8004EC0313019F0333009F046C0A5 +:100680004230F1F4AB2BE1F4262F2F77822F8150EB +:100690008430B0F48EEF8093E8002093E90033308B +:1006A000A9F189E18093EB0081E090E002C0880F1E +:1006B000991F2A95E2F78093EA001092EA0029C078 +:1006C000313021F5413A11F5672B01F54C2F5EEFE2 +:1006D0008091E800282F30E0C90185709070892B47 +:1006E000B9F322FD16C0942F413208F090E2892F11 +:1006F00003C01092F10081508823D9F7491B509311 +:10070000E800442329F7903219F303C081E2809373 +:10071000EB00FF91EF91DF91CF91BF91AF919F914E +:100720008F917F916F915F914F913F912F910F909A +:100730000FBE0F901F9018951F93CF93DF93EC017E +:10074000FE0121961491112339F01A3011F48DE035 +:1007500012DE812F10DEF4CFDF91CF911F9108952B +:04076000F894FFCF3B +:00000001FF diff --git a/teensy_loader_cli/blinky-atmega32u4.hex b/teensy_loader_cli/blinky-atmega32u4.hex new file mode 100644 index 0000000..a690b74 --- /dev/null +++ b/teensy_loader_cli/blinky-atmega32u4.hex @@ -0,0 +1,121 @@ +:10000000F2C000000BC1000009C1000007C10000E0 +:1000100005C1000003C1000001C10000FFC00000D5 +:10002000FDC00000FBC00000F6C1000034C20000AB +:10003000F5C00000F3C00000F1C00000EFC00000F8 +:10004000EDC00000EBC00000E9C00000E7C0000008 +:10005000E5C00000E3C00000E1C00000DFC0000018 +:10006000DDC00000DBC00000D9C00000D7C0000028 +:10007000D5C00000D3C00000D1C00000CFC0000038 +:10008000CDC00000CBC00000C9C00000C7C0000048 +:10009000C5C00000C3C00000C1C00000BFC0000058 +:1000A000BDC00000BBC00000B9C000004284A483F2 +:1000B0000124C3040274A344C282E364D4430381D1 +:1000C00023146394B4C40A000A00206469740020F5 +:1000D000646168004368617220000A004F707073A9 +:1000E0002C20756E737570706F7274656420636810 +:1000F000617261637465723A200053706163650ACE +:1001000000444F455320414E59424F4459205354C7 +:10011000494C4C204B4E4F57204D4F525345204396 +:100120004F44453F00534F5300000100006001124F +:10013000000200007201220022000094011500213B +:10014000000084010900030000A90104010309045F +:10015000AD011402030904C30120000001C12600FF +:100160001201000200000020C01679040001010203 +:10017000000109022200010100C03209040000014F +:100180000300000009211101000122150007058369 +:10019000032000010631FF0974A1537508150026DC +:1001A000FF00952009758102C00403090414035956 +:1001B000006F007500720020004E0061006D006548 +:1001C000000000200359006F0075007200200055E8 +:1001D000005300420020004400650076006900637F +:1001E00000650000000011241FBECFEFDAE0DEBF83 +:1001F000CDBF11E0A0E0B1E0E8E7F7E002C0059074 +:100200000D92A030B107D9F711E0A0E0B1E001C034 +:100210001D92A330B107E1F779D0ACC2F1CE0F93B4 +:100220001F93CF93DF93182F803269F48AEF90E009 +:100230008DD280EE95E120E931E0F9013197F1F7B7 +:100240000197D9F74EC081548A3148F08CED90E087 +:100250007DD2812F9AD08AED90E078D242C084ED91 +:1002600090E074D2812F91D08AE38FD0E12FF0E01B +:10027000E559FF4FE4910E2F07701E2FC0E9D1E022 +:1002800022C05E9A17FF0BC08FEC90E05FD280E631 +:1002900099E0FE013197F1F70197D9F70AC08AEC8E +:1002A00090E054D280E293E0FE013197F1F701979C +:1002B000D9F75E9880E293E0FE013197F1F701975C +:1002C000D9F7110F01500023E1F688EC90E03ED2FF +:1002D00080E496E020E931E0F9013197F1F70197E8 +:1002E000D9F7DF91CF911F910F910895CF93DF93AD +:1002F000EC01FE0121968491882311F090DFF9CF63 +:1003000086EC90E023D2DF91CF9108951F93CF9395 +:10031000DF9380E88093610010926100569A5E98A6 +:100320001DD010E0C0E9D1E00BC085E291E0DEDF36 +:1003300088E99AE3FE013197F1F70197D9F71F5F3A +:10034000163098F381E091E0D1DF80E49CE9FE0172 +:100350003197F1F70197D9F710E0E7CF81E080936B +:10036000D70080EA8093D80082E189BD09B400FEFD +:10037000FDCF80E98093D8001092E0001092000138 +:100380008CE08093E20078940895482F80910001DA +:10039000882309F43EC02FB7F89483E08093E900E6 +:1003A00080910201882341F08091E80085FD02C020 +:1003B0002FBF12C0109202019091E4009C5F33E0C5 +:1003C0008091E80085FD13C02FBF8091E40089175C +:1003D00029F481E0809302018FEF0895809100015C +:1003E0008823B9F02FB7F8943093E900E9CF409310 +:1003F000F1008091E80085FD06C08AE38093E80063 +:100400001092010103C082E0809301012FBF80E0C0 +:1004100008958FEF08951F920F920FB60F92112437 +:100420008F939F938091E1001092E100982F83FFBA +:100430000FC01092E90081E08093EB001092EC0075 +:1004400082E28093ED0088E08093F000109200013A +:1004500092FF1AC0809100018823B1F080910101C0 +:10046000882391F0815080930101882369F483E00F +:100470008093E90002C01092F1008091E80085FDB0 +:10048000FACF8AE38093E8009F918F910F900FBE7F +:100490000F901F9018951F920F920FB60F92112474 +:1004A0002F933F934F935F936F937F938F939F937C +:1004B000AF93BF93CF93DF93EF93FF931092E90035 +:1004C0008091E80083FF2CC14091F1003091F10050 +:1004D0008091F100A82FB0E02091F100922F80E0F0 +:1004E000A82BB92B8091F100682F70E02091F100CA +:1004F000922F80E0682B792B8091F100C82FD0E0FB +:100500002091F100922F80E0C82BD92B82EF8093AD +:10051000E800363009F056C020E331E0A90145502B +:100520005040F9013797859194918A179B07E1F420 +:10053000FA018591949186179707B1F49A012E5F7D +:100540003F4FF901659174912E5F3F4FF90124915E +:10055000CE01CF3FD10519F010F08FEF90E0422F80 +:10056000821758F4482F09C0295F3F4F495F5F4FFA +:10057000F1E021363F07A9F6D3C05EEF8091E80095 +:10058000282F30E0C90185709070892BB9F322FDC6 +:10059000CAC0342F413208F030E2232FCB0106C00D +:1005A000FC010196E491E093F10021502223C1F770 +:1005B000630F711D431B5093E8004423F9F630325A +:1005C000E9F2B1C0353061F48EEF8093E80080919C +:1005D000E80080FFFCCF8A2F80688093E300A3C0EF +:1005E000393031F5442309F09BC0A09300018EEF10 +:1005F0008093E8008AE591E021E02093E900FC0186 +:100600000196E491E093EB00EE2369F0AC014F5FBB +:100610005F4FFC0184918093EC00CA010196FA01BE +:1006200034913093ED002F5F253039F78EE14DC0C6 +:10063000383061F4403809F073C08091E80080FFE1 +:10064000FCCF809100018093F1001BC03323E9F4BB +:100650008091E80080FFFCCF423811F080E00DC0AF +:100660006093E9008091EB0090E025E096958795F6 +:100670002A95E1F781701092E9008093F1001092C1 +:10068000F1008EEF8093E8004EC0313019F0333026 +:1006900009F046C04230F1F4AB2BE1F4262F2F775E +:1006A000822F81508430B0F48EEF8093E800209345 +:1006B000E9003330A9F189E18093EB0081E090E01B +:1006C00002C0880F991F2A95E2F78093EA001092E2 +:1006D000EA0029C0313021F5413A11F5672B01F5C7 +:1006E0004C2F5EEF8091E800282F30E0C901857023 +:1006F0009070892BB9F322FD16C0942F413208F077 +:1007000090E2892F03C01092F10081508823D9F71D +:10071000491B5093E800442329F7903219F303C092 +:1007200081E28093EB00FF91EF91DF91CF91BF9138 +:10073000AF919F918F917F916F915F914F913F9179 +:100740002F910F900FBE0F901F9018951F93CF936E +:10075000DF93EC01FE0121961491112339F01A3038 +:1007600011F48DE012DE812F10DEF4CFDF91CF91F6 +:080770001F910895F894FFCFDA +:00000001FF diff --git a/teensy_loader_cli/gpl3.txt b/teensy_loader_cli/gpl3.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/teensy_loader_cli/gpl3.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/teensy_loader_cli/teensy_loader_cli.c b/teensy_loader_cli/teensy_loader_cli.c new file mode 100644 index 0000000..20ab3ad --- /dev/null +++ b/teensy_loader_cli/teensy_loader_cli.c @@ -0,0 +1,1144 @@ +/* Teensy Loader, Command Line Interface + * Program and Reboot Teensy Board with HalfKay Bootloader + * http://www.pjrc.com/teensy/loader_cli.html + * Copyright 2008-2010, PJRC.COM, LLC + * + * You may redistribute this program and/or modify it under the terms + * of the GNU General Public License as published by the Free Software + * Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/ + */ + +/* Want to incorporate this code into a proprietary application?? + * Just email paul@pjrc.com to ask. Usually it's not a problem, + * but you do need to ask to use this code in any way other than + * those permitted by the GNU General Public License, version 3 */ + +/* For non-root permissions on ubuntu or similar udev-based linux + * http://www.pjrc.com/teensy/49-teensy.rules + */ + + +#include +#include +#include +#include +#include +#include + +void usage(const char *err) +{ + if(err != NULL) fprintf(stderr, "%s\n\n", err); + fprintf(stderr, + "Usage: teensy_loader_cli --mcu= [-w] [-h] [-n] [-b] [-v] \n" + "\t-w : Wait for device to appear\n" + "\t-r : Use hard reboot if device not online\n" + "\t-s : Use soft reboot if device not online (Teensy3.x only)\n" + "\t-n : No reboot after programming\n" + "\t-b : Boot only, do not program\n" + "\t-v : Verbose output\n" + "\nUse `teensy_loader_cli --list-mcus` to list supported MCUs.\n" + "\nFor more information, please visit:\n" + "http://www.pjrc.com/teensy/loader_cli.html\n"); + exit(1); +} + +// USB Access Functions +int teensy_open(void); +int teensy_write(void *buf, int len, double timeout); +void teensy_close(void); +int hard_reboot(void); +int soft_reboot(void); + +// Intel Hex File Functions +int read_intel_hex(const char *filename); +int ihex_bytes_within_range(int begin, int end); +void ihex_get_data(int addr, int len, unsigned char *bytes); +int memory_is_blank(int addr, int block_size); + +// Misc stuff +int printf_verbose(const char *format, ...); +void delay(double seconds); +void die(const char *str, ...); +void parse_options(int argc, char **argv); +void boot(unsigned char *buf, int write_size); + +// options (from user via command line args) +int wait_for_device_to_appear = 0; +int hard_reboot_device = 0; +int soft_reboot_device = 0; +int reboot_after_programming = 1; +int verbose = 0; +int boot_only = 0; +int code_size = 0, block_size = 0; +const char *filename=NULL; + + +/****************************************************************/ +/* */ +/* Main Program */ +/* */ +/****************************************************************/ + +int main(int argc, char **argv) +{ + unsigned char buf[2048]; + int num, addr, r, write_size=block_size+2; + int first_block=1, waited=0; + + // parse command line arguments + parse_options(argc, argv); + if (!filename && !boot_only) { + usage("Filename must be specified"); + } + if (!code_size) { + usage("MCU type must be specified"); + } + printf_verbose("Teensy Loader, Command Line, Version 2.0\n"); + + if (boot_only) { + if (! teensy_open()) { + die("Could not find HalfKay"); + } + printf_verbose("Found HalfKay Bootloader\n"); + + boot(buf, block_size+2); + exit(0); + } + + // read the intel hex file + // this is done first so any error is reported before using USB + num = read_intel_hex(filename); + if (num < 0) die("error reading intel hex file \"%s\"", filename); + printf_verbose("Read \"%s\": %d bytes, %.1f%% usage\n", + filename, num, (double)num / (double)code_size * 100.0); + + // open the USB device + while (1) { + if (teensy_open()) break; + if (hard_reboot_device) { + if (!hard_reboot()) die("Unable to find rebootor\n"); + printf_verbose("Hard Reboot performed\n"); + hard_reboot_device = 0; // only hard reboot once + wait_for_device_to_appear = 1; + } + if (soft_reboot_device) { + if (soft_reboot()) { + printf_verbose("Soft reboot performed\n"); + } + soft_reboot_device = 0; + wait_for_device_to_appear = 1; + } + if (!wait_for_device_to_appear) die("Unable to open device\n"); + if (!waited) { + printf_verbose("Waiting for Teensy device...\n"); + printf_verbose(" (hint: press the reset button)\n"); + waited = 1; + } + delay(0.25); + } + printf_verbose("Found HalfKay Bootloader\n"); + + // if we waited for the device, read the hex file again + // perhaps it changed while we were waiting? + if (waited) { + num = read_intel_hex(filename); + if (num < 0) die("error reading intel hex file \"%s\"", filename); + printf_verbose("Read \"%s\": %d bytes, %.1f%% usage\n", + filename, num, (double)num / (double)code_size * 100.0); + } + + // program the data + printf_verbose("Programming"); + fflush(stdout); + for (addr = 0; addr < code_size; addr += block_size) { + if (!first_block && !ihex_bytes_within_range(addr, addr + block_size - 1)) { + // don't waste time on blocks that are unused, + // but always do the first one to erase the chip + continue; + } + if (!first_block && memory_is_blank(addr, block_size)) continue; + printf_verbose("."); + if (block_size <= 256 && code_size < 0x10000) { + buf[0] = addr & 255; + buf[1] = (addr >> 8) & 255; + ihex_get_data(addr, block_size, buf + 2); + write_size = block_size + 2; + } else if (block_size == 256) { + buf[0] = (addr >> 8) & 255; + buf[1] = (addr >> 16) & 255; + ihex_get_data(addr, block_size, buf + 2); + write_size = block_size + 2; + } else if (block_size == 512 || block_size == 1024) { + buf[0] = addr & 255; + buf[1] = (addr >> 8) & 255; + buf[2] = (addr >> 16) & 255; + memset(buf + 3, 0, 61); + ihex_get_data(addr, block_size, buf + 64); + write_size = block_size + 64; + } else { + die("Unknown code/block size\n"); + } + r = teensy_write(buf, write_size, first_block ? 3.0 : 0.25); + if (!r) die("error writing to Teensy\n"); + first_block = 0; + } + printf_verbose("\n"); + + // reboot to the user's new code + if (reboot_after_programming) { + boot(buf, write_size); + } + teensy_close(); + return 0; +} + + + + +/****************************************************************/ +/* */ +/* USB Access - libusb (Linux & FreeBSD) */ +/* */ +/****************************************************************/ + +#if defined(USE_LIBUSB) + +// http://libusb.sourceforge.net/doc/index.html +#include + +usb_dev_handle * open_usb_device(int vid, int pid) +{ + struct usb_bus *bus; + struct usb_device *dev; + usb_dev_handle *h; + char buf[128]; + int r; + + usb_init(); + usb_find_busses(); + usb_find_devices(); + //printf_verbose("\nSearching for USB device:\n"); + for (bus = usb_get_busses(); bus; bus = bus->next) { + for (dev = bus->devices; dev; dev = dev->next) { + //printf_verbose("bus \"%s\", device \"%s\" vid=%04X, pid=%04X\n", + // bus->dirname, dev->filename, + // dev->descriptor.idVendor, + // dev->descriptor.idProduct + //); + if (dev->descriptor.idVendor != vid) continue; + if (dev->descriptor.idProduct != pid) continue; + h = usb_open(dev); + if (!h) { + printf_verbose("Found device but unable to open\n"); + continue; + } + #ifdef LIBUSB_HAS_GET_DRIVER_NP + r = usb_get_driver_np(h, 0, buf, sizeof(buf)); + if (r >= 0) { + r = usb_detach_kernel_driver_np(h, 0); + if (r < 0) { + usb_close(h); + printf_verbose("Device is in use by \"%s\" driver\n", buf); + continue; + } + } + #endif + // Mac OS-X - removing this call to usb_claim_interface() might allow + // this to work, even though it is a clear misuse of the libusb API. + // normally Apple's IOKit should be used on Mac OS-X + // r = usb_claim_interface(h, 0); + // if (r < 0) { + // usb_close(h); + // printf_verbose("Unable to claim interface, check USB permissions\n"); + // continue; + // } + return h; + } + } + return NULL; +} + +static usb_dev_handle *libusb_teensy_handle = NULL; + +int teensy_open(void) +{ + teensy_close(); + libusb_teensy_handle = open_usb_device(0x16C0, 0x0478); + if (libusb_teensy_handle) return 1; + return 0; +} + +int teensy_write(void *buf, int len, double timeout) +{ + int r; + + if (!libusb_teensy_handle) return 0; + while (timeout > 0) { + r = usb_control_msg(libusb_teensy_handle, 0x21, 9, 0x0200, 0, + (char *)buf, len, (int)(timeout * 1000.0)); + if (r >= 0) return 1; + //printf("teensy_write, r=%d\n", r); + usleep(10000); + timeout -= 0.01; // TODO: subtract actual elapsed time + } + return 0; +} + +void teensy_close(void) +{ + if (!libusb_teensy_handle) return; + usb_release_interface(libusb_teensy_handle, 0); + usb_close(libusb_teensy_handle); + libusb_teensy_handle = NULL; +} + +int hard_reboot(void) +{ + usb_dev_handle *rebootor; + int r; + + rebootor = open_usb_device(0x16C0, 0x0477); + if (!rebootor) return 0; + r = usb_control_msg(rebootor, 0x21, 9, 0x0200, 0, "reboot", 6, 100); + usb_release_interface(rebootor, 0); + usb_close(rebootor); + if (r < 0) return 0; + return 1; +} + +int soft_reboot(void) +{ + usb_dev_handle *serial_handle = NULL; + + serial_handle = open_usb_device(0x16C0, 0x0483); + if (!serial_handle) { + char *error = usb_strerror(); + printf("Error opening USB device: %s\n", error); + return 0; + } + + char reboot_command = 134; + int response = usb_control_msg(serial_handle, 0x21, 0x20, 0, 0, &reboot_command, 1, 10000); + + usb_release_interface(serial_handle, 0); + usb_close(serial_handle); + + if (response < 0) { + char *error = usb_strerror(); + printf("Unable to soft reboot with USB error: %s\n", error); + return 0; + } + + return 1; +} + +#endif + + +/****************************************************************/ +/* */ +/* USB Access - Microsoft WIN32 */ +/* */ +/****************************************************************/ + +#if defined(USE_WIN32) + +// http://msdn.microsoft.com/en-us/library/ms790932.aspx +#include +#include +#include +#include + +HANDLE open_usb_device(int vid, int pid) +{ + GUID guid; + HDEVINFO info; + DWORD index, required_size; + SP_DEVICE_INTERFACE_DATA iface; + SP_DEVICE_INTERFACE_DETAIL_DATA *details; + HIDD_ATTRIBUTES attrib; + HANDLE h; + BOOL ret; + + HidD_GetHidGuid(&guid); + info = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); + if (info == INVALID_HANDLE_VALUE) return NULL; + for (index=0; 1 ;index++) { + iface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); + ret = SetupDiEnumDeviceInterfaces(info, NULL, &guid, index, &iface); + if (!ret) { + SetupDiDestroyDeviceInfoList(info); + break; + } + SetupDiGetInterfaceDeviceDetail(info, &iface, NULL, 0, &required_size, NULL); + details = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(required_size); + if (details == NULL) continue; + memset(details, 0, required_size); + details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); + ret = SetupDiGetDeviceInterfaceDetail(info, &iface, details, + required_size, NULL, NULL); + if (!ret) { + free(details); + continue; + } + h = CreateFile(details->DevicePath, GENERIC_READ|GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, + FILE_FLAG_OVERLAPPED, NULL); + free(details); + if (h == INVALID_HANDLE_VALUE) continue; + attrib.Size = sizeof(HIDD_ATTRIBUTES); + ret = HidD_GetAttributes(h, &attrib); + if (!ret) { + CloseHandle(h); + continue; + } + if (attrib.VendorID != vid || attrib.ProductID != pid) { + CloseHandle(h); + continue; + } + SetupDiDestroyDeviceInfoList(info); + return h; + } + return NULL; +} + +int write_usb_device(HANDLE h, void *buf, int len, int timeout) +{ + static HANDLE event = NULL; + unsigned char tmpbuf[1040]; + OVERLAPPED ov; + DWORD n, r; + + if (len > sizeof(tmpbuf) - 1) return 0; + if (event == NULL) { + event = CreateEvent(NULL, TRUE, TRUE, NULL); + if (!event) return 0; + } + ResetEvent(&event); + memset(&ov, 0, sizeof(ov)); + ov.hEvent = event; + tmpbuf[0] = 0; + memcpy(tmpbuf + 1, buf, len); + if (!WriteFile(h, tmpbuf, len + 1, NULL, &ov)) { + if (GetLastError() != ERROR_IO_PENDING) return 0; + r = WaitForSingleObject(event, timeout); + if (r == WAIT_TIMEOUT) { + CancelIo(h); + return 0; + } + if (r != WAIT_OBJECT_0) return 0; + } + if (!GetOverlappedResult(h, &ov, &n, FALSE)) return 0; + if (n <= 0) return 0; + return 1; +} + +void print_win32_err(void) +{ + char buf[256]; + DWORD err; + + err = GetLastError(); + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, + 0, buf, sizeof(buf), NULL); + printf("err %ld: %s\n", err, buf); +} + +static HANDLE win32_teensy_handle = NULL; + +int teensy_open(void) +{ + teensy_close(); + win32_teensy_handle = open_usb_device(0x16C0, 0x0478); + if (win32_teensy_handle) return 1; + return 0; +} + +int teensy_write(void *buf, int len, double timeout) +{ + int r; + if (!win32_teensy_handle) return 0; + r = write_usb_device(win32_teensy_handle, buf, len, (int)(timeout * 1000.0)); + //if (!r) print_win32_err(); + return r; +} + +void teensy_close(void) +{ + if (!win32_teensy_handle) return; + CloseHandle(win32_teensy_handle); + win32_teensy_handle = NULL; +} + +int hard_reboot(void) +{ + HANDLE rebootor; + int r; + + rebootor = open_usb_device(0x16C0, 0x0477); + if (!rebootor) return 0; + r = write_usb_device(rebootor, "reboot", 6, 100); + CloseHandle(rebootor); + return r; +} + +int soft_reboot(void) +{ + printf("Soft reboot is not implemented for Win32\n"); + return 0; +} + +#endif + + + +/****************************************************************/ +/* */ +/* USB Access - Apple's IOKit, Mac OS-X */ +/* */ +/****************************************************************/ + +#if defined(USE_APPLE_IOKIT) + +// http://developer.apple.com/technotes/tn2007/tn2187.html +#include +#include +#include + +struct usb_list_struct { + IOHIDDeviceRef ref; + int pid; + int vid; + struct usb_list_struct *next; +}; + +static struct usb_list_struct *usb_list=NULL; +static IOHIDManagerRef hid_manager=NULL; + +void attach_callback(void *context, IOReturn r, void *hid_mgr, IOHIDDeviceRef dev) +{ + CFTypeRef type; + struct usb_list_struct *n, *p; + int32_t pid, vid; + + if (!dev) return; + type = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey)); + if (!type || CFGetTypeID(type) != CFNumberGetTypeID()) return; + if (!CFNumberGetValue((CFNumberRef)type, kCFNumberSInt32Type, &vid)) return; + type = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey)); + if (!type || CFGetTypeID(type) != CFNumberGetTypeID()) return; + if (!CFNumberGetValue((CFNumberRef)type, kCFNumberSInt32Type, &pid)) return; + n = (struct usb_list_struct *)malloc(sizeof(struct usb_list_struct)); + if (!n) return; + //printf("attach callback: vid=%04X, pid=%04X\n", vid, pid); + n->ref = dev; + n->vid = vid; + n->pid = pid; + n->next = NULL; + if (usb_list == NULL) { + usb_list = n; + } else { + for (p = usb_list; p->next; p = p->next) ; + p->next = n; + } +} + +void detach_callback(void *context, IOReturn r, void *hid_mgr, IOHIDDeviceRef dev) +{ + struct usb_list_struct *p, *tmp, *prev=NULL; + + p = usb_list; + while (p) { + if (p->ref == dev) { + if (prev) { + prev->next = p->next; + } else { + usb_list = p->next; + } + tmp = p; + p = p->next; + free(tmp); + } else { + prev = p; + p = p->next; + } + } +} + +void init_hid_manager(void) +{ + CFMutableDictionaryRef dict; + IOReturn ret; + + if (hid_manager) return; + hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); + if (hid_manager == NULL || CFGetTypeID(hid_manager) != IOHIDManagerGetTypeID()) { + if (hid_manager) CFRelease(hid_manager); + printf_verbose("no HID Manager - maybe this is a pre-Leopard (10.5) system?\n"); + return; + } + dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); + if (!dict) return; + IOHIDManagerSetDeviceMatching(hid_manager, dict); + CFRelease(dict); + IOHIDManagerScheduleWithRunLoop(hid_manager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + IOHIDManagerRegisterDeviceMatchingCallback(hid_manager, attach_callback, NULL); + IOHIDManagerRegisterDeviceRemovalCallback(hid_manager, detach_callback, NULL); + ret = IOHIDManagerOpen(hid_manager, kIOHIDOptionsTypeNone); + if (ret != kIOReturnSuccess) { + IOHIDManagerUnscheduleFromRunLoop(hid_manager, + CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + CFRelease(hid_manager); + printf_verbose("Error opening HID Manager\n"); + } +} + +static void do_run_loop(void) +{ + while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true) == kCFRunLoopRunHandledSource) ; +} + +IOHIDDeviceRef open_usb_device(int vid, int pid) +{ + struct usb_list_struct *p; + IOReturn ret; + + init_hid_manager(); + do_run_loop(); + for (p = usb_list; p; p = p->next) { + if (p->vid == vid && p->pid == pid) { + ret = IOHIDDeviceOpen(p->ref, kIOHIDOptionsTypeNone); + if (ret == kIOReturnSuccess) return p->ref; + } + } + return NULL; +} + +void close_usb_device(IOHIDDeviceRef dev) +{ + struct usb_list_struct *p; + + do_run_loop(); + for (p = usb_list; p; p = p->next) { + if (p->ref == dev) { + IOHIDDeviceClose(dev, kIOHIDOptionsTypeNone); + return; + } + } +} + +static IOHIDDeviceRef iokit_teensy_reference = NULL; + +int teensy_open(void) +{ + teensy_close(); + iokit_teensy_reference = open_usb_device(0x16C0, 0x0478); + if (iokit_teensy_reference) return 1; + return 0; +} + +int teensy_write(void *buf, int len, double timeout) +{ + IOReturn ret; + + // timeouts do not work on OS-X + // IOHIDDeviceSetReportWithCallback is not implemented + // even though Apple documents it with a code example! + // submitted to Apple on 22-sep-2009, problem ID 7245050 + if (!iokit_teensy_reference) return 0; + + double start = CFAbsoluteTimeGetCurrent(); + while (CFAbsoluteTimeGetCurrent() - timeout < start) { + ret = IOHIDDeviceSetReport(iokit_teensy_reference, + kIOHIDReportTypeOutput, 0, buf, len); + if (ret == kIOReturnSuccess) return 1; + usleep(10000); + } + + return 0; +} + +void teensy_close(void) +{ + if (!iokit_teensy_reference) return; + close_usb_device(iokit_teensy_reference); + iokit_teensy_reference = NULL; +} + +int hard_reboot(void) +{ + IOHIDDeviceRef rebootor; + IOReturn ret; + + rebootor = open_usb_device(0x16C0, 0x0477); + if (!rebootor) return 0; + ret = IOHIDDeviceSetReport(rebootor, + kIOHIDReportTypeOutput, 0, (uint8_t *)("reboot"), 6); + close_usb_device(rebootor); + if (ret == kIOReturnSuccess) return 1; + return 0; +} + +int soft_reboot(void) +{ + printf("Soft reboot is not implemented for OSX\n"); + return 0; +} + +#endif + + + +/****************************************************************/ +/* */ +/* USB Access - BSD's UHID driver */ +/* */ +/****************************************************************/ + +#if defined(USE_UHID) + +// Thanks to Todd T Fries for help getting this working on OpenBSD +// and to Chris Kuethe for the initial patch to use UHID. + +#include +#include +#include +#include +#ifndef USB_GET_DEVICEINFO +#include +#endif + +int open_usb_device(int vid, int pid) +{ + int r, fd; + DIR *dir; + struct dirent *d; + struct usb_device_info info; + char buf[256]; + + dir = opendir("/dev"); + if (!dir) return -1; + while ((d = readdir(dir)) != NULL) { + if (strncmp(d->d_name, "uhid", 4) != 0) continue; + snprintf(buf, sizeof(buf), "/dev/%s", d->d_name); + fd = open(buf, O_RDWR); + if (fd < 0) continue; + r = ioctl(fd, USB_GET_DEVICEINFO, &info); + if (r < 0) { + // NetBSD: added in 2004 + // OpenBSD: added November 23, 2009 + // FreeBSD: missing (FreeBSD 8.0) - USE_LIBUSB works! + die("Error: your uhid driver does not support" + " USB_GET_DEVICEINFO, please upgrade!\n"); + close(fd); + closedir(dir); + exit(1); + } + //printf("%s: v=%d, p=%d\n", buf, info.udi_vendorNo, info.udi_productNo); + if (info.udi_vendorNo == vid && info.udi_productNo == pid) { + closedir(dir); + return fd; + } + close(fd); + } + closedir(dir); + return -1; +} + +static int uhid_teensy_fd = -1; + +int teensy_open(void) +{ + teensy_close(); + uhid_teensy_fd = open_usb_device(0x16C0, 0x0478); + if (uhid_teensy_fd < 0) return 0; + return 1; +} + +int teensy_write(void *buf, int len, double timeout) +{ + int r; + + // TODO: imeplement timeout... how?? + r = write(uhid_teensy_fd, buf, len); + if (r == len) return 1; + return 0; +} + +void teensy_close(void) +{ + if (uhid_teensy_fd >= 0) { + close(uhid_teensy_fd); + uhid_teensy_fd = -1; + } +} + +int hard_reboot(void) +{ + int r, rebootor_fd; + + rebootor_fd = open_usb_device(0x16C0, 0x0477); + if (rebootor_fd < 0) return 0; + r = write(rebootor_fd, "reboot", 6); + delay(0.1); + close(rebootor_fd); + if (r == 6) return 1; + return 0; +} + +int soft_reboot(void) +{ + printf("Soft reboot is not implemented for UHID\n"); + return 0; +} + +#endif + + + +/****************************************************************/ +/* */ +/* Read Intel Hex File */ +/* */ +/****************************************************************/ + +// the maximum flash image size we can support +// chips with larger memory may be used, but only this +// much intel-hex data can be loaded into memory! +#define MAX_MEMORY_SIZE 0x20000 + +static unsigned char firmware_image[MAX_MEMORY_SIZE]; +static unsigned char firmware_mask[MAX_MEMORY_SIZE]; +static int end_record_seen=0; +static int byte_count; +static unsigned int extended_addr = 0; +static int parse_hex_line(char *line); + +int read_intel_hex(const char *filename) +{ + FILE *fp; + int i, lineno=0; + char buf[1024]; + + byte_count = 0; + end_record_seen = 0; + for (i=0; i= MAX_MEMORY_SIZE) return 0; + ptr += 2; + sum = (len & 255) + ((addr >> 8) & 255) + (addr & 255) + (code & 255); + if (code != 0) { + if (code == 1) { + end_record_seen = 1; + return 1; + } + if (code == 2 && len == 2) { + if (!sscanf(ptr, "%04x", &i)) return 1; + ptr += 4; + sum += ((i >> 8) & 255) + (i & 255); + if (!sscanf(ptr, "%02x", &cksum)) return 1; + if (((sum & 255) + (cksum & 255)) & 255) return 1; + extended_addr = i << 4; + //printf("ext addr = %05X\n", extended_addr); + } + if (code == 4 && len == 2) { + if (!sscanf(ptr, "%04x", &i)) return 1; + ptr += 4; + sum += ((i >> 8) & 255) + (i & 255); + if (!sscanf(ptr, "%02x", &cksum)) return 1; + if (((sum & 255) + (cksum & 255)) & 255) return 1; + extended_addr = i << 16; + //printf("ext addr = %08X\n", extended_addr); + } + return 1; // non-data line + } + byte_count += len; + while (num != len) { + if (sscanf(ptr, "%02x", &i) != 1) return 0; + i &= 255; + firmware_image[addr + extended_addr + num] = i; + firmware_mask[addr + extended_addr + num] = 1; + ptr += 2; + sum += i; + (num)++; + if (num >= 256) return 0; + } + if (!sscanf(ptr, "%02x", &cksum)) return 0; + if (((sum & 255) + (cksum & 255)) & 255) return 0; /* checksum error */ + return 1; +} + +int ihex_bytes_within_range(int begin, int end) +{ + int i; + + if (begin < 0 || begin >= MAX_MEMORY_SIZE || + end < 0 || end >= MAX_MEMORY_SIZE) { + return 0; + } + for (i=begin; i<=end; i++) { + if (firmware_mask[i]) return 1; + } + return 0; +} + +void ihex_get_data(int addr, int len, unsigned char *bytes) +{ + int i; + + if (addr < 0 || len < 0 || addr + len >= MAX_MEMORY_SIZE) { + for (i=0; i MAX_MEMORY_SIZE) return 1; + + while (block_size && addr < MAX_MEMORY_SIZE) { + if (firmware_mask[addr] && firmware_image[addr] != 255) return 0; + addr++; + block_size--; + } + return 1; +} + + + + +/****************************************************************/ +/* */ +/* Misc Functions */ +/* */ +/****************************************************************/ + +int printf_verbose(const char *format, ...) +{ + va_list ap; + int r; + + va_start(ap, format); + if (verbose) { + r = vprintf(format, ap); + fflush(stdout); + return r; + } + return 0; +} + +void delay(double seconds) +{ + #ifdef WIN32 + Sleep(seconds * 1000.0); + #else + usleep(seconds * 1000000.0); + #endif +} + +void die(const char *str, ...) +{ + va_list ap; + + va_start(ap, str); + vfprintf(stderr, str, ap); + fprintf(stderr, "\n"); + exit(1); +} + +#if defined(WIN32) +#define strcasecmp stricmp +#endif + + +static const struct { + const char *name; + int code_size; + int block_size; +} MCUs[] = { + {"at90usb162", 15872, 128}, + {"atmega32u4", 32256, 128}, + {"at90usb646", 64512, 256}, + {"at90usb1286", 130048, 256}, +#if defined(USE_LIBUSB) || defined(USE_APPLE_IOKIT) + {"mkl26z64", 63488, 512}, + {"mk20dx128", 131072, 1024}, + {"mk20dx256", 262144, 1024}, +#endif + {NULL, 0, 0}, +}; + + +void list_mcus() +{ + int i; + printf("Supported MCUs are:\n"); + for(i=0; MCUs[i].name != NULL; i++) + printf(" - %s\n", MCUs[i].name); + exit(1); +} + + +void read_mcu(char *name) +{ + int i; + + if(name == NULL) { + fprintf(stderr, "No MCU specified.\n"); + list_mcus(); + } + + for(i=0; MCUs[i].name != NULL; i++) { + if(strcasecmp(name, MCUs[i].name) == 0) { + code_size = MCUs[i].code_size; + block_size = MCUs[i].block_size; + return; + } + } + + fprintf(stderr, "Unknown MCU type \"%s\"\n", name); + list_mcus(); +} + + +void parse_flag(char *arg) +{ + int i; + for(i=1; arg[i]; i++) { + switch(arg[i]) { + case 'w': wait_for_device_to_appear = 1; break; + case 'r': hard_reboot_device = 1; break; + case 's': soft_reboot_device = 1; break; + case 'n': reboot_after_programming = 0; break; + case 'v': verbose = 1; break; + case 'b': boot_only = 1; break; + default: + fprintf(stderr, "Unknown flag '%c'\n\n", arg[i]); + usage(NULL); + } + } +} + + +void parse_options(int argc, char **argv) +{ + int i; + char *arg; + + for (i=1; i