diff --git a/app/firmwares/0uboard.bin b/app/firmwares/0uboard.bin index b48712e74..ea1d600de 100644 Binary files a/app/firmwares/0uboard.bin and b/app/firmwares/0uboard.bin differ diff --git a/app/firmwares/etkit.hex b/app/firmwares/etkit.hex new file mode 100644 index 000000000..c770c06c7 --- /dev/null +++ b/app/firmwares/etkit.hex @@ -0,0 +1,1274 @@ +:100000000C945C0B0C94840B0C94840B0C94941B3C +:100010000C94941B0C94941B0C94840B0C94840BE4 +:100020000C94840B0C94840B0C94840B0C940C1C7B +:100030000C94840B0C94840B0C94840B0C94840B04 +:100040000C942B1A0C94840B0C94F9190C94D3195E +:100050000C94840B0C94840B0C94840B0C94840BE4 +:100060000C94751A0C94840BFFE0FFD1AFFF32FFA4 +:10007000D0FFFEFFE0FFD1AEFFD0FFFEFFE0FFD1DB +:100080001000FFFEFFD0FFE0FFC1FFD1AED580A87A +:100090003FD300408D142000A1C8DA1281CFD9F1DE +:1000A000DB402EA4A6AFFFD0FFFE0000000024001E +:1000B00027002A00000000080002010000030407D6 +:1000C00000000000000000000000000023002600E7 +:1000D000290000000000250028002B00040404046F +:1000E00004040404020202020202030303030303E2 +:1000F00001020408102040800102040810200102BF +:100100000408102000101000FE0A06A7089500FF42 +:10011000FE0EFE0BFE1010201000FEAAAA000180A9 +:1001200000000180004A51EA505A51C99E000180E6 +:1001300000000180000001800055551010201000C3 +:10014000FEAAAA00018000000180003993C2523249 +:100150005F8A527193800000018000000180005589 +:10016000551010201000FEAAAA0001800000018096 +:10017000003BA5C12431198924712580000001802C +:10018000000001800055551010201000FEAAAA00A2 +:10019000018000000180007BA5C1247919C1247968 +:1001A00025800000018000000180005555101020BE +:1001B0001000FEAAAA000180000001800079BFC2E1 +:1001C000487A49C248798980000001800000018096 +:1001D0000055551010201000FEAAAA000180000052 +:1001E0000180007A4DC2527B53C2D67A4F80000004 +:1001F0000180000001800055551010201000FEAA5B +:10020000AA000180000001800031A5CA287A31CA05 +:100210002849A5800000018000000180005555108C +:1002200010201000FEAAAA000180000001800073C7 +:10023000D1CA1073D1CA1073DF80000001800000A2 +:1002400001800055551010201000FEAAAA00018060 +:1002500000000180001E3991401E3191081E7180FE +:100260000000018000000180005555101020100092 +:10027000FEAAAA000180000001800022F9A2203E0F +:1002800021A2202221800000018000000180005571 +:10029000551010201000FEAAAA0001800000018065 +:1002A0000020F9A08020F9A0803E8180000001801C +:1002B000000001800055551010201000FEAAAA0071 +:1002C0000180000001800022F9A220222194200850 +:1002D0002180000001800000018000555510102091 +:1002E0001000FEAAAA00018000000180003EF9A0D3 +:1002F000803EF9A080208180000001800000018004 +:100300000055551010201000FEAAAA000180000020 +:100310000180001EF1A08820F1A0901E89800000BD +:100320000180000001800055551010201000FEAA29 +:10033000AA00018000000180001E71A0881C898233 +:10034000883C71800000018000000180005555103C +:1003500010201000FEAAAA00018000000180001EEB +:10036000F9A0201C2182203CF980000001800000BF +:1003700001800055551010201000FEAAAA0001802F +:100380000000018000391DA510251DA51039DD8054 +:100390000000018000000180005555101020100061 +:1003A000FEAAAA00018000000180007189CA184AD3 +:1003B00009CA08719D80000001800000018000557D +:1003C000551010201000FEAAAA0001800000018034 +:1003D000007199CA044A09CA10719D800000018009 +:1003E000000001800055551010201000FEAAAA0040 +:1003F000018000000180007199CA044A19CA047181 +:1004000099800000018000000180005555101020E7 +:100410001000FEAAAA00018000000180007185CAB8 +:100420000C4A15CA1C718580000001800000018003 +:100430000055551010201000FEAAAA0001800000EF +:100440000180004993EA546A59DBD44A5380000082 +:100450000180000001800055551010201000FEAAF8 +:10046000AA00018000000180003453C29A3117892C +:1004700012711380000001800000018000555510AA +:1004800010201000FEAAAA00018000000180007B5D +:10049000B9C1247939C12479398000000180000074 +:1004A00001800055551010201000FEAAAA000180FE +:1004B00000000180003325C4B447ADC4A434A58036 +:1004C0000000018000000180005555101020100030 +:1004D000FEAAAA00018000000180003E89A0D83E4B +:1004E000A9A0883E8980000001800000018000559D +:1004F000551010201000FEAAAA0001800000018003 +:10050000003A5DC252325D8A52719D8000000180C6 +:10051000000001800055551010201000FEAAAA000E +:100520000180000001800079CFC2107991C0507B1A +:100530008F800000018000000180005555101020C0 +:100540001000FEAAAA00018000000180001E719028 +:10055000801E61901010E180000001800000018089 +:100560000055551010201000FEAAAA0001800000BE +:100570000180000E719080166192100EE1800000E3 +:100580000180000001800055551010201000FEAAC7 +:10059000AA00018000000180001C7192801C6194FF +:1005A0001012E1800000018000000180005555100C +:1005B00010201000FEAAAA00018000000180001295 +:1005C000719280126192100CE180000001800000A5 +:1005D000018000555500000008000E010A0A0804B9 +:1005E0000080808080808080008080050404080274 +:1005F0000888888888060A0A080100242424FC4800 +:1006000048FC909090070A0A080100107C929070B4 +:100610001C12927C10070A0A080100629494681068 +:10062000102C52528C070A0A080100384444283022 +:10063000528A848C7201040408040880808080033C +:100640000C0C0803FF204040808080808080404068 +:1006500020030C0C0802FF80404020202020202096 +:100660004040800707070801011092543854921047 +:10067000070707080101101010FE101010020404F3 +:100680000803FEC0404080040101080204F0020299 +:1006900002080300C0C0060A0A080100040408108A +:1006A000102020408080060A0A0801003048848417 +:1006B000848484844830050A0A0802002060A0204F +:1006C0002020202020F8060A0A08010078848404EB +:1006D0001820408080FC060A0A08010078848404FF +:1006E000380404848478060A0A0801000818284897 +:1006F0008888FC080808060A0A080100FC80808037 +:10070000F80404048478060A0A080100384080804E +:10071000F88484848478060A0A080100FC0404082A +:10072000080810101010060A0A0801007884848452 +:10073000788484848478060A0A0801007884848492 +:100740007C0404040870020707080301C0C000000D +:1007500000C0C00209090803FFC0C0000000C0407B +:100760004080050909080200081020408040201040 +:1007700008060505080102FC000000FC050909083F +:100780000100804020100810204080060A0A08015D +:100790000078848404081010001010060A0A08016A +:1007A00000384494ACA4A4A49C403C060A0A080166 +:1007B000003048488484FC84848484060A0A080142 +:1007C00000F8848484F884848484F8060A0A080182 +:1007D0000078848480808080848478060A0A0801F6 +:1007E00000F08884848484848488F0060A0A0801DE +:1007F00000FC808080F880808080FC060A0A080166 +:1008000000FC808080F88080808080060A0A0801D1 +:100810000078848480809C84848C74060A0A080191 +:100820000084848484FC8484848484050A0A080205 +:1008300000F82020202020202020F8070A0A0801A4 +:10084000003E080808080808888870060A0A080197 +:1008500000848890A0C0C0A0908884060A0A08017D +:1008600000808080808080808080FC060A0A0801E9 +:10087000008484CCCCB4B484848484060A0A08013D +:100880000084C4C4A4A494948C8C84060A0A08012D +:100890000078848484848484848478060A0A080125 +:1008A00000F8848484F88080808080070B0B080126 +:1008B000FF78848484848484B4CC7806060A0A0889 +:1008C0000100F8848484F89088888484060A0A08E1 +:1008D000010078848480601804848478070A0A08F8 +:1008E0000100FE101010101010101010060A0A0857 +:1008F000010084848484848484848478070A0A08B8 +:10090000010082828244444428281010060A0A0802 +:10091000010084848484B4B4CCCC8484060A0A089C +:10092000010084844848303048488484070A0A0813 +:10093000010082824444281010101010060A0A0890 +:100940000100FC0404081020408080FC030C0C080B +:1009500004FFE080808080808080808080E0060AC4 +:100960000A08010080804020201010080404030CB5 +:100970000C0801FFE020202020202020202020E063 +:100980000603030801093048840701010801FFFE3E +:1009900003030308020A80402006080808010078C3 +:1009A00084047C84848C74060B0B08010080808096 +:1009B000B8C484848484C4B8060808080100788414 +:1009C000808080808478060B0B0801000404047486 +:1009D0008C848484848C74060808080100788484DC +:1009E000FC80808478050B0B08010018202020F87B +:1009F000202020202020060B0B0801FE047488888C +:100A000088704078848478060B0B08010080808011 +:100A1000B8C4848484848484050B0B0802002020DD +:100A20000060202020202020F8050D0D0801FE0880 +:100A3000080018080808080808089060060B0B084A +:100A400001008080808890A0C0A0908884050B0B56 +:100A500008020060202020202020202020F8070805 +:100A600008080100EC92929292929292060808086D +:100A70000100B8C4848484848484060808080100C2 +:100A80007884848484848478060A0A0801FEB8C4C1 +:100A900084848484C4B88080060A0A0801FE748CA9 +:100AA000848484848C740404060808080100B8C493 +:100AB0008480808080800608080801007884806037 +:100AC00018048478050A0A080100202020F8202054 +:100AD0002020201806080808010084848484848467 +:100AE0008C74060808080100848484484848303023 +:100AF000070808080100829292929292926C06086E +:100B0000080801008484483030488484060A0A08B2 +:100B100001FE84848484844C340404780608080824 +:100B20000100FC040810204080FC030C0C0803FFAB +:100B3000608080404080804040808060010E0E08D0 +:100B400004FE8080808080808080808080808080A3 +:100B5000030C0C0802FFC020204040202040402011 +:100B600020C007030308010862928C1010201000B7 +:100B7000FEAAAA000180000001800073D1CA104BB8 +:100B8000D1CA1073DF800000018000000180005591 +:100B9000551010201000FEAAAA000180000001805C +:100BA00000719DCA5273D3C252425D800000018021 +:100BB000000001800055551010201000FEAAAA0068 +:100BC00001800000018000499DCA527A5DCA5049E7 +:100BD0009180000001800000018000555510102018 +:100BE0001000FEAAAA00018000000180007393CAD1 +:100BF00052739FCA127213800000018000000180AE +:100C00000055551010201000FEAAAA000180000017 +:100C10000180004B93EA525B9FCA524B93800000C5 +:100C20000180000001800055551010201000FEAA20 +:100C3000AA000180000001800074B9A6A425A5A423 +:100C4000A474B98000000180000001800055551097 +:100C500010201000FEAAAA00018000000180004BB5 +:100C6000D1EA105BD1CA104BDF8000000180000088 +:100C700001800055551010201000FEAAAA00018026 +:100C8000000001800039CDC212319F8852739380D9 +:100C90000000018000000180005555101020100058 +:100CA000FEAAAA000180000001800079CDC212795D +:100CB0009FC0527B9380000001800000018000559E +:100CC000551010201000FEAAAA000180000001802B +:100CD000004B9DC9207919C9044939800000018061 +:100CE000000001800055551010201000FEAAAA0037 +:100CF0000180000001800025DDA4843C85A48424BB +:100D000099800000018000000180005555101020DE +:100D10001000FEAAAA000180000001800045CDC499 +:100D2000904489A88410998000000180000001800F +:100D30000055551010201000FEAAAA0001800000E6 +:100D4000018000721DCA127213C21243DD800000BE +:100D50000180000001800055551010201000FEAAEF +:100D6000AA00018000000180007213CA127213C22F +:100D70001243CD8000000180000001800055551015 +:100D800010201000FEAAAA00018000000180000EC1 +:100D90002189200E218A2009218000000180000085 +:100DA00001800055551010201000FEAAAA000180F5 +:100DB000000001800039DDC202318D8850739F80B0 +:100DC0000000018000000180005555101020100027 +:100DD000FEAAAA000180000001800039DDC20231B4 +:100DE0008D8842739D8000000180000001800055C5 +:100DF000551010201000FEAAAA00018000000180FA +:100E00000071CFCA104A0DCA0271DD800000018056 +:100E1000000001800055551010201000FEAAAA0005 +:100E2000018000000180007245CA4C7245C24441F5 +:100E30008F800000018000000180005555101020B7 +:100E40001000FEAAAA0001800000018000725DCAA5 +:100E500042724DC250419F8000000180000001801D +:100E60000055551010201000FEAAAA0001800000B5 +:100E70000180003B9DC12031198904713980000037 +:100E80000180000001800055551010201000FEAABE +:100E9000AA000180000001800039D3C212421FC2A3 +:100EA0001239D380000001800000018000555510E8 +:100EB00010201000FEAAAA0001800000018000227C +:100EC00089B6882AA9A2D822898000000180000062 +:100ED00001800055551010201000FEAAAA000180C4 +:100EE00000000180003B8DC252339F8A1272138032 +:100EF00000000180000001800055551010201000F6 +:100F0000FEAAAA00018000000180007B8DC2527BF6 +:100F10009FC2127A138000000180000001800055FA +:100F2000551010201000FEAAAA00018000000180C8 +:100F300000398FC250324D8A42719D80000001807D +:100F4000000001800055551010201000FEAAAA00D4 +:100F500001800000018000339BC42225A394A2637A +:100F60009B8000000180000001800055551010207A +:100F70001000FEAAAA000180000001800039DDC235 +:100F80000832098A0871DD800000018000000180BC +:100F90000055551010201000FEAAAA000180000084 +:100FA00001800039DDC2084189C0483B9D800000B6 +:100FB0000180000001800055551010201000FEAA8D +:100FC000AA00018000000180000EF990200C21820F +:100FD000201C218000000180000001800055551078 +:100FE00010201000FEAAAA0001800000018000313C +:100FF000CFCA104991C850338F8000000180000093 +:1010000001800055551010201000FEAAAA00018092 +:1010100000000180001C8992D81CA990881089804A +:1010200000000180000001800055551010201000C4 +:10103000FEAAAA0001800000018000338FCA507B05 +:1010400091CA104A0F800000018000000180005505 +:101050005500000008000E010A0A08040080800004 +:1010600080808080808080070A0A08010010107C40 +:10107000929090927C1010070A0A0801001C202010 +:1010800020F82020207CC206080808010184487846 +:101090004848784884070A0A08010082442810FE5C +:1010A00010FE101010010A0A0804008080808000E1 +:1010B0000080808080060A0A080100788480788495 +:1010C000847804847804020208020C9090080A0ACA +:1010D0000800003C4299A5A1A1A599423C0507073B +:1010E000080205700878887800F8060909080100E8 +:1010F000242448489048482424060404080100FC9D +:101100000404041010201000FEAAAA000180003A76 +:1011100063C25433C98A48724980000001800003C9 +:10112000C18000000180005555080A0A0800003CF3 +:1011300042B9A5A5B9A9A5423C06010108010BFCCD +:1011400003040408020A40A0A0400709090801019D +:10115000101010FE10101000FE05070708020570A1 +:101160008808708080F805070708020570880870F5 +:1011700008887003030308030A204080080A0A084D +:1011800000FE42424242424266594080060C0C0830 +:1011900001FF7CF4F4F4F47414141414141C02020B +:1011A00002080304C0C00302020802FE20C00307B5 +:1011B000070802052060A02020202005070708025C +:1011C00005708888887000F8060909080100909069 +:1011D00048482448489090060A0A08010044C44838 +:1011E0005050242C549C84060A0A08010044C44828 +:1011F0005050283444889C060A0A080100C4244838 +:1012000030D0242C549C84060A0A080100101000D7 +:1012100010106084848478060E0E080100601800A7 +:10122000003048488484FC84848484060E0E0801BF +:1012300000186000003048488484FC84848484065C +:101240000E0E080100304800003048488484FC84B9 +:10125000848484060E0E080100649800003048481B +:101260008484FC84848484060E0E080100484800AF +:10127000003048488484FC84848484060E0E08016F +:1012800000304830003048488484FC8484848407DB +:101290000A0A0801003E509090FE909090909E06A1 +:1012A0000C0C0801FE78848480808080848478100F +:1012B00060060E0E08010060180000FC808080F8B7 +:1012C00080808080FC060E0E08010018600000FC83 +:1012D000808080F880808080FC060E0E080100303F +:1012E000480000FC808080F880808080FC060E0E24 +:1012F00008010048480000FC808080F880808080E1 +:10130000FC050E0E08020060180000F820202020C6 +:1013100020202020F8050E0E08020030C00000F842 +:101320002020202020202020F8050E0E080200603A +:10133000900000F82020202020202020F8050E0E0C +:1013400008020090900000F820202020202020207B +:10135000F8070A0A08000078444242F24242424436 +:1013600078060E0E0801006498000084C4C4A4A48A +:1013700094948C8C84060E0E08010060180000788E +:10138000848484848484848478060E0E0801001882 +:1013900060000078848484848484848478060E0EBB +:1013A0000801003048000078848484848484848424 +:1013B00078060E0E08010064980000788484848406 +:1013C0008484848478060E0E080100484800007862 +:1013D00084848484848484847806050508010284D6 +:1013E00048304884060C0C0801FF0474888C9494DF +:1013F000A4A4C444B880060E0E08010060180000C2 +:1014000084848484848484848478060E0E08010095 +:101410001860000084848484848484848478060E24 +:101420000E0801003048000084848484848484840D +:101430008478060E0E0801004848000084848484E5 +:10144000848484848478070E0E08010018600000EC +:1014500082824444281010101010060B0B08010063 +:101460008080F088848488F0808080060A0A0801E1 +:101470000070888890B0888484A498060C0C0801B9 +:1014800000601800007884047C84848C74060C0C42 +:10149000080100186000007884047C84848C740641 +:1014A0000C0C080100304800007884047C84848C93 +:1014B00074060C0C080100649800007884047C8495 +:1014C000848C74060C0C08010048480000788404E1 +:1014D0007C84848C74060D0D0801003048300000B7 +:1014E0007884047C84848C740708080801007C924A +:1014F000127E9090927C060A0A0801FE7884808011 +:10150000808084781060060C0C08010060180000D0 +:10151000788484FC80808478060C0C0801001860B4 +:101520000000788484FC80808478060C0C0801001C +:1015300030480000788484FC80808478060C0C0895 +:10154000010048480000788484FC80808478050C81 +:101550000C080200C030000060202020202020F86D +:10156000050C0C08020030C0000060202020202064 +:1015700020F8050C0C08020060900000602020207C +:10158000202020F8050C0C0802009090000060203C +:101590002020202020F8060C0C08010064182844A4 +:1015A000047C848484848478060C0C08010064988C +:1015B0000000B8C4848484848484060C0C08010070 +:1015C000601800007884848484848478060C0C0875 +:1015D0000100186000007884848484848478060C78 +:1015E0000C08010030480000788484848484847866 +:1015F000060C0C08010064980000788484848484BC +:101600008478060C0C080100484800007884848423 +:1016100084848478060707080101300000FC00007C +:1016200030060A0A0801FF04788C9494A4A4C478B4 +:1016300080060C0C080100601800008484848484F7 +:10164000848C74060C0C08010018600000848484EB +:101650008484848C74060C0C0801003048000084DB +:1016600084848484848C74060C0C0801004848002F +:10167000008484848484848C74060E0E0801FE1811 +:1016800060000084848484844C34040478050C0C49 +:101690000802FE8080F088888890A0C08080800644 +:1016A0000E0E0801FE4848000084848484844C3473 +:1016B00004047800701C262311241FBECFEFD8E04D +:1016C000DEBFCDBF11E0A0E0B1E0EEEDFEE402C070 +:1016D00005900D92AE3AB107D9F724E0AEEAB1E039 +:1016E00001C01D92AC3EB207E1F71BE0CBE5DBE0A9 +:1016F00004C02197FE010E946125CA35D107C9F7B0 +:101700000E94A51D0C9462270C940000089580E0AF +:1017100008958091870490918804009739F1209171 +:101720009A04FC01211123C03596E491E0939B04B7 +:10173000FC013C96E491E0939C0480919B04082E6C +:10174000000C990B20919C04821B910927FD939515 +:1017500020919D04203441F0829FC001112426E095 +:10176000969587952A95E1F780939E0408952130F8 +:1017700039F43F96E491E0939B04FC017096DACF34 +:101780003D96E491E0939B04FC013E96D3CF0895EF +:101790000895AF92BF92CF92DF92EF92FF920F9394 +:1017A0001F93CF93DF936C017B018B01040F151FF7 +:1017B000EB015E01AE18BF08C017D10759F069915F +:1017C000D601ED91FC910190F081E02DC6010995C3 +:1017D000892B79F7C501DF91CF911F910F91FF9070 +:1017E000EF90DF90CF90BF90AF900895FC01538DA4 +:1017F000448D252F30E0842F90E0821B930B5417EB +:1018000010F0CF96089501970895FC01918D828D77 +:10181000981761F0A28DAE0FBF2FB11D5D968C9110 +:10182000928D9F5F9F73928F90E008958FEF9FEF4F +:101830000895FC01918D828D981731F0828DE80F0B +:10184000F11D858D90E008958FEF9FEF0895FC01C5 +:10185000918D228D892F90E0805C9F4F821B910992 +:101860008F739927089584EC93E00E94270C21E060 +:10187000892B09F420E0822F089580E090E0892BE5 +:1018800029F00E94330C81110C9400000895FC0192 +:10189000A48DA80FB92FB11DA35ABF4F2C91848DD1 +:1018A00090E001968F739927848FA689B7892C932E +:1018B000A089B1898C91837080648C93938D848D81 +:1018C000981306C00288F389E02D80818F7D808384 +:1018D0000895EF92FF920F931F93CF93DF93EC0144 +:1018E00081E0888F9B8D8C8D98131AC0E889F989C7 +:1018F000808185FF15C09FB7F894EE89FF896083CA +:10190000E889F98980818370806480839FBF81E04A +:1019100090E0DF91CF911F910F91FF90EF9008958C +:10192000F62E0B8D10E00F5F1F4F0F731127E02E67 +:101930008C8D8E110CC00FB607FCFACFE889F9899F +:10194000808185FFF5CFCE010E94470CF1CFEB8D52 +:10195000EC0FFD2FF11DE35AFF4FF0829FB7F89473 +:101960000B8FEA89FB8980818062CFCFCF93DF9391 +:10197000EC01888D8823B9F0AA89BB89E889F989A7 +:101980008C9185FD03C0808186FD0DC00FB607FCDC +:10199000F7CF8C9185FFF2CF808185FFEDCFCE010F +:1019A0000E94470CE9CFDF91CF910895833081F0F9 +:1019B00028F4813099F08230A9F008958730A9F099 +:1019C0008830C9F08430B1F4809180008F7D03C0ED +:1019D000809180008F7780938000089584B58F7701 +:1019E00084BD089584B58F7DFBCF8091B0008F7743 +:1019F0008093B00008958091B0008F7DF9CF1F9340 +:101A0000CF93DF93282F30E0F901EC54FF4F8491FE +:101A1000F901E051FF4FD491F901E452FF4FC49115 +:101A2000CC23A9F0162F81110E94D60CEC2FF0E0E8 +:101A3000EE0FFF1FEE52FF4FA591B4918FB7F894B0 +:101A4000EC91111108C0D095DE23DC938FBFDF919C +:101A5000CF911F910895DE2BF8CFCF93DF9390E0C5 +:101A6000FC01E051FF4F249184529F4FFC0184916F +:101A70008823C9F090E0880F991FFC01E655FF4FBD +:101A8000A591B491FC01EE52FF4FC591D491611123 +:101A90000DC09FB7F8948C91209582238C938881F8 +:101AA000282328839FBFDF91CF910895623051F49E +:101AB0009FB7F8943C91822F809583238C93E88183 +:101AC0002E2BEFCF8FB7F894EC912E2B2C938FBF4A +:101AD000EACF3FB7F89480914E0390914F03A091C5 +:101AE0005003B091510326B5A89B05C02F3F19F0B4 +:101AF0000196A11DB11D3FBFBA2FA92F982F88278E +:101B0000BC01CD01620F711D811D911D42E0660F68 +:101B1000771F881F991F4A95D1F708958F929F923A +:101B2000AF92BF92CF92DF92EF92FF924B015C0196 +:101B30000E94690D6B017C010E94690D6C197D0981 +:101B40008E099F09683E734081059105A8F321E045 +:101B5000821A9108A108B10888EEC80E83E0D81E49 +:101B6000E11CF11C81149104A104B10429F7FF9038 +:101B7000EF90DF90CF90BF90AF909F908F9008959F +:101B80002FB7F89460914A0370914B0380914C03F6 +:101B900090914D032FBF0895DC011696ED91FC91B5 +:101BA000179712968C91481B477081E090E001C016 +:101BB000880F4A95EAF7E60FF11D3081222319F0CC +:101BC000832B8083089580958323FBCFFB01418184 +:101BD000DC0112962C911297421768F013962C9103 +:101BE0001397241740F0608115962C91621718F412 +:101BF00024810C94CC0D0895FC0180819281980F72 +:101C000092832181921760F494819F5F94839381E2 +:101C1000890F821710F08FEF820F838381E0089580 +:101C200080E00895FC0112828081815083831482B8 +:101C30000895DB01ED91FC9109940F931F93CF93CD +:101C4000DF931F92CDB7DEB7009185041091860413 +:101C5000E091B404F091B50482E0099530E020E011 +:101C60004AE0B80183E894E00E94190E182FE09131 +:101C7000B404F091B50483E00995E091B404F091C7 +:101C8000B50480E009951123B9F160918504709144 +:101C900086049E012F5F3F4F46E483E894E00E9454 +:101CA000190E898180938304609185047091860464 +:101CB0009E012F5F3F4F47E483E894E00E94190E96 +:101CC000898180938404609185047091860430E05A +:101CD00020E048E483E894E00E94190E80938E048B +:101CE000609185047091860426EB34E047E183E837 +:101CF00094E00E94190E11E0812F0F90DF91CF9197 +:101D00001F910F910895CF93DF938091BC048111AF +:101D100005C081E08093BC040E941D0EC091850423 +:101D2000D0918604E091B404F091B50482E0099565 +:101D3000E091B404F091B50481E0099530E020E031 +:101D400044E1BE0183E894E00E94190E26EB34E0E2 +:101D500047E1BE0183E894E00E94190EE091B404CB +:101D6000F091B50480E0DF91CF9109940F931F9318 +:101D7000CF93E0919104F0919204309719F083E8A9 +:101D800094E009950091850410918604E091B404D3 +:101D9000F091B50482E00995E091B404F091B504A6 +:101DA00081E0099530E020E045E1B80183E894E066 +:101DB0000E94190EC82F882341F026EB34E047E13A +:101DC000B80183E894E00E94190EE091B404F09108 +:101DD000B50480E009958C2FCF911F910F91089544 +:101DE0000B96FC01849108950A96FC018491089554 +:101DF000FC01849108950E94F80E882321F082301E +:101E000011F083E0089586E00895FC01E60FF11DCE +:101E1000849190E0982F88273196E4918E0F911D40 +:101E2000089568E00C94050F66E00C94050F2EE908 +:101E30003FE0009709F40895F9013197F1F7019710 +:101E4000F8CFCF93DF9300D0CDB7DEB720ED37E0EA +:101E50003A8329839091BC00982311F081E00FC050 +:101E600029813A81232B81F48091BF0381FDF6CF34 +:101E70008091BE0381110DC091E09093BE030F903D +:101E80000F90DF91CF91089529813A812150310936 +:101E9000DFCF80E0F4CF84EA8093BC0061E080E88B +:101EA0000E94210F811102C080E008958091B90045 +:101EB000887F883051F0803141F08091BE038111DC +:101EC000F3CF82E08093BE03EFCF88E78093BB001F +:101ED00084E88093BC0062E080E80E94210F8823A0 +:101EE00019F38091BF0381FD05C08091B900887FFF +:101EF000883119F781E0089584E98093BC0064E09B +:101F000080E10C94210F8093BB0084E88093BC0097 +:101F100063E080E80E94210F8823A1F08091BF0335 +:101F200081FD0DC08091B900887F883241F0809199 +:101F3000BE03811106C092E09093BE03089581E034 +:101F4000089580E008951092BE0308958093BF0322 +:101F50001092B90084FF05C08CE08093B8000C9407 +:101F6000A30F88E4FACFCF93DF93FC0123A52223AC +:101F700089F0EC010E944B0F811104C080E0DF91D9 +:101F8000CF9108958EA1811107C00E94830F8823ED +:101F9000A9F31BA681E0F3CF80E4F7CF0F931F9343 +:101FA000CF93DF93C62FD42F8901633001F138F42A +:101FB000613099F0623009F449C0C1E012C0663066 +:101FC00029F1673091F16530C1F70E94B30F81119B +:101FD00017C00E947C0FC0E004C0FC0186A50E94CF +:101FE000A60F8C2FDF91CF911F910F910895FC01C7 +:101FF00016A221E023A74111E0CF0E947C0FDDCF84 +:102000008D2F0E94830F8111D8CFE3CF0E94B30F91 +:102010008823F9F2DD2389F2F80181918F010E9472 +:10202000830F8823B1F2D150F5CF0E94B30F8823DC +:1020300081F2DD2311F2F80184910E94830FC82FF1 +:10204000882379F20F5F1F4FD150F3CFFC0146A3D5 +:1020500021E023A7B2CFDB011496ED91FC9130E093 +:1020600020E065E00994DB011496ED91FC9130E0ED +:1020700020E062E00994DB011496ED91FC9130E0E0 +:1020800020E063E00994CF92DF92EF92FF920F93EA +:102090001F93CF93DF938C017B016A0180E0F601EF +:1020A000C491811110C081E0CF3F49F04C2FB7019E +:1020B000C8010E942B10882309F444C080E0BFEFC0 +:1020C000CB1ADB0AECCF4FEFCF3F89F3CE3FD9F1EC +:1020D000C03FA0F7C03E38F04C2F4F70B701C80189 +:1020E0000E943310EBCFC03D38F04C2F4F70B7013A +:1020F000C8010E943B10E2CFC03CF8F0D701149613 +:10210000ED91FC9130E020E040E064E0C8010995E9 +:10211000C295C07FCE5FD0E0CE010E94170FD701DD +:102120001496ED91FC9130E020E041E064E0C801BC +:102130000995CE010E94170FC1CFC7FDBFCF8C2FCD +:1021400090E0F8CF80E0DF91CF911F910F91FF9049 +:10215000EF90DF90CF900895AF92BF92CF92DF9231 +:10216000FF920F931F93CF93DF936C018B01F42E9B +:10217000E90180E1481709F47EC0841778F1AAE0EC +:102180004A1709F461C0BFE04B1709F47FC0F8019A +:1021900002811381F2E3FF1609F4DDC0FF1508F494 +:1021A0008EC085E1F81609F4DBC0A7E1FA1609F440 +:1021B000ECC0B4E1FB1265C0D8011696ED91FC911C +:1021C000179715968C918E0F9F2F911D11928E1738 +:1021D0009F07E1F7C8010E94120E53C0E1E14E17BC +:1021E00009F451C0F5E14F13D2CFFB01A280B380B7 +:1021F0004CE750E0C6010E944310D50114964C9163 +:10220000406BB801C6010E942B1041E0B801C60125 +:102210000E943310F50126813781D8011496ED9183 +:10222000FC91D50115964C9166E0C6010995811186 +:102230001CC080E0DF91CF911F910F91FF90DF9044 +:10224000CF90BF90AF900895DB011496ED91FC9173 +:1022500030E020E042E061E0C601099544E850E04A +:10226000B801C6010E94431092CF40E0B801C601F8 +:102270000E943B108CCF43E750E0B801C6010E949A +:10228000431081E0D7CF48E650E0F7CF41E0C601E8 +:102290000E943B1040E0B801C6010E94331041E8A3 +:1022A000B801C6010E942B104881B801C6010E94E6 +:1022B0002B1040E0B801C6010E943B10E2CFE6E4DB +:1022C000FE1609F46CC0F7E4FF1609F46DC08BE349 +:1022D000F812D7CF99818B8138E0390F813031F0F6 +:1022E000833011F0392F02C0392F985021E0D801E6 +:1022F00013964C91491708F420E041E0391708F093 +:1023000040E091E0F8015281351708F490E0322F57 +:10231000342B932319F4242309F4B3CFFA80D12C5E +:10232000C12C843048F490E0FC01E05EFE4FC08098 +:10233000845E9E4FDC01DC90F7FE04C0BE01C80144 +:102340000E94E60D88818C0D888389818D0D89839B +:10235000FF0C91F796CFBE01C8010E94E60D91CF08 +:10236000C8010E94FC0D882309F463CFD80116969A +:10237000ED91FC91179715968C918E0F9F2F911DC3 +:1023800011928E179F07E1F77CCF1882F8018281A6 +:102390008983858181508A8383818B8372CFD80121 +:1023A00015968C9188836DCFF8018181FBCF2091A8 +:1023B000D802260F3327331F21323105ECF4209148 +:1023C0002103FC0190E080E0243069F082E0089570 +:1023D000A091D8022191AC0148545D4FA40FB52FB4 +:1023E000B11D2C930196861798F38091D802680F3F +:1023F0006093D80280E0089581E00895109221034F +:1024000081E0809320031092FB0261E082E10E9450 +:10241000FF0C61E083E10E94FF0CE9EBF0E08081BA +:102420008E7F808380818D7F808388E48093B80055 +:1024300085E48093BC000895CF93DF9391E090935F +:10244000B7028823B9F0C091B800D091BA0080914A +:10245000BC008A7B8093BC0060E082E10E94FF0C9C +:1024600060E083E10E94FF0C0E94FE11D093BA004D +:10247000C093B800DF91CF9108950895E09159037A +:1024800080915803E81730F4F0E0E956FD4F808161 +:1024900090E008958FEF9FEF0895909159038091F8 +:1024A00058032FEF3FEF981748F4E92FF0E0E95673 +:1024B000FD4F208130E09F5F90935903C90108953B +:1024C0008091580390915903891B990B0895CF92DD +:1024D000DF92EF92FF920F931F93CF93DF937C01D4 +:1024E000CB018A0120912703222389F0EB016B01A4 +:1024F000C40ED51ECC15DD0569F06991D701ED91AB +:10250000FC910190F081E02DC7010995F3CF642F74 +:102510000E94D711C801DF91CF911F910F91FF90B9 +:10252000EF90DF90CF900895CF93DF931F92CDB7B8 +:10253000DEB76983209127032223F9F02091560307 +:10254000203258F021E030E0FC013383228390E018 +:1025500080E00F90DF91CF91089580915703E82F8D +:10256000F0E0E85DFC4F998190838F5F8093570383 +:102570008093560381E090E0ECCF61E0CE010196BC +:102580000E94D711F7CFCF92DF92EF92FF920F9375 +:102590001F93CF93DF93FC01C48121E02093270395 +:1025A000C093480310925703109256038385682BFB +:1025B00081E694E00E949412D0915603D13208F043 +:1025C00092C00E94690D6B017C01809121038111F1 +:1025D00065C082E08093210381E0809320038FEF28 +:1025E00080931F0310921E03D0931D03A8E2B3E053 +:1025F000EDEFF2E080E0D81385C01092FC028091EC +:10260000FC02CC0FC82BC093FC028091FB028130EE +:1026100009F07CC01092FB020E94690D6B017C01E5 +:102620008091FC028093BB0080912303909124034E +:10263000A0912503B0912603892B8A2B8B2B99F02F +:102640000E94690D0091230310912403209125031A +:10265000309126036C197D098E099F09061717070B +:1026600028073907E0F18091BC0083FDD9CF85ECC4 +:102670008093BC000E94690D6B017C018091210355 +:10268000823009F445C080911F038F3F61F1809132 +:102690001F03803241F180911F0325C080912303E5 +:1026A00090912403A0912503B0912603892B8A2BB6 +:1026B0008B2B09F48ACF0E94690D0091230310919E +:1026C000240320912503309126036C197D098E097E +:1026D0009F09061717072807390708F076CF80915A +:1026E00022030E941C12109257031092560310925C +:1026F0002703DF91CF911F910F91FF90EF90DF9013 +:10270000CF9008959D9191938F5F75CF85EEB0CF57 +:102710008091230390912403A0912503B091260377 +:10272000892B8A2B8B2B09F4A9CF0E94690D00916C +:1027300023031091240320912503309126036C1963 +:102740007D098E099F09061717072807390708F022 +:1027500095CFC5CF2091C2033091C3032817390705 +:1027600071F49091C0038091C103981741F0E091FA +:10277000C003F0E0E95AFD4F808190E008958FEFAB +:102780009FEF0895EF92FF920F931F93CF93DF93E4 +:10279000DC015C96ED90FC905D97E114F10479F416 +:1027A00081E090E013969C938E93129790E080E0E6 +:1027B000DF91CF911F910F91FF90EF900895519667 +:1027C000ED91FC91529750968C915097982F90953F +:1027D0000FB75E962C915E97122F127021FD6095B7 +:1027E000F8942081112319F1282B2083E7012197E8 +:1027F000F1F728E0462F50E0308160FF1AC0382BF7 +:102800003083E7012197F1F7BA017595679521505B +:1028100089F7112381F08081892380830FBF5C9623 +:102820008D919C910197F1F781E090E0C1CF292330 +:10283000DCCF3923E5CF9081892BEFCF2091C203E4 +:102840003091C3032817390761F48091C1032091A7 +:10285000C00390E0805C9F4F821B91098F73992782 +:10286000089590E080E008952091C2033091C30361 +:1028700028173907B9F49091C0038091C1039817C4 +:1028800089F0E091C003F0E0E95AFD4F808120918A +:10289000C00330E02F5F3F4F2F7333272093C003D7 +:1028A00090E008958FEF9FEF0895E091C203F091BB +:1028B000C303E817F90769F4A389B4899C91858952 +:1028C000809589238C931092C3031092C20381E0F8 +:1028D000089580E008951092D8041092D7041092C1 +:1028E000D6041092D5041092D4041092D3048DE92A +:1028F00091E09093DA048093D9049091C9049631C1 +:1029000008F046C02DEB30E03093D4042093D3047C +:102910002BE931E03093D6042093D5042CE231E04A +:102920003093D8042093D7042091680084E0983035 +:1029300048F031E09E3008F430E081E001C0880FBB +:102940003A95EAF7822B809368002DE630E09830C4 +:1029500050F02BE630E09E3030F02CE630E096313F +:1029600010F030E020E03093D1042093D004292FE0 +:1029700030E09830C0F581E001C0880F9A95EAF701 +:102980008093D2048091D9049091DA040197F1F7F1 +:102990008091D7049091D804892B21F18091C203B2 +:1029A0009091C30324E08D3B9207E1F0009711F072 +:1029B0000E9455148091DB048E7F8093DB0410927B +:1029C000C1031092C0038DEB94E09093C3038093F6 +:1029D000C203E091D004F091D10480819091D2049F +:1029E000892B808308959E3040F42850310981E07E +:1029F00001C0880F2A95EAF7C3CF2E503109F7CFCF +:102A0000CF92DF92EF92FF92CF93DF93DC01179684 +:102A1000CC911797D0E06111DC2F18962C91189764 +:102A200030E0220F331F28533F4F50E040E0F901C0 +:102A300085919491FC01F080BA0190E080E0EF2D47 +:102A4000EC23ED1310C04F5F5F4F1D96CD90DD90CE +:102A5000ED90FC9050976C157D058E059F0538F321 +:102A60006FEF7FEFCB01DF91CF91FF90EF90DF9081 +:102A7000CF9008958F929F92AF92BF92CF92DF92A4 +:102A8000EF92FF920F931F93CF93DF93CDB7DEB7F3 +:102A9000C054D1400FB6F894DEBF0FBECDBF8C013D +:102AA0000E94C00DF801C184D284E384F4849B01A8 +:102AB000AC012C193D094E095F0969017A0130ED1D +:102AC000C31637E0D306E104F104A8F48189C05CA1 +:102AD000DE4F0FB6F894DEBF0FBECDBFDF91CF91B2 +:102AE0001F910F91FF90EF90DF90CF90BF90AF902C +:102AF0009F908F900895618772878387948714824F +:102B0000138212821182108262E085810E942D0D53 +:102B100061E070E080E090E00E948E0D61E0F801DD +:102B200085810E942D0D60E0F80185810E94FF0CD7 +:102B3000F80186818551823028F58BE291E1019779 +:102B4000F1F762E0F80185810E942D0DF80182897C +:102B500090E08230910538F0880F991F880F991FF7 +:102B600005970197F1F7F89460E0C8010E940015FD +:102B70006F3F7F4F8F4F9F4F61F4F801118A789418 +:102B800080E0A5CF64E170E080E090E00E948E0DCF +:102B9000D8CF61E0C8010E9400156F3F7F4F8F4F73 +:102BA0009F4F59F39E012F5F3F4F79015E013FEB2D +:102BB000A31A3EEFB30A670160E0C8010E94001546 +:102BC000F601608371838283938361E0C8010E9470 +:102BD0000015F6016483758386839783F8E0CF0E32 +:102BE000D11CCA14DB0441F7789430E020E0F701EF +:102BF00080809180A280B3804481558166817781F5 +:102C0000FFEF8F169F06AF06BF0631F04F3F8FEFE5 +:102C100058076807780719F4F801118AB1CFF9014C +:102C200083E0F595E7958A95E1F7E00FF11F808144 +:102C3000880F84169506A606B706F0F080832F5FEE +:102C40003F4FF8E0EF0EF11C2832310581F6F80114 +:102C5000448120818181280F3327331F8281280FEF +:102C6000311D8381820F932F911D992748171906D3 +:102C700099F681E0818B2BCF8160E0CF682F84ECC7 +:102C800093E00C94690C0F931F93CF93DF938B0108 +:102C9000D82FC92F82E00E943E16C801AD2FBC2F4D +:102CA00080932E0290932F02A0933002B0933102B2 +:102CB0000E943E16812F0E943E168D2F0E943E16C6 +:102CC0008C2FDF91CF911F910F910C943E168FEFB7 +:102CD0000E943E1685E50C943E163F924F925F92FD +:102CE0006F927F928F929F92AF92BF92CF92DF921C +:102CF000EF92FF920F931F93CF93DF93EC01B62EC9 +:102D0000FCAC9BAC6C0124E0C20ED11CE98DFA8DA9 +:102D1000C6010995882E08851985C8010E94F80EFC +:102D2000E82E888599850E94FB0E682E81E0772425 +:102D30007A94E81202C02FE0722E888599850E944D +:102D4000F40EE82E888599850E94F00EA82E8885BD +:102D500099850E94110FE0E6EB1578F4009769F071 +:102D6000080F191F91E6E92EAB14C0F41C8A1F8AC4 +:102D7000188E1D8A1E8A80E0A2C0888599850E94CF +:102D8000140FF0E4FB1538F4009729F0080F191F11 +:102D900081E4E82EE9CF0F5E1F4FE6CFAE1430F38B +:102DA000862D90E0F80124912F3F31F40F5F1F4FE3 +:102DB000AE14E1F2E394F6CFBE1074C08885998515 +:102DC0000E94F80E98012F5F3F4FF801882319F0F9 +:102DD000823009F050C084918F8BF9012491288FA3 +:102DE000F8013396E491EC8BF8013496E491ED8B85 +:102DF000F8013596E491EE8B0115110509F4BBCF6E +:102E0000888599850E94FB0E388D7F2C731A9E89C8 +:102E1000791A780C9FEF930F970D28AD4AAD47159F +:102E200008F449C0921718F4971508F047C02F8985 +:102E30006D88690C9FEF920F960D4FA959AD5615ED +:102E400008F454C0941718F4961508F037C0080F0A +:102E5000111D295F522E569456945694432E470CBA +:102E60005E01F0E2AF0EB11C852C912C741431F18F +:102E7000362C780151C08491982F9F7092509E8B70 +:102E800082958F708D8BF9012491822F8F70888F9E +:102E900022952F702F8BF8013296E491E295EF7016 +:102EA000EC8BAACF3296E491E721E80FF92FF11DC0 +:102EB0000E0F1F1F7DCF921708F0B6CF8C899BADE8 +:102EC000890F8BAF81E090E0DF91CF911F910F913F +:102ED000FF90EF90DF90CF90BF90AF909F908F903A +:102EE0007F906F905F904F903F900895941708F0F7 +:102EF000ABCFE4CFF70184916E817F8138A279A2B4 +:102F00001BA28AA395014BE3C6010E94190EFFEF95 +:102F1000EF1AFF0A28E0320E8E2D801B851550F324 +:102F2000080D191D7394A2CF089590E080E00895D4 +:102F30000F931F93CF938C01C62F0E94C3126C2F47 +:102F40006460C8010E94C3126C2F6B7FC8010E948D +:102F5000C31283EC90E00197F1F7CF911F910F918D +:102F600008950F931F93CF93DF938C01D62FC42F17 +:102F7000607F642B0E94981780E1D89FB0011124D4 +:102F80006C2BC801DF91CF911F910F910C94981772 +:102F9000CF93DF93CDB7DEB728970FB6F894DEBF97 +:102FA0000FBECDBF98E0E4E1F1E0DE0111960190A3 +:102FB0000D929A95E1F79091E404961710F46FEF53 +:102FC000690F262F30E0220F331F41E050E04C0FF5 +:102FD0005D1F240F351FF9016081680F606840E0B4 +:102FE0008CED94E028960FB6F894DEBF0FBECDBFEF +:102FF000DF91CF910C94B11741E00E94B11781E0AD +:1030000090E00895FB0101900020E9F73197AF01AE +:10301000461B570BDC01ED91FC910280F381E02D02 +:1030200009946EE771E084EC93E00C9402188FEF42 +:103030000E943E1685E50E943E160C9411184F9290 +:103040005F926F927F928F929F92AF92BF92CF9238 +:10305000DF92EF92FF920F931F93CF93DF93CDB741 +:10306000DEB7A1970FB6F894DEBF0FBECDBF8C01BF +:103070006B01770FEE08FF08F7FE49C0DC01ED9108 +:10308000FC910190F081E02D6DE209955C01222711 +:103090003327A9012C193D094E095F0919A2FE0128 +:1030A000B1967F019AE0492E512C612C712CCA01F6 +:1030B000B901A30192010E949724605DD7016E932C +:1030C0007D01211531054105510589F790E080E02A +:1030D000109721F0BD01C8010E9402188A0D9B1DA6 +:1030E000A1960FB6F894DEBF0FBECDBFDF91CF9192 +:1030F0001F910F91FF90EF90DF90CF90BF90AF9016 +:103100009F908F907F906F905F904F900895A70150 +:10311000960119A2FE01B1967F018AE0882E912CBA +:10312000A12CB12CCA01B901A50194010E949724D8 +:10313000605DD7016E937D01211531054105510573 +:1031400089F790E080E0109759F2BD01C8010E9414 +:103150000218C6CFFC0124813581FB0144815581D1 +:1031600024173507E1F4FC0180819181FB01608126 +:1031700071810097D1F061157105A1F4232BC1F085 +:10318000FC01808190E008C0232B91F0FB0180813D +:1031900090E091958195910921E0892B09F020E03B +:1031A000822F08950E945227F7CF6115710561F7AC +:1031B00021E0F6CFFC0180819181009711F00C9401 +:1031C000032608950F931F93CF93DF93EC0188811B +:1031D0009981009759F02A813B812617370730F0F3 +:1031E00081E0DF91CF911F910F9108958B016F5F67 +:1031F0007F4F0E948C26009759F0998388831B8308 +:103200000A832C813D81232B59F7FC011082E8CFE2 +:1032100080E0E7CFEF92FF920F931F93CF93DF935E +:1032200000D0CDB7DEB78C0169831A82FC01E4803F +:10323000F580FFEFEF1AFF0AB7010E94E21888231A +:1032400081F0F8012081318184819581BE016F5F19 +:103250007F4F820F931F0E945B27F801F582E48263 +:1032600081E00F900F90DF91CF911F910F91FF9010 +:10327000EF900895EF92FF920F931F93CF93DF93F8 +:10328000EC017B018A01BA010E94E2182881398190 +:10329000811114C02115310519F0C9010E940326BE +:1032A000198218821D821C821B821A82CE01DF9134 +:1032B000CF911F910F91FF90EF9008951D830C8384 +:1032C000B701C9010E945B27F1CFFC011182108276 +:1032D000138212821582148250E040E060E871E0AF +:1032E0000C943A1950E040E060E871E08DE694E01B +:1032F0000C943A19CF93DF93EC01FB0186179707E3 +:1033000049F0608171816115710541F044815581F9 +:103310000E943A19CE01DF91CF9108958881998159 +:10332000009711F00E940326198218821D821C82C8 +:103330001B821A82EFCF85ED8093BC00809123031E +:1033400090912403A0912503B09126030796A11D17 +:10335000B11D23E0B695A795979587952A95D1F746 +:103360002091BC0024FD03C01092210308954091D8 +:103370002303509124036091250370912603452B6C +:10338000462B472B69F30097A105B10541F02AE2CE +:103390002A95F1F700C00197A109B109E1CF809109 +:1033A00022030C941C121F920F920FB60F9211243D +:1033B0002F933F934F935F936F937F938F939F933D +:1033C000AF93BF93EF93FF9384EC93E00E94470C7D +:1033D000FF91EF91BF91AF919F918F917F916F91ED +:1033E0005F914F913F912F910F900FBE0F901F90C3 +:1033F00018951F920F920FB60F9211242F938F934F +:103400009F93EF93FF93E091D403F091D5038081D4 +:10341000E091DA03F091DB0382FD1BC09081809183 +:10342000DD038F5F8F732091DE03821741F0E091FF +:10343000DD03F0E0EC53FC4F958F8093DD03FF91AB +:10344000EF919F918F912F910F900FBE0F901F9032 +:1034500018958081F4CF1F920F920FB60F9211240E +:103460002F933F938F939F93AF93BF9380914A0382 +:1034700090914B03A0914C03B0914D0330914903BF +:1034800023E0230F2D3758F50196A11DB11D209380 +:10349000490380934A0390934B03A0934C03B0934A +:1034A0004D0380914E0390914F03A0915003B09132 +:1034B00051030196A11DB11D80934E0390934F03BC +:1034C000A0935003B0935103BF91AF919F918F91FF +:1034D0003F912F910F900FBE0F901F90189526E8E7 +:1034E000230F0296A11DB11DD2CF1F920F920FB6CE +:1034F0000F9211242F933F934F935F936F937F937A +:103500008F939F93AF93BF93EF93FF938091B900F5 +:10351000887F803609F44AC0F0F5883209F4A7C0E4 +:1035200018F5803109F49BC0B8F4882309F4F9C078 +:10353000883009F494C0FF91EF91BF91AF919F91B2 +:103540008F917F916F915F914F913F912F910F904C +:103550000FBE0F901F901895883109F488C08032F3 +:1035600051F780931F0314C0803409F49DC040F4C8 +:103570008033B9F38833F9F680931F0385ECB0C02C +:10358000803509F485C0883509F496C0883499F6E9 +:103590000E949B19D0CF883909F48CC038F5883740 +:1035A00029F050F4883611F0803729F683E08093B3 +:1035B00021031092FA0257C0883809F47BC0803981 +:1035C00019F0803809F0B7CF8091FA02803208F004 +:1035D00071C0E091FA0281E08E0F8093FA0280912F +:1035E000BB00F0E0E652FD4F80833DC0803B39F0E8 +:1035F000E0F4803A09F479C0883A09F09CCF84E07D +:10360000809321031092D9021092D802E0915203C4 +:10361000F091530309958091D80281110FC081E088 +:103620008093D8021092B80209C0803C09F4A6CF5A +:10363000883C09F4A3CF883B09F07DCFE091D90203 +:1036400081E08E0F8093D902F0E0E854FD4F808135 +:103650008093BB009091D9028091D80229C08091BB +:10366000FC028093BB0085EC8093BC0064CF9091FA +:103670001E0380911D03981758F5E0911E0381E009 +:103680008E0F80931E03F0E0E350FD4F8081E9CF61 +:10369000E0911E0381E08E0F80931E038091BB009A +:1036A000F0E0E350FD4F808390911E0380911D0355 +:1036B0009817C8F285E8D8CFE0911E0381E08E0FFD +:1036C00080931E038091BB00F0E0E350FD4F8083A8 +:1036D0008091200381115CCF81E08093FB0284EA1A +:1036E0008093BC001092210326CF85EC8093BC0010 +:1036F000109221038091FA02803230F4E091FA02B4 +:10370000F0E0E652FD4F10826091FA0270E0E09125 +:103710005403F09155038AED92E009951092FA0254 +:103720000ACF10921F0334CF1F920F920FB60F9241 +:1037300011242F933F934F935F936F937F938F93B6 +:103740009F93AF93BF93EF93FF93E091C203F091E8 +:10375000C303309749F0A685B7858585968D91FF7F +:1037600014C09C918923A1F4FF91EF91BF91AF9177 +:103770009F918F917F916F915F914F913F912F9189 +:103780000F900FBE0F901F9018959C91892361F7A1 +:10379000A389B4899C918589809589238C93868996 +:1037A00097890197F1F7608D718DA685B78555854D +:1037B00038E020E0CB010197F1F7822F90E095955A +:1037C0008795282F4C91452309F02068315091F7B7 +:1037D000868D81FD20958091C10390E001968F73C5 +:1037E00099273091C003381799F0A091C103B0E038 +:1037F000A95ABD4F2C938093C103828D938D01975D +:10380000F1F7A389B4898C919589892B8C93ACCFDE +:10381000868D8160868FF1CF1F920F920FB60F9227 +:1038200011242F933F938F939F93EF93FF93809156 +:10383000560287FF1FC0109285001092840080916D +:1038400056028F5F809356028091560287FF04C014 +:10385000809156028C30ACF080918400909185006C +:10386000049680349C4990F1809184009091850069 +:1038700004962EC08091560287FFE1CF80915602B8 +:10388000DECF2091840030918500E09156028E2F8A +:10389000EE0F990BFC01EE0FFF1FE80FF91FEE5C16 +:1038A000FD4F81819281820F931F909389008093B5 +:1038B000880080915602FF91EF919F918F913F91E7 +:1038C0002F910F900FBE0F901F90189580E49CE9E8 +:1038D00090938900809388008FEF80935602EBCFFE +:1038E0001092C7031092C60388EE93E0A0E0B0E008 +:1038F0008093C8039093C903A093CA03B093CB03EA +:1039000024E331E03093C5032093C40325EC30E079 +:103910003093D1032093D00324EC30E03093D303D1 +:103920002093D20320EC30E03093D5032093D403CE +:1039300021EC30E03093D7032093D60322EC30E023 +:103940003093D9032093D80326EC30E03093DB0387 +:103950002093DA031092DD031092DE031092DF034E +:103960001092E00310926404109263048093650443 +:1039700090936604A0936704B093680426E431E052 +:1039800030936204209361041092DF041092DE04ED +:1039900026E731E03093DD042093DC0427E2209316 +:1039A000E00420E12093E50422E02093E604109255 +:1039B000E7041092C0041092BF048093C104909356 +:1039C000C204A093C304B093C40484E691E090932E +:1039D000BE048093BD041092D4041092D3041092BC +:1039E000D6041092D5041092D8041092D7041092E5 +:1039F000DA041092D9046091DB046E7F6D7F6093CE +:103A0000DB046695617081E0682783E00E94FF0C0B +:103A100061E083E00E942D0DE3EFF0E0E491E0939C +:103A2000CD04EFEDF0E0E491F0E0EE0FFF1FEE5279 +:103A3000FF4F859194919093CF048093CE0460E0E2 +:103A400082E00E942D0D8091DB0481FD04C061E0C5 +:103A500082E00E94FF0C82E08093C904E2EFF0E074 +:103A6000E491E093CA04EEEDF0E0E491F0E0EE0FB3 +:103A7000FF1FE853FF4F859194919093CC0480935E +:103A8000CB04109282041092810488E591E0909317 +:103A9000800480937F041092BA041092BB041092A9 +:103AA000BC04109288041092870410928A04109229 +:103AB000890410928C0481E080938B0482E28093CD +:103AC0008D041092920410929104E6EAF4E084EBE3 +:103AD00094E02FEF21938E179F07E1F781E0809309 +:103AE000A30427E83BE03093990420939804809343 +:103AF0009A0410929B0410929C0480E480939D048D +:103B000010929E0486E89BE09093B5048093B404E1 +:103B100088E091E0909386048093850482E180930D +:103B2000B1040E941D0E88E591E09093800480937B +:103B30007F0489E794E00E94651983E794E00E947E +:103B400065198DE694E00C946519CF93DF93CDB79A +:103B5000DEB7A5970FB6F894DEBF0FBECDBF789441 +:103B600084B5826084BD84B5816084BD85B5826082 +:103B700085BD85B5816085BD80916E008160809333 +:103B80006E0010928100809181008260809381009C +:103B900080918100816080938100809180008160AC +:103BA000809380008091B10084608093B100809107 +:103BB000B00081608093B00080917A00846080932F +:103BC0007A0080917A00826080937A0080917A00F6 +:103BD000816080937A0080917A00806880937A0077 +:103BE0001092C100E091D403F091D50382E080836C +:103BF000E091D003F091D1031082E091D203F091D3 +:103C0000D30380E180831092DC03E091D803F0912C +:103C1000D90386E08083E091D603F091D7038081B9 +:103C200080618083E091D603F091D7038081886022 +:103C30008083E091D603F091D703808180688083F0 +:103C4000E091D603F091D70380818F7D80830E941D +:103C50006B1410925903109258031092570310924C +:103C600056030E94FE1187EC9BE0909353038093D0 +:103C7000520388EC9BE090935503809354030E9479 +:103C8000FE111092E1048091E604823018F098E071 +:103C90009093E1048093E40462E370E080E090E0BC +:103CA0000E948E0D6091E7048CED94E00E94C31297 +:103CB00068EE73E080E090E00E948E0D60E38CED92 +:103CC00094E00E9498171BE4E12E16E4F12EC70140 +:103CD0000197F1F760E38CED94E00E949817C7011B +:103CE0000197F1F760E38CED94E00E94981783E56B +:103CF00092E00197F1F760E28CED94E00E94981752 +:103D00006091E104606240E08CED94E00E94B117A4 +:103D100084E08093E20440E06CE08CED94E00E944B +:103D2000B11740E061E08CED94E00E94B1178BE3A5 +:103D3000E82E8FE1F82EC7010197F1F782E080931A +:103D4000E30440E066E08CED94E00E94B11740E0AF +:103D500062E08CED94E00E94B117C7010197F1F782 +:103D600088E08093E70460E08CED94E00E94C31249 +:103D700040E061E08CED94E00E94B117C70101972B +:103D8000F1F760E080E00E94C81761E871E08CED17 +:103D900094E00E94021861E085E00E94C81761E982 +:103DA00071E08CED94E00E94021814E061E0812F34 +:103DB0000E942D0D60E0812F0E94FF0C1F5F1E30BE +:103DC000A9F768EC70E080E090E00E948E0DCE01D3 +:103DD00042969AA389A3B4E02B2EB1E03B2E11E0CA +:103DE000AEE7CA2EA3E0DA2E84EC93E00E94270C03 +:103DF000892B09F4D1C184EC93E00E94270C18169A +:103E0000190694F784EC93E00E94050C90919303BB +:103E1000853581F591112EC0809192038F3F21F459 +:103E20001093910310939303809191038F5F8433D8 +:103E3000C0F580939103809193038823A9F2809128 +:103E400090038111D1CF80919103843068F2109258 +:103E5000930320916103B09062038B2D90E0309129 +:103E60006003323009F47EC00CF5313039F1109224 +:103E70009103BACF809392039923B1F2E091910319 +:103E8000E23039F480939003F0E0E45AFC4F8083F1 +:103E9000CBCFE330C8F3909190039150909390036F +:103EA000F3CF1092910310929303C5CF333009F4EE +:103EB00078C03430E1F60E941718D9CF293069F460 +:103EC0000E946B1460E082E00E942D0D8091A0039F +:103ED0008111CDCF1093A003CACF30E02A30310535 +:103EE00029F40E946B1461E083E0EECFA2E0BA12E5 +:103EF0000DC08DEB94E00E9455141092A0030E9417 +:103F000072191092A7031092A603B1CF83309105C6 +:103F100069F48DEB94E00E9455141092A0030E9466 +:103F200072191092A9031092A803A1CF2330310572 +:103F300039F490939B0380939A031093A10397CF36 +:103F40001092A1031092940310929503109296037D +:103F500010929703880F991FFC01EE55FC4F1182B8 +:103F6000108285CF213031F0283009F0A4CF0E9493 +:103F7000C00DA1CF880F991FFC01EE55FC4F808129 +:103F80009181892B41F481E090E09183808361E00D +:103F90008B2D0E942D0D609163038B2D0E94FF0CD1 +:103FA0008ACF263009F470C02A3009F4E1C02430E9 +:103FB00009F081CFCE0101960E9465197CE5E72EBC +:103FC00073E0F72ED70117966C91161624F4CE01E4 +:103FD00001960E940A19B2E0EB0EF11CEEE7EE1614 +:103FE000E3E0FE0679F769E774E0CE0101960E94EE +:103FF000AA18882341F063E774E0CE0101960E947D +:10400000AA1881110AC06B2D80E00E94C8176CE9C4 +:1040100071E08CED94E00E9402186B2D80E00E940C +:10402000C81780916303813031F5809165038093D7 +:104030005A038091660380935B0360915A037091E9 +:104040005B038CED94E00E941F18BE016F5F7F4FF1 +:1040500089E794E0BB2041F0F1E0BF1207C0BE0148 +:104060006F5F7F4F83E794E00E947A19CE0101963B +:104070000E94DA1820CF4D815E8169817A818CEDB2 +:1040800094E00E94C90BE1CFA0906303B090650358 +:10409000CE0101960E9465196CE5E62E63E0F62ECE +:1040A000D7011B966C91161624F4CE0101960E943E +:1040B0000A19B2E0EB0EF11CCE14DF0489F78091EF +:1040C0006703813079F58091690380935A03809169 +:1040D0006A0380935B03E0905A03F0905B030E94B5 +:1040E000830E80918704909188048450914061F000 +:1040F00030928804209287040E94890B87E89BE015 +:104100009093990480939804A092BA04B092BB044F +:10411000B7018FE794E00E941F180E94B60E81112C +:10412000E0CFA4CF0E94830E8091870490918804F1 +:104130008450914061F030928804209287040E945C +:10414000890BE7E8FBE0F0939904E0939804A092D0 +:10415000BA04B092BB044D815E8169817A818FE798 +:1041600094E00E94C90B0E94B60E8111DDCF7ECF74 +:10417000ACE5B3E0FE013196BF0117968C9117971D +:104180008193129689A19AA1E817F907B1F78DEBEF +:1041900094E00E9402188FCE8DEB94E00E941E14D2 +:1041A0005C01892B89F08DEB94E00E941E14181697 +:1041B000190694F78DEB94E00E943414682F8DE675 +:1041C00094E00E940A19E8CF6FE070E080E090E090 +:1041D0000E948E0D4AEA842E43E0942E54E0E52E90 +:1041E000F12CD401CD90DD904D01C114D10409F022 +:1041F0003AC0EBA260E08E2D0E942D0D0E94671642 +:10420000F701EC54FF4F8491F701E051FF4F4490C8 +:10421000F701E452FF4F1491112399F081110E948C +:10422000D60CE12FF0E0EE0FFF1FE853FF4FA591F2 +:10423000B491EC914E2291E080E009F490E0C92E17 +:10424000D82EB601DD0C880B990B0E9443230E94E7 +:1042500043168BA10E943E1681E00E943E160E94EA +:1042600011180E941718BFEFEB1AFB0AEEE0EE16CA +:10427000F10409F0B6CF84E291E09CA38BA310E097 +:10428000ABA1BCA18D919D91BCA3ABA3892B09F0DF +:1042900068C024E1E22EF12C44244394B12FB06491 +:1042A000BDA3EDA1E0937C0080917A0080648093AF +:1042B0007A0080917A0086FDFCCF60917800709141 +:1042C0007900072E000C880B990B0E944323D62EF1 +:1042D000872E982EC92E442021F0062F772E682E87 +:1042E000592E2DEC3CEC4CEC5DE3602F772D862DA8 +:1042F000952D0E94A2232B013C0126E636E646E6D8 +:104300005FE36D2D782D892D9C2D0E94A2239B01AA +:10431000AC01C301B2010E94BA24062F772E682E89 +:10432000592EF1E0EF1AF108412C09F0BACF0E94A2 +:104330006716602F772D862D952D0E942625072E36 +:10434000000C880B990B0E9443230E944316812F77 +:104350000E943E1682E00E943E160E9411180E94A2 +:1043600017181F5F163009F08BCF8091A1038823A7 +:1043700009F4C3C080909A0390909B038E828BE0D7 +:104380008F83C4019927FC01E051FF4FE491E88736 +:10439000FC01E452FF4FE491E98780E89EE3A0E04E +:1043A000B0E08E879F87A88BB98B62E0882D0E9432 +:1043B0002D0D0E94C00D605D7740810991096A87CB +:1043C0007B878C879D8787E38B8B6EE170E080E035 +:1043D00090E00E948E0DCE0101960E943A1588232E +:1043E00009F45EC08F818C3009F4CEC048F48B3064 +:1043F000F1F0C12CD12C80ECE82E8FE7F82E3FC0D5 +:1044000085518230B0F71B81612F70E0762F6627CF +:1044100066277F778C81682B90E080E00E944123A3 +:104420002DEC3CEC4CEC5DE30E94A223C7C06B81F9 +:1044300070E090E080E00E9441236B017C011C81D0 +:1044400017FF0AC0AC019B0160E070E080E89FEBC1 +:104450000E94B9246B017C011F70612F70E090E015 +:1044600080E00E9443232DEC3CEC4CEC5DE30E9489 +:10447000A223A70196010E94BA246B017C01A70127 +:104480009601C701B6010E945C25811109C020E098 +:1044900030E0A901C701B6010E943C23811197C0F9 +:1044A000809198039091990301969093990380933A +:1044B0009803449764F0109294031092950310921D +:1044C00096031092970310929903109298030E94FA +:1044D0006716609194037091950380919603909173 +:1044E00097030E944316882D0E943E1683E00E9487 +:1044F0003E160E9411180E9417188091A00388236D +:1045000009F491C00E94C00DC0909C03D0909D03FF +:10451000E0909E03F0909F036C197D098E099F091E +:104520006C3271408105910508F07DC00E946716CC +:104530001A8219821C821B821E821D826DE674E023 +:10454000CE0101960E947A191D81E12EFE8084E041 +:104550000E943E16812F0E943E16AE14BF040CF03E +:1045600041C08D819E81A816B906D0F589819A81B6 +:104570000097B1F18A0D9B1DFC0180810E943E16BF +:10458000FFEFAF1ABF0AE9CF1B81612F70E090E007 +:1045900080E00E9441236B017C016C816F7070E0B0 +:1045A00090E080E00E9443232DEC3CEC4CEC5DE37A +:1045B0000E94A223A70196010E94BA246B017C01EC +:1045C00017FF5DCFF7FAF094F7F8F09458CFC09248 +:1045D0009403D0929503E0929603F092970373CFE1 +:1045E00080E0CCCFCE0101960E94DA1882E00E94D2 +:1045F0003E1689E00E943E160E9411180E9417186C +:104600006AE070E080E090E00E948E0D80E090E033 +:10461000892B09F4E4CB0E94330C882309F4DFCB07 +:104620000E940000DCCB50E040E060E871E08DE6E5 +:1046300094E00E943A190E94C00D60939C0370930D +:104640009D0380939E0390939F03DACF8DE694E0C1 +:104650000E94DA1883E794E00E94DA1889E794E070 +:104660000E94DA1884E691E09093BE048093BD0422 +:104670008DEB94E00C9455140E947E2308F481E0A5 +:104680000895E89409C097FB3EF490958095709545 +:1046900061957F4F8F4F9F4F9923A9F0F92F96E98E +:1046A000BB279395F695879577956795B795F11103 +:1046B000F8CFFAF4BB0F11F460FF1BC06F5F7F4FA0 +:1046C0008F4F9F4F16C0882311F096E911C07723B2 +:1046D00021F09EE8872F762F05C0662371F096E8BB +:1046E000862F70E060E02AF09A95660F771F881F8A +:1046F000DAF7880F9695879597F90895990F00082E +:10470000550FAA0BE0E8FEEF16161706E807F907A3 +:10471000C0F012161306E407F50798F0621B730B3E +:10472000840B950B39F40A2661F0232B242B252BBF +:1047300021F408950A2609F4A140A6958FEF811D62 +:10474000811D08950E94B5230C9426240E941824EC +:1047500038F00E941F2420F0952311F00C940F24B0 +:104760000C94152411240C945A240E94372470F3BD +:10477000959FC1F3950F50E0551F629FF001729F06 +:10478000BB27F00DB11D639FAA27F00DB11DAA1F15 +:10479000649F6627B00DA11D661F829F2227B00D62 +:1047A000A11D621F739FB00DA11D621F839FA00DED +:1047B000611D221F749F3327A00D611D231F849F3D +:1047C000600D211D822F762F6A2F11249F57504094 +:1047D0009AF0F1F088234AF0EE0FFF1FBB1F661F0F +:1047E000771F881F91505040A9F79E3F510580F0D8 +:1047F0000C940F240C945A245F3FE4F3983ED4F3B6 +:10480000869577956795B795F795E7959F5FC1F77B +:10481000FE2B880F911D9695879597F9089597F926 +:104820009F6780E870E060E008959FEF80EC089556 +:1048300000240A941616170618060906089500247F +:104840000A9412161306140605060895092E0394F9 +:10485000000C11F4882352F0BB0F40F4BF2B11F46D +:1048600060FF04C06F5F7F4F8F4F9F4F089557FDCC +:104870009058440F551F59F05F3F71F04795880FCE +:1048800097FB991F61F09F3F79F087950895121665 +:1048900013061406551FF2CF4695F1DF08C0161611 +:1048A00017061806991FF1CF8695710561050894C2 +:1048B0000895E894BB2766277727CB0197F90895D9 +:1048C0002F923F924F925F926F927F928F929F9220 +:1048D000AF92BF92CF92DF92EF92FF920F931F930E +:1048E000CF93DF93CDB7DEB7CA1BDB0B0FB6F894BF +:1048F000DEBF0FBECDBF09942A88398848885F84FF +:104900006E847D848C849B84AA84B984C884DF806F +:10491000EE80FD800C811B81AA81B981CE0FD11D53 +:104920000FB6F894DEBF0FBECDBFED010895A1E232 +:104930001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F19 +:10494000FF1FA217B307E407F50720F0A21BB30B64 +:10495000E40BF50B661F771F881F991F1A9469F7E0 +:1049600060957095809590959B01AC01BD01CF013C +:1049700008955058BB27AA270E94D1240C942624BE +:104980000E94182438F00E941F2420F039F49F3F21 +:1049900019F426F40C9415240EF4E095E7FB0C941E +:1049A0000F24E92F0E94372458F3BA1762077307C0 +:1049B0008407950720F079F4A6F50C9459240EF499 +:1049C000E0950B2EBA2FA02D0B01B90190010C011F +:1049D000CA01A0011124FF27591B99F0593F50F437 +:1049E000503E68F11A16F040A22F232F342F44278F +:1049F000585FF3CF469537952795A795F040539587 +:104A0000C9F77EF41F16BA0B620B730B840BBAF056 +:104A10009150A1F0FF0FBB1F661F771F881FC2F7C1 +:104A20000EC0BA0F621F731F841F48F487957795D5 +:104A30006795B795F7959E3F08F0B0CF9395880F8F +:104A400008F09927EE0F9795879508950E942D25D8 +:104A50006894B1110C945A2408950E943F2488F060 +:104A60009F5798F0B92F9927B751B0F0E1F0660F32 +:104A7000771F881F991F1AF0BA95C9F714C0B13073 +:104A800091F00E945924B1E008950C945924672FA5 +:104A9000782F8827B85F39F0B93FCCF386957795A2 +:104AA0006795B395D9F73EF490958095709561958B +:104AB0007F4F8F4F9F4F08950E947E23880B990B45 +:104AC0000895EE0FFF1F0590F491E02D09940F93C8 +:104AD0001F93CF93DF938230910510F482E090E032 +:104AE000E091EA04F091EB0430E020E0B0E0A0E0D7 +:104AF000309799F42115310509F44AC0281B390B68 +:104B000024303105D8F58A819B816115710589F1C1 +:104B1000FB0193838283FE0111C040815181028198 +:104B2000138148175907E0F04817590799F410976F +:104B300061F012960C93129713961C933296CF0144 +:104B4000DF91CF911F910F9108950093EA04109384 +:104B5000EB04F4CF2115310551F04217530738F01B +:104B6000A901DB019A01BD01DF01F801C1CFEF010D +:104B7000F9CF9093EB048093EA04CDCFFE01E20FCE +:104B8000F31F819391932250310939832883D7CF22 +:104B90002091E8043091E904232B41F42091100185 +:104BA000309111013093E9042093E80420910E0123 +:104BB00030910F012115310541F42DB73EB74091D9 +:104BC000120150911301241B350BE091E804F09180 +:104BD000E904E217F307A0F42E1B3F0B281739074F +:104BE00078F0AC014E5F5F4F2417350748F04E0F49 +:104BF0005F1F5093E9044093E804819391939FCF02 +:104C0000F0E0E0E09CCFCF93DF930097E9F0FC0168 +:104C1000329713821282A091EA04B091EB04ED0165 +:104C200030E020E01097A1F420813181820F931FA2 +:104C30002091E8043091E9042817390709F061C090 +:104C4000F093E904E093E804DF91CF910895EA013D +:104C5000CE17DF07E8F54A815B819E0141155105BA +:104C6000B1F7E901FB83EA8349915991C40FD51F3C +:104C7000EC17FD0761F4808191810296840F951FE6 +:104C8000E90199838883828193819B838A83F0E001 +:104C9000E0E012968D919C9113970097B9F52D91B4 +:104CA0003C911197CD010296820F931F2091E80449 +:104CB0003091E9042817390739F6309751F51092E9 +:104CC000EB041092EA04B093E904A093E804BCCF8B +:104CD000D383C28340815181840F951FC817D907A0 +:104CE00061F44E5F5F4F88819981480F591F51834E +:104CF00040838A819B81938382832115310509F04A +:104D0000B0CFF093EB04E093EA049ECFFD01DC0109 +:104D1000C0CF13821282D7CFB0E0A0E0E2E9F6E282 +:104D20000C9462248C01009751F4CB010E946725FA +:104D30008C01C801CDB7DEB7E0E10C947E24FC0104 +:104D4000E60FF71F9C0122503109E217F30708F420 +:104D50009DC0D901CD91DC911197C617D70798F066 +:104D6000C530D10530F3CE0104978617970708F3B5 +:104D7000C61BD70B2297C193D1936D937C93CF0120 +:104D80000E940326D6CF5B01AC1ABD0A4C018C0EE3 +:104D90009D1EA091EA04B091EB04512C412CF12C02 +:104DA000E12C109731F58091E8049091E904881581 +:104DB000990509F05CC04616570608F058C0809166 +:104DC0000E0190910F01009741F48DB79EB740916D +:104DD000120150911301841B950BE817F90708F095 +:104DE00055C0F093E904E093E804F901718360830E +:104DF000A0CF8D919C91119712966C90129713965B +:104E00007C901397A815B90559F56C0142E0C40EC2 +:104E1000D11CCA14DB0420F1AC014A195B09DA0188 +:104E20001296159780F06282738251834083D90174 +:104E30006D937C93E114F10471F0D7011396FC9308 +:104E4000EE93129776CF22968C0F9D1FF9019183D6 +:104E50008083F301EFCFF093EB04E093EA0469CF92 +:104E60004816590608F42C017D01D3019ACFCB01D5 +:104E70000E9467257C01009749F0AE01B8010E94AD +:104E80004927C8010E940326870153CF10E000E0A4 +:104E900050CFFB01DC0102C001900D924150504007 +:104EA000D8F70895FB01DC018D9101908019011064 +:104EB000D9F3990B0895FB01DC0101900D920020BC +:104EC000E1F708951BE0CBE5DBE004C0FE010E94A2 +:0E4ED00061252196CC35D107C9F7F894FFCFA4 +:104EDE00084000000080AE01AC100001CE0F0000B3 +:104EEE00EC0480000000400014005400000100FF9C +:104EFE000100FF00000000000000000000000000A4 +:104F0E0000000000690CC90BF60BB60C270C050C43 +:104F1E00190C000000009412671295173D126012D2 +:104F2E004D123E12000000006D16C90B9517941716 +:104F3E0000000000C213C90B95173D121E14341445 +:104F4E00AA1300000000FC17C90B951794170D0A41 +:104F5E00004574636F6D70616E7920426F6172648B +:104F6E00007769746820456E7472790020202020C5 +:0E4F7E002020202020202020202020200000A5 +:00000001FF diff --git a/app/firmwares/runcoding.hex b/app/firmwares/runcoding.hex index 80139bc1c..a12f123fd 100644 --- a/app/firmwares/runcoding.hex +++ b/app/firmwares/runcoding.hex @@ -1,799 +1,880 @@ :100000000C9464000C948C000C948C000C948C0068 -:100010000C948C000C948C000C948C000C94D707DE -:100020000C948C000C948C000C948C000C94AA09F9 +:100010000C948C000C948C000C948C000C9429098A +:100020000C948C000C948C000C948C000C94FC0AA6 :100030000C948C000C948C000C948C000C948C0010 -:100040000C948D070C948C000C9459080C94330874 +:100040000C94DF080C948C000C94AB090C9485097B :100050000C948C000C948C000C948C000C948C00F0 -:100060000C948B080C948C000200000000230026E6 -:1000700000290000000000240027002A00000000E2 -:1000800000250028002B00040404040404040402D6 -:100090000202020202030303030303010204081025 -:1000A00020408001020408102001020408102000F2 -:1000B0000000080002010000030407000000000027 -:1000C00000000000AB0A3C1511241FBECFEFD8E0A2 -:1000D000DEBFCDBF11E0A0E0B1E0EEE2F1E302C08F +:100060000C94DD090C948C00020000000024002791 +:10007000002A0000000000250028002B00000000DE +:100080000800020100000304070000000000000057 +:1000900000000000002300260029000404040404DA +:1000A0000404040202020202020303030303030125 +:1000B00002040810204080010204081020010204FC +:1000C00008102000FD0B571711241FBECFEFD8E0FA +:1000D000DEBFCDBF11E0A0E0B1E0EEE3F6E302C089 :1000E00005900D92AC3AB107D9F724E0ACEAB1E043 -:1000F00001C01D92A236B207E1F710E0C3E6D0E0DE -:1001000004C02197FE010E945117C236D107C9F7DA -:100110000E94E40B0C948A180C940000E0913204C5 -:10012000F09133048E179F0798F5309138043323EC +:1000F00001C01D92A537B207E1F710E0C3E6D0E0DA +:1001000004C02197FE010E94D919C236D107C9F750 +:100110000E94520D0C94121B0C940000E0914504B7 +:10012000F09146048E179F0798F530914B043323C6 :1001300061F0639FB0011124672F349FA001112447 -:10014000452F329F90011124232F30913E04E091DE -:100150003904F0913A0450913B0435131AC0DC0184 -:10016000AA0FBB1F8A0F9B1F8E0F9F1FE0913B049E -:10017000E80FF92FF11D6083E0913C04E80FF92F9F -:10018000F11D408330913D04830F911DFC012083BC +:10014000452F329F90011124232F30915104E091CB +:100150004C04F0914D0450914E0435131AC0DC014B +:10016000AA0FBB1F8A0F9B1F8E0F9F1FE0914E048B +:10017000E80FF92FF11D6083E0914F04E80FF92F8C +:10018000F11D408330915004830F911DFC012083A9 :100190000895880F991F880F991F8E0F9F1FFC01CC -:1001A000E30FF11D1082E2CF833081F028F481301B -:1001B00099F08230A9F008958730A9F08830C9F00D -:1001C0008430B1F4809180008F7D03C080918000E5 -:1001D0008F7780938000089584B58F7784BD0895CC -:1001E00084B58F7DFBCF8091B0008F778093B00076 -:1001F00008958091B0008F7DF9CF1F93CF93DF9347 -:10020000282F30E0F901E155FF4F8491F901E556BF -:10021000FF4FD491F901E957FF4FC491CC23A9F0C6 -:10022000162F81110E94D400EC2FF0E0EE0FFF1F7B -:10023000E358FF4FA591B4918FB7F894EC91111149 -:1002400008C0D095DE23DC938FBFDF91CF911F9143 -:100250000895DE2BF8CFCF93DF9390E0FC01E556B5 -:10026000FF4F249189579F4FFC0184918823D1F03F -:1002700090E0880F991FFC01ED58FF4FA591B491B4 -:10028000FC01E358FF4FC591D49161110EC09FB797 -:10029000F8948C91E22FE0958E238C932881E223B1 -:1002A000E8839FBFDF91CF9108958FB7F894EC91C9 -:1002B000E22BEC938FBFF6CF3FB7F8948091EE021C -:1002C0009091EF02A091F002B091F10226B5A89BA7 -:1002D00005C02F3F19F00196A11DB11D3FBFBA2FD8 -:1002E000A92F982F8827BC01CD01620F711D811D98 -:1002F000911D42E0660F771F881F991F4A95D1F71D -:1003000008950F931F93CF93DF93CDB7DEB729974F -:100310000FB6F894DEBF0FBECDBF80913904909127 -:100320003A04892B09F47CC00E945C0100913F04CF -:1003300010914004209141043091420460177107EC -:100340008207930740F460933F04709340048093C6 -:1003500041049093420400913F0410914004209185 -:10036000410430914204601B710B820B930B6C3281 -:10037000714081059105C0F2F89480913404909108 -:1003800035049A838983E0913904F0913A04DF01BE -:1003900011968081898790913004E0914304F09117 -:1003A000440480914504992309F445C09081982B19 -:1003B00098879081809589238F838F818C8388E0B3 -:1003C0008B8358856F8149853B812C8189819A81F6 -:1003D000508347FD252F3A952083262F39F0441F5F -:1003E00000C000006083000000C0F2CF38E04D91F3 -:1003F00060830000019761F7F0934404E0934304A5 -:1004000049873B832C839A83898378940E945C017B -:1004100060933F047093400480934104909342049E -:1004200029960FB6F894DEBF0FBECDBFDF91CF91F6 -:100430001F910F9108959081982B988790818095B6 -:1004400089238F838F818E8388E08D8358856F8188 -:1004500049853D812E8189819A81508347FD252FD1 -:1004600000C000C0208300C000C000C000C000C0A9 -:1004700060830000262F3A9541F0441F000000C021 -:1004800000C000C000C000C0E8CF38E04D9100C0FF -:10049000608300C0019709F7F0934404E09343049C -:1004A00049873D832E83AFCF8F929F92AF92BF92A9 -:1004B000CF92DF92EF92FF924B015C010E945C01B0 -:1004C0006B017C010E945C016C197D098E099F09FA -:1004D000683E734081059105A8F321E0821A9108D6 -:1004E000A108B10888EEC80E83E0D81EE11CF11CFB -:1004F00081149104A104B10429F7FF90EF90DF90DB -:10050000CF90BF90AF909F908F90089590910001F1 -:1005100089130BC0E8E6F0E0E4919FEF90930001AF -:10052000E13049F028F0E23061F060E00C94FD0029 -:1005300010926E00FACF90916F009D7F90936F00A4 -:10054000F4CF909170009D7F9093700091E0909314 -:10055000B0009091B100987F94609093B100109298 -:10056000B300E3CFAF92BF92CF92DF92EF92FF92B0 -:100570000F931F93CF93DF936C017B018B01040FCB -:10058000151FEB015E01AE18BF08C017D10759F067 -:100590006991D601ED91FC910190F081E02DC601A9 -:1005A0000995892B79F7C501DF91CF911F910F91A3 -:1005B000FF90EF90DF90CF90BF90AF900895FC0137 -:1005C000538D448D252F30E0842F90E0821B930BB8 -:1005D000541710F0CF96089501970895FC01918D5E -:1005E000828D981761F0A28DAE0FBF2FB11D5D9661 -:1005F0008C91928D9F5F9F73928F90E008958FEF03 -:100600009FEF0895FC01918D828D981731F0828DB6 -:10061000E80FF11D858D90E008958FEF9FEF08950D -:10062000FC01918D228D892F90E0805C9F4F821B71 -:1006300091098F739927089582EF92E00E94100329 -:1006400021E0892B09F420E0822F089580E090E0DA -:10065000892B29F00E941C0381110C94000008953D -:10066000FC01A48DA80FB92FB11DA35ABF4F2C9127 -:10067000848D90E001968F739927848FA689B7891E -:100680002C93A089B1898C91837080648C93938D15 -:10069000848D981306C00288F389E02D80818F7DB8 -:1006A00080830895EF92FF920F931F93CF93DF9370 -:1006B000EC0181E0888F9B8D8C8D98131AC0E8899E -:1006C000F989808185FF15C09FB7F894EE89FF896D -:1006D0006083E889F98980818370806480839FBF0B -:1006E00081E090E0DF91CF911F910F91FF90EF900B -:1006F0000895F62E0B8D10E00F5F1F4F0F7311271B -:10070000E02E8C8D8E110CC00FB607FCFACFE88955 -:10071000F989808185FFF5CFCE010E943003F1CFAA -:10072000EB8DEC0FFD2FF11DE35AFF4FF0829FB7C9 -:10073000F8940B8FEA89FB8980818062CFCFCF93B9 -:10074000DF93EC01888D8823B9F0AA89BB89E889F9 -:10075000F9898C9185FD03C0808186FD0DC00FB69F -:1007600007FCF7CF8C9185FFF2CF808185FFEDCF1D -:10077000CE010E943003E9CFDF91CF910895089513 -:10078000089508952091F201260F3327331F213257 -:100790003105ECF420914102FC0190E080E024302E -:1007A00069F082E00895A091F2012191AC014E52CE -:1007B0005E4FA40FB52FB11D2C930196861798F3A9 -:1007C0008091F201680F6093F20180E0089581E06A -:1007D00008951092410281E08093400210921B0222 -:1007E00061E082E10E94FD0061E083E10E94FD0082 -:1007F000E9EBF0E080818E7F808380818D7F808334 -:1008000088E48093B80085E48093BC000895CF937A -:10081000DF9391E09093D1018823B9F0C091B800A3 -:10082000D091BA008091BC008A7B8093BC0060E0CC -:1008300082E10E94FD0060E083E10E94FD000E94D1 -:10084000E903D093BA00C093B800DF91CF91089527 -:100850000895E0911A0280911902E81730F4F0E04F -:10086000EF54FE4F808190E008958FEF9FEF089541 -:1008700090911A02809119022FEF3FEF981748F4D8 -:10088000E92FF0E0EF54FE4F208130E09F5F90931E -:100890001A02C90108958091190290911A02891BC8 -:1008A000990B0895CF92DF92EF92FF920F931F93CF -:1008B000CF93DF937C01CB018A0120914702222351 -:1008C00089F0EB016B01C40ED51ECC15DD0569F076 -:1008D0006991D701ED91FC910190F081E02DC70164 -:1008E0000995F3CF642F0E94C203C801DF91CF9115 -:1008F0001F910F91FF90EF90DF90CF900895CF93CD -:10090000DF931F92CDB7DEB7698320914702222380 -:10091000F9F020916A02203258F021E030E0FC0129 -:100920003383228390E080E00F90DF91CF91089590 -:1009300080914802E82FF0E0E75BFD4F99819083BA -:100940008F5F8093480280936A0281E090E0ECCF51 -:1009500061E0CE0101960E94C203F7CFCF92DF92F1 -:10096000EF92FF920F931F93CF93DF93FC01C4810B -:1009700021E020934702C09369021092480210922E -:100980006A028385682B8FE893E00E947F04D091F0 -:100990006A02D13208F092C00E945C016B017C01B6 -:1009A00080914102811165C082E08093410281E023 -:1009B000809340028FEF80933F0210923E02D093CB -:1009C0003D02A9E4B2E0EDE1F2E080E0D81385C099 -:1009D00010921C0280911C02CC0FC82BC0931C02E9 -:1009E00080911B02813009F07CC010921B020E9492 -:1009F0005C016B017C0180911C028093BB008091A3 -:100A0000430290914402A0914502B0914602892B85 -:100A10008A2B8B2B99F00E945C010091430210916C -:100A2000440220914502309146026C197D098E09DD -:100A30009F090617170728073907E0F18091BC00C6 -:100A400083FDD9CF85EC8093BC000E945C016B01D3 -:100A50007C0180914102823009F445C080913F02BF -:100A60008F3F61F180913F02803241F180913F02DE -:100A700025C08091430290914402A0914502B0911B -:100A80004602892B8A2B8B2B09F48ACF0E945C01AA -:100A90000091430210914402209145023091460298 -:100AA0006C197D098E099F09061717072807390752 -:100AB00008F076CF809142020E940704109248020B -:100AC00010926A0210924702DF91CF911F910F910D -:100AD000FF90EF90DF90CF9008959D9191938F5F5D -:100AE00075CF85EEB0CF8091430290914402A091E2 -:100AF0004502B0914602892B8A2B8B2B09F4A9CF92 -:100B00000E945C0100914302109144022091450231 -:100B1000309146026C197D098E099F090617170747 -:100B20002807390708F095CFC5CF90E080E00895F9 -:100B3000FC01EE0FFF1FE353FD4F20813181232B7A -:100B400039F421E030E03183208361E00C942B0103 -:100B50000895682F82EF92E00C9452030F931F9335 -:100B6000CF93DF938B01D82FC92F82E00E94A90574 -:100B7000C801AD2FBC2F8093AC019093AD01A09321 -:100B8000AE01B093AF010E94A905812F0E94A90573 -:100B90008D2F0E94A9058C2FDF91CF911F910F916E -:100BA0000C94A9058FEF0E94A90585E50C94A90571 -:100BB000CF92DF92EF92FF920F931F93CF93DF9329 -:100BC00000D0CDB7DEB769834A83880F991F0091A3 -:100BD000160410911704000F111FE0ECF3E09F01C1 -:100BE000205C33402017310714F41192F8CF29818B -:100BF000FC01E054FC4F21838A81808360E0809176 -:100C000014040E94FD001016110604F5015011098C -:100C1000F801E054FC4FE080D0901204C090100422 -:100C200088E0F82E6E2D661F6627661F8C2D0E94A9 -:100C3000FD00EE0C61E08D2D0E94FD0060E08D2D29 -:100C40000E94FD00FA94F110EDCFDDCF61E08091BC -:100C500014040F900F90DF91CF911F910F91FF908F -:100C6000EF90DF90CF900C94FD00EF92FF920F93E6 -:100C70001F93CF937C018C0183E0000F111F8A9595 -:100C8000E1F700531C4FC1E0F80111928F0140E0E1 -:100C90006C2FC7010E94D805CF5FC930A9F7CF914B -:100CA0001F910F91FF90EF9008950F931F93CF9393 -:100CB0008C01C62F0E94AE046C2F6460C8010E9494 -:100CC000AE046C2F6B7FC8010E94AE0483EC90E0F1 -:100CD0000197F1F7CF911F910F9108950F931F93F3 -:100CE000CF93DF938C01D62FC42F607F642B0E949B -:100CF000550680E1D89FB00111246C2BC801DF910B -:100D0000CF911F910F910C945506FC016681262FFF -:100D1000246026836C6040E00C946E06CF93DF93D2 -:100D2000CDB7DEB728970FB6F894DEBF0FBECDBFA4 -:100D300028E0EBE0F1E0DE01119601900D922A959A -:100D4000E1F7FC012085241710F44FEF420F50E02B -:100D5000440F551F21E030E02C0F3D1F420F531F61 -:100D6000FA012081620F606840E028960FB6F8947F -:100D7000DEBF0FBECDBFDF91CF910C946E0640E079 -:100D800061E00E946E068BE39FE10197F1F7089501 -:100D900041E00E946E0681E090E008950F931F935A -:100DA000CF93DF93EC0110921A0210921902109265 -:100DB000480210926A020E94E9038FEB93E090933D -:100DC00018028093170280EC93E0909316028093B0 -:100DD00015021D828A85823010F098E09D838887F5 -:100DE00062E370E080E090E00E9454026B85CE01E7 -:100DF0000E94AE0468EE73E080E090E00E9454022E -:100E000060E3CE010E9455060BE416E4C801019789 -:100E1000F1F760E3CE010E945506C8010197F1F792 -:100E200060E3CE010E94550683E592E00197F1F759 -:100E300060E2CE010E9455066D81606240E0CE0105 -:100E40000E946E0684E08E83CE010E948506CE014C -:100E50000E94BF0682E08F8340E066E0CE010E94E0 -:100E60006E0640E062E0CE010E946E068BE39FE1D9 -:100E70000197F1F7DF91CF911F910F91089549E00C -:100E800050E06FE971E00C94B20242E050E069EA90 -:100E900071E082EF92E00C94B2028FEF0E94A905FC -:100EA00085E50E94A9050C94450785ED8093BC005B -:100EB0008091430290914402A0914502B091460274 -:100EC0000796A11DB11D23E0B695A7959795879527 -:100ED0002A95D1F72091BC0024FD03C01092410255 -:100EE00008954091430250914402609145027091EF -:100EF0004602452B462B472B69F30097A105B10508 -:100F000041F02AE22A95F1F700C00197A109B10941 -:100F1000E1CF809142020C9407041F920F920FB60A -:100F20000F9211242F933F938F939F93AF93BF936F -:100F30008091EA029091EB02A091EC02B091ED0257 -:100F40003091E90223E0230F2D3758F50196A11DBA -:100F5000B11D2093E9028093EA029093EB02A093E3 -:100F6000EC02B093ED028091EE029091EF02A0911D -:100F7000F002B091F1020196A11DB11D8093EE0225 -:100F80009093EF02A093F002B093F102BF91AF9162 -:100F90009F918F913F912F910F900FBE0F901F90B7 -:100FA000189526E8230F0296A11DB11DD2CF1F92DE -:100FB0000F920FB60F9211242F933F934F935F938D -:100FC0006F937F938F939F93AF93BF93EF93FF9311 -:100FD0008091720290917302A0917402B091750297 -:100FE000892B8A2B8B2BD1F190916D02E0916E02AF -:100FF000F0916F02808189278083809172029091A5 -:101000007302A0917402B0917502181619061A069F -:101010001B069CF48091720290917302A09174025D -:10102000B09175020197A109B10980937202909362 -:101030007302A0937402B0937502FF91EF91BF9178 -:10104000AF919F918F917F916F915F914F913F9160 -:101050002F910F900FBE0F901F9018958091000157 -:101060000E948602EACF1F920F920FB60F921124B0 -:101070002F933F934F935F936F937F938F939F93A0 -:10108000AF93BF93EF93FF9382EF92E00E94300300 -:10109000FF91EF91BF91AF919F918F917F916F9150 -:1010A0005F914F913F912F910F900FBE0F901F9026 -:1010B00018951F920F920FB60F9211242F938F93B2 -:1010C0009F93EF93FF93E0910203F09103038081DC -:1010D000E0910803F091090382FD1BC0908180918B -:1010E0000B038F5F8F7320910C03821741F0E09107 -:1010F0000B03F0E0EE50FD4F958F80930B03FF91B3 -:10110000EF919F918F912F910F900FBE0F901F9095 -:1011100018958081F4CF1F920F920FB60F92112471 -:101120002F933F934F935F936F937F938F939F93EF -:10113000AF93BF93EF93FF938091B900887F803680 -:1011400009F44AC0F0F5883209F4A7C018F58031D7 -:1011500009F49BC0B8F4882309F4F9C0883009F475 -:1011600094C0FF91EF91BF91AF919F918F917F912B -:101170006F915F914F913F912F910F900FBE0F9004 -:101180001F901895883109F488C0803251F78093F8 -:101190003F0214C0803409F49DC040F48033B9F399 -:1011A0008833F9F680933F0285ECB0C0803509F4AE -:1011B00085C0883509F496C0883499F60E94550791 -:1011C000D0CF883909F48CC038F5883729F050F42D -:1011D000883611F0803729F683E08093410210921F -:1011E000140257C0883809F47BC0803919F0803860 -:1011F00009F0B7CF80911402803208F071C0E091FD -:10120000140281E08E0F809314028091BB00F0E005 -:10121000EC50FE4F80833DC0803B39F0E0F4803AD3 -:1012200009F479C0883A09F09CCF84E080934102A8 -:101230001092F3011092F201E0911702F09118025E -:1012400009958091F20181110FC081E08093F20134 -:101250001092D20109C0803C09F4A6CF883C09F461 -:10126000A3CF883B09F07DCFE091F30181E08E0FA1 -:101270008093F301F0E0EE52FE4F80818093BB003B -:101280009091F3018091F20129C080911C0280931A -:10129000BB0085EC8093BC0064CF90913E028091AE -:1012A0003D02981758F5E0913E0281E08E0F809341 -:1012B0003E02F0E0E35EFD4F8081E9CFE0913E0227 -:1012C00081E08E0F80933E028091BB00F0E0E35EF0 -:1012D000FD4F808390913E0280913D029817C8F2A5 -:1012E00085E8D8CFE0913E0281E08E0F80933E02E8 -:1012F0008091BB00F0E0E35EFD4F8083809140026F -:1013000081115CCF81E080931B0284EA8093BC0052 -:101310001092410226CF85EC8093BC0010924102CE -:1013200080911402803230F4E0911402F0E0EC502D -:10133000FE4F10826091140270E0E0911502F0916E -:10134000160284EF91E00995109214020ACF1092D0 -:101350003F0234CF1F920F920FB60F9211242F939A -:101360003F934F935F936F937F938F939F93AF932D -:10137000BF93CF93DF93EF93FF938091B001C09120 -:10138000BF03D0E087FF24C0109285001092840034 -:101390008091B0018F5F8093B0018091B001082EE1 -:1013A000000C990B8C179D0724F48091B0018C30B0 -:1013B000C4F18091840090918500049680349C490A -:1013C00008F47AC08091840090918500049676C0DC -:1013D0008091B001082E000C990B8C179D07C4F664 -:1013E000E091B0018E2FEE0F990BFC01EE0FFF1F65 -:1013F000E80FF91FE556FC4F808186FFC9CFE091C9 -:10140000B0018E2FEE0F990BFC01EE0FFF1FE80FBE -:10141000F91FE556FC4F808160E08F730E94FD004C -:10142000B7CF2091840030918500E091B0018E2FDC -:10143000EE0F990BFC01EE0FFF1FE80FF91FE556A9 -:10144000FC4F81819281820F931F9093890080933A -:101450008800E091B0018E2FEE0F990BFC01EE0F8A -:10146000FF1FE80FF91FE556FC4F808186FF11C072 -:10147000E091B0018E2FEE0F990BFC01EE0FFF1FD4 -:10148000E80FF91FE556FC4F808161E08F730E94E1 -:10149000FD00FF91EF91DF91CF91BF91AF919F91AF -:1014A0008F917F916F915F914F913F912F910F900D -:1014B0000FBE0F901F90189580E49CE990938900CF -:1014C000809388008FEF8093B001E3CFCF92DF92BB -:1014D000EF92FF920F931F93E82FF92F05C0015051 -:1014E00011092109310961F1908196239417B9F30B -:1014F00005C0015011092109310911F1908196238C -:101500009413F7CFC12CD12CE12CF12C0AC08FEF12 -:10151000C81AD80AE80AF80A0C151D052E053F0559 -:1015200079F080818623841791F36C2D7D2D8E2D8B -:101530009F2D1F910F91FF90EF90DF90CF90089516 -:1015400060E070E080E090E01F910F91FF90EF90DD -:10155000DF90CF900895CF93DF931092F502109211 -:10156000F40288EE93E0A0E0B0E08093F60290935E -:10157000F702A093F802B093F90223E731E0309329 -:10158000F3022093F20225EC30E03093FF02209327 -:10159000FE0224EC30E0309301032093000320ECA2 -:1015A00030E0309303032093020321EC30E03093CA -:1015B00005032093040322EC30E0309307032093CB -:1015C000060326EC30E030930903209308031092C1 -:1015D0000B0310920C0310920D0310920E03109245 -:1015E0009203109291038093930390939403A0939A -:1015F0009503B093960385E891E0909390038093D0 -:101600008F03E6E4F4E02EE534E04FEF68EB7BE097 -:101610008091BF038C3008F0D2C091E0980F909376 -:10162000BF03808390E0DC01AA0FBB1FA80FB91F86 -:10163000A556BC4F12967C936E93119733962E1736 -:101640003F0731F791E090933004109231041092EB -:1016500033041092320410923504109234042FEFA8 -:101660003FEF3093370420933604109238041092E1 -:101670003A041092390490933B0410923C0482E0A7 -:1016800080933D0490933E0410923F0410924004D6 -:1016900010924104109242041092270410922604E2 -:1016A00027E931E0309325042093240497E29093B6 -:1016B000280490E190932D0480932E0410922F041F -:1016C00010921B0410921A043093190420931804EA -:1016D0002FE320931C049093210480932204109202 -:1016E0002304CCE0D0E0D0931104C09310048BE02D -:1016F00090E090931304809312048AE090E090931A -:1017000015048093140481E090E090931704809373 -:10171000160461E08CE00E942B0161E080911204CC -:101720000E942B0161E0809114040E942B0161E072 -:10173000809114040E94FD00D0931104C093100402 -:10174000E0EDF3E080E194E011928E179F07E1F75E -:10175000D0E0C0E08091160490911704C817D90713 -:1017600084F540E06FE0CE010E94D8058091160418 -:1017700090911704C817D9072CF447E06BE0CE010D -:101780000E94D80540E069E0CE010E94D805809112 -:10179000160490911704C817D9071CF4CE010E94B3 -:1017A00035068091160490911704C817D9072CF4B8 -:1017B00040E06CE0CE010E94D8052196CBCF40835B -:1017C0003DCFDF91CF910895CF93DF9300D000D02C -:1017D000CDB7DEB7789484B5826084BD84B581606E -:1017E00084BD85B5826085BD85B5816085BD8091EC -:1017F0006E00816080936E00109281008091810064 -:10180000826080938100809181008160809381005B -:10181000809180008160809380008091B10084601D -:101820008093B1008091B00081608093B00080917E -:101830007A00846080937A0080917A00826080933D -:101840007A0080917A00816080937A0080917A009A -:10185000806880937A001092C100E0910203F091B9 -:10186000030382E08083E091FE02F091FF02108288 -:10187000E0910003F091010383E3808310920A0357 -:10188000E0910603F091070386E08083E091040372 -:10189000F0910503808180618083E0910403F091E1 -:1018A0000503808188608083E0910403F091050343 -:1018B000808180688083E0910403F091050380813A -:1018C0008F7D8083198261E089810E942B0160E015 -:1018D00089810E94FD0029812F5F29832E3099F78D -:1018E00068EC70E080E090E00E9454028AE090E0B2 -:1018F0000E9498058BE090E00E9498058CE090E0B3 -:101900000E949805809116049091170418161906E4 -:1019100034F441E06CE090E080E00E94D8058091D2 -:101920001604909117041816190634F448E06AE07A -:1019300090E080E00E94D8058091160490911704F1 -:101940001816190624F490E080E00E94350622243F -:101950002394312C82EF92E00E9410039A838983B2 -:10196000892B09F467C782EF92E00E9410031816D2 -:10197000190684F782EF92E00E94EE029091C7026E -:10198000853509F066C0911164C08091C6028F3F11 -:1019900029F481E08093C5028093C7028091C5023B -:1019A0008F5F843308F06DC08093C5028091C702B9 -:1019B000882381F28091C4028111CCCF8091C5022D -:1019C000843040F21092C702E0919502D0909602C6 -:1019D000ED2CF12C20919402223009F4A5C0233083 -:1019E00009F4E1C0213091F5E73009F06CC0609056 -:1019F00097026982862D90E03091CC02311146C069 -:101A00002093CC02F0920401E09203019093020132 -:101A100080930101F701EE0FFF1FE353FD4F318269 -:101A20002082880F991FFC01E353FD4F31822082F1 -:101A300061E08D2D0E942B0160E089810E942B01C5 -:101A400062E370E080E090E00E9454021092C502D0 -:101A500081CF8093C602992309F4A0CFE091C502FB -:101A6000E23039F48093C402F0E0E057FD4F808308 -:101A700095CFE330C8F39091C40291509093C40283 -:101A8000F3CF1092C5021092C70290CF409103018C -:101A9000509104012091010130910201E416F506F4 -:101AA00019F48217930791F2440F551FFA01E3537B -:101AB000FD4F11821082220F331FF901E353FD4FB6 -:101AC000118210829FCF2091030130910401C70140 -:101AD000880F991FE216F30639F020910101309129 -:101AE0000201E216F30681F41092CC021092C802B1 -:101AF0001092C9021092CA021092CB0283539D4FDA -:101B0000DC011D921C92A2CF1092CC021092C8024E -:101B10001092C9021092CA021092CB0283539D4FB9 -:101B2000FC011182108292CF8091030190910401F7 -:101B3000E816F90639F08091010190910201E8164A -:101B4000F90651F41092CC021092C8021092C90208 -:101B50001092CA021092CB02E150E53120F50E2E10 -:101B6000000CFF0BEA54F24F0C945117CB0DD30D20 -:101B7000D60D6110370ED30DD30D2B113611D30DA9 -:101B8000641171119A11B3129012D311D0126F1304 -:101B90007B13BE130914C7010E9498056091970238 -:101BA0008D2D0E94FD000E944D0750CFC7010E945D -:101BB000980510919702612E712C7A82698261E0FA -:101BC0008D2D0E942B01111102C060E0E9CF298107 -:101BD0003A812F3F310511F461E0E2CFF701E15581 -:101BE000FF4FE491E33039F150F4E130D1F0E230CD -:101BF000E9F029813A812038310574F7E6CFE730E2 -:101C000031F1E83061F1E430A1F780918000806229 -:101C100080938000E980FA80F0928B00E0928A0045 -:101C2000C2CF84B5806884BD17BDBDCF84B5806246 -:101C300084BD18BDB8CF80918000806880938000FB -:101C400069807A807092890060928800ACCF809120 -:101C5000B00080688093B0001093B300A4CF80914F -:101C6000B00080628093B0001093B4009CCFC70195 -:101C70000E9498058091970280936B028091980250 -:101C800080936C0260906B0270906C027C826B821D -:101C90008091990280936B0280919A0280936C02EA -:101CA00060906B0270906C027A826982161417043D -:101CB0000CF003C280910001D812CEC0E8E6F0E03B -:101CC000149117FD70CF61E08D2D0E942B0111231F -:101CD000B9F0EB80FC804701B12CA12C60E072E1EF -:101CE0008AE790E0A50197010E94701669017A01C8 -:101CF00061E0C61AD108E108F108123009F09AC172 -:101D00006B807C804301B12CA12C60E072E18AE7FA -:101D100090E0A50193010E94701629013A017A0111 -:101D2000690121E0C21AD108E108F1083FEFC316AA -:101D3000D104E104F10409F00CF44FC160E472E451 -:101D40008FE090E0A50194010E94701669017A016C -:101D500061E0C61AD108E108F108123009F0F3C0B9 -:101D600082E07FEFC716D104E104F10409F00CF41E -:101D70006CC060E970ED83E090E0A50194010E94E1 -:101D8000701669017A0181E0C81AD108E108F108EA -:101D900083E09FEFC916D104E104F10409F00CF4CB -:101DA00054C068E478EE81E090E0A50194010E94BF -:101DB000701669017A0161E0C61AD108E108F108DC -:101DC00084E07FEFC716D104E104F104F1F1ECF1F6 -:101DD00064E274EF80E090E0A50194010E94701627 -:101DE00069017A01E1E0CE1AD108E108F10885E045 -:101DF000BFEFCB16D104E104F10439F130F162E117 -:101E00007AE780E090E0A50194010E9470166901D4 -:101E10007A0191E0C91AD108E108F10886E0AFEF34 -:101E2000CA16D104E104F10481F078F07301620173 -:101E30009AE0F594E794D794C7949A95D1F731E056 -:101E4000C31AD108E108F10887E09091B100987FAA -:101E5000892B8093B100C8C08F3F09F0A4CED092E7 -:101E60000001E8E6F0E014911F3F09F49CCE113028 -:101E700031F150F0123009F442C017FD94CE61E008 -:101E80008D2D0E942B0125CF14BC15BC84B582601A -:101E900084BD85B5816085BDF701E957FF4FE491A9 -:101EA000F0E0EE0FFF1FE358FF4F85919491F7018B -:101EB000E556FF4FE491E093710210E004CF1092D9 -:101EC0008000109281008091810088608093810061 -:101ED00080918100816080938100F701E957FF4F75 -:101EE000E491F0E0EE0FFF1FE358FF4F85919491CE -:101EF000F701E556FF4FE491E0937002E4CE1092B3 -:101F0000B0001092B1008091B00082608093B00068 -:101F10008091B10081608093B100F701E957FF4FD4 -:101F2000E491F0E0EE0FFF1FE358FF4F859194918D -:101F300090936F0280936E02F701E556FF4FE49194 -:101F4000E0936D02C0CEAFEFCA16D104E104F104F4 -:101F500009F00CF46DC068E478EE81E090E0A50132 -:101F600094010E94701669017A01B1E0CB1AD10880 -:101F7000E108F10884E011113BCF8FEFC816D104BE -:101F8000E104F10409F014F483E02AC062E17AE785 -:101F900080E090E0A50194010E94701669017A0129 -:101FA000F1E0CF1AD108E108F10884E02FEFC21662 -:101FB000D104E104F104A1F098F0730162012AE078 -:101FC000F594E794D794C7942A95D1F721E0C21AE3 -:101FD000D108E108F10885E003C081E0111135CF97 -:101FE00095B5987F892B85BD2B813C81220F331FAE -:101FF000A981BA810E94571728EE33E040E050E0F3 -:102000000E949A161130B9F1123009F446C011112C -:10201000CACDC7BC20937A0230937B0240937C02E6 -:1020200050937D0280916E00826080936E00BBCDE4 -:1020300082E0D4CF91E0C114D10431E0E306F10491 -:1020400084F068E478EE81E090E0A50194010E94BC -:10205000701669017A0161E0C61AD108E108F10839 -:1020600093E0113009F0C0CF80918100887F892BE7 -:1020700080938100B9CFD0928900C09288002093CC -:1020800076023093770240937802509379028091E0 -:102090006F00826080936F0086CDC092B300209362 -:1020A00072023093730240937402509375028091D0 -:1020B000700082608093700076CD8D2D0E94860224 -:1020C00072CDC7010E94980500919702053B08F068 -:1020D0006ACDEEE7F2E090E080E021913191E216E6 -:1020E000F30651F0232B09F0AEC0FC01EE0FFF1FE9 -:1020F000E258FD4FF182E082FC01EE0FFF1FE80F76 -:10210000F91FEA5BFB4F1081818192811C3008F03E -:102110003FC061E08D2D0E942B01812F90E0AC012A -:10212000440F551FFA01E80FF91FE556FC4F7D2DAE -:102130007F73D72E2081207CD22AD08230E020E00D -:10214000F901EE0FFF1FE20FF31FE556FC4F608110 -:1021500066FD14C02F5F3F4F2C30310589F7109278 -:10216000800022E02093810010928500109284006C -:10217000B19A20916F00226020936F00840F951F09 -:10218000FC01E556FC4F80818064808390E080E014 -:10219000B8E5EB2EB2E0FB2EE91AF10897FDF394B7 -:1021A000EE0CFF1CEE0CFF1CA8E8B0E0A81BB10968 -:1021B00087FDB395AA0FBB1FAA0FBB1FBA83A983C4 -:1021C0004D01BB0FAA08BB0897010F2C000C440B54 -:1021D000550B281939094A095B09A02FB0E00E9464 -:1021E0008F1624EB30E040E050E00E947016820E23 -:1021F000931EA41EB51E1C3008F0D5CC69807A80D1 -:10220000861497043CF0FA82E9828E149F0414F439 -:102210009A82898229813A8122503109220F331F03 -:102220003A8329832FB7F894812F90E0FC01EE0FB9 -:10223000FF1FE80FF91FE556FC4F69817A81728311 -:1022400061832FBFB0CC01968830910509F045CF4E -:1022500090E080E051CF2FB7F8948091EA029091FE -:10226000EB02A091EC02B091ED02EBCF60919702EE -:1022700086EF860F883008F096CC809116049091F6 -:102280001704181619060CF08ECC2091990286EFCF -:10229000820F883008F087CC862F8A50990BFC017A -:1022A0002A50330B40E850E002C0559547952A95D7 -:1022B000E2F7E054FC4F8089482B408B695090E056 -:1022C00080E00E94D8056FCC80911604909117048D -:1022D000181619060CF067CC90E080E00E943506D5 -:1022E00062CC6091970286EF860F883008F05BCC55 -:1022F0008091160490911704181619060CF053CC0F -:102300002091990286EF820F883008F04CCCA62FDE -:10231000AA50BB0BFD012A50330B40E850E002C02D -:10232000559547952A95E2F74095E054FC4F8089F2 -:102330004823C3CF80919702082F10E0882309F427 -:1023400032CC0A30110561F10A3011050CF02BCCAA -:1023500073E0000F111F7A95E1F71A8219828091BC -:102360001604909117041816190694F4E981FA815D -:10237000E00FF11FED5EFE4F4081E981FA81E054EC -:10238000FC4F408B69816F5F90E080E00E94D80530 -:10239000E981FA813196FA83E983389701F703CC12 -:1023A00010E000E0D5CF609097026982662009F4C2 -:1023B000FACBC0909902C7010E949805062D10E043 -:1023C000698023E0629E300111247A826982C30110 -:1023D0000E945E17009721F41A82198210E000E033 -:1023E000F701E957FF4FE491F0E0EE0FFF1FE358CC -:1023F000FF4F25913491F701E556FF4FE49141E0FD -:10240000409330041092310410933304009332044B -:1024100069807A807092350460923404F0923704B7 -:10242000E09236041092380490933A048093390471 -:1024300040933B0410923C0452E050933D0440937F -:102440003E0410923F0410924004109241041092F6 -:1024500042043093440420934304E09345040E94D3 -:10246000FA1760E08D2D0E942B0164E0762E7C141B -:1024700010F04AE0C42E809136049091370497FD05 -:1024800008C061E00E942B0160E0809136040E9448 -:10249000FD0081E08093310411E01C0D209138048F -:1024A0001217D9F1E0903904F0903A04FA82E982E7 -:1024B000215070E060E071F0FF24FA94CF1021C049 -:1024C00030E050E040E06FEF7FEF80E090E00E946E -:1024D0007016B901E981FA814091340450913504B4 -:1024E000CF0169807A80861997098417950798F437 -:1024F0004081469FC001479F900D112490833196E3 -:10250000EBCF812F90E0982F88270197622F70E002 -:102510000E943D17DFCF109338040E94810143CB06 -:10252000409134045091350470E060E080913904AA -:1025300090913A040E9483181A8219828091320481 -:1025400090913304E980FA80E816F90630F720E02C -:1025500040E060E0C7010E948E0097012F5F3F4F6F -:102560003A832983EBCFF0909702E0909902D090C4 -:102570009B0200913204109133041A8219826980FF -:102580007A80601671064CF62D2D4E2D6F2DC301ED -:102590000E948E0093012F5F3F4F3A832983EFCF34 -:1025A00010919702F0E0E0E030E020E0609132042A -:1025B000709133042617370708F0AFCFCF010E9480 -:1025C0003D17610F6095653508F057C0862F880F5D -:1025D000880F762F781B872F815090E0B0E0A0E025 -:1025E000DC0199278827462F440F640F862B6D0145 -:1025F000EE24FF24892E9A2EAB2EBB24682D582F53 -:1026000040913804442391F0642E712C6C9CB001ED -:102610006D9C700D7C9C700D1124C72E489D40014F -:102620001124692D489FC0011124592FA0913E0407 -:102630008091390490913A0440913B04A41343C023 -:10264000D901AA0FBB1FA20FB31F8A0F9B1FA09116 -:102650003B04A80FB92FB11DCC92A0913C04A80F48 -:10266000B92FB11D6C9340913D04840F911DDC0185 -:102670005C932F5F3F4FF39599CF6A3A88F4655585 -:10268000862F880F860F90E0B0E0A0E0BA2FA92F28 -:10269000982F8827462F440F440F641B6150A6CF04 -:1026A0006A5A862F880F880F462F481B4150862F65 -:1026B000880F680F862F90E0B0E0A0E0DC0199273A -:1026C0008827942B94CF7901EE0CFF1CEE0CFF1C95 -:1026D0008E0D9F1DA80FB92FB11D1C92B8CF8091F0 -:1026E000970220919D0240919B026091990290E097 -:1026F0000E948E0012CF8091970281111FC010920C -:102700008F0210928E0284E294E00E94CE0688E04E -:1027100080932F0460E084E294E00E94AE0484E29F -:1027200094E00E94850640E060E084E294E00E942C -:102730008E0684E294E00E943F0735CA813009F09A -:1027400032CA30928F0220928E0288E194E00E9479 -:10275000CE0688E08093230460E088E194E00E9444 -:10276000AE0488E194E00E94850640E061E088E1E3 -:1027700094E00E948E0688E194E0DDCF609197029C -:1027800040919902B0919B026B2E712C7A826982E2 -:1027900080918E0290918F020097E1F484E294E0A0 -:1027A0000E948E060DE912E09301245F3F4F3A83A9 -:1027B0002983C8018059924069807A806816790619 -:1027C0000CF4F1C9D8016D918D0184E294E00E946E -:1027D000C806EFCF019709F0E6C988E194E00E94AE -:1027E0008E060DE912E0E981FA813C96FA83E983CD -:1027F000C8018059924069807A80681679060CF485 -:10280000D2C9D8016D918D0188E194E00E94C8067B -:10281000EFCF80918E0290918F02009729F484E28D -:1028200094E00E94BF06BFC9019709F0BCC988E1C6 -:1028300094E0F7CF6FE070E080E090E00E945402F7 -:102840005DECE52E52E0F52EF701019111917F012B -:102850000115110509F03DC0B98060E08B2D0E9483 -:102860002B010E94D205E981FA81E155FF4F849145 -:10287000E981FA81E556FF4FC490E981FA81E95771 -:10288000FF4FD490DD2099F081110E94D400ED2DEE -:10289000F0E0EE0FFF1FE759FF4FA591B491EC91C7 -:1028A000CE2291E080E009F490E0092F182FB801C2 -:1028B000110F880B990B0E9453150E94AE058B2DAA -:1028C0000E94A90581E00E94A9050E9445070E9477 -:1028D0004D0729813A812F5F3F4F3A8329832E305C -:1028E000310509F0B1CF63E671E07A83698310E0C6 -:1028F000A981BA818D919D91BA83A983892B29F5EC -:102900000E94D205812F806480937C0080917A00A0 -:10291000806480937A0080917A0086FDFCCF60917C -:10292000780070917900072E000C880B990B0E949B -:1029300053150E94AE05812F0E94A90582E00E94D6 -:10294000A9050E9445070E944D071F5F163081F6BA -:102950008091CC02882309F470C0609003016982E1 -:1029600060E0862D0E94FD0083E090E00197F1F782 -:1029700061E089810E94FD0083E290E00197F1F718 -:1029800060E089810E94FD00809101019091020127 -:102990009927FC01E556FF4F6491FC01E957FF4F71 -:1029A000E491F0E0EE0FFF1FE759FF4F85919491FE -:1029B00000E315E720E030E0462F0E94660A61152B -:1029C00071058105910529F06F5F7F4F8F4F9F4FF4 -:1029D0009F700E94511520E030E048EE51E40E94C3 -:1029E000CB1620E030E040E05FE30E94B2156B01BF -:1029F0007C0120E030E0A9010E944C15811133C018 -:102A0000C090C802D090C902E090CA02F090CB02F8 -:102A10000E94D205C701B6010E94AE058091030154 -:102A20000E94A905809101010E94A90587E00E94EA -:102A3000A9050E9445070E944D076AE070E080E00A -:102A400090E00E94540280E090E0892B11F40C94F5 -:102A5000A70C0E941C03882311F40C94A70C0E945D -:102A600000000C94A70CC092C802D092C902E09258 -:102A7000CA02F092CB02CCCF8091390490913A04F3 -:102A80000E94FA17809136049091370497FD03C095 -:102A900060E00C942B0108950E948E1508F481E0EB -:102AA0000895E89409C097FB3EF490958095709541 -:102AB00061957F4F8F4F9F4F9923A9F0F92F96E98A -:102AC000BB279395F695879577956795B795F111FF -:102AD000F8CFFAF4BB0F11F460FF1BC06F5F7F4F9C -:102AE0008F4F9F4F16C0882311F096E911C07723AE -:102AF00021F09EE8872F762F05C0662371F096E8B7 -:102B0000862F70E060E02AF09A95660F771F881F85 -:102B1000DAF7880F9695879597F90895990F000829 -:102B2000550FAA0BE0E8FEEF16161706E807F9079F -:102B3000C0F012161306E407F50798F0621B730B3A -:102B4000840B950B39F40A2661F0232B242B252BBB -:102B500021F408950A2609F4A140A6958FEF811D5E -:102B6000811D08950E94C5150C9436160E942816E2 -:102B700038F00E942F1620F0952311F00C941F16A8 -:102B80000C94251611240C946A160E94471670F3B3 -:102B9000959FC1F3950F50E0551F629FF001729F02 -:102BA000BB27F00DB11D639FAA27F00DB11DAA1F11 -:102BB000649F6627B00DA11D661F829F2227B00D5E -:102BC000A11D621F739FB00DA11D621F839FA00DE9 -:102BD000611D221F749F3327A00D611D231F849F39 -:102BE000600D211D822F762F6A2F11249F57504090 -:102BF0009AF0F1F088234AF0EE0FFF1FBB1F661F0B -:102C0000771F881F91505040A9F79E3F510580F0D3 -:102C10000C941F160C946A165F3FE4F3983ED4F3AD -:102C2000869577956795B795F795E7959F5FC1F777 -:102C3000FE2B880F911D9695879597F9089597F922 -:102C40009F6780E870E060E008959FEF80EC089552 -:102C500000240A941616170618060906089500247B -:102C60000A9412161306140605060895092E0394F5 -:102C7000000C11F4882352F0BB0F40F4BF2B11F469 -:102C800060FF04C06F5F7F4F8F4F9F4F089557FDC8 -:102C90009058440F551F59F05F3F71F04795880FCA -:102CA00097FB991F61F09F3F79F087950895121661 -:102CB00013061406551FF2CF4695F1DF08C016160D -:102CC00017061806991FF1CF8695710561050894BE -:102CD0000895E894BB2766277727CB0197F90895D5 -:102CE000052E97FB1EF400940E94871657FD07D00F -:102CF0000E949A1607FC03D04EF40C948716509548 -:102D00004095309521953F4F4F4F5F4F08959095D7 -:102D10008095709561957F4F8F4F9F4F08950E94CA -:102D2000BC16A59F900DB49F900DA49F800D911D82 -:102D300011240895A1E21A2EAA1BBB1BFD010DC090 -:102D4000AA1FBB1FEE1FFF1FA217B307E407F5075B -:102D500020F0A21BB30BE40BF50B661F771F881F37 -:102D6000991F1A9469F760957095809590959B01CD -:102D7000AC01BD01CF010895A29FB001B39FC00176 -:102D8000A39F700D811D1124911DB29F700D811D97 -:102D90001124911D08950E94DF160C9436160E948E -:102DA0002F1658F00E94281640F029F45F3F29F0B2 -:102DB0000C941F1651110C946A160C9425160E943F -:102DC000471668F39923B1F3552391F3951B550BDF -:102DD000BB27AA2762177307840738F09F5F5F4FEE -:102DE000220F331F441FAA1FA9F335D00E2E3AF02D -:102DF000E0E832D091505040E695001CCAF72BD045 -:102E0000FE2F29D0660F771F881FBB1F2617370795 -:102E10004807AB07B0E809F0BB0B802DBF01FF27C7 -:102E200093585F4F3AF09E3F510578F00C941F166F -:102E30000C946A165F3FE4F3983ED4F38695779539 -:102E40006795B795F7959F5FC9F7880F911D969580 -:102E5000879597F90895E1E0660F771F881FBB1FDC -:102E6000621773078407BA0720F0621B730B840B89 -:102E7000BA0BEE1F88F7E0950895AA1BBB1B51E122 -:102E800007C0AA1FBB1FA617B70710F0A61BB70BDA -:102E9000881F991F5A95A9F780959095BC01CD017F -:102EA0000895EE0FFF1F0590F491E02D09940E9404 -:102EB000BC16B7FF0895821B930B08950F931F93C1 -:102EC000CF93DF938230910510F482E090E0E0919F -:102ED0006004F091610430E020E0B0E0A0E03097C1 -:102EE00099F42115310509F44AC0281B390B243007 -:102EF0003105D8F58A819B816115710589F1FB0146 -:102F000093838283FE0111C040815181028113812C -:102F100048175907E0F04817590799F4109761F0DE -:102F200012960C93129713961C933296CF01DF9151 -:102F3000CF911F910F910895009360041093610445 -:102F4000F4CF2115310551F04217530738F0A9018C -:102F5000DB019A01BD01DF01F801C1CFEF01F9CF1B -:102F60009093610480936004CDCFFE01E20FF31FC4 -:102F7000819391932250310939832883D7CF2091AF -:102F80005E0430915F04232B41F4209107013091BE -:102F9000080130935F0420935E0420910501309175 -:102FA00006012115310541F42DB73EB740910901C5 -:102FB00050910A01241B350BE0915E04F0915F04EF -:102FC000E217F307A0F42E1B3F0B2817390778F000 -:102FD000AC014E5F5F4F2417350748F04E0F5F1F5F -:102FE00050935F0440935E04819391939FCFF0E0F0 -:102FF000E0E09CCFCF93DF930097E9F0FC0132979C -:1030000013821282A0916004B0916104ED0130E05E -:1030100020E01097A1F420813181820F931F20912D -:103020005E0430915F042817390709F061C0F093FE -:103030005F04E0935E04DF91CF910895EA01CE171B -:10304000DF07E8F54A815B819E0141155105B1F723 -:10305000E901FB83EA8349915991C40FD51FEC170D -:10306000FD0761F4808191810296840F951FE9012B -:1030700099838883828193819B838A83F0E0E0E057 -:1030800012968D919C9113970097B9F52D913C91D3 -:103090001197CD010296820F931F20915E0430910B -:1030A0005F042817390739F6309751F510926104FB -:1030B00010926004B0935F04A0935E04BCCFD383EE -:1030C000C28340815181840F951FC817D90761F4CD -:1030D0004E5F5F4F88819981480F591F518340830C -:1030E0008A819B81938382832115310509F0B0CFBA -:1030F000F0936104E09360049ECFFD01DC01C0CF3A -:1031000013821282D7CFDC0101C06D934150504031 -:10311000E0F7089510E0C3E6D0E004C0FE010E948D -:0E31200051172196C436D107C9F7F894FFCF96 -:10312E00FF03000200000062048000000040001453 -:10313E00005400003C666E7666663C00181838181F -:10314E0018187E003C66060C30607E003C66061C3D -:10315E0006663C000C1C2C4C7E0C0C007E607C0623 -:10316E0006663C003C66607C66663C007E660C0C27 -:10317E00181818003C66663C66663C003C66663E67 -:10318E0006663C0000000000000000000000000089 -:10319E000000005203B202DF029F031003EE020290 -:1031AE0003000000007F045204950528044B0438E8 -:1031BE0004290400000000C806B2029505C103529E -:0C31CE00554E434F44494E47000D0A0087 +:1001A000E30FF11D1082E2CFCF92DF92EF92FF9228 +:1001B000CF93DF93B091C703A0E08111AB2F809163 +:1001C000C80390E0880F991FAC014F565F4FC09055 +:1001D000CD03D090CE03E090CF03F090D00330E079 +:1001E00020E0FA01C591D491E881B90190E080E066 +:1001F000EB23EA130AC02F5F3F4F6C157D058E0578 +:100200009F0578F36FEF7FEFCB01DF91CF91FF90E8 +:10021000EF90DF90CF900895833081F028F4813003 +:1002200099F08230A9F008958730A9F08830C9F09C +:100230008430B1F4809180008F7D03C08091800074 +:100240008F7780938000089584B58F7784BD08955B +:1002500084B58F7DFBCF8091B0008F778093B00005 +:1002600008958091B0008F7DF9CF1F93CF93DF93D6 +:10027000282F30E0F901E358FF4F8491F901E1554F +:10028000FF4FD491F901E556FF4FC491CC23A9F05B +:10029000162F81110E940C01EC2FF0E0EE0FFF1FD2 +:1002A000ED58FF4FA591B4918FB7F894EC911111CF +:1002B00008C0D095DE23DC938FBFDF91CF911F91D3 +:1002C0000895DE2BF8CFCF93DF9390E0FC01E1554A +:1002D000FF4F249185569F4FFC0184918823C9F0DC +:1002E00090E0880F991FFC01E759FF4FA591B49149 +:1002F000FC01ED58FF4FC591D49161110DC09FB71E +:10030000F8948C91209582238C93888128232883CC +:100310009FBFDF91CF910895623051F49FB7F89459 +:100320003C91822F809583238C93E8812E2BEFCFF5 +:100330008FB7F894EC912E2B2C938FBFEACF3FB759 +:10034000F8948091EA029091EB02A091EC02B091B6 +:10035000ED0226B5A89B05C02F3F19F00196A11DFF +:10036000B11D3FBFBA2FA92F982F8827BC01CD01FF +:10037000620F711D811D911D42E0660F771F881F5E +:10038000991F4A95D1F708950F931F93CF93DF9349 +:10039000CDB7DEB729970FB6F894DEBF0FBECDBF3D +:1003A00080914C0490914D04892B09F47CC00E94EB +:1003B0009F010091520410915304209154043091F4 +:1003C0005504601771078207930740F46093520445 +:1003D00070935304809354049093550400915204F5 +:1003E000109153042091540430915504601B710BFB +:1003F000820B930B6C32714081059105C0F2F89429 +:1004000080914704909148049A838983E0914C0439 +:10041000F0914D04DF01119680818987909143040A +:10042000E0915604F091570480915804992309F4FF +:1004300045C09081982B98879081809589238F83E0 +:100440008F818C8388E08B8358856F8149853B81C0 +:100450002C8189819A81508347FD252F3A952083ED +:10046000262F39F0441F00C000006083000000C048 +:10047000F2CF38E04D9160830000019761F7F0936F +:100480005704E093560449873B832C839A838983DE +:1004900078940E949F016093520470935304809358 +:1004A00054049093550429960FB6F894DEBF0FBEFE +:1004B000CDBFDF91CF911F910F9108959081982B1F +:1004C00098879081809589238F838F818E8388E0A0 +:1004D0008D8358856F8149853D812E8189819A81DF +:1004E000508347FD252F00C000C0208300C000C0FE +:1004F00000C000C000C060830000262F3A9541F084 +:10050000441F000000C000C000C000C000C0E8CF11 +:1005100038E04D9100C0608300C0019709F7F09367 +:100520005704E093560449873D832E83AFCF8F92C3 +:100530009F92AF92BF92CF92DF92EF92FF924B01C8 +:100540005C010E949F016B017C010E949F016C195C +:100550007D098E099F09683E734081059105A8F3C6 +:1005600021E0821A9108A108B10888EEC80E83E044 +:10057000D81EE11CF11C81149104A104B10429F7D7 +:10058000FF90EF90DF90CF90BF90AF909F908F90B3 +:100590000895CF92DF92EF92FF920F931F93CF9324 +:1005A000DF93CDB7DEB7C054D1400FB6F894DEBFAD +:1005B0000FBECDBF2FB7F8948091EE029091EF025D +:1005C000A091F002B091F1022FBF4091C903509168 +:1005D000CA036091CB037091CC038C019D01041B75 +:1005E000150B260B370BB901A801403D574061059B +:1005F000710590F48091D103C05CDE4F0FB6F89482 +:10060000DEBF0FBECDBFDF91CF911F910F91FF9045 +:10061000EF90DF90CF9008958093C9039093CA0321 +:10062000A093CB03B093CC031092C4031092C303E6 +:100630001092C2031092C1031092C00362E0809135 +:10064000C5030E94630161E070E080E090E00E94D9 +:10065000970261E08091C5030E94630160E0809190 +:10066000C5030E9435018091C6038551823020F573 +:100670008BE291E10197F1F762E08091C5030E945E +:1006800063018091D20390E08230910538F0880FA9 +:10069000991F880F991F05970197F1F7F89480E04B +:1006A0000E94D4006F3F7F4F8F4F9F4F61F4109295 +:1006B000D103789480E0A0CF64E170E080E090E026 +:1006C0000E949702D9CF81E00E94D4006F3F7F4FF4 +:1006D0008F4F9F4F61F38E010F5F1F4F6E018FEBA6 +:1006E000C81A8EEFD80A780180E00E94D400F70182 +:1006F000608371838283938381E00E94D400F70139 +:100700006483758386839783F8E0EF0EF11CEC1405 +:10071000FD0451F7789430E020E0F801C080D180EA +:10072000E280F3804481558166817781FFEFCF16A7 +:10073000DF06EF06FF0631F04F3F8FEF58076807DF +:10074000780719F41092D103B5CFF90183E0F5953C +:10075000E7958A95E1F7E054FC4F8081880FC41635 +:10076000D506E606F70610F180832F5F3F4F085F3E +:100770001F4F2832310589F64091C4032091C003F0 +:100780008091C103280F3327331F8091C203280FA4 +:10079000311D8091C303820F932F911D9927481714 +:1007A000190681F681E08093D10326CF8160DCCFEA +:1007B0009091000189130BC0E8E6F0E0E4919FEF0F +:1007C00090930001E13049F028F0E23061F060E000 +:1007D0000C94350110926E00FACF90916F009D7FBE +:1007E00090936F00F4CF909170009D7F9093700074 +:1007F00091E09093B0009091B100987F94609093B5 +:10080000B1001092B300E3CFAF92BF92CF92DF92CC +:10081000EF92FF920F931F93CF93DF936C017B01B5 +:100820008B01040F151FEB015E01AE18BF08C01746 +:10083000D10759F06991D601ED91FC910190F081B9 +:10084000E02DC6010995892B79F7C501DF91CF917C +:100850001F910F91FF90EF90DF90CF90BF90AF90DE +:100860000895FC01538D448D252F30E0842F90E0B6 +:10087000821B930B541710F0CF960895019708959B +:10088000FC01918D828D981761F0A28DAE0FBF2F64 +:10089000B11D5D968C91928D9F5F9F73928F90E0BA +:1008A00008958FEF9FEF0895FC01918D828D981729 +:1008B00031F0828DE80FF11D858D90E008958FEF66 +:1008C0009FEF0895FC01918D228D892F90E0805C2F +:1008D0009F4F821B91098F739927089582EF92E0B1 +:1008E0000E94620421E0892B09F420E0822F089500 +:1008F00080E090E0892B29F00E946E0481110C9415 +:1009000000000895FC01A48DA80FB92FB11DA35AB2 +:10091000BF4F2C91848D90E001968F739927848F1F +:10092000A689B7892C93A089B1898C918370806442 +:100930008C93938D848D981306C00288F389E02DE3 +:1009400080818F7D80830895EF92FF920F931F9394 +:10095000CF93DF93EC0181E0888F9B8D8C8D981372 +:100960001AC0E889F989808185FF15C09FB7F8947E +:10097000EE89FF896083E889F989808183708064CA +:1009800080839FBF81E090E0DF91CF911F910F9115 +:10099000FF90EF900895F62E0B8D10E00F5F1F4F24 +:1009A0000F731127E02E8C8D8E110CC00FB607FC33 +:1009B000FACFE889F989808185FFF5CFCE010E94C1 +:1009C0008204F1CFEB8DEC0FFD2FF11DE35AFF4FA9 +:1009D000F0829FB7F8940B8FEA89FB89808180624F +:1009E000CFCFCF93DF93EC01888D8823B9F0AA890C +:1009F000BB89E889F9898C9185FD03C0808186FDDA +:100A00000DC00FB607FCF7CF8C9185FFF2CF808128 +:100A100085FFEDCFCE010E948204E9CFDF91CF9117 +:100A200008950895089508952091F201260F33271F +:100A3000331F21323105ECF420914102FC0190E09A +:100A400080E0243069F082E00895A091F2012191C4 +:100A5000AC014E525E4FA40FB52FB11D2C930196E1 +:100A6000861798F38091F201680F6093F20180E09D +:100A7000089581E008951092410281E08093400240 +:100A800010921B0261E082E10E94350161E083E186 +:100A90000E943501E9EBF0E080818E7F80838081C8 +:100AA0008D7F808388E48093B80085E48093BC00C8 +:100AB0000895CF93DF9391E09093D1018823B9F00B +:100AC000C091B800D091BA008091BC008A7B80931D +:100AD000BC0060E082E10E94350160E083E10E9499 +:100AE00035010E943B05D093BA00C093B800DF9156 +:100AF000CF9108950895E0911A0280911902E817A4 +:100B000030F4F0E0EF54FE4F808190E008958FEFD5 +:100B10009FEF089590911A02809119022FEF3FEFF5 +:100B2000981748F4E92FF0E0EF54FE4F208130E0B1 +:100B30009F5F90931A02C9010895809119029091C4 +:100B40001A02891B990B0895CF92DF92EF92FF92C0 +:100B50000F931F93CF93DF937C01CB018A012091E8 +:100B60004702222389F0EB016B01C40ED51ECC1580 +:100B7000DD0569F06991D701ED91FC910190F0815B +:100B8000E02DC7010995F3CF642F0E941405C80119 +:100B9000DF91CF911F910F91FF90EF90DF90CF9059 +:100BA0000895CF93DF931F92CDB7DEB7698320916D +:100BB00047022223F9F020916A02203258F021E006 +:100BC00030E0FC013383228390E080E00F90DF91DE +:100BD000CF91089580914802E82FF0E0E75BFD4F48 +:100BE000998190838F5F8093480280936A0281E0AD +:100BF00090E0ECCF61E0CE0101960E941405F7CFA2 +:100C0000CF92DF92EF92FF920F931F93CF93DF93D8 +:100C1000FC01C48121E020934702C0936902109235 +:100C2000480210926A028385682B8FE893E00E9445 +:100C3000D105D0916A02D13208F092C00E949F0182 +:100C40006B017C0180914102811165C082E080933B +:100C5000410281E0809340028FEF80933F02109227 +:100C60003E02D0933D02A9E4B2E0EDE1F2E080E083 +:100C7000D81385C010921C0280911C02CC0FC82B87 +:100C8000C0931C0280911B02813009F07CC010923D +:100C90001B020E949F016B017C0180911C028093CA +:100CA000BB008091430290914402A0914502B09113 +:100CB0004602892B8A2B8B2B99F00E949F01009171 +:100CC00043021091440220914502309146026C1972 +:100CD0007D098E099F090617170728073907E0F1D4 +:100CE0008091BC0083FDD9CF85EC8093BC000E942D +:100CF0009F016B017C0180914102823009F445C063 +:100D000080913F028F3F61F180913F02803241F13B +:100D100080913F0225C08091430290914402A091AE +:100D20004502B0914602892B8A2B8B2B09F48ACF7E +:100D30000E949F01009143021091440220914502BC +:100D4000309146026C197D098E099F090617170715 +:100D50002807390708F076CF809142020E94590592 +:100D60001092480210926A0210924702DF91CF91CE +:100D70001F910F91FF90EF90DF90CF9008959D917C +:100D800091938F5F75CF85EEB0CF809143029091A4 +:100D90004402A0914502B0914602892B8A2B8B2BED +:100DA00009F4A9CF0E949F010091430210914402CF +:100DB00020914502309146026C197D098E099F09E8 +:100DC000061717072807390708F095CFC5CF90E019 +:100DD00080E00895FC01EE0FFF1FE353FD4F2081DB +:100DE0003181232B39F421E030E03183208361E02D +:100DF0000C9463010895682F82EF92E00C94A40490 +:100E00000F931F93CF93DF938B01D82FC92F82E0CD +:100E10000E94FB06C801AD2FBC2F8093AC019093BC +:100E2000AD01A093AE01B093AF010E94FB06812FEC +:100E30000E94FB068D2F0E94FB068C2FDF91CF9125 +:100E40001F910F910C94FB068FEF0E94FB0685E526 +:100E50000C94FB06CF92DF92EF92FF920F931F93B9 +:100E6000CF93DF9300D0CDB7DEB769834A83880F75 +:100E7000991F0091290410912A04000F111FE3ED1E +:100E8000F3E09F01235D33402017310714F41192E2 +:100E9000F8CF2981FC01ED52FC4F21838A818083A8 +:100EA00060E0809127040E9435011016110604F5B8 +:100EB00001501109F801ED52FC4FE080D09025045B +:100EC000C090230488E0F82E6E2D661F6627661FEB +:100ED0008C2D0E943501EE0C61E08D2D0E943501B4 +:100EE00060E08D2D0E943501FA94F110EDCFDDCF39 +:100EF00061E0809127040F900F90DF91CF911F91B7 +:100F00000F91FF90EF90DF90CF900C943501EF920E +:100F1000FF920F931F93CF937C018C0183E0000F0E +:100F2000111F8A95E1F70D511C4FC1E0F801119294 +:100F30008F0140E06C2FC7010E942A07CF5FC930A4 +:100F4000A9F7CF911F910F91FF90EF9008950F9304 +:100F50001F93CF938C01C62F0E9400066C2F6460F4 +:100F6000C8010E9400066C2F6B7FC8010E9400061A +:100F700083EC90E00197F1F7CF911F910F910895C5 +:100F80000F931F93CF93DF938C01D62FC42F607FD5 +:100F9000642B0E94A70780E1D89FB00111246C2B1D +:100FA000C801DF91CF911F910F910C94A707FC010D +:100FB0006681262F246026836C6040E00C94C00775 +:100FC000CF93DF93CDB7DEB728970FB6F894DEBF87 +:100FD0000FBECDBF28E0EBE0F1E0DE0111960190FD +:100FE0000D922A95E1F7FC012085241710F44FEFAC +:100FF000420F50E0440F551F21E030E02C0F3D1F01 +:10100000420F531FFA012081620F606840E028966A +:101010000FB6F894DEBF0FBECDBFDF91CF910C9419 +:10102000C00740E061E00E94C0078BE39FE10197A9 +:10103000F1F7089541E00E94C00781E090E0089533 +:101040000F931F93CF93DF93EC0110921A0210922B +:1010500019021092480210926A020E943B0581E137 +:1010600095E0909318028093170282E195E09093A7 +:101070001602809315021D828A85823010F098E056 +:101080009D83888762E370E080E090E00E94970291 +:101090006B85CE010E94000668EE73E080E090E070 +:1010A0000E94970260E3CE010E94A7070BE416E4BA +:1010B000C8010197F1F760E3CE010E94A707C801BC +:1010C0000197F1F760E3CE010E94A70783E592E064 +:1010D0000197F1F760E2CE010E94A7076D8160627F +:1010E00040E0CE010E94C00784E08E83CE010E94C2 +:1010F000D707CE010E94110882E08F8340E066E0AE +:10110000CE010E94C00740E062E0CE010E94C0070D +:101110008BE39FE10197F1F7DF91CF911F910F9141 +:10112000089549E050E06FE971E00C94040442E056 +:1011300050E069EA71E082EF92E00C9404048FEFD2 +:101140000E94FB0685E50E94FB060C94970885ED3E +:101150008093BC008091430290914402A09145028B +:10116000B09146020796A11DB11D23E0B695A79543 +:10117000979587952A95D1F72091BC0024FD03C04F +:1011800010924102089540914302509144026091AF +:10119000450270914602452B462B472B69F3009779 +:1011A000A105B10541F02AE22A95F1F700C00197A7 +:1011B000A109B109E1CF809142020C9459051F9217 +:1011C0000F920FB60F9211242F933F938F939F93FB +:1011D000AF93BF938091EE029091EF02A091F00245 +:1011E000B091F1023091E90223E0230F2D3758F539 +:1011F0000196A11DB11D2093E9028093EE02909308 +:10120000EF02A093F002B093F1028091EA02909174 +:10121000EB02A091EC02B091ED020196A11DB11D6F +:101220008093EA029093EB02A093EC02B093ED025C +:10123000BF91AF919F918F913F912F910F900FBED2 +:101240000F901F90189526E8230F0296A11DB11D3F +:10125000D2CF1F920F920FB60F9211242F933F936C +:101260004F935F936F937F938F939F93AF93BF93AE +:10127000EF93FF938091720290917302A091740298 +:10128000B0917502892B8A2B8B2BD1F190916D0235 +:10129000E0916E02F0916F028081892780838091B6 +:1012A000720290917302A0917402B09175021816A7 +:1012B00019061A061B069CF4809172029091730223 +:1012C000A0917402B09175020197A109B1098093B0 +:1012D000720290937302A0937402B0937502FF910F +:1012E000EF91BF91AF919F918F917F916F915F919E +:1012F0004F913F912F910F900FBE0F901F90189517 +:10130000809100010E94D803EACF1F920F920FB67E +:101310000F9211242F933F934F935F936F937F937B +:101320008F939F93AF93BF93EF93FF9382EF92E0DE +:101330000E948204FF91EF91BF91AF919F918F9195 +:101340007F916F915F914F913F912F910F900FBEC1 +:101350000F901F9018951F920F920FB60F921124A5 +:101360002F938F939F93EF93FF93E0910203F0915C +:1013700003038081E0910803F091090382FD1BC003 +:10138000908180910B038F5F8F7320910C038217E4 +:1013900041F0E0910B03F0E0EE50FD4F958F80930C +:1013A0000B03FF91EF919F918F912F910F900FBEA3 +:1013B0000F901F9018958081F4CF1F920F920FB657 +:1013C0000F9211242F933F934F935F936F937F93CB +:1013D0008F939F93AF93BF93EF93FF938091B90047 +:1013E000887F803609F44AC0F0F5883209F4A7C036 +:1013F00018F5803109F49BC0B8F4882309F4F9C0CA +:10140000883009F494C0FF91EF91BF91AF919F9103 +:101410008F917F916F915F914F913F912F910F909D +:101420000FBE0F901F901895883109F488C0803244 +:1014300051F780933F0214C0803409F49DC040F4FA +:101440008033B9F38833F9F680933F0285ECB0C05E +:10145000803509F485C0883509F496C0883499F63A +:101460000E94A708D0CF883909F48CC038F5883796 +:1014700029F050F4883611F0803729F683E0809304 +:1014800041021092140257C0883809F47BC0803999 +:1014900019F0803809F0B7CF80911402803208F03B +:1014A00071C0E091140281E08E0F8093140280914C +:1014B000BB00F0E0EC50FE4F80833DC0803B39F034 +:1014C000E0F4803A09F479C0883A09F09CCF84E0CE +:1014D000809341021092F3011092F201E091170201 +:1014E000F091180209958091F20181110FC081E0FD +:1014F0008093F2011092D20109C0803C09F4A6CF7A +:10150000883C09F4A3CF883B09F07DCFE091F3013B +:1015100081E08E0F8093F301F0E0EE52FE4F808168 +:101520008093BB009091F3018091F20129C08091DA +:101530001C028093BB0085EC8093BC0064CF90912B +:101540003E0280913D02981758F5E0913E0281E0FD +:101550008E0F80933E02F0E0E35EFD4F8081E9CF85 +:10156000E0913E0281E08E0F80933E028091BB00AD +:10157000F0E0E35EFD4F808390913E0280913D025A +:101580009817C8F285E8D8CFE0913E0281E08E0F2F +:1015900080933E028091BB00F0E0E35EFD4F8083CC +:1015A0008091400281115CCF81E080931B0284EA2C +:1015B0008093BC001092410226CF85EC8093BC0042 +:1015C0001092410280911402803230F4E0911402B2 +:1015D000F0E0EC50FE4F10826091140270E0E09158 +:1015E0001502F091160284EF91E009951092140211 +:1015F0000ACF10923F0234CF1F920F920FB60F9274 +:1016000011242F933F934F935F936F937F938F9307 +:101610009F93AF93BF93CF93DF93EF93FF9380910B +:10162000B001C091BF03D0E087FF24C010928500B5 +:10163000109284008091B0018F5F8093B0018091FF +:10164000B001082E000C990B8C179D0724F4809193 +:10165000B0018C30C4F18091840090918500049693 +:1016600080349C4908F47AC0809184009091850070 +:10167000049676C08091B001082E000C990B8C174F +:101680009D07C4F6E091B0018E2FEE0F990BFC017F +:10169000EE0FFF1FE80FF91FE556FC4F808186FF14 +:1016A000C9CFE091B0018E2FEE0F990BFC01EE0F28 +:1016B000FF1FE80FF91FE556FC4F808160E08F7334 +:1016C0000E943501B7CF2091840030918500E091D0 +:1016D000B0018E2FEE0F990BFC01EE0FFF1FE80FEC +:1016E000F91FE556FC4F81819281820F931F9093E1 +:1016F000890080938800E091B0018E2FEE0F990B46 +:10170000FC01EE0FFF1FE80FF91FE556FC4F80812B +:1017100086FF11C0E091B0018E2FEE0F990BFC01F6 +:10172000EE0FFF1FE80FF91FE556FC4F808161E0C7 +:101730008F730E943501FF91EF91DF91CF91BF919F +:10174000AF919F918F917F916F915F914F913F9159 +:101750002F910F900FBE0F901F90189580E49CE979 +:1017600090938900809388008FEF8093B001E3CF3E +:10177000CF92DF92EF92FF920F931F93E82FF92FF2 +:1017800005C0015011092109310961F190819623A9 +:101790009417B9F305C0015011092109310911F15C +:1017A000908196239413F7CFC12CD12CE12CF12CEE +:1017B0000AC08FEFC81AD80AE80AF80A0C151D05E6 +:1017C0002E053F0579F080818623841791F36C2DD7 +:1017D0007D2D8E2D9F2D1F910F91FF90EF90DF900B +:1017E000CF90089560E070E080E090E01F910F914D +:1017F000FF90EF90DF90CF900895CF93DF931092FA +:10180000F5021092F40288EE93E0A0E0B0E080933D +:10181000F6029093F702A093F802B093F90223E73F +:1018200031E03093F3022093F20225EC30E0309364 +:10183000FF022093FE0224EC30E03093010320935A +:10184000000320EC30E0309303032093020321ECEB +:1018500030E0309305032093040322EC30E0309312 +:1018600007032093060326EC30E03093090320930E +:10187000080310920B0310920C0310920D031092A8 +:101880000E0310929203109291038093930390930E +:101890009403A0939503B093960385E891E0909309 +:1018A000900380938F03E9E5F4E021E734E04FEF04 +:1018B00068EB7BE08091BF038C3008F0D2C091E0F0 +:1018C000980F9093BF03808390E0DC01AA0FBB1FA9 +:1018D000A80FB91FA556BC4F12967C936E93119713 +:1018E00033962E173F0731F791E0909343041092FF +:1018F0004404109246041092450410924804109239 +:1019000047042FEF3FEF30934A042093490410928D +:101910004B0410924D0410924C0490934E0410927C +:101920004F0482E08093500490935104109252042B +:1019300010925304109254041092550410923A04D9 +:101940001092390427E931E03093380420933704AA +:1019500097E290933B0490E190934004809341047C +:101960001092420410922E0410922D0430932C04F5 +:1019700020932B042FE320932F049093340480931F +:10198000350410923604CCE0D0E0D0932404C09308 +:1019900023048BE090E090932604809325048AE052 +:1019A00090E0909328048093270481E090E0909346 +:1019B0002A048093290461E08CE00E94630161E0C5 +:1019C000809125040E94630161E0809127040E94B8 +:1019D000630161E0809127040E943501D0932404C3 +:1019E000C0932304E3EEF3E083E294E011928E17B8 +:1019F0009F07E1F7D0E0C0E08091290490912A048C +:101A0000C817D90784F540E06FE0CE010E942A078D +:101A10008091290490912A04C817D9072CF447E033 +:101A20006BE0CE010E942A0740E069E0CE010E94EF +:101A30002A078091290490912A04C817D9071CF419 +:101A4000CE010E9487078091290490912A04C8172B +:101A5000D9072CF440E06CE0CE010E942A072196C1 +:101A6000CBCF40833DCF82E08093C5038BE0809352 +:101A7000C603E1EBF0E0E491E093C703EDE9F0E0A9 +:101A8000E491E093C80380E89EE3A0E0B0E0809397 +:101A9000CD039093CE03A093CF03B093D003DF91F7 +:101AA000CF910895CF93DF9300D000D0CDB7DEB7AC +:101AB000789484B5826084BD84B5816084BD85B529 +:101AC000826085BD85B5816085BD80916E00816035 +:101AD00080936E00109281008091810082608093DB +:101AE00081008091810081608093810080918000DD +:101AF0008160809380008091B10084608093B10008 +:101B00008091B00081608093B00080917A00846001 +:101B100080937A0080917A00826080937A0080912D +:101B20007A00816080937A0080917A008068809347 +:101B30007A001092C100E0910203F091030382E069 +:101B40008083E091FE02F091FF021082E091000399 +:101B5000F091010383E3808310920A03E09106036E +:101B6000F091070386E08083E0910403F091050380 +:101B7000808180618083E0910403F091050380817E +:101B800088608083E0910403F09105038081806880 +:101B90008083E0910403F091050380818F7D808331 +:101BA000198261E089810E94630160E089810E945D +:101BB000350129812F5F29832E3099F768EC70E079 +:101BC00080E090E00E9497028AE090E00E94EA069E +:101BD0008BE090E00E94EA068CE090E00E94EA062A +:101BE0008091290490912A041816190634F441E0D2 +:101BF0006CE090E080E00E942A0780912904909197 +:101C00002A041816190634F448E06AE090E080E0EF +:101C10000E942A078091290490912A041816190617 +:101C200024F490E080E00E94870762E08091C50381 +:101C30000E9463012FB7F8948091EE029091EF0219 +:101C4000A091F002B091F1022FBF805D9740A109F1 +:101C5000B1098093C9039093CA03A093CB03B093B7 +:101C6000CC0387E38093D20322242394312C82EF88 +:101C700092E00E9462049A838983892B09F406C743 +:101C800082EF92E00E9462041816190684F782EF30 +:101C900092E00E9440049091C702853509F066C029 +:101CA000911164C08091C6028F3F29F481E0809336 +:101CB000C5028093C7028091C5028F5F843308F00C +:101CC0006DC08093C5028091C702882381F2809104 +:101CD000C4028111CCCF8091C502843040F21092B1 +:101CE000C702E0919502D0909602ED2CF12C209144 +:101CF0009402223009F48DC0233009F4C9C0213088 +:101D000091F5E73009F06CC0809097028982882DA8 +:101D100090E03091CC02311146C02093CC02F09279 +:101D20000401E09203019093020180930101F70105 +:101D3000EE0FFF1FE353FD4F31822082880F991F62 +:101D4000FC01E353FD4F3182208261E08D2D0E9422 +:101D5000630160E089810E94630162E370E080E0DA +:101D600090E00E9497021092C50281CF8093C60234 +:101D7000992309F4A0CFE091C502E23039F48093B1 +:101D8000C402F0E0E057FD4F808395CFE330C8F305 +:101D90009091C40291509093C402F3CF1092C50267 +:101DA0001092C70290CF40910301509104012091FD +:101DB000010130910201E416F50619F48217930728 +:101DC00091F2440F551FFA01E353FD4F1182108227 +:101DD000220F331FF901E353FD4F118210829FCF71 +:101DE000E63129F43092D2022092D102B6CF10927D +:101DF000CC021092C8021092C9021092CA0210922C +:101E0000CB02F701EE0FFF1FE353FD4F118210824B +:101E1000AACF8091030190910401E816F90639F0E8 +:101E20008091010190910201E816F90651F4109297 +:101E3000CC021092C8021092C9021092CA021092EB +:101E4000CB02E150E53120F50E2E000CFF0BE55DD5 +:101E5000F04F0C94D919400F480F4B0F8B11AC0F5A +:101E6000480F480F54125F12480F8D129A12C31276 +:101E7000DC13B913FC12F9139B14A714EA143515DB +:101E8000C7010E94EA06609197028D2D0E943501DC +:101E90000E949F0868CFC7010E94EA06109197022E +:101EA000812E912C9A82898261E08D2D0E9463019E +:101EB000111102C060E0E9CF29813A812F3F31053D +:101EC00011F461E0E2CFF701E358FF4FE491E33012 +:101ED00039F150F4E130D1F0E230E9F029813A8172 +:101EE0002038310574F7E6CFE73031F1E83061F1A1 +:101EF000E430A1F780918000806280938000898027 +:101F00009A8090928B0080928A00C2CF84B58068BC +:101F100084BD17BDBDCF84B5806284BD18BDB8CF68 +:101F20008091800080688093800089809A80909260 +:101F3000890080928800ACCF8091B0008068809347 +:101F4000B0001093B300A4CF8091B0008062809362 +:101F5000B0001093B4009CCFC7010E94EA068091A4 +:101F6000970280936B028091980280936C0280901C +:101F70006B0290906C029C828B828091990280937C +:101F80006B0280919A0280936C0280906B02909019 +:101F90006C029A828982181419040CF0B8C18091DD +:101FA0000001D8128BC0E8E6F0E0149117FD70CF65 +:101FB00061E08D2D0E9463011123B1F02B813C81E2 +:101FC0004901B12CA12C60E072E18AE790E0A50103 +:101FD0000E948B1869017A0161E0C61AD108E108F4 +:101FE000F108123009F050C18B819C814C01B12C59 +:101FF000A12C60E072E18AE790E0A50194010E94C3 +:102000008B1829013A017A01690191E0C91AD108B6 +:10201000E108F108AFEFCA16D104E104F10409F0B8 +:102020000CF405C160E472E48FE090E0A501940136 +:102030000E948B1869017A01B1E0CB1AD108E1083E +:10204000F108123009F0B1C082E0EFEFCE16D104F2 +:10205000E104F10409F00CF4E3C060E970ED83E001 +:1020600090E0A50194010E948B1869017A01F1E0CA +:10207000CF1AD108E108F10883E02FEFC216D1048E +:10208000E104F10409F00CF4CBC068E478EE81E0DF +:1020900090E0A50194010E948B1869017A0171E01A +:1020A000C71AD108E108F1088FEFC816D104E1047E +:1020B000F10411F00CF09CC084E0B2C08F3F09F035 +:1020C000E7CED0920001E8E6F0E014911F3F09F45A +:1020D000DFCE113031F150F0123009F442C017FD5B +:1020E000D7CE61E08D2D0E94630168CF14BC15BC72 +:1020F00084B5826084BD85B5816085BDF701E556F4 +:10210000FF4FE491F0E0EE0FFF1FED58FF4F859178 +:102110009491F701E155FF4FE491E093710210E0D3 +:1021200047CF1092800010928100809181008860DA +:102130008093810080918100816080938100F7010C +:10214000E556FF4FE491F0E0EE0FFF1FED58FF4F13 +:1021500085919491F701E155FF4FE491E09370026E +:1021600027CF1092B0001092B1008091B000826031 +:102170008093B0008091B10081608093B100F7013D +:10218000E556FF4FE491F0E0EE0FFF1FED58FF4FD3 +:102190008591949190936F0280936E02F701E155BF +:1021A000FF4FE491E0936D0203CF3FEFC316D104DC +:1021B000E104F10409F00CF465C068E478EE81E014 +:1021C00090E0A50194010E948B1869017A0161E0F9 +:1021D000C61AD108E108F108112309F425C6AFEFAA +:1021E000CA16D104E104F10411F00CF026C664CF44 +:1021F00064E274EF80E090E0A50194010E948B18E6 +:1022000069017A0171E0C71AD108E108F1088FEF7E +:10221000C816D104E104F10411F008F038C685E0D5 +:102220009091B100987F892B8093B10007C081E025 +:102230001111F6CF95B5987F892B85BD2B813C81F7 +:10224000220F331FA981BA810E94DF1928EE33E0E3 +:1022500040E050E00E94B5181130B9F1123009F495 +:1022600046C0111115CEC7BC20937A0230937B0271 +:1022700040937C0250937D0280916E008260809337 +:102280006E0006CE82E0D4CF91E0C114D104A1E06B +:10229000EA06F10484F068E478EE81E090E0A501BC +:1022A00094010E948B1869017A01B1E0CB1AD10820 +:1022B000E108F10893E0113009F0C0CF809181006E +:1022C000887F892B80938100B9CFD0928900C092FA +:1022D00088002093760230937702409378025093DF +:1022E000790280916F00826080936F00D1CDC0929F +:1022F000B3002093720230937302409374025093A0 +:10230000750280917000826080937000C1CD8D2D28 +:102310000E94D803BDCDC7010E94EA060091970232 +:10232000053B08F0B5CDEEE7F2E090E080E02191CA +:102330003191E216F30651F0232B09F0ADC0FC01F8 +:10234000EE0FFF1FE258FD4FF182E082FC01EE0F1D +:10235000FF1FE80FF91FE75AFB4F1081818192811F +:102360001C3008F03FC061E08D2D0E946301812F79 +:1023700090E0AC01440F551FFA01E80FF91FE55634 +:10238000FC4F2D2D2F73D22E2081207CD22AD0827B +:1023900030E020E0F901EE0FFF1FE20FF31FE556DA +:1023A000FC4F608166FD14C02F5F3F4F2C3031051C +:1023B00089F71092800022E020938100109285001E +:1023C00010928400B19A20916F00226020936F00D8 +:1023D000840F951FFC01E556FC4F8081806480834B +:1023E00090E080E028E5E22E22E0F22EE91AF108E2 +:1023F00097FDF394EE0CFF1CEE0CFF1C68E870E0F8 +:10240000681B710987FD7395660F771F660F771F2D +:102410007A8369834B01770FAA08BB0897010F2CB9 +:10242000000C440B550B281939094A095B09A02FE8 +:10243000B0E00E94AA1824EB30E040E050E00E9497 +:102440008B18820E931EA41EB51E1C3008F020CDE2 +:10245000A981BA818A169B063CF0FA82E9828E1421 +:102460009F0414F49A828982E981FA813297EE0FEF +:10247000FF1FFA83E9832FB7F894812F90E0FC01C6 +:10248000EE0FFF1FE80FF91FE556FC4F89809A8079 +:10249000928281822FBFFCCC01968830910509F091 +:1024A00046CF90E080E052CF2FB7F8948091EE02B3 +:1024B0009091EF02A091F002B091F102EBCF609108 +:1024C000970286EF860F883008F0E2CC80912904CD +:1024D00090912A04181619060CF0DACC2091990272 +:1024E00086EF820F883008F0D3CC862F8A50990B64 +:1024F000FC012A50330B40E850E002C05595479547 +:102500002A95E2F7ED52FC4F8089482B408B6950A9 +:1025100090E080E00E942A07BBCC80912904909132 +:102520002A04181619060CF0B3CC90E080E00E9443 +:102530008707AECC6091970286EF860F883008F04F +:10254000A7CC8091290490912A04181619060CF042 +:102550009FCC2091990286EF820F883008F098CCAA +:10256000A62FAA50BB0BFD012A50330B40E850E0C8 +:1025700002C0559547952A95E2F74095ED52FC4FDC +:1025800080894823C3CF80919702082F10E08823C9 +:1025900009F47ECC0A30110561F10A3011050CF006 +:1025A00077CC73E0000F111F7A95E1F71A82198238 +:1025B0008091290490912A041816190694F4E9814F +:1025C000FA81E00FF11FED5EFE4F4081E981FA8153 +:1025D000ED52FC4F408B69816F5F90E080E00E947C +:1025E0002A07E981FA813196FA83E983389701F75E +:1025F0004FCC10E000E0D5CF8090970289828820F0 +:1026000009F446CCC0909902C7010E94EA06082D41 +:1026100010E0898023E0829E400111249A82898201 +:10262000C4010E94E619009721F41A82198210E071 +:1026300000E0F701E556FF4FE491F0E0EE0FFF1FD9 +:10264000ED58FF4F25913491F701E155FF4FE4918B +:1026500041E04093430410924404109346040093D5 +:10266000450489809A809092480480924704F092B1 +:102670004A04E092490410924B0490934D048093D5 +:102680004C0440934E0410924F0452E05093500477 +:102690004093510410925204109253041092540427 +:1026A000109255043093570420935604E093580435 +:1026B0000E94821A60E08D2D0E94630164E0962ED4 +:1026C0009C1410F04AE0C42E8091490490914A0471 +:1026D00097FD08C061E00E94630160E080914904B9 +:1026E0000E94350181E08093440411E01C0D20918B +:1026F0004B041217D9F180904C0490904D049A82AB +:102700008982215070E060E071F099249A94C91098 +:1027100021C030E050E040E06FEF7FEF80E090E0DC +:102720000E948B18B901E981FA81409147045091C8 +:102730004804CF0189809A808819990984179507E0 +:1027400098F44081469FC001479F900D11249083CB +:102750003196EBCF812F90E0982F88270197622F39 +:1027600070E00E94C519DFCF10934B040E94C40192 +:102770008FCB409147045091480470E060E0809115 +:102780004C0490914D040E940B1B1A821982809177 +:1027900045049091460489809A808816990630F7FE +:1027A00020E040E060E0C4010E948E0094012F5FB1 +:1027B0003F4F3A832983EBCFF0909702E090990244 +:1027C000D0909B0200914504109146041A82198210 +:1027D00089809A80801691064CF62D2D4E2D6F2DF6 +:1027E000C4010E948E0094012F5F3F4F3A832983DA +:1027F000EFCFB0909702F0E0E0E030E020E06091B1 +:102800004504709146042617370708F0AFCFCF0173 +:102810000E94C5196B0D6095653508F05BC0862F69 +:10282000880F880F462F481B842F815090E0B0E01E +:10283000A0E0DC0199278827462F440F640F862BE0 +:10284000AD0166277727C92EDA2EEB2EFF24CB8227 +:102850008983A0904B04AA20A1F00A2D10E0049FC8 +:102860004001059F900C149F900C11249A8289823C +:102870004A81AC9C60011124DB82A89EC001112416 +:102880009983A091510480914C0490914D045091F2 +:102890004E04B901A51344C0660F771F620F731F62 +:1028A000860F971FA0914E04A80FB92FB11D4C930E +:1028B000A0914F04A80FB92FB11D9B809C9240910D +:1028C0005004840F911D8980DC018C922F5F3F4F53 +:1028D000F39595CF6A3A88F46555862F880F860F51 +:1028E00090E0B0E0A0E0BA2FA92F982F8827462FBC +:1028F000440F440F641B6150A2CF6A5A862F880F81 +:10290000880F462F481B4150862F880F680F862F4F +:1029100090E0B0E0A0E0DC0199278827942B90CFCD +:10292000660F771F660F771F860F971FA80FB92FA7 +:10293000B11D1C92B7CF8091970220919D024091CA +:102940009B026091990290E00E948E000FCF8091CF +:10295000970281111FC010928F0210928E0287E39E +:1029600094E00E94200888E08093420460E087E3BE +:1029700094E00E94000687E394E00E94D70740E0BD +:1029800060E087E394E00E94E00787E394E00E9420 +:1029900091087ECA813009F07BCA30928F02209262 +:1029A0008E028BE294E00E94200888E08093360437 +:1029B00060E08BE294E00E9400068BE294E00E94CB +:1029C000D70740E061E08BE294E00E94E0078BE2F1 +:1029D00094E0DDCF609197024091990290909B0224 +:1029E000892C912C9A82898280918E0290918F02FB +:1029F0000097E1F487E394E00E94E0070DE912E01C +:102A00009401245F3F4F3A832983C8018059924043 +:102A100089809A80881699060CF43ACAD8016D917B +:102A20008D0187E394E00E941A08EFCF019709F027 +:102A30002FCA8BE294E00E94E0070DE912E0E981E1 +:102A4000FA813C96FA83E983C801805992408980D3 +:102A50009A80881699060CF41BCAD8016D918D01D5 +:102A60008BE294E00E941A08EFCF80918E02909141 +:102A70008F02009729F487E394E00E94110808CAA6 +:102A8000019709F005CA8BE294E0F7CF6FE070E0A0 +:102A900080E090E00E9497026DECE62E62E0F62E58 +:102AA000F701019111917F010115110509F043C052 +:102AB000B98089819A818B7F099709F009C161E00A +:102AC0008DE00E9463010E942407E981FA81E358A6 +:102AD000FF4F8491E981FA81E155FF4FC490E9816C +:102AE000FA81E556FF4FD490DD2099F081110E94C4 +:102AF0000C01ED2DF0E0EE0FFF1FEF56FF4FA591FB +:102B0000B491EC91CE2291E080E009F490E0092F9D +:102B1000182FB801110F880B990B0E946E170E9495 +:102B200000078B2D0E94FB0681E00E94FB060E949D +:102B300097080E949F0829813A812F5F3F4F3A836F +:102B400029832E30310509F0ABCF63E671E07A833B +:102B5000698310E0A981BA818D919D91BA83A9837F +:102B6000892B29F50E942407812F806480937C00A3 +:102B700080917A00806480937A0080917A0086FD4B +:102B8000FCCF6091780070917900072E000C880BC3 +:102B9000990B0E946E170E940007812F0E94FB066E +:102BA00082E00E94FB060E9497080E949F081F5F18 +:102BB000163081F68091CC02882309F476C01091FA +:102BC000030160E0812F0E94350180900101909007 +:102BD00002019A82898260E089810E94350183E046 +:102BE00090E00197F1F761E0812F0E94350183E2C7 +:102BF00090E00197F1F760E0812F0E943501940188 +:102C00003327F901E155FF4F6491F901E556FF4F74 +:102C1000E491F0E0EE0FFF1FEF56FF4F8591949186 +:102C200000E315E720E030E0462F0E94B80B611565 +:102C300071058105910529F06F5F7F4F8F4F9F4F81 +:102C40009F700E946C1720E030E048EE51E40E9433 +:102C5000531920E030E040E05FE30E94CD176B01A4 +:102C60007C0120E030E0A9010E946717811133C088 +:102C7000C090C802D090C902E090CA02F090CB0286 +:102C80000E942407C701B6010E940007809103013A +:102C90000E94FB06809101010E94FB0687E00E94D2 +:102CA000FB060E9497080E949F080E9424070E942A +:102CB000C902882341F08091C6038C3009F47BC09F +:102CC00098F48B3061F160E070E080EC9FE751C0D8 +:102CD00060E08981F6CEC092C802D092C902E0922B +:102CE000CA02F092CB02CCCF8551823060F790902F +:102CF000C203692D70E0762F662766277F77809163 +:102D0000C303682B90E080E00E946C172DEC3CEC34 +:102D10004CEC5DE30E94CD1797FE2BC06AC060911A +:102D2000C20370E090E080E00E946C176B017C01B0 +:102D30008090C303898287FE0AC0AC019B0160E0DA +:102D400070E080E89FEB0E94E6186B017C0129810E +:102D50002F70622F70E090E080E00E946E172DECE3 +:102D60003CEC4CEC5DE30E94CD17A70196010E945C +:102D7000E7180E94000782E00E94FB0686E10E949D +:102D8000FB060E9497080E949F086AE070E080E0BE +:102D900090E00E94970280E090E0892B11F40C945F +:102DA000340E0E946E04882311F40C94340E0E9499 +:102DB00000000C94340E8090C203682D70E090E007 +:102DC00080E00E946C176B017C016091C3036F70FF +:102DD00070E090E080E00E946E172DEC3CEC4CEC33 +:102DE0005DE30E94CD17A70196010E94E71887FEB8 +:102DF000C0CF9058BECF84E06FEFC616D104E10477 +:102E0000F10409F008F416CA730162019AE0F5941E +:102E1000E794D794C7949A95D1F741E0C41AD108A2 +:102E2000E108F10885E006CA83E09FEFC916D104E6 +:102E3000E104F10409F00CF4FDC962E17AE780E0F5 +:102E400090E0A50194010E948B1869017A0191E03C +:102E5000C91AD108E108F108112369F286E03FEFB1 +:102E6000C316D104E104F10409F008F4D9C97301CF +:102E700062012AE0F594E794D794C7942A95D1F794 +:102E800021E0C21AD108E108F10887E0C9C962E16E +:102E90007AE780E090E0A50194010E948B18690117 +:102EA0007A01B1E0CB1AD108E108F108D7CF8091BF +:102EB0004C0490914D040E94821A80914904909193 +:102EC0004A0497FD03C060E00C94630108950E94DA +:102ED000A91708F481E00895E89409C097FB3EF42F +:102EE00090958095709561957F4F8F4F9F4F992357 +:102EF000A9F0F92F96E9BB279395F69587957795D5 +:102F00006795B795F111F8CFFAF4BB0F11F460FF94 +:102F10001BC06F5F7F4F8F4F9F4F16C0882311F0EC +:102F200096E911C0772321F09EE8872F762F05C000 +:102F3000662371F096E8862F70E060E02AF09A959B +:102F4000660F771F881FDAF7880F9695879597F990 +:102F50000895990F0008550FAA0BE0E8FEEF16162A +:102F60001706E807F907C0F012161306E407F5077D +:102F700098F0621B730B840B950B39F40A2661F0F1 +:102F8000232B242B252B21F408950A2609F4A14094 +:102F9000A6958FEF811D811D08950E94E0170C9466 +:102FA00051180E94431838F00E944A1820F09523C7 +:102FB00011F00C943A180C94401811240C948518B4 +:102FC0000E94621870F3959FC1F3950F50E0551F52 +:102FD000629FF001729FBB27F00DB11D639FAA276E +:102FE000F00DB11DAA1F649F6627B00DA11D661FBD +:102FF000829F2227B00DA11D621F739FB00DA11DDE +:10300000621F839FA00D611D221F749F3327A00D97 +:10301000611D231F849F600D211D822F762F6A2F33 +:1030200011249F5750409AF0F1F088234AF0EE0F98 +:10303000FF1FBB1F661F771F881F91505040A9F7C5 +:103040009E3F510580F00C943A180C9485185F3F10 +:10305000E4F3983ED4F3869577956795B795F79501 +:10306000E7959F5FC1F7FE2B880F911D9695879579 +:1030700097F9089597F99F6780E870E060E00895F8 +:103080009FEF80EC089500240A9416161706180680 +:103090000906089500240A9412161306140605065C +:1030A0000895092E0394000C11F4882352F0BB0FED +:1030B00040F4BF2B11F460FF04C06F5F7F4F8F4F50 +:1030C0009F4F089557FD9058440F551F59F05F3F8B +:1030D00071F04795880F97FB991F61F09F3F79F03A +:1030E00087950895121613061406551FF2CF4695BC +:1030F000F1DF08C0161617061806991FF1CF86953E +:103100007105610508940895E894BB276627772721 +:10311000CB0197F90895052E97FB1EF400940E94A9 +:10312000A21857FD07D00E94B51807FC03D04EF433 +:103130000C94A21850954095309521953F4F4F4FD4 +:103140005F4F089590958095709561957F4F8F4F53 +:103150009F4F08950E94D718A59F900DB49F900D82 +:10316000A49F800D911D11240895A1E21A2EAA1B7F +:10317000BB1BFD010DC0AA1FBB1FEE1FFF1FA21727 +:10318000B307E407F50720F0A21BB30BE40BF50B24 +:10319000661F771F881F991F1A9469F760957095AD +:1031A000809590959B01AC01BD01CF010895A29F30 +:1031B000B001B39FC001A39F700D811D1124911D0B +:1031C000B29F700D811D1124911D08955058BB2789 +:1031D000AA270E94FE180C9451180E94431838F038 +:1031E0000E944A1820F039F49F3F19F426F40C94F9 +:1031F00040180EF4E095E7FB0C943A18E92F0E9472 +:10320000621858F3BA17620773078407950720F00E +:1032100079F4A6F50C9484180EF4E0950B2EBA2FD1 +:10322000A02D0B01B90190010C01CA01A0011124CC +:10323000FF27591B99F0593F50F4503E68F11A1678 +:10324000F040A22F232F342F4427585FF3CF469509 +:1032500037952795A795F0405395C9F77EF41F162B +:10326000BA0B620B730B840BBAF09150A1F0FF0FF5 +:10327000BB1F661F771F881FC2F70EC0BA0F621FE1 +:10328000731F841F48F4879577956795B795F795D1 +:103290009E3F08F0B0CF9395880F08F09927EE0F66 +:1032A0009795879508950E9467190C9451180E946C +:1032B0004A1858F00E94431840F029F45F3F29F063 +:1032C0000C943A1851110C9485180C9440180E94D3 +:1032D000621868F39923B1F3552391F3951B550BAD +:1032E000BB27AA2762177307840738F09F5F5F4FD9 +:1032F000220F331F441FAA1FA9F335D00E2E3AF018 +:10330000E0E832D091505040E695001CCAF72BD02F +:10331000FE2F29D0660F771F881FBB1F2617370780 +:103320004807AB07B0E809F0BB0B802DBF01FF27B2 +:1033300093585F4F3AF09E3F510578F00C943A183D +:103340000C9485185F3FE4F3983ED4F38695779507 +:103350006795B795F7959F5FC9F7880F911D96956B +:10336000879597F90895E1E0660F771F881FBB1FC7 +:10337000621773078407BA0720F0621B730B840B74 +:10338000BA0BEE1F88F7E0950895AA1BBB1B51E10D +:1033900007C0AA1FBB1FA617B70710F0A61BB70BC5 +:1033A000881F991F5A95A9F780959095BC01CD016A +:1033B0000895EE0FFF1F0590F491E02D09940E94EF +:1033C000D718B7FF0895821B930B08950F931F938F +:1033D000CF93DF938230910510F482E090E0E0918A +:1033E0007304F091740430E020E0B0E0A0E0309786 +:1033F00099F42115310509F44AC0281B390B2430F2 +:103400003105D8F58A819B816115710589F1FB0130 +:1034100093838283FE0111C0408151810281138117 +:1034200048175907E0F04817590799F4109761F0C9 +:1034300012960C93129713961C933296CF01DF913C +:10344000CF911F910F91089500937304109374040A +:10345000F4CF2115310551F04217530738F0A90177 +:10346000DB019A01BD01DF01F801C1CFEF01F9CF06 +:103470009093740480937304CDCFFE01E20FF31F89 +:10348000819391932250310939832883D7CF20919A +:10349000710430917204232B41F420910701309183 +:1034A000080130937204209371042091050130913A +:1034B00006012115310541F42DB73EB740910901B0 +:1034C00050910A01241B350BE0917104F0917204B4 +:1034D000E217F307A0F42E1B3F0B2817390778F0EB +:1034E000AC014E5F5F4F2417350748F04E0F5F1F4A +:1034F0005093720440937104819391939FCFF0E0B5 +:10350000E0E09CCFCF93DF930097E9F0FC01329786 +:1035100013821282A0917304B0917404ED0130E023 +:1035200020E01097A1F420813181820F931F209118 +:103530007104309172042817390709F061C0F093C3 +:103540007204E0937104DF91CF910895EA01CE17E0 +:10355000DF07E8F54A815B819E0141155105B1F70E +:10356000E901FB83EA8349915991C40FD51FEC17F8 +:10357000FD0761F4808191810296840F951FE90116 +:1035800099838883828193819B838A83F0E0E0E042 +:1035900012968D919C9113970097B9F52D913C91BE +:1035A0001197CD010296820F931F209171043091E3 +:1035B00072042817390739F6309751F510927404C0 +:1035C00010927304B0937204A0937104BCCFD383A0 +:1035D000C28340815181840F951FC817D90761F4B8 +:1035E0004E5F5F4F88819981480F591F51834083F7 +:1035F0008A819B81938382832115310509F0B0CFA5 +:10360000F0937404E09373049ECFFD01DC01C0CFFE +:1036100013821282D7CFDC0101C06D93415050401C +:10362000E0F7089510E0C3E6D0E004C0FE010E9478 +:0E363000D9192196C436D107C9F7F894FFCFF7 +:10363E00FF05000600000075048000000040001425 +:10364E00005400003C666E7666663C00181838180A +:10365E0018187E003C66060C30607E003C66061C28 +:10366E0006663C000C1C2C4C7E0C0C007E607C060E +:10367E0006663C003C66607C66663C007E660C0C12 +:10368E00181818003C66663C66663C003C66663E52 +:10369E0006663C0000000000000000000000000074 +:1036AE00000000A40404043104F104620440045434 +:1036BE000400000000D105A405E7067A059D058AE1 +:1036CE00057B05000000001A080404E706130552E6 +:0C36DE00554E434F44494E47000D0A0072 :00000001FF diff --git a/app/firmwares/suno.hex b/app/firmwares/suno.hex new file mode 100644 index 000000000..52b501621 --- /dev/null +++ b/app/firmwares/suno.hex @@ -0,0 +1,398 @@ +:100000000C9462000C948A000C948A000C948A0070 +:100010000C948A000C9459050C948A000C948A0064 +:100020000C948A000C948A000C948A000C94C705E6 +:100030000C948A000C948A000C948A000C948A0018 +:100040000C940F050C948A000C94DD040C94B704F6 +:100050000C948A000C948A000C948A000C948A00F8 +:100060000C948A000C948A000000000024002700F1 +:100070002A0000000000250028002B0000000008D6 +:10008000000201000003040700000000000000005F +:1000900000000000230026002900040404040404D6 +:1000A0000404020202020202030303030303010227 +:1000B00004081020408001020408102001020408F6 +:1000C0001020C80611241FBECFEFD8E0DEBFCDBF81 +:1000D00011E0A0E0B1E0E8E9F8E102C005900D927E +:1000E000A232B107D9F722E0A2E2B1E001C01D922D +:1000F000AB34B207E1F710E0C2E6D0E004C02197CC +:10010000FE010E94440CC136D107C9F70E942507A1 +:100110000C944A0C0C940000CF92DF92EF92FF9265 +:10012000DC01A03282E0B807D4F5A53BB10514F09C +:10013000A4EBB0E04091490228E830E0241B3109EB +:1001400047FD3395220F331F220F331F6901330FF1 +:10015000EE08FF0840914A0228E532E0241B3109ED +:1001600047FD3395220F331F220F331F032E000C40 +:10017000440B550B2C193D094E095F09B7FF02C00E +:10018000B0E0A0E00E94A60A24EB30E040E050E09E +:100190000E947C0AC20ED31EE41EF51ED601E09119 +:1001A0004802EC3080F52091490288E890E0821BFB +:1001B000910927FD9395880F991F880F991FA817FC +:1001C000B90784F020914A0288E592E0821B9109E8 +:1001D00027FD9395880F991F880F991FA817B907B6 +:1001E0000CF4CD010297880F991F4FB7F8942E2F6A +:1001F00030E0F901EE0FFF1FE20FF31FED5DFD4F41 +:10020000928381834FBFFF90EF90DF90CF9008954E +:100210000895AF92BF92CF92DF92EF92FF920F9329 +:100220001F93CF93DF936C017B018B01040F151F8C +:10023000EB015E01AE18BF08C017D10759F06991F4 +:10024000D601ED91FC910190F081E02DC601099558 +:10025000892B79F7C501DF91CF911F910F91FF9005 +:10026000EF90DF90CF90BF90AF900895FC01538D39 +:10027000448D252F30E0842F90E0821B930B541780 +:1002800010F0CF96089501970895FC01918D828D0D +:10029000981761F0A28DAE0FBF2FB11D5D968C91A6 +:1002A000928D9F5F9F73928F90E008958FEF9FEFE5 +:1002B0000895FC01918D828D981731F0828DE80FA1 +:1002C000F11D858D90E008958FEF9FEF0895FC015B +:1002D000918D228D892F90E0805C9F4F821B910928 +:1002E0008F739927089586E891E00E94670121E0C5 +:1002F000892B09F420E0822F089580E090E0892B7B +:1003000029F00E94730181110C9400000895FC01F2 +:10031000A48DA80FB92FB11DA35ABF4F2C91848D66 +:1003200090E001968F739927848FA689B7892C93C3 +:10033000A089B1898C91837080648C93938D848D16 +:10034000981306C00288F389E02D80818F7D808319 +:100350000895EF92FF920F931F93CF93DF93EC01D9 +:1003600081E0888F9B8D8C8D98131AC0E889F9895C +:10037000808185FF15C09FB7F894EE89FF8960835F +:10038000E889F98980818370806480839FBF81E0E0 +:1003900090E0DF91CF911F910F91FF90EF90089522 +:1003A000F62E0B8D10E00F5F1F4F0F731127E02EFD +:1003B0008C8D8E110CC00FB607FCFACFE889F98935 +:1003C000808185FFF5CFCE010E948701F1CFEB8DB3 +:1003D000EC0FFD2FF11DE35AFF4FF0829FB7F89409 +:1003E0000B8FEA89FB8980818062CFCF682F86E8F6 +:1003F00091E00C94A901CF93DF93EC01888D8823C1 +:10040000B9F0AA89BB89E889F9898C9185FD03C077 +:10041000808186FD0DC00FB607FCF7CF8C9185FF5C +:10042000F2CF808185FFEDCFCE010E948701E9CF19 +:10043000DF91CF910895833081F028F4813099F0D5 +:100440008230A9F008958730A9F08830C9F084304F +:10045000B1F4809180008F7D03C0809180008F7700 +:1004600080938000089584B58F7784BD089584B506 +:100470008F7DFBCF8091B0008F778093B00008957F +:100480008091B0008F7DF9CFCF93DF93282F30E09C +:10049000F901E458FF4F8491F901E255FF4FD491DF +:1004A000F901E656FF4FC491CC23A1F081110E94BF +:1004B0001B02EC2FF0E0EE0FFF1FE057FF4FA5915E +:1004C000B491EC91ED2381E090E009F480E0DF91BC +:1004D000CF91089580E090E0FACF1F93CF93DF9300 +:1004E000282F30E0F901E458FF4F8491F901E255DB +:1004F000FF4FD491F901E656FF4FC491CC23A9F0E8 +:10050000162F81110E941B02EC2FF0E0EE0FFF1F4F +:10051000EE58FF4FA591B4918FB7F894EC9111115B +:1005200008C0D095DE23DC938FBFDF91CF911F9160 +:100530000895DE2BF8CFCF93DF9390E0FC01E255D6 +:10054000FF4F249186569F4FFC0184918823D1F060 +:1005500090E0880F991FFC01E859FF4FA591B491D5 +:10056000FC01EE58FF4FC591D49161110EC09FB7A9 +:10057000F8948C91E22FE0958E238C932881E223CE +:10058000E8839FBFDF91CF9108958FB7F894EC91E6 +:10059000E22BEC938FBFF6CFCF93909148029C3023 +:1005A00008F052C0C82F61E00E949B02809148026F +:1005B000282F30E0F901EE0FFF1FE20FF31FED5D72 +:1005C000FD4FCF739081907CC92BC083109249025C +:1005D00010924A022CE0622F0E94100C829FB00100 +:1005E000112430E020E0AB01420F531FFA01EE0F5F +:1005F000FF1FE40FF51FED5DFD4F908196FD16C0C6 +:100600002F5F3F4F2C30310571F781110FC01092D1 +:10061000800082E080938100109285001092840017 +:10062000B19A80916F00826080936F00E0914802E0 +:100630008E2F90E0FC01EE0FFF1FE80FF91FED5D1C +:10064000FD4F80818064808380914802CF9108951E +:100650001F93CF93DF93182FEB0161E00E949B0261 +:10066000209739F460E0812FDF91CF911F910C9496 +:100670006D02CF3FD10511F461E0F5CFE12FF0E03D +:10068000E458FF4FE491E33031F140F4E130B1F050 +:10069000E230E1F0C038D1057CF7E4CFE73029F152 +:1006A000E83059F1E430B1F78091800080628093A6 +:1006B0008000D0938B00C0938A0004C084B580680A +:1006C00084BDC7BDDF91CF911F91089584B580622D +:1006D00084BDC8BDF7CF8091800080688093800082 +:1006E000D0938900C0938800EDCF8091B0008068DE +:1006F0008093B000C093B300E5CF8091B0008062DA +:100700008093B000C093B400DDCF8E3008F08E50DF +:100710008770806480937C0080917A0080648093ED +:100720007A0080917A0086FDFCCF809178009091CC +:10073000790008953FB7F89480914E0190914F0150 +:10074000A0915001B091510126B5A89B05C02F3F43 +:1007500019F00196A11DB11D3FBFBA2FA92F982FE7 +:100760008827BC01CD01620F711D811D911D42E0E2 +:10077000660F771F881F991F4A95D1F708958F92AA +:100780009F92AF92BF92CF92DF92EF92FF924B0176 +:100790005C010E949A036B017C010E949A036C1910 +:1007A0007D098E099F09683E734081059105A8F374 +:1007B00021E0821A9108A108B10888EEC80E83E0F2 +:1007C000D81EE11CF11C81149104A104B10429F785 +:1007D000FF90EF90DF90CF90BF90AF909F908F9061 +:1007E00008958830910564F024B130E00897A9019C +:1007F00002C0559547958A95E2F7CA018170089520 +:100800002AB130E0F4CFCF93C82F0E94F1038823A0 +:1008100029F060E08C2FCF910C949B02CF9108952A +:10082000CF93DF938830910501F1209166013091DB +:100830006701232B49F483309105B9F09C012950BD +:1008400031092330310588F08E30910574F48630FB +:10085000910559F0EC010E94F103811106C061E09D +:100860008C2FDF91CF910C949B02DF91CF91089553 +:10087000EF92FF920F931F93CF93DF93E09052017B +:10088000F090530100914A0110914B01E801CC0F07 +:10089000DD1F8EE0E114F10469F50E948503CE5D51 +:1008A000DE4F998388830F5F1F4F043111055CF57C +:1008B00010934B0100934A01E2E2F1E04AE451E077 +:1008C00090E080E02191319137FF03C0319521956F +:1008D0003109820F931F4E175F07A1F764E170E0A3 +:1008E0000E941C0CCB01DF91CF911F910F91FF90C3 +:1008F000EF9008950E948503CE5DDE4FE81AF90A55 +:10090000F982E882D0CF10924B0110924A01D4CFE5 +:1009100060E082E00E946D028FE090E00197F1F7C5 +:1009200061E082E00E946D0283E290E00197F1F7BE +:1009300060E082E00C946D0284E00E944402019722 +:1009400099F40E949A0360935B0170935C01809319 +:100950005D0190935E0160935701709358018093FD +:10096000590190935A0108950E949A03F4CF1F925F +:100970000F920FB60F9211242F933F934F935F93D3 +:100980006F937F938F939F93AF93BF93EF93FF9357 +:1009900086E891E00E948701FF91EF91BF91AF91AE +:1009A0009F918F917F916F915F914F913F912F9187 +:1009B0000F900FBE0F901F9018951F920F920FB6B9 +:1009C0000F9211242F938F939F93EF93FF93E091B6 +:1009D0009601F09197018081E0919C01F0919D0139 +:1009E00082FD1BC0908180919F018F5F8F7320914A +:1009F000A001821741F0E0919F01F0E0EA57FE4F1D +:100A0000958F80939F01FF91EF919F918F912F91EF +:100A10000F900FBE0F901F9018958081F4CF1F92FA +:100A20000F920FB60F9211242F933F938F939F93A2 +:100A3000AF93BF9380916C0190916D01A0916E0175 +:100A4000B0916F0130914D0123E0230F2D3758F500 +:100A50000196A11DB11D20934D0180936C019093CF +:100A60006D01A0936E01B0936F0180914E01909142 +:100A70004F01A0915001B09151010196A11DB11DEE +:100A800080934E0190934F01A0935001B093510178 +:100A9000BF91AF919F918F913F912F910F900FBE7A +:100AA0000F901F90189526E8230F0296A11DB11DE7 +:100AB000D2CF1F920F920FB60F9211242F933F9314 +:100AC0004F935F936F937F938F939F93AF93BF9356 +:100AD000CF93EF93FF9399B180915601C091640138 +:100AE000C923282F2095C223209161018223292F19 +:100AF00020958223C82B90935601C4FF05C0E09136 +:100B00000E01F0910F010995C5FF05C0E0910001AC +:100B1000F09101010995C6FF05C0E0910201F09135 +:100B200003010995C7FF05C0E0910401F09105019B +:100B30000995C0FF05C0E0910601F09107010995F4 +:100B4000C1FF05C0E0910801F09109010995C2FFBC +:100B500005C0E0910A01F0910B010995C3FF05C0A2 +:100B6000E0910C01F0910D010995FF91EF91CF916A +:100B7000BF91AF919F918F917F916F915F914F91B5 +:100B80003F912F910F900FBE0F901F9018951F92BD +:100B90000F920FB60F9211242F933F934F935F93B1 +:100BA0006F937F938F939F93AF93BF93CF93DF9375 +:100BB000EF93FF9380914C01C0914702D0E087FFF3 +:100BC00024C0109285001092840080914C018F5FA8 +:100BD00080934C0180914C01082E000C990B8C17CE +:100BE0009D0724F480914C018C30C4F180918400E5 +:100BF00090918500049680349C4908F47AC08091D5 +:100C0000840090918500049676C080914C01082E56 +:100C1000000C990B8C179D07C4F6E0914C018E2FA8 +:100C2000EE0F990BFC01EE0FFF1FE80FF91FED5DB2 +:100C3000FD4F808186FFC9CFE0914C018E2FEE0FD2 +:100C4000990BFC01EE0FFF1FE80FF91FED5DFD4F43 +:100C5000808160E08F730E946D02B7CF2091840085 +:100C600030918500E0914C018E2FEE0F990BFC0125 +:100C7000EE0FFF1FE80FF91FED5DFD4F818192819F +:100C8000820F931F9093890080938800E0914C011C +:100C90008E2FEE0F990BFC01EE0FFF1FE80FF91FCF +:100CA000ED5DFD4F808186FF11C0E0914C018E2FDC +:100CB000EE0F990BFC01EE0FFF1FE80FF91FED5D22 +:100CC000FD4F808161E08F730E946D02FF91EF9173 +:100CD000DF91CF91BF91AF919F918F917F916F9154 +:100CE0005F914F913F912F910F900FBE0F901F90EA +:100CF000189580E49CE990938900809388008FEF99 +:100D000080934C01E3CFCF92DF92EF92FF920F934B +:100D10001F93E82FF92F05C001501109210931094E +:100D200061F1908196239417B9F305C00150110920 +:100D30002109310911F1908196239413F7CFC12C29 +:100D4000D12CE12CF12C0AC08FEFC81AD80AE80A7E +:100D5000F80A0C151D052E053F0579F080818623C4 +:100D6000841791F36C2D7D2D8E2D9F2D1F910F914A +:100D7000FF90EF90DF90CF90089560E070E080E00A +:100D800090E01F910F91FF90EF90DF90CF9008952A +:100D9000109289011092880188EE93E0A0E0B0E003 +:100DA00080938A0190938B01A0938C01B0938D0165 +:100DB00084E191E0909387018093860185EC90E037 +:100DC000909393018093920184EC90E0909395012D +:100DD0008093940180EC90E090939701809396012A +:100DE00081EC90E0909399018093980182EC90E0DF +:100DF00090939B0180939A0186EC90E090939D01E3 +:100E000080939C0110929F011092A0011092A10169 +:100E10001092A201809147028C3098F491E0980FD3 +:100E2000909347028093480290E0FC01EE0FFF1F71 +:100E3000E80FF91FED5DFD4F88EB9BE09283818306 +:100E400008958FEF809348020895789484B5826066 +:100E500084BD84B5816084BD85B5826085BD85B55E +:100E6000816085BD80916E00816080936E001092DC +:100E70008100809181008260809381008091810057 +:100E800081608093810080918000816080938000E8 +:100E90008091B10084608093B1008091B000816046 +:100EA0008093B00080917A00846080937A00809172 +:100EB0007A00826080937A0080917A0081608093CA +:100EC0007A0080917A00806880937A001092C10045 +:100ED000C0E061E08C2F0E949B0260E08C2F0E949A +:100EE0006D02CF5FCC30A9F761E080E00E946D0217 +:100EF00061E081E00E946D02CEE1D0E00E94380402 +:100F00002197E1F70E943804909353018093520196 +:100F10008FE00E94850390936B0180936A0182E1C8 +:100F20000E94850390936901809368018CE994E0A5 +:100F300090930F0180930E018091640180618093F2 +:100F400064018091610180618093610189B1809326 +:100F5000560180916D00806180936D0080916800E2 +:100F600084608093680060E084E00E949B020E949D +:100F7000880464E670E080E090E00E94BF03409146 +:100F80005B0150915C0160915D0170915E01809107 +:100F9000570190915801A0915901B0915A014817F9 +:100FA00059076A077B0708F091C081E080938301AD +:100FB00060E084E00E949B02E0919601F09197012D +:100FC00082E08083E0919601F09197011082E09198 +:100FD0009201F09193011082E0919401F0919501BA +:100FE00080E1808310929E01E0919A01F0919B0133 +:100FF00086E08083E0919801F09199018081806181 +:101000008083E0919801F0919901808188608083CC +:10101000E0919801F0919901808180688083E0914E +:101020009801F091990180818F7D808386E891E01D +:101030000E944501892BD1F312EB412E10E0512E75 +:101040000EE9A02E00E0B02E80E0C82E80E0D82E61 +:1010500077247394EE24E394F12C1092850110927E +:10106000840186E891E00E946701EC01009184010F +:1010700010918501892B09F4DBC086E891E00E947C +:101080004501C82F0F5F1F4F109385010093840106 +:10109000809183010C2F0C2E000C110B882309F476 +:1010A0008DC017FF36C0C6FD15C088E090E00E94D5 +:1010B000030489E090E00E9403048AE090E00E942B +:1010C00003048BE090E00E940304CBCF10928301D5 +:1010D00061E06FCFC5FF86C0159507950F7011278A +:1010E0000430110509F4BDCF0230110509F4B9CF60 +:1010F000C8010E941004C0FF6CC00730110521F424 +:10110000F0926701E092660161E0802F0E946D021B +:10111000A8CF80916501082E000C990B8C011595C4 +:1011200007950F7011270430110509F49ACF02308A +:10113000110509F496CF9695982F8827979587954E +:101140009927CF77C80FD92FD11DC8010E9410044D +:101150000630110509F580917401811104C086E003 +:1011600090E00E94CC02CE010E948C002FB7F89430 +:1011700080916C0190916D01A0916E01B0916F0111 +:101180002FBF8093700190937101A0937201B0936F +:101190007301709274010FC00330110521F0C80172 +:1011A0000997039740F461E0802F0E949B02BE01E3 +:1011B000802F0E9428031092650153CF17FF15C09E +:1011C000C6FF73CFC5FF0EC0159507950F70112789 +:1011D0008FCF0730110521F410926701109266013C +:1011E00060E093CFC09365013CCF80916501082EEC +:1011F000000C990B8C01159507950F70112796958A +:10120000982F8827979587959927CF77C80FD92F3B +:10121000D11DC8010E9410040630110509F49BCFAE +:101220000330110521F2C8010997039720F6BFCFBB +:101230008091820181110BC08EE00E9485030E9483 +:10124000F60161E070E080E090E00E94BF03012BB6 +:1012500081F070928201709281011092800110924F +:101260007F0110927B0110927C0110927D011092FF +:101270007E0180917B0190917C01A0917D01B091D4 +:101280007E010196A11DB11D80937B0190937C018D +:10129000A0937D01B0937E01813A9648A140B105AB +:1012A00050F01092820110927B0110927C011092FA +:1012B0007D0110927E0180918101882309F40AC189 +:1012C00080917F019091800101969093800180939D +:1012D0007F01059709F0CEC0109281011092800124 +:1012E00010927F018091770180FDB1C010E000E095 +:1012F000209721F40E9438044C0110C0C130D10560 +:1013000009F089C081E00E9485038C599F4F20918C +:101310006A0130916B014C01821A930AC401880F53 +:10132000892F881F990B877099279801206C822B31 +:10133000932B0E94F601C4018F7799270E94F60132 +:101340002196085F1F4FC730D10591F6C8E0D0E065 +:10135000CE010E94F10381110FC08C2F0E94440224 +:101360009E01220F331F220F331F019709F064C023 +:10137000C90181680E94F6012196CC30D10541F760 +:1013800080918301882309F45AC0C0917501D091DE +:101390007601CE01880F892F881F990B9927886FB6 +:1013A0000E94F601CE018F7799270E94F6010E94D4 +:1013B0008804F2016491F5018491E82FF0E0EE0FCA +:1013C000FF1FE057FF4F8591949100E412E42FE056 +:1013D00030E0462F0E948306611571058105910555 +:1013E00009F084C0072E000C880B990B0E94170B84 +:1013F00026E933E44BE05DE30E947B0B20E030E024 +:1014000040E05FE30E947B0B0E94DF0A709376014D +:10141000609375011CC0C430D10551F484E00E9472 +:1014200085038C599F4F209168013091690173CFDA +:101430008C2F0E94850360CFC90180689BCF88EF05 +:1014400090E00E94F60190E080E00E94F601809119 +:10145000770190917801A0917901B0917A0101967C +:10146000A11DB11D8093770190937801A09379011C +:10147000B0937A0180917401882361F12FB7F894B9 +:1014800080916C0190916D01A0916E01B0916F01FE +:101490002FBF409170015091710160917201709164 +:1014A0007301841B950BA60BB70B87399105A1051A +:1014B000B10580F010927401E09148028E2F90E007 +:1014C000FC01EE0FFF1FE80FF91FED5DFD4F80815E +:1014D0008F7B8083C114D10409F4BFCD0E947301B6 +:1014E000882309F4BACD0E940000B7CD6F5F7F4F0B +:1014F0008F4F9F4F9F7076CF052E97FB1EF4009461 +:101500000E94930A57FD07D00E94AE0A07FC03D041 +:101510004EF40C94930A50954095309521953F4F89 +:101520004F4F5F4F089590958095709561957F4FCF +:101530008F4F9F4F08950E94D00AA59F900DB49F92 +:10154000900DA49F800D911D11240895B7FF0C9458 +:101550009B0A0E949B0A821B930B0895A1E21A2EFC +:10156000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F47 +:10157000A217B307E407F50720F0A21BB30BE40B97 +:10158000F50B661F771F881F991F1A9469F76095DE +:101590007095809590959B01AC01BD01CF01089598 +:1015A000A29FB001B39FC001A39F700D811D1124A4 +:1015B000911DB29F700D811D1124911D08950E94EF +:1015C000E60A6894B1110C94750B08950E945A0BA9 +:1015D00088F09F5798F0B92F9927B751B0F0E1F0F4 +:1015E000660F771F881F991F1AF0BA95C9F714C0A4 +:1015F000B13091F00E94740BB1E008950C94740B1B +:10160000672F782F8827B85F39F0B93FCCF38695DC +:1016100077956795B395D9F73EF490958095709539 +:1016200061957F4F8F4F9F4F0895E89409C097FBB6 +:101630003EF490958095709561957F4F8F4F9F4FA9 +:101640009923A9F0F92F96E9BB279395F6958795ED +:1016500077956795B795F111F8CFFAF4BB0F11F4B0 +:1016600060FF1BC06F5F7F4F8F4F9F4F16C0882357 +:1016700011F096E911C0772321F09EE8872F762F8D +:1016800005C0662371F096E8862F70E060E02AF0CE +:101690009A95660F771F881FDAF7880F96958795BA +:1016A00097F9089557FD9058440F551F59F05F3F23 +:1016B00071F04795880F97FB991F61F09F3F79F074 +:1016C00087950895121613061406551FF2CF4695F6 +:1016D000F1DF08C0161617061806991FF1CF869578 +:1016E0007105610508940895E894BB27662777275C +:1016F000CB0197F908950E948E0B0C94FF0B0E946A +:10170000F10B38F00E94F80B20F0952311F00C94A7 +:10171000E80B0C94EE0B11240C94750B0E94520BE9 +:1017200070F3959FC1F3950F50E0551F629FF00134 +:10173000729FBB27F00DB11D639FAA27F00DB11D4D +:10174000AA1F649F6627B00DA11D661F829F2227D6 +:10175000B00DA11D621F739FB00DA11D621F839F5D +:10176000A00D611D221F749F3327A00D611D231F33 +:10177000849F600D211D822F762F6A2F11249F5781 +:1017800050409AF0F1F088234AF0EE0FFF1FBB1F84 +:10179000661F771F881F91505040A9F79E3F510543 +:1017A00080F00C94E80B0C94750B5F3FE4F3983ECB +:1017B000D4F3869577956795B795F795E7959F5FED +:1017C000C1F7FE2B880F911D9695879597F908957F +:1017D00097F99F6780E870E060E008959FEF80ECE4 +:1017E000089500240A941616170618060906089587 +:1017F00000240A9412161306140605060895092EED +:101800000394000C11F4882352F0BB0F40F4BF2B5B +:1018100011F460FF04C06F5F7F4F8F4F9F4F08959B +:10182000991B79E004C0991F961708F0961B881F32 +:101830007A95C9F78095089597FB072E16F40094C2 +:1018400007D077FD09D00E94300C07FC05D03EF48C +:10185000909581959F4F0895709561957F4F08955C +:10186000AA1BBB1B51E107C0AA1FBB1FA617B707C6 +:1018700010F0A61BB70B881F991F5A95A9F78095E2 +:101880009095BC01CD010895EE0FFF1F0590F491D6 +:08189000E02D0994F894FFCF4C +:1018980008010801080108010801080108010801F8 +:1018A80000000000A90109013601FB01670145019B +:0218B8005901D4 +:00000001FF diff --git a/app/firmwares/sunobt.hex b/app/firmwares/sunobt.hex new file mode 100644 index 000000000..5c3493ce4 --- /dev/null +++ b/app/firmwares/sunobt.hex @@ -0,0 +1,454 @@ +:100000000C9463000C948B000C948B000C94EC0506 +:100010000C94EC050C94EC050C948B000C948B0068 +:100020000C948B000C948B000C948B000C94640645 +:100030000C948B000C948B000C948B000C948B0014 +:100040000C94A2050C948B000C9470050C944A053A +:100050000C948B000C948B000C948B000C948B00F4 +:100060000C948B000C948B000000000024002700EF +:100070002A0000000008000201000003040700003D +:1000800000000000000000000000230026002900FE +:1000900000000000250028002B00040404040404D0 +:1000A0000404020202020202030303030303010227 +:1000B00004081020408001020408102001020408F6 +:1000C00010206507140C11241FBECFEFD8E0DEBF4F +:1000D000CDBF11E0A0E0B1E0E6E1FCE102C0059097 +:1000E0000D92A832B107D9F722E0A8E2B1E001C031 +:1000F0001D92A33AB207E1F710E0C2E6D0E004C0D7 +:100100002197FE010E94F80DC136D107C9F70E9460 +:100110002A080C94FE0D0C940000CF92DF92EF920F +:10012000FF92DC01A03282E0B807D4F5A53BB1050F +:1001300014F0A4EBB0E04091820228E830E0241BE8 +:10014000310947FD3395220F331F220F331F6901F9 +:10015000330FEE08FF084091830228E532E0241BAC +:10016000310947FD3395220F331F220F331F032E12 +:10017000000C440B550B2C193D094E095F09B7FFC4 +:1001800002C0B0E0A0E00E945A0C24EB30E040E056 +:1001900050E00E94300CC20ED31EE41EF51ED601A4 +:1001A000E0918102EC3080F52091820288E890E0B5 +:1001B000821B910927FD9395880F991F880F991F1E +:1001C000A817B90784F02091830288E592E0821B8A +:1001D000910927FD9395880F991F880F991FA817DC +:1001E000B9070CF4CD010297880F991F4FB7F89407 +:1001F0002E2F30E0F901EE0FFF1FE20FF31FE45A3C +:10020000FD4F928381834FBFFF90EF90DF90CF909F +:100210000895AF92BF92CF92DF92EF92FF920F9329 +:100220001F93CF93DF936C017B018B01040F151F8C +:10023000EB015E01AE18BF08C017D10759F06991F4 +:10024000D601ED91FC910190F081E02DC601099558 +:10025000892B79F7C501DF91CF911F910F91FF9005 +:10026000EF90DF90CF90BF90AF900895FC01538D39 +:10027000448D252F30E0842F90E0821B930B541780 +:1002800010F0CF96089501970895FC01918D828D0D +:10029000981761F0A28DAE0FBF2FB11D5D968C91A6 +:1002A000928D9F5F9F73928F90E008958FEF9FEFE5 +:1002B0000895FC01918D828D981731F0828DE80FA1 +:1002C000F11D858D90E008958FEF9FEF0895FC015B +:1002D000918D228D892F90E0805C9F4F821B910928 +:1002E0008F73992708958FEB91E00E94670121E0B9 +:1002F000892B09F420E0822F089580E090E0892B7B +:1003000029F00E94730181110C9400000895FC01F2 +:10031000A48DA80FB92FB11DA35ABF4F2C91848D66 +:1003200090E001968F739927848FA689B7892C93C3 +:10033000A089B1898C91837080648C93938D848D16 +:10034000981306C00288F389E02D80818F7D808319 +:100350000895EF92FF920F931F93CF93DF93EC01D9 +:1003600081E0888F9B8D8C8D98131AC0E889F9895C +:10037000808185FF15C09FB7F894EE89FF8960835F +:10038000E889F98980818370806480839FBF81E0E0 +:1003900090E0DF91CF911F910F91FF90EF90089522 +:1003A000F62E0B8D10E00F5F1F4F0F731127E02EFD +:1003B0008C8D8E110CC00FB607FCFACFE889F98935 +:1003C000808185FFF5CFCE010E948701F1CFEB8DB3 +:1003D000EC0FFD2FF11DE35AFF4FF0829FB7F89409 +:1003E0000B8FEA89FB8980818062CFCFCF93DF9327 +:1003F000EC01888D8823B9F0AA89BB89E889F9893D +:100400008C9185FD03C0808186FD0DC00FB607FC71 +:10041000F7CF8C9185FFF2CF808185FFEDCFCE01A4 +:100420000E948701E9CFDF91CF910895833081F059 +:1004300028F4813099F08230A9F008958730A9F02E +:100440008830C9F08430B1F4809180008F7D03C082 +:10045000809180008F7780938000089584B58F7796 +:1004600084BD089584B58F7DFBCF8091B0008F77D8 +:100470008093B00008958091B0008F7DF9CF1F93D5 +:10048000CF93DF93282F30E0F901EE58FF4F84918E +:10049000F901E255FF4FD491F901E656FF4FC4919F +:1004A000CC23A9F0162F81110E941602EC2FF0E048 +:1004B000EE0FFF1FE057FF4FA591B4918FB7F8944F +:1004C000EC91111108C0D095DE23DC938FBFDF9132 +:1004D000CF911F910895DE2BF8CFCF93DF9390E05B +:1004E000FC01E255FF4F249186569F4FFC018491F9 +:1004F0008823D1F090E0880F991FFC01E859FF4F45 +:10050000A591B491FC01E057FF4FC591D4916111C1 +:100510000EC09FB7F8948C91E22FE0958E238C93B8 +:100520002881E223E8839FBFDF91CF9108958FB7A1 +:10053000F894EC91E22BEC938FBFF6CFCF93909190 +:1005400081029C3008F052C0C82F61E00E946D0209 +:1005500080918102282F30E0F901EE0FFF1FE20F9A +:10056000F31FE45AFD4FCF739081907CC92BC08359 +:1005700010928202109283022CE0622F0E94C40D1E +:10058000829FB001112430E020E0AB01420F531FE5 +:10059000FA01EE0FFF1FE40FF51FE45AFD4F9081A3 +:1005A00096FD16C02F5F3F4F2C30310571F781113A +:1005B0000FC01092800082E080938100109285002D +:1005C00010928400B19A80916F00826080936F00D6 +:1005D000E09181028E2F90E0FC01EE0FFF1FE80FEB +:1005E000F91FE45AFD4F80818064808380918102ED +:1005F000CF9108951F93CF93DF93182FEB0161E004 +:100600000E946D02209739F460E0812FDF91CF9135 +:100610001F910C943F02CF3FD10511F461E0F5CF5B +:10062000E12FF0E0EE58FF4FE491E33031F140F478 +:10063000E130B1F0E230E1F0C038D1057CF7E4CF31 +:10064000E73029F1E83059F1E430B1F780918000CA +:10065000806280938000D0938B00C0938A0004C096 +:1006600084B5806884BDC7BDDF91CF911F91089587 +:1006700084B5806284BDC8BDF7CF8091800080685A +:1006800080938000D0938900C0938800EDCF809143 +:10069000B00080688093B000C093B300E5CF809134 +:1006A000B00080628093B000C093B400DDCF8E3084 +:1006B00008F08E508770806480937C0080917A006F +:1006C000806480937A0080917A0086FDFCCF8091CF +:1006D00078009091790008953FB7F8948091940143 +:1006E00090919501A0919601B091970126B5A89B94 +:1006F00005C02F3F19F00196A11DB11D3FBFBA2FB4 +:10070000A92F982F8827BC01CD01620F711D811D73 +:10071000911D42E0660F771F881F991F4A95D1F7F8 +:1007200008958F929F92AF92BF92CF92DF92EF92F5 +:10073000FF924B015C010E946C036B017C010E94E3 +:100740006C036C197D098E099F09683E7340810511 +:100750009105A8F321E0821A9108A108B10888EE5A +:10076000C80E83E0D81EE11CF11C81149104A10481 +:10077000B10429F7FF90EF90DF90CF90BF90AF903A +:100780009F908F90089520919C0130919D01281792 +:10079000390771F490919A0180919B01981741F06B +:1007A000E0919A01F0E0ED5AFE4F808190E00895CB +:1007B0008FEF9FEF08950895EF92FF920F931F938D +:1007C000CF93DF93DC015C96ED90FC905D97E11494 +:1007D000F10479F481E090E013969C938E93129744 +:1007E00090E080E0DF91CF911F910F91FF90EF900B +:1007F00008955196ED91FC91529750968C91509797 +:10080000982F90950FB75E962C915E97122F1270CD +:1008100021FD6095F8942081112319F1282B208364 +:10082000E7012197F1F728E0462F50E0308160FF83 +:100830001AC0382B3083E7012197F1F7BA0175957B +:100840006795215089F7112381F080818923808366 +:100850000FBF5C968D919C910197F1F781E090E03C +:10086000C1CF2923DCCF3923E5CF9081892BEFCF6E +:1008700020919C0130919D012817390771F48091D6 +:100880009B0120919A0190E0805C9F4F821B91090F +:1008900060E470E00E94D00D089590E080E008953B +:1008A00020919C0130919D0128173907B9F490914E +:1008B0009A0180919B01981789F0E0919A01F0E0EC +:1008C000ED5AFE4F808120919A0130E02F5F3F4F1B +:1008D0002F73332720939A0190E008958FEF9FEFB5 +:1008E000089590E080E008958830910564F024B187 +:1008F00030E00897A90102C0559547958A95E2F71F +:10090000CA01817008952AB130E0F4CFCF93C82F87 +:100910000E947404882329F060E08C2FCF910C94FE +:100920006D02CF910895CF93DF938830910501F147 +:1009300020919F013091A001232B49F48330910530 +:10094000B9F09C01295031092330310588F08C30F1 +:10095000910574F48630910559F0EC010E947404FD +:10096000811106C061E08C2FDF91CF910C946D0254 +:10097000DF91CF910895EF92FF920F931F93CF9342 +:10098000DF93E0909801F09099010091500110914F +:100990005101E801CC0FDD1F8EE0E114F10469F58F +:1009A0000E945703C85DDE4F998388830F5F1F4FF6 +:1009B000043111055CF51093510100935001E8E2F8 +:1009C000F1E040E551E090E080E02191319137FF86 +:1009D00003C0319521953109820F931F4E175F0790 +:1009E000A1F764E170E00E94D00DCB01DF91CF91BF +:1009F0001F910F91FF90EF9008950E945703C85DDB +:100A0000DE4FE81AF90AF982E882D0CF109251013C +:100A100010925001D4CF61E082E00E946D0260E04C +:100A200084E00E946D0260E082E00E943F0283E069 +:100A300090E00197F1F761E082E00E943F0283E2DB +:100A400090E00197F1F760E082E00C943F020F9391 +:100A50001F93E2EBF0E06491EEE9F0E0E491F0E066 +:100A6000EE0FFF1FEA57FF4F8591949100E412E4C7 +:100A70002FE030E0462F0E942007611571058105A7 +:100A8000910529F06F5F7F4F8F4F9F4F9F701F9190 +:100A90000F9108951F920F920FB60F9211242F936A +:100AA0003F934F935F936F937F938F939F93AF93F6 +:100AB000BF93EF93FF938FEB91E00E948701FF912B +:100AC000EF91BF91AF919F918F917F916F915F91C6 +:100AD0004F913F912F910F900FBE0F901F9018953F +:100AE0001F920F920FB60F9211242F938F939F9303 +:100AF000EF93FF93E091CF01F091D0018081E091DD +:100B0000D501F091D60182FD1BC090818091D80162 +:100B10008F5F8F732091D901821741F0E091D80146 +:100B2000F0E0E154FE4F958F8093D801FF91EF9153 +:100B30009F918F912F910F900FBE0F901F9018953E +:100B40008081F4CF1F920F920FB60F9211242F9332 +:100B50003F938F939F93AF93BF938091A501909103 +:100B6000A601A091A701B091A8013091930123E0C3 +:100B7000230F2D3758F50196A11DB11D2093930128 +:100B80008093A5019093A601A093A701B093A8011B +:100B90008091940190919501A0919601B091970157 +:100BA0000196A11DB11D8093940190939501A0938E +:100BB0009601B0939701BF91AF919F918F913F9113 +:100BC0002F910F900FBE0F901F90189526E8230FBE +:100BD0000296A11DB11DD2CF1F920F920FB60F9298 +:100BE00011242F933F934F935F936F937F938F9332 +:100BF0009F93AF93BF93EF93FF93E0919C01F0918C +:100C00009D01309749F0A685B7858585968D91FF22 +:100C100014C09C918923A1F4FF91EF91BF91AF91F2 +:100C20009F918F917F916F915F914F913F912F9104 +:100C30000F900FBE0F901F9018959C91892361F71C +:100C4000A389B4899C918589809589238C93868911 +:100C500097890197F1F7608D718DA685B7855585C8 +:100C600038E020E0CB010197F1F7822F90E09595D5 +:100C70008795282F4C91452309F02068315091F732 +:100C8000868D81FD209580919B0190E001968F7368 +:100C9000992730919A01381799F0A0919B01B0E003 +:100CA000AD5ABE4F2C9380939B01828D938D0197FB +:100CB000F1F7A389B4898C919589892B8C93ACCF5A +:100CC000868D8160868FF1CF1F920F920FB60F92A3 +:100CD00011242F933F934F935F936F937F938F9341 +:100CE0009F93AF93BF93CF93DF93EF93FF93809145 +:100CF0005201C0918002D0E087FF24C0109285008D +:100D000010928400809152018F5F809352018091F4 +:100D10005201082E000C990B8C179D0724F480912A +:100D200052018C30C4F1809184009091850004962A +:100D300080349C4908F47AC08091840090918500A9 +:100D4000049676C080915201082E000C990B8C17E6 +:100D50009D07C4F6E09152018E2FEE0F990BFC0116 +:100D6000EE0FFF1FE80FF91FE45AFD4F808186FF49 +:100D7000C9CFE09152018E2FEE0F990BFC01EE0FBF +:100D8000FF1FE80FF91FE45AFD4F808160E08F7369 +:100D90000E943F02B7CF2091840030918500E091FE +:100DA00052018E2FEE0F990BFC01EE0FFF1FE80F83 +:100DB000F91FE45AFD4F81819281820F931F909316 +:100DC000890080938800E09152018E2FEE0F990BDD +:100DD000FC01EE0FFF1FE80FF91FE45AFD4F808161 +:100DE00086FF11C0E09152018E2FEE0F990BFC018E +:100DF000EE0FFF1FE80FF91FE45AFD4F808161E0FD +:100E00008F730E943F02FF91EF91DF91CF91BF91CD +:100E1000AF919F918F917F916F915F914F913F9192 +:100E20002F910F900FBE0F901F90189580E49CE9B2 +:100E300090938900809388008FEF80935201E3CFD5 +:100E4000CF92DF92EF92FF920F931F93E82FF92F2B +:100E500005C0015011092109310961F190819623E2 +:100E60009417B9F305C0015011092109310911F195 +:100E7000908196239413F7CFC12CD12CE12CF12C27 +:100E80000AC08FEFC81AD80AE80AF80A0C151D051F +:100E90002E053F0579F080818623841791F36C2D10 +:100EA0007D2D8E2D9F2D1F910F91FF90EF90DF9044 +:100EB000CF90089560E070E080E090E01F910F9186 +:100EC000FF90EF90DF90CF9008951092C2011092A2 +:100ED000C10188EE93E0A0E0B0E08093C30190935D +:100EE000C401A093C501B093C60124E031E0309362 +:100EF000C0012093BF0125EC30E03093CC0120935A +:100F0000CB0124EC30E03093CE012093CD0120ECD6 +:100F100030E03093D0012093CF0121EC30E03093CA +:100F2000D2012093D10122EC30E03093D401209300 +:100F3000D30126EC30E03093D6012093D5011092F6 +:100F4000D8011092D9011092DA011092DB011092AF +:100F50008702109286028093880290938902A09360 +:100F60008A02B0938B0286E191E090938502809390 +:100F7000840210929B0210929A0210929D0210928B +:100F80009C0210929F0210929E021092A102109257 +:100F9000A0026091A2026E7F6D7F6093A2026695AF +:100FA000617081E068278DE00E943F0261E08DE082 +:100FB0000E946D02EBEBF0E0E491E0939402E7EA2B +:100FC000F0E0E491F0E0EE0FFF1FE057FF4F859156 +:100FD0009491909396028093950260E08CE00E9439 +:100FE0006D028091A20281FD04C061E08CE00E944C +:100FF0003F028CE080939002EAEBF0E0E491E09312 +:101000009102E6EAF0E0E491F0E0EE0FFF1FEA570C +:10101000FF4F8591949190939302809392028091D7 +:1010200080028C3098F491E0980F90938002809326 +:10103000810290E0FC01EE0FFF1FE80FF91FE45A58 +:10104000FD4F88EB9BE09283818308958FEF80931F +:1010500081020895789484B5826084BD84B58160EE +:1010600084BD85B5826085BD85B5816085BD809173 +:101070006E00816080936E001092810080918100EB +:1010800082608093810080918100816080938100E3 +:10109000809180008160809380008091B1008460A5 +:1010A0008093B1008091B00081608093B000809106 +:1010B0007A00846080937A0080917A0082608093C5 +:1010C0007A0080917A00816080937A0080917A0022 +:1010D000806880937A001092C100E091CF01F09176 +:1010E000D00182E08083E091CB01F091CC011082AD +:1010F000E091CD01F091CE0180E180831092D70183 +:10110000E091D301F091D40186E08083E091D10198 +:10111000F091D201808180618083E091D101F091D2 +:10112000D201808188608083E091D101F091D20169 +:10113000808180688083E091D101F091D20180812B +:101140008F7D808364E670E080E090E00E949103F0 +:10115000C1E0C093BC010E940B050E9427050E94BC +:10116000CB0C26E933E44BE05DE30E942F0D20E039 +:1011700030E040E05FE30E942F0D0E94930C7093DB +:10118000AF016093AE01672B09F419C1C093BC0194 +:1011900060E084E00E946D02C5E061E08C2F0E9457 +:1011A0006D0260E08C2F0E943F02CF5FCC30A9F728 +:1011B00061E083E00E946D0260E083E00E943F02F4 +:1011C000CEE1D0E00E94BB042197E1F70E94BB046E +:1011D00090939901809398018FE00E945703909318 +:1011E000A4018093A30182E10E9457039093A2017E +:1011F0008093A10164E670E080E090E00E9491039A +:1012000010929F0210929E0210929D0210929C02D8 +:1012100010929B0210929A0282E490E09093A102B5 +:101220008093A00290919002963108F047C02FE081 +:1012300030E030939B0220939A0220E430E0309318 +:101240009D0220939C0227E230E030939F0220937E +:101250009E022091680084E0983048F031E09E3092 +:1012600008F430E081E001C0880F3A95EAF7822B5C +:10127000809368002DE630E0983050F02BE630E0A7 +:101280009E3030F02CE630E0963110F030E020E077 +:101290003093980220939702292F30E0983008F07D +:1012A00092C081E001C0880F9A95EAF78093990275 +:1012B0008091A0029091A1020197F1F780919E0286 +:1012C00090919F02892B49F1E0919C01F0919D0141 +:1012D00022E0E438F20709F1309739F0A389B489A4 +:1012E0009C918589809589238C938091A2028E7F21 +:1012F0008093A20210929B0110929A0184E892E0DE +:1013000090939D0180939C01E0919702F091980247 +:10131000808190919902892B808362E370E080E064 +:1013200090E00E94910342E050E064E271E084E8C2 +:1013300092E00E94090162E370E080E090E00E9488 +:101340009103C0E0EC2EC0E0FC2E01E010E0109212 +:10135000BE011092BD0184E892E00E9438046C0145 +:10136000C091BD01D091BE01892B09F4F7C084E87A +:1013700092E00E945004D82E2196D093BE01C093D3 +:10138000BD018091BC01CD2D0D2C000CDD0B8823FF +:1013900009F49CC0D7FF43C0D6FC22C088E090E08F +:1013A0000E94860489E090E00E9486048AE090E032 +:1013B0000E9486048BE090E00E948604CCCF1092BD +:1013C000BC0161E0E6CE9E3040F42850310981E056 +:1013D00001C0880F2A95EAF769CF2E503109F7CF5F +:1013E000D5FE88C0D595C795CF70DD27C430D1050F +:1013F00009F4B1CFC230D10509F4ADCFCE010E94BE +:101400009304D0FE6EC0C730D10521F41093A00123 +:1014100000939F0161E08C2F0E943F029CCFC091FE +:101420009E010C2E000CDD0B5E01B594A7948FE09D +:10143000A822BB2424E0A216B10409F48CCF82E0D8 +:10144000A816B10409F487CFD695DC2FCC27D79501 +:10145000C795DD27E894D7F8CD0DD11DC5010E94B1 +:10146000930426E0A216B10411F58091AD0181111B +:1014700004C086E090E00E949E022FB7F89480910D +:10148000A5019091A601A091A701B091A8012FBF3D +:101490008093A9019093AA01A093AB01B093AC01F2 +:1014A000CE010E948D0081E08093AD010CC083E0ED +:1014B000A816B10421F0C5010997039720F4BE01D5 +:1014C0008A2D0E94FA0210929E0145CFD7FF15C0C7 +:1014D000D6FE64CFD5FE0EC0D595C795CF70DD275B +:1014E0008DCFC730D10521F41092A00110929F0139 +:1014F00060E091CFD0929E012ECFC0919E010C2E24 +:10150000000CDD0B5E01B594A7942FE0A222BB2452 +:10151000D695DC2FCC27D795C795CE019927CD2D11 +:10152000CF77C80FD92FD11DC5010E94930486E043 +:10153000A816B10409F499CF23E0A216B10429F04A +:10154000C5010997039708F0BECF61E08AE00E94C9 +:101550006D0261E08BE00E946D02B1CF8091BB0112 +:1015600081110EC08EE00E945703682F84E892E03C +:101570000E94DC0361E070E080E090E00E94910353 +:10158000CD2B89F081E08093BB018093BA0110924A +:10159000B9011092B8011092B4011092B5011092E5 +:1015A000B6011092B7018091B4019091B501A0915C +:1015B000B601B091B7010196A11DB11D8093B40190 +:1015C0009093B501A093B601B093B701813A9648C4 +:1015D000A140B10550F01092BB011092B4011092DD +:1015E000B5011092B6011092B7018091BA0188231B +:1015F00009F4F1C08091B8019091B90101969093DE +:10160000B9018093B801059709F0B5C01092BA01ED +:101610001092B9011092B8018091B00180FD98C07C +:10162000B12CC114D10421F40E94BB04EC0111C0FF +:1016300081E0C816D10409F0DAC081E00E945703A6 +:101640008C599F4F2091A3013091A401EC01C21B42 +:10165000D30BBE01660F672F661F770B67708B2D4C +:10166000806C682B84E892E00E94DC036C2F6F771B +:1016700084E892E00E94DC038FEFC81AD80A28E0C1 +:10168000B20E88E3B812CDCFC8E0D0E0CE010E9400 +:101690007404811128C0FE01EE58FF4F8491FE01B1 +:1016A000E255FF4FC490FE01E656FF4FD490BC2E8A +:1016B000BB0CBB0CDD2089F081110E941602ED2DC0 +:1016C000F0E0EE0FFF1FEA57FF4FA591B491EC91A8 +:1016D000CE226B2D6168C11002C06B2D606884E85A +:1016E00092E00E94DC032196CC30D10579F68091FE +:1016F000BC01882309F48DC0C091AE01D091AF0127 +:10170000BE01660F672F661F770B686F84E892E053 +:101710000E94DC036C2F6F7784E892E00E94DC0368 +:101720000E940B050E9427050E94CB0C26E933E49A +:101730004BE05DE30E942F0D20E030E040E05FE3EE +:101740000E942F0D0E94930C7093AF016093AE0125 +:101750008091B0019091B101A091B201B091B3011B +:101760000196A11DB11D8093B0019093B101A0938A +:10177000B201B093B3018091AD01882361F12FB71D +:10178000F8948091A5019091A601A091A701B09134 +:10179000A8012FBF4091A9015091AA016091AB010E +:1017A0007091AC01841B950BA60BB70B8739910583 +:1017B000A105B10580F01092AD01E09181028E2F5C +:1017C00090E0FC01EE0FFF1FE80FF91FE45AFD4FF8 +:1017D00080818F7B8083E114F10409F4B8CD0E94ED +:1017E0007301882309F4B3CD0E940000B0CD24E03A +:1017F000C216D10451F484E00E9457038C599F4FC4 +:101800002091A1013091A20121CF8C2D0E9457037C +:101810000DCF68EF84E892E00E94DC0360E084E88A +:1018200092E00E94DC0394CF86E191E090938502E0 +:101830008093840280919C0190919D0184589240F4 +:1018400071F4E0919702F091980290818091990251 +:1018500080958923808310929D0110929C010895A8 +:10186000052E97FB1EF400940E94470C57FD07D0ED +:101870000E94620C07FC03D04EF40C94470C509568 +:101880004095309521953F4F4F4F5F4F089590956C +:101890008095709561957F4F8F4F9F4F08950E945F +:1018A000840CA59F900DB49F900DA49F800D911D59 +:1018B00011240895B7FF0C944F0C0E944F0C821B0B +:1018C000930B0895A1E21A2EAA1BBB1BFD010DC0AC +:1018D000AA1FBB1FEE1FFF1FA217B307E407F507E0 +:1018E00020F0A21BB30BE40BF50B661F771F881FBC +:1018F000991F1A9469F760957095809590959B0152 +:10190000AC01BD01CF010895A29FB001B39FC001FA +:10191000A39F700D811D1124911DB29F700D811D1B +:101920001124911D08950E949A0C6894B1110C9491 +:10193000290D08950E940E0D88F09F5798F0B92F39 +:101940009927B751B0F0E1F0660F771F881F991FF4 +:101950001AF0BA95C9F714C0B13091F00E94280D61 +:10196000B1E008950C94280D672F782F8827B85F71 +:1019700039F0B93FCCF3869577956795B395D9F74C +:101980003EF490958095709561957F4F8F4F9F4F56 +:101990000895E89409C097FB3EF490958095709562 +:1019A00061957F4F8F4F9F4F9923A9F0F92F96E9AB +:1019B000BB279395F695879577956795B795F11120 +:1019C000F8CFFAF4BB0F11F460FF1BC06F5F7F4FBD +:1019D0008F4F9F4F16C0882311F096E911C07723CF +:1019E00021F09EE8872F762F05C0662371F096E8D8 +:1019F000862F70E060E02AF09A95660F771F881FA7 +:101A0000DAF7880F9695879597F9089557FD9058BE +:101A1000440F551F59F05F3F71F04795880F97FBB2 +:101A2000991F61F09F3F79F087950895121613066C +:101A30001406551FF2CF4695F1DF08C0161617069B +:101A40001806991FF1CF86957105610508940895D0 +:101A5000E894BB2766277727CB0197F908950E9462 +:101A6000420D0C94B30D0E94A50D38F00E94AC0DF0 +:101A700020F0952311F00C949C0D0C94A20D1124D0 +:101A80000C94290D0E94060D70F3959FC1F3950FDC +:101A900050E0551F629FF001729FBB27F00DB11DF2 +:101AA000639FAA27F00DB11DAA1F649F6627B00D82 +:101AB000A11D661F829F2227B00DA11D621F739F6B +:101AC000B00DA11D621F839FA00D611D221F749F79 +:101AD0003327A00D611D231F849F600D211D822FC0 +:101AE000762F6A2F11249F5750409AF0F1F08823E7 +:101AF0004AF0EE0FFF1FBB1F661F771F881F915014 +:101B00005040A9F79E3F510580F00C949C0D0C9419 +:101B1000290D5F3FE4F3983ED4F38695779567955A +:101B2000B795F795E7959F5FC1F7FE2B880F911D3D +:101B30009695879597F9089597F99F6780E870E0E3 +:101B400060E008959FEF80EC089500240A94161633 +:101B5000170618060906089500240A94121613069B +:101B6000140605060895092E0394000C11F4882329 +:101B700052F0BB0F40F4BF2B11F460FF04C06F5F45 +:101B80007F4F8F4F9F4F0895991B79E004C0991F95 +:101B9000961708F0961B881F7A95C9F780950895C7 +:101BA00097FB072E16F4009407D077FD09D00E940A +:101BB000E40D07FC05D03EF4909581959F4F089564 +:101BC000709561957F4F0895AA1BBB1B51E107C01B +:101BD000AA1FBB1FA617B70710F0A61BB70B881FBD +:101BE000991F5A95A9F780959095BC01CD0108954C +:101BF000EE0FFF1F0590F491E02D099410E0C2E66E +:101C0000D0E004C0FE010E94F80D2196C336D10732 +:061C1000C9F7F894FFCFB4 +:101C160000000000A90109013601F601670145012E +:101C2600590100000000DC0309017104DB033804DC +:081C36005004C3030D0A000075 +:00000001FF diff --git a/app/modules/KKMOO.js b/app/modules/KKMOO.js index ec6cbb450..d42a6131a 100644 --- a/app/modules/KKMOO.js +++ b/app/modules/KKMOO.js @@ -5,31 +5,34 @@ class KKMOO extends BaseModule { // 클래스 내부에서 사용될 필드들을 이곳에서 선언합니다. constructor() { super(); - - this.sendToEntry = ""; + + this.sendToEntry = ''; this.receiveData; this.isReceived = false; + this.isReceived_old = false; this.isPlaying = false; this.isPlaying_old = false; - this.cmdProc = ""; + this.cmdProc = ''; this.sendBuffer = []; - this.test = 0; + this.buffercnt = 0; + // ... } - /* - 최초에 커넥션이 이루어진 후의 초기 설정. - handler 는 워크스페이스와 통신하 데이터를 json 화 하는 오브젝트입니다. (datahandler/json 참고) - config 은 module.json 오브젝트입니다. - */ + /* + 최초에 커넥션이 이루어진 후의 초기 설정. + handler 는 워크스페이스와 통신하 데이터를 json 화 하는 오브젝트입니다. (datahandler/json 참고) + config 은 module.json 오브젝트입니다. + */ init(handler, config) { this.handler = handler; this.config = config; + this.isReceived = false; + this.isReceived_old = false; } setSerialPort(sp) { this.sp = sp; } - /* 연결 후 초기에 송신할 데이터가 필요한 경우 사용합니다. requestInitialData 를 사용한 경우 checkInitialData 가 필수입니다. @@ -41,124 +44,248 @@ class KKMOO extends BaseModule { if (!this.sp) { this.sp = sp; } - const initTX = Buffer.from("^ET"); + const initTX = Buffer.from('^ET'); sp.write(initTX); } return null; } - + // 연결 후 초기에 수신받아서 정상연결인지를 확인해야하는 경우 사용합니다. checkInitialData(data, config) { return true; } handleLocalData(data) { - const received = data.toString("ascii"); - if(received.includes("entry:")){ - if(received.includes("true")){ - this.isPlaying = "true"; + const received = data.toString('ascii'); + if (received.includes('entry:')) { + if (received.includes('true')) { + this.isPlaying = 'true'; + } else { + this.isPlaying = 'false'; } - else { - this.isPlaying = "false"; + } + if (received.includes('ATfinRobot')) { + //console.log("ATfinRobot"); + this.buffercnt++; + if (this.sendBuffer[this.buffercnt] != null) { + this.sp.write(Buffer.from(this.sendBuffer[this.buffercnt])); } } } requestRemoteData(handler) { - handler.write("data",this.isPlaying); - /*if(this.isPlaying != this.isPlaying_old){ - this.isPlaying_old = this.isPlaying; - handler.write("data",this.isPlaying); - }*/ + handler.write('data', this.isPlaying); } - + // 엔트리에서 받은 데이터에 대한 처리 handleRemoteData(handler) { - if(handler.serverData != null){ - this.receiveData = handler.read('msg'); + if (Object.keys(handler.read('msg')).length === 0) { + this.isReceived = false; + } else { + this.isReceived = true; } - else{ - this.receiveData = null; + if (this.isReceived != this.isReceived_old && this.isReceived == true) { + this.received = true; + this.receiveData = handler.read('msg'); } + this.isReceived_old = this.isReceived; } - requestLocalData(){ - if(this.receiveData != null){ - switch(this.receiveData.prot){ - case "EC": - var msg = ""; - var data = this.receiveData.data; - var motnum = parseInt(data.MOT); - var angle = parseInt(data.ANG); + requestLocalData() { + if (this.received) { + this.received = false; + switch (this.receiveData.prot) { + case 'RT': { + this.isReceived = false; + this.isReceived_old = false; + return; + } + case 'EC': { + let msg = ''; + const data = this.receiveData.data; + let motnum = parseInt(data.MOT, 10); + let angle = parseInt(data.ANG, 10); angle *= 10; - if(angle<0){ - angle = 4096+angle; + if (angle < 0) { + angle = 4096 + angle; } - motnum = motnum.toString(16).padStart(2,'0') - msg+=motnum; - angle = angle.toString(16).padStart(3,'0') - msg+=angle; - - var cmd = "^AN"+msg; - this.sp.write(Buffer.from(cmd)); - this.sp.flush() - console.log(cmd); - - break; - case "IR": - //console.log("!!!!!!!!!!!!ir!!!!!!!!!!!"); - var cmd = "^ir" - this.sp.write(Buffer.from(cmd)) - break; - case "PM": - var msg = ""; - var slot = parseInt(this.receiveData.data); - msg = slot.toString(16).padStart(2,'0'); - var cmd = "$PM"+msg; - this.sp.write(Buffer.from(cmd)); - break; - case "CM": - var msg = ""; - var slot = parseInt(this.receiveData.data)+90; - msg = slot.toString(16).padStart(2,'0'); - var cmd = "$PM"+msg; - this.sp.write(Buffer.from(cmd)); - break; - case "AD": - var msg = ""; - var data = this.receiveData.data; - var motnum = parseInt(data.MOT); - var angle = parseInt(data.ANG); - var time = parseInt(data.TME); - angle *=10; - if(angle<0){ - angle = 4096+angle; + motnum = motnum.toString(16).padStart(2, '0'); + msg += motnum; + angle = angle.toString(16).padStart(3, '0'); + msg += angle; + + const cmd = `^AN${msg}`; + //this.sp.write(Buffer.from(cmd)); + //console.log(cmd); + return cmd; + } + + case 'IR': { + const cmd = '^ir'; + return cmd; + } + + case 'PM': { + let msg = ''; + const slot = parseInt(this.receiveData.data, 10); + msg = slot.toString(16).padStart(2, '0'); + const cmd = `$PM${msg}`; + return cmd; + } + case 'CM': { + let msg = ''; + const slot = parseInt(this.receiveData.data, 10) + 90; + msg = slot.toString(16).padStart(2, '0'); + const cmd = `$PM${msg}`; + return cmd; + } + + case 'AD': { + let msg = ''; + const data = this.receiveData.data; + let motnum = parseInt(data.MOT, 10); + let angle = parseInt(data.ANG, 10); + let time = parseInt(data.TME, 10); + angle *= 10; + if (angle < 0) { + angle = 4096 + angle; } - motnum = motnum.toString(16).padStart(2,'0'); - msg+=motnum; - angle = angle.toString(16).padStart(3,'0'); - msg+=angle; - time = time.toString(16).padStart(4,'0'); + motnum = motnum.toString(16).padStart(2, '0'); + msg += motnum; + angle = angle.toString(16).padStart(3, '0'); + msg += angle; + time = time.toString(16).padStart(4, '0'); msg += time; - var cmd = "^ad"+msg; + const cmd = `^ad${msg}`; + return cmd; + } + case 'MP': { + let msg = '00'; + const data = this.receiveData.data; + const time = parseInt(data.pop(), 10); + for (const i of data) { + let angle = parseInt(i.ANG, 10); + angle *= 10; + if (angle < 0) { + angle = 4096 + angle; + msg += `f${angle.toString(16).padStart(3, '0')}`; + } else { + msg += `0${angle.toString(16).padStart(3, '0')}`; + } + + if (i.MOT == 8 || i.MOT == 17) { + msg += '000000000000'; + } + } + let cmd = `*mf${msg}`; this.sp.write(Buffer.from(cmd)); - break; + this.sp.write(`*mt00${Buffer.from(time.toString(16).padStart(4, '0'))}`); + cmd = '*pm01'; + return cmd; + } + case 'PT': { + this.buffercnt = 0; + this.sendBuffer = []; + let frame = 0; + const data = this.receiveData.data; + for (const i of data) { + let msg = ''; + for (const key in i.data) { + let angle = parseInt(i.data[key].angle, 10); + angle *= 10; + if (angle < 0) { + angle = 4096 + angle; + msg += `f${angle.toString(16).padStart(3, '0')}`; + } else { + msg += `0${angle.toString(16).padStart(3, '0')}`; + } + if (key == 8 || key == 17) { + msg += '000000000000'; + } + } + msg = `*mf${frame.toString(16).padStart(2, '0')}${msg}`; + const cmd_msg = msg; + const time = parseInt(i.time, 10); + const cmd_time = `*mt${frame.toString(16).padStart(2, '0')}${Buffer.from(time.toString(16).padStart(4, '0'))}`; + frame++; + this.sendBuffer.push(cmd_msg); + this.sendBuffer.push(cmd_time); + + //this.sp.write(Buffer.from(cmd_msg)); + //console.log(cmd_msg); + //this.sp.write(Buffer.from(cmd_time)); + //console.log(cmd_time); + } + if (frame > 0) { + const pm = `*pm${frame.toString(16).padStart(2, '0')}`; + this.sendBuffer.push(pm); + const _this = this; + for (const i in this.sendBuffer) { + setTimeout(() => + _this.sp.write(Buffer.from(_this.sendBuffer[i])), 20 * i); + } + return; + } else { + return; + } + } + case 'SV': { + this.buffercnt = 0; + this.sendBuffer = []; + let _frame = 0; + const data = this.receiveData.data; + const _slot = this.receiveData.slot; + const slot = (parseInt(_slot, 10) + 90).toString(16).padStart(2, '0'); + const _name = this.receiveData.name; + if (data.length > 0) { + const framelength = data.length.toString(16).padStart(2, '0'); + const cmd_header = `>mh${slot}${_name}00000000000${framelength}`; + this.sendBuffer.push(cmd_header); + //this.sp.write(Buffer.from(cmd_header)); + for (const i of data) { + let msg = ''; + for (const key in i.data) { + let angle = parseInt(i.data[key].angle, 10); + angle *= 10; + if (angle < 0) { + angle = 4096 + angle; + msg += `f${angle.toString(16).padStart(3, '0')}`; + } else { + msg += `0${angle.toString(16).padStart(3, '0')}`; + } + if (key == 8 || key == 17) { + msg += '000000000000'; + } + } + const time = parseInt(i.time, 10).toString(16).padStart(4, '0'); + const frame = _frame.toString(16).padStart(2, '0'); + const cmd_frame = `>mf${slot}${frame}${time}${msg}`; + _frame++; + this.sendBuffer.push(cmd_frame); + //this.sp.write(Buffer.from(cmd_frame)); + } + const cmd_hash = `>hs${slot}${this.receiveData.hash}`; + this.sendBuffer.push(cmd_hash); + return this.sendBuffer[0]; + } else { + return; + } + } } } this.receiveData = null; - } - disconnect(connect){ - var cmd = "^ce"; + disconnect(connect) { + const cmd = '^ce'; this.sp.write(Buffer.from(cmd)); - setTimeout(()=>{ + setTimeout(() => { connect.close(); - },500); + }, 500); this.isConnect = false; - } + } lostController() { } - - + reset() { + //console.log("reset"); + } } - module.exports = new KKMOO(); diff --git a/app/modules/KKMOO.json b/app/modules/KKMOO.json index 77a66fbaa..646aa1480 100644 --- a/app/modules/KKMOO.json +++ b/app/modules/KKMOO.json @@ -21,7 +21,7 @@ "hardware": { "type": "serial", "control": "slave", - "duration": 2, + "duration": 10, "vendor": [ "Silicon Lab", "wch.cn" diff --git a/app/modules/etkit.js b/app/modules/etkit.js new file mode 100644 index 000000000..49ab77e9a --- /dev/null +++ b/app/modules/etkit.js @@ -0,0 +1,505 @@ +function Module() { + this.sp = null; + this.sensorTypes = { + ALIVE:0, + DIGITAL:1, + ANALOG:2, + DHT_PIN:3, + LCD:4, + CO2: 5, + OLED: 6, + TIMER:8, + READ_BLUETOOTH: 9, + WRITE_BLUETOOTH: 10, + }; + this.actionTypes = { + GET:1, + SET:2, + MODULE:3, + RESET:4, + }; + this.sensorValueSize = { + FLOAT:2, + SHORT:3, + STRING:4, + }; + this.digitalPortTimeList = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + this.sensorData = { + DIGITAL: { + '0': 0, + '1': 0, + '2': 0, + '3': 0, + '4': 0, + '5': 0, + '6': 0, + '7': 0, + '8': 0, + '9': 0, + '10': 0, + '11': 0, + '12': 0, + '13': 0, + }, + ANALOG: { + '0': 0, + '1': 0, + '2': 0, + '3': 0, + '4': 0, + '5': 0, + }, + DHT_PIN: 0, + CO2: 0, + TIMER: 0, + READ_BLUETOOTH: 0, + }; + this.defaultOutput = { + }; + this.recentCheckData = { + }; + this.sendBuffers = []; + this.lastTime = 0; + this.lastSendTime = 0; + this.isDraing = false; +} +var sensorIdx = 0; +Module.prototype.init = function(handler, config) { +}; + +Module.prototype.setSerialPort = function (sp) { + var self = this; + this.sp = sp; +}; +Module.prototype.requestInitialData = function() { + return this.makeSensorReadBuffer(this.sensorTypes.ANALOG, 0); +}; +Module.prototype.checkInitialData = function(data, config) { + return true; +}; +Module.prototype.afterConnect = function(that, cb) { + that.connected = true; + if (cb) { + cb('connected'); + } +}; +Module.prototype.validateLocalData = function(data) { + return true; +}; +Module.prototype.isRecentData = function(port, type, data) { + var that = this; + var isRecent = false; + return isRecent; +}; +Module.prototype.requestRemoteData = function(handler) { + var self = this; + if(!self.sensorData) { + return; + } + Object.keys(this.sensorData).forEach(function (key) { + if(self.sensorData[key] != undefined) { + handler.write(key, self.sensorData[key]); + } + }) +}; +Module.prototype.getDataByBuffer = function(buffer) { + const datas = []; + let lastIndex = 0; + buffer.forEach(function (value, idx) { + if(value == 13 && buffer[idx+1] == 10) { + datas.push(buffer.subarray(lastIndex, idx)); + lastIndex = idx + 2; + } + } + ); + return datas; +}; +Module.prototype.handleLocalData = function(data) { + const self = this; + const datas = this.getDataByBuffer(data); + datas.forEach(function(data) { + if(data.length <= 4 || data[0] !== 255 || data[1] !== 85) { + return; + } + const readData = data.subarray(2, data.length); + let value; + const type = readData[readData.length - 1]; + const port = readData[readData.length - 2]; + switch(readData[0]) { + case self.sensorValueSize.FLOAT: { + + value = new Buffer(readData.subarray(1, 5)).readFloatLE(); + value = Math.round(value * 100) / 100; + + break; + } + case self.sensorValueSize.SHORT: { + value = new Buffer(readData.subarray(1, 3)).readInt16LE(); + break; + } + case self.sensorValueSize.STRING: { + value = new Buffer(readData[1] + 3); + value = readData.slice(2, readData[1] + 3); + value = value.toString('ascii', 0, value.length); + break; + } + default: { + value = 0; + break; + } + } + + + + switch(type) { + case self.sensorTypes.DIGITAL: { + self.sensorData.DIGITAL[port] = value; + break; + } + case self.sensorTypes.ANALOG: { + self.sensorData.ANALOG[port] = value; + break; + } + + case self.sensorTypes.DHT_PIN: { + self.sensorData.DHT_PIN = value; + break; + } + + case self.sensorTypes.READ_BLUETOOTH: { + self.sensorData.READ_BLUETOOTH = value; + break; + } + + case self.sensorTypes.TIMER: { + self.sensorData.TIMER = value; + break; + } + default: { + break; + } + } + } + ); +}; +Module.prototype.requestLocalData = function() { + const self = this; + + if (!this.isDraing && this.sendBuffers.length > 0) { + this.isDraing = true; + this.sp.write(this.sendBuffers.shift(), () => { + if (self.sp) { + self.sp.drain(() => { + self.isDraing = false; + }); + } + }); + } + + return null; +}; + +Module.prototype.makeSensorReadBuffer = function(device, port, data) { + let buffer; + const dummy = new Buffer([10]); + if(device == this.sensorTypes.DHT_PIN) { + buffer = new Buffer([255, 85, 7, sensorIdx, this.actionTypes.GET, device, port, 10]); + } + else if (device == this.sensorTypes.READ_BLUETOOTH) { + buffer = new Buffer([255, 85, 5, sensorIdx, this.actionTypes.GET, device, port, 10]); + } + else if (!data) { + buffer = new Buffer([255, 85, 5, sensorIdx, this.actionTypes.GET, device, port, 10]); + } + else { + value = new Buffer(2); + value.writeInt16LE(data); + buffer = new Buffer([255, 85, 7, sensorIdx, this.actionTypes.GET, device, port, 10]); + buffer = Buffer.concat([buffer, value, dummy]); + } + + sensorIdx++; + if(sensorIdx > 254) { + sensorIdx = 0; + } + + return buffer; +}; +Module.prototype.makeOutputBuffer = function(device, port, data) { + let buffer; + const value = new Buffer(2); + const dummy = new Buffer([10]); + switch(device) { + case this.sensorTypes.DIGITAL: { + value.writeInt16LE(data); + buffer = new Buffer([ + 255, + 85, + 6, + sensorIdx, + this.actionTypes.SET, + device, + port, + ]); + buffer = Buffer.concat([buffer, value, dummy]); + break; + + } + case this.sensorTypes.WRITE_BLUETOOTH: { + var text0 = new Buffer(2); + var text1 = new Buffer(2); + var text2 = new Buffer(2); + var text3 = new Buffer(2); + var text4 = new Buffer(2); + var text5 = new Buffer(2); + var text6 = new Buffer(2); + var text7 = new Buffer(2); + var text8 = new Buffer(2); + var text9 = new Buffer(2); + var text10 = new Buffer(2); + var text11 = new Buffer(2); + var text12 = new Buffer(2); + var text13 = new Buffer(2); + var text14 = new Buffer(2); + var text15 = new Buffer(2); + if ($.isPlainObject(data)) { + text0.writeInt16LE(data.text0); + text1.writeInt16LE(data.text1); + text2.writeInt16LE(data.text2); + text3.writeInt16LE(data.text3); + text4.writeInt16LE(data.text4); + text5.writeInt16LE(data.text5); + text6.writeInt16LE(data.text6); + text7.writeInt16LE(data.text7); + text8.writeInt16LE(data.text8); + text9.writeInt16LE(data.text9); + text10.writeInt16LE(data.text10); + text11.writeInt16LE(data.text11); + text12.writeInt16LE(data.text12); + text13.writeInt16LE(data.text13); + text14.writeInt16LE(data.text14); + text15.writeInt16LE(data.text15); + } else { + text0.writeInt16LE(0); + text1.writeInt16LE(0); + text2.writeInt16LE(0); + text3.writeInt16LE(0); + text4.writeInt16LE(0); + text5.writeInt16LE(0); + text6.writeInt16LE(0); + text7.writeInt16LE(0); + text8.writeInt16LE(0); + text9.writeInt16LE(0); + text10.writeInt16LE(0); + text11.writeInt16LE(0); + text12.writeInt16LE(0); + text13.writeInt16LE(0); + text14.writeInt16LE(0); + text15.writeInt16LE(0); + } + buffer = new Buffer([255, 85, 36, sensorIdx, this.actionTypes.MODULE, device, port]); + buffer = Buffer.concat([buffer, text0, text1, text2, text3, text4, text5, text6, text7, text8, text9, text10, text11, text12, text13, text14, text15, dummy]); + break; + } + case this.sensorTypes.LCD: { + var text0 = new Buffer(2); + var text1 = new Buffer(2); + var text2 = new Buffer(2); + var text3 = new Buffer(2); + var text4 = new Buffer(2); + var text5 = new Buffer(2); + var text6 = new Buffer(2); + var text7 = new Buffer(2); + var text8 = new Buffer(2); + var text9 = new Buffer(2); + var text10 = new Buffer(2); + var text11 = new Buffer(2); + var text12 = new Buffer(2); + var text13 = new Buffer(2); + var text14 = new Buffer(2); + var text15 = new Buffer(2); + if ($.isPlainObject(data)) { + text0.writeInt16LE(data.text0); + text1.writeInt16LE(data.text1); + text2.writeInt16LE(data.text2); + text3.writeInt16LE(data.text3); + text4.writeInt16LE(data.text4); + text5.writeInt16LE(data.text5); + text6.writeInt16LE(data.text6); + text7.writeInt16LE(data.text7); + text8.writeInt16LE(data.text8); + text9.writeInt16LE(data.text9); + text10.writeInt16LE(data.text10); + text11.writeInt16LE(data.text11); + text12.writeInt16LE(data.text12); + text13.writeInt16LE(data.text13); + text14.writeInt16LE(data.text14); + text15.writeInt16LE(data.text15); + } else { + text0.writeInt16LE(0); + text1.writeInt16LE(0); + text2.writeInt16LE(0); + text3.writeInt16LE(0); + text4.writeInt16LE(0); + text5.writeInt16LE(0); + text6.writeInt16LE(0); + text7.writeInt16LE(0); + text8.writeInt16LE(0); + text9.writeInt16LE(0); + text10.writeInt16LE(0); + text11.writeInt16LE(0); + text12.writeInt16LE(0); + text13.writeInt16LE(0); + text14.writeInt16LE(0); + text15.writeInt16LE(0); + } + buffer = new Buffer([255, 85, 36, sensorIdx, this.actionTypes.MODULE, device, port]); + buffer = Buffer.concat([buffer, text0, text1, text2, text3, text4, text5, text6, text7, text8, text9, text10, text11, text12, text13, text14, text15, dummy]); + break; + } + case this.sensorTypes.OLED: { + + const coordinate_x = new Buffer(2); + const coordinate_y = new Buffer(2); + var text0 = new Buffer(2); + var text1 = new Buffer(2); + var text2 = new Buffer(2); + var text3 = new Buffer(2); + var text4 = new Buffer(2); + var text5 = new Buffer(2); + var text6 = new Buffer(2); + var text7 = new Buffer(2); + var text8 = new Buffer(2); + var text9 = new Buffer(2); + var text10 = new Buffer(2); + var text11 = new Buffer(2); + var text12 = new Buffer(2); + var text13 = new Buffer(2); + var text14 = new Buffer(2); + var text15 = new Buffer(2); + if ($.isPlainObject(data)) { + coordinate_x.writeInt16LE(data.value0); + coordinate_y.writeInt16LE(data.value1); + text0.writeInt16LE(data.text0); + text1.writeInt16LE(data.text1); + text2.writeInt16LE(data.text2); + text3.writeInt16LE(data.text3); + text4.writeInt16LE(data.text4); + text5.writeInt16LE(data.text5); + text6.writeInt16LE(data.text6); + text7.writeInt16LE(data.text7); + text8.writeInt16LE(data.text8); + text9.writeInt16LE(data.text9); + text10.writeInt16LE(data.text10); + text11.writeInt16LE(data.text11); + text12.writeInt16LE(data.text12); + text13.writeInt16LE(data.text13); + text14.writeInt16LE(data.text14); + text15.writeInt16LE(data.text15); + } else { + coordinate_x.writeInt16LE(0); + coordinate_y.writeInt16LE(0); + text0.writeInt16LE(0); + text1.writeInt16LE(0); + text2.writeInt16LE(0); + text3.writeInt16LE(0); + text4.writeInt16LE(0); + text5.writeInt16LE(0); + text6.writeInt16LE(0); + text7.writeInt16LE(0); + text8.writeInt16LE(0); + text9.writeInt16LE(0); + text10.writeInt16LE(0); + text11.writeInt16LE(0); + text12.writeInt16LE(0); + text13.writeInt16LE(0); + text14.writeInt16LE(0); + text15.writeInt16LE(0); + } + buffer = new Buffer([255, 85, 40, sensorIdx, this.actionTypes.MODULE, device, port]); + buffer = Buffer.concat([buffer, coordinate_x, coordinate_y, text0, text1, text2, text3, text4, text5, text6, text7, text8, text9, text10, text11, text12, text13, text14, text15, dummy]); + break; + } + } + return buffer; +}; +Module.prototype.handleRemoteData = function(handler) { + const self = this; + const getDatas = handler.read('GET'); + const setDatas = handler.read('SET') || this.defaultOutput; + const time = handler.read('TIME'); + let buffer = new Buffer([]); + if (getDatas) { + const keys = Object.keys(getDatas); + keys.forEach((key) => { + let isSend = false; + const dataObj = getDatas[key]; + if (typeof dataObj.port === 'string' || typeof dataObj.port === 'number') { + const time = self.digitalPortTimeList[dataObj.port]; + if (dataObj.time > time) { + isSend = true; + self.digitalPortTimeList[dataObj.port] = dataObj.time; + } + } else if (Array.isArray(dataObj.port)) { + isSend = dataObj.port.every((port) => { + const time = self.digitalPortTimeList[port]; + return dataObj.time > time; + }); + + if (isSend) { + dataObj.port.forEach((port) => { + self.digitalPortTimeList[port] = dataObj.time; + }); + } + } + + if (isSend) { + if (!self.isRecentData(dataObj.port, key, dataObj.data)) { + self.recentCheckData[dataObj.port] = { + type: key, + data: dataObj.data, + }; + buffer = Buffer.concat([buffer, self.makeSensorReadBuffer(key, dataObj.port, dataObj.data)]); + } + } + }); + } + + if (setDatas) { + const setKeys = Object.keys(setDatas); + setKeys.forEach((port) => { + const data = setDatas[port]; + if (data) { + if (self.digitalPortTimeList[port] < data.time) { + self.digitalPortTimeList[port] = data.time; + + if (!self.isRecentData(port, data.type, data.data)) { + self.recentCheckData[port] = { + type: data.type, + data: data.data, + }; + buffer = Buffer.concat([buffer, self.makeOutputBuffer(data.type, port, data.data)]); + } + } + } + }); + } + if (buffer.length) { + this.sendBuffers.push(buffer); + } +}; + +Module.prototype.disconnect = function(connect) { + const self = this; + connect.close(); + if (self.sp) { + delete self.sp; + } +}; + +Module.prototype.reset = function() { + this.lastTime = 0; + this.lastSendTime = 0; +}; + +module.exports = new Module(); \ No newline at end of file diff --git a/app/modules/etkit.json b/app/modules/etkit.json new file mode 100644 index 000000000..65b128b53 --- /dev/null +++ b/app/modules/etkit.json @@ -0,0 +1,26 @@ +{ + "id": "580101", + "name": { + "en": "ETkit", + "ko": "이티키트" + }, + "category": "board", + "platform": ["win32", "darwin"], + "icon": "etkit.png", + "module": "etkit.js", + "driver": { + "win32-ia32": "arduino/dpinst-x86.exe", + "win32-x64": "arduino/dpinst-amd64.exe" + }, + "url": "https://2tc.co.kr/", + "reconnect": true, + "firmware": "etkit", + "hardware": { + "type": "serial", + "control": "slave", + "duration": 32, + "vendor": ["Arduino", "wch.cn", "FTDI"], + "firmwarecheck" : false, + "baudRate": 115200 + } +} \ No newline at end of file diff --git a/app/modules/etkit.png b/app/modules/etkit.png new file mode 100644 index 000000000..3425efafa Binary files /dev/null and b/app/modules/etkit.png differ diff --git a/app/modules/handino.js b/app/modules/handino.js new file mode 100644 index 000000000..6b8f9a3c1 --- /dev/null +++ b/app/modules/handino.js @@ -0,0 +1,441 @@ +function Module() { + this.sp = null; + this.sensorTypes = { + ALIVE: 0, + DIGITAL: 1, + ANALOG: 2, + PWM: 3, + SERVO_PIN: 4, + TONE: 5, + PULSEIN: 6, + ULTRASONIC: 7, + TIMER: 8, + }; + + this.actionTypes = { + GET: 1, + SET: 2, + RESET: 3, + }; + + this.sensorValueSize = { + FLOAT: 2, + SHORT: 3, + }; + + this.digitalPortTimeList = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + + this.sensorData = { + ULTRASONIC: 0, + DIGITAL: { + '0': 0, + '1': 0, + '2': 0, + '3': 0, + '4': 0, + '5': 0, + '6': 0, + '7': 0, + '8': 0, + '9': 0, + '10': 0, + '11': 0, + '12': 0, + '13': 0, + }, + ANALOG: { + '0': 0, + '1': 0, + '2': 0, + '3': 0, + '4': 0, + '5': 0, + }, + PULSEIN: {}, + TIMER: 0, + }; + + this.defaultOutput = {}; + + this.recentCheckData = {}; + + this.sendBuffers = []; + + this.lastTime = 0; + this.lastSendTime = 0; + this.isDraing = false; +} + +var sensorIdx = 0; + +Module.prototype.init = function(handler, config) {}; + +Module.prototype.setSerialPort = function(sp) { + var self = this; + this.sp = sp; +}; + +Module.prototype.requestInitialData = function() { + return this.makeSensorReadBuffer(this.sensorTypes.ANALOG, 0); +}; + +Module.prototype.checkInitialData = function(data, config) { + return true; + // 이후에 체크 로직 개선되면 처리 + // var datas = this.getDataByBuffer(data); + // var isValidData = datas.some(function (data) { + // return (data.length > 4 && data[0] === 255 && data[1] === 85); + // }); + // return isValidData; +}; + +Module.prototype.afterConnect = function(that, cb) { + that.connected = true; + if (cb) { + cb('connected'); + } +}; + +Module.prototype.validateLocalData = function(data) { + return true; +}; + +Module.prototype.requestRemoteData = function(handler) { + var self = this; + if (!self.sensorData) { + return; + } + Object.keys(this.sensorData).forEach(function(key) { + if (self.sensorData[key] != undefined) { + handler.write(key, self.sensorData[key]); + } + }); +}; + +Module.prototype.handleRemoteData = function(handler) { + var self = this; + var getDatas = handler.read('GET'); + var setDatas = handler.read('SET') || this.defaultOutput; + var time = handler.read('TIME'); + var buffer = new Buffer([]); + + if (getDatas) { + var keys = Object.keys(getDatas); + keys.forEach(function(key) { + var isSend = false; + var dataObj = getDatas[key]; + if ( + typeof dataObj.port === 'string' || + typeof dataObj.port === 'number' + ) { + var time = self.digitalPortTimeList[dataObj.port]; + if (dataObj.time > time) { + isSend = true; + self.digitalPortTimeList[dataObj.port] = dataObj.time; + } + } else if (Array.isArray(dataObj.port)) { + isSend = dataObj.port.every(function(port) { + var time = self.digitalPortTimeList[port]; + return dataObj.time > time; + }); + + if (isSend) { + dataObj.port.forEach(function(port) { + self.digitalPortTimeList[port] = dataObj.time; + }); + } + } + + if (isSend) { + if (!self.isRecentData(dataObj.port, key, dataObj.data)) { + self.recentCheckData[dataObj.port] = { + type: key, + data: dataObj.data, + }; + buffer = Buffer.concat([ + buffer, + self.makeSensorReadBuffer( + key, + dataObj.port, + dataObj.data + ), + ]); + } + } + }); + } + + if (setDatas) { + var setKeys = Object.keys(setDatas); + setKeys.forEach(function(port) { + var data = setDatas[port]; + if (data) { + if (self.digitalPortTimeList[port] < data.time) { + self.digitalPortTimeList[port] = data.time; + + if (!self.isRecentData(port, data.type, data.data)) { + self.recentCheckData[port] = { + type: data.type, + data: data.data, + }; + buffer = Buffer.concat([ + buffer, + self.makeOutputBuffer(data.type, port, data.data), + ]); + } + } + } + }); + } + + if (buffer.length) { + this.sendBuffers.push(buffer); + } +}; + +Module.prototype.isRecentData = function(port, type, data) { + var that = this; + var isRecent = false; + + if(type == this.sensorTypes.ULTRASONIC) { + var portString = port.toString(); + var isGarbageClear = false; + Object.keys(this.recentCheckData).forEach(function (key) { + var recent = that.recentCheckData[key]; + if(key === portString) { + + } + if(key !== portString && recent.type == that.sensorTypes.ULTRASONIC) { + delete that.recentCheckData[key]; + isGarbageClear = true; + } + }); + + if((port in this.recentCheckData && isGarbageClear) || !(port in this.recentCheckData)) { + isRecent = false; + } else { + isRecent = true; + } + + } else if (port in this.recentCheckData && type != this.sensorTypes.TONE) { + if ( + this.recentCheckData[port].type === type && + this.recentCheckData[port].data === data + ) { + isRecent = true; + } + } + + return isRecent; +}; + +Module.prototype.requestLocalData = function() { + var self = this; + + if (!this.isDraing && this.sendBuffers.length > 0) { + this.isDraing = true; + this.sp.write(this.sendBuffers.shift(), function() { + if (self.sp) { + self.sp.drain(function() { + self.isDraing = false; + }); + } + }); + } + + return null; +}; + +/* +ff 55 idx size data a +*/ +Module.prototype.handleLocalData = function(data) { + var self = this; + var datas = this.getDataByBuffer(data); + + datas.forEach(function(data) { + if (data.length <= 4 || data[0] !== 255 || data[1] !== 85) { + return; + } + var readData = data.subarray(2, data.length); + var value; + switch (readData[0]) { + case self.sensorValueSize.FLOAT: { + value = new Buffer(readData.subarray(1, 5)).readFloatLE(); + value = Math.round(value * 100) / 100; + break; + } + case self.sensorValueSize.SHORT: { + value = new Buffer(readData.subarray(1, 3)).readInt16LE(); + break; + } + default: { + value = 0; + break; + } + } + + var type = readData[readData.length - 1]; + var port = readData[readData.length - 2]; + + switch (type) { + case self.sensorTypes.DIGITAL: { + self.sensorData.DIGITAL[port] = value; + break; + } + case self.sensorTypes.ANALOG: { + self.sensorData.ANALOG[port] = value; + break; + } + case self.sensorTypes.PULSEIN: { + self.sensorData.PULSEIN[port] = value; + break; + } + case self.sensorTypes.ULTRASONIC: { + self.sensorData.ULTRASONIC = value; + break; + } + case self.sensorTypes.TIMER: { + self.sensorData.TIMER = value; + break; + } + default: { + break; + } + } + }); +}; + +/* +ff 55 len idx action device port slot data a +0 1 2 3 4 5 6 7 8 +*/ + +Module.prototype.makeSensorReadBuffer = function(device, port, data) { + var buffer; + var dummy = new Buffer([10]); + if (device == this.sensorTypes.ULTRASONIC) { + buffer = new Buffer([ + 255, + 85, + 6, + sensorIdx, + this.actionTypes.GET, + device, + port[0], + port[1], + 10, + ]); + } else if (!data) { + buffer = new Buffer([ + 255, + 85, + 5, + sensorIdx, + this.actionTypes.GET, + device, + port, + 10, + ]); + } else { + value = new Buffer(2); + value.writeInt16LE(data); + buffer = new Buffer([ + 255, + 85, + 7, + sensorIdx, + this.actionTypes.GET, + device, + port, + 10, + ]); + buffer = Buffer.concat([buffer, value, dummy]); + } + sensorIdx++; + if (sensorIdx > 254) { + sensorIdx = 0; + } + + return buffer; +}; + +//0xff 0x55 0x6 0x0 0x1 0xa 0x9 0x0 0x0 0xa +Module.prototype.makeOutputBuffer = function(device, port, data) { + var buffer; + var value = new Buffer(2); + var dummy = new Buffer([10]); + switch (device) { + case this.sensorTypes.SERVO_PIN: + case this.sensorTypes.DIGITAL: + case this.sensorTypes.PWM: { + value.writeInt16LE(data); + buffer = new Buffer([ + 255, + 85, + 6, + sensorIdx, + this.actionTypes.SET, + device, + port, + ]); + buffer = Buffer.concat([buffer, value, dummy]); + break; + } + case this.sensorTypes.TONE: { + var time = new Buffer(2); + if ($.isPlainObject(data)) { + value.writeInt16LE(data.value); + time.writeInt16LE(data.duration); + } else { + value.writeInt16LE(0); + time.writeInt16LE(0); + } + buffer = new Buffer([ + 255, + 85, + 8, + sensorIdx, + this.actionTypes.SET, + device, + port, + ]); + buffer = Buffer.concat([buffer, value, time, dummy]); + break; + } + case this.sensorTypes.TONE: { + } + } + + return buffer; +}; + +Module.prototype.getDataByBuffer = function(buffer) { + var datas = []; + var lastIndex = 0; + buffer.forEach(function(value, idx) { + if (value == 13 && buffer[idx + 1] == 10) { + datas.push(buffer.subarray(lastIndex, idx)); + lastIndex = idx + 2; + } + }); + + return datas; +}; + +Module.prototype.disconnect = function(connect) { + var self = this; + connect.close(); + if (self.sp) { + delete self.sp; + } +}; + +Module.prototype.reset = function() { + this.lastTime = 0; + this.lastSendTime = 0; + + this.sensorData.PULSEIN = {}; +}; + +module.exports = new Module(); diff --git a/app/modules/handino.json b/app/modules/handino.json new file mode 100644 index 000000000..3c0a3e22e --- /dev/null +++ b/app/modules/handino.json @@ -0,0 +1,28 @@ +{ + "id": "590101", + "name": { + "en": "Handino", + "ko": "핸드이노" + }, + "category": "board", + "platform": ["win32", "darwin"], + "icon": "handino.png", + "module": "handino.js", + "url": "http://arduino.cc", + "driver": { + "win32-ia32": "arduino/dpinst-x86.exe", + "win32-x64": "arduino/dpinst-amd64.exe" + }, + "selectPort": true, + "reconnect": true, + "firmware": "arduino_ext", + "hardware": { + "type": "serial", + "control": "slave", + "duration": 32, + "vendor": ["Arduino", "wch.cn", "FTDI"], + "baudRate": 115200, + "firmwarecheck": false, + "byteDelimiter": [13, 10] + } +} diff --git a/app/modules/handino.png b/app/modules/handino.png new file mode 100644 index 000000000..c79415bca Binary files /dev/null and b/app/modules/handino.png differ diff --git a/app/modules/makermate.js b/app/modules/makermate.js new file mode 100644 index 000000000..444b7c8b6 --- /dev/null +++ b/app/modules/makermate.js @@ -0,0 +1,404 @@ +const _ = global.$; +const BaseModule = require('./baseModule'); + +class Makermate extends BaseModule { + constructor() { + super(); + this.sensorTypes = { + ALIVE: 0, + DIGITAL: 1, + ANALOG: 2, + PWM: 3, + SERVO_PIN: 4, + TONE: 5, + PULSEIN: 6, + ULTRASONIC: 7, + TIMER: 8, + }; + + this.actionTypes = { + GET: 1, + SET: 2, + RESET: 3, + }; + + this.sensorValueSize = { + FLOAT: 2, + SHORT: 3, + }; + + this.digitalPortTimeList = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + + this.sensorData = { + ULTRASONIC: 0, + DIGITAL: { + 0: 0, + 1: 0, + 2: 0, + 3: 0, + 4: 0, + 5: 0, + 6: 0, + 7: 0, + 8: 0, + 9: 0, + 10: 0, + 11: 0, + 12: 0, + 13: 0, + }, + ANALOG: { + 0: 0, + 1: 0, + 2: 0, + 3: 0, + 4: 0, + 5: 0, + }, + PULSEIN: {}, + TIMER: 0, + }; + + this.defaultOutput = {}; + this.recentCheckData = {}; + this.sendBuffers = []; + this.lastTime = 0; + this.lastSendTime = 0; + this.isDraing = false; + this.sensorIdx = 0; + } + + init(handler, config) { + super.init(handler, config); + } + + setSerialPort(sp) { + const self = this; + this.sp = sp; + } + + requestInitialData() { + return this.makeSensorReadBuffer(this.sensorTypes.ANALOG, 0); + } + + // actual parameter is (data, config) + checkInitialData(data, config) { + return true; + } + + afterConnect(that, cb) { + that.connected = true; + if (cb) { + cb('connected'); + } + } + + // actual parameter is (data) + validateLocalData(data) { + return true; + } + + requestRemoteData(handler) { + var self = this; + if (!self.sensorData) { + return; + } + Object.keys(this.sensorData).forEach(function (key) { + if (self.sensorData[key] != undefined) { + handler.write(key, self.sensorData[key]); + } + }); + } + + handleRemoteData = function (handler) { + var self = this; + var getDatas = handler.read('GET'); + var setDatas = handler.read('SET') || this.defaultOutput; + var time = handler.read('TIME'); + var buffer = new Buffer([]); + + if (getDatas) { + var keys = Object.keys(getDatas); + keys.forEach(function (key) { + var isSend = false; + var dataObj = getDatas[key]; + if (typeof dataObj.port === 'string' || typeof dataObj.port === 'number') { + var time = self.digitalPortTimeList[dataObj.port]; + if (dataObj.time > time) { + isSend = true; + self.digitalPortTimeList[dataObj.port] = dataObj.time; + } + } else if (Array.isArray(dataObj.port)) { + isSend = dataObj.port.every(function (port) { + var time = self.digitalPortTimeList[port]; + return dataObj.time > time; + }); + + if (isSend) { + dataObj.port.forEach(function (port) { + self.digitalPortTimeList[port] = dataObj.time; + }); + } + } + + if (isSend) { + if (!self.isRecentData(dataObj.port, key, dataObj.data)) { + self.recentCheckData[dataObj.port] = { + type: key, + data: dataObj.data, + }; + buffer = Buffer.concat([ + buffer, + self.makeSensorReadBuffer(key, dataObj.port, dataObj.data), + ]); + } + } + }); + } + + if (setDatas) { + var setKeys = Object.keys(setDatas); + setKeys.forEach(function (port) { + var data = setDatas[port]; + if (data) { + if (self.digitalPortTimeList[port] < data.time) { + self.digitalPortTimeList[port] = data.time; + + if (!self.isRecentData(port, data.type, data.data)) { + self.recentCheckData[port] = { + type: data.type, + data: data.data, + }; + buffer = Buffer.concat([ + buffer, + self.makeOutputBuffer(data.type, port, data.data), + ]); + } + } + } + }); + } + + if (buffer.length) { + this.sendBuffers.push(buffer); + } + }; + + isRecentData(port, type, data) { + let isRecent = false; + + if (port in this.recentCheckData) { + if ( + type != this.sensorTypes.TONE && + this.recentCheckData[port].type === type && + this.recentCheckData[port].data === data + ) { + isRecent = true; + } + } + + return isRecent; + } + + requestLocalData() { + var self = this; + + if (!this.isDraing && this.sendBuffers.length > 0) { + this.isDraing = true; + this.sp.write(this.sendBuffers.shift(), function () { + if (self.sp) { + self.sp.drain(function () { + self.isDraing = false; + }); + } + }); + } + + return null; + } + + handleLocalData(data) { + var self = this; + var datas = this.getDataByBuffer(data); + + datas.forEach(function (data) { + if (data.length <= 4 || data[0] !== 255 || data[1] !== 85) { + return; + } + var readData = data.subarray(2, data.length); + var value; + switch (readData[0]) { + case self.sensorValueSize.FLOAT: { + value = new Buffer(readData.subarray(1, 5)).readFloatLE(); + value = Math.round(value * 100) / 100; + break; + } + case self.sensorValueSize.SHORT: { + value = new Buffer(readData.subarray(1, 3)).readInt16LE(); + break; + } + default: { + value = 0; + break; + } + } + + var type = readData[readData.length - 1]; + var port = readData[readData.length - 2]; + + switch (type) { + case self.sensorTypes.DIGITAL: { + self.sensorData.DIGITAL[port] = value; + break; + } + case self.sensorTypes.ANALOG: { + self.sensorData.ANALOG[port] = value; + break; + } + case self.sensorTypes.PULSEIN: { + self.sensorData.PULSEIN[port] = value; + break; + } + case self.sensorTypes.ULTRASONIC: { + self.sensorData.ULTRASONIC = value; + break; + } + case self.sensorTypes.TIMER: { + self.sensorData.TIMER = value; + break; + } + default: { + break; + } + } + }); + } + + makeSensorReadBuffer = function (device, port, data) { + var buffer; + var dummy = new Buffer([10]); + if (device == this.sensorTypes.ULTRASONIC) { + buffer = new Buffer([ + 255, + 85, + 6, + this.sensorIdx, + this.actionTypes.GET, + device, + port[0], + port[1], + 10, + ]); + } else if (!data) { + buffer = new Buffer([ + 255, + 85, + 5, + this.sensorIdx, + this.actionTypes.GET, + device, + port, + 10, + ]); + } else { + value = new Buffer(2); + value.writeInt16LE(data); + buffer = new Buffer([ + 255, + 85, + 7, + this.sensorIdx, + this.actionTypes.GET, + device, + port, + 10, + ]); + buffer = Buffer.concat([buffer, value, dummy]); + } + this.sensorIdx++; + if (this.sensorIdx > 254) { + this.sensorIdx = 0; + } + + return buffer; + }; + + makeOutputBuffer = function (device, port, data) { + var buffer; + var value = new Buffer(2); + var dummy = new Buffer([10]); + switch (device) { + case this.sensorTypes.SERVO_PIN: + case this.sensorTypes.DIGITAL: + case this.sensorTypes.PWM: { + value.writeInt16LE(data); + buffer = new Buffer([ + 255, + 85, + 6, + this.sensorIdx, + this.actionTypes.SET, + device, + port, + ]); + buffer = Buffer.concat([buffer, value, dummy]); + break; + } + case this.sensorTypes.TONE: { + var time = new Buffer(2); + if ($.isPlainObject(data)) { + value.writeInt16LE(data.value); + time.writeInt16LE(data.duration); + } else { + value.writeInt16LE(0); + time.writeInt16LE(0); + } + buffer = new Buffer([ + 255, + 85, + 8, + this.sensorIdx, + this.actionTypes.SET, + device, + port, + ]); + buffer = Buffer.concat([buffer, value, time, dummy]); + break; + } + case this.sensorTypes.TONE: { + } + } + + return buffer; + }; + + getDataByBuffer = function (buffer) { + var datas = []; + var lastIndex = 0; + buffer.forEach(function (value, idx) { + if (value == 13 && buffer[idx + 1] == 10) { + datas.push(buffer.subarray(lastIndex, idx)); + lastIndex = idx + 2; + } + }); + + return datas; + }; + + disconnect = function (connect) { + var self = this; + connect.close(); + if (self.sp) { + delete self.sp; + } + }; + + reset = function () { + this.lastTime = 0; + this.lastSendTime = 0; + + this.sensorData.PULSEIN = {}; + }; +} // end of class + +module.exports = new Makermate(); diff --git a/app/modules/makermate.json b/app/modules/makermate.json new file mode 100644 index 000000000..abc7499b0 --- /dev/null +++ b/app/modules/makermate.json @@ -0,0 +1,30 @@ +{ + "id": "5B0101", + "name": { + "en": "makermate", + "ko": "휴몬랩 메이커메이트" + }, + "category": "board", + "platform": ["win32", "darwin"], + "icon": "makermate.png", + "module": "makermate.js", + "url": "https://makermate.kr/store", + "email": "ask@huemone.com", + "driver": { + "win32-ia32": "arduino/dpinst-x86.exe", + "win32-x64": "arduino/dpinst-amd64.exe", + "darwin-x64": "https://entrylabs.github.io/docs/files/drivers/FTDIUSBSerial/FTDIUSBSerial.pkg" + }, + "selectPort": true, + "reconnect": true, + "firmware": "arduino_ext", + "hardware": { + "type": "serial", + "control": "slave", + "duration": 32, + "vendor": ["Arduino", "wch.cn", "FTDI"], + "baudRate": 115200, + "firmwarecheck": false, + "byteDelimiter": [13, 10] + } +} diff --git a/app/modules/makermate.png b/app/modules/makermate.png new file mode 100644 index 000000000..2000204f8 Binary files /dev/null and b/app/modules/makermate.png differ diff --git a/app/modules/runcoding.js b/app/modules/runcoding.js index 381d3115e..9715ad55e 100644 --- a/app/modules/runcoding.js +++ b/app/modules/runcoding.js @@ -22,6 +22,7 @@ function Module() { LCDINIT: 19, LCD: 20, LCDCLEAR: 21, + TEMPCHECK: 22, }; this.actionTypes = { @@ -65,6 +66,7 @@ function Module() { }, PULSEIN: {}, TIMER: 0, + TEMPCHECK: 0, }; this.defaultOutput = {}; @@ -112,6 +114,7 @@ Module.prototype.validateLocalData = function(data) { return true; }; +// 엔트리로 전달할 데이터 Module.prototype.requestRemoteData = function(handler) { var self = this; if (!self.sensorData) { @@ -258,6 +261,7 @@ Module.prototype.requestLocalData = function() { return null; }; + // 하드웨어에서 온 데이터 처리 로직 /* ff 55 idx size data a */ @@ -270,6 +274,7 @@ Module.prototype.handleLocalData = function(data) { return; } var readData = data.subarray(2, data.length); + var value; switch (readData[0]) { case self.sensorValueSize.FLOAT: { @@ -290,6 +295,9 @@ Module.prototype.handleLocalData = function(data) { var type = readData[readData.length - 1]; var port = readData[readData.length - 2]; + + + switch (type) { case self.sensorTypes.DIGITAL: { self.sensorData.DIGITAL[port] = value; @@ -311,6 +319,10 @@ Module.prototype.handleLocalData = function(data) { self.sensorData.TIMER = value; break; } + case self.sensorTypes.TEMPCHECK: { + self.sensorData.TEMPCHECK = value; + break; + } default: { break; } @@ -326,6 +338,7 @@ ff 55 len idx action device port slot data a Module.prototype.makeSensorReadBuffer = function(device, port, data) { var buffer; var dummy = new Buffer([10]); + if (device == this.sensorTypes.ULTRASONIC) { buffer = new Buffer([ 255, @@ -338,6 +351,17 @@ Module.prototype.makeSensorReadBuffer = function(device, port, data) { port[1], 10, ]); + } else if (device == this.sensorTypes.TEMPCHECK) { + buffer = new Buffer([ + 255, + 85, + 5, + sensorIdx, + this.actionTypes.GET, + device, + port, + 10, + ]); } else if (!data) { buffer = new Buffer([ 255, @@ -643,6 +667,7 @@ Module.prototype.getDataByBuffer = function(buffer) { return datas; }; +// 하드웨어 연결 해제 시 호출 Module.prototype.disconnect = function(connect) { var self = this; connect.close(); @@ -651,6 +676,7 @@ Module.prototype.disconnect = function(connect) { } }; +// 엔트라와의 연결 종료 후 처리 코드 Module.prototype.reset = function() { this.lastTime = 0; this.lastSendTime = 0; diff --git a/app/modules/suno.js b/app/modules/suno.js new file mode 100644 index 000000000..4e7b614db --- /dev/null +++ b/app/modules/suno.js @@ -0,0 +1,108 @@ +function Module() { + this.digitalValue = new Array(12); + this.analogValue = new Array(8); + this.remoteDigitalValue = [0,0,0,0,0,0,0,0,0,0,0,0]; + this.readablePorts = null; + this.remainValue = null; +} + +Module.prototype.init = function(handler, config) { +}; + + +Module.prototype.requestInitialData = function() { + return null; +}; + +Module.prototype.checkInitialData = function(data, config) { + return true; +}; + +Module.prototype.validateLocalData = function(data) { + return true; +}; + + +Module.prototype.handleRemoteData = function(handler) { + this.readablePorts = handler.read('readablePorts'); + var digitalValue = this.remoteDigitalValue; + for (var port = 0; port < 12; port++) { + digitalValue[port] = handler.read(port); + } +}; + +Module.prototype.requestLocalData = function() { + var queryString = []; + + var readablePorts = this.readablePorts; + if (readablePorts) { + for (var i in readablePorts) { + var query = (5 << 5) + (readablePorts[i] << 1); + queryString.push(query); + } + } + + var digitalValue = this.remoteDigitalValue; + for (var port = 0; port < 12; port++) { + var value = digitalValue[port]; + if (value === 255 || value === 0) { + var query = (7 << 5) + (port << 1) + (value == 255 ? 1 : 0); + queryString.push(query); + } else if (value > 0 && value < 255) { + var query = (6 << 5) + (port << 1) + (value >> 7); + queryString.push(query); + query = value & 127; + queryString.push(query); + } + } + return queryString; +}; + +Module.prototype.handleLocalData = function(data) { // data: Native Buffer + var pointer = 0; + for (var i = 0; i < 32; i++) { + var chunk; + if(!this.remainValue) { + chunk = data[i]; + } else { + chunk = this.remainValue; + i--; + } + if (chunk >> 7) { + if ((chunk >> 6) & 1) { + var nextChunk = data[i + 1]; + if(!nextChunk && nextChunk !== 0) { + this.remainValue = chunk; + } + else { + this.remainValue = null; + + var port = (chunk >> 3) & 7; + this.analogValue[port] = ((chunk & 7) << 7) + + (nextChunk & 127); + } + i++; + } + else { + var port = (chunk >> 2) & 15; + this.digitalValue[port] = chunk & 1; + } + } + } +}; + +Module.prototype.requestRemoteData = function(handler) { + for (var i = 0; i < this.analogValue.length; i++) { + var value = this.analogValue[i]; + handler.write('a' + i, value); + } + for (var i = 0; i < this.digitalValue.length; i++) { + var value = this.digitalValue[i]; + handler.write(i, value); + } +}; + +Module.prototype.reset = function() { +}; + +module.exports = new Module(); diff --git a/app/modules/suno.json b/app/modules/suno.json new file mode 100644 index 000000000..a0e987bc5 --- /dev/null +++ b/app/modules/suno.json @@ -0,0 +1,48 @@ +{ + "id": "570101", + "name": { + "en": "Sensor Uno", + "ko": "센서우노(USB)" + }, + "category": "board", + "platform": ["win32", "darwin"], + "icon": "suno.png", + "module": "suno.js", + "url": "https://excitetouch.com", + "email": "joonsuk0208@gmail.com", + "driver": [ + { + "win32-ia32": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.EXE", + "win32-x64": "CH34x_Install_Windows_v3_4/CH34x_Install_Windows_v3_4.EXE", + "darwin-x64": "https://entrylabs.github.io/docs/files/drivers/CH34x_Install_MAC_10_9_AND_ABOVE/CH34x_Install_V1.3.pkg", + "translate": "드라이버 (유선용)" + }, + { + "win32-ia32": "SUNOBT/CP210xVCPInstaller_x86.exe", + "win32-x64": "SUNOBT/CP210xVCPInstaller_x64.exe", + "darwin-x64": "Mac_OSX_VCP_Driver/SiLabsUSBDriverDisk.dmg", + "translate": "드라이버 (블루투스)" + } + ], + "reconnect": true, + "firmware": [ + { + "name": "suno", + "translate": "펌웨어 (USB케이블)" + }, + { + "name": "sunobt", + "translate": "펌웨어 (블루투스)" + } + ], + "hardware": { + "type": "serial", + "control": "slave", + "duration": 48, + "vendor": { + "win32": ["wch.cn", "Arduino"] + }, + "baudRate": 57600 + + } +} diff --git a/app/modules/suno.png b/app/modules/suno.png new file mode 100644 index 000000000..c8d54eb7b Binary files /dev/null and b/app/modules/suno.png differ diff --git a/app/modules/sunobt.js b/app/modules/sunobt.js new file mode 100644 index 000000000..4e7b614db --- /dev/null +++ b/app/modules/sunobt.js @@ -0,0 +1,108 @@ +function Module() { + this.digitalValue = new Array(12); + this.analogValue = new Array(8); + this.remoteDigitalValue = [0,0,0,0,0,0,0,0,0,0,0,0]; + this.readablePorts = null; + this.remainValue = null; +} + +Module.prototype.init = function(handler, config) { +}; + + +Module.prototype.requestInitialData = function() { + return null; +}; + +Module.prototype.checkInitialData = function(data, config) { + return true; +}; + +Module.prototype.validateLocalData = function(data) { + return true; +}; + + +Module.prototype.handleRemoteData = function(handler) { + this.readablePorts = handler.read('readablePorts'); + var digitalValue = this.remoteDigitalValue; + for (var port = 0; port < 12; port++) { + digitalValue[port] = handler.read(port); + } +}; + +Module.prototype.requestLocalData = function() { + var queryString = []; + + var readablePorts = this.readablePorts; + if (readablePorts) { + for (var i in readablePorts) { + var query = (5 << 5) + (readablePorts[i] << 1); + queryString.push(query); + } + } + + var digitalValue = this.remoteDigitalValue; + for (var port = 0; port < 12; port++) { + var value = digitalValue[port]; + if (value === 255 || value === 0) { + var query = (7 << 5) + (port << 1) + (value == 255 ? 1 : 0); + queryString.push(query); + } else if (value > 0 && value < 255) { + var query = (6 << 5) + (port << 1) + (value >> 7); + queryString.push(query); + query = value & 127; + queryString.push(query); + } + } + return queryString; +}; + +Module.prototype.handleLocalData = function(data) { // data: Native Buffer + var pointer = 0; + for (var i = 0; i < 32; i++) { + var chunk; + if(!this.remainValue) { + chunk = data[i]; + } else { + chunk = this.remainValue; + i--; + } + if (chunk >> 7) { + if ((chunk >> 6) & 1) { + var nextChunk = data[i + 1]; + if(!nextChunk && nextChunk !== 0) { + this.remainValue = chunk; + } + else { + this.remainValue = null; + + var port = (chunk >> 3) & 7; + this.analogValue[port] = ((chunk & 7) << 7) + + (nextChunk & 127); + } + i++; + } + else { + var port = (chunk >> 2) & 15; + this.digitalValue[port] = chunk & 1; + } + } + } +}; + +Module.prototype.requestRemoteData = function(handler) { + for (var i = 0; i < this.analogValue.length; i++) { + var value = this.analogValue[i]; + handler.write('a' + i, value); + } + for (var i = 0; i < this.digitalValue.length; i++) { + var value = this.digitalValue[i]; + handler.write(i, value); + } +}; + +Module.prototype.reset = function() { +}; + +module.exports = new Module(); diff --git a/app/modules/sunobt.json b/app/modules/sunobt.json new file mode 100644 index 000000000..b46ca0b26 --- /dev/null +++ b/app/modules/sunobt.json @@ -0,0 +1,22 @@ +{ + "id": "570102", + "name": { + "en": "Sensor Uno (Bluetooth)", + "ko": "센서우노(블루투스)" + }, + "category": "board", + "platform": ["win32", "darwin"], + "icon": "sunobt.png", + "module": "sunobt.js", + "url": "https://excitetouch.com", + "email": "joonsuk0208@gmail.com", + "reconnect": true, + "selectPort": true, + "hardware": { + "type": "bluetooth", + "control": "slave", + "duration": 48, + "vendor": "Microsoft", + "baudRate": 57600 + } +} diff --git a/app/modules/sunobt.png b/app/modules/sunobt.png new file mode 100644 index 000000000..d3aa00837 Binary files /dev/null and b/app/modules/sunobt.png differ diff --git a/build/entry-hw.nsi b/build/entry-hw.nsi index f05dd584a..19bc7df15 100644 --- a/build/entry-hw.nsi +++ b/build/entry-hw.nsi @@ -14,7 +14,7 @@ !define PRODUCT_NAME "Entry_HW" !define PROTOCOL_NAME "entryhw" !define APP_NAME "Entry_HW.exe" -!define PRODUCT_VERSION "1.9.47" +!define PRODUCT_VERSION "1.9.48" !define PRODUCT_PUBLISHER "EntryLabs" !define PRODUCT_WEB_SITE "https://www.playentry.org/" diff --git a/package.json b/package.json index c074b0424..a60ccc3d2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "entry-hw", - "version": "1.9.47", + "version": "1.9.48", "description": "엔트리 하드웨어 연결 프로그램", "author": "EntryLabs", "main": "./app/src/index.bundle.js",