From 7cc4f83ca44f32cd1bff1f05a1c315fff79810d7 Mon Sep 17 00:00:00 2001 From: juppy10 Date: Fri, 19 Jun 2026 09:33:49 +0800 Subject: [PATCH 1/3] sunk sensor --- Tools/AP_Periph/AP_Periph.cpp | 4 + Tools/AP_Periph/AP_Periph.h | 5 + Tools/AP_Periph/sunk_sensor.cpp | 41 + Tools/AP_Periph/sunk_sensor.h | 11 + .../bootloaders/VM-L431-Periph-Pico-SB_bl.bin | Bin 0 -> 17172 bytes .../bootloaders/VM-L431-Periph-Pico-SB_bl.hex | 1076 +++++++++++++++++ .../hwdef/VM-L431-Periph-Pico-SB/README.md | 14 + .../hwdef/VM-L431-Periph-Pico-SB/hwdef-bl.dat | 1 + .../hwdef/VM-L431-Periph-Pico-SB/hwdef.dat | 31 + 9 files changed, 1183 insertions(+) create mode 100644 Tools/AP_Periph/sunk_sensor.cpp create mode 100644 Tools/AP_Periph/sunk_sensor.h create mode 100755 Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.bin create mode 100644 Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.hex create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/README.md create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef-bl.dat create mode 100644 libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat diff --git a/Tools/AP_Periph/AP_Periph.cpp b/Tools/AP_Periph/AP_Periph.cpp index 04cc75ea88..55c6950b0b 100644 --- a/Tools/AP_Periph/AP_Periph.cpp +++ b/Tools/AP_Periph/AP_Periph.cpp @@ -472,6 +472,10 @@ void AP_Periph_FW::update() dac.update(); #endif +#if AP_PERIPH_SUNK_SENSOR_ENABLED + sunk_sensor.update(); +#endif + GCS_SEND_MESSAGE(MSG_HEARTBEAT); GCS_SEND_MESSAGE(MSG_SYS_STATUS); } diff --git a/Tools/AP_Periph/AP_Periph.h b/Tools/AP_Periph/AP_Periph.h index 0ab36eed6f..6411c3c6ba 100644 --- a/Tools/AP_Periph/AP_Periph.h +++ b/Tools/AP_Periph/AP_Periph.h @@ -41,6 +41,7 @@ #include "rc_in.h" #include "batt_balance.h" #include "battery_tag.h" +#include "sunk_sensor.h" #include "battery_bms.h" #include "actuator_telem.h" #include "networking.h" @@ -415,6 +416,10 @@ class AP_Periph_FW { BatteryTag battery_tag; #endif +#if AP_PERIPH_SUNK_SENSOR_ENABLED + SunkSensor sunk_sensor; +#endif + #if AP_PERIPH_BATTERY_BMS_ENABLED BatteryBMS battery_bms; #endif diff --git a/Tools/AP_Periph/sunk_sensor.cpp b/Tools/AP_Periph/sunk_sensor.cpp new file mode 100644 index 0000000000..589b4fcfdf --- /dev/null +++ b/Tools/AP_Periph/sunk_sensor.cpp @@ -0,0 +1,41 @@ +#include "AP_Periph.h" + +#if AP_PERIPH_SUNK_SENSOR_ENABLED + +#include + +extern const AP_HAL::HAL &hal; + +uint8_t buffer[1]; + +void SunkSensor::init(void){ + //keep empty for now + hal.gpio->pinMode(HAL_GPIO_SUNK_SENSOR_OUTPUT, HAL_GPIO_OUTPUT); + hal.gpio->pinMode(HAL_GPIO_SUNK_SENSOR_INPUT, HAL_GPIO_INPUT); + + hal.gpio->write(HAL_GPIO_SUNK_SENSOR_OUTPUT, 0); + hal.gpio->write(HAL_GPIO_SUNK_SENSOR_INPUT, 1); //enable with pullup + +} + +void SunkSensor::update(void) +{ + hal.gpio->toggle(HAL_GPIO_SUNK_SENSOR_OUTPUT); + + bool sunk = false; + if(hal.gpio->read(HAL_GPIO_SUNK_SENSOR_INPUT)){ + sunk = true; + } + + if(sunk){ + can_printf("sunk_sensor_update"); + buffer[0] = SUNFISH_INDICATION_SUNKSTATE_STATUS_SUNK; + periph.canard_broadcast(SUNFISH_INDICATION_SUNKSTATE_SIGNATURE, + 20069, + CANARD_TRANSFER_PRIORITY_LOW, + &buffer[0], + SUNFISH_INDICATION_SUNKSTATE_MAX_SIZE); + } +} + +#endif // AP_PERIPH_SUNK_SENSOR_ENABLED \ No newline at end of file diff --git a/Tools/AP_Periph/sunk_sensor.h b/Tools/AP_Periph/sunk_sensor.h new file mode 100644 index 0000000000..dd7a51638a --- /dev/null +++ b/Tools/AP_Periph/sunk_sensor.h @@ -0,0 +1,11 @@ +#pragma once + +#if AP_PERIPH_SUNK_SENSOR_ENABLED + +class SunkSensor { +public: + void init(void); + void update(void); +}; + +#endif // AP_PERIPH_SUNK_SENSOR_ENABLED \ No newline at end of file diff --git a/Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.bin b/Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.bin new file mode 100755 index 0000000000000000000000000000000000000000..2931cd1e2a32d7f9ba2258fea1899701b8d75f16 GIT binary patch literal 17172 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 literal 0 HcmV?d00001 diff --git a/Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.hex b/Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.hex new file mode 100644 index 0000000000..9ffad2f7be --- /dev/null +++ b/Tools/bootloaders/VM-L431-Periph-Pico-SB_bl.hex @@ -0,0 +1,1076 @@ +:020000040800F2 +:1000000000090020B101000809230008C1220008EE +:10001000E9220008C1220008E1220008B30100081B +:10002000B3010008B3010008B301000879330008E8 +:10003000B3010008B3010008B3010008B3010008D0 +:10004000B3010008B3010008B3010008B3010008C0 +:10005000B3010008B3010008B3010008B3010008B0 +:10006000B3010008B3010008B3010008B3010008A0 +:10007000B3010008B3010008B3010008B301000890 +:10008000B3010008B3010008B3010008752200089D +:10009000A1220008B1220008B3010008B301000842 +:1000A000B3010008B3010008B3010008B301000860 +:1000B000F9400008B3010008B3010008B3010008CB +:1000C000B3010008B3010008B3010008B301000840 +:1000D000B3010008B3010008B3010008B301000830 +:1000E000B3010008B3010008B3010008B301000820 +:1000F000B3010008B3010008B3010008B301000810 +:10010000B3010008B3010008B3010008B3010008FF +:10011000B3010008B3010008B3010008B3010008EF +:10012000B3010008B3010008B3010008B3010008DF +:10013000B3010008B3010008B3010008B3010008CF +:10014000B3010008B3010008B3010008B3010008BF +:10015000B3010008B3010008B3010008B3010008AF +:10016000B3010008B3010008B3010008B30100089F +:10017000B3010008B3010008B3010008B30100088F +:10018000B3010008B3010008B3010008B30100087F +:10019000B3010008B3010008B3010008B30100086F +:1001A000090F0008FFFFFFFFFFFFFFFFFFFFFFFF3B +:1001B00002E000F000F8FEE772B6374880F30888E6 +:1001C000364880F3098836483649086040F2000016 +:1001D000CCF200004EF63471CEF200010860BFF39D +:1001E0004F8FBFF36F8F40F20000C0F2F0004EF669 +:1001F0008851CEF200010860BFF34F8FBFF36F8FBD +:100200004FF00000E1EE100A4EF63C71CEF2000114 +:100210000860022080F31488BFF36F8F03F088FD1D +:1002200003F00AFE4FF055301F491B4A91423CBF74 +:1002300041F8040BFAE71D49184A91423CBF41F8C6 +:10024000040BFAE71A491B4A1B4B9A423EBF51F86E +:10025000040B42F8040BF8E700201849184A9142B1 +:100260003CBF41F8040BFAE703F066FD03F038FEEB +:10027000144C154DAC4203DA54F8041B8847F9E7D7 +:1002800000F042F8114C124DAC4203DA54F8041B52 +:100290008847F9E703F04EBD000900200011002057 +:1002A0000000000808ED00E0000100200009002027 +:1002B00098420008001100207C11002080110020CD +:1002C000C43A0020A0010008A4010008A40100080D +:1002D000A40100082DE9F04F2DED108AC1F80CD0D3 +:1002E000C3689D46BDEC108ABDE8F08F002383F300 +:1002F00011882846A047002003F0BEF9FEE703F06E +:1003000041F900DFFEE70000F8B500F00FFE03F052 +:10031000ADFC074603F0FEFC0646C0BB274B9F42E0 +:1003200035D001339F4235D0254B27F0FF029A424A +:1003300033D1F8B200F03AFC354642F2107400F0C6 +:100340003BFC08B10024254601F0D8F848B303204F +:1003500000F03AF80024254636B11A4B9F4203D0EC +:1003600003F0D0FC00242546002003F089FC0DB1E9 +:1003700000F040F800F054FC01F0CEFF0546ACB9A7 +:1003800000F094FC4FF47A7003F07CF9F7E73546FF +:100390000024D4E704460125D1E705464FF47A74DA +:1003A000CDE7B4F57A7F08BF0125D5E701F0B4FFAA +:1003B000431BA342E4D900F01DF8DDE7010007B0BC +:1003C000000008B0263A09B0084B187003280CD872 +:1003D000DFE800F008050208022000F0FDBD022061 +:1003E00000F0F8BD024B00225A60704780110020D7 +:1003F0008411002010B501F081F830B1234B0322A5 +:100400001A70234B00225A6010BD224B224A1C4610 +:1004100019680131F8D004339342F9D16268A242DD +:10042000F2D31E4B9B6803F1006303F520439A420D +:10043000EAD203F039FC03F04BFC002000F090FD01 +:100440000220FFF7C1FF164B9A6D00229A65996F43 +:100450009A67996FD96DDA65D96FDA67D96F196EB6 +:100460001A66D3F88010C3F88020D3F8803072B6B3 +:100470004FF0E0233021C3F8084DD4E9003281F376 +:1004800011889D4683F308881047BDE7801100203E +:100490008411002000A0000820A000080011002006 +:1004A00000100240094A136849F2690099B21B0C16 +:1004B00000FB01331360064B186844F2506182B2AE +:1004C000000C01FB0200186080B27047141100207C +:1004D0001011002010B500211022044600F090FDFC +:1004E000034B03CB206061601868A06010BD00BFA3 +:1004F0009075FF1FF0B5ADF54F7D6CAC4FF4C47235 +:1005000007460D462046002100F07AFD01F004FF69 +:10051000264B4FF47A72B0FBF2F0186093E80700B4 +:10052000022384E807000DF5E9702382FFF7D2FF6C +:1005300047F605731E49238407A803F04DFE1723D1 +:1005400084F832310DF2E32207AB0DF12C0C1E467C +:1005500003CE664510605160334602F10802F6D1C1 +:1005600030681060B188B37993710DAE91802046E8 +:100570003146012200F090FD00230393AB7E0293ED +:1005800005F11903019380B20123CDE904600093C2 +:10059000E97E04A3D3E90023384602F0B5FA0DF54D +:1005A0004F7DF0BD9E6AC421818A46EE8C110020E9 +:1005B000E84100082DE9F0412C4C237ADAB080465E +:1005C0000D465BBB27A9284600F08CFE0746002895 +:1005D00042D19DF89D60C82E3ED801464FF4A662D8 +:1005E000204600F00DFD4FF48073C4F8F8314FF44D +:1005F0000073C4F80C334FF44073C4F8203432460F +:100600000DF19E0104F1090000F0E8FC26449DF87C +:100610009C30777223720BB9EB7E2372812200210A +:1006200006AC27A800F0ECFC0122214627A800F028 +:100630009FFE00230393AB7E029305F1190380B262 +:1006400001932823CDE904400093E97E05A3D3E973 +:100650000023404602F058FA5AB0BDE8F08100BFCE +:10066000AFF3008026417272DF25D7B7D421002076 +:10067000F0B5254E4FF48A7505FB0065F1B096F88C +:10068000D83085F8DC300024D822214685F8E840AF +:100690003AA800F0B5FC06F1090000F0A9FCD5F875 +:1006A000E4308DF8F000C2B206AF06F109010DF199 +:1006B000F100CDE93A3400F091FC394601223AA824 +:1006C00000F08CFE80B2CDE9047008230127CDE94B +:1006D000023706F1D803019330230093317A0B4897 +:1006E00007A3D3E9002302F00FFAA04206DD01F0D0 +:1006F00013FEC5F8E000384671B0F0BD2046FBE7B8 +:1007000078F6339F93CACD8DD4210020A4210020F8 +:100710002DE9F0411D4D1E4E1E4F86B0284602F0B9 +:100720001FFA034658B30024CDE90344ADF8144042 +:10073000027B8DF8142099684068029403AA03C2D2 +:100740001B68DFF8548043F00043029301F0E6FD9C +:10075000821941F10003009402A9384601F0AEF875 +:10076000A04205DD284602F0FFF988F80040D5E7F1 +:1007700098F80030072B05D8013388F8003006B010 +:10078000BDE8F081014802F0EFF9F8E7A42100206C +:1007900040420F00102700200927002070B50D46A9 +:1007A00014461E4602F00CF950B9022E10D1012C4D +:1007B0000ED112A3D3E90023C5E90023012007E0ED +:1007C000282C10D005D8012C09D0052C0FD00020E2 +:1007D00070BD302CFBD10BA3D3E90023ECE70BA3B6 +:1007E000D3E90023E8E70BA3D3E90023E4E70BA355 +:1007F000D3E90023E0E700BFAFF30080401DA12054 +:1008000026812A0B78F6339F93CACD8D9E6AC42128 +:10081000818A46EE26417272DF25D7B7F017304A3B +:1008200039059E5638B505460E4C0021013500F0BD +:10083000B9FBA4F82C55B4F82C0500F09BFB78B15B +:10084000B4F82C0500F0A6FB014648B9B4F82C0515 +:1008500000F0A8FBB4F82C350133A4F82C35EAE7F6 +:1008600038BD00BFD421002010B50A4B0A4A1A60D7 +:1008700003F5805393F870203AB9DC6E2CB1204612 +:1008800000F0BAFE204600F0F7FFBDE81040034834 +:1008900000F0B2BE102700203C420008683700205C +:1008A0002DE9F04F8FB000AF05460C4602F088F8F6 +:1008B00000284BD1237E022B1BD1E38A012B18D1B8 +:1008C00001F02AFD0646FFF7EDFD03464FF4C87020 +:1008D000DFF8D482B3FBF0F206F5167602FB103394 +:1008E00016FA83F3C8F80030E37E33B9A74B002231 +:1008F0001A703C37BD46BDE8F08F07F12401204651 +:1009000000F0A4FC0028F4D107F11400FFF7E2FD89 +:1009100097F8264007F11401224607F1270003F05B +:1009200029FC0028E2D10F2C08D8984B1C70D8F86D +:100930000030A3F51673C8F80030DAE797F82410F2 +:100940000029D6D0284602F033F8D2E7E38A282BD4 +:1009500033D010D8012B2BD0052BCAD1BFF34F8F2A +:100960008B498C4BCA6802F4E0621343CB60BFF33F +:100970004F8F00BFFDE7302BBBD1874EE17E327A2F +:100980009142B6D1607E3146002291F8DC5085421A +:1009900000F0AD800132042A01F58A71F5D1326888 +:1009A00040F6B831FA328A4294BF32603160A0E733 +:1009B00021462846FFF79EFD9BE721462846FFF784 +:1009C000F9FD96E7B2F8EC507B6005F103094FEAB8 +:1009D00099094FEA8902D11DC908A8EBC1039D46B8 +:1009E000EB460021584600F00BFB04F1EE012A46CD +:1009F0003144584600F0F2FA7B6813B9012000F048 +:100A0000AFFA96F8D20000F0B5FA044630B9307269 +:100A100000F0D0FA204600F0A3FAB0E0D6F8D420D7 +:100A20003AB996F8D200B6F82C25824201D8FFF7E1 +:100A3000F9FED6F8D4202A44944208D296F8D2007F +:100A4000B6F82C250130824201D8FFF7EBFE706822 +:100A50005FFA89F2594600F0DBFA08B9C54679E039 +:100A6000726896F8D2002A447260D6F8D42005EB5A +:100A70000209C6F8D49000F07DFA814509D396F8B2 +:100A8000D220D6F8D4000132001B86F8D220C6F856 +:100A9000D400FF2D0FD80024347200F08BFA2046CA +:100AA00000F05EFA00F02AFD3C4B188108B9FFF710 +:100AB000A1FCC5461DE7BB6896F8D9000AFB036296 +:100AC000FB68D2F8E41082F8E83001F58061C2F8E2 +:100AD000E030C2F8E410FFF7CBFDFFF719FE96F8FF +:100AE000D920013202F0030286F8D920B6E74FF48C +:100AF0008A7A0AFB02F505F1EA013144204600F04A +:100B0000A1FCF86000287FF4F4AE3544012285F89A +:100B1000E82001F001FCD5F8E020D6ED007ADFED09 +:100B2000206A801A192838BF192040F6B83290423E +:100B300028BF1046B8EE677A07EE900AF8EEE77A1B +:100B400067EEA67ADFED176AE7EE267AFCEEE77A23 +:100B5000C6ED007A96F8D9307168BB600AFB03F4E1 +:100B6000321992F8E8505DB1D2F8E4308B42E84691 +:100B70003FF428AF002182F8E810C2F8E010C54623 +:100B80007368064A9B0A01331381B2E69D21002057 +:100B900000ED00E00400FA05D42100208C110020B3 +:100BA000CDCCCC3D6666663FA0210020014B18707D +:100BB000704700BF9811002038B54FF00054144B17 +:100BC00022689A4221D1607DF0B1124B124918700F +:100BD0001248237D03724FF48073C0F8F8314FF44C +:100BE0000073C0F80C3300254FF44073C0F8203474 +:100BF000C0F8E450C922093000F0F0F9E02229469B +:100C0000204600F0FDF9012038BD0020FCE700BFC0 +:100C10009AAD44C59811002016000020D421002070 +:100C200037B500F06BFC184D18492881022318488D +:100C30006B7101F015FA00230193164B16490093CE +:100C40001648174B4FF4805201F08AFE154B197865 +:100C500011B1124801F0ACFE01F05EFB0446FFF753 +:100C600021FC4FF4C873B0FBF3F202FB130304F54D +:100C7000167010FA83F00C4B186003F04BF808B1B3 +:100C80000F232B8103B030BD8C11002040420F0098 +:100C9000102700209D0700089C110020A42100209F +:100CA000A108000898110020A02100202DE9F04F94 +:100CB0002DED028B8CA7D7E900670FF23429D9E913 +:100CC0000089844C95B00DAD9FED808BFFF720FD22 +:100CD000DFF824B200230C93ADF83C300D936B6029 +:100CE00000230DF125028DED008B4FF0010A09A9BB +:100CF00058468DF825308DF824A001F05FF99DF855 +:100D000024200023002A40F0AE80204601F058FE47 +:100D10000546002847D1DFF8E4B101F0FDFADBF821 +:100D2000003098423FD301F0F7FA0790FFF7BAFB83 +:100D3000079A4FF4C873B0FBF3F101FB130302F5FC +:100D4000167010FA83F0CBF80000DFF8B4B19BF80E +:100D500000100791002914BF2B46534610A88DF8A8 +:100D60003030FFF7B7FB0799C1F11002D2B2062A63 +:100D700010AB28BF062219440DF13100079200F094 +:100D80002DF9079A0CAB0393182302930132524BAF +:100D9000D2B2CDE900A304923B463246204601F090 +:100DA00055FE8BF8005001F0B7FA4C4A4C4D1368D1 +:100DB000C31AB3F57A7F32D3106001F0AFFA02465E +:100DC0000B46204601F0DAFE204601F0F9FD30B373 +:100DD0002B7ADFF830A1002B14BF032302238AF8FB +:100DE000053001F099FA0DF1400B4FF47A730122AE +:100DF000B0FBF3F05946CAF80000504600F0FEF987 +:100E000018230293374B019380B240F25513CDE97A +:100E100003B0009342464B46204601F017FE2B7A62 +:100E2000ABB101F079FA4FF0000A83464FF48A72B1 +:100E300095F8D900504400F0030002FB005393F8EA +:100E4000E81071B30AF1010ABAF1040FF0D1C82019 +:100E500002F018FC2B7A002B7FF435AF15B0BDECF7 +:100E6000028BBDE8F08F1946102210A800F0C8F8D8 +:100E70000DF126030AAA0CA9584600F025FE95E8B4 +:100E8000030011AB83E803009DF83C308DF84C3033 +:100E90000C9B109310A9DDE90A23204602F042F8CA +:100EA0001EE7D3F8E01049B12B68FA2B38BFFA23BC +:100EB000ABEB01010533B1EB430FC3D3FFF7D8FB15 +:100EC0004FF48A720028BDD1C1E700BF00000000C6 +:100ED00000000000A42100209C2100200427002005 +:100EE000D421002008270020401DA12026812A0BA4 +:100EF000F1C6A7C1D068080F10270020A02100204C +:100F00009D2100208C11002008B5054800F07AFED4 +:100F1000BDE80840034A0449002003F007B900BFB8 +:100F200010270020303800206908000870B502F052 +:100F300045FD094E094D30800024286833888342DE +:100F400008D902F037FD2B6804440133B4F5204F73 +:100F50002B60F2D370BD00BF24380020F83700208A +:100F600002F0DEBD00F10060920000F5204002F0CA +:100F700061BD0000054B1A68054B1B889B1A834214 +:100F800002D9104402F016BD00207047F837002047 +:100F900024380020024B1B68184402F011BD00BF2A +:100FA000F8370020024B1B68184402F01BBD00BF3D +:100FB000F8370020064991F8243033B10023086A3D +:100FC00081F824300822FFF7CDBF0120704700BF11 +:100FD000FC370020704700007047000010B5002368 +:100FE000934203D0CC5CC4540133F9E710BD000038 +:100FF00003460246D01A12F9011B0029FAD17047A4 +:1010000002440346934202D003F8011BFAE77047FB +:101010002DE9F8431F4D144695F8242007468846CD +:1010200052BBDFF870909CB395F824302BB9202286 +:10103000FF2148462F62FFF7E3FF95F82400C0F137 +:101040000802A24228BF2246D6B24146920005EBD2 +:101050008000FFF7C3FF95F82430A41B1E44F6B2AE +:10106000082E17449044E4B285F82460DBD1FFF7E2 +:10107000A1FF0028D7D108E02B6A03EB820383424B +:10108000CFD0FFF797FF0028CBD10020BDE8F88331 +:101090000120FBE7FC3700202DE9F3470D4604460D +:1010A00000219046284640F27912FFF7A9FF234617 +:1010B00020220021284601F0D7FE231D02222021F4 +:1010C000284601F0D1FE631D03222221284601F0AB +:1010D000CBFEA31D03222521284601F0C5FE04F105 +:1010E000080310222821284601F0BEFE04F1100357 +:1010F00008223821284601F0B7FE04F11103082226 +:101100004021284601F0B0FE04F1120308224821D4 +:10111000284601F0A9FE04F114032022502128469C +:1011200001F0A2FE04F1180340227021284601F0CC +:101130009BFE04F120030822B021284601F094FE12 +:1011400004F121030822B821284601F08DFE04F1A4 +:101150002207C0263B46314608222846083601F0C1 +:1011600083FEB6F5A07F07F10107F3D194F8323082 +:101170008DF8073031460DF107030822284601F0AB +:1011800073FE002604F1330A9DF807304FEAC609C2 +:101190009E4209F5A47720D394F83231502B28BF12 +:1011A00050238DF80730B8F1000F08D139460DF102 +:1011B00007030722284601F057FE09F24F170026C1 +:1011C00004F233149DF807309E4207EBC6010DD39D +:1011D0000731C80802B0BDE8F0870AEB0603082211 +:1011E0003946284601F040FE0136CDE7A319082212 +:1011F000284601F039FE0136E4E7000013B5044645 +:101200000846002101602346C0F803102022019007 +:1012100001F02AFE0198231D0222202101F024FE64 +:101220000198631D0322222101F01EFE0198A31DD7 +:101230000322252101F018FE019804F10803102271 +:10124000282101F011FE072002B010BDF7B5047F80 +:1012500005460E462CB1838A122B02D9012003B019 +:10126000F0BD0023194607220096284601F0C0FC75 +:10127000731C0093012200230721284601F0B8FCCB +:10128000D4B9B31C0093052223460821284601F057 +:10129000AFFC0D24B378102BE0D83746B278BB1BD7 +:1012A000934210D32B7FA88A0734E408B3B9844251 +:1012B00094BF00200120D2E7AB8ADB00083BDB08AB +:1012C000B3700824E6E7FB1C0093214600230822A4 +:1012D000284601F08DFC08340137DFE7201A18BFDB +:1012E0000120BCE7F7B5047F05460E462CB1838A82 +:1012F000CA2B02D9012003B0F0BD00231946009685 +:101300000822284601F074FC731CD4B9082200930B +:1013100011462346284601F06BFC10247378C82B35 +:10132000E8D8012372785F1C013B934210D32B7FD6 +:10133000A88A0734E408B3B9844294BF002001208E +:10134000D9E7AB8ADB00083BDB0873700824E5E7CC +:10135000F3190093214600230822284601F048FC97 +:1013600008343B46DEE7201A18BF0120C3E700001F +:10137000F7B50D4604460021164628468122FFF7A0 +:101380003FFE234608220021284601F06DFD94F916 +:1013900001206378002AB8BF7F238DF807309EB9FB +:1013A0000DF1070307220821284601F05DFD0F27F4 +:1013B000002602349DF807309E4207EBC60105D394 +:1013C0000731C80803B0F0BD0827F1E7A3190822C8 +:1013D000284601F049FD0136ECE70000F7B50E465E +:1013E0000546002114463046CE22FFF709FE2B4663 +:1013F00028220021304601F037FD2B7AC82B28BF68 +:10140000C8238DF807308CB90DF107030822282175 +:10141000304601F029FD30242F469DF807207B1B24 +:10142000934205D3E01DC00803B0F0BD2824F3E7C4 +:1014300007F1090321460822304601F015FD083462 +:101440000137EAE7F7B5047F05460E4634B1838AD3 +:10145000B3F5827F02D9012003B0F0BD00960123CD +:1014600010220021284601F0C3FBDCB9B31C009315 +:10147000092223461021284601F0BAFB192473885B +:10148000B3F5807FE7D837467288BB1B934210D3F1 +:101490002B7FA88A0734E408B3B9844294BF0020A4 +:1014A0000120D9E7AB8ADB00103BDB0873801024F6 +:1014B000E5E73B1D0093214600230822284601F062 +:1014C00097FB08340137DFE7201A18BF0120C3E774 +:1014D00030B5094D0A4491420DD011F8013B5840F6 +:1014E000082340F30004013B2C4013F0FF0384EA7F +:1014F0005000F6D1EFE730BD2083B8EDF7B5384A9C +:10150000106851686B4603C36A463649364808235B +:1015100002F040FE0446002833D10A25334A106801 +:1015200051686B4603C36A4631492F48082302F0CD +:1015300031FE0446002849D00369B3F5583F45D829 +:10154000B0F8661040F27F5291423FD1294A0244DE +:1015500002F15C018B4239D35C3B234900209E1A87 +:10156000FFF7B6FF3246074604F164010020FFF79B +:10157000AFFFA3689F4229D1E368984208BF0025C6 +:1015800024E00369B3F5583F27D8418B40F27F52DE +:10159000914220D1174A024402F110018B4218D324 +:1015A000103B114900209D1AFFF792FF2A4606467C +:1015B00004F118010020FFF78BFFA3689E4202D1BF +:1015C000E368984201D00D25A8E70025284603B01E +:1015D000F0BD1025A2E70C25A0E70B259EE700BF74 +:1015E00000420008DC5F030000A000080942000878 +:1015F000905F03000860FFF710B5037C044613B941 +:10160000006802F0AFFD204610BD00000023BFF3CC +:101610005B8FC360BFF35B8FBFF35B8F8360BFF3F0 +:101620005B8F7047BFF35B8F0068BFF35B8F7047C2 +:1016300070B505460C30FFF7F5FF05F108060446C6 +:101640003046FFF7EFFFA04206D930466D68FFF73E +:10165000E9FF2544281A70BD3046FFF7E3FF201A42 +:10166000F9E7000070B50546406898B105F108003B +:10167000FFF7D8FF05F10C0604463046FFF7D2FF0E +:101680008442304694BF6D680025FFF7CBFF013CD4 +:101690002C44201A70BD000038B50C460546FFF7F3 +:1016A000C7FFA04210D305F10800FFF7BBFF0444B9 +:1016B0006868B4FBF0F100FB1144BFF35B8F0120BD +:1016C000AC60BFF35B8F38BD0020FCE72DE9F04133 +:1016D000144607460D46FFF7C5FF844228BF04465F +:1016E000D4B1B84658F80C6B4046FFF79BFF304426 +:1016F000286040467E68FFF795FF331A9C4203D866 +:101700006C600120BDE8F0816B60A41B3B68AB609E +:101710002044E8600220F5E72046F3E738B50C46A0 +:101720000546FFF79FFFA04210D305F10C00FFF71D +:1017300079FF04446868B4FBF0F100FB1144BFF387 +:101740005B8F0120EC60BFF35B8F38BD0020FCE7AE +:101750002DE9FF41884669460746FFF7B7FF6C460B +:1017600006B204EBC6060025B44209D062682068C0 +:1017700008EB0501FFF732FC636808341D44F3E70A +:1017800029463846FFF7CAFF284604B0BDE8F08175 +:10179000F8B505460C300F46FFF744FF05F1080683 +:1017A00004463046FFF73EFFA042304688BF6C68D3 +:1017B000FFF738FF201A386020B130462C68FFF759 +:1017C00031FF2044F8BD000073B5144606460D46AF +:1017D000FFF72EFF844228BF04460190DCB101A927 +:1017E0003046FFF7D5FF019B33B93268C5E90233B4 +:1017F000C5E9002401200CE09C4238BF0194286018 +:10180000019868608442F5D93368AB60241AEC60B3 +:10181000022002B070BD2046FBE700002DE9FF4129 +:101820000F466946FFF7D0FF6C4600B204EBC005D7 +:101830000026AC4209D0D4F8048054F8081BB8192B +:101840004246FFF7CBFB4644F3E7304604B0BDE821 +:10185000F081000038B50546FFF7E0FF0446014679 +:101860002846FFF719FF204638BD000001218842B5 +:1018700038BF084602F060BC08B102F073BC704784 +:1018800003685B681847000000207047704700003D +:101890000020704700F5805090F8D800C0F3400059 +:1018A0007047000000F5805090F9E000704700009C +:1018B00000F58050C0F8DC1001207047F7B50C68C7 +:1018C000BDF8207014F0005473D10D7B082D70D832 +:1018D000302585F31188056AAE6876010CD4AC68B2 +:1018E000240108D4AC6814F0805460D184F31188CA +:1018F000204603B0F0BD01240E6804F1180C002E40 +:10190000B8BFF6004FEA0C1CB4BF46F004067605DB +:1019100045F80C600E680FFA84FC16F0804F18BF73 +:1019200005EB0C1E05EB0C1C1EBFDEF8806146F0BB +:101930000206CEF880610E7BCCF8846105EB0415BD +:101940008E68C5F88C614E68C5F88861DCF88051F6 +:1019500045F00105CCF8805141F2780500EB441CBC +:10196000660105EB4414AC440444CCE900230D4665 +:10197000083401F10C0C55F804EB44F804EB654510 +:10198000F9D12D882580841904F5805407F00305CA +:1019900094F8946026F00B06354384F894500024A4 +:1019A00084F31188009700F007FD0120A1E70224CD +:1019B000A2E74FF0FF309CE713B500F5805401918A +:1019C000E06EFFF74FFE1F280AD90199E06E202232 +:1019D000FFF7BEFEA0F120035842584102B010BDEF +:1019E0000020FBE708B5302383F3118800F5805011 +:1019F000C06EFFF70BFE002383F3118808BD0000C3 +:101A000000220260828142608260704710B500222D +:101A10000023C0E900230023044603810C30FFF7B4 +:101A2000EFFF204610BD0000F0B5054600F58050E0 +:101A30000C4690F8D83013F0040FC3F3800108BFB0 +:101A4000114661F3820380F8D83005EB441303F5A7 +:101A50008453103389B01B79D8074FEA44162FD529 +:101A600082B319072ED46846FFF7D0FF05EB441365 +:101A700003F5845303AA03F108071868596814464C +:101A800003C40833BB422246F7D1186820609B8804 +:101A9000A380DDE90E23CDE900230123ADF8083052 +:101AA0002B6869469B6B28469847354405F5845555 +:101AB00010352B791A075CBF43F008032B7101E046 +:101AC000002AF2D109B0F0BD2DE9F0479A4688B05E +:101AD000074688469146302383F3118807F58054E2 +:101AE0006846FFF793FFE06EFFF7A2FD1F282AD993 +:101AF000E06E20226946FFF7ADFE202823D103AD1A +:101B0000444605AB2E4603CE9E42206061603546BA +:101B100004F10804F6D130682060B388A380DDE9C1 +:101B20000023C9E90023BDF80830AAF800300023DB +:101B300083F3118853464A464146384608B0BDE80B +:101B4000F04700F0F7BB002080F3118808B0BDE833 +:101B5000F08700002DE9F84F182204460F460430A4 +:101B60000021FFF74DFA2046234B40F8243BFFF7B6 +:101B700047FF04F13800FFF749FF04F1580804F566 +:101B800082554646183530462036FFF73FFFAE42B5 +:101B9000F9D104F580554FF480534FF00009C5E9A1 +:101BA0001739C5F858800123EE6604F5875804F507 +:101BB0008456C5F8649085F8683085F8703018361A +:101BC00008F118084FF0000A4FF0000B46E908AB87 +:101BD000A6F11800FFF714FF203646F8289C46456A +:101BE000F4D185F8E07017B1044800F08FFB044B86 +:101BF00023622046BDE8F88F3C42000814420008EA +:101C00000064004010B5044B197804464A1C1A7051 +:101C1000FFF7A0FF204610BD2C3800202DE9F0472B +:101C2000002950D0294B2A4FB7FBF1F599428CBFC0 +:101C30000A231123581EB5FBF3FC03FB1C53C4B24B +:101C40002BB102280346F5D80020BDE8F0870CF13F +:101C5000FF36B6F5806FF7D2C4EBC40E0EF1030366 +:101C60004FEAE309C3F3C703A4EB030809F1010A30 +:101C70004FF47A755FFA88F009FB05555AFA88F82F +:101C8000B5FBF8F5B5F5617FC1BF0EF1FF33C3F3C6 +:101C9000C703E01AC0B25C1C50FA84F40CFB04F4D5 +:101CA000B7FBF4F4A142CFD1013BDBB20F2BCBD871 +:101CB0000138C0B20728C7D8002110711680917072 +:101CC000D3700120C1E70846BFE700BF3F420F00C5 +:101CD00000B4C40470B505460E464FF47A742B6AFE +:101CE0005B6803F00103B34207D04FF47A7001F050 +:101CF000C9FC013CF3D1204670BD0120FCE7000087 +:101D000070B5026A936913F0700F17D000230C4D61 +:101D1000936141F2900400EB4312224411794E0783 +:101D200009D5890707D5016A55F823608E601179B6 +:101D300041F0040111710133032BECD170BD00BFE0 +:101D40002842000873B51D46036A16469A68D207F2 +:101D5000044609D59A6801219960C2F34002CDE991 +:101D600000650021FFF760FE236A9A68D1050BD554 +:101D70009A684FF480719960C2F34022CDE9006502 +:101D800001212046FFF750FE236A9A68D2030BD543 +:101D90009A684FF480319960C2F34042CDE9006502 +:101DA00002212046FFF740FE04F58053D3F8DC0003 +:101DB00010B103681B699847204602B0BDE8704027 +:101DC000FFF79EBFF8B50446066A002977D106F1F1 +:101DD0000C073868800775D006EB01153868D5F810 +:101DE000B00110F0040FD5F8B0011ABFC00840F0E0 +:101DF0000040400D6062D5F8B0C11CF0020F1CBF5E +:101E000040F080406062D5F8B40106EB011100F0AB +:101E10000F0084F83000D1F8B80184F82800D1F818 +:101E2000B801000A84F82900D1F8B801000C84F840 +:101E30002A00D1F8B801000E84F82B00D1F8BC01BB +:101E400084F82C00D1F8BC01000A84F82D00D1F8E8 +:101E5000BC01000C84F82E00D1F8BC11090E84F8E6 +:101E60002F103821396004F1440004F1240104F1F9 +:101E7000300551F8046B40F8046BA942F9D1098888 +:101E80000180C4E90E2321460023A4F8403051F814 +:101E9000383B20469B6B984704F5805393F8D82035 +:101EA000D3F8DC0042F0040283F8D82010B10368B4 +:101EB0001B6998472046BDE8F840FFF721BF06F1AF +:101EC000100786E7F8BD000010B5044600F026FABA +:101ED00002460B4652EA030102D0013A63F10003C5 +:101EE0000449086820B12146BDE81040FFF76ABFE9 +:101EF00010BD00BF28380020F0B5302181F31188D3 +:101F0000DFF848E000F583511831002441F2900CCD +:101F100000EB441565442E7977070ED4F6060CD5F0 +:101F2000D1E9007697429E4107D2066A5EF8247096 +:101F3000B7602E7946F004062E710134032C01F1AE +:101F40002001E5D1002383F31188F0BD2842000869 +:101F500008B5302383F31188FFF7D2FE002383F303 +:101F6000118808BD036A9B6813F0E05F14BF01206D +:101F70000020704708B5302383F3118800F58050A6 +:101F8000C06EFFF755FB002383F3118843090CBF94 +:101F90000120002008BD0000F8B51E460023137084 +:101FA0000F4605461446FFF7E5FF80F00100387044 +:101FB0001EB12846FFF7D6FF2070F8BD2DE9B841C5 +:101FC0000C4615461F46804600F0A8F90B462178BE +:101FD000024609B9287850B14046FFF78DFFFFF758 +:101FE000B7FF3B462A462146FFF7D6FF0120BDE852 +:101FF000B881000070B5302686F31188174B9A6DB2 +:1020000042F000729A659A6B42F000729A639A6B82 +:1020100022F000729A63002383F3118800F5805444 +:1020200094F8D83013F0010516D1A9B186F31188C0 +:102030000321132001F012FA0321142001F00EFAFB +:102040000321152001F00AFA94F8D83043F0010377 +:1020500084F8D83085F3118870BD00BF00100240AD +:102060002DE9F04300F5805589B095F8E030012B5B +:1020700004460F467ED8DFF8F88158F823200AB9C5 +:1020800048F82300D8F80090E761B9F1000F64D058 +:1020900095F8E030012B6FD001212046FFF7AAFF11 +:1020A000302383F31188226A136823F0020313603C +:1020B000226A136843F001031360236A00265E61FD +:1020C00086F3118801212046FFF704FE002800F066 +:1020D0009080E86EFFF79AFA04F58358B14608F14C +:1020E0001808202200216846FEF78AFF02A8FFF7A1 +:1020F00087FCCDF818906A4608EB06030DF1180E20 +:102100009446BCE80300F44518605960624603F148 +:102110000803F5D1DCF80000186020369CF8042094 +:102120001A71602EDDD195F8D8306FF38203002646 +:1021300085F8D8306A4639462046ADF80060ADF8DB +:1021400002608DF80460FFF769FD236A50BB4FF40D +:1021500000421A6009B0BDE8F08341F2E800FFF7E1 +:1021600085FB064610B14946FFF7F4FCC8F800604D +:10217000002E8DD10020EDE7D8F8000003689B6A9F +:1021800098470146002887D1D8F80000FFF732FFB2 +:10219000D8F80000036839465B68984700287FF448 +:1021A0007BAFE7E765221A609DF802309DF80310C7 +:1021B000226A1B06090401F4702103F040730B43EB +:1021C000BDF80010C1F309010B439DF80410090587 +:1021D00001F4E0010B43D361236A13225A61226A9E +:1021E000136823F00103136031462046FFF772FDA8 +:1021F00008B9236AABE795F8E02092BB216AD1F8D1 +:10220000003243F00103C1F80032216AD1F80032F4 +:1022100023F47C5323F00E03C1F80032216AD1F875 +:10222000003243F46063C1F80032236AC3F8142219 +:10223000236AC3F80422236A41F6FF71C3F80C1223 +:10224000236AC3F84022236AC3F84422236A012286 +:10225000C3F81C22226AD2F8003223F00103C2F82C +:10226000003295F8D83043F0020385F8D83071E792 +:102270002838002008B500F051F850EA0103024662 +:1022800002D0421E61F10001044B186810B10B46E8 +:10229000FFF758FDBDE8084001F0A2B8283800203B +:1022A00008B50020FFF710FEBDE8084001F098B81F +:1022B00008B50120FFF708FEBDE8084001F090B81E +:1022C00000B59BB0EFF3098168226846FEF786FEF1 +:1022D000EFF30583014B9B6BFEE700BF00ED00E0D1 +:1022E00008B5FFF7EDFF000000B59BB0EFF30981E3 +:1022F00068226846FEF772FEEFF30583014B5B6BC5 +:10230000FEE700BF00ED00E0FEE700000FB408B5F7 +:10231000029801F067F9FEE701F042BC01F024BC2D +:102320000139C9B202299EBF00EBC1000023C0E9F8 +:10233000013370472DE9F8431E461B885B070546AD +:10234000884618D4044600F118094C4513D0636838 +:102350006BB12B6828465B6B98473388A768C1B27E +:1023600043F0040360684246B8470834EDE7A368C9 +:10237000002BEED1F9E70120BDE8F88373B56C4678 +:1023800084E80600014600224E68D5B26EB98E6818 +:102390005EB900EBC200021D94E80300013582E83B +:1023A00003001D70012002B070BD0132032A01F14B +:1023B0000801E9D10020F6E72DE9F04F2DED028B61 +:1023C00089B09FED258BBDF8508004468B460546AD +:1023D00000F11809002708F0040AA94536D06B68F7 +:1023E0000BB9AB6863B1BAF1000F0BD1236820467B +:1023F0005B6B98474346C1B25A46D5E90106B047E0 +:102400000835EAE7002FFBD18DED008BADF80870A1 +:102410005B4603AA0BF1080C18685968174603C7F6 +:10242000083363453A46F7D1186838609B88BB800B +:10243000FFF774FF0423ADF808302368CDE90001ED +:102440009B6B6946204698470127D9E7012009B0D0 +:10245000BDEC028BBDE8F08F000000000000000022 +:102460002DE9F041456A15B94162BDE8F0814B683C +:1024700023F06047C3F38A464FEAD37EC3F38078E4 +:1024800016EA230638BF3E46AC462B465A68BEEBDA +:10249000D27F22F060440AD0002A18DAA40CB44299 +:1024A00017D19D420FD10D60DEE71346EEE7A7423C +:1024B00007D102F08044C2F3807242450BD054B180 +:1024C000EFE708D2EDE7CCF800100B60CDE7B4429F +:1024D00001D0B442E5D81A689C46002AE5D11960BB +:1024E000C3E700002DE9F047089D01F007044FEA1B +:1024F000D508224405F0070500EBD1004FF47F49D1 +:10250000944201D1BDE8F08704F0070705F0070AFF +:1025100057453E4638BF5646C6F10806111B8E4247 +:1025200028BF0E46E10808EBD50E415C13F80EC03B +:10253000B94029FA06F721FA0AF1FFB28CEA010143 +:1025400047FA0AF739408CEA010C03F80EC034440C +:102550003544D5E780EA0120082341F2210201B287 +:102560004000002980B203F1FF33B8BF504013F0A0 +:10257000FF03F4D17047000038B50C468D18A54212 +:1025800000D138BD14F8011BFFF7E4FFF7E70000A6 +:1025900042684AB1136843604389818901339BB221 +:1025A0009942438138BF83811046704770B588B027 +:1025B000202204460D4668460021FEF721FD2046F4 +:1025C0000495FFF7E5FF024658B16B46054608AE95 +:1025D0001C4603CCB44228606960234605F1080517 +:1025E000F6D1104608B070BD082817D909280CD0BC +:1025F0000A280CD00B280CD00C280CD00D280CD09D +:102600000E2814BF4020302070470C207047102047 +:102610007047142070471820704720207047000032 +:10262000082817D90C280CD910280CD914280CD933 +:1026300018280CD920280CD930288CBF0F200E2048 +:102640007047092070470A2070470B2070470C2004 +:1026500070470D20704700002DE9F843078C072FC5 +:1026600004461ED9D0E9029800254FF6FF73C5F144 +:102670002006A5F1200029FA05F108FA06F628FA45 +:1026800000F031430143C9B21846FFF763FF083534 +:10269000402D0346EBD1E1693A46BDE8F843FFF728 +:1026A0006BBF4FF6FF70BDE8F883000010B54B68B4 +:1026B00023B9CA8A63F30902CA8210BD04691A6881 +:1026C0001C600361C38A013BC3824A60EFE70000DC +:1026D0002DE9F84F1D46CB8A0F46C3F309010529A2 +:1026E000814692460B4630D00020AAB207F11A0468 +:1026F0009EB2042E1FFA80F80FD8424503F1010361 +:1027000006D8FB8A0A4462F30903FB8201201AE01F +:102710001AF80060E6540130EAE74245F1D9A1F128 +:10272000050B1C237C68BBFBF3F203FB12BB1FFAF7 +:102730008BF6002C45D14846FFF72AFF044638B9EE +:1027400078606FF00200BDE8F88F4FF00008E6E710 +:10275000002606607860ADB24FF0000B454510D9F9 +:102760000AEB0803221D13F8011B9155B1B208F1C1 +:1027700001081B291FFA88F82BD0454506F10106F0 +:10278000F1D8FB8AC3F30902154465F30903BCE7DA +:10279000013292B21C462368002BF9D16B1F0B4407 +:1027A0001C21B3FBF1F301339BB29A42D3D2BBF1AC +:1027B000000FD0D14846FFF7EBFE20B9C4F800B0B7 +:1027C000BFE70122E7E7C0F800B05E46206004469C +:1027D000C1E74545D5D94846FFF7DAFE08B920607C +:1027E000AFE7C0F800B0002620600446B6E700005E +:1027F0002DE9F04F2DED028B1C4683B05B690192F1 +:1028000007468846002B00F0A780238C2BB1E26995 +:10281000002A00F0A180072B35D807F10C00FFF744 +:10282000B7FE054638B96FF00205284603B0BDEC87 +:10283000028BBDE8F08F14220021FEF7E1FB228C11 +:10284000E16905F10800FEF7C9FB208C013080B278 +:10285000FFF7E6FEFFF7C8FE013880B220840130A2 +:1028600028746369228C1B782A4403F01F0363F0E9 +:102870003F0348F000411372384669602946FFF76C +:10288000EFFD0125D1E702339BB20722C18A06334F +:10289000B3FBF2F3828A521A9BB292B29342C2D82D +:1028A00000F10C034FF0000908EE103A4FF0800AD7 +:1028B0004E464D4618EE100AFFF76AFE8346002882 +:1028C000B1D014220021FEF79BFB002E3AD1019BD0 +:1028D000ABF8083002220BF1080E1FFA82FC0CF153 +:1028E0000100BCF1060F218C80B201D88E422BD39F +:1028F000FFF796FEFFF778FE62691278013802F062 +:102900001F028E4208BF4FF0400A42EA49121BFAEA +:1029100080F14AEA020A013048F0004281F808A03A +:102920008BF81000CBF8042059463846FFF798FD85 +:10293000238C0135B3422DB289F001094FF0000A12 +:10294000B8D172E70022C6E7E169895D0EF802108E +:102950000136B6B20132C0E76FF0010565E700004D +:10296000F8B515460E463022002104461F46FEF7F4 +:1029700047FB069B6360B5F5001F079BA76034BF4C +:102980006A094FF6FF72A36297B2E66104F1100084 +:1029900000239A4206D800230360A782E3822383A0 +:1029A000E360F8BD0660013330462036F1E70000F1 +:1029B00003781BB94BB2002BC8BF017070470000F1 +:1029C00000787047F8B50C46C969074611B9238CE1 +:1029D000002B37D1257E1F2D34D8387828BB228C88 +:1029E000072A2CD8268A36F003032BD14FF6FF7026 +:1029F000FFF7C2FD20F001003102400441EA056109 +:102A0000400C41EA40254FF6FF72234629463846DE +:102A1000FFF7EEFE002807DD626913780133DBB2B1 +:102A20001F2B88BF00231370F8BD218A2D0645EAAD +:102A3000012505432046FFF70FFE0246E5E76FF04C +:102A40000300F1E76FF00100EEE7000070B58AB017 +:102A5000044616460021282268461D46FEF7D0FA95 +:102A6000BDF83830ADF810300F9B05939DF840301D +:102A70008DF81830119B07936946BDF84830ADF8C2 +:102A800020302046CDE90265FFF79CFF0AB070BDFB +:102A90002DE9F041D36905460C4616460BB9138C57 +:102AA0005BBB377E1F2F28D895F80080B8F1000F48 +:102AB00026D03046FFF7D0FD3378210241EAC331FA +:102AC00041EA0801338A41EA076141EA03410246CB +:102AD000334641F080012846FFF78AFE00280ADDD0 +:102AE0003378012B07D1726913780133DBB21F2BC6 +:102AF00088BF00231370BDE8F0816FF00100FAE792 +:102B00006FF00300F7E70000F0B58BB004460D4608 +:102B100017460021282268461E46FEF771FA9DF8E6 +:102B20004C305A1E534253418DF800309DF84030CE +:102B3000ADF81030119B05939DF848308DF8183092 +:102B4000149B07936A46BDF85430ADF820302946EF +:102B50002046CDE90276FFF79BFF0BB0F0BD0000E9 +:102B6000406A00B104307047436A1A6842620269E1 +:102B70001A600361C38A013BC38270472DE9F041AB +:102B8000D0F82080194E14461D464146002709B949 +:102B9000BDE8F081D1E90223A21A65EB0303964256 +:102BA00077EB03031ED2036A8B420DD1FFF77EFD44 +:102BB000036A1B68036203690B60C38A0161016ACF +:102BC000013BC3828846E2E7FFF770FD0B68C8F857 +:102BD000003003690B60C38A0161013BC382D8F8EE +:102BE0000010D4E788460968D1E700BF80841E0042 +:102BF0002DE9F04F8BB00D46DDF8509014469B4602 +:102C00008046002800F01981B9F1000F00F015810D +:102C1000531E3F2B00F21181012A03D1BBF1000F9B +:102C200040F00B810023CDE90833B8F81430B5EB40 +:102C3000C30F4FEAC30703D300200BB0BDE8F08FEA +:102C40002B199F42D8F80C303ABF7F1BFFB22746A2 +:102C50001BB9D8F81030002B7AD0272D4ED8C5F1EB +:102C60002806B7424FF000032CBFF6B23E46009351 +:102C70002946D8F8080008AB3246FFF733FCA7EB2B +:102C8000060A35445FFA8AFAB8F8143003F10053A3 +:102C9000053BDB000493D8F80C3003932821039BF9 +:102CA00013B1BAF1000F2CD1D8F8100040B1BAF12D +:102CB000000F05D0009608AB5246691AFFF712FCC8 +:102CC00038B2002FB8D066070AD00AAB03EBD401A4 +:102CD000624211F8083C02F00702134101F8083C77 +:102CE000082C3CD9102C40F2B580202C40F2B78043 +:102CF000BBF1000F00F09C80082334E0BA460026A8 +:102D0000C2E7049BE02B28BFE02306930B44AB42B1 +:102D1000059314D95A1B03980096924534BF524626 +:102D2000D2B2691A08AB04300792FFF7DBFB079AAF +:102D30001644AAEB020A1544F6B25FFA8AFA049B1B +:102D4000069A05999B1A0493039B1B680393A6E7B5 +:102D50000093D8F8080008AB3A462946AEE7BBF125 +:102D6000000F13D00123B4EBC30F6CD0082C12D882 +:102D70009DF82030621E23FA02F2D50706D54FF0E7 +:102D8000FF3202FA04F423438DF820309DF82030FE +:102D900089F8003051E7102C12D8BDF82030621E9F +:102DA00023FA02F2D10706D54FF0FF3202FA04F4FB +:102DB0002343ADF82030BDF82030A9F800303CE7BF +:102DC000202C0FD80899631E21FA03F3DA0705D5E2 +:102DD0004FF0FF3202FA04F40C430894089BC9F840 +:102DE00000302AE7402C2BD0DDE90865611EC4F1D4 +:102DF0002102A4F1210326FA01F105FA02F225FAD3 +:102E000003F311431943CB0712D50122A4F1200388 +:102E1000C4F1200102FA03F322FA01F1A240524266 +:102E200043EA010363EB430332432B43CDE9082319 +:102E3000DDE90823C9E90023FFE66FF00100FCE6A5 +:102E40006FF00800F9E6082CA0D9102CB3D9202C7B +:102E5000EED8C3E7BBF1000FADD0022383E7BBF18F +:102E6000000FBBD004237EE730B5012A144638BFDB +:102E70000124402C85B028BF40240025012ACDE93B +:102E8000025518D81B788DF8083063070AD004ABB8 +:102E900003EBD405624215F8083C02F007029340A8 +:102EA00005F8083C009103462246002102A8FFF7DE +:102EB00019FB05B030BD082AE4D9102A03D81B88B5 +:102EC000ADF80830E1E7202A8DBFD3E900231B6865 +:102ED0000293CDE90223D8E710B5CB681BB98B600C +:102EE0000B618B8210BD04691A681C600361C38A80 +:102EF000013BC382CA60F0E703064CBFC0F3C03099 +:102F00000220704708B50246FFF7F6FF022806D1F7 +:102F10005306C2F30F2001D100F0030008BDC2F335 +:102F20000740FBE72DE9F04F93B0CDE904230A6891 +:102F300004461046FFF7E0FF022814BFC2F306263E +:102F40000026002A0D46824680F2028212F0C04915 +:102F500040F0FE81097B002900F0FA81022803D0AD +:102F60002378B34240F0F781C2F30463069310461E +:102F700002F07F030393FFF7C5FF039B29444FEA49 +:102F8000834848EA0A4848EA4668CE780023002287 +:102F9000CDE90823F309834648EA0008029367D085 +:102FA000039B009302466768534608A92046B8472A +:102FB000002868D0276A4FB9414604F10C00FFF79A +:102FC000F5FA074690B96FF002006AE03B69984550 +:102FD0000DD03F68002FF9D1414604F10C00FFF7F6 +:102FE000E5FA07460028EED0236A3B60276297F88F +:102FF00017C006F01F08CCF3840CACEB08001FFAD6 +:1030000080FE0028B8BF0EF12000A8EB0C031FFAC9 +:1030100083FED7E90221B8BF00B2002B0793BEBFE1 +:103020000EF120031BB2079352EA010342D0049B26 +:10303000DFF834E39A1A059B4FF0000C63EB0101B3 +:1030400096457CEB010335D36B7B97F81AE073450B +:1030500021D1029B002B00F0848001282ADC7868B3 +:1030600040BBDFF800C3944570EB010343D21EE080 +:10307000276A5FB9039B0093656853465A4608A9BF +:103080002046A84768BB6FF00B000AE03B699845F3 +:10309000ADD03F68EDE7B34890427CEB010303D32A +:1030A000002013B0BDE8F08F029B002BF8D0079BE7 +:1030B0000F2B19DCFA7DB30002F0030203F07C034E +:1030C0001343FB7539462046FFF7F0FA6B7BBB765E +:1030D000029B4BB9FB7DC3F38402013262F386038A +:1030E000FB756FF00C00DCE76A7BBB7E9A42D7D1A0 +:1030F000029B002B35D0B309022B32D0049BBB605E +:10310000059BFB60142200210DA8FDF779FF049BAD +:103110000A93059B0B932B1D0C932B7BADF83EB0B4 +:10312000013BDBB2ADF83C30069B8DF84230039B8F +:103130008DF8433094F82C308DF840A083F00103D3 +:103140008DF844308DF84180A3680AA9204698473D +:10315000FB7DC3F38403013303F01F039B02FB8257 +:103160009EE7FB7DC6F34012B2EBD31F40F0F68022 +:10317000C3F38403434540F0F980029A2B7BB609E0 +:10318000002A52D016F0010661D1032B40F2F180E3 +:10319000049BBB60059BFB60FB8A66F30903FB8213 +:1031A0002B7BAE1D033BDBB23246394604F10C00EB +:1031B000FFF78EFA00280CDA39462046FFF776FA38 +:1031C000FB7DC3F38403013303F01F039B02FB82E7 +:1031D000F9E6DDE90884AB883B834FF6FF73C9F15C +:1031E0002000A9F1200228FA09F104FA00F00143B5 +:1031F00024FA02F211431846C9B2FFF7ABF909F1FC +:103200000809B9F1400F0346E9D1B8822A7B033A95 +:10321000D2B23146FFF7B0F9FB7DB882DA43C2F390 +:10322000C01262F3C713FB753AE786B92E1D013B46 +:10323000DBB23246394604F10C00FFF749FA0028A8 +:10324000BADB2A7BB88A013AD2B23146E2E7F98A80 +:10325000C1F30901013B0429DAB25BD8281D002320 +:1032600007F11B069A4208D910F801CB06F801C0F5 +:10327000013101330529DBB2F4D104990A91059992 +:103280000B91934207F11B010C9138BF043379680D +:103290000D9134BF55FA83F300230E93FB8AADF8EA +:1032A0003EB0C3F309031A44069B8DF84230039BDA +:1032B0008DF8433094F82C30ADF83C2083F00103B6 +:1032C0008DF8443000238DF840A08DF841807B605C +:1032D0002A7BB88A013A291DFFF74EF93B8BB88249 +:1032E000834203D1A3680AA92046984720460AA929 +:1032F000FFF7F2FDFB7DBA8AC3F38403013303F0C9 +:103300001F039B02FB823B8B9A420CBF00206FF095 +:103310001000C6E67B68002BAFD0052001E01C3012 +:1033200033461E68002EFAD1091A081D2E1D1844B6 +:1033300001EB090CBCF11B0F5FFA89F39DD89A428F +:103340009BD916F8013B00F8013B09F10109EFE7B1 +:103350006FF00900A5E66FF00A00A2E66FF00D001D +:103360009FE600BF40420F0080841E006FF00E00F9 +:1033700097E66FF00F0094E6EFF3098305494A6B77 +:1033800022F001024A63683383F30988002383F340 +:103390001188704700EF00E0302080F3118862B69A +:1033A0000C4B0D4AD96821F4E0610904090C0A4369 +:1033B000DA60D3F8FC20094942F08072C3F8FC209F +:1033C0000A6842F001020A602022DA7783F82200BC +:1033D000704700BF00ED00E00003FA05001000E0B8 +:1033E00010B5302383F311880E4B5B6813F4006330 +:1033F00014D0F1EE103AEFF30984683C4FF080737B +:10340000E361094BDB6B236684F3098800F0AEF8B7 +:1034100010B1064BA36110BD054BFBE783F3118888 +:10342000F9E700BF00ED00E000EF00E0FF02000858 +:10343000020300084FF0E023002258684FF0FF31EC +:10344000930003F1604303F5614301329042C3F8F6 +:103450008010C3F88011F3D27047000000F1604380 +:1034600003F561430901C9B283F80013012200F09A +:103470001F039A4043099B0003F1604303F5614336 +:10348000C3F880211A6070470023037582680369BE +:103490001B6899689142FBD25A68036042601060D1 +:1034A0005860704700230375826803691B68996838 +:1034B0009142FBD85A6803604260106058607047C0 +:1034C00008B50846302383F311880B7D032B05D004 +:1034D000042B0DD02BB983F3118808BD8B69002212 +:1034E0001A604FF0FF338361FFF7CEFF0023F2E74E +:1034F000D1E9003213605A60F3E70000FFF7C4BF60 +:1035000038B50A4BDD681C68287522681A6053605C +:10351000DC60A36801229342227501D100F004FC13 +:1035200029462046BDE83840FCF7D4BE3838002094 +:1035300030B50C4BDD684B1C87B004460FD02B46D2 +:10354000094A684600F030F92046FFF7D9FF009B92 +:1035500013B1684600F032F9A86907B030BDFFF733 +:10356000CFFFF9E738380020C1340008044B1A684F +:10357000DB6890689B68984294BF002001207047E8 +:103580003838002038B50B4B1C68DD6822681A609B +:10359000536001222275DC60AB68934201D100F0D8 +:1035A000C5FB2846FFF77EFF01462046BDE83840B0 +:1035B000FCF790BE3838002038B5074C074908485A +:1035C000012300252370656000F0EEFB02232370C9 +:1035D00085F3118838BD00BFA03A00207C42000866 +:1035E0003838002008B572B6044B186500F0ACFA04 +:1035F00000F058FB024B03221A70FEE73838002017 +:10360000A03A002000F010B98B60022308618B8281 +:10361000084670478368A3F1840243F8142C0269BA +:1036200043F8442C426943F8402C094A43F8242CBF +:10363000C26843F8182C022203F80C2C002203F86D +:103640000B2C044A43F8102CA3F12000704700BF54 +:10365000ED0200083838002008B5FFF7DBFFBDE8B1 +:103660000840FFF74BBF0000024BDB6898610F205A +:10367000FFF746BF38380020302383F31188FFF767 +:10368000F3BF000008B50146302383F311880820FA +:10369000FFF74EFF002383F3118808BD10B50368C0 +:1036A0009C68A2420CD85C688A600B604C60216008 +:1036B000596099688A1A9A604FF0FF33836010BD91 +:1036C0001B68121BECE700000A2938BF0A2170B5FD +:1036D00004460D460A26601900F060FB00F04CFB22 +:1036E000041BA54203D8751C2E460446F3E70A2E98 +:1036F00004D9BDE87040012000F096BB70BD000009 +:10370000F8B5144B0D46D96103F1100141600A2A46 +:103710001969826038BF0A22016048601861A818E0 +:10372000144600F02DFB0A2700F026FB431BA342A2 +:10373000064606D37C1C281900F030FB2746354688 +:10374000F2E70A2F04D9BDE8F840012000F06CBB75 +:10375000F8BD00BF38380020F8B506460D4600F029 +:103760000BFB0F4A134653F8107F9F4206D12A469F +:1037700001463046BDE8F840FFF7C2BFD169BB68DB +:10378000441A2C1928BF2C46A34202D92946FFF718 +:103790009BFF224631460348BDE8F840FFF77EBF55 +:1037A000383800204838002010B4C0E90323002333 +:1037B0005DF8044B4361FFF7CFBF000010B5194C13 +:1037C000236998420DD0D0E90032816813605A60B5 +:1037D0009A680A449A60002303604FF0FF33A361A4 +:1037E00010BD2346026843F8102F53600022026088 +:1037F00022699A4203D1BDE8104000F0C9BA93682B +:1038000081680B44936000F0B7FA2269E16992681D +:10381000441AA242E4D91144BDE81040091AFFF746 +:1038200053BF00BF383800202DE9F047DFF8BC80D7 +:1038300008F110072C4ED8F8105000F09DFAD8F877 +:103840001C40AA68031B9A423ED81444D5E90032B2 +:103850004FF00009C8F81C4013605A60C5F800908A +:10386000D8F81030B34201D100F092FA89F31188F0 +:10387000D5E9033128469847302383F311886B69D3 +:10388000002BD8D000F078FA6A69A0EB04094A4509 +:1038900082460DD2022000F0C7FA0022D8F810307C +:1038A000B34208D151462846BDE8F047FFF728BF8C +:1038B000121A2244F2E712EB090938BF4A46294698 +:1038C0003846FFF7EBFEB5E7D8F81030B34208D022 +:1038D0001444211AC8F81C00A960BDE8F047FFF79E +:1038E000F3BEBDE8F08700BF48380020383800201C +:1038F00038B500F041FA054AD2E90845031B18190A +:1039000045F10001C2E9080138BD00BF3838002088 +:1039100000207047FEE70000704700004FF0FF30C6 +:1039200070470000BFF34F8F024A1369DB03FCD4DA +:10393000704700BF0020024008B5094B1B7873B9DF +:10394000FFF7F0FF074B5A69002ABFBF064A9A608B +:1039500002F188329A601A6822F480621A6008BD07 +:10396000B83A0020002002402301674508B50B4B00 +:103970001B7893B9FFF7D6FF094B5A6942F0004212 +:103980005A611A6842F480521A601A6822F480520E +:103990001A601A6842F480621A6008BDB83A0020C2 +:1039A000002002407F289ABF00F58030C00200202E +:1039B000704700004FF4006070470000802070479F +:1039C0007F2808B50BD8FFF7EDFF00F5006302680C +:1039D000013204D104308342F9D1012008BD002016 +:1039E000FCE700007F2810B504461FD8FFF79AFFB8 +:1039F000FFF7A2FF0E4BF3221A6102225A615A69A5 +:103A000042EAC0025A615A6942F480325A61FFF7B1 +:103A100089FF4FF40061FFF7C5FF00F03FF9FFF7A2 +:103A2000A5FF2046BDE81040FFF7CABF002010BD2B +:103A3000002002402DE9F84340EA020313F0070397 +:103A4000144606D0304B4FF461721A600020BDE876 +:103A5000F88385182D4A95420CD92B4A40F28931BA +:103A60001160F3E7031D1B684A68934208D1083CC4 +:103A700008300831072C14D902680B689A42F1D03B +:103A8000FFF75AFFFFF74EFF214E08314FF00108B4 +:103A90004FF00009012CA1F1080706D8FFF766FFD7 +:103AA00001E0002CECD10120D1E7C6F814800546D6 +:103AB00051F8083C45F8043B51F8043C4360FFF7DB +:103AC00031FF336943F001033361C6F81490026893 +:103AD00051F8083C9A420CD00B4B40F2B1321A60BC +:103AE0000C4B18600C4B1C600C4B1F60FFF73EFF2B +:103AF000ACE72D6851F8043C9D4201F10801EBD17F +:103B0000083C0830C6E700BFB43A002000000408B3 +:103B100000200240A83A0020B03A0020AC3A002031 +:103B2000084908B50B7828B11BB9FFF705FF012339 +:103B30000B7008BD002BFCD0BDE808400870FFF7F3 +:103B400015BF00BFB83A002002484FF47F4100F093 +:103B5000A7B800BF000100200846114600F0ECBAEB +:103B6000084600F0FFBA000038B5EFF311859DB9A3 +:103B7000EFF30584C4F30804302334B183F31188D0 +:103B8000FFF7B6FE85F3118838BD83F31188FFF780 +:103B9000AFFE84F3118838BDBDE83840FFF7A8BEFA +:103BA00038B5FFF7E1FF114C114AC00840EA4170F7 +:103BB000A0FB025EC908A0FB040C1CEB050CA1FBDA +:103BC00004404FF000035B41A1FB02121CEB040C0C +:103BD00043EB000011EB0E0142F10002411842F1EB +:103BE0000000090941EA007038BD00BFCFF753E378 +:103BF000A59BC42010B50244064BD2B2904200D11E +:103C000010BD441C00B253F8200041F8040BE0B290 +:103C1000F4E700BF50280040114B30B5D3F8904076 +:103C2000240409D4D3F89040C3F89040D3F89040CE +:103C300044F40044C3F890400A4C236843F4807372 +:103C400023600244084BD2B2904200D130BD441CE4 +:103C500000B251F8045B43F82050E0B2F4E700BF33 +:103C600000100240007000405028004007B50122BB +:103C700001A90020FFF7BEFF019803B05DF804FB27 +:103C800013B50446FFF7F2FFA04205D0012201A9B7 +:103C900000200194FFF7C0FF02B010BD7047000084 +:103CA0007047000070470000074B45F255521A60FC +:103CB00003225A6040F2FF729A604CF6CC421A60BE +:103CC000024B01221A70704700300040C03A0020B9 +:103CD000034B1B781BB1034B4AF6AA221A607047AC +:103CE000C03A002000300040054B1A6832B902F19A +:103CF000804202F50432D2F894201A60704700BF67 +:103D0000BC3A0020024B4FF40002C3F894207047E5 +:103D10000010024008B5FFF7E7FF024B1868C0F338 +:103D2000407008BDBC3A002070470000704700009A +:103D300070470000FEE700000A4B0B480B4A904218 +:103D40000BD30B4BDA1C121AC11E22F003028B425A +:103D500038BF00220021FDF753B953F8041B40F887 +:103D6000041BECE714430008C43A0020C43A0020C6 +:103D7000C43A002000F0C0B84FF08043586A704742 +:103D80004FF08043002258631A610222DA607047C4 +:103D90004FF080430022DA60704700004FF080430C +:103DA00058637047FEE7000070B51B4B01630025A8 +:103DB000044686B0586085620E46FFF7EDFA04F1BE +:103DC0001003C4E904334FF0FF33C4E90635C4E9F6 +:103DD0000044A560E562FFF7CFFF2B460246C4E929 +:103DE000082304F134010D4A256580232046FFF79E +:103DF0000BFC0123E0600A4A03750092726801928D +:103E0000B268CDE90223074B6846CDE90435FFF7D8 +:103E100023FC06B070BD00BFA03A00208842000815 +:103E20008D420008A53D0008024AD36A1843D062BB +:103E3000704700BF38380020284BDA6A42F087020A +:103E400010B4DA62DA6A22F08702DA62DA6ADA6CCD +:103E500042F08702DA64DA6E42F08702DA664FF0E7 +:103E60009042DB6E4FF0AA3000234FF010515360A8 +:103E70004FF419249060D1604FF6FF7151611362C5 +:103E800054624FF02A541460C2F80434C2F8080493 +:103E9000C2F80C34C2F81414C2F82034C2F8243426 +:103EA000C2F80034C2F80438C2F80808C2F80C3866 +:103EB000C2F81418C2F82038C2F82438C2F8003802 +:103EC00002F5E052536093605DF8044BD360536198 +:103ED00013625362136000F04FB800BF001002403D +:103EE00008B500F015F9FFF767FBBDE80840FFF7DC +:103EF000FBBE0000704700000F4B9A6D42F00102BC +:103F00009A659A6F42F001029A670C4A9B6F936818 +:103F100043F0010393604FF080434F229A624FF0C9 +:103F2000FF32DA6200229A615A63DA605A60012233 +:103F30005A611A60704700BF00100240002004E080 +:103F40004FF0804208B51169D3680B40D9B2C9431C +:103F50009B07116107D5302383F31188FFF752FBCC +:103F6000002383F3118808BD08B5FFF763FABDE8A5 +:103F7000084000F0C9B80000594B4FF0FF319A6A71 +:103F800099629A6A00229A62986AD86A60F08700F9 +:103F9000D862D86A00F08700D862D86A186B1963B3 +:103FA000186B1A63186B986B9963986B9A63986B8C +:103FB000D86BD963D86BDA63D86B186C1964196C39 +:103FC0001A641A6C474A4FF4E06111601A6E464950 +:103FD00042F001021A66D3F8802022F00102C3F8F1 +:103FE0008020D3F880209A6D42F080529A659A6FB3 +:103FF00022F080529A679A6F4FF440720A604A69C1 +:1040000012F48062FBD14A601A6822F0F00242F09A +:1040100060021A601A6842F001021A601A68920778 +:10402000FCD500229A609A6812F00C02FBD1D3F8FA +:10403000901011F4407F1EBF4FF48031C3F89010F0 +:10404000C3F8902061221A601A689007FCD50022FC +:104050009A609A6812F00C0FFBD169221A60D3F8AB +:10406000942022F4706242F4C062C3F894201A686B +:1040700042F4A0221A60D3F8902022F0007222F4B9 +:104080004072C3F89020194ADA601A6842F08072D0 +:104090001A601A689101FCD5154A1A611A6842F033 +:1040A00080621A601A681201FCD500229A600D49DC +:1040B000104AC3F888200A6822F0070242F004027E +:1040C0000A600A6802F00702042AFAD19A6842F0EC +:1040D00003029A609A6802F00C020C2AFAD1704727 +:1040E0000010024000200240007000402314000134 +:1040F000200C10005555013408B5FFF721FFBDE82D +:104100000840FFF76DB9000007211C20FFF7A6B992 +:1041100008B5FFF729FF00F007F8FFF7EBFEBDE851 +:104120000840FFF727BE0000704700000B4601461D +:10413000184600F009B80000024B0A46014618680C +:10414000FFF70ABD1811002010B5054C13462CB11D +:104150000A4601460220AFF3008010BD2046FCE76E +:1041600000000000024B01461868FFF7F9BC00BFD1 +:104170001811002010B501390244904201D10020ED +:1041800005E0037811F8014FA34201D0181B10BDC0 +:104190000130F2E72DE9F041A3B1C91A17780144C3 +:1041A000044603F1FF3C8C42204601D9002009E07F +:1041B0000578BD4204F10104F5D10CEB0405D618D5 +:1041C000A54201D1BDE8F08115F8018D16F801ED89 +:1041D000F045F5D0E7E70000034611F8012B03F89E +:1041E000012B002AF9D17047636F6D2E76696D64DB +:1041F000726F6E65732E7065726970685F626C00B5 +:1042000040A2E4F1646891060041A3E5F265699279 +:10421000070000004261642043414E4966616365C6 +:1042200020696E6465782E00800000000080000028 +:10423000000080000000000000000000811800085D +:1042400061200008BD1F0008B1180008BD18000853 +:10425000C91A000889180008911800088D1800086C +:10426000E5190008951800087D230008212300089F +:10427000A5180008B919000863300000784200084A +:1042800090380020A03A00206D61696E0069646C6E +:104290006500FFFFFFFFFFFF7F050000000000003B +:1042A0000060030000000000FE2A0100D2040000AC +:1042B0001C110020000000000000000000000000B1 +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:0443100000000000A9 +:00000001FF diff --git a/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/README.md b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/README.md new file mode 100644 index 0000000000..bbadb00809 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/README.md @@ -0,0 +1,14 @@ +# VM-L431-Periph-Pico + +Vimdrones AP_Periph Pico board to convert serial(GPS) and I2C(COMPASS/Air Speed) device in to Dronecan device. + +## Hardware Features + +- STM32L431 microcontroller +- CAN bus interface +- 1 Telem with I2C +- 1 Telem with Flow Control + +## Wiring Diagram + +![Vimdrones AP_Periph Pico Wiring Diagram](vimdrones_ap_periph_pico_wiring.png) diff --git a/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef-bl.dat new file mode 100644 index 0000000000..24b9a0aca7 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef-bl.dat @@ -0,0 +1 @@ +include ../VM-L431/hwdef-bl.inc diff --git a/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat new file mode 100644 index 0000000000..d089fd0be9 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat @@ -0,0 +1,31 @@ +include ../VM-L431/hwdef.inc + +define CAN_APP_NODE_NAME "com.vimdrones.periph_pico" +SERIAL_ORDER EMPTY USART1 USART2 +PB6 USART1_TX USART1 +PB7 USART1_RX USART1 +PB4 USART1_CTS USART1 +PB3 USART1_RTS USART1 + +PA2 USART2_TX USART2 +PA3 USART2_RX USART2 + +# one I2C bus +#I2C_ORDER I2C1 +#PA9 I2C1_SCL I2C1 +#PA10 I2C1_SDA I2C1 + +# Output +PA9 SS_OUT OUTPUT GPIO(1) LOW +define HAL_GPIO_SUNK_SENSOR_OUTPUT 1 + +# Input +PA10 SS_IN INPUT PULLUP GPIO(2) +define HAL_GPIO_SUNK_SENSOR_INPUT 2 + +define HAL_USE_ADC FALSE + +define AP_PERIPH_SUNK_SENSOR_ENABLED 1 + +# bootloader embedding / bootloader flashing not available +define AP_BOOTLOADER_FLASHING_ENABLED 0 From fbb6bade775a856e83b9c733ad8572dbc96e0147 Mon Sep 17 00:00:00 2001 From: juppy10 Date: Tue, 7 Jul 2026 13:15:24 +0800 Subject: [PATCH 2/3] working proto --- Tools/AP_Periph/sunk_sensor.cpp | 12 +++++++++--- .../dsdl/sunfish/indication/20069.SunkState.uavcan | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 libraries/AP_DroneCAN/dsdl/sunfish/indication/20069.SunkState.uavcan diff --git a/Tools/AP_Periph/sunk_sensor.cpp b/Tools/AP_Periph/sunk_sensor.cpp index 589b4fcfdf..301e8169d0 100644 --- a/Tools/AP_Periph/sunk_sensor.cpp +++ b/Tools/AP_Periph/sunk_sensor.cpp @@ -16,7 +16,7 @@ void SunkSensor::init(void){ hal.gpio->write(HAL_GPIO_SUNK_SENSOR_OUTPUT, 0); hal.gpio->write(HAL_GPIO_SUNK_SENSOR_INPUT, 1); //enable with pullup -} +} void SunkSensor::update(void) { @@ -28,10 +28,16 @@ void SunkSensor::update(void) } if(sunk){ - can_printf("sunk_sensor_update"); buffer[0] = SUNFISH_INDICATION_SUNKSTATE_STATUS_SUNK; periph.canard_broadcast(SUNFISH_INDICATION_SUNKSTATE_SIGNATURE, - 20069, + SUNFISH_INDICATION_SUNKSTATE_ID, + CANARD_TRANSFER_PRIORITY_LOW, + &buffer[0], + SUNFISH_INDICATION_SUNKSTATE_MAX_SIZE); + }else{ + buffer[0] = SUNFISH_INDICATION_SUNKSTATE_STATUS_NOT_SUNK; + periph.canard_broadcast(SUNFISH_INDICATION_SUNKSTATE_SIGNATURE, + SUNFISH_INDICATION_SUNKSTATE_ID, CANARD_TRANSFER_PRIORITY_LOW, &buffer[0], SUNFISH_INDICATION_SUNKSTATE_MAX_SIZE); diff --git a/libraries/AP_DroneCAN/dsdl/sunfish/indication/20069.SunkState.uavcan b/libraries/AP_DroneCAN/dsdl/sunfish/indication/20069.SunkState.uavcan new file mode 100644 index 0000000000..1e6bb9ab5c --- /dev/null +++ b/libraries/AP_DroneCAN/dsdl/sunfish/indication/20069.SunkState.uavcan @@ -0,0 +1,7 @@ +# +# Indicates whether the vehicle is sunk + +uint8 STATUS_NOT_SUNK = 0 +uint8 STATUS_SUNK = 255 + +uint8 status \ No newline at end of file From 1a494b1052122c7f42ee379b1989b17569d93d3b Mon Sep 17 00:00:00 2001 From: juppy10 Date: Thu, 9 Jul 2026 11:23:50 +0800 Subject: [PATCH 3/3] changed SS to 100ms poll & added pressure sensor 2CAN --- Tools/AP_Periph/AP_Periph.cpp | 20 +++++++++--- Tools/AP_Periph/sunk_sensor.cpp | 5 --- Tools/AP_Periph/sunk_sensor.h | 2 ++ .../hwdef/VM-L431-Periph-Pico-SB/hwdef.dat | 31 +++++++++++-------- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/Tools/AP_Periph/AP_Periph.cpp b/Tools/AP_Periph/AP_Periph.cpp index 55c6950b0b..3ebc7a8256 100644 --- a/Tools/AP_Periph/AP_Periph.cpp +++ b/Tools/AP_Periph/AP_Periph.cpp @@ -173,6 +173,11 @@ void AP_Periph_FW::init() #if AP_PERIPH_BARO_ENABLED baro.init(); + // let sensor settle before reading (copied from ardusub) + for (uint8_t i = 0; i < 10; i++) { + baro.update(); + hal.scheduler->delay(100); + } #endif #if AP_PERIPH_IMU_ENABLED @@ -323,6 +328,10 @@ void AP_Periph_FW::init() actuator_telem.init(); #endif +#if AP_PERIPH_SUNK_SENSOR_ENABLED + sunk_sensor.init(); +#endif + start_ms = AP_HAL::millis(); } @@ -472,10 +481,6 @@ void AP_Periph_FW::update() dac.update(); #endif -#if AP_PERIPH_SUNK_SENSOR_ENABLED - sunk_sensor.update(); -#endif - GCS_SEND_MESSAGE(MSG_HEARTBEAT); GCS_SEND_MESSAGE(MSG_SYS_STATUS); } @@ -513,6 +518,13 @@ void AP_Periph_FW::update() } #endif +#if AP_PERIPH_SUNK_SENSOR_ENABLED + if (now - sunk_sensor.last_update_ms >= 100) { + sunk_sensor.last_update_ms = now; + sunk_sensor.update(); + } +#endif + #if AP_PERIPH_RCIN_ENABLED rcin_update(); #endif diff --git a/Tools/AP_Periph/sunk_sensor.cpp b/Tools/AP_Periph/sunk_sensor.cpp index 301e8169d0..59c9065d9e 100644 --- a/Tools/AP_Periph/sunk_sensor.cpp +++ b/Tools/AP_Periph/sunk_sensor.cpp @@ -9,19 +9,14 @@ extern const AP_HAL::HAL &hal; uint8_t buffer[1]; void SunkSensor::init(void){ - //keep empty for now - hal.gpio->pinMode(HAL_GPIO_SUNK_SENSOR_OUTPUT, HAL_GPIO_OUTPUT); hal.gpio->pinMode(HAL_GPIO_SUNK_SENSOR_INPUT, HAL_GPIO_INPUT); - hal.gpio->write(HAL_GPIO_SUNK_SENSOR_OUTPUT, 0); hal.gpio->write(HAL_GPIO_SUNK_SENSOR_INPUT, 1); //enable with pullup } void SunkSensor::update(void) { - hal.gpio->toggle(HAL_GPIO_SUNK_SENSOR_OUTPUT); - bool sunk = false; if(hal.gpio->read(HAL_GPIO_SUNK_SENSOR_INPUT)){ sunk = true; diff --git a/Tools/AP_Periph/sunk_sensor.h b/Tools/AP_Periph/sunk_sensor.h index dd7a51638a..29cc6fecfa 100644 --- a/Tools/AP_Periph/sunk_sensor.h +++ b/Tools/AP_Periph/sunk_sensor.h @@ -6,6 +6,8 @@ class SunkSensor { public: void init(void); void update(void); + + uint32_t last_update_ms; }; #endif // AP_PERIPH_SUNK_SENSOR_ENABLED \ No newline at end of file diff --git a/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat index d089fd0be9..95e8c46382 100644 --- a/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat +++ b/libraries/AP_HAL_ChibiOS/hwdef/VM-L431-Periph-Pico-SB/hwdef.dat @@ -1,31 +1,36 @@ include ../VM-L431/hwdef.inc define CAN_APP_NODE_NAME "com.vimdrones.periph_pico" -SERIAL_ORDER EMPTY USART1 USART2 -PB6 USART1_TX USART1 -PB7 USART1_RX USART1 -PB4 USART1_CTS USART1 -PB3 USART1_RTS USART1 +SERIAL_ORDER USART2 EMPTY #USART1 +#PB6 USART1_TX USART1 +#PB7 USART1_RX USART1 +#PB4 USART1_CTS USART1 +#ZPB3 USART1_RTS USART1 PA2 USART2_TX USART2 PA3 USART2_RX USART2 # one I2C bus -#I2C_ORDER I2C1 -#PA9 I2C1_SCL I2C1 -#PA10 I2C1_SDA I2C1 - -# Output -PA9 SS_OUT OUTPUT GPIO(1) LOW -define HAL_GPIO_SUNK_SENSOR_OUTPUT 1 +I2C_ORDER I2C1 +PA9 I2C1_SCL I2C1 +PA10 I2C1_SDA I2C1 # Input -PA10 SS_IN INPUT PULLUP GPIO(2) +PB6 SS_IN INPUT PULLUP GPIO(2) define HAL_GPIO_SUNK_SENSOR_INPUT 2 define HAL_USE_ADC FALSE define AP_PERIPH_SUNK_SENSOR_ENABLED 1 +# BARO - MS5611 on I2C bus 0 +define AP_PERIPH_BARO_ENABLED 1 +define AP_BARO_BACKEND_DEFAULT_ENABLED 0 +define AP_BARO_MS5611_ENABLED 1 +define BARO_MAX_INSTANCES 1 +BARO MS5611 I2C:0:0x76 + +define AP_BARO_TEST_ENABLED 1 + # bootloader embedding / bootloader flashing not available define AP_BOOTLOADER_FLASHING_ENABLED 0