Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1085 → Rev 1086

/branches/salvo_gps/Basis_V0071h/trunk/Flight-Ctrl_MEGA644_V0_71h.hex
0,0 → 1,2840
:100000000C94EF020C940C030C940C030C940C0352
:100010000C940C030C940C030C940C030C940C0324
:100020000C940C030C9457110C940C030C94381181
:100030000C940D1E0C940C030C940C030C940C03E8
:100040000C940C030C940C030C94B40F0C940C0340
:100050000C94C20B0C940C030C943F060C940C03F0
:100060000C945D120C940C030C94421D0C940C0324
:100070005F1D661D7A1D871D941D8C1D941DA61D78
:10008000D01DB71DBB1DDB1DC51DD01DBE1DC21D56
:10009000DB1DC51DD01DD41DD81DDB1DDF1D0A0AAB
:1000A0000D004E65757472616C0048656164696E1F
:1000B00067486F6C64000A0D537465756572756EE0
:1000C000673A20004F4B0A0D000A0D4162676C65CC
:1000D000696368204C756674647275636B73656ED2
:1000E000736F722E2E000A0D42656E75747A65204C
:1000F000506172616D657465727361747A202564F4
:10010000000A0D414343206E696368742061626791
:1001100065676C696368656E21000A0D496E6974D4
:100120002E20454550524F4D3A2047656E6572610D
:1001300074696E672044656661756C742D506172D8
:10014000616D65746572207573696E67206F6C648C
:1001500020537469636B2053657474696E67730010
:100160000A0D496E69742E20454550524F4D3A2074
:1001700047656E65726174696E6720446566617576
:100180006C742D506172616D6574657220616E646E
:1001900020537469636B2D53657474696E67732E95
:1001A0002E2E000A0D3D3D3D3D3D3D3D3D3D3D3D3D
:1001B0003D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D6F
:1001C0003D3D3D000A0D466C69676874436F6E746F
:1001D000726F6C0A0D48617264776172653A2564CA
:1001E0002E25640A0D536F6674776172653A562541
:1001F000642E2564256320002E0048693A25346961
:10020000202043663A253469200047733A25346933
:10021000202047693A25346920004E693A2534691F
:100220002020526F3A253469200045787465726E3B
:10023000436F6E74726F6C20200052616E67653A76
:100240002533692D253369005374656C6C756E67B1
:100250003A2025336900536574706F696E742020ED
:1002600025336900536572766F202000506F7469E2
:10027000343A202025336900506F7469333A2020C6
:1002800025336900506F7469323A202025336900A4
:10029000506F7469313A20202533690053746172BC
:1002A000743A2020202020253569004D657373772E
:1002B0006572743A20202535690052696368747547
:1002C0006E673A2020253569004B6F6D706173733E
:1002D0002020202020202000456D70662E5065676C
:1002E000656C3A253569005370616E6E756E673ABC
:1002F000202025356900486F63682025346920284F
:100300002533692900526F6C6C202534692028251B
:10031000336929004E69636B202534692028253311
:10032000692900414343202D2053656E736F72008D
:1003300047696572202534692028253369292825D5
:1003400033692900526F6C6C2025346920282533CD
:1003500069292825336929004E69636B2025346992
:1003600020282533692928253369290047696572C2
:100370002025346920282533692900526F6C6C20B0
:10038000253469202825336929004E69636B2025AF
:10039000346920282533692900476965722025348E
:1003A0006920282533692900526F6C6C2025346937
:1003B000202825336929004E69636B202534692084
:1003C0002825336929004779726F202D2053656EE7
:1003D000736F720050333A253469202050343A2527
:1003E0003469200050313A253469202050323A25B2
:1003F0003469200047733A253469202047693A253B
:10040000346920004E693A2534692020526F3A251C
:10041000346920004B373A25346920204B383A257F
:10042000346920004B353A25346920204B363A2573
:10043000346920004B333A25346920204B343A2567
:10044000346920004B313A25346920204B323A255B
:10045000346920004B6F6D706173733A2020202542
:10046000356900526F6C6C3A202020202020253501
:1004700069004E69636B3A202020202020253569D1
:1004800000616B742E204C6167650048F668656EEC
:10049000726567656C756E67004B65696E652000F7
:1004A0004F66662020202020203A20253569004C08
:1004B000756674647275636B3A2025356900536FF5
:1004C0006C6C486F6568653A2025356900486F6532
:1004D00068653A20202020202535690028632920DE
:1004E000486F6C676572204275737300536574744E
:1004F000696E673A202564200048573A5625642ED5
:1005000025642053573A25642E25642563002B204B
:100510004D696B726F4B6F70746572202B005B2599
:10052000695D005B25695D00000011002300340057
:100530004600570069007A008B009C00AE00BF00A7
:10054000D000E100F200030114012401350146014D
:1005500056016601770187019701A701B601C6011F
:10056000D501E501F4010302120221022F023E022D
:100570004C025A0268027502830290029D02AA028E
:10058000B702C302CF02DB02E702F302FE02090355
:1005900014031F03290333033D0347035003590387
:1005A00062036B0373037B0383038A039203990340
:1005B0009F03A603AC03B203B703BC03C103C60386
:1005C000CA03CE03D203D603D903DC03DE03E1035F
:1005D000E303E403E603E703E703E803E803112486
:1005E0001FBECFEFD0E1DEBFCDBF13E0A0E0B1E092
:1005F000E6EAFEEA02C005900D92A83BB107D9F7E2
:1006000019E0A8EBB3E001C01D92A236B107E1F7F3
:100610000E94D4030C9451570C9400009C01F9994A
:10062000FECF32BD21BDF89A80B508959C01F9999D
:10063000FECF1FBA32BD21BD60BD0FB6F894FA9A45
:10064000F99A0FBE0895F999FECF22E030E032BD4D
:1006500021BDF89A90B5892F8150853068F0F999BD
:10066000FECF1FBA32BD21BD83E080BD0FB6F89426
:10067000FA9AF99A0FBE93E0892F0895282F8630B1
:1006800010F025E002C0882369F0F999FECF1FBA67
:1006900082E090E092BD81BD20BD0FB6F894FA9A39
:1006A000F99A0FBE08958091AE07A82FB0E0FD0122
:1006B000EE0FFF1FE258F84F808191818D5E9F4FB2
:1006C00014F010920201AA0FBB1FA258B84F8D91CF
:1006D0009C918A5B9F4FBCF480910201882399F41E
:1006E00081E08093020180917B068F5F80937B067F
:1006F000853038F088EE93E09093DA038093D90345
:1007000002C00E94C02880917B0680934807109207
:10071000490708951F93182F863010F015E002C086
:10072000882319F1812F90E00197242F30E0FC01FC
:10073000E29FC001E39F900DF29F900D112426E1EE
:1007400033E050E08C599F4F0E945454F999FECFEA
:100750001FBA82E090E092BD81BD10BD0FB6F89443
:10076000FA9AF99A0FBE0E94AB531F910895982FE1
:10077000FB018150853008F093E0892F90E00197CC
:10078000242F30E0829FB001839F700D929F700DE7
:1007900011246C597F4F2EE033E050E0CF010E94CE
:1007A00038540E94AB5308957F928F929F92AF92DC
:1007B000BF92CF92DF92EF92FF920F931F93CF934E
:1007C000DF9314B815B8189B08C0199B02C08DE0C0
:1007D00001C08BE08093000109C0199B02C084E135
:1007E000F9CF8AE0809300018DEC87B93E9A8FEFB4
:1007F00088B98BE184B981E085B98EE38AB9579ACB
:1008000087E78BB984B7877F84BF80916000886158
:10081000809360001092600080ED97E09093DA037F
:100820008093D9031092830410928204109283075C
:1008300010928207109281041092800410927F041B
:1008400010927E04809100018A3011F0843111F4FD
:10085000289801C0289A0E94CB100E9411070E947C
:10086000F81D0E9457120E94041D0E94C2507894E5
:100870002091000188E690E09F938F9387E490E0B9
:100880009F938F931F921F92822F6AE00E94AA5615
:10089000892F90E09F938F93822F0E94AA5690E019
:1008A0009F938F9384EC91E09F938F931F920E946C
:1008B000F90C83EA91E09F938F931F920E94F90CA9
:1008C0008DB79EB740960FB6F8949EBF0FBE8DBFF2
:1008D000809100018C3010F4299A01C0299849E0D8
:1008E0006EEA77E083E00E94B703F999FECFC1E09A
:1008F000D0E0D2BDC1BDF89A80B58F3FC1F0F99963
:10090000FECFD2BDC1BDF89A80B5893480F0809108
:10091000AE078A3060F48091AF078A3040F480914E
:10092000B0078A3020F48091B1078A3050F080E619
:1009300091E09F938F931F920E94F90C0E94E91EF1
:100940000FC0F999FECFD2BDC1BDF89A80B58934E8
:1009500051F08AE191E09F938F931F920E94F90CCE
:100960000F900F900F90F999FECFD2BDC1BDF89AAC
:1009700080B5893409F431C00E94124611E012306A
:1009800039F0133019F40E94CD4404C0143010F033
:100990000E946E4546E56EEA77E0812F0E948A0349
:1009A0001F5F163061F7F999FECF1FBA82E090E021
:1009B00092BD81BD83E080BD0FB6F894FA9AF99A92
:1009C0000FBEF999FECF1FBAD2BDC1BD89E480BD6B
:1009D0000FB6F894FA9AF99A0FBEF999FECF84E00F
:1009E00090E092BD81BDF89A80B5853050F081E0ED
:1009F00091E09F938F931F920E94F90C0F900F909C
:100A00000F900E94230346E56EEA77E00E94B70349
:100A10000E94230390E09F938F9386EE90E09F9334
:100A20008F931F920E94F90C8091B6070F900F9040
:100A30000F900F900F9080FD03C0C8EED3E020C050
:100A400089EC90E09F938F931F920E94F90C88EE9F
:100A500093E00E94F310EC010E940D160F900F908E
:100A60000F90CE010E94FD108823D9F384EC90E012
:100A70009F938F931F920E94F90C0F900F900F90ED
:100A80000E947F2A809100018A3011F0843111F494
:100A9000289801C0289A80ED97E09093DA0380931C
:100AA000D90385E580937D0686EB90E09F938F9335
:100AB0001F920E94F90C8091B6070F900F900F9033
:100AC00082FF03C08AEA90E002C082EA90E09F932E
:100AD0008F931F920E94F90C0F900F900F908EE948
:100AE00090E09F938F931F920E94F90C0E946816CA
:100AF00088E893E1909392038093910381E080933F
:100B00007C060F900F900F9064E0762E50E7852EB4
:100B100057E1952EA12C43E0B42E35E0C32ED12C05
:100B200020E1E22E27E2F22E00E810E08091D603C9
:100B3000882309F49CC01092D60380917B068823F9
:100B400019F00E94530302C00E94482C0E94DA2828
:100B5000809100018A3011F0843111F4289801C08D
:100B6000289A80910501882321F081508093050106
:100B70000EC0109287061092A00410929F0410924B
:100B8000A2041092A1041092A4041092A3048091D4
:100B90007D04882329F080917D04815080937D0419
:100BA0008091910390919203892BD1F4D09292037A
:100BB000C09291030E94131D80910B0390910C032E
:100BC0008F5F9F4FF9F4809186048823D9F0F092CB
:100BD000DA03E092D90310930C0300930B0312C0C5
:100BE0008091910390919203019790939203809347
:100BF0009103809100018A3011F0843111F428981A
:100C000001C0289A8091D603882321F08091860420
:100C1000882311F40E9402080E94CA09CE010E9492
:100C2000FD10882311F1209111033091120380915E
:100C3000C60790E0281739077CF480910B03909148
:100C40000C038F5F9F4F41F49092DA038092D90397
:100C5000B0920C03A0920B030E94E9527092DB0346
:100C600084E190E00E94F310EC010E94BA5380915D
:100C7000DB03882309F05ACF0E942A5357CF1F92D3
:100C80000F920FB60F9211248F939F93EF93FF93C0
:100C9000809103018823E1F48091D2039091D303E2
:100CA00001969093D3038093D203FC01E35CFA4F47
:100CB000E081ED3019F08639910539F41092D303B3
:100CC0001092D20381E080930301E093C60004C038
:100CD0001092D3031092D203FF91EF919F918F91C5
:100CE0000F900FBE0F901F901895DC0120E030E0B0
:100CF00040E050E008C0FA01E35CFA4F8081280F21
:100D0000311D4F5F5F4F4A175B07A8F33F70C90162
:100D100036E0969587953A95E1F7835CFD01E35CB3
:100D2000FA4F808311962F73235CFD01E35CFA4F29
:100D30002083A25CBA4F8DE08C93109203018091C6
:100D40003D058093C60008955091C303565033E08B
:100D500043E048C0E32FF0E0E657F94F80813F5F62
:100D6000E32FF0E0E657F94F20812D533F5FE32F4B
:100D7000F0E0E657F94F70813F5FE32FF0E033502A
:100D8000E657F94F6081922F92959F708D53880F8F
:100D9000880F892BE42FF0E0E657F94F8083E42F8A
:100DA000EF5F513081F0972F9D53F0E02295207F27
:100DB000892F86958695282BE657F94F2083E42FB7
:100DC000EE5F523011F44E2F10C03C5F5350F0E0F4
:100DD0009295990F990F907C6D53962BE657F94F8A
:100DE00090834D5F552309F0B5CF8DE896E0909341
:100DF000C5038093C40343504093C60308951F93D3
:100E0000182F8A3019F48DE00E94FF068091C000EF
:100E100085FFFCCF1093C60080E090E01F910895FD
:100E20000895E1ECF0E088E18083A0ECB0E08C91E3
:100E300082608C93808180688083808180648083DD
:100E40008AE28093C40080910701909108010E947A
:100E5000F31090936A06809369068CED90E00E94EF
:100E6000F310909389068093880610926B0687E4AE
:100E700080936C0687E080936F068AE080936D060E
:100E800010926E061092C5031092C4031092C6030E
:100E90000895DF92EF92FF920F931F93DF93CF930A
:100EA000CDB7DEB78B857C8593E290933D058F5956
:100EB00080933E058A8580933F05DE011D9677234A
:100EC00029F4EE24FF2440E050E007C0ED84FE84C6
:100ED000DE0151964F855889715030E003E010E0F3
:100EE0007EC0F701E30FF11D90813F5F41505040FC
:100EF00091F4772309F483C0FD013296ED90FC90C4
:100F0000DF0112960190F081E02D7150309709F4C5
:100F100075C0AF0130E0F701E30FF11DD0803F5FF6
:100F20004150504099F4772311F460E023C0FD0153
:100F30003296ED90FC90DF01129640815181715004
:100F40004115510511F460E014C030E0F701E30FE2
:100F5000F11D60813F5F4150504061F4772351F0B3
:100F6000FD013296ED90FC90DF0112964081518197
:100F7000715030E0892F86958695835CF801E35C9B
:100F8000FA4F80832D2D22952F70892F90E083704A
:100F90009070F4E0880F991FFA95E1F7282B235CF5
:100FA000F801E25CFA4F20838D2D90E08F709070F5
:100FB000880F991F880F991F262F22952695269511
:100FC0002370282B235CF801E15CFA4F20836F73B8
:100FD000635CF801E05CFA4F60830C5F1F4F4115C2
:100FE000510509F07ECFC8010E947506CF91DF91AF
:100FF0001F910F91FF90EF90DF90089530E060E037
:10100000DD24B8CF80910301882309F4C2C1809107
:10101000BA038823C1F1809103018823A1F10E94C2
:10102000711684E190E09F938F938091BE0324E139
:10103000829FC00111248A5D9C4F9F938F9381E012
:1010400090E09F938F938EEB93E09F938F9382E03A
:101050008F9381E08F9388E48F930E94490780915A
:10106000BE038F5F8093BE032DB73EB7255F3F4F12
:101070000FB6F8943EBF0FBE2DBF843010F0109213
:10108000BE031092BA038091B903882371F1809155
:101090000301882351F10E94711680E590E09F932F
:1010A0008F9386E293E09F938F9321E030E03F930C
:1010B0002F9386E793E09F938F933F932F938BE03B
:1010C00094E09F938F9383E08F9381E08F938CE4E0
:1010D0008F930E9449071092B9038DB79EB70F9660
:1010E0000FB6F8949EBF0FBE8DBF8091BC038823BE
:1010F000F1F0809103018823D1F08AE090E09F9382
:101100008F938BE696E09F938F9381E08F938F93DD
:1011100086E58F930E9449071092BC032DB73EB716
:10112000295F3F4F0FB6F8943EBF0FBE2DBF809191
:10113000B8038823F9F0809103018823D9F08BE06C
:1011400090E09F938F938DE796E09F938F9381E03C
:101150008F93809106018F9387E48F930E944907B4
:101160001092B8038DB79EB707960FB6F8949EBF3E
:101170000FBE8DBF80918806909189060E94FD1058
:10118000882309F459C080910301882309F454C0CD
:1011900060912A0470912B0480912C0490912D046D
:1011A0002CE630E040E050E00E94FF563093760697
:1011B0002093750660913204709133048091340459
:1011C000909135042CE630E040E050E00E94FF565C
:1011D0003093780620937706809195048093790662
:1011E0008091960480937A0688E090E09F938F9395
:1011F00085E796E09F938F9381E08F9383E08F93B1
:1012000087E78F930E9449072DB73EB7295F3F4F6D
:101210000FB6F8943EBF0FBE2DBF80917B06853080
:1012200018F086E080937B0683E690E00E94F3103E
:101230009093890680938806809107019091080118
:10124000892B41F08091690690916A060E94FD10F9
:10125000882321F48091BB03882351F180910301FD
:10126000882331F182E490E09F938F9380E297E0AE
:101270009F938F9381E08F938F9384E48F930E9449
:1012800049071092BB0380910701909108012DB787
:101290003EB7295F3F4F0FB6F8943EBF0FBE2DBF3C
:1012A000009731F00E94F31090936A0680936906CC
:1012B000209104012F3F51F180E190E09F938F93A3
:1012C000822F90E0A4E0880F991FAA95E1F7875F2D
:1012D0009E4F9F938F9381E090E09F938F9384E044
:1012E00091E09F938F9382E08F9381E08F9381E4CD
:1012F0008F930E9449078FEF809304018DB79EB7AB
:101300000B960FB6F8949EBF0FBE8DBF80916207FB
:101310008823F1F0809103018823D1F081E090E0EF
:101320009F938F9382E697E09F938F9381E08F93B3
:101330008F9382E48F930E944907109262072DB722
:101340003EB7295F3F4F0FB6F8943EBF0FBE2DBF8B
:101350008091BD038823E9F0809103018823C9F0BF
:1013600086E190E09F938F938EE797E09F938F9312
:1013700081E08F938F9380E58F930E9449071092AD
:10138000BD038DB79EB707960FB6F8949EBF0FBEEC
:101390008DBF08950F931F93DF93CF9300D0CDB7E8
:1013A000DEB78091C003882309F4E5C10E94A4063A
:1013B00080918B06823609F00DC180918C068137B1
:1013C00009F448C0823730F48B3459F0803709F083
:1013D00001C13CC0833709F493C0843709F0FAC0D7
:1013E00021C0E091C403F091C50380819181909365
:1013F000670480936604809166049091670420914D
:10140000680430916904845E9D4F821B930B68E6EB
:1014100071E00E94CA56845B904090936B04809365
:101420006A04D8C0E091C403F091C5038081918122
:10143000A281B3818093C8039093C903A093CA0388
:10144000B093CB038FEF80930501C4C081E08093FC
:10145000BD03C0C00091C4031091C503F801808191
:101460008F3F21F40E942303F8018083E091C4039D
:10147000F091C5038081882311F481E003C0863098
:1014800010F085E08083E091C403F091C50346E548
:101490006EEA77E080810E94B70380910301882380
:1014A000E1F3E091C403F091C5038081898389E46D
:1014B0008A8386E590E09F938F938EEA97E09F93CF
:1014C0008F9321E030E03F932F93CE0102969F93BC
:1014D0008F933F932F93CE0101969F938F9383E039
:1014E0008F9381E08F9381E58F930E9449078DB799
:1014F0009EB70F960FB6F8949EBF0FBE8DBF6AC001
:10150000E091C403F091C50380818150853008F0DB
:1015100045C08181893409F041C0AEEAB7E0329616
:1015200086E501900D928150E1F7E091C403F091BE
:10153000C50346E56EEA77E080810E948A036091E8
:10154000D90770E080E090E024EC39E040E050E022
:101550000E948B5660939503709396038093970334
:10156000909398036091DA0770E080E090E00E9429
:101570008B566093990370939A0380939B03909387
:101580009C03E091C403F091C50380810E943E0357
:101590000E94230389830E94C02801C01982809180
:1015A00003018823E1F381E090E09F938F93CE01C4
:1015B00001969F938F9381E08F938F9383E58F9311
:1015C0000E944907EDB7FEB737960FB6F894FEBFF5
:1015D0000FBEEDBF80918C06873609F4C1C08836F6
:1015E00080F4813609F460C0823620F48B3409F02F
:1015F000BAC039C0823609F464C0843609F0B3C079
:1016000075C08C3609F49AC08D3620F4883609F0FE
:10161000AAC07FC0843721F0863709F0A4C09CC0DF
:10162000E091C403F091C50380819181A281B381CF
:101630008093C8039093C903A093CA03B093CB03CC
:10164000809103018823E1F31F92809106018F931B
:1016500084E58F930E9449078FEF809305010F90D7
:101660000F900F9080C0E091C403F091C50380817A
:1016700091819093670480936604809166049091B1
:1016800067042091680430916904845E9D4F821B39
:10169000930B68E671E00E94CA56845B9040909379
:1016A0006B0480936A045FC0E091C403F091C503AA
:1016B0008081809304018032A8F08FE1809304013F
:1016C00011C0ADE7B6E08091C4039091C5039C01C1
:1016D000F9018BE001900D928150E1F7809186062F
:1016E000809362078FEF809305013DC0E091C403B2
:1016F000F091C50380812AE0829FC001112490935C
:10170000080180930701892B71F181E08093BB036D
:101710002AC08FEF80930501E091C403F091C503C7
:10172000808190910C04892B80930C04882311F004
:101730001092BE0381E08093BA0315C08FEF8093AF
:101740000501E091C403F091C503808180930B04EF
:1017500081E08093B90307C081E08093BC0303C09C
:1017600081E08093B8031092C0031092C5031092D9
:10177000C4031092C6030F900F90CF91DF911F9179
:101780000F9108951F920F920FB60F9211242F936D
:101790003F934F935F936F937F938F939F93AF93F9
:1017A000BF93CF93DF93EF93FF938091C600809315
:1017B000BF038091BF030E9418484091CD03463972
:1017C00010F01092CC038091BF038D3009F05DC002
:1017D0008091CC03823009F058C01092CC03A42F22
:1017E000B0E0FD01E857F94F3081ED01C757D94FFF
:1017F00028818091D0039091D103831B9109821B92
:1018000091099F709093D1038093D0039C0196E03F
:10181000369527959A95E1F7235C2093CF03982F6F
:101820009F73935C9093CE038081281729F488815D
:10183000981711F491E006C08091C2038F5F8093E6
:10184000C20390E08091C003882309F06AC0992305
:1018500009F467C081E08093C0034F5F4093C303E6
:10186000A657B94F8DE08C9380918C06823509F094
:1018700058C02CE088E190E00FB6F894A8958093CA
:1018800060000FBE209360004CC08091CC0381307B
:10189000F9F0813020F0823009F041C024C08091FD
:1018A000BF03833239F48091C003882319F481E0A7
:1018B0008093CC038091BF0380938A0681E080935C
:1018C000CD038091BF038093D0031092D10329C030
:1018D00082E08093CC03E42FF0E08091BF03E657D1
:1018E000F94F808309C0E42FF0E08091BF03E657F1
:1018F000F94F8083463920F44F5F4093CD0302C0F7
:101900001092CC032091BF038091D0039091D1031A
:10191000820F911D9093D1038093D00302C0109247
:10192000CC03FF91EF91DF91CF91BF91AF919F9148
:101930008F917F916F915F914F913F912F910F9078
:101940000FBE0F901F901895982F809163078130DC
:1019500061F480910A04E82FF0E0EA5DFC4F908387
:101960008F5F80930A0481E00895892F0E94FF060B
:1019700008951F93182F04C080E30E94A40C1150F7
:101980001116D4F31F9108951F93182F04C080E2FD
:101990000E94A40C11501116D4F31F9108950F93B7
:1019A0001F93CF93DF938C01EB0108C0F8010F5F09
:1019B0001F4FE4918E2F0E94A40C21972097B1F71E
:1019C000DF91CF911F910F9108950F931F93CF93A4
:1019D000DF938C01EB0106C0F80181918F010E9419
:1019E000A40C21972097C1F7DF91CF911F910F9100
:1019F00008952F923F924F925F926F927F928F92B3
:101A00009F92AF92BF92CF92DF92EF92FF920F938D
:101A10001F93DF93CF93CDB7DEB7E5970FB6F8945A
:101A2000DEBF0FBECDBF2C969FAD2C972D964FAD30
:101A30002D972B968FAD2B9780936307EDE4AE2EF9
:101A4000B12CAC0EBD1E292F342FC9019DA78CA728
:101A50001EA61FA618AA19AA9E01245D3F4F3DABE2
:101A60002CAB0CA51DA502C00F5F1F4FF801F49011
:101A7000FF2019F0F5E2FF16B9F7B8012CA53DA536
:101A8000621B730B19F0C9010E94CF0CFF2009F4EF
:101A900052C2A8014F5F5F4F5DA74CA71982442433
:101AA0001BAA5FEF5AAB02C0C5015C01ECA5FDA506
:101AB000CF0101969DA78CA76491A42DB0E0A170E1
:101AC000B070653721F0862F80628837F1F4109767
:101AD00071F0F50120813181428153812EA73FA70A
:101AE00048AB59AB24E030E0A20EB31E0EC0F501A6
:101AF000808191819C0140E050E02EA73FA748AB38
:101B000059AB42E050E0A40EB51E603221F4898149
:101B1000882351F61AC0633211F458E05AC06A3271
:101B200021F06D3281F4C50109C0C5010296D501CD
:101B3000BC91BBABB7FFB9CFB195BBABE0E14E2ACF
:101B4000FFED4F22B2CF6B3211F46983ADCF6E320D
:101B500009F03AC0ECA5FDA59F012F5F3F4F3DA7BF
:101B60002CA784918A3221F0682F20E030E021C038
:101B7000C5010296D5014D915C9157FF02C04FEF10
:101B80005FEF4AAB92CFC90173E0880F991F7A9536
:101B9000E1F7220F331F280F391F260F311D205365
:101BA0003040ECA5FDA5AF014F5F5F4F5DA74CA78F
:101BB0006491862F80538A3030F3A90137FF02C029
:101BC0004FEF5FEF4AAB7DCF603329F444FC6CCF1D
:101BD00050E2452A69CF862F81538930E8F420E00E
:101BE00030E0C90143E0880F991F4A95E1F7220FC1
:101BF000331F280F391F260F311D20533040ECA50D
:101C0000FDA5CF0101969DA78CA76491862F8053D7
:101C10008A3038F32BAB55CF683619F494E0492A53
:101C200043CF6C3619F4A1E04A2A3ECF562EF50177
:101C3000B3E66B1741F422E030E0A20EB31E8081C0
:101C40008C83198225C134E4631739F044E66417A4
:101C500031F059E66517C1F502C081E0482A40FE1F
:101C600009C0A4E0B0E0AA0EBB1E208131814281F0
:101C700053810BC042E050E0A40EB51E80819181DB
:101C80009C01442737FD4095542F2EA73FA748AB12
:101C900059AB8EA59FA5A8A9B9A9B7FF11C02EA5BC
:101CA0003FA548A959A950954095309521953F4F9A
:101CB0004F4F5F4F2EA73FA748AB59AB3DE239834B
:101CC000562E1AE0312E80C04FE4641721F05FE6F3
:101CD000651731F402C081E0482AB8E03B2E73C09A
:101CE00090E7691791F4A2E0B0E0AA0EBB1E8081D4
:101CF00091819C0140E050E02EA73FA748AB59AB33
:101D000030E4432AA8E75A2E5CC06337E1F5D501D9
:101D1000CD90DC90C114D10489F4B8E2BC83EEE626
:101D2000ED83F5E7FE832CE62F83288739E2398798
:101D30001A86F4E0CF2ED12CCC0EDD1E4AA947FD29
:101D400010C0552747FD509560E070E0C6010E9425
:101D50002B54009771F0182F1C195AA951174CF0E9
:101D600009C0F60101900020E9F731971E2F1C19D8
:101D700001C01AA982E090E0A80EB91E1982E3E71B
:101D80005E2E40E08CC0653521F0653739F4562E63
:101D900002C091E0492A7AE0372E15C0683519F063
:101DA000683709F06FC043FE0BC02EA53FA548A9B8
:101DB00059A9211531054105510511F030E4432A97
:101DC000562E60E1362E19824AA947FD02C05FED0A
:101DD00045228EA59FA5A8A9B9A90097A105B1057F
:101DE00049F49AA9992331F45CE2C52ED12CCC0E8A
:101DF000DD1E44C04CE2C42ED12CCC0EDD1EEEA460
:101E0000FFA408A919A9632C772488249924C80160
:101E1000B701A40193010E94DD566A3020F430E33B
:101E2000232E260E08C027E5222E260EA8E55A16D8
:101E300011F4BFED2B22F60122926F01C801B70108
:101E4000A40193010E94DD56C901DA018EA79FA764
:101E5000A8ABB9ABE614F7040805190518F07C0126
:101E60008D01D5CFF8E03F1649F443FE07C020E3CB
:101E7000221621F0D601E0E3EE936D011CA91C1996
:101E80004AA90DC0662309F456C06C831982562EE8
:101E900094E0C92ED12CCC0EDD1E40E011E0042FC1
:101EA000011B07FD00E08981882319F0812F8F5FD6
:101EB00006C046FC02C0812F02C0812F8E5F782EA3
:101EC000700EE42CFF2480E3882E912C8E209F201E
:101ED0008114910421F48BA987190E94C40C898173
:101EE000882329F061E070E0CE01019609C0E6FE8A
:101EF00009C0F0E3FA835B8262E070E0CE010296F3
:101F00000E94E50C20E28216910421F48BA9871926
:101F10000E94B90C802F0E94B90C612F772767FDB2
:101F20007095C6010E94E50CE4FE9BCD8BA9871934
:101F30000E94C40C96CDE5960FB6F894DEBF0FBE96
:101F4000CDBFCF91DF911F910F91FF90EF90DF9068
:101F5000CF90BF90AF909F908F907F906F905F9049
:101F60004F903F902F9008951F920F920FB60F92AF
:101F700011242F933F935F936F937F938F939F933E
:101F8000AF93BF938091DB03882329F08091DB031B
:101F900081508093DB038091E30381508093E303BE
:101FA0008F5F11F58091E1039091E203009729F092
:101FB00001979093E2038093E10389E08093E30328
:101FC000809110038F5F817080931003882319F430
:101FD00081E08093D6038091D4039091D50301963C
:101FE0009093D5038093D4038091D9039091DA0321
:101FF0000297B8F08091D9039091DA0301979093FA
:10200000DA038093D9038091D9039091DA03209168
:102010000B0330910C0382239323892B09F0A7C073
:1020200006C08FEF9FEF90930C0380930B0380917A
:1020300000018A3039F404C05A9A05C0479A03C097
:102040005A9801C047988091B60783FF96C0349B89
:102050000AC08091D7039091D80301969093D8033A
:102060008093D7038AC08091D7039091D803892B9E
:1020700009F45FC08091D7039091D8038A569140AC
:1020800008F057C02091D7033091D8038091D7032F
:102090009091D80369E270E00E94B656260F371F70
:1020A0003093D8032093D7038091D7039091D8031E
:1020B0000B9750F08091D7039091D8030A97909393
:1020C00067048093660404C010926704109266044B
:1020D0008FEF90E09093E2038093E1038091D70328
:1020E0009091D8038758904090936704809366043A
:1020F000809166049091670497FF0AC080916604FE
:102100009091670488599E4F90936704809366046A
:1021100080916604909167048856914054F08091B4
:102120006604909167048856914090936704809369
:102130006604809166049091670420916804309150
:102140006904845E9D4F821B930B68E671E00E94D8
:10215000CA56845B904090936B0480936A0481E03C
:102160008093DE031092D8031092D70306C08091AB
:1021700000018A3009F062CF5FCFBF91AF919F918C
:102180008F917F916F915F913F912F910F900FBE33
:102190000F901F9018958091D4039091D5030B96C2
:1021A0009093E5038093E40382E085BD83EA84BDD8
:1021B00017BC88E788BD86E086BD83EC8093B000BD
:1021C00084E08093B100E0E7F0E08081826080836A
:1021D000EEE6F0E08081816080838AE08093B30046
:1021E0001092B20008952091D4033091D5032F5F4F
:1021F0003F4F280F391FC90108952091D403309112
:10220000D503821B930B80709078892F8695089553
:102210002091D4033091D5032F5F3F4F280F391FF2
:102220008091D4039091D503A901481B590BCA0191
:1022300080709078892F869599F308952091D40322
:102240003091D5032F5F3F4F280F391F4FEE02C04B
:1022500040937A008091D4039091D503B901681B13
:10226000790BCB0180709078892F869589F308953A
:102270001F920F920FB60F9211248F939F9380910C
:10228000090390910A03892B11F05F9A01C05F98AE
:1022900083E08093B000809170008E7F8093700007
:1022A0009F918F910F900FBE0F901F9018951F92C6
:1022B0000F920FB60F9211242F933F934F935F937A
:1022C0006F937F938F939F93AF93BF93CF93DF933E
:1022D000EF93FF938091090390910A03049709F00B
:1022E00088C08091AA0390E0880F991F40910D0348
:1022F00050910E039A01220F331F240F351F820FB6
:10230000931F64E070E00E94CA5670930E036093BE
:102310000D03EB01E0968091F40720912A0430919F
:102320002B0440912C0450912D0480FF0EC060912D
:10233000D00770E080E090E00E948B5620E030E40F
:1023400040E050E00E94FF5614C06091D00770E05A
:1023500080E090E00E948B5620E030E440E050E0C6
:102360000E94FF5650954095309521953F4F4F4F15
:102370005F4FC20FD31FD093DD03C093DC032091C6
:10238000DC033091DD038091D10743E0849FC001DD
:1023900011242817390740F08091D207849FC0018B
:1023A00011248217930720F49093DD038093DC03BC
:1023B0002091DC033091DD0330934B0720934A07D3
:1023C000C9016FEF70E00E94B6568D9740F4235B11
:1023D0003F4F3093DD032093DC0383E101C080E6AF
:1023E00080930F038091DC0380958093B30083EC8E
:1023F00040C08091090390910A03892B39F18091A3
:10240000090390910A03049708F52091DC033091A9
:10241000DD032F3F310561F058F05F9A83E0809330
:10242000B0002F5F30403093DD032093DC0323C0E6
:1024300083E88093B00080910F038093B30081E024
:1024400090E090930A038093090315C080910903DB
:1024500090910A03892B79F48091D30790E0880F3B
:10246000991F880F991F90930A03809309035F981F
:1024700083E08093B0008091090390910A03019753
:1024800090930A0380930903FF91EF91DF91CF911D
:10249000BF91AF919F918F917F916F915F914F917C
:1024A0003F912F910F900FBE0F901F901895109293
:1024B0007C008FEE80937A0008951F920F920FB6E2
:1024C0000F921124CF92DF92EF92FF920F931F93FE
:1024D0002F933F934F935F936F937F938F939F932C
:1024E000AF93BF93EF93FF9310927A00809106040D
:1024F0008F5F809306048150853009F486C0863052
:1025000090F4823009F440C0833030F48823F1F035
:10251000813009F09DC22FC0833009F441C084305E
:1025200009F096C25AC0883009F4D5C0893038F411
:10253000863009F483C0873009F08AC2AFC0893081
:1025400009F4E6C08A3009F083C2D9C180917800CD
:1025500090917900909305048093040481E0809326
:1025600007048091FB039091FC0301969093FC0378
:102570008093FB0371C280917800909179009093D1
:10258000030480930204A5C08091780090917900A3
:10259000909301048093000484E0809307045CC25C
:1025A000409111035091120380917800909179002D
:1025B0009A01220F331F240F351F63E070E00E9441
:1025C000B656260F371F36952795369527953093A3
:1025D00012032093110386E0E0CF20917800309120
:1025E00079008091200490912104821B930B909399
:1025F00065078093640780916407909165079093C5
:10260000ED038093EC0387E0C8CF80917800909130
:10261000790020911E0430911F04821B930B90932C
:10262000700780936F0780916F0790917007909368
:10263000EF038093EE03109207040EC28091000115
:102640008A3069F480917800909179002091040497
:1026500030910504820F931F9695879519C040917C
:10266000040450910504843169F42091780030917C
:10267000790088279927841B950B821B930B815027
:102680009C4F06C08091780090917900840F951F2F
:102690009093EB038093EA0381E07FCF8091000168
:1026A00020910204309103048A3049F4809178002B
:1026B00090917900820F931F9695879506C080911F
:1026C000780090917900820F931F9093E903809393
:1026D000E80382E062CF80910001209100043091F4
:1026E00001048A3049F48091780090917900820F3A
:1026F000931F9695879506C08091780090917900F8
:10270000820F931F9093E7038093E60385E045CF04
:102710006091780070917900E0902404F090250495
:102720000091260410912704882777FD8095982F23
:102730000E947455A80197010E9470540E9441554F
:102740007093F1036093F0038091F0039091F10393
:1027500002970CF43EC0609124047091250480918E
:1027600026049091270420E030E84BE354E40E94D3
:10277000D55488230CF078C060912404709125040E
:1027800080912604909127042AE037ED43EA5CE328
:102790000E9471546093240470932504809326044E
:1027A000909327048091A9049091AA04845F91409A
:1027B00008F05AC060912404709125048091260489
:1027C000909127042DEC3CEC4CEC5DE30E9471549D
:1027D00043C08091F0039091F1038F5F9F4F0CF005
:1027E00043C0609124047091250480912604909147
:1027F000270420E030E849E054E40E9424561816EB
:102800009CF5609124047091250480912604909198
:1028100027042AE037ED43EA5CE30E94705460939A
:1028200024047093250480932604909327048091B8
:10283000A9049091AA04845F9140B0F460912404AB
:102840007091250480912604909127042DEC3CEC96
:102850004CEC5DE30E947054609324047093250453
:10286000809326049093270481E08093F70380915E
:102870007800909179009093670780936607209184
:102880006204309163044091640450916504809126
:10289000F0039091F103AA2797FDA095BA2F820F1C
:1028A000931FA41FB51F8093620490936304A093A9
:1028B0006404B0936504E0906204F09063040091B6
:1028C00064041091650460916204709163048091C6
:1028D00064049091650420E034E040E050E00E9400
:1028E000FF56E21AF30A040B150BE0926204F09211
:1028F0006304009364041093650483E04ECE8091DA
:102900007407909175072091780030917900820FBB
:10291000931F909375078093740780916C078F5F66
:1029200080936C0780916C07853008F491C080918A
:102930007800909179009093180380931703109278
:102940006C076091F9037091FA038091F80399275D
:1029500087FD90952FEF30E0829F6001839FD00C20
:10296000929FD00C112420916807309169078091C3
:102970007407909175074091870450918804281B33
:10298000390B241B350B2C0D3D1D8091A10390E0CC
:10299000AC01249FC001259F900D349F900D112400
:1029A0009B0153E0220F331F5A95E1F7261B370B8B
:1029B000820F931F68E070E00E94CA567093FA037A
:1029C0006093F9032091740730917507E090130329
:1029D000F09014030091150310911603C801B7017C
:1029E000660F771F881F991F6E0D7F1D801F911F17
:1029F000442737FD4095542F620F731F841F951F86
:102A000024E030E040E050E00E94FF56C901DA01C6
:102A10008093130390931403A0931503B0931603AC
:102A200020916807309169078091130390911403F6
:102A3000A0911503B0911603C20ED31EC81AD90A6D
:102A4000D0928804C0928704109275071092740780
:102A500010920704109206048091070480937C0072
:102A600080910604882319F08FEE80937A00FF91FD
:102A7000EF91BF91AF919F918F917F916F915F91F6
:102A80004F913F912F911F910F91FF90EF90DF9009
:102A9000CF900F900FBE0F901F901895BF92CF92BE
:102AA000DF92EF92FF920F931F931092FD0310920B
:102AB000FE031092FF030CE8FF24F39498E0B92E74
:102AC0008AE0D82E15EFE12EBFEECB2E05C01330D5
:102AD00019F40B3008F009E08091E6039091E703C8
:102AE0008C5F934024F48091190381500CC0809135
:102AF000E6039091E7038750944014F411E006C078
:102B0000809119038F5F8093190310E08091E8038F
:102B10009091E9038C5F934024F480911A038150D3
:102B20000AC08091E8039091E9038750944034F003
:102B300080911A038F5F80931A0301C01F5F8091F9
:102B4000EA039091EB038C5F934024F480911B0384
:102B500081500AC08091EA039091EB038750944022
:102B600034F080911B038F5F80931B0301C01F5FB4
:102B7000B0920D040E940A1D809119038A3020F43E
:102B8000F092FD03D092190380911903863F20F043
:102B9000F092FD03E092190380911A038A3020F429
:102BA000F092FE03D0921A0380911A03863F20F020
:102BB000F092FE03E0921A0380911B038A3020F406
:102BC000F092FF03D0921B0380911B03863F20F0FD
:102BD000F092FF03E0921B0380910D048823E1F73C
:102BE00010926C07C0927A0080916C078823E1F301
:102BF0000A3020F48AE090E00E941E11015009F092
:102C000066CF86E490E00E941E111F910F91FF9005
:102C1000EF90DF90CF90BF900895EF92FF920F93C7
:102C20001F93CF93DF93F999FECF23E0E22E20E0AC
:102C3000F22EF2BCE1BCF89A80B5C82FD0E0C531C5
:102C4000D10508F02A97C7BD1092F80384E690E0FA
:102C50000E941E1180911703909118038255934092
:102C6000C8F4C0E0D0E016C0C7BD82E390E00E9487
:102C70001E111F930F931F920E94F90C809117034E
:102C8000909118030F900F900F908255934038F059
:102C9000219602C008EF11E0CA3FD10528F38C2F1E
:102CA000F999FECF1FBAF2BCE1BC80BD0FB6F89413
:102CB000FA9AF99A0FBE809371078CE291E00E9414
:102CC0001E11DF91CF911F910F91FF90EF9008950A
:102CD000E6E2F3E080E2819393E0E637F907D9F783
:102CE00008951F934091760380910B04481710F4C8
:102CF00040930B0480910C04282F30E080FF0AC021
:102D000090910B04992321F0915090930B0402C0F1
:102D100040930B0421FF0AC090910B04941719F4FF
:102D200010920B0403C09F5F90930B0423703070CC
:102D30002330310511F410920B04E6E2F3E080E257
:102D4000819393E0E637F907D9F780910B04282F98
:102D500030E08A3040F481E180930A043F932F935E
:102D600083E295E007C080E180930A043F932F93AC
:102D70008EE195E09F938F9381E08F930E94F90CF1
:102D80000F900F900F900F900F9010910B04153033
:102D900009F4FBC1163090F4123009F4C8C01330A6
:102DA00030F4112309F1113009F097C465C01330D4
:102DB00009F413C1143009F090C463C1183009F448
:102DC0007AC3193038F4163009F403C3173009F008
:102DD00084C44DC31A3009F4EDC31A3008F4A9C3F2
:102DE0001B3009F07AC427C410920A048EE095E0E3
:102DF0009F938F9311E01F930E94F90C84E18093BD
:102E00000A042091000188E690E09F938F9387E465
:102E100090E09F938F931F921F92822F6AE00E94EF
:102E2000AA56892F90E09F938F93822F0E94AA56D3
:102E300090E09F938F9389EF94E09F938F931F93DC
:102E40000E94F90C88E280930A040E94230390E018
:102E50009F938F938CEE94E09F938F931F930E9488
:102E6000F90C8CE380930A048CED94E09F938F938C
:102E70001F930E94F90C2DC48091B60780FF3AC0C1
:102E800010920A0480918704909188049F938F93F5
:102E90008DEC94E09F938F931F930E94F90C84E133
:102EA00080930A048091890490918A049F938F9360
:102EB0008EEB94E09F938F931F930E94F90C88E20E
:102EC00080930A0480911703909118039F938F9326
:102ED0008FEA94E09F938F931F930E94F90C8CE3E9
:102EE00080930A048091710790E09F938F9380EA0A
:102EF00094E05AC384E180930A0489E994E09F93A3
:102F00008F931F930E94F90C88E280930A048BE848
:102F100094E09F938F931F930E94F90C8DB79EB7F7
:102F200006960FB6F8949EBF0FBE8DBFDBC31092FE
:102F30000A0481E894E09F938F9311E01F930E940D
:102F4000F90C84E180930A0460912A0470912B04A7
:102F500080912C0490912D0420E034E040E050E07A
:102F60000E94FF565F934F933F932F9382E794E025
:102F70009F938F931F930E94F90C88E280930A0419
:102F8000609132047091330480913404909135043F
:102F900020E034E040E050E00E94FF565F934F9302
:102FA0003F932F9383E694E09F938F931F930E9408
:102FB000F90C8CE380930A04809166049091670475
:102FC0009F938F9384E594E09F938F931F930E9428
:102FD000F90C8DB79EB74696A4CF10920A04809143
:102FE00082079091830720918007309181079F93FA
:102FF0008F933F932F9384E494E09F938F9311E0FA
:103000001F930E94F90C84E180930A048091860743
:103010009091870720918407309185079F938F9324
:103020003F932F9384E394E09F938F931F930E9489
:10303000F90C88E280930A0480918A0790918B07AB
:1030400020918807309189079F938F933F932F9307
:1030500084E294E09F938F931F930E94F90C8CE37A
:1030600080930A0480918E0790918F0720918C079E
:1030700030918D079F938F933F932F9384E194E03A
:103080007BC010920A04E091AF07F0E0EE0FFF1F43
:10309000E258F84F20813181E091AE07F0E0EE0F69
:1030A000FF1FE258F84F808191813F932F939F93A8
:1030B0008F9384E094E09F938F9311E01F930E947D
:1030C000F90C84E180930A04E091B107F0E0EE0F7F
:1030D000FF1FE258F84F20813181E091B007F0E006
:1030E000EE0FFF1FE258F84F808191813F932F939D
:1030F0009F938F9384EF93E09F938F931F930E94EE
:10310000F90C88E280930A04E091B307F0E0EE0F37
:10311000FF1FE258F84F20813181E091B207F0E0C3
:10312000EE0FFF1FE258F84F808191813F932F935C
:103130009F938F9384EE93E09F938F931F930E94AE
:10314000F90C8CE380930A04E091B507F0E0EE0FF0
:10315000FF1FE258F84F20813181E091B407F0E081
:10316000EE0FFF1FE258F84F808191813F932F931C
:103170009F938F9384ED93E09F938F931F930E946F
:10318000F90C8DB79EB74C96CCCE10920A0486EC03
:1031900093E09F938F9311E01F930E94F90C80910D
:1031A00000010F900F900F908A3009F044C084E125
:1031B00080930A048091E6039091E7032091140420
:1031C000309115043F932F93821B930B9F938F9302
:1031D00087EB93E09F938F931F930E94F90C88E2F3
:1031E00080930A048091E8039091E90320911604EA
:1031F000309117043F932F93821B930B9F938F93D0
:1032000088EA93E09F938F931F930E94F90C8CE3BD
:1032100080930A0480911804909119042091EA0384
:103220003091EB039F938F93821B930B9F938F930C
:1032300089E993E058C08B3019F0843109F05CC003
:1032400084E180930A04E0911404F0911504209124
:10325000E6033091E703CF0162E070E00E94CA56B6
:103260007F936F932E1B3F0B3F932F938AE893E03E
:103270009F938F9311E01F930E94F90C88E2809333
:103280000A04E0911604F09117042091E8033091AC
:10329000E903CF0162E070E00E94CA567F936F930A
:1032A0002E1B3F0B3F932F938BE793E09F938F93BE
:1032B0001F930E94F90C8CE380930A042091180458
:1032C00030911904E091EA03F091EB03C90162E047
:1032D00070E00E94CA567F936F932E1B3F0B3F9363
:1032E0002F938CE693E09F938F931F930E94F90C8A
:1032F0008DB79EB7459615CE8D3009F0F3C184E1A8
:1033000080930A04E0911404F09115042091E603DF
:103310003091E7038091190390E09F938F93CF0141
:1033200062E070E00E94CA567F936F932E1B3F0BA2
:103330003F932F9388E593E09F938F931F930E9471
:10334000F90C88E280930A04E0911604F0911704C6
:103350002091E8033091E90380911A0390E09F9354
:103360008F93CF0162E070E00E94CA567F936F9303
:103370002E1B3F0B3F932F9384E493E09F938F93F7
:103380001F930E94F90C8CE380930A042091180487
:1033900030911904E091EA03F091EB0380911B0353
:1033A00090E09F938F93C90162E070E00E94CA563B
:1033B0007F936F932E1B3F0B3F932F9380E393E0FC
:1033C0009F938F931F930E94F90C8DB79EB74B96D6
:1033D000A8CD10920A0483E293E09F938F9311E0AB
:1033E0001F930E94F90C84E180930A042091EE035C
:1033F0003091EF0380911E0490911F049F938F934F
:103400003F932F9384E193E09F938F931F930E94A8
:10341000F90C88E280930A042091EC033091ED03CB
:1034200080912004909121049F938F933F932F9339
:1034300085E093E09F938F931F930E94F90C8CE398
:1034400080930A04609124047091250480912604DD
:10345000909127040E9441557F936F93809120089B
:10346000909121089F938F9386EF92E02DC184E184
:1034700080930A0480911103909112039F938F937C
:1034800087EE92E09F938F9311E01F930E94F90CB7
:1034900088E280930A0480917D0490E09F938F934B
:1034A00088ED92E09F938F931F930E94F90C8DB744
:1034B0009EB70A9636CD10920A0489EC92E09F934B
:1034C0008F9311E01F930E94F90C84E180930A040A
:1034D00080916A0490916B049F938F938AEB92E0A2
:1034E0009F938F931F930E94F90C88E280930A04A4
:1034F00080916604909167049F938F938BEA92E08A
:103500009F938F931F930E94F90C8CE380930A047E
:1035100080916804909169049F938F938CE992E065
:103520009F938F931F930E94F90C8DB79EB742967D
:10353000F8CC10920A0480917504909176049F93C0
:103540008F9380E992E09F938F9311E01F930E94E5
:10355000F90C84E180930A048091770490917804B7
:103560009F938F9384E892E09F938F931F930E9481
:10357000F90C88E280930A048091790490917A048E
:103580009F938F9388E792E09F938F931F930E945E
:10359000F90C8CE380930A0480917B0490917C0465
:1035A0009F938F938CE692E09F938F931F930E943B
:1035B000F90C3DC010920A0484E692E09F938F9329
:1035C00011E01F930E94F90C84E180930A0480911A
:1035D000AA0390E09F938F9386E592E09F938F9349
:1035E0001F930E94F90C88E280930A048091DC0307
:1035F0009091DD039F938F9388E492E09F938F9344
:103600001F930E94F90C8CE380930A048091D207E7
:1036100090E09F938F938091D10790E09F938F9339
:103620008AE392E09F938F931F930E94F90C8DB7CA
:103630009EB7449676CC10920A048AE292E09F9359
:103640008F9311E01F930E94F90C84E180930A0488
:1036500080918106992787FD90959F938F93809104
:103660008006992787FD90959F938F938AE192E03A
:103670009F938F931F930E94F90C88E280930A0412
:1036800080918206992787FD90959F938F938091D3
:10369000830690E09F938F938AE092E09F938F93AD
:1036A0001F930E94F90C8CE380930A048091870693
:1036B00090E09F938F9380918406992787FD909542
:1036C0009F938F938AEF91E09F938F931F930E9414
:1036D000F90C8DB79EB7489624CC11501093760301
:1036E00010920B0410920C041F910895EF92FF9218
:1036F0000F931F93CF93DF938C01EB019C0197FFF6
:1037000004C022273327281B390BCE01D7FF04C062
:10371000882799278C1B9D0B821793073CF4CE01B9
:10372000E8018C01B1E0EB2EF12C02C0EE24FF2465
:10373000209741F40115110529F461E070E080E063
:1037400090E025C0B801882777FD8095982F28EE56
:1037500033E040E050E00E948B569E01442737FD45
:103760004095542F0E94FF56A90137FF03C0509582
:1037700041955F4FBA01882777FD8095982F6D306E
:1037800021E0720720E0820720E0920704F524E69A
:1037900030E040E050E00E948B562CE031E040E009
:1037A00050E00E94FF56CA01B901A4E0660F771FDE
:1037B000881F991FAA95D1F7621B730B840B950B79
:1037C00024E630E040E050E00E94FF5653C06334EE
:1037D00042E0740740E0840740E0940734F524E6B3
:1037E00030E040E050E00E948B56605B78468040BD
:1037F000904026E331E040E050E00E94FF56CA01CD
:10380000B901F4E0660F771F881F991FFA95D1F769
:10381000621B730B840B950B24E630E040E050E014
:103820000E94FF56215F3F4F25C022E330E040E079
:1038300050E00E948B56645E70478040904026EABC
:1038400031E040E050E00E94FF56CA01B901E4E0D7
:10385000660F771F881F991FEA95D1F7621B730BBC
:10386000840B950B22E330E040E050E00E94FF56CD
:10387000225E3F4FEF2831F48AE590E0AC01421B15
:10388000530B9A0117FD03C0D7FF06C002C0D7FD36
:1038900003C0309521953F4FC901DF91CF911F9112
:1038A0000F91FF90EF9008959C0137FF04C0882787
:1038B0009927821B930B8856914034F0C90168E622
:1038C00071E00E94CA569C0137FD03C061E070E0C0
:1038D00005C0309521953F4F6FEF7FEFC9018B55A4
:1038E00090408A35910538F484EB90E0AC01421B9E
:1038F000530B9A010FC0C901855B90408A35910531
:1039000018F4245B30400FC0C9018F5091408A35B4
:10391000910518F041E050E008C088E691E0AC0164
:10392000421B530B9A014FEF5FEFF901EE0FFF1FA0
:10393000E85DFA4F85919491469F9001479F300D25
:10394000569F300D1124A901489F9001499F300DC9
:10395000589F300D1124C90108952AE530E0A901CE
:10396000481B590BCA010E94541C0895EF92FF9204
:103970000F931F93CF93DF938C01EB01BC0197FF53
:1039800004C066277727681B790B9E01D7FF04C008
:10399000222733272C1B3D0B2617370754F4CA0167
:1039A0000E94541C7C01B801882777FD8095982FD0
:1039B00009C0CA010E94AD1C7C01BE01882777FDA9
:1039C0008095982F28EE33E040E050E00E948B561F
:1039D0000027F7FC0095102FA80197010E94FF56C1
:1039E000C90137FF03C0909581959F4F9C014427E3
:1039F00037FD4095542FB901CA01DF91CF911F9136
:103A00000F91FF90EF9008951092B9008AE2809391
:103A1000B800089585EA8093BC0080E0089584E9A9
:103A20008093BC0008954CEB50E084E9DA018C935C
:103A300010920D042BEB30E0F901808110920E04FE
:103A400080E88C931092BD001092BA001082E9EBCE
:103A5000F0E01082A8EBB0E01C9210828AE28C9316
:103A600085EADA018C931082F901108285E88C9343
:103A700008951092B9008093BB0085E88093BC0044
:103A800080E008951F920F920FB60F9211248F932A
:103A90009F93EF93FF9380910D048F5F80930D04AC
:103AA0008150E82FF0E0E731F10508F093C0E85CC1
:103AB000FF4FEE0FFF1F0590F491E02D09948091C8
:103AC0000E0490E08996880F991F0CC080910E0417
:103AD0008F5F80930E04815029C0833009F07AC033
:103AE00080914A081092B9008093BB0085E88093CA
:103AF000BC0070C084E98093BC0080910E048430C7
:103B000018F410920D044AC010920E0447C0809120
:103B10000F04880F8D5AE6CF8091BB00E0910F040F
:103B2000F0E0EA58F84F808380910F04813041F033
:103B3000813018F0823089F606C080910908D2CF12
:103B400080911208CFCF80913D08CCCF80910F0497
:103B50009091BB00E82FF0E0EA58F84F94838F5F14
:103B600080930F04843058F110920F0428C01092F3
:103B7000B90080E1B9CF80911903B4CF1092B90098
:103B800082E1B2CF80911A03ADCF84E98093BC006B
:103B90008AE090E0909392038093910385EAA7CF07
:103BA0001092B90088E9A0CF1092B90084E19CCFAF
:103BB00080911B0397CF1092B90080E895CF84E9DC
:103BC0008093BC008AE090E09093920380939103ED
:103BD00010920D048091BC0080688093BC00FF911E
:103BE000EF919F918F910F900FBE0F901F9018959E
:103BF00083EC80938100EFE6F0E080818062808337
:103C000010921904109218041092170410921604BE
:103C1000109215041092140408951F920F920FB67B
:103C20000F9211240F931F932F933F934F935F9302
:103C30006F937F938F939F93AF93BF93CF93DF93B4
:103C4000EF93FF93209186003091870080911204BA
:103C500090911304281B390B809186009091870066
:103C60009093130480931204C9018D5494400091E1
:103C7000100410911104835F9A4160F4043011051F
:103C800014F01092770381E090E0909311048093F8
:103C900010048AC00A3011050CF086C0C9018B5F80
:103CA0009040845B914008F068C0E901C25DD1405A
:103CB000F801EE0FFF1FE258F84F808191819E01BD
:103CC000281B390BC90137FF03C0909581959F4F81
:103CD00006974CF480917D04883C28F480917D0403
:103CE000865F80937D04F801EE0FFF1FE258F84FC6
:103CF00020813181C901880F991F820F931F8C0F7A
:103D00009D1F64E070E00E94CA569B01CE0101969F
:103D1000861797071CF42150304006C021976C1776
:103D20007D0714F42F5F3F4F80917D04E801CC0F95
:103D3000DD1F833CB8F0FE01E258F84F808191818D
:103D4000A901481B590BCA0163E070E00E94CA56E2
:103D5000CB01880F991F860F971FCC56D84F998398
:103D6000888304C0CC56D84F19821882F801EE0F10
:103D7000FF1FE258F84F31832083F8013196F0930A
:103D80001104E0931004E530F10511F45D9A06C0CA
:103D90005D98E630F10511F45C9A05C05C983797A0
:103DA00011F45B9A01C05B98FF91EF91DF91CF9185
:103DB000BF91AF919F918F917F916F915F914F9143
:103DC0003F912F911F910F910F900FBE0F901F9059
:103DD000189581E08093AE0782E08093AF0783E07F
:103DE0008093B00784E08093B10785E08093B207A9
:103DF00086E08093B30787E08093B40788E08093E0
:103E0000B50708952F923F924F925F926F927F92E3
:103E10008F929F92AF92BF92CF92DF92EF92FF92DA
:103E20000F931F93DF93CF93CDB7DEB729970FB6CC
:103E3000F894DEBF0FBECDBF2091EA033091EB03B3
:103E40008091180490911904821B930B909356084B
:103E5000809355082091EA033091EB038091350857
:103E600090913608821B930B9093AD078093AC071B
:103E70008091E8039091E903209116043091170492
:103E8000821B930B90930808809307088091E603A8
:103E90009091E7032091140430911504821B930B39
:103EA00090931408809313086091EE037091EF03D0
:103EB000882777FD8095982F2CE030E040E050E097
:103EC0000E948B569B01AC0160914E0870914F0887
:103ED000882777FD8095982F620F731F841F951F89
:103EE00022E030E040E050E00E94FF5630934F085F
:103EF00020934E086091EC037091ED03882777FDC5
:103F00008095982F2CE030E040E050E00E948B56E6
:103F10009B01AC016091630870916408882777FD6C
:103F20008095982F620F731F841F951F22E030E049
:103F300040E050E00E94FF563093640820936308ED
:103F40006091F0037091F103882777FD8095982F99
:103F50002091200830912108442737FD4095542FA7
:103F6000620F731F841F951F22E030E040E050E095
:103F70000E94FF5630932108209320082091EE03E1
:103F80003091EF03C901880F991F820F931F880F8B
:103F9000991F880F991FAA2797FDA095BA2F2091E6
:103FA0003A0430913B0440913C0450913D04280F69
:103FB000391F4A1F5B1F20933A0430933B04409300
:103FC0003C0450933D042091EC033091ED03C90172
:103FD000880F991F820F931F880F991F880F991FB1
:103FE000AA2797FDA095BA2F20913E0430913F0457
:103FF0004091400450914104280F391F4A1F5B1F14
:1040000020933E0430933F04409340045093410476
:104010002091EE033091EF0380912E0890912F08AC
:10402000820F931F90932F0880932E082091EC030A
:104030003091ED038091580890915908820F931F99
:1040400090935908809358088091220490912304FA
:1040500001969093230480932204E0906607F090E9
:104060006707A0902404B0902504C0902604D09047
:10407000270460914204709143048091440490911C
:1040800045040E9474553B014C010027F7FC009544
:10409000102FC801B7010E947455A60195010E9416
:1040A00070549B01AC01C401B3010E9471540E9481
:1040B0004155609342047093430480934404909369
:1040C000450480915508909156085C01CC24B7FCBA
:1040D000C094DC2C80915F0890916008A0916108E9
:1040E000B0916208A80EB91ECA1EDB1EA0925F081E
:1040F000B0926008C0926108D09262082091550881
:1041000030915608442737FD4095542F8091690817
:1041100090916A08A0916B08B0916C08820F931F70
:10412000A41FB51F8093690890936A08A0936B0839
:10413000B0936C082091550830915608442737FDFC
:104140004095542F8091240890912508A09126082D
:10415000B0912708820F931FA41FB51F80932408D6
:1041600090932508A0932608B093270880915508BE
:10417000909156089C01442737FD4095542F80911B
:104180005A0490915B04A0915C04B0915D04280FE7
:10419000391F4A1F5B1F2E833F834887598720930F
:1041A0005A0430935B0440935C0450935D0430E107
:1041B000A31637EFB30637E0C30630E0D30684F02A
:1041C00080EF98E0A8EFBFEFA80EB91ECA1EDB1E55
:1041D000A0925F08B0926008C0926108D092620815
:1041E00080915F0890916008A0916108B091620889
:1041F000B7FF0CC0805F9840A84FBF4F80935F0807
:1042000090936008A0936108B093620890918F0426
:104210009D83992309F094C080919004882309F02C
:104220008FC08091B60786FF8BC06091AC077091FC
:10423000AD07E0909D04FF2400E010E0882777FDA3
:104240008095982F20914A0430914B0440914C0462
:1042500050914D040E948B5620E038E040E050E041
:104260000E94FF56CA01B901A80197010E948B560E
:1042700020E030E140E050E00E94FF56D22EC32EF5
:10428000B42EA52E2093EF043093F0044093F10454
:104290005093F2046091AC077091AD07882777FDC9
:1042A0008095982F209152043091530440915404EA
:1042B000509155040E948B5620E038E040E050E0D9
:1042C0000E94FF56CA01B901A80197010E948B56AE
:1042D00020E030E140E050E00E94FF56B901FA01D1
:1042E0002093EB047093EC044093ED04F093EE0400
:1042F0002D2D3C2D4B2D5A2DC901DA01B7FF07C0DA
:10430000B095A095909581959F4FAF4FBF4F813845
:104310009105A105B10584F4CB01DF01B7FF07C00A
:10432000B095A095909581959F4FAF4FBF4F813825
:104330009105A105B105A4F081E080936E0410C041
:104340001092EB041092EC041092ED041092EE0423
:104350001092EF041092F0041092F1041092F20403
:1043600080910708909108082091EF043091F004A3
:104370004091F1045091F20429833A834B835C838A
:10438000820F931F909308088093070800910708F5
:10439000109108086090EB047090EC048090ED049C
:1043A0009090EE0480919E04282E332444245524BA
:1043B000C201B101A40193010E948B5620E032E0BA
:1043C00040E050E00E94FF56020F131F10930808B0
:1043D000009307082091070830910808442737FD0B
:1043E0004095542F8091560490915704A091580401
:1043F000B0915904820F931FA41FB51F80935604D8
:1044000090935704A0935804B093590480910708DF
:104410009091080820918B0430918C04821B930B9F
:10442000AA2797FDA095BA2F2091520430915304EA
:104430004091540450915504820F931FA41FB51F3F
:104440008093520490935304A0935404B093550462
:10445000A0909903B0909A03C0909B03D0909C03C6
:10446000A816B906CA06DB06C4F488EA91E6A0E0FD
:10447000B0E08A199B09AC09BD098093520490935E
:104480005304A0935404B09355048093560490931E
:104490005704A0935804B093590422273327A90145
:1044A0002A193B094C095D098091520490915304EB
:1044B000A0915404B091550482179307A407B5073F
:1044C000B4F4D601C501885A9146A040B04080930B
:1044D000520490935304A0935404B09355048093D2
:1044E000560490935704A0935804B09359048091B4
:1044F000E8039091E9030F9734F488E19CEF9093DF
:104500000808809307088091E8039091E9030797D2
:1045100034F480E398EF9093080880930708E090C4
:1045200000013AE0E316A9F48091E8039091E903D1
:10453000835F934034F088EE93E090930808809373
:1045400007088091E8039091E9038A5F9340DCF0CB
:1045500014C08091E8039091E903855E974034F0A0
:1045600088EE93E090930808809307088091E80311
:104570009091E903835F974034F080ED97E090934A
:1045800008088093070880911308909114088619F1
:1045900097099093140880931308009113081091C1
:1045A0001408C201B10129813A814B815C810E94CA
:1045B0008B5620E032E040E050E00E94FF565095DC
:1045C0004095309521953F4F4F4F5F4F020F131F7E
:1045D00010931408009313082091130830911408C5
:1045E000442737FD4095542F80914E0490914F04FD
:1045F000A0915004B0915104820F931FA41FB51FC6
:1046000080934E0490934F04A0935004B0935104B0
:10461000809113089091140820918D0430918E049C
:10462000821B930BAA2797FDA095BA2F20914A04CD
:1046300030914B0440914C0450914D04820F931FD4
:10464000A41FB51F80934A0490934B04A0934C047D
:10465000B0934D04A0909503B0909603C09097033B
:10466000D0909803A816B906CA06DB06C4F488EAF7
:1046700091E6A0E0B0E08A199B09AC09BD098093DE
:104680004A0490934B04A0934C04B0934D04809340
:104690004E0490934F04A0935004B09351042227EA
:1046A0003327A9012A193B094C095D0980914A0465
:1046B00090914B04A0914C04B0914D048217930744
:1046C000A407B507B4F4D601C501885A9146A040A5
:1046D000B04080934A0490934B04A0934C04B09351
:1046E0004D0480934E0490934F04A0935004B093D4
:1046F00051048091E6039091E7030F9734F488E129
:104700009CEF90931408809313088091E603909196
:10471000E703079734F480E398EF909314088093AD
:104720001308EAE0EE16A9F48091E6039091E703FE
:10473000835F934034F088EE93E090931408809365
:1047400013088091E6039091E7038A5F9340DCF0C1
:1047500014C08091E6039091E703855E974034F0A2
:1047600088EE93E090931408809313088091E603F9
:104770009091E703835F974034F080ED97E090934A
:104780001408809313088FEE80937A008E819F81A6
:10479000A885B9858093460490934704A093480464
:1047A000B093490480914A0490914B04A0914C0429
:1047B000B0914D0480932A0490932B04A0932C0471
:1047C000B0932D048091520490915304A09154040D
:1047D000B09155048093320490933304A093340431
:1047E000B093350480914E0490914F04A0915004F1
:1047F000B091510480932E0490932F04A093300421
:10480000B09331048091560490915704A0915804BC
:10481000B09159048093360490933704A0933804E0
:10482000B09339048091B60787FF63C09D819923B7
:1048300009F05FC080919004882309F05AC08091EC
:10484000130890911408893C91055CF0209113089D
:10485000309114088091130890911408885C90405E
:1048600011C0809113089091140888539F4FA4F4AD
:104870002091130830911408809113089091140826
:1048800088539F4F880F991F880F991F820F931F7E
:10489000909314088093130880910708909108085A
:1048A000893C91055CF020910708309108088091BF
:1048B000070890910808885C904011C08091070813
:1048C0009091080888539F4FA4F4209107083091D5
:1048D0000808809107089091080888539F4F880F17
:1048E000991F880F991F820F931F90930808809338
:1048F00007088091B207E82FF0E0EE0FFF1FE258A3
:10490000F84F80819181209175043091760483590C
:104910009F4F821793071CF02F5F3F4F0CC0808181
:10492000918182599F4F821793074CF421153105CD
:1049300031F02150304030937604209375048091FB
:10494000B307E82FF0E0EE0FFF1FE258F84F808129
:104950009181209177043091780483599F4F821779
:1049600093071CF02F5F3F4F0CC0808191818259CB
:104970009F4F821793074CF42115310531F02150D8
:10498000304030937804209377048091B407E82F67
:10499000F0E0EE0FFF1FE258F84F808191812091E7
:1049A000790430917A0483599F4F821793071CF042
:1049B0002F5F3F4F0CC08081918182599F4F82179A
:1049C00093074CF42115310531F0215030403093DC
:1049D0007A04209379048091B507E82FF0E0EE0F78
:1049E000FF1FE258F84F8081918120917B04309124
:1049F0007C0483599F4F821793071CF02F5F3F4F12
:104A00000CC08081918182599F4F821793074CF48B
:104A10002115310531F02150304030937C04209332
:104A20007B04809175049091760497FF05C01092E5
:104A30007604109275040AC08F3F910539F034F066
:104A40008FEF90E0909376048093750480917704C3
:104A50009091780497FF05C0109278041092770423
:104A60000AC08F3F910539F034F08FEF90E09093BA
:104A70007804809377048091790490917A0497FF69
:104A800005C010927A04109279040AC08F3F9105F4
:104A900039F034F08FEF90E090937A0480937904AA
:104AA00080917B0490917C0497FF05C010927C0458
:104AB00010927B040AC08F3F910539F034F08FEFDC
:104AC00090E090937C0480937B0429960FB6F89431
:104AD000DEBF0FBECDBFCF91DF911F910F91FF9031
:104AE000EF90DF90CF90BF90AF909F908F907F908E
:104AF0006F905F904F903F902F9008958091B907ED
:104B00008B3F98F08B3F19F4809175040EC08C3F59
:104B100019F48091770409C08D3F19F480917904CC
:104B200004C08E3F21F480917B048093A203809186
:104B3000B8078B3F98F08B3F19F4809175040EC035
:104B40008C3F19F48091770409C08D3F19F480914E
:104B5000790404C08E3F21F480917B048093A103EB
:104B60008091A103882319F41092A10305C0843613
:104B700018F084E68093A1038091BA078B3F98F0E8
:104B80008B3F19F4809175040EC08C3F19F480910D
:104B9000770409C08D3F19F48091790404C08E3FD9
:104BA00021F480917B048093A3038091A303882345
:104BB00019F41092A30305C0843618F084E680939C
:104BC000A3038091BC078B3F98F08B3F19F4809131
:104BD00075040EC08C3F19F48091770409C08D3F95
:104BE00019F48091790404C08E3F21F480917B04F4
:104BF0008093A4038091C3078B3F98F08B3F19F4F7
:104C0000809175040EC08C3F19F48091770409C01F
:104C10008D3F19F48091790404C08E3F21F4809176
:104C20007B048093A5038091C4078B3F98F08B3F52
:104C300019F4809175040EC08C3F19F480917704AB
:104C400009C08D3F19F48091790404C08E3F21F48E
:104C500080917B048093A6038091A6038B3010F48F
:104C60008AE002C08F3F11F48093A6038091C507AC
:104C70008B3F98F08B3F19F4809175040EC08C3FE8
:104C800019F48091770409C08D3F19F4809179045B
:104C900004C08E3F21F480917B048093A703809110
:104CA000CA078B3F98F08B3F19F4809175040EC0B2
:104CB0008C3F19F48091770409C08D3F19F48091DD
:104CC000790404C08E3F21F480917B048093A90372
:104CD0008091CB078B3F98F08B3F19F4809175043E
:104CE0000EC08C3F19F48091770409C08D3F19F4F0
:104CF0008091790404C08E3F21F480917B048093DD
:104D000095048091CC078B3F98F08B3F19F48091EC
:104D100075040EC08C3F19F48091770409C08D3F53
:104D200019F48091790404C08E3F21F480917B04B2
:104D3000809396048091CD078B3F98F08B3F19F4B8
:104D4000809175040EC08C3F19F48091770409C0DE
:104D50008D3F19F48091790404C08E3F21F4809135
:104D60007B04809397048091CE078B3F98F08B3F14
:104D700019F4809175040EC08C3F19F4809177046A
:104D800009C08D3F19F48091790404C08E3F21F44D
:104D900080917B04809398048091DE078B3F98F08C
:104DA0008B3F19F4809175040EC08C3F19F48091EB
:104DB000770409C08D3F19F48091790404C08E3FB7
:104DC00021F480917B04809399048091DF078B3FCD
:104DD00098F08B3F19F4809175040EC08C3F19F444
:104DE0008091770409C08D3F19F48091790404C043
:104DF0008E3F21F480917B0480939A048091E00798
:104E00008B3F98F08B3F19F4809175040EC08C3F56
:104E100019F48091770409C08D3F19F480917904C9
:104E200004C08E3F21F480917B0480939B04809189
:104E3000E1078B3F98F08B3F19F4809175040EC009
:104E40008C3F19F48091770409C08D3F19F480914B
:104E5000790404C08E3F21F480917B0480939C04EC
:104E60008091CF078B3F98F08B3F19F480917504A8
:104E70000EC08C3F19F48091770409C08D3F19F45E
:104E80008091790404C08E3F21F480917B0480934B
:104E9000AA038091D4078B3F98F08B3F19F480913F
:104EA00075040EC08C3F19F48091770409C08D3FC2
:104EB00019F48091790404C08E3F21F480917B0421
:104EC0008093AB038091D7078B3F98F08B3F19F409
:104ED000809175040EC08C3F19F48091770409C04D
:104EE0008D3F19F48091790404C08E3F21F48091A4
:104EF0007B0480939D048091D8078B3F98F08B3F73
:104F000019F4809175040EC08C3F19F480917704D8
:104F100009C08D3F19F48091790404C08E3F21F4BB
:104F200080917B0480939E048091DD078B3F98F0F5
:104F30008B3F19F4809175040EC08C3F19F4809159
:104F4000770409C08D3F19F48091790404C08E3F25
:104F500021F480917B048093AC038091E3078B3F25
:104F600098F08B3F19F4809175040EC08C3F19F4B2
:104F70008091770409C08D3F19F48091790404C0B1
:104F80008E3F21F480917B0480933008809130081B
:104F9000823010F481E002C08F3F11F4809330081A
:104FA0008091E5078B3F98F08B3F19F48091750451
:104FB0000EC08C3F19F48091770409C08D3F19F41D
:104FC0008091790404C08E3F21F480917B0480930A
:104FD000530880915308823010F481E002C08F3F63
:104FE00011F4809353088091E6078B3F98F08B3F34
:104FF00019F4809175040EC08C3F19F480917704E8
:1050000009C08D3F19F48091790404C08E3F21F4CA
:1050100080917B04809311088091E7078B3F98F083
:105020008B3F19F4809175040EC08C3F19F4809168
:10503000770409C08D3F19F48091790404C08E3F34
:1050400021F480917B04809365088091E8078B3F71
:1050500098F08B3F19F4809175040EC08C3F19F4C1
:105060008091770409C08D3F19F48091790404C0C0
:105070008E3F21F480917B0480930A088091E90798
:105080008B3F98F08B3F19F4809175040EC08C3FD4
:1050900019F48091770409C08D3F19F48091790447
:1050A00004C08E3F21F480917B0480931508809189
:1050B000EA078B3F98F08B3F19F4809175040EC07E
:1050C0008C3F19F48091770409C08D3F19F48091C9
:1050D000790404C08E3F21F480917B0480936F0893
:1050E0008091EB078B3F98F08B3F19F4809175040A
:1050F0000EC08C3F19F48091770409C08D3F19F4DC
:105100008091790404C08E3F21F480917B048093C8
:105110001B088091F2078B3F98F08B3F19F4809128
:1051200075040EC08C3F19F48091770409C08D3F3F
:1051300019F48091790404C08E3F21F480917B049E
:1051400080936D086091A90370E080E090E00E9478
:10515000725527E137EB41ED58E30E9428566093E2
:105160009D0370939E0380939F039093A00380916F
:10517000C107809354088091C00780931608089552
:105180001F93CF93DF93182FC4E6D0E00DC01150CA
:1051900080918604882351F4D093DA03C093D90315
:1051A0008AEF90E00E940811112389F7DF91CF91D7
:1051B0001F91089580918604882321F5109212088A
:1051C0001092090810923D0810924A088091C80375
:1051D000882311F0809309088091C903882311F076
:1051E000809312088091CA03882311F080934A08A3
:1051F0008091CB03882311F080933D088091AB040C
:105200008C7F03C08091AB0481608093AB0480915C
:105210000908EAE3F7E080933A0710923B07809190
:10522000120880933C07138280914A0880933E07BE
:10523000158280913D0880934007178210920D04DB
:1052400010920E040E940A1D0895809100018D3075
:1052500011F40E944E1510927A008091E60390910D
:10526000E70390931408809313088091E8039091CA
:10527000E90390930808809307088091EA039091CE
:10528000EB0390935608809355086091EE0370915C
:10529000EF03882777FD8095982F2CE030E040E0E1
:1052A00050E00E948B5670934F0860934E086091B7
:1052B000EC037091ED03882777FD8095982F0E946D
:1052C0008B5670936408609363088091F00390910B
:1052D000F10390932108809320088FEE80937A0049
:1052E0008091B207E82FF0E0EE0FFF1FE258F84F71
:1052F00080819181209175043091760483599F4F6C
:10530000821793071CF02F5F3F4F0CC08081918163
:1053100082599F4F821793074CF42115310531F0C4
:105320002150304030937604209375048091B30768
:10533000E82FF0E0EE0FFF1FE258F84F80819181D7
:10534000209177043091780483599F4F82179307F7
:105350001CF02F5F3F4F0CC08081918182599F4F7D
:10536000821793074CF42115310531F0215030405C
:1053700030937804209377048091B407E82FF0E00D
:10538000EE0FFF1FE258F84F808191812091790440
:1053900030917A0483599F4F821793071CF02F5F37
:1053A0003F4F0CC08081918182599F4F8217930794
:1053B0004CF42115310531F02150304030937A04FE
:1053C000209379048091B507E82FF0E0EE0FFF1FDE
:1053D000E258F84F8081918120917B0430917C04C8
:1053E00083599F4F821793071CF02F5F3F4F0CC0CC
:1053F0008081918182599F4F821793074CF4211528
:10540000310531F02150304030937C0420937B04EF
:10541000809175049091760497FF05C010927604F0
:10542000109275040AC08F3F910539F034F08FEF68
:1054300090E0909376048093750480917704909126
:10544000780497FF05C010927804109277040AC080
:105450008F3F910539F034F08FEF90E0909378040E
:10546000809377048091790490917A0497FF05C026
:1054700010927A04109279040AC08F3F910539F096
:1054800034F08FEF90E090937A04809379048091C8
:105490007B0490917C0497FF05C010927C041092CD
:1054A0007B040AC08F3F910539F034F08FEF90E014
:1054B00090937C0480937B046091D90770E080E036
:1054C00090E024EC39E040E050E00E948B5660937D
:1054D000950370939603809397039093980360913C
:1054E000DA0770E080E090E00E948B5660939903A9
:1054F00070939A0380939B0390939C030895469A1C
:1055000010921F0410921E04109221041092200485
:1055100080E090E0A0E0B0E0809324049093250424
:10552000A0932604B093270410921504109214043B
:105530001092170410921604109219041092180475
:10554000109236081092350810929D0410929E0415
:105550001092F8030E94252984E690E00E941E1113
:105560000E9425298091B60780FF10C08091170303
:1055700090911803875B934038F4809117039091C2
:1055800018038E5E924010F40E940D164091E603BF
:105590005091E70350931504409314042091E803BD
:1055A0003091E90330931704209316048091EA03A5
:1055B0009091EB0390931904809318048091EA036F
:1055C0009091EB03909336088093350830931B0439
:1055D00020931A0450931D0440931C04F999FECFA4
:1055E00024E030E032BD21BDF89A80B5853038F135
:1055F000809163089091640897FF03C0909581950E
:105600009F4F6CE070E00E94CA5670932104609333
:10561000200480914E0890914F0897FF03C0909509
:1056200081959F4F6CE070E00E94CA5670931F04F2
:1056300060931E04609166077091670742C0F999F4
:10564000FECF32BD21BDF89A30B5F999FECF85E085
:1056500090E092BD81BDF89A20B5932F80E0820F33
:10566000911D90931F0480931E04F999FECF86E04C
:1056700090E092BD81BDF89A30B5F999FECF87E0F0
:1056800090E092BD81BDF89A20B5932F80E0820F03
:10569000911D9093210480932004F999FECF88E016
:1056A00090E092BD81BDF89A30B5F999FECF89E0BE
:1056B00090E092BD81BDF89A20B5732F60E0620F33
:1056C000711D882777FD8095982F0E9474556093EF
:1056D0002404709325048093260490932704109249
:1056E0004A0410924B0410924C0410924D041092F4
:1056F0004E0410924F0410925004109251041092D4
:1057000052041092530410925404109255041092B3
:105710005604109257041092580410925904109293
:105720005A0410925B0410925C0410925D04109273
:10573000140810921308109208081092070810928B
:1057400056081092550884E690E00E941E11809140
:10575000130390911403A0911503B0911603909335
:105760006907809368071092FA031092F903109268
:105770006204109263041092640410926504809194
:1057800066049091670490936904809368040E9472
:10579000B34682E390E09093DA038093D90360915B
:1057A000D90770E080E090E024EC39E040E050E080
:1057B0000E948B566856754C8F4F9F4F6093950390
:1057C0007093960380939703909398036091DA0700
:1057D00070E080E090E00E948B566856754C8F4FC9
:1057E0009F4F6093990370939A0380939B039093C8
:1057F0009C031092AE031092AD0360916604709109
:105800006704882777FD8095982F2AEA35E040E0E5
:1058100050E00E948B5660935F08709360088093FD
:105820006108909362081092700410926F0481E0F6
:10583000809301010E94AB538091AB0484608093FC
:10584000AB048FEF80935F098091DC0790E024E048
:10585000880F991F2A95E1F78093600980E2809371
:1058600061096091660470916704882777FD8095CF
:10587000982F2AEA35E040E050E00E948B56609372
:10588000690870936A0880936B0890936C08089578
:105890002F923F924F925F926F927F928F929F9240
:1058A000AF92BF92CF92DF92EF92FF920F931F932E
:1058B000DF93CF93CDB7DEB762970FB6F894DEBF14
:1058C0000FBECDBF0E94021F8091D7089091D808CB
:1058D000009729F001979093D8088093D7080E94E9
:1058E0008B47892B49F4809100018A3011F0843173
:1058F00011F4289A01C02898809100018C3010F48E
:10590000299A01C0299820918404309185043A8312
:10591000298380911608282F30E0C9010996498112
:105920005A818417950724F0C9010A969A838983BE
:1059300080917D04843608F06EC080910501882333
:1059400099F480910B0390910C038F5F9F4F61F44A
:1059500088E99AE39093DA038093D90380E09CE08E
:1059600090930C0380930B038091CD049091CE040F
:10597000009731F001979093CE048093CD0404C03A
:105980001092860410926C04809100018A3011F00C
:10599000843111F4289A01C028988091A90490912B
:1059A000AA04895E9340A0F18091C707E82FF0E038
:1059B000FA83E98381E080936C04A091AE07B0E0A4
:1059C000AA0FBB1FFD01EC56F84F11821082E09127
:1059D000AF072E2F30E0220F331FC9018C56984F8E
:1059E000FC0111821082A258B84F11961C921E928F
:1059F0002258384FD90111961C921E92E091B1079E
:105A0000F0E0EE0FFF1FE258F84F11821082F6C24D
:105A100010928604F3C280917D048D3808F4EEC2A2
:105A200010926C048091C80722E3829FC001112468
:105A30009093CE048093CD04E981FA81B9978CF0DC
:105A400080918604882369F08091A9049091AA042A
:105A5000FFEF8F3F9F0729F001969093AA04809350
:105A6000A9048091A9049091AA048F3F910509F09F
:105A700038F51092E7041092E8041092E9041092AD
:105A8000EA041092E3041092E4041092E5041092E8
:105A9000E6048A3F9105C9F481E08093C604109220
:105AA000DF041092E0041092E1041092E2041092DC
:105AB0005A0410925B0410925C0410925D0405C0BD
:105AC0008091AB0482608093AB04E091B007F0E07A
:105AD000EE0FFF1FE258F84F8081918181359105CB
:105AE0000CF4D9C180918604882309F0D4C1809137
:105AF000B107E82FF0E0EE0FFF1FE258F84F80816A
:105B000091818C3491050CF406C18091CC048F5F97
:105B10008093CC04893C08F4BEC1809100018C3094
:105B200010F4299801C0299A0E947F2A10928604B5
:105B30001092CC041092AA041092A9048091AE078E
:105B4000482F50E0FA01EE0FFF1FE258F84F808116
:105B50009181873491059CF4E091AF07F0E0EE0F5E
:105B6000FF1FE258F84F0190F081E02DF7FF03C0CE
:105B7000F095E195FF4FE734F1050CF46EC080918C
:105B8000AF07A82FB0E0FD01EE0FFF1FE258F84F5E
:105B9000808191818734910544F0FA01EE0FFF1F57
:105BA000E258F84F0190F081E02DFD01EE0FFF1F4C
:105BB000E258F84F808191818734910564F0FA01B1
:105BC000EE0FFF1FE258F84F8081918187349105D5
:105BD00014F022E001C021E0FD01EE0FFF1FE258AA
:105BE000F84F80819181863491055CF4FA01EE0FC3
:105BF000FF1FE258F84F80819181873491050CF0A6
:105C000023E0FD01EE0FFF1FE258F84F80819181E4
:105C10008A5B9F4F5CF4FA01EE0FFF1FE258F84FCA
:105C200080819181873491050CF024E0AA0FBB1F7D
:105C3000A258B84F8D919C918A5B9F4F5CF4440FA2
:105C4000551F4258584FFA01808191818634910541
:105C50000CF425E0822F0E943E03E091AF07F0E0B4
:105C6000EE0FFF1FE258F84F0190F081E02DF7FF93
:105C700003C0F095E195FF4F7E97B4F4E091AE0735
:105C8000F0E0EE0FFF1FE258F84F808191818A5BB0
:105C90009F4F54F481E080937B0688EE93E09093CD
:105CA000DA038093D903F7C00E94230346E56EEA26
:105CB00077E00E94B7038091B60780FF10C0809103
:105CC000170390911803875B934038F48091170372
:105CD000909118038E5E924010F40E940D160E945F
:105CE0007F2A0E9423030E94C0280E94E0478091DF
:105CF000C108882309F4CFC088EE93E00E94081100
:105D000088EE93E09093DA038093D90384EF91E0D7
:105D10000E940811C0C080819181855B9F4F0CF06B
:105D2000B8C08091CC048F5F8093CC04893C08F488
:105D3000B2C0809100018C3010F4299801C0299ADA
:105D4000F999FECF1FBA04E010E012BD01BD8FEF3C
:105D500080BD0FB6F894FA9AF99A0FBE1092860495
:105D60001092CC041092AA041092A9040E947F2AD7
:105D700020911E0430911F04F999FECF1FBA12BD65
:105D800001BDC90160E071E00E94CA5660BD0FB656
:105D9000F894FA9AF99A0FBEF999FECF1FBA85E0E6
:105DA00090E092BD81BDC90160E071E00E94CA56D9
:105DB00080BD0FB6F894FA9AF99A0FBE209120048C
:105DC00030912104F999FECF1FBA86E090E092BD90
:105DD00081BDC90160E071E00E94CA5660BD0FB686
:105DE000F894FA9AF99A0FBEF999FECF1FBA87E094
:105DF00090E092BD81BDC90160E071E00E94CA5689
:105E000080BD0FB6F894FA9AF99A0FBE2091240437
:105E1000309125044091260450912704F999FECF32
:105E20001FBA88E090E092BD81BDCA01B9010E940D
:105E30004155DC01CB0160E071E00E94CA5660BDB3
:105E40000FB6F894FA9AF99A0FBE20912404309173
:105E500025044091260450912704F999FECF1FBADA
:105E600089E090E092BD81BDCA01B9010E9441550F
:105E7000DC01CB0160E071E00E94CA5680BD0FB624
:105E8000F894FA9AF99A0FBE0E9423030E94C02840
:105E900002C01092CC04E091B007F0E0EE0FFF1FBB
:105EA000E258F84F808191818B5A9F4F0CF0A6C029
:105EB000E091B107F0E0EE0FFF1FE258F84F80814C
:105EC0009181855B9F4F0CF077C08091CB048F5FF1
:105ED0008093CB04893C08F471C0469A88EC809387
:105EE000CB0481E090E09093AA048093A90481E020
:105EF000809386041092DF041092E0041092E10473
:105F00001092E20410925A0410925B0410925C0406
:105F100010925D0410925E0410925F04109260046F
:105F20001092610410924A0410924B0410924C0497
:105F300010924D0410925204109253041092540483
:105F40001092550480912A0490912B04A0912C0466
:105F5000B0912D0480934E0490934F04A09350046D
:105F6000B09351048091320490913304A091340491
:105F7000B09135048093560490935704A09358042D
:105F8000B09359041092E7041092E8041092E904C7
:105F90001092EA041092E3041092E4041092E504D3
:105FA0001092E60480E090E00E9435498091AB04B5
:105FB00088608093AB0402C01092CB04E091B107DB
:105FC000F0E0EE0FFF1FE258F84F808191818C3492
:105FD000910594F08091CA048F5F8093CA04893C34
:105FE00068F046981092860488EC8093CA04109258
:105FF000AA041092A90402C01092CA0480917703E7
:106000008150809377038F5F29F080916C048823FF
:1060100009F4F0C20E947E258091AE07082F10E09F
:10602000000F111FF801E258F84F20813181809153
:10603000BD07A82EBB242A9DC0012B9D900D3A9D23
:10604000900D11244091BC045091BD049A01220F7F
:10605000331F240F351F820F931F64E070E00E94EE
:10606000CA567093BD046093BC040C56184FF801D7
:10607000808191810091BE0710E0AC01409FC0017A
:10608000419F900D509F900D1124860F971F909364
:10609000BD048093BC042091F7043091F804409132
:1060A000F3045091F4046C01C21AD30AC41AD50A3D
:1060B000D0927F04C0927E048091AF07E82EFF2427
:1060C000EE0CFF1CF701E258F84F80819181DC0152
:1060D000AA9DC001AB9D900DBA9D900D11244091D9
:1060E000BA045091BB049A01220F331F240F351FAD
:1060F000820F931F64E070E00E94CA567093BB0445
:106100006093BA04E4E9F7E0EE0EFF1ED7018D912B
:106110009C91FC01E09FC001E19F900DF09F900DCC
:106120001124860F971F9093BB048093BA0420918B
:10613000F9043091FA044091F5045091F6044C01B1
:10614000821A930A841A950A90928104809280049C
:10615000E091B107F0E0EE0FFF1FE258F84F8081A9
:10616000918100271127081B190B109383040093BA
:106170008204E091B007F0E0EE0FFF1FE258F84F05
:10618000E080F18028E730E0E20EF31EF092850413
:10619000E09284046091A60370E080E090E00E94A9
:1061A000725520E030E040E251E40E94715420E05A
:1061B00030E040E85CE30E94285660935A087093F0
:1061C0005B0880935C0890935D086091A70370E082
:1061D00080E090E00E94725520E030EE4BE256E401
:1061E0000E94D9546093390870933A0880933B0811
:1061F00090933C088091870680FF54C080916D0881
:10620000813808F44FC080918006992787FD9095CA
:10621000AC01A49EC001A59E900DB49E900D1124CA
:10622000C80ED91ED0927F04C0927E048091810650
:10623000992787FD9095DC01AA9EC001AB9E900D29
:10624000BA9E900D1124880E991E9092810480921E
:10625000800480918206992787FD9095080F191F69
:1062600010938304009382042091BB0730E0809157
:106270008406992787FD9095FC012E9FC0012F9FD2
:10628000900D3E9F900D11249093AE038093AD032B
:106290008091830690E08E159F0524F490938504E9
:1062A00080938404809184049091850497FF04C0B6
:1062B00010928504109284048091B60782FF0CC06E
:1062C00080E090E0A0E0B0E08093390890933A0835
:1062D000A0933B08B0933C0820E030E040E050E061
:1062E00060915A0870915B0880915C0890915D08FC
:1062F0000E94D554882364F480E090E0A0E0B0E0F0
:1063000080935A0890935B08A0935C08B0935D0853
:1063100020E030E040E050E06091390870913A08A8
:1063200080913B0890913C080E94D554882364F4E6
:1063300080E090E0A0E0B0E08093390890933A08C4
:10634000A0933B08B0933C0840917E0410917F04D9
:10635000E091A504F091A604842F912F64E070E0F1
:106360000E94CA56CB0177FF03C0909581959F4F3D
:10637000E817F907DCF4842F912F9C0137FF03C045
:10638000309521953F4FC9019595879595958795AE
:106390009093A6048093A5048536910564F084E665
:1063A00090E09093A6048093A50405C03197F093E4
:1063B000A604E093A5044091800410918104E0912B
:1063C000A704F091A804842F912F64E070E00E944C
:1063D000CA56CB0177FF03C0909581959F4FE81770
:1063E000F907DCF4842F912F9C0137FF03C030950F
:1063F00021953F4FC90195958795959587959093E0
:10640000A8048093A7048536910564F084E690E0A3
:106410009093A8048093A70405C03197F093A80433
:10642000E093A70480916C04882341F01092A604A5
:106430001092A5041092A8041092A7048091AF07AF
:10644000A82FB0E0FD01EE0FFF1FE258F84F2081AA
:1064500031818091D507482F50E04217530744F40B
:106460008091F30782FF04C081E0809391040FC004
:10647000AA0FBB1FA258B84F2D913C918091D6070F
:10648000481B51092417350714F410929104809188
:10649000AF07A82FB0E0FD01EE0FFF1FE258F84F45
:1064A000208131818091D507482F50E08827992796
:1064B000841B950B2817390744F48091F30783FF59
:1064C00004C081E08093920414C0809192048823D8
:1064D00081F0AA0FBB1FA258B84F2D913C9180911B
:1064E000D60790E0841B950B8217930714F4109243
:1064F00092048091AE07A82FB0E0FD01EE0FFF1FC0
:10650000E258F84F208131818091D507482F50E023
:106510004217530744F48091F30780FF04C081E0E1
:106520008093940413C080919404882379F0AA0F77
:10653000BB1FA258B84F2D913C918091D607481BA4
:1065400051092417350714F4109294048091AE0772
:10655000A82FB0E0FD01EE0FFF1FE258F84F208199
:1065600031818091D507482F50E088279927841BD7
:10657000950B2817390744F48091F30781FF04C075
:1065800081E08093930414C080919304882381F068
:10659000AA0FBB1FA258B84F2D913C918091D607EE
:1065A00090E0841B950B8217930714F410929304C8
:1065B00080919104882321F480919204882321F012
:1065C00081E08093900402C0109290048091940422
:1065D000882321F480919304882351F081E08093F3
:1065E0008F0410929004109291041092920402C0B1
:1065F00010928F0480919004882321F480918F045D
:10660000882351F08091D40790E029813A81821744
:10661000930714F49A83898380916C04882341F151
:10662000109283041092820410927F0410927E04D0
:10663000109281041092800480E090E0A8ECBFE307
:1066400080935A0890935B08A0935C08B0935D0810
:106650008BE09CEBA2E3BCE38093390890933A086B
:10666000A0933B08B0933C081092900410928F04C2
:1066700080912A0890912B08A0912C08B0912D08A8
:1066800020912A0430912B0440912C0450912D0428
:10669000820F931FA41FB51F80932A0890932B0885
:1066A000A0932C08B0932D08809131089091320866
:1066B000A0913308B0913408209132043091330412
:1066C0004091340450913504820F931FA41FB51FCD
:1066D0008093310890933208A0933308B093340824
:1066E00080911C0890911D08A0911E08B0911F0870
:1066F00020912E0430912F044091300450913104A8
:10670000820F931FA41FB51F80931C0890931D0830
:10671000A0931E08B0931F0880910D0890910E0859
:10672000A0910F08B09110082091360430913704E1
:106730004091380450913904820F931FA41FB51F54
:1067400080930D0890930E08A0930F08B093100843
:1067500080918F04882329F480919004882309F480
:106760005CC010923A0410923B0410923C041092C8
:106770003D0410923E0410923F0410924004109287
:10678000410410922A0810922B0810922C081092A3
:106790002D0810923108109232081092330810928E
:1067A000340810921C0810921D0810921E081092B6
:1067B0001F0810920D0810920E0810920F081092E8
:1067C000100880914A0490914B04A0914C04B09120
:1067D0004D0480934E0490934F04A0935004B093C3
:1067E00051048091520490915304A0915404B091AB
:1067F00055048093560490935704A0935804B09383
:1068000059041092FC031092FB0310928E04109214
:106810008D0410928C0410928B0480918F04882335
:1068200009F000C280919004882309F0FBC12091F7
:106830005F0960912A0470912B0480912C0490913F
:106840002D04609032047090330480903404909052
:1068500035044091A5045091A604588B4F87209091
:106860004E0830904F0840906308509064082F3FC6
:1068700009F4DCC0E090C207FF2400E010E0A22E83
:10688000BB24A7FCB094CB2CDB2CA80197010E9461
:10689000FF56C101AA2797FDA095BA2F281B390BD7
:1068A0004A0B5B0BCA01B901A60195010E948B56E8
:1068B00020E032E040E050E00E94FF562B873C870A
:1068C0004D875E872F83388749875A87C401B30174
:1068D000A80197010E94FF56C201AA2797FDA09523
:1068E000BA2F281B390B4A0B5B0BCA01B901A60151
:1068F00095010E948B5620E032E040E050E00E947B
:10690000FF56122F032FF42EE52E222E332E442E67
:10691000552E8F859889813491053CF48091A70488
:106920009091A80481349105D4F06B857C858D8588
:106930009E8522E030E040E050E00E94FF562F8329
:10694000388749875A87612F702F8F2D9E2D22E01F
:1069500030E040E050E00E94FF5619012A01E0912A
:10696000B107F0E0EE0FFF1FE258F84F0190F08101
:10697000E02DF7FF03C0F095E195FF4F7A97C4F043
:106980006F81788589859A8523E030E040E050E08A
:106990000E94FF562F83388749875A87B101C20169
:1069A00023E030E040E050E00E94FF5619012A0148
:1069B00060916109662E772467FC7094872C972C70
:1069C0002F81388549855A85C901DA019C01AD01BD
:1069D000621673068406950614F4A4019301862FAB
:1069E000992787FD9095909581959F4F7C01002771
:1069F000F7FC0095102F59016A012E153F0540073D
:106A0000510714F457016801C101D20168167906D3
:106A10008A069B0614F4D401C3018E159F05A007B6
:106A2000B1070CF4D7C07C018D01D4C0E090C2073F
:106A3000FF2400E010E0A80197010E94FF565901D1
:106A40006A01C101AA2797FDA095BA2FA81AB90A11
:106A5000CA0ADB0AC401B301A80197010E94FF56CC
:106A600079018A01C201AA2797FDA095BA2FE81AD9
:106A7000F90A0A0B1B0BC601B50120E130E040E02A
:106A800050E00E94FF56922E832E742E652E822F88
:106A9000932FA42FB52F5C016D01C801B70120E130
:106AA00030E040E050E00E94FF56222E532E442E4C
:106AB000352E822F932FA42FB52F7C018D01AF850A
:106AC000B889A134B1053CF48091A7049091A80441
:106AD00081349105E4F0692D782D872D962D23E0E2
:106AE00030E040E050E00E94FF56C901DA015C014D
:106AF0006D01622D752D842D932D23E030E040E053
:106B000050E00E94FF56C901DA017C018D01E0913D
:106B1000B107F0E0EE0FFF1FE258F84F0190F0814F
:106B2000E02DF7FF03C0F095E195FF4F7A97C4F091
:106B3000C601B50123E030E040E050E00E94FF567E
:106B4000C901DA015C016D01C801B70123E030E041
:106B500040E050E00E94FF56C901DA017C018D013E
:106B6000B1E2AB16B104C104D10434F040E2A42E6A
:106B7000B12CC12CD12C11C0E0EEAE16EFEFBE0649
:106B8000EFEFCE06EFEFDE0644F430EEA32E3FEF3C
:106B9000B32E3FEFC32E3FEFD32EF1E2EF16F104F9
:106BA0000105110534F020E2E22EF12C012D112D0A
:106BB00011C020EEE2162FEFF2062FEF02072FEFA3
:106BC000120744F490EEE92E9FEFF92E9FEF092F64
:106BD0009FEF192F80914A0490914B04A0914C048F
:106BE000B0914D048A199B09AC09BD0980934A04F0
:106BF00090934B04A0934C04B0934D0480915204A5
:106C000090915304A0915404B09155048E199F099A
:106C1000A00BB10B8093520490935304A09354049F
:106C2000B09355048091FB039091FC038F3F910535
:106C300009F008F4A0C580918F04882309F01DC5D0
:106C400080919004882309F018C580916E048823F0
:106C500009F013C560912A0870912B0880912C08C7
:106C600090912D0820E031E040E050E00E94FF5676
:106C700059016A0120932A0830932B0840932C086D
:106C800050932D086091310870913208809133083B
:106C90009091340820E031E040E050E00E94FF563F
:106CA00039014A0120933108309332084093330868
:106CB00050933408E090C207FF2400E010E02091D8
:106CC0003A0430913B0440913C0450913D04C8018A
:106CD000B7010E948B5620E031E040E050E00E9476
:106CE000FF562B833C834D835E8320933A0430937D
:106CF0003B0440933C0450933D0420913E0430916A
:106D00003F044091400450914104C801B7010E94E2
:106D10008B5620E031E040E050E00E94FF56190120
:106D20002A0120933E0430933F0440934004509343
:106D30004104609142047091430480914404909115
:106D4000450420E031E040E050E00E94FF562093EF
:106D500042043093430440934404509345048B8190
:106D60009C81AD81BE81A81AB90ACA0ADB0AA09229
:106D7000D304B092D404C092D504D092D604E0904B
:106D8000DB07FF2400E010E0C601B501A801970170
:106D90000E94FF5659016A012093C2043093C30434
:106DA0004093C4045093C50462187308840895087E
:106DB0006092CF047092D0048092D1049092D20459
:106DC000C401B301A80197010E94FF5679018A010D
:106DD0002093BE043093BF044093C0045093C10479
:106DE000C601B50120E031E040E050E00E94FF56CE
:106DF00030938E0420938D04C801B70120E031E068
:106E000040E050E00E94FF5630938C0420938B04A6
:106E10008091A5049091A60481349105C4F48091D9
:106E2000A7049091A804813491058CF4E091B107F6
:106E3000F0E0EE0FFF1FE258F84F0190F081E02DD7
:106E4000F7FF03C0F095E195FF4F7A97E4F080914A
:106E50005F098F3FC1F480918D0490918E0462E0B0
:106E600070E00E94CA5670938E0460938D048091E6
:106E70008B0490918C0462E070E00E94CA5670937B
:106E80008C0460938B0460911C0870911D088091A4
:106E90001E0890911F0820E031E040E050E00E9481
:106EA000FF5620931C0830931D0840931E085093F2
:106EB0001F0860910D0870910E0880910F08909145
:106EC000100820E031E040E050E00E94FF5620939F
:106ED0000D0830930E0840930F0850931008E0906F
:106EE0002E04F0902F040091300410913104809111
:106EF0002A0490912B04A0912C04B0912D04E81A3F
:106F0000F90A0A0B1B0BE092DB04F092DC040093FD
:106F1000DD041093DE042091360430913704409153
:106F20003804509139048091320490913304A09137
:106F30003404B0913504281B390B4A0B5B0B2093AA
:106F4000D7043093D8044093D9045093DA04E092E4
:106F5000D304F092D4040093D5041093D604209364
:106F6000CF043093D0044093D1045093D204809145
:106F70004E0490914F04A0915004B09151048E1989
:106F80009F09A00BB10B80934E0490934F04A093E4
:106F90005004B09351048091560490915704A091ED
:106FA0005804B0915904821B930BA40BB50B80932A
:106FB000560490935704A0935804B09359048091B9
:106FC0006F04909170048138910594F080911804B9
:106FD000909119040196909319048093180480915C
:106FE00035089091360801969093360880933508BD
:106FF00080916F049091700480589F4F94F4809119
:10700000180490911904019790931904809318041F
:1070100080913508909136080197909336088093B7
:1070200035081092700410926F0480916908909155
:107030006A08A0916B08B0916C088031E7EF9E0759
:10704000E7E0AE07E0E0BE0764F08051974FA7404D
:10705000B0408093690890936A08A0936B08B0933E
:107060006C088091690890916A08A0916B08B091B2
:107070006C08B7FF0CC0805F9840A84FBF4F80934B
:10708000690890936A08A0936B08B0936C0880918C
:1070900000018A3011F0843111F4289801C0289A37
:1070A00081E090E09093B9048093B8048091B0049B
:1070B0009091B104A091B204B091B30420912A0838
:1070C00030912B0840912C0850912D08821B930B76
:1070D000A40BB50B815E914BAF4FBF4F8F539C49B3
:1070E000A040B04028F08091600981330CF4D7C0F3
:1070F0002091D3043091D4044091D5045091D6040A
:10710000213080E1380780E0480780E058070CF420
:1071100053C08091B704882309F44AC0DA01C90139
:107120000CE0B595A795979587950A95D1F70196A7
:107130009093B9048093B804CA01B90128E030E003
:1071400040E050E00E94FF56C901DA018093C2047A
:107150009093C304A093C404B093C5048958934189
:10716000A040B04064F088E893E1A0E0B0E08093F4
:10717000C2049093C304A093C404B093C504609167
:10718000C2047091C3048091C4049091C50420E0AE
:1071900031E040E050E00E94FF5680918D049091D4
:1071A0008E04820F931F90938E0480938D0406C0EB
:1071B00081E08093B70402C01092B7044091D304D9
:1071C0005091D4046091D5047091D6044030F0EF12
:1071D0005F07FFEF6F07FFEF7F070CF05DC0809147
:1071E000B604882309F454C088279927DC01841B3E
:1071F000950BA60BB70B1CE0B595A79597958795B2
:107200001A95D1F72091B8043091B904280F391F8D
:107210003093B9042093B804CB01BA0128E030E0E0
:1072200040E050E00E94FF56C901DA018093C20499
:107230009093C304A093C404B093C50488579C4E94
:10724000AF4FBF4F64F488E79CEEAFEFBFEF809382
:10725000C2049093C304A093C404B093C504609186
:10726000C2047091C3048091C4049091C50420E0CD
:1072700031E040E050E00E94FF5680918D049091F3
:107280008E04820F931F90938E0480938D0411C0FF
:1072900081E08093B6040DC01092B6040AC010922B
:1072A000B9041092B80488EE93E09093940380930D
:1072B00093038091DC07282F30E08091B8049091EF
:1072C000B9042817390724F43093B9042093B8047B
:1072D000409160098091B8049091B904A4E0880FAE
:1072E000991FAA95E1F7242F332727FD30952817FA
:1072F00039077CF4242F47FD215F25952595259599
:107300002595822F992787FD90959093B9048093B6
:10731000B8048091D3049091D404A091D504B09185
:10732000D60481509440A040B04074F08091140481
:10733000909115042091B8043091B904820F931FE5
:1073400090931504809314048091D3049091D404F5
:10735000A091D504B091D60480509C4FAF4FBF4F41
:1073600074F480911404909115042091B804309124
:10737000B904821B930B909315048093140481E04D
:1073800090E09093B9048093B8041092BE041092D8
:10739000BF041092C0041092C1048091AC0490917B
:1073A000AD04A091AE04B091AF04209131083091AA
:1073B00032084091330850913408821B930BA40B80
:1073C000B50B815E914BAF4FBF4F8F539C49A0408F
:1073D000B04028F08091600981330CF4DDC0E0906A
:1073E000CF04F090D0040091D1041091D20481E038
:1073F000E81680E1F80680E0080780E018070CF442
:1074000058C08091B504882309F44FC0A8019701A2
:10741000FCE05595479537952795FA95D1F78091DA
:10742000B8049091B904820F931F9093B90480938C
:10743000B804C801B70128E030E040E050E00E9405
:10744000FF56C901DA018093BE049093BF04A09354
:10745000C004B093C10489589341A040B04064F087
:1074600088E893E1A0E0B0E08093BE049093BF046D
:10747000A093C004B093C1046091BE047091BF0496
:107480008091C0049091C10420E031E040E050E0E0
:107490000E94FF5680918B0490918C04820F931F61
:1074A00090938C0480938B0406C081E08093B50494
:1074B00002C01092B5044091CF045091D004609165
:1074C000D1047091D2044030F0EF5F07FFEF6F07F7
:1074D000FFEF7F070CF05DC08091B404882309F4AE
:1074E00054C088279927DC01841B950BA60BB70B8A
:1074F000ECE0B595A79597958795EA95D1F72091FA
:10750000B8043091B904280F391F3093B90420937F
:10751000B804CB01BA0128E030E040E050E00E941E
:10752000FF56C901DA018093BE049093BF04A09373
:10753000C004B093C10488579C4EAF4FBF4F64F452
:1075400088E79CEEAFEFBFEF8093BE049093BF043B
:10755000A093C004B093C1046091BE047091BF04B5
:107560008091C0049091C10420E031E040E050E0FF
:107570000E94FF5680918B0490918C04820F931F80
:1075800090938C0480938B0411C081E08093B404A9
:107590000DC01092B4040AC01092B9041092B8043D
:1075A00088EE93E090939403809393038091DC079B
:1075B000282F30E08091B8049091B904281739073A
:1075C00024F43093B9042093B80440916009809169
:1075D000B8049091B90454E0880F991F5A95E1F7C7
:1075E000242F332727FD3095281739077CF4242FC3
:1075F00047FD215F2595259525952595822F99276E
:1076000087FD90959093B9048093B8048091CF043E
:107610009091D004A091D104B091D20481509440B3
:10762000A040B04074F0809116049091170420910E
:10763000B8043091B904820F931F9093170480937C
:1076400016048091CF049091D004A091D104B09100
:10765000D20480509C4FAF4FBF4FCCF480911604A2
:10766000909117042091B8043091B904821B930BB8
:1076700090931704809316040AC010928C04109201
:107680008B0410928E0410928D0410926E0420E0F0
:1076900030E040E050E06091390870913A08809104
:1076A0003B0890913C080E94D554882341F41092E5
:1076B0008C0410928B0410928E0410928D04809191
:1076C0002A0890912B08A0912C08B0912D08809346
:1076D000B0049093B104A093B204B093B30480912A
:1076E000310890913208A0913308B091340880930A
:1076F000AC049093AD04A093AE04B093AF04109289
:107700003A0410923B0410923C0410923D041092F3
:107710003E0410923F0410924004109241041092D3
:1077200042041092430410924404109245041092B3
:107730002A0810922B0810922C0810922D081092F3
:1077400031081092320810923308109234081092C7
:107750001C0810921D0810921E0810921F0810920B
:107760000D0810920E0810920F0810921008109237
:10777000FC031092FB038091DE03882309F481C18E
:107780001092DE0320914E0830914F083093180874
:107790002093170837FF08C088279927821B930B6F
:1077A000909318088093170820916308309164081B
:1077B00037FF03C0309521953F4F30934408209305
:1077C00043088091170890911808843691050CF0B1
:1077D00046C1243631050CF042C120916604309137
:1077E00067048091DF039091E003281B390B37FF7A
:1077F00003C0309521953F4F263031050CF039C13B
:1078000080918204909183044396879708F097C0F3
:1078100080917304909174048F3F91052CF401962C
:107820009093740480937304809173049091740412
:1078300003970CF498C060912408709125088091FA
:107840002608909127082AEA35E040E050E00E949F
:10785000FF56309318082093170820916604309142
:1078600067048091AA079091AB07281B390B3093CE
:107870004408209343085FEF2C34350734F428592B
:107880003E4F3093440820934308809143089091E1
:107890004408853B910534F0885691409093440804
:1078A000809343088091170890911808209143080D
:1078B00030914408821B930B9093440880934308B3
:1078C000059734F084E090E0909344088093430857
:1078D00080914308909144088C5F9F4F34F48CEF63
:1078E0009FEF9093440880934308809117089091EC
:1078F000180897FF03C0909581959F4F02979CF1C0
:107900001092240810922508109226081092270839
:1079100080916604909167049093AB078093AA07C7
:1079200080911804909119042091430830914408E3
:10793000821B930B909319048093180414C08091B8
:107940006604909167049093AB078093AA07109206
:107950007404109273041092240810922508109257
:1079600026081092270881E08093710460916908CD
:1079700070916A0880916B0890916C082AEA35E052
:1079800040E050E00E94FF5679018A01E0926908C8
:10799000F0926A0800936B0810936C0820916604BB
:1079A000309167042E193F09309318082093170867
:1079B000C9010197833B910590F0243B310534F4D4
:1079C000C9018C549F4F843B910530F40894E10821
:1079D000F1080109110908C02C543F4F6CF40894B8
:1079E000E11CF11C011D111DE0926908F0926A086A
:1079F00000936B0810936C088091690890916A0855
:107A0000A0916B08B0916C08B7FF0CC088599E4FCD
:107A1000AF4FBF4F8093690890936A08A0936B089B
:107A2000B0936C086091690870916A0880916B0846
:107A300090916C0828E631E040E050E00E94FF564B
:107A40002AEA35E040E050E00E948B5660936908D6
:107A500070936A0880936B0890936C080AC0109228
:107A60007104109224081092250810922608109292
:107A7000270880916604909167049093E0038093B7
:107A8000DF03E091AE07F0E0EE0FFF1FE258F84F82
:107A9000208131818091660890E037FF03C03095E6
:107AA00021953F4F28173907D4F5E091AF07F0E053
:107AB000EE0FFF1FE258F84F0190F081E02DF7FF25
:107AC00003C0F095E195FF4FE817F90744F5809161
:107AD000D7089091D808892B11F1909111089B3A01
:107AE00050F08091B60785FF06C080917204833004
:107AF00061F084E00EC09A3A90F48091B60785FF59
:107B00000EC080917204843019F41092720403C084
:107B100083E0809372048091720490E008C08091A9
:107B20007204882331F01092720480E090E00E9489
:107B300035498091C2089091C308892B29F0809122
:107B4000C7048C3009F44298809182049091830498
:107B500097FF03C0909581959F4F40976CF088EEFA
:107B600093E090939403809393038091B60784FDF0
:107B700003C081E08093C604F090BF07C0908204E8
:107B8000D0908304B601882777FD8095982F2F2DFC
:107B900030E040E050E00E948B56F601D7FE04C072
:107BA000EE27FF27EC19FD099F01442737FD40957B
:107BB000542F0E948B5620E032E040E050E00E94BB
:107BC000FF5689019A018F2D90E0FC01EC9DC001C8
:107BD000ED9D900DFC9D900D112464E070E00E94DD
:107BE000CA56600F711F882777FD8095982F609384
:107BF000DF047093E0048093E1049093E204209109
:107C00005A0430915B0440915C0450915D04261B42
:107C1000370B480B590B20935A0430935B04409365
:107C20005C0450935D042155334C4040504064F057
:107C300080E593ECA0E0B0E080935A0490935B045D
:107C4000A0935C04B0935D0480915A0490915B040E
:107C5000A0915C04B0915D04805B9C43AF4FBF4F2B
:107C600064F480EB9CE3AFEFBFEF80935A049093F2
:107C70005B04A0935C04B0935D048091710488233D
:107C800071F08091C604882351F080916604909130
:107C9000670490936904809368041092C6048091ED
:107CA000A503282F30E030931808209317088091FF
:107CB0007104882341F180916A0490916B04AC01B6
:107CC000249FC001259F900D349F900D112460E2E8
:107CD00070E00E94CA56882777FD8095982F2091E2
:107CE0005A0430915B0440915C0450915D04260F6E
:107CF000371F481F591F20935A0430935B04409349
:107D00005C0450935D048091C70481508093C70444
:107D10008F5F09F0F4C088E18093C7048091D90394
:107D20009091DA0320910B0330910C03822393236B
:107D3000892B29F488B194E0892788B907C08091FC
:107D40008604882311F0429A01C04298E090C2074D
:107D5000FF2400E010E060912A0470912B048091D0
:107D60002C0490912D04A80197010E94FF56309396
:107D7000230720932207609132047091330480918D
:107D8000340490913504A80197010E94FF56309366
:107D900025072093240780914E0890914F089093D7
:107DA0002707809326078091630890916408909339
:107DB0002907809328078091550890915608909341
:107DC0002B0780932A0780918704909188049093D1
:107DD0002D0780932C0780916604909167049093FF
:107DE000330780933207809111039091120390938F
:107DF00035078093340760915A0470915B04809139
:107E00005C0490915D0420E830E040E050E00E9486
:107E1000FF563093370720933607609169087091B9
:107E20006A0880916B0890916C082AEA35E040E07E
:107E300050E00E94FF563093390720933807809115
:107E40004108909142089093510780935007809188
:107E5000460890914708909353078093520780916A
:107E6000190890911A0890935507809354078091B0
:107E7000E0089091E108909357078093560780910E
:107E8000E2089091E30890935907809358078091F6
:107E9000E4089091E50890935B0780935A078091DE
:107EA000E9089091EA089C0103E0220F331F0A952C
:107EB000E1F7880F991F280F391F8091C208909110
:107EC000C308280F391F8091720442E3849FC001C8
:107ED0001124280F391F30935D0720935C07809190
:107EE000F3049091F40490935F0780935E07809170
:107EF000F5049091F6049093610780936007809158
:107F00008F048823A9F060911308709114088827C2
:107F100077FD8095982F0E94745520915A083091D2
:107F20005B0840915C0850915D080E94285632C061
:107F3000E0901308F090140860912A0470912B04CB
:107F400080912C0490912D040E9474552091390841
:107F500030913A0840913B0850913C080E942856C5
:107F60005B016C010027F7FC0095102FC801B701D9
:107F70000E94745520915A0830915B0840915C082A
:107F800050915D080E9428569B01AC01C601B501C5
:107F90000E9471540E944155709314086093130815
:107FA000809190048823A9F06091070870910808D7
:107FB000882777FD8095982F0E94745520915A0844
:107FC00030915B0840915C0850915D080E942856F2
:107FD00032C0E0900708F090080860913204709178
:107FE000330480913404909135040E94745520919B
:107FF000390830913A0840913B0850913C080E9462
:1080000028565B016C010027F7FC0095102FC80172
:10801000B7010E94745520915A0830915B08409135
:108020005C0850915D080E9428569B01AC01C60176
:10803000B5010E9471540E944155709308086093E5
:1080400007086091550870915608882777FD80953C
:10805000982F0E9474557B018C0160915A08709191
:108060005B0880915C0890915D089B01AC010E94C7
:1080700071549B01AC01C801B7010E9428567B01D5
:108080008C0160914604709147048091480490915E
:1080900049040E9474552091390830913A08409162
:1080A0003B0850913C080E94285620E030E040E018
:1080B0005FE30E9428569B01AC01C801B7010E94F2
:1080C00071540E94415570935608609355088091F1
:1080D00013089091140890934D0780934C0780915A
:1080E00007089091080890934F0780934E0780915E
:1080F0001308909114088150904434F080E090E48B
:108100009093140880931308809113089091140899
:108110008050904C34F480E090EC9093140880935D
:10812000130880910708909108088150904434F01A
:1081300080E090E4909308088093070880910708F6
:10814000909108088050904C34F480E090EC90932B
:10815000080880930708809155089091560881502F
:10816000904434F080E090E4909356088093550852
:1081700080915508909156088050904C34F480E0DE
:1081800090EC9093560880935508C980DA80CC0C07
:10819000DD1CCC0CDD1C8091B60780FF12C181FF75
:1081A0004BC08091F3079091A20384FF04C09155C6
:1081B0009B3318F03AC09233C0F58091AF038150E1
:1081C0008093AF038F5F09F052C0809117039091A5
:1081D0001803895E934020F09091F8039A500AC0EA
:1081E00080911703909118038436910588F490913B
:1081F000F803965F9093F80380917107891B87BD00
:108200008CE291E09093DA038093D9038AEF11C056
:108210008091870490918804449790938A04809376
:10822000890410926D0481E004C081E080936D04A4
:1082300088EC8093AF031BC08091A2032091AD0313
:108240003091AE03280F311D8091BB0790E0AC0147
:10825000249FC001259F900D349F900D11244497B9
:1082600090938A048093890481E080936D048091C7
:108270006C04882321F010928A04109289042091C2
:108280008704309188044091890450918A044217F0
:1082900053070CF096C080916D04882309F491C0B7
:1082A0008091A30390E0241B350BDC01A29FC00149
:1082B000A39F900DB29F900D112464E070E00E9486
:1082C000CA564B01A090F903B090FA036091620482
:1082D000709163048091640490916504E090A4031C
:1082E000FF2400E010E020E830E040E050E00E9491
:1082F000FF56C801B7010E948B5620E230E040E0F3
:1083000050E00E94FF56F901BEEF283E3B0714F4EF
:10831000E8EEFEEF8091C8049091C9049C01A4E0AE
:10832000220F331FAA95E1F7281B390BC50162E024
:1083300070E00E94CA56261B370B28193909CF0155
:10834000E1E089319E0714F088E191E0281B390BA8
:10835000C9018C0D9D1D60E170E00E94CA567093AA
:10836000C9046093C8042091B70730E0220F331F7F
:10837000220F331F62177307ACF4C216D30624F022
:108380003093C9042093C8048091B70790E0880F08
:10839000991F880F991FC816D90624F4D092C904D2
:1083A000C092C8048091C8049091C904C816D90627
:1083B00024F4D092C904C092C804C090C804D090DC
:1083C000C9048091540890E04497880F991F880F42
:1083D000991F46018C159D050CF44C0190923107B4
:1083E0008092300700915508109156086091DF0483
:1083F0007091E0048091E1049091E2042CEF3FEF52
:108400004FEF5FEF0E948B56060F171FF1EA8F1692
:108410009104A4F0940135952795021713070CF4E5
:108420009801C40162E070E00E94CA56709561959F
:108430007F4F261737077CF49B010DC0C8012FEF33
:10844000003B120714F480EB9FEF9C0181359105EE
:1084500014F020E530E08091540890E0880F991FD7
:10846000880F991FAC0148195909421753070CF49A
:108470009A01A401481B590B3901241735070CF444
:108480003A01809113089091140840907E04509016
:108490007F04841995099093290880932808E09017
:1084A0003908F0903A0800913B0810913C0820E010
:1084B00030E040E050E0C801B7010E94D554882365
:1084C000D1F16091E7047091E8048091E904909102
:1084D000EA040E9474555B016C0160912A0470915A
:1084E0002B0480912C0490912D040E947455A801B6
:1084F00097010E9428567B018C01B201882777FDE5
:108500008095982F0E9474559B01AC01C801B7015A
:108510000E9470549B01AC01C601B5010E947154C8
:108520000E9441556093E7047093E8048093E90446
:108530009093EA041CC02091280830912908442710
:1085400037FD4095542F8091E7049091E804A09165
:10855000E904B091EA04820F931FA41FB51F809312
:10856000E7049093E804A093E904B093EA048091AF
:10857000E7049091E804A091E904B091EA048150E5
:108580009A4FA040B04064F080E09AEFA0E0B0E0E5
:108590008093E7049093E804A093E904B093EA047D
:1085A0008091E7049091E804A091E904B091EA0475
:1085B00080509640AF4FBF4F64F480E096E0AFEF3D
:1085C000BFEF8093E7049093E804A093E904B0938D
:1085D000EA046091280870912908882777FD809522
:1085E000982F0E9474557B018C016091E704709173
:1085F000E8048091E9049091EA040E947455209166
:108600009D0330919E0340919F035091A0030E94CF
:1086100028569B01AC01C801B7010E9471540E9409
:1086200041558B01C30177FE04C08827992786191D
:10863000970995958795880D991D1C01442437FC51
:108640004094542C2091AC0330E040E050E0C20153
:10865000B1010E948B5620E430E040E050E00E94DF
:10866000FF56A901622F232F041715071CF4C80118
:10867000602F292FEE27FF27E41BF50B862F922F63
:108680008C010E171F070CF48F01F301E80DF91D83
:10869000CF01800F911F64E070E00E94CA5677FFFF
:1086A00003C060E070E007C08091540890E0861736
:1086B00097070CF4BC018091160890E068177907C1
:1086C0000CF4BC0160930908CF01801B910B64E09E
:1086D00070E00E94CA5677FF03C060E070E007C0F8
:1086E0008091540890E0861797070CF4BC018091A4
:1086F000160890E0681779070CF4BC016093120823
:10870000809107089091080820918004309181049D
:108710003A8B298B821B930B909306088093050854
:10872000E0903908F0903A0800913B0810913C081D
:1087300020E030E040E050E0C801B7010E94D5548D
:108740008823E1F16091E3047091E4048091E504F1
:108750009091E6040E9474555B016C0160913204B3
:108760007091330480913404909135040E947455C3
:10877000A80197010E9428567B018C0149895A89DA
:10878000BA01882777FD8095982F0E9474559B0128
:10879000AC01C801B7010E9470549B01AC01C60135
:1087A000B5010E9471540E9441556093E304709397
:1087B000E4048093E5049093E6041CC0209105082E
:1087C00030910608442737FD4095542F8091E304EB
:1087D0009091E404A091E504B091E604820F931F08
:1087E000A41FB51F8093E3049093E404A093E504D1
:1087F000B093E6048091E3049091E404A091E50431
:10880000B091E60481509A4FA040B04064F080E0FF
:108810009AEFA0E0B0E08093E3049093E404A09387
:10882000E504B093E6048091E3049091E404A09100
:10883000E504B091E60480509640AF4FBF4F64F41A
:1088400080E096E0AFEFBFEF8093E3049093E40401
:10885000A093E504B093E6046091050870910608C2
:10886000882777FD8095982F0E9474557B018C0195
:108870006091E3047091E4048091E5049091E60432
:108880000E94745520919D0330919E0340919F0357
:108890005091A0030E9428569B01AC01C801B7016A
:1088A0000E9471540E9441557B018C012091AC03C0
:1088B00030E040E050E0C201B1010E948B5620E45C
:1088C00030E040E050E00E94FF56C901422F232FC4
:1088D000E816F90614F44E2D2F2D66277727681B0E
:1088E000790B842F922FFC01E617F7070CF4FB019C
:1088F000C401861997098E0F9F1F64E070E00E94E3
:10890000CA5677FF03C060E070E007C0809154084A
:1089100090E0861797070CF4BC018091160890E050
:10892000681779070CF4BC0160934A088E1A9F0AF5
:10893000C4018619970964E070E00E94CA5677FF67
:1089400003C060E070E007C08091540890E0861793
:1089500097070CF4BC018091160890E0681779071E
:108960000CF4BC0160933D0862960FB6F894DEBF2C
:108970000FBECDBFCF91DF911F910F91FF90EF9070
:10898000DF90CF90BF90AF909F908F907F906F902F
:108990005F904F903F902F90089588EE8093B60798
:1089A0003EE13093B7078BEF8093B9078AE080935D
:1089B000BA073093B8073093BC0783E08093BB07B6
:1089C00058E05093BD0790E19093BE0766E0609336
:1089D000BF075093C00786EE8093C1073093C2074C
:1089E00080E88093C30744E64093C40788E78093F8
:1089F000C5078EE58093C60783E28093C70784E1AD
:108A00008093C8071092C9079093CA071092CB07AA
:108A10001092CC071092CD071092CE071092DE076D
:108A20001092DF071092E0071092E1074093CF0702
:108A300088E28093D0071092F40792E39093D107D5
:108A400086E98093D20785E08093D3079093D4077B
:108A50002AE52093D5079093D6071092F307209329
:108A6000D7078093D80785E58093D9078093DA07E5
:108A700080E28093DB0784E08093DC079093DD073E
:108A80008FE58093E20783EF8093E4073093E30759
:108A90003093E5078DEF8093E6074093E707209337
:108AA000E8072093E9072093EA071092EB07609309
:108AB000EC075093ED072093EE073093EF074093B8
:108AC000F0078CE38093F107A9EFB7E0E8E7F3E064
:108AD0008CE001900D928150E1F7089588E6809333
:108AE000B6074EE14093B7078BEF8093B9078AE052
:108AF0008093BA074093B8074093BC0783E0809304
:108B0000BB078CE08093BD0780E18093BE0776E0D1
:108B10007093BF0768E06093C00786EE8093C1073B
:108B20004093C20780E88093C30780E58093C40721
:108B300088E78093C5078EE58093C60783E280931C
:108B4000C7074093C8071092C90750E25093CA075D
:108B50001092CB071092CC071092CD071092CE073F
:108B60001092DE071092DF071092E0071092E107E3
:108B700034E63093CF0788E28093D0071092F40751
:108B800092E39093D10786E98093D20785E08093A2
:108B9000D3079093D4072AE52093D5079093D6075F
:108BA0001092F3072093D7078093D80785E5809329
:108BB000D9078093DA075093DB0784E08093DC07C2
:108BC0008BE48093DD078FE58093E20783EF80934A
:108BD000E40784E18093E3078093E5078DEF8093BA
:108BE000E6073093E7072093E8072093E9072093EF
:108BF000EA071092EB077093EC076093ED07209360
:108C0000EE074093EF073093F0078CE38093F10772
:108C1000A9EFB7E0E2E8F3E08CE001900D9281501B
:108C2000E1F7089588E68093B6073EE13093B707F1
:108C30008BEF8093B9078AE08093BA073093B80727
:108C40003093BC0764E06093BB075FE05093BD07BF
:108C50003093BE078CE08093BF0778E07093C00725
:108C600086EE8093C1073093C20780E88093C307E4
:108C700080E58093C40796E99093C5078EE58093BD
:108C8000C60783E28093C7073093C8071092C907CD
:108C900080E28093CA071092CB071092CC07109203
:108CA000CD071092CE071092DE071092DF071092C8
:108CB000E0071092E10744E64093CF0788E28093F3
:108CC000D0071092F40782E38093D1079093D207E4
:108CD00025E02093D3078093D4079AE59093D50796
:108CE0008093D6071092F3079093D7072093D80765
:108CF00085E58093D9078093DA0780E18093DB07CD
:108D00006093DC074093DD078FE58093E20783EFF4
:108D10008093E4075093E3075093E5078DEF80932A
:108D2000E6074093E7079093E8079093E90790934D
:108D3000EA071092EB0786E08093EC077093ED074B
:108D40009093EE073093EF074093F0078CE3809306
:108D5000F107A9EFB7E0EAE8F3E08CE001900D92AB
:108D60008150E1F708951092FC041092FB041092D8
:108D7000C3081092C2081092EA081092E9081092F3
:108D8000AE08109294081092FB081092C10810923D
:108D9000D6081092E6081092F4041092F304109290
:108DA000F6041092F5041092E8081092E708109269
:108DB000D8081092D70808958091AE08882309F446
:108DC000A6C08091650865E00E94AA56809331058F
:108DD0001092320588E090E0A0E0B0E080932D058D
:108DE00090932E05A0932F05B09330058091FB083A
:108DF000882309F48CC080919408882309F487C0E3
:108E00008091EF0890E08370907002970CF474C02A
:108E10008091F00880FF70C01092FB086091A0085C
:108E20007091A1088091A2089091A3082AE030E0F7
:108E300040E050E00E94FF562093C4083093C508DC
:108E40004093C6085093C7086091A4087091A50884
:108E50008091A6089091A7082AE030E040E050E019
:108E60000E94FF562093C8083093C9084093CA084F
:108E70005093CB086091A8087091A9088091AA0826
:108E80009091AB082AE030E040E050E00E94FF56AD
:108E90002093CC083093CD084093CE085093CF0850
:108EA0001092AE088091840890918508A091860860
:108EB000B09187088093D0089093D108A093D208EE
:108EC000B093D308609188087091890880918A08CE
:108ED00090918B0820EA36E841E050E00E94FF566E
:108EE0003093D5082093D4081092940881E08093A1
:108EF000D60820E030E00DC01092D60810929408F9
:108F00001092FB081092AE0822E030E002C021E08F
:108F100030E0C90108950E94DC469C01181619062C
:108F20000CF44CC08091D7089091D80823E0883E7B
:108F3000920730F4885A9D4F9093D8088093D708B1
:108F40008091C1088823B1F18091C4089091C5082F
:108F50002091AF083091B008821B930B9093E108E9
:108F60008093E0088091C8089091C9082091B308C7
:108F70003091B408821B930B9093E3088093E2082E
:108F80008091CC089091CD082091B7083091B80815
:108F9000821B930B9093E5088093E40881E0809313
:108FA000E60881E090E09093E8088093E70820E0ED
:108FB00030E004C01092E60822E030E0C9010895D4
:108FC0000E94DC46892B99F58091C4089091C508D0
:108FD000A091C608B091C7088093AF089093B008DD
:108FE000A093B108B093B2088091C8089091C908C5
:108FF000A091CA08B091CB088093B3089093B408AD
:10900000A093B508B093B6088091CC089091CD0894
:10901000A091CE08B091CF088093B7089093B8087C
:10902000A093B908B093BA0881E08093C10808956D
:10903000482F2091FB043091FC042530310509F4C0
:109040009DC0263031058CF42130310529F12230C4
:1090500031051CF4232BD1F003C12230310571F10D
:109060002330310509F0FCC02FC02730310509F449
:10907000E2C0273031050CF492C02830310509F4E4
:10908000E5C02930310509F0EBC0A2C0853B09F0ED
:10909000E7C081E090E0D5C0823639F482E090E00C
:1090A0009093FC048093FB0404C01092FC04109283
:1090B000FB0410920D0510920E050895813009F001
:1090C000CFC083E090E0BDC0883031F0823169F1DB
:1090D000833009F047C013C02EEA38E030932805EA
:1090E000209327058091AE088823E1F52251304076
:1090F00030932605209325052E5E3F4F28C08BEF29
:1091000098E090932805809327058091FB08882399
:1091100049F58BEE98E090932605809325054096BF
:1091200090931A058093190516C024E938E030930E
:1091300028052093270580919408882399F42452C8
:10914000304030932605209325052C5D3F4F30930A
:109150001A052093190585E090E09093FC04809314
:10916000FB0404C01092FC041092FB04842F8F5F58
:1091700080930D058F5F80930E05089580931705EA
:109180001092180580910D05840F80930D05909124
:109190000E05980F90930E0586E090E052C0382F90
:1091A00020E08091170590911805820F931F9093EE
:1091B00018058093170590910D05940F90930D0558
:1091C00080910E05890F80930E0589E090E039C0EB
:1091D00060911705709118056115710509F440C07B
:1091E000E0912505F0912605808380910D05840F7F
:1091F00080930D0590910E05980F90930E05CB016D
:1092000001979093180580931705892B89F0809119
:10921000190590911A058E179F0750F03196F0931B
:109220002605E09325053093FC042093FB04089564
:1092300087E090E006C080910D05481789F488E02A
:1092400090E09093FC048093FB04089580910E05B8
:10925000481731F4E0912705F091280581E08083DB
:109260001092FC041092FB0408952F923F924F92AB
:109270005F926F927F928F929F92AF92BF92CF92A6
:10928000DF92EF92FF920F931F93DF93CF93CDB7AF
:10929000DEB7E8970FB6F894DEBF0FBECDBF9EAB2A
:1092A0008DAB8330910509F4B2C08430910521F073
:1092B000892B09F414C144C78091C2089091C30856
:1092C0000197029708F420C180910B0590910C053D
:1092D000019690930C0580930B058536910508F453
:1092E00032C710920C0510920B05109220051092B7
:1092F0001F0510922205109221051092240510924C
:109300002305109200051092FF041092FE041092A3
:10931000FD0410920F051092100510921105109285
:109320001205109213051092140510921505109253
:10933000160510920305109204051092050510926F
:109340000605109207051092080510920905109263
:109350000A0510922A051092290510920205109212
:1093600001051092EA081092E9088091E608882326
:1093700009F44AC08091E0089091E1089093DA08DE
:109380008093D9086091E2087091E3087093DC083B
:109390006093DB0821E02093DF0890939608809388
:1093A0009508709398086093970820939B08709590
:1093B00061957F4F909581959F4F0E94761B9C01F0
:1093C0008091D9089091DA0897FF03C08AE590E070
:1093D00002C08EE091E0821B930B90931C0580935A
:1093E0001B0540911B0550911C056091DB08709195
:1093F000DC088091D9089091DA080E94B61C70931D
:109400001E0560931D0591C61092DF0895C68091D8
:10941000C2089091C308019709F476C080910B05AA
:1094200090910C05019690930C0580930B0589553E
:10943000924008F488C610920C0510920B0580919A
:10944000E608882309F448C01092220510922105ED
:109450001092240510922305109200051092FF042B
:109460001092FE041092FD0410920F051092100548
:109470001092110510921205109213051092140506
:10948000109215051092160510920305109204050E
:109490001092050510920605109207051092080516
:1094A0001092090510920A0510922C0510922B05B6
:1094B0008091E0089091E108909396088093950838
:1094C0008091E2089091E308909398088093970820
:1094D00081E080939B0891C110929B082DC6109249
:1094E0000C0510920B051092F4041092F3041092E4
:1094F000F6041092F5041092EA081092E90810920E
:10950000C3081092C20822C68091C2089091C30875
:109510008130910509F474C18230910541F0892BA5
:1095200009F00AC610920C0510920B050FC6809127
:10953000DF08882309F400C68091E7089091E808C5
:10954000181619060CF059C18091E9089091EA08A3
:10955000099709F452C180911F0590912005019649
:109560009093200580931F0560919508709196084F
:109570008091E0089091E108AB01481B590B57FF1F
:1095800003C0509541955F4F2091970830919808FE
:109590008091E2089091E308281B390B37FF03C044
:1095A000309521953F4FE0912905F0912A05809152
:1095B0001D0590911E058E1B9F0B813591050CF4A6
:1095C0004CC04436510564F4243631054CF4809186
:1095D0000105909102058E309105CCF4029613C0DE
:1095E000483C51050CF5283C3105F4F48091010507
:1095F000909102058830910514F0019704C08730DE
:10960000910529F0019690930205809301058091C0
:109610000105909102058E0F9F1F90932A0580935C
:10962000290583E090E00EC080910105909102052C
:10963000823091052CF001979093020580930105EB
:1096400084E090E09093EA088093E90881E090E05C
:10965000909324058093230522C0C3970CF476C011
:10966000443651055CF42436310544F43A96F093BF
:109670002A05E093290585E090E007C03196F09334
:109680002A05E093290586E090E09093EA0880930C
:10969000E908109224051092230581E090E0909350
:1096A000220580932105A0902905B0902A05CC249D
:1096B000B7FCC094DC2C80911B0590911C050E9486
:1096C000541C7C012090290530902A05442437FC45
:1096D0004094542C80911B0590911C050E94AD1C58
:1096E0003C010027F7FC0095102FC801B701A60127
:1096F00095010E948B5628EE33E040E050E00E9436
:10970000FF568091D9089091DA08820F931F9093A9
:10971000960880939508882477FC8094982CC4013F
:10972000B301A20191010E948B5628EE33E040E084
:1097300050E00E94FF568091DB089091DC08820F78
:10974000931F909398088093970857C0443651050B
:109750000CF04DC0243631050CF049C087E090E094
:109760009093EA088093E90810922205109221054F
:109770001092240510922305633071051CF063508C
:10978000704006C01FEF6E3F710734F46D5F7F4F6E
:109790007093960860939508809197089091980827
:1097A0008330910514F0039705C02FEF8E3F920789
:1097B0002CF40396909398088093970880919508CD
:1097C0009091960803960797C0F48091970890911E
:1097D00098080396079788F41092960810929508B7
:1097E000109298081092970889E090E002C088E0F3
:1097F00090E09093EA088093E90881E090E097C4B4
:109800008091E7089091E808181619060CF089C4B1
:1098100080912B0590912C05019690932C058093B7
:109820002B054091E0085091E108809195089091B6
:109830009608481B590B5CAB4BABCA01AA2797FD96
:10984000A095BA2F8FA798ABA9ABBAABA091E208AD
:10985000B091E3088091970890919808A81BB90BE4
:10986000BEA7ADA77D010027F7FC0095102FE9A644
:10987000FAA60BA71CA7E0903105F090320500274F
:10988000F7FC0095102F6FA578A989A99AA9A801BE
:1098900097010E948B56DC01CB016AE070E00E94C8
:1098A000CA566B018091FF0490910005C80ED91E25
:1098B000D0920005C092FF0469A57AA58BA59CA54E
:1098C000A80197010E948B56DC01CB016AE070E091
:1098D0000E94CA568B018091FD049091FE04080FEE
:1098E000191F1093FE040093FD0420917808309115
:1098F000790840917A0850917B0829873A874B87ED
:109900005C878091740890917508A0917608B09159
:1099100077088D839E83AF83B8871092E8081092F2
:10992000E708F0901508FF2009F44DC060912D055F
:1099300070912E0580912F059091300520E43BE039
:1099400040E050E00E948B562F2D30E040E050E088
:109950000E94FF56C601D7FE04C0882799278C199C
:109960009D092817390754F0C80117FF04C088273C
:109970009927801B910B28173907F4F4C601880F2B
:10998000991F8C0D9D1D880F991F68E070E00E9443
:10999000CA56709300056093FF04C801880F991F91
:1099A000800F911F880F991F68E070E00E94CA56CF
:1099B0007093FE046093FD0480912305909124052B
:1099C0001816190644F4109200051092FF04109224
:1099D000FE041092FD042091FF04309100053093A5
:1099E000230820932208A090FD04B090FE04B092BA
:1099F0003F08A0923E08E0901508FF2400E010E028
:109A0000442737FD4095542FC801B7010E948B565B
:109A100020E830E040E050E00E94FF5639014A0162
:109A2000CC24B7FCC094DC2CC601B501A801970179
:109A30000E948B5620E830E040E050E00E94FF5644
:109A400079018A0120902D0530902E0540902F0538
:109A500050903005C201B10128E130E040E050E013
:109A60000E948B565B016C01661577058805990588
:109A70002CF4698B7A8B8B8B9C8B15C0C201B10146
:109A800028EE3FEF4FEF5FEF0E948B56698A7A8A8C
:109A90008B8A9C8A661677068806990624F4698B59
:109AA0007A8B8B8B9C8BAE14BF04C006D1062CF432
:109AB000AD86BE86CF86D88A15C0C201B10128EE18
:109AC0003FEF4FEF5FEF0E948B56ED86FE860F87CC
:109AD000188BE616F7060807190724F46D877E87AA
:109AE0008F87988BA0912105B0912205B8AFAFABBD
:109AF0008091310590913205E0906F081A161B068F
:109B00000CF087C0E694E694FF240027F7FC00954C
:109B1000102F5C01CC24B7FCC094DC2CC601B5012D
:109B200029853A854B855C850E948B56A801970153
:109B30000E948B5620E931E040E050E00E94FF5641
:109B400039014A01C601B5012D813E814F815885F9
:109B50000E948B56A80197010E948B5620E931E0A4
:109B600040E050E00E94FF5679018A01C201B10134
:109B700028E330E040E050E00E948B565B016C012E
:109B800066157705880599052CF4698F7A8F8B8F78
:109B90009C8F15C0C201B10128EC3FEF4FEF5FEF82
:109BA0000E948B56698E7A8E8B8E9C8E66167706F7
:109BB0008806990624F4698F7A8F8B8F9C8FAE1458
:109BC000BF04C006D1062CF4AD8ABE8ACF8AD88ED7
:109BD00015C0C201B10128EC3FEF4FEF5FEF0E94CB
:109BE0008B56ED8AFE8A0F8B188FE616F70608074C
:109BF000190724F46D8B7E8B8F8B988F90910A08B8
:109C000086E0989FC0011124959587959595879535
:109C100080C0E694E694FF240027F7FC0095102FFF
:109C20005C01CC24B7FCC094DC2CC601B5012985AD
:109C30003A854B855C850E948B56A80197010E944E
:109C40008B562AEF30E040E050E00E94FF56390189
:109C50004A01C601B5012D813E814F8158850E9480
:109C60008B56A80197010E948B562AEF30E040E006
:109C700050E00E94FF5679018A016201510136E0ED
:109C8000AA0CBB1CCC1CDD1C3A95D1F7A614B7045A
:109C9000C804D9042CF4A98EBA8ECB8EDC8E15C0E4
:109CA000C201B10120EC3FEF4FEF5FEF0E948B56F6
:109CB000698E7A8E8B8E9C8E66167706880699063C
:109CC00024F4698F7A8F8B8F9C8FAE14BF04C006EB
:109CD000D1062CF4AD8ABE8ACF8AD88E15C0C201B7
:109CE000B10120EC3FEF4FEF5FEF0E948B56ED8A02
:109CF000FE8A0F8B188FE616F7060807190724F45B
:109D00006D8B7E8B8F8B988F80910A0890E0959554
:109D100087955C01CC24B7FCC094DC2CE090310525
:109D2000F09032050027F7FC0095102F6FA578A959
:109D300089A99AA9A80197010E948B56A6019501AD
:109D40000E948B5620E931E040E050E00E94FF562F
:109D500039014A016092030570920405809205055D
:109D60009092060569A57AA58BA59CA5A8019701E7
:109D70000E948B56A60195010E948B5620E931E086
:109D800040E050E00E94FF5679018A01E092070509
:109D9000F09208050093090510930A05C201B1016C
:109DA00028E330E040E050E00E948B565B016C01FC
:109DB00066157705880599054CF460930305709343
:109DC0000405809305059093060515C0C201B101F5
:109DD00028EC3FEF4FEF5FEF0E948B566616770639
:109DE0008806990644F460930305709304058093F4
:109DF000050590930605AE14BF04C006D1064CF4C9
:109E0000A0920705B0920805C0920905D0920A05F4
:109E100015C0C201B10128EC3FEF4FEF5FEF0E9488
:109E20008B56E616F7060807190744F460930705F2
:109E3000709308058093090590930A0580910305A6
:109E400090910405A0910505B091060590931A081C
:109E50008093190820910705309108054091090564
:109E600050910A053093680820936708E988FA88BA
:109E70000B891C89E80EF91E0A1F1B1F898D9A8DFC
:109E8000AB8DBC8DE80EF91E0A1F1B1FD801C70140
:109E9000B095A095909581959F4FAF4FBF4F809300
:109EA0000F0590931005A0931105B0931205ED8452
:109EB000FE840F851889E20EF31E041F151F2D89DD
:109EC0003E894F89588DE20EF31E041F151F57015E
:109ED0006801D094C094B094A094A11CB11CC11C82
:109EE000D11CA0921305B0921405C0921505D09212
:109EF00016059093420880934108B0924708A092BB
:109F000046086091690870916A0880916B08909189
:109F10006C082AEA35E040E050E00E94FF567901E3
:109F20008A01C9010E94AD1C98A38F8F80910F05F3
:109F300090911005A0911105B09112058DA39EA3DB
:109F4000AFA3B8A7C7010E94541C9E8F8D8F20918C
:109F50002D0530912E0540912F0550913005298314
:109F60003A834B835C8360900F057090100580905E
:109F7000110590901205C7010E94AD1C8C018091C3
:109F8000130590911405A0911505B091160589A3AC
:109F90009AA3ABA3BCA3C7010E94541C98AF8FAB7C
:109FA00020902D0530902E0540902F0550903005C3
:109FB0008BA99CA997FF03C0909581959F4F8159CC
:109FC000914054F48DA59EA597FF03C0909581956F
:109FD0009F4F815991404CF01092F6041092F50475
:109FE0001092F4041092F304A7C080918C07909112
:109FF0008D0780918C0790918D07B801882777FD98
:10A000008095982FA40193010E948B567B018C01AF
:10A01000EFA9F8ADBF01882777FD8095982F29A17A
:10A020003AA14BA15CA10E948B56E61AF70A080BD5
:10A03000190BC201B10128EE33E040E050E00E946C
:10A040008B569B01AC01C801B7010E94FF56C901A4
:10A05000DA01803BFFEF9F07FFEFAF07FFEFBF077E
:10A0600024F480EB9FEFAFEFBFEF81359105A105A1
:10A07000B10524F080E590E0A0E0B0E09093F60414
:10A080008093F504ED8CFE8CB701882777FD8095D1
:10A09000982F2DA13EA14FA158A50E948B567B0160
:10A0A0008C012F8D38A1B901882777FD8095982FD5
:10A0B000A60195010E948B56E60EF71E081F191F78
:10A0C00069817A818B819C8128E13CEF4FEF5FEFC2
:10A0D0000E948B569B01AC01C801B7010E94FF563C
:10A0E000C901DA01803B3FEF93073FEFA3073FEF42
:10A0F000B30724F480EB9FEFAFEFBFEF81359105FD
:10A10000A105B10524F080E590E0A0E0B0E09093D7
:10A11000F4048093F3044DA95EA944305105B1F4D1
:10A1200004C08DA99EA9049789F482E090E09093E1
:10A13000C3088093C2080AC01092C3081092C208D4
:10A1400022E030E005C021E030E002C020E030E055
:10A15000C901E8960FB6F894DEBF0FBECDBFCF9110
:10A16000DF911F910F91FF90EF90DF90CF90BF9004
:10A17000AF909F908F907F906F905F904F903F90A7
:10A180002F90089584B1806A84B93D9A82E58CBD90
:10A190001DBC459A81E08093FC088AEA80930009FF
:10A1A00083E8809301098AE08093020910920409F0
:10A1B00010920309109206091092050910922209C3
:10A1C0001092230987E48093240987E0809325096E
:10A1D00083E0809326090895F89460912A04709191
:10A1E0002B0480912C0490912D042CE630E040E06B
:10A1F00050E00E94FF5630930409209303096091B8
:10A2000032047091330480913404909135042CE62B
:10A2100030E040E050E00E94FF5630930609209362
:10A22000050960915F0870916008809161089091C4
:10A2300062082AEA35E040E050E00E94FF56309381
:10A240000C0920930B092091220430912304809162
:10A250002E0890912F08B9010E94CA56CB01880F91
:10A26000991F860F971F880F991F880F991F90932A
:10A270000809809307098091580890915908B901FD
:10A280000E94CA56CB01880F991F860F971F880F0F
:10A29000991F880F991F90930A09809309091092BA
:10A2A00023041092220410922F0810922E0810926C
:10A2B000590810925808809102098C3009F4EAC0BC
:10A2C0008D3030F48A3051F08B3009F005C171C007
:10A2D0008D30F1F18E3009F0FFC0EEC08091950411
:10A2E00080931309809196048093140980919704B8
:10A2F00080931509809198048093160980919904A0
:10A300008093170980919A048093180980919B0487
:10A310008093190980919C0480931A098091AB0461
:10A3200080931B09837F8093AB04809111039091EC
:10A33000120380931C098091C60780931D09F99927
:10A34000FECF82E090E092BD81BDF89A80B52EC02C
:10A350008091E607809313098091E70780931409A1
:10A360008091E807809315098091E9078093160989
:10A370008091EA07809317098091EB078093180971
:10A380008091EC07809319098091ED0780931A0959
:10A390008091F00780931B098091EE0780931C0940
:10A3A0008091EF0780931D098091F10780931E092A
:10A3B00093C0E091B007F0E0EE0FFF1FE258F84FB6
:10A3C0000190F081E02D2FEFE138F20714F4E1E87D
:10A3D000FFEFE038F10514F0EFE7F0E0E093130948
:10A3E000E091B107F0E0EE0FFF1FE258F84F019047
:10A3F000F081E02D6FEFE138F60714F4E1E8FFEFAC
:10A40000E038F10514F0EFE7F0E0E0931409E09193
:10A41000AF07F0E0EE0FFF1FE258F84F0190F08118
:10A42000E02D8FEFE138F80714F4E1E8FFEFE038B2
:10A43000F10514F0EFE7F0E0E0931509E091AE07C5
:10A44000F0E0EE0FFF1FE258F84F0190F081E02D91
:10A450002FEFE138F20714F4E1E8FFEFE038F105FF
:10A4600014F0EFE7F0E0E093160980917504809313
:10A47000170980917704809318098091790480935B
:10A48000190980917B0480931A0980917D0480933F
:10A490001B0922C080917B06863018F010927B0643
:10A4A00085E08093130980918704909188049093AC
:10A4B00016098093150910C0809123098093130910
:10A4C00080912409809314098091250980931509AE
:10A4D0008091260980931609789480912209882317
:10A4E00009F476C04091280950912909CA01815088
:10A4F0009E4F8F5F9340B0F420912A0930912B0931
:10A50000C90181509E4F8F5F934060F48091B607E0
:10A5100085FF08C05093F4044093F3043093F6048D
:10A520002093F50480912E0990912F0921E089361E
:10A53000920724F4909367048093660480916604E4
:10A54000909167042091680430916904845E9D4F66
:10A55000821B930B68E671E00E94CA56845B9040B0
:10A5600090936B0480936A042091320930913309EF
:10A570008091D9039091DA038217930740F4809178
:10A580007B06882321F43093DA032093D90380914A
:10A590002709843679F08736D9F48091340980937D
:10A5A0005F09809135098093610980913609809314
:10A5B000600908958091340980935B0910925C09C9
:10A5C000809136099091370990935E0980935D09D7
:10A5D00008958091FC08882309F43BC0459880E0E9
:10A5E00099E09093FE088093FD0890913305E92F40
:10A5F000F0E0E055FC4F8081809302099F5F9093CB
:10A600003305963010F0109233051092FC080E942A
:10A61000EC5081E08093FF08000000000000000083
:10A62000000000000000000000000000000000002A
:10A63000000000000000000000000000000000001A
:10A6400000000000000000008091000980931F09B5
:10A650008EBD08958091FC08882309F07BC00DB45D
:10A6600007FE78C084E08093DB03459A2EB5809185
:10A670003505813069F0813018F08230C9F513C09A
:10A680001092210920933405213891F581E008C00A
:10A69000253541F5809134058B5A8093340582E04D
:10A6A0008093350525C080912109E82FF0E0EF5B0C
:10A6B000F64F20838F5F80932109909134058A3172
:10A6C000A0F0291769F4A7E2B9E0E1E4F9E08AE132
:10A6D00001900D928150E1F781E08093220902C040
:10A6E000109222091092350503C0920F9093340501
:10A6F0002091FF08203208F027C045980000000094
:10A700000000000000000000000000000000000049
:10A710000000000000000000000000000000000039
:10A72000000000000000000000000000E091FD08B3
:10A73000F091FE08E20FF11D80818EBD90911F09FE
:10A74000890F80931F0903C081E08093FC082F5F6D
:10A750002093FF08089587B18C6087B94298439889
:10A7600010923A0580E88093B60310923B058093DF
:10A77000B703089580913C05815080933C058F5F1D
:10A7800009F068C084E080933C058091E3078B3F2B
:10A7900080F080913008873E28F08091E20787FFA3
:10A7A00025C022C08A3028F48091E20787FF1CC0B0
:10A7B0001DC080913A05815080933A058F5FB9F4AE
:10A7C00080913008815080933A058091B6038130A2
:10A7D00011F480E801C086958093B6038091E2076A
:10A7E0009091B603892311F0429A01C0429880915A
:10A7F000E5078B3F88F080915308873E28F08091D1
:10A80000E40787FF07C023C08A3030F48091E40753
:10A8100087FF1DC04398089580913B058150809328
:10A820003B058F5FB9F480915308815080933B05BD
:10A830008091B703813011F480E801C08695809340
:10A84000B7038091E4079091B703892311F0439AED
:10A85000089543980895FC014150504030F0019014
:10A860000616D1F73197CF010895882799270895C3
:10A87000A0E0B0E0EEE3F4E50C9424577C01EB019A
:10A880008A01690109C0CE012196F6010995F701F7
:10A8900081937F010150104001151105A1F7CDB73B
:10A8A000DEB7E8E00C944057A0E0B0E0EAE5F4E55C
:10A8B0000C942457EC017B018A01690109C0F7015E
:10A8C00061917F01CE012196F6010995015010405A
:10A8D00001151105A1F7CDB7DEB7E8E00C9440579C
:10A8E0005058BB27AA270ED075C166D130F06BD166
:10A8F00020F031F49F3F11F41EF45BC10EF4E0959B
:10A90000E7FB51C1E92F77D180F3BA1762077307CC
:10A910008407950718F071F49EF58FC10EF4E09549
:10A920000B2EBA2FA02D0B01B90190010C01CA0109
:10A93000A0011124FF27591B99F0593F50F4503EB4
:10A9400068F11A16F040A22F232F342F4427585FA6
:10A95000F3CF469537952795A795F0405395C9F7BE
:10A960007EF41F16BA0B620B730B840BBAF0915076
:10A97000A1F0FF0FBB1F661F771F881FC2F70EC015
:10A98000BA0F621F731F841F48F4879577956795E8
:10A99000B795F7959E3F08F0B3CF9395880F08F0D1
:10A9A0009927EE0F979587950895D9D008F481E0FF
:10A9B00008950CD00FC107D140F0FED030F021F443
:10A9C0005F3F19F0F0C0511139C1F3C014D198F3B1
:10A9D0009923C9F35523B1F3951B550BBB27AA2720
:10A9E00062177307840738F09F5F5F4F220F331F92
:10A9F000441FAA1FA9F333D00E2E3AF0E0E830D05E
:10AA000091505040E695001CCAF729D0FE2F27D060
:10AA1000660F771F881FBB1F261737074807AB072E
:10AA2000B0E809F0BB0B802DBF01FF2793585F4FA3
:10AA30002AF09E3F510568F0B6C000C15F3FECF3BD
:10AA4000983EDCF3869577956795B795F7959F5F68
:10AA5000C9F7880F911D9695879597F90895E1E0BC
:10AA6000660F771F881FBB1F621773078407BA071B
:10AA700020F0621B730B840BBA0BEE1F88F7E09576
:10AA8000089504D06894B111D9C00895BCD088F05D
:10AA90009F5790F0B92F9927B751A0F0D1F0660FCA
:10AAA000771F881F991F1AF0BA95C9F712C0B130E5
:10AAB00081F0C3D0B1E00895C0C0672F782F8827F8
:10AAC000B85F39F0B93FCCF3869577956795B39524
:10AAD000D9F73EF490958095709561957F4F8F4F93
:10AAE0009F4F0895E89409C097FB3EF49095809598
:10AAF000709561957F4F8F4F9F4F9923A9F0F92F44
:10AB000096E9BB279395F695879577956795B795C1
:10AB1000F111F8CFFAF4BB0F11F460FF1BC06F5FA7
:10AB20007F4F8F4F9F4F16C0882311F096E911C0B9
:10AB3000772321F09EE8872F762F05C0662371F0DA
:10AB400096E8862F70E060E02AF09A95660F771FEE
:10AB5000881FDAF7880F9695879597F90895990FCA
:10AB60000008550FAA0BE0E8FEEF16161706E807D7
:10AB7000F907C0F012161306E407F50798F0621BF8
:10AB8000730B840B950B39F40A2661F0232B242BCD
:10AB9000252B21F408950A2609F4A140A6958FEFEC
:10ABA000811D811D089597F99F6780E870E060E03E
:10ABB00008959FEF80EC089500240A941616170656
:10ABC00018060906089500240A941216130614069E
:10ABD00005060895092E0394000C11F4882352F001
:10ABE000BB0F40F4BF2B11F460FF04C06F5F7F4FB9
:10ABF0008F4F9F4F089557FD9058440F551F59F0A0
:10AC00005F3F71F04795880F97FB991F61F09F3F59
:10AC100079F087950895121613061406551FF2CF82
:10AC20004695F1DF08C0161617061806991FF1CFD2
:10AC300086957105610508940895E894BB276627F9
:10AC40007727CB0197F908958ADF08F48FEF0895ED
:10AC50000BD0C0CFB1DF28F0B6DF18F0952309F094
:10AC6000A2CFA7CF1124EACFC6DFA0F3959FD1F3DF
:10AC7000950F50E0551F629FF001729FBB27F00DAA
:10AC8000B11D639FAA27F00DB11DAA1F649F6627FF
:10AC9000B00DA11D661F829F2227B00DA11D621F4E
:10ACA000739FB00DA11D621F839FA00D611D221F08
:10ACB000749F3327A00D611D231F849F600D211DEC
:10ACC000822F762F6A2F11249F5750408AF0E1F08F
:10ACD00088234AF0EE0FFF1FBB1F661F771F881FD8
:10ACE00091505040A9F79E3F510570F05CCFA6CF20
:10ACF0005F3FECF3983EDCF3869577956795B795C3
:10AD0000F795E7959F5FC1F7FE2B880F911D9695EC
:10AD1000879597F90895629FD001739FF001829FF4
:10AD2000E00DF11D649FE00DF11D929FF00D839FDA
:10AD3000F00D749FF00D659FF00D9927729FB00D77
:10AD4000E11DF91F639FB00DE11DF91FBD01CF018A
:10AD500011240895991B79E004C0991F961708F0F3
:10AD6000961B881F7A95C9F780950895AA1BBB1B6F
:10AD700051E107C0AA1FBB1FA617B70710F0A61BFB
:10AD8000B70B881F991F5A95A9F780959095BC011C
:10AD9000CD01089597FB092E07260AD077FD04D030
:10ADA000E5DF06D000201AF4709561957F4F089575
:10ADB000F6F7909581959F4F0895A1E21A2EAA1B50
:10ADC000BB1BFD010DC0AA1FBB1FEE1FFF1FA2175B
:10ADD000B307E407F50720F0A21BB30BE40BF50B58
:10ADE000661F771F881F991F1A9469F760957095E1
:10ADF000809590959B01AC01BD01CF01089597FB13
:10AE0000092E05260ED057FD04D0D7DF0AD0001C2E
:10AE100038F450954095309521953F4F4F4F5F4FF7
:10AE20000895F6F790958095709561957F4F8F4FB7
:10AE30009F4F08952F923F924F925F926F927F9211
:10AE40008F929F92AF92BF92CF92DF92EF92FF923A
:10AE50000F931F93CF93DF93CDB7DEB7CA1BDB0BE6
:10AE60000FB6F894DEBF0FBECDBF09942A8839888B
:10AE700048885F846E847D848C849B84AA84B98492
:10AE8000C884DF80EE80FD800C811B81AA81B9819E
:10AE9000CE0FD11D0FB6F894DEBF0FBECDBFED01B2
:06AEA0000895F894FFCFB5
:10AEA6000A010101FF6401C800496E746567726199
:10AEB6006C4E69636B20202020496E746567726151
:10AEC6006C526F6C6C202020204163634E69636B6B
:10AED600202020202020202020416363526F6C6CAC
:10AEE6002020202020202020204779726F47696586
:10AEF600722020202020202020486F6568656E572C
:10AF06006572742020202020204163635A2020206F
:10AF16002020202020202020204761732020202070
:10AF26002020202020202020204B6F6D706173731D
:10AF360056616C7565202020205370616E6E756EAB
:10AF4600672020202020202020456D7066616E67D6
:10AF560020202020202020202045727361747A6BE7
:10AF66006F6D706173732020204D6F746F725F5622
:10AF76006F726E6520202020204D6F746F725F48BF
:10AF8600696E74656E202020204D6F746F725F4C61
:10AF9600696E6B7320202020204D6F746F725F5294
:10AFA6006563687473202020202020202020202024
:10AFB600202020202020202020202020202020208B
:10AFC600202020202020202020202020202020207B
:10AFD600202020202020202020202020202020206B
:10AFE600202020202020202020202020202020205B
:10AFF6002020202020202020204E69636B20202046
:10B00600202020202020202020526F6C6C20202021
:10B0160020202020202020202064656275675F3074
:10B0260020202020202020202064656275675F3163
:10B0360020202020202020202064656275675F3252
:10B0460020202020202020202075746D5F656173EC
:10B0560074202020202020202075746D5F6E6F7272
:10B0660074682020202020202075746D5F616C7428
:10B076002020202020202020204750535F53746139
:10B086007465202020202020204750535F4E69639E
:10B096006B20202020202020204750535F526F6CC9
:10B0A6006C20202020202020202800FFFF64008024
:10B0B600016400007D0000FF037373730102030443
:10B0C60005060708090A48616C6C6F2057656C74A1
:10B0D600000000000000000000000000000000006A
:10B0E600000000000000000000000000000000005A
:10B0F600000000000000000000000000000000004A
:10B106000000000000000000000000000000000039
:10B116000000000000000B01426567696E6E6572F3
:10B1260000004E6F726D616C000053706F72740098
:10B13600006400F40190D0030090D0030017B7D14B
:10B146003830FB103A409696020A644664ECFF6477
:08B156000A0B0D0B0C0E0101A8
:00000001FF
/branches/salvo_gps/Basis_V0071h/trunk/FlightCtrl.aps
1,0 → 0,0
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>11-Oct-2007 22:58:54</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>F:\SVN\MikroKopter\FlightCtrl\branches\V0.64_ZeroWarnings\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>uart.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>menu.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>timer0.c</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>fc.c</FileName><Status>1</Status></File00004><File00005><FileId>00005</FileId><FileName>fc.h</FileName><Status>1</Status></File00005><File00006><FileId>00006</FileId><FileName>menu.h</FileName><Status>1</Status></File00006><File00007><FileId>00007</FileId><FileName>TWIMASTER.C</FileName><Status>1</Status></File00007><File00008><FileId>00008</FileId><FileName>twimaster.h</FileName><Status>1</Status></File00008><File00009><FileId>00009</FileId><FileName>uart.h</FileName><Status>1</Status></File00009><File00010><FileId>00010</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00010><File00011><FileId>00011</FileId><FileName>analog.h</FileName><Status>1</Status></File00011><File00012><FileId>00012</FileId><FileName>gps.h</FileName><Status>1</Status></File00012><File00013><FileId>00013</FileId><FileName>main.h</FileName><Status>1</Status></File00013><File00014><FileId>00014</FileId><FileName>old_macros.h</FileName><Status>1</Status></File00014><File00015><FileId>00015</FileId><FileName>printf_P.h</FileName><Status>1</Status></File00015><File00016><FileId>00016</FileId><FileName>rc.h</FileName><Status>1</Status></File00016><File00017><FileId>00017</FileId><FileName>Settings.h</FileName><Status>1</Status></File00017><File00018><FileId>00018</FileId><FileName>timer0.h</FileName><Status>1</Status></File00018></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
<AVRStudio><MANAGEMENT><ProjectName>FlightCtrl</ProjectName><Created>15-May-2007 11:20:41</Created><LastEdit>28-Dec-2008 05:47:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>15-May-2007 11:20:41</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\Flight-Ctrl.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\Mikrokopter\Flight_Crtl\v0071h\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega644.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>uart.c</SOURCEFILE><SOURCEFILE>analog.c</SOURCEFILE><SOURCEFILE>eeprom.c</SOURCEFILE><SOURCEFILE>fc.c</SOURCEFILE><SOURCEFILE>GPS.c</SOURCEFILE><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>menu.c</SOURCEFILE><SOURCEFILE>printf_P.c</SOURCEFILE><SOURCEFILE>rc.c</SOURCEFILE><SOURCEFILE>timer0.c</SOURCEFILE><SOURCEFILE>twimaster.c</SOURCEFILE><HEADERFILE>uart.h</HEADERFILE><HEADERFILE>_Settings.h</HEADERFILE><HEADERFILE>analog.h</HEADERFILE><HEADERFILE>fc.h</HEADERFILE><HEADERFILE>gps.h</HEADERFILE><HEADERFILE>main.h</HEADERFILE><HEADERFILE>menu.h</HEADERFILE><HEADERFILE>old_macros.h</HEADERFILE><HEADERFILE>printf_P.h</HEADERFILE><HEADERFILE>rc.h</HEADERFILE><HEADERFILE>Settings.h</HEADERFILE><HEADERFILE>timer0.h</HEADERFILE><HEADERFILE>twimaster.h</HEADERFILE><OTHERFILE>makefile</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>YES</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE>makefile</EXTERNALMAKEFILE><PART>atmega644</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>Flight-Ctrl.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS><OPTION><FILE>GPS.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>analog.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>eeprom.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>fc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>main.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>menu.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>printf_P.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>rc.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>timer0.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>twimaster.c</FILE><OPTIONLIST></OPTIONLIST></OPTION><OPTION><FILE>uart.c</FILE><OPTIONLIST></OPTIONLIST></OPTION></OPTIONS><INCDIRS/><LIBDIRS/><LIBS><LIB>libc.a</LIB><LIB>libm.a</LIB></LIBS><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Wstrict-prototypes -std=gnu99 -DVERSION_HAUPTVERSION=0 -DVERSION_NEBENVERSION=64 -DVERSION_KOMPATIBEL=5 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20080610\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20080610\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>_Settings.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>uart.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>fc.c</FileName><Status>1</Status></File00003></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
/branches/salvo_gps/Basis_V0071h/trunk/GPS.c
1,32 → 1,697
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// + Copyright (c) 04.2007 Holger Buss
// + only for non-profit use
// + www.MikroKopter.com
// + see the File "License.txt" for further Informations
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
This program (files gps.c and gps.h) is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License and GNU Lesser General Public License for more details.
You should have received a copy of GNU General Public License (License_GPL.txt) and
GNU Lesser General Public License (License_LGPL.txt) along with this program.
If not, see <http://www.gnu.org/licenses/>.
 
Please note: All the other files for the project "Mikrokopter" by H.Buss are under the license (license_buss.txt) published by www.mikrokopter.de
*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
von Peter Muehlenbrock alias Salvo
Auswertung der Daten vom GPS im ublox Format
Hold Modus mit PID Regler
Rückstuerz zur Basis Funktion
Umstellung auf NaviParameter an Flight Version 00.70d
GPS_V durch gps_gain ersetzt, damit Einstellung durch MK Tool möglich wird
 
Stand 7.12.2008
 
Aenderung 7.12.2008: an Coming Home geschraubt
Aenderung 27.11.2008: gps_gain erhoeht
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
#include "main.h"
#include "math.h"
//#include "gps.h"
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
signed int GPS_Nick2 = 0;
signed int GPS_Roll2 = 0;
long GpsAktuell_X = 0;
long GpsAktuell_Y = 0;
long GpsZiel_X = 0;
long GpsZiel_Y = 0;
// Defines fuer ublox Messageformat um Auswertung zu steuern
#define UBLOX_IDLE 0
#define UBLOX_SYNC1 1
#define UBLOX_SYNC2 2
#define UBLOX_CLASS 3
#define UBLOX_ID 4
#define UBLOX_LEN1 5
#define UBLOX_LEN2 6
#define UBLOX_CKA 7
#define UBLOX_CKB 8
#define UBLOX_PAYLOAD 9
 
// ublox Protokoll Identifier
#define UBLOX_NAV_POSUTM 0x08
#define UBLOX_NAV_STATUS 0x03
#define UBLOX_NAV_VELED 0x12
#define UBLOX_NAV_CLASS 0x01
#define UBLOX_SYNCH1_CHAR 0xB5
#define UBLOX_SYNCH2_CHAR 0x62
 
signed int GPS_Nick = 0;
signed int GPS_Roll = 0;
signed int GPS_Nick2 = 0;
signed int GPS_Roll2 = 0;
short int ublox_msg_state = UBLOX_IDLE;
static uint8_t chk_a =0; //Checksum
static uint8_t chk_b =0;
short int gps_state,gps_sub_state; //Zustaende der Statemachine
short int gps_updte_flag;
static long signed gps_reg_x,gps_reg_y;
static unsigned int rx_len;
static unsigned int ptr_payload_data_end;
unsigned int gps_alive_cnt; // Wird bei jedem gueltigen GPS Telegramm hochgezaehlt
static signed int hdng_2home,dist_2home; //Richtung und Entfernung zur home Position
static signed gps_tick; //wird bei jedem Update durch das GPS Modul hochgezaehlt
static short int hold_fast,hold_reset_int; //Flags fuer Hold Regler
static uint8_t *ptr_payload_data;
static uint8_t *ptr_pac_status;
static int dist_flown;
//static unsigned int int_ovfl_cnt; // Zaehler fuer Overflows des Integrators
static int gps_quiet_cnt; // Zaehler fuer GPS Off Time beim Kameraausloesen
static long int limit_gain; // Teilerfaktor Regelabweichung zu Ausgabewert
static int gps_gain ; // Verstaerkunsgfaktor*10
 
short int Get_GPS_data(void);
 
NAV_POSUTM_t actual_pos; // Aktuelle Nav Daten werden hier im ublox Format abgelegt
NAV_STATUS_t actual_status; // Aktueller Nav Status
NAV_VELNED_t actual_speed; // Aktueller Geschwindigkeits und Richtungsdaten
 
GPS_ABS_POSITION_t gps_act_position; // Alle wichtigen Daten zusammengefasst
GPS_ABS_POSITION_t gps_home_position; // Die Startposition, beim Kalibrieren ermittelt
GPS_REL_POSITION_t gps_rel_act_position; // Die aktuelle relative Position bezogen auf Home Position
GPS_REL_POSITION_t gps_rel_hold_position; // Die gespeicherte Sollposition fuer GPS_ Hold Mode
GPS_REL_POSITION_t gps_rel_start_position; // Die gespeicherte Ausgangsposition fuer GPS_ Home Mode
 
// Initialisierung
void GPS_Neutral(void)
{
GpsZiel_X = GpsAktuell_X;
GpsZiel_Y = GpsAktuell_Y;
ublox_msg_state = UBLOX_IDLE;
gps_state = GPS_CRTL_IDLE;
gps_sub_state = GPS_CRTL_IDLE;
actual_pos.status = 0;
actual_speed.status = 0;
actual_status.status = 0;
gps_home_position.status = 0; // Noch keine gueltige Home Position
gps_act_position.status = 0;
gps_rel_act_position.status = 0;
GPS_Nick = 0;
GPS_Roll = 0;
gps_updte_flag = 0;
gps_alive_cnt = 0;
 
}
 
void GPS_BerechneZielrichtung(void)
// Home Position sichern falls Daten verfuegbar sind.
void GPS_Save_Home(void)
{
GPS_Nick = 0;
GPS_Roll = 0;
short int n;
n = Get_GPS_data();
if (n == 0) // Gueltige und aktuelle Daten ?
{
// Neue GPS Daten liegen vor
gps_home_position.utm_east = gps_act_position.utm_east;
gps_home_position.utm_north = gps_act_position.utm_north;
gps_home_position.utm_alt = gps_act_position.utm_alt;
gps_home_position.status = 1; // Home Position gueltig
}
}
 
// Relative Position zur Home Position bestimmen
// Rueckgabewert 0= Daten sind aktuell und gueltig. 1= Keine Aenderung. 2= Daten ungueltig
short int Get_Rel_Position(void)
{
short int n = 0;
n = Get_GPS_data();
if (n >=1) return (n); // nix zu tun, weil keine neue Daten da sind
if (gps_alive_cnt < 1000) gps_alive_cnt += 600; // Timeoutzaehler. Wird in Motorregler Routine ueberwacht und dekrementiert
if (gps_home_position.status > 0) //Nur wenn Home Position vorliegt
{
gps_rel_act_position.utm_east = (int) (gps_act_position.utm_east - gps_home_position.utm_east);
gps_rel_act_position.utm_north = (int) (gps_act_position.utm_north - gps_home_position.utm_north);
gps_rel_act_position.utm_alt = (int) (gps_act_position.utm_alt - gps_home_position.utm_alt);
gps_rel_act_position.status = 1; // gueltige Positionsdaten
n = 0;
gps_updte_flag = 1; // zeigt an, dass neue Daten vorliegen.
}
else
{
n = 2; //keine gueltigen Daten vorhanden
gps_rel_act_position.status = 0; //keine gueltige Position weil keine home Position da ist.
}
return (n);
}
 
// Daten aus aktuellen ublox Messages extrahieren
// Rueckgabewert 0= Daten sind aktuell und gueltig. 1= Keine Aenderung. 2= Daten ungueltig
short int Get_GPS_data(void)
{
short int n = 1;
 
if (actual_pos.status == 0) return (1); //damit es schnell geht, wenn nix zu tun ist
gps_gain = Parameter_NaviGpsGain/5;
limit_gain = 8;
// debug_gp_0 = (int)limit_gain; // zum Debuggen
 
if ((actual_pos.status > 0) && (actual_status.status > 0) && (actual_speed.status > 0))
{
if (((actual_status.gpsfix_type & 0x03) >=2) && ((actual_status.nav_status_flag & 0x01) >=1)) // nur wenn Daten aktuell und gueltig sind
{
actual_status.status = 0;
gps_act_position.utm_east = actual_pos.utm_east/10;
gps_act_position.utm_north = actual_pos.utm_north/10;
gps_act_position.utm_alt = actual_pos.utm_alt/10;
actual_pos.status = 0; //neue ublox Messages anfordern
gps_act_position.speed_gnd = actual_speed.speed_gnd;
gps_act_position.speed_gnd = actual_speed.speed_gnd;
gps_act_position.heading = actual_speed.heading/100000;
actual_speed.status = 0;
gps_act_position.status = 1;
n = 0; //Daten gueltig
}
else
{
gps_act_position.status = 0; //Keine gueltigen Daten
actual_speed.status = 0;
actual_status.status = 0;
actual_pos.status = 0; //neue ublox Messages anfordern
n = 2;
}
}
return (n);
}
 
/*
Daten vom GPS im ublox MSG Format auswerten
Die Routine wird bei jedem Empfang eines Zeichens vom GPS Modul durch den UART IRQ aufgerufen
// Die UBX Messages NAV_POSUTM, NAV_STATUS und NAV_VALED muessen aktiviert sein
*/
void Get_Ublox_Msg(uint8_t rx)
{
switch (ublox_msg_state)
{
case UBLOX_IDLE: // Zuerst Synchcharacters pruefen
if ( rx == UBLOX_SYNCH1_CHAR ) ublox_msg_state = UBLOX_SYNC1;
else ublox_msg_state = UBLOX_IDLE;
break;
 
case UBLOX_SYNC1:
 
if (rx == UBLOX_SYNCH2_CHAR) ublox_msg_state = UBLOX_SYNC2;
else ublox_msg_state = UBLOX_IDLE;
chk_a = 0,chk_b = 0;
break;
 
case UBLOX_SYNC2:
if (rx == UBLOX_NAV_CLASS) ublox_msg_state = UBLOX_CLASS;
else ublox_msg_state = UBLOX_IDLE;
break;
 
case UBLOX_CLASS: // Nur NAV Meldungen auswerten
switch (rx)
{
case UBLOX_NAV_POSUTM:
ptr_pac_status = &actual_pos.status;
if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE; //Abbruch weil Daten noch nicht verwendet wurden
else
{
ptr_payload_data = &actual_pos;
ptr_payload_data_end = &actual_pos.status;
ublox_msg_state = UBLOX_LEN1;
}
break;
 
case UBLOX_NAV_STATUS:
ptr_pac_status = &actual_status.status;
if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE;
else
{
ptr_payload_data = &actual_status;
ptr_payload_data_end = &actual_status.status;
ublox_msg_state = UBLOX_LEN1;
}
break;
 
case UBLOX_NAV_VELED:
ptr_pac_status = &actual_speed.status;
if (*ptr_pac_status > 0) ublox_msg_state = UBLOX_IDLE;
else
{
ptr_payload_data = &actual_speed;
ptr_payload_data_end = &actual_speed.status;
ublox_msg_state = UBLOX_LEN1;
}
break;
 
default:
ublox_msg_state = UBLOX_IDLE;
break;
}
chk_a = UBLOX_NAV_CLASS + rx;
chk_b = UBLOX_NAV_CLASS + chk_a;
break;
 
case UBLOX_LEN1: // Laenge auswerten
rx_len = rx;
chk_a += rx;
chk_b += chk_a;
ublox_msg_state = UBLOX_LEN2;
break;
 
 
case UBLOX_LEN2: // Laenge auswerten
rx_len = rx_len + (rx *256); // Laenge ermitteln
chk_a += rx;
chk_b += chk_a;
ublox_msg_state = UBLOX_PAYLOAD;
break;
 
case UBLOX_PAYLOAD: // jetzt Nutzdaten einlesen
if (rx_len > 0)
{
*ptr_payload_data = rx;
chk_a += rx;
chk_b += chk_a;
--rx_len;
if ((rx_len > 0) && (ptr_payload_data <= ptr_payload_data_end))
{
ptr_payload_data++;
ublox_msg_state = UBLOX_PAYLOAD;
}
else ublox_msg_state = UBLOX_CKA;
}
else ublox_msg_state = UBLOX_IDLE; // Abbruch wegen Fehler
break;
 
case UBLOX_CKA: // Checksum pruefen
if (rx == chk_a) ublox_msg_state = UBLOX_CKB;
else ublox_msg_state = UBLOX_IDLE; // Abbruch wegen Fehler
break;
 
case UBLOX_CKB: // Checksum pruefen
if (rx == chk_b) *ptr_pac_status = 1; // Paket ok
ublox_msg_state = UBLOX_IDLE;
break;
 
default:
ublox_msg_state = UBLOX_IDLE;
break;
}
}
//Zentrale Statemachine fuer alle GPS relevanten Regelungsablauefe
short int GPS_CRTL(short int cmd)
{
static unsigned int cnt; // Zaehler fuer diverse Verzoegerungen
static long int delta_north,delta_east; // Mass fuer Distanz zur Sollposition
signed int n;
static signed int gps_g2t_act_v; // Aktuelle Geschwindigkeitsvorgabe fuer Home Funktion
signed int dist_frm_start_east,dist_frm_start_north;
int amplfy_speed_east,amplfy_speed_north; //Verstaerkungsfaktoren fuer D-Anteil
static signed int int_east,int_north; //Integrierer
long int speed_east,speed_north; //Aktuelle Geschwindigkeit
signed long int_east1,int_north1;
int dist_east,dist_north;
int diff_p; //Vom Modus abhaengige zusaetzliche Verstaerkung
long ni,ro; // Nick und Roll Zwischenwerte
 
 
switch (cmd)
{
 
case GPS_CMD_REQ_HOME: // Es soll zum Startpunkt zurueckgeflogen werden.
if ((gps_state != GPS_CRTL_HOLD_ACTIVE) && (gps_state != GPS_CRTL_HOME_ACTIVE))
{
cnt++;
if (cnt > 100) // erst nach Verzoegerung
{
// Erst mal initialisieren
cnt = 0;
gps_tick = 0;
hold_fast = 0;
hold_reset_int = 0; // Integrator enablen
int_east = 0, int_north = 0;
gps_reg_x = 0, gps_reg_y = 0;
delta_east = 0, delta_north = 0;
dist_flown = 0;
gps_g2t_act_v = 0;
gps_sub_state = GPS_CRTL_IDLE;
// aktuelle positionsdaten abspeichern
if (gps_rel_act_position.status > 0)
{
gps_rel_start_position.utm_east = gps_rel_act_position.utm_east;
gps_rel_start_position.utm_north= gps_rel_act_position.utm_north;
gps_rel_start_position.status = 1; // gueltige Positionsdaten
gps_rel_hold_position.utm_east = gps_rel_act_position.utm_east;
gps_rel_hold_position.utm_north = gps_rel_act_position.utm_north;
gps_rel_hold_position.status = 1; // gueltige Positionsdaten
//Richtung zur Home Position bezogen auf Nordpol bestimmen
hdng_2home = arctan_i(-gps_rel_start_position.utm_east,-gps_rel_start_position.utm_north);
// in Winkel 0...360 Grad umrechnen
if (( gps_rel_start_position.utm_east < 0)) hdng_2home = ( 90-hdng_2home);
else hdng_2home = (270 - hdng_2home);
dist_2home = (int) get_dist(gps_rel_start_position.utm_east,gps_rel_start_position.utm_north,hdng_2home); //Entfernung zur Home Position bestimmen
gps_state = GPS_CRTL_HOME_ACTIVE;
return (GPS_STST_OK);
}
else
{
gps_rel_start_position.status = 0; //Keine Daten verfuegbar
gps_state = GPS_CRTL_IDLE;
return(GPS_STST_ERR); // Keine Daten da
}
}
else return(GPS_STST_PEND); // noch warten
}
break;
// ******************************
 
case GPS_CMD_REQ_HOLD: // Die Lageregelung soll aktiviert werden.
if (gps_state != GPS_CRTL_HOLD_ACTIVE)
{
cnt++;
if (cnt > 600) // erst nach Verzoegerung
{
cnt = 0;
// aktuelle positionsdaten abspeichern
if (gps_rel_act_position.status > 0)
{
hold_fast = 0;
hold_reset_int = 0; // Integrator enablen
int_east = 0, int_north = 0;
gps_reg_x = 0, gps_reg_y = 0;
delta_east = 0, delta_north = 0;
speed_east = 0; speed_north= 0;
// int_ovfl_cnt = 0;
gps_quiet_cnt = 0;
gps_rel_hold_position.utm_east = gps_rel_act_position.utm_east;
gps_rel_hold_position.utm_north = gps_rel_act_position.utm_north;
gps_rel_hold_position.status = 1; // gueltige Positionsdaten
gps_state = GPS_CRTL_HOLD_ACTIVE;
return (GPS_STST_OK);
}
else
{
gps_rel_hold_position.status = 0; //Keine Daten verfuegbar
gps_state = GPS_CRTL_IDLE;
return(GPS_STST_ERR); // Keine Daten da
}
}
else return(GPS_STST_PEND); // noch warten
}
break;
 
case GPS_CMD_STOP: // Lageregelung beenden
cnt = 0;
GPS_Nick = 0;
GPS_Roll = 0;
gps_sub_state = GPS_CRTL_IDLE;
gps_state = GPS_CRTL_IDLE;
return (GPS_STST_OK);
break;
 
default:
return (GPS_STST_ERR);
break;
}
 
switch (gps_state)
{
case GPS_CRTL_IDLE:
cnt = 0;
return (GPS_STST_OK);
break;
 
case GPS_CRTL_HOME_ACTIVE: // Rueckflug zur Basis
//Der Sollwert des Lagereglers wird der Homeposition angenaehert
if (gps_rel_start_position.status >0)
{
if ((gps_updte_flag > 0) && (gps_sub_state !=GPS_HOME_FINISHED)) // nur wenn neue GPS Daten vorliegen und nicht schon alles fertig ist
{
gps_tick++;
int d1,d2,d3;
d1 = abs (gps_rel_hold_position.utm_east - gps_rel_act_position.utm_east );
d2 = abs (gps_rel_hold_position.utm_north - gps_rel_act_position.utm_north );
d3 = (dist_2home - dist_flown); // Restdistanz zum Ziel
if (d3 > GPS_G2T_DIST_MAX_STOP) // Schneller Rueckflug, noch weit weg vom Ziel
{
if ((d1 < (GPS_G2T_FAST_TOL/2)) && (d2 < (GPS_G2T_FAST_TOL/2))) //voll Stoff weiter wenn Lage gut innerhalb der Toleranz
{
if (gps_g2t_act_v < GPS_G2T_V_MAX-1) gps_g2t_act_v += 2; //Geschwindigkeit erhoehen
dist_flown +=gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit
gps_sub_state = GPS_HOME_FAST_IN_TOL;
}
else if ((d1 < GPS_G2T_FAST_TOL) && (d2 < GPS_G2T_FAST_TOL)) //nur weiter wenn Lage innerhalb der Toleranz
{
if (gps_g2t_act_v > (GPS_G2T_V_MAX/2)) gps_g2t_act_v -= 1; //Geschwindigkeit auf Haelfte runter oder rauffahren
else if (gps_g2t_act_v < (GPS_G2T_V_MAX/2)) gps_g2t_act_v += 1;
dist_flown +=gps_g2t_act_v; // Vorgabe der Strecke anhand der Geschwindigkeit
gps_sub_state = GPS_HOME_FAST_IN_TOL;
}
else //Den Lageregler in Ruhe arbeiten lassen weil ausserhalb der Toleranz
{
if (gps_g2t_act_v > 1) gps_g2t_act_v--; // Geschwindigkeit reduzieren
// dist_flown++; //Auch ausserhalb der Toleranz langsam erhoehen
gps_sub_state = GPS_HOME_FAST_OUTOF_TOL;
}
hold_reset_int = 1; // Integrator aussschalten
hold_fast = 1; // Regler fuer schnellen Flug
dist_frm_start_east = (int)(((long)dist_flown * (long)sin_i(hdng_2home))/1000);
dist_frm_start_north = (int)(((long)dist_flown * (long)cos_i(hdng_2home))/1000);
gps_rel_hold_position.utm_east = gps_rel_start_position.utm_east + dist_frm_start_east; //naechster Zielpunkt
gps_rel_hold_position.utm_north = gps_rel_start_position.utm_north + dist_frm_start_north; //naechster Zielpunkt
}
else if (d3 > GPS_G2T_DIST_HOLD) //Das Ziel naehert sich, deswegen abbremsen
{
if ((d1 < GPS_G2T_NRML_TOL) && (d2 < GPS_G2T_NRML_TOL))
{
dist_flown += GPS_G2T_V_RAMP_DWN; // Vorgabe der Strecke anhand der Geschwindigkeit
gps_sub_state = GPS_HOME_RMPDWN_IN_TOL;
}
else
{
dist_flown++; //Auch ausserhalb der Toleranz langsam erhoehen
gps_sub_state = GPS_HOME_RMPDWN_OUTOF_TOL;
}
hold_reset_int = 0; // Integrator einsschalten
hold_fast = 1; // Regler fuer schnellen Flug
dist_frm_start_east = (int)(((long)dist_flown * (long)sin_i(hdng_2home))/1000);
dist_frm_start_north = (int)(((long)dist_flown * (long)cos_i(hdng_2home))/1000);
gps_rel_hold_position.utm_east = gps_rel_start_position.utm_east + dist_frm_start_east; //naechster Zielpunkt
gps_rel_hold_position.utm_north = gps_rel_start_position.utm_north + dist_frm_start_north; //naechster Zielpunkt
}
else //Soll-Ziel fast erreicht, Jetzt noch Reste ausgleichen, weil Zielpunkt nicht exakt bestimmt werden konnte (Fehler in Winkelfkt)
{
if ((d1 < GPS_G2T_NRML_TOL) && (d2 < GPS_G2T_NRML_TOL)) // Jetzt bis zum Zielpunkt regeln
{
gps_sub_state = GPS_HOME_IN_TOL;
hold_fast = 0; // Wieder normal regeln
hold_reset_int = 0; // Integrator einsschalten
if (gps_rel_hold_position.utm_east >= GPS_G2T_V_MIN) gps_rel_hold_position.utm_east -= GPS_G2T_V_MIN;
else if (gps_rel_hold_position.utm_east <= -GPS_G2T_V_MIN ) gps_rel_hold_position.utm_east += GPS_G2T_V_MIN;
if (gps_rel_hold_position.utm_north >= GPS_G2T_V_MIN) gps_rel_hold_position.utm_north -= GPS_G2T_V_MIN;
else if (gps_rel_hold_position.utm_north <= - GPS_G2T_V_MIN ) gps_rel_hold_position.utm_north += GPS_G2T_V_MIN;
if ((abs(gps_rel_hold_position.utm_east) <= GPS_G2T_V_MIN) && (abs(gps_rel_hold_position.utm_north) <=GPS_G2T_V_MIN))
{
gps_rel_hold_position.utm_east = 0;
gps_rel_hold_position.utm_north = 0;
gps_sub_state = GPS_HOME_FINISHED;
}
}
else gps_sub_state = GPS_HOME_OUTOF_TOL;
}
}
gps_state = GPS_CRTL_HOLD_ACTIVE; //Zwischensprung
return (GPS_STST_OK);
}
else // Keine GPS Daten verfuegbar, deswegen Abbruch
{
gps_state = GPS_CRTL_IDLE;
return (GPS_STST_ERR);
}
break;
 
 
case GPS_CRTL_HOLD_ACTIVE: // Hier werden die Daten fuer Nick und Roll errechnet
if (gps_updte_flag >0) // nur wenn neue GPS Daten vorliegen
{
gps_quiet_cnt++;
// ab hier wird geregelt
delta_east = (long) (gps_rel_act_position.utm_east - gps_rel_hold_position.utm_east);
delta_north = (long) (gps_rel_act_position.utm_north - gps_rel_hold_position.utm_north);
int_east += (int)(delta_east*gps_gain)/10;
int_north += (int)(delta_north*gps_gain)/10;
speed_east = actual_speed.speed_e;
speed_north = actual_speed.speed_n;
gps_updte_flag = 0; // Neue Werte koennen vom GPS geholt werden
dist_east = (int)delta_east; //merken
dist_north = (int)delta_north;
 
// #define GPSINT_MAX 3000 // Neues Verfahren ab 30.12.2007 bei Integratoroverflow
long int gpsintmax;
if (Parameter_NaviGpsI > 0)
{
gpsintmax = (GPS_NICKROLL_MAX * limit_gain * GPS_USR_PAR_FKT * ((32*3)/10))/(long)Parameter_NaviGpsI; //auf ungefeahren Maximalwert begrenzen
if ((abs(int_east) > (int)gpsintmax) || (abs(int_north)> (int)gpsintmax))
{
// // = 1; // Zahl der Overflows zaehlen
// int_ovfl_cnt -= 1;
int_east = (int_east * 6)/8; // Wert reduzieren
int_north = (int_north* 6)/8;
}
 
if (hold_reset_int > 0) //Im Schnellen Mode Integrator abschalten
{
int_east = 0;
int_north = 0;
}
}
else // Integrator deaktiviert
{
int_east = 0;
int_north = 0;
}
 
debug_gp_4 = (int)int_east; // zum Debuggen
debug_gp_5 = (int)int_north; // zum Debuggen
 
//I Werte begrenzen
#define INT1_MAX (GPS_NICKROLL_MAX * limit_gain*3)/10// auf 30 Prozent des maximalen Nick/Rollwert begrenzen
int_east1 = ((((long)int_east) * Parameter_NaviGpsI)/32)/GPS_USR_PAR_FKT;
int_north1 = ((((long)int_north) * Parameter_NaviGpsI)/32)/GPS_USR_PAR_FKT;
if (int_east1 > INT1_MAX) int_east1 = INT1_MAX; //begrenzen
else if (int_east1 < -INT1_MAX) int_east1 = -INT1_MAX;
if (int_north1 > INT1_MAX) int_north1 = INT1_MAX; //begrenzen
else if (int_north1 < -INT1_MAX) int_north1 = -INT1_MAX;
 
if (hold_fast > 0) //schneller Coming Home Modus
{
amplfy_speed_east = DIFF_Y_F_MAX;
amplfy_speed_north = DIFF_Y_F_MAX;
amplfy_speed_east *= (Parameter_NaviGpsD/GPS_USR_PAR_FKT);
amplfy_speed_north *= (Parameter_NaviGpsD/GPS_USR_PAR_FKT);
speed_east = (speed_east * (long)amplfy_speed_east*gps_gain) /400;
speed_north = (speed_north * (long)amplfy_speed_north*gps_gain)/400;
// D Werte begrenzen
#define D_F_MAX (GPS_NICKROLL_MAX * limit_gain*7)/10 // auf 70 Prozent des Maximalen Nick/Rollwert begrenzen
if (speed_east > D_F_MAX) speed_east = D_F_MAX;
else if (speed_east < -D_F_MAX) speed_east = -D_F_MAX;
if (speed_north > D_F_MAX) speed_north = D_F_MAX;
else if (speed_north < -D_F_MAX) speed_north = -D_F_MAX;
 
diff_p = (Parameter_NaviGpsP * GPS_PROP_FAST_V)/GPS_USR_PAR_FKT; //Verstaerkung fuer P-Anteil
}
else //langsamer Holdmodus
{
amplfy_speed_east = DIFF_Y_N_MAX;
amplfy_speed_north = DIFF_Y_N_MAX;
amplfy_speed_east *= (Parameter_NaviGpsD/GPS_USR_PAR_FKT);
amplfy_speed_north *= (Parameter_NaviGpsD/GPS_USR_PAR_FKT);
speed_east = (speed_east * (long)amplfy_speed_east*gps_gain) /250;
speed_north = (speed_north * (long)amplfy_speed_north*gps_gain)/250;
// D Werte begrenzen
#define D_N_MAX (GPS_NICKROLL_MAX * limit_gain*8)/10 // auf 80 Prozent des Maximalen Nick/Rollwert begrenzen
if (speed_east > D_N_MAX) speed_east = D_N_MAX;
else if (speed_east < -D_N_MAX) speed_east = -D_N_MAX;
if (speed_north > D_N_MAX) speed_north = D_N_MAX;
else if (speed_north < -D_N_MAX) speed_north = -D_N_MAX;
 
diff_p = (Parameter_NaviGpsP * GPS_PROP_NRML_V)/GPS_USR_PAR_FKT; //Verstaerkung fuer P-Anteil
}
 
// debug_gp_4 = (int)speed_east; // zum Debuggen
// debug_gp_5 = (int)speed_north; // zum Debuggen
 
//P-Werte verstaerken
delta_east = (delta_east * (long)diff_p*gps_gain)/(400);
delta_north = (delta_north * (long)diff_p*gps_gain)/(400);
 
if (hold_fast > 0) //schneller Coming Home Modus
{
// P Werte begrenzen
#define P1_F_MAX (GPS_NICKROLL_MAX * limit_gain*7)/10 // auf 70 Prozent des Maximalen Nick/Rollwert begrenzen
if (delta_east > P1_F_MAX) delta_east = P1_F_MAX;
else if (delta_east < -P1_F_MAX) delta_east = -P1_F_MAX;
if (delta_north > P1_F_MAX) delta_north = P1_F_MAX;
else if (delta_north < -P1_F_MAX) delta_north = -P1_F_MAX;
}
else // Hold modus
{
// P Werte begrenzen
#define P1_N_MAX (GPS_NICKROLL_MAX * limit_gain*7)/10 // auf 70 Prozent des Maximalen Nick/Rollwert begrenzen
if (delta_east > P1_N_MAX) delta_east = P1_N_MAX;
else if (delta_east < -P1_N_MAX) delta_east = -P1_N_MAX;
if (delta_north > P1_N_MAX) delta_north = P1_N_MAX;
else if (delta_north < -P1_N_MAX) delta_north = -P1_N_MAX;
}
 
debug_gp_2 = (int)delta_east; // zum Debuggen
debug_gp_3 = (int)delta_north; // zum Debuggen
 
 
//PID Regler Werte aufsummieren
gps_reg_x = -(int_east1 + delta_east + speed_east); // I + P +D Anteil X Achse
gps_reg_y = -(int_north1 + delta_north + speed_north); // I + P +D Anteil Y Achse
debug_gp_0 = (int)gps_reg_x; // zum Debuggen
debug_gp_1 = (int)gps_reg_y; // zum Debuggen
 
// Werte fuer Nick und Roll direkt aus gps_reg_x und gps_reg_y bestimmen
n = GyroKomp_Int/GIER_GRAD_FAKTOR; //Ausrichtung Kopter
ni = -((gps_reg_y * (long)cos_i(n)) + (gps_reg_x * (long)sin_i(n)))/(1000L*(long)limit_gain);
ro = ((gps_reg_x * (long)cos_i(n)) - (gps_reg_y * (long)sin_i(n)))/(1000L*(long)limit_gain);
if (ni > (GPS_NICKROLL_MAX )) ni = (GPS_NICKROLL_MAX);
else if (ni < -(GPS_NICKROLL_MAX )) ni = -(GPS_NICKROLL_MAX );
if (ro > (GPS_NICKROLL_MAX )) ro = (GPS_NICKROLL_MAX );
else if (ro < -(GPS_NICKROLL_MAX)) ro = -(GPS_NICKROLL_MAX );
 
if ((abs(dist_east) > GPS_DIST_MAX) || (abs(dist_north) > GPS_DIST_MAX)) // bei zu grossem Abstand abbrechen
{
GPS_Roll = 0;
GPS_Nick = 0;
gps_state = GPS_CRTL_IDLE;
return (GPS_STST_ERR);
break;
}
else if ((PPM_in[7] > 100) && (CAM_GPS_QUIET > 0) && (gps_quiet_cnt <=4) ) // Wenn Fotoausloeser gedruckt wird, GPS Stellwerte kurzzeitig auf 0 setzen
{
gps_quiet_cnt++;
GPS_Roll = 0;
GPS_Nick = 0;
if ( cmd == GPS_CMD_REQ_HOME ) gps_state = GPS_CRTL_HOME_ACTIVE; // State umsetzen
return (GPS_STST_OK);
}
else if ((PPM_in[7] < 50) && (CAM_GPS_QUIET > 0) && (gps_quiet_cnt >= 4))
{
gps_quiet_cnt = 0;
if ( cmd == GPS_CMD_REQ_HOME ) gps_state = GPS_CRTL_HOME_ACTIVE; // State umsetzen
return (GPS_STST_OK);
}
else
{
GPS_Roll = (int)ro;
GPS_Nick = (int)ni;
if ( cmd == GPS_CMD_REQ_HOME ) gps_state = GPS_CRTL_HOME_ACTIVE; // State umsetzen
return (GPS_STST_OK);
}
}
else
{
if ( cmd == GPS_CMD_REQ_HOME ) gps_state = GPS_CRTL_HOME_ACTIVE; // State umsetzen
return (GPS_STST_OK);
}
break;
 
default:
gps_state = GPS_CRTL_IDLE;
return (GPS_STST_ERR);
break;
}
return (GPS_STST_ERR);
}
 
/branches/salvo_gps/Basis_V0071h/trunk/License_LPGL.txt
0,0 → 1,165
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
 
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
 
 
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
 
0. Additional Definitions.
 
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
 
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
 
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
 
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
 
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
 
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
 
1. Exception to Section 3 of the GNU GPL.
 
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
 
2. Conveying Modified Versions.
 
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
 
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
 
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
 
3. Object Code Incorporating Material from Library Header Files.
 
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
 
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
 
b) Accompany the object code with a copy of the GNU GPL and this license
document.
 
4. Combined Works.
 
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
 
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
 
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
 
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
 
d) Do one of the following:
 
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
 
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
 
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
 
5. Combined Libraries.
 
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
 
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
 
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
 
6. Revised Versions of the GNU Lesser General Public License.
 
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
 
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
 
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
/branches/salvo_gps/Basis_V0071h/trunk/README_Gps_Deutsch.txt
0,0 → 1,87
*********************************************************************
GPS Implementierung von Peter Muehlenbrock ("Salvo") für Mikrokopter/FlightCrtl
Stand 29.10.2008
Verwendung der SW ohne Gewaehr. Siehe auch die Lizenzbedingungen in File Licensce_LPGL.txt und Licensce_GPL.txt
Die Version basiert auf Holgers V00.70d.
*********************************************************************
Hardware-Voraussetzungen:
Kalibrierter Kompass vom Typ CMPS03, waagrecht eingebaut
GPS Modul vom Typ ublox, Die Meldungungen "NAV_STATUS", "NAV_POSUTM" und "NAV_VELNED"
mussen mit 4 HZ Updaterate aktiviert sein. Alle Meldungen im NMEA Format muessen deaktivert sein.
Anschluss an RX Port der FlightCRtl. Baudrate ist 57600 wie beim Kopter Tool.
 
Software-Voraussetzungen:
In timer0.h muss die Ausrichtung des Kompasses bezogen auf die Nordachse des Kopters
eingetragen sein. Wenn KOMPASS_OFFSET > 0 wird dieser Wert genommen
Wenn KOMPASS_OFFSET = 0 ist wird der UserParameter4 verwendet (=hexfile). Da die Userparameter nur ein Byte lang sind werden
Offsets von 0...358 Grad durch einen Wert von 0...179 dargestellt.
 
Betriebs-Voraussetzungen:
Damit der Kompass sauber funktioniert, muss die waagrechte Lage (Gashebel Vollanschlag und Gier rechts)
im Eeprom abgespeichert worden sein.
 
Parametrierung:
Der GPS Hold Regler ist ein PID Regler, der ueber die NaviCrtl Parameter gesteuert wird.
GPS_P beschreibt den P(roportional)-Anteil, GPS_I den I(ntegral)-Anteil und GPS_D den D(ifferential)-Anteil. Mit GPS Gain kann die
Gesamtverstaerkung eingestellt worden
Hier kann und muss gespielt werden.Alle Parameter koennen direkt im Mikrokoptertool in den Settings eingestellt werden.
 
Der P-Anteil wirkt einer Lageänderung entgegen. Je größer er ist, desto geringer die Regelabweichung, desto höher aber auch die Schwingneigung.
Der D-Anteil wirkt einer Geschwindigkeitsänderung entgegen und dient zur Reduzierung von Schwingungen, darf aber auch nicht zu gross sein.
Der I-Anteil dient nur dazu die Lageabweichung auf Null zu bringen.
P und D Anteil mussen gut aufeinander abgestimmt sein, damit die Einschwingzeit bei gleichzeitig geringer Schwingneigung klein ist.
Standarddwerte für P,I,D sind 60,8,100 bzw 100 für GPS Gain
Wenn alle 0 sind, ist der Regler deaktiviert.
 
Voraussetzungen für GPS_Hold:
Neben den genannten HW und SW Voraussetzungen muß beim Kalibrieren das GPS MOdul bereits Positionsdaten liefern.
Nur dann wird die Home Position abgespeichert und nur dann wird GPS_Hold aktiviert.
Kenntlich gemacht wird dies durch einen etwas längeren Piepser nach dem Kalibrieren. Die Rote Led auf der FlightCrtl blitzt bei jedem Empfang eines kompletten
und korrekten Meldungsset ( "NAV_STATUS", "NAV_POSUTM" und "NAV_VELNED").
Zur Aktivierung von GPS Hold muessen die GPS und Kompass Flags im Setting enbaled sein.
Eine Ausrichtung des Kopters nach Nord etc. ist nicht erforderlich.
 
Aktivierung GPS_Hold im Flug:
Wenn alle genannten Voraussetzungen erfüllt sind, wird GPS Hold im Flug automatisch aktiviert, sobald der Nick und Roll Stick
für ca. 500msec in Neutrallage sind. Weicht einer der Sticks davon ab (Parameter GPS Threshold) oder liefert das GPS Modul keine Daten oder fällt der
Kompass aus wird GPS_Hold sofort deaktiviert.
Damit kann jederzeit die manuelle Kontrolle wieder übernommen werden.
 
GPS_Hold regelt nur horizontale Abweichungen, keine Hoehe.
Der Magnetkompass wird nur in waagrechter Lage dazu benutzt einen internen aus dem Giergyro ermittelten "Ersatz"kompasswert
nach zu kalibrieren. Daher funktioniert die Bstimmung der Kopterausrichtung in jeder Lebenslage, sofern nur ab und zu
der Magnetkompass in die waagrechte Lage kommt. Da der Giergyro per Kompass automatisch offsetkorrigiert wird, ist er spätestens nach
einigen wenigen Minuten auch bei Temperatursprüngen ausreichend stabil.
Ein 3D Kompass ist damit überflüssig.
Die GPS Regelung benötigt zwar pro Durchlauf eine erhebliche Rechenzeit. Da sie aber nur einmal je neuem Meldungsblock vom
GPS Modul (also alle 250ms) aufgerufen wird, wird die Gesamtbelastung der CPU nur minimal erhöht.
Ein externes Naviboard ist daher nicht notwendig.
 
GPS Rücksturz zur Basis (GPS Home) Funktion
Voraussetzungen wie bei GPS Hold.
GPS Mode Control hat einen Wert > 170
 
 
Weitere Änderungen:
 
 
-Der Ausgang PC6 kann benutzt werden um einen Externen Multiplexer zu schalten. Dieser schaltet entweder die GPS Daten
(Wenn Motoren eingeschaltet sind) oder den Ausgang des Bluetoothmoduls (wenn Motoren ausgeschaltet sind) auf den RX
Eingang der FlightCrtl. Damit kann eine zweite UART Schnittstelle bzw. die manuelle Umschaltung entfallen
 
-Bei vorhandenem Kompass wird eine automatische Kompensation der Giergyrodrift durchgeführt.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/branches/salvo_gps/Basis_V0071h/trunk/README_Gps_English.txt
0,0 → 1,66
*********************************************************************
GPS Implementation by Peter Muehlenbrock ("Salvo") for Mikrokopter/FlightCrtl
As of October 28th, 2008
Please note the files Licensce_LPGL.txt and Licensce_GPL.txt
This SW is based on Holgers V00.70d.
*********************************************************************
Hardware-requirements:
Calibrated compass of type CMPS03, horizontally adjusted
GPS module of type ublox, The messages "NAV_STATUS", "NAV_POSUTM" and "NAV_VELNED"
must be activated with 4 HZ update rate. All messages of type NMEA should be disabled.
The TX port of the GPS module must be connected to the RX input of the Flight Crtl. Baudrate is 57600 (like Kopter Tool).
 
UserParameter 4 tells the software the orientation for the compass. The difference between the "north" direction
( = Motor "vorne" or 1 as described in Holgers Flight Crtl manual) of the kopter
and the north direction of the compass is represented as follows: 0...360 degree offset corresponds to a value of 0...180.
(A userparameter ist only 1 byte long and therefore can not directly represent 0..360 degree). Please check the
correct value via the Koptertool. The "Kompass" debug value has to show the correct orientation:
kopter Motor vorne orientated to north => value approx 0 Degree)
 
Other requirements:
Please calibrate the ACC Sensor values (pitch full, yaw full right) in horizontal orientation of the kopter
as exactly as possible.
 
Parameters:
The GPS Hold regulator is of type PID: GPS-P =P(proportional), GPS-I = I(ntegral),
GPS-D = D(ifferential). Standardvalues for P,I and D are 60,8,100. GPS Gain is the overall gain and set to 100 as default
The I-Part may be set to 0 if a small deviation from hold position is acceptable. The D-Part is important to avoid
oscillating.
Please find out the best values yourself.
It might be useful to put the P and D Part on potis and test the behaviour in flight.
 
Requirements for GPS_Hold:
The gps module has do provide a 3D-fix. If succesfull, you can hear a longer beep when performing a gyro calibration.
Without a succesfull position fix at calibration the GPS functionality ist completely disabled.
The red led on the FlightCrtl flashes with a 4 Hz rate if the gps module delivers a position fix.
The GPS flag and Compass flag in the setting must be enabled
 
Enabling GPS_Hold in flight:
GPS Hold is automatically activated if the sticks for roll and nick are in neutral position for about 400ms.
Moving the stick immediately disables the Hold mode. The GPS Hold function doesn not change height, pitch or yaw.
 
GPS Coming-Home function
Enabled when the GPS and compass flag in the setting are enabled and the GPS Mode Control Switch is set to a value > 170
 
 
 
Other changes:
 
- Output PC6 can be used to switch TX data between a Bluetooth and the GPS Module (further hardware required) to the RX input of the FlightCrtl
- automatic Yaw gyro compensation if compass is available.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/branches/salvo_gps/Basis_V0071h/trunk/fc.c
51,6 → 51,12
// + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// + POSSIBILITY OF SUCH DAMAGE.
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Aenderungen von Peter Muehlenbrock ("Salvo") Stand 9.11.2008
/*
Driftkompensation fuer Gyros verbessert
Linearsensor optional mit fixem Neutralwert
Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsunabhaengige Kompassfunktion
*/
 
#include "main.h"
#include "eeprom.c"
85,6 → 91,25
long ErsatzKompass;
int ErsatzKompassInGrad; // Kompasswert in Grad
int GierGyroFehler = 0;
//Salvo 12.10.2007
uint8_t magkompass_ok=0;
uint8_t gps_cmd = GPS_CMD_STOP;
static int ubat_cnt =0;
static int gas_actual,gas_mittel; //Parameter fuer Gasreduzierung bei unterspannung
int w,v;
//Salvo End
 
//Salvo 15.12.2007 Ersatzkompass und Giergyrokompensation
long GyroKomp_Int;
long int GyroGier_Comp;
int GyroKomp_Value; // Der ermittelte Kompasswert aus Gyro und Magnetkompass
short int cnt_stickgier_zero =0;
int gyrogier_kompass;
//Salvo End
 
//Salvo 2.1.2008 Allgemeine Debugvariablen
int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7;
//Salvo End
float GyroFaktor;
float IntegralFaktor;
volatile int DiffNick,DiffRoll;
132,6 → 157,7
unsigned char Parameter_NaviGpsI;
unsigned char Parameter_NaviGpsD;
unsigned char Parameter_NaviGpsACC;
unsigned char Parameter_NaviStickThreshold; //salvo 16.10.2008
unsigned char Parameter_NaviOperatingRadius;
unsigned char Parameter_NaviWindCorrection;
unsigned char Parameter_NaviSpeedCompensation;
142,6 → 168,13
unsigned int modell_fliegt = 0;
unsigned char MikroKopterFlags = 0;
 
//Salvo 2.1.2008 Allgemeine Debugvariablen
int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7;
//Salvo End
 
 
 
 
void Piep(unsigned char Anzahl)
{
while(Anzahl--)
157,7 → 190,10
void SetNeutral(void)
//############################################################################
{
NeutralAccX = 0;
// Salvo 9.12.2007
RX_SWTCH_ON; //GPS Daten auf RX eingang schalten
// Salvo End
NeutralAccX = 0;
NeutralAccY = 0;
NeutralAccZ = 0;
AdNeutralNick = 0;
220,6 → 256,13
FromNaviCtrl_Value.Kalman_K = -1;
FromNaviCtrl_Value.Kalman_MaxDrift = EE_Parameter.Driftkomp * 16;
FromNaviCtrl_Value.Kalman_MaxFusion = 32;
//Salvo 13.10.2007 Ersatzkompass und Gas
GyroKomp_Int = KompassValue * GIER_GRAD_FAKTOR; //Neu ab 15.10.2008
// gas_mittel = 30;
// gas_actual = gas_mittel;
// Salvo End
 
}
 
//############################################################################
234,7 → 277,7
MesswertNick = (signed int) AdWertNick - AdNeutralNick;
 
//DebugOut.Analog[26] = MesswertNick;
DebugOut.Analog[28] = MesswertRoll;
//DebugOut.Analog[28] = MesswertRoll;
 
// Beschleunigungssensor ++++++++++++++++++++++++++++++++++++++++++++++++
Mittelwert_AccNick = ((long)Mittelwert_AccNick * 1 + ((ACC_AMPLIFY * (long)AdWertAccNick))) / 2L;
248,6 → 291,10
IntegralAccZ += Aktuell_az - NeutralAccZ;
// Gier ++++++++++++++++++++++++++++++++++++++++++++++++
ErsatzKompass += MesswertGier;
//Salvo 12.11.2007
GyroKomp_Int += (long)MesswertGier;
GyroGier_Comp += (long)MesswertGier;
//Salvo End
Mess_Integral_Gier += MesswertGier;
// Mess_Integral_Gier2 += MesswertGier;
if(ErsatzKompass >= (360L * GIER_GRAD_FAKTOR)) ErsatzKompass -= 360L * GIER_GRAD_FAKTOR; // 360° Umschlag
438,12 → 485,12
CHK_POTI_MM(Parameter_J16Timing,EE_Parameter.J16Timing,1,255);
CHK_POTI_MM(Parameter_J17Timing,EE_Parameter.J17Timing,1,255);
 
// CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255);
//CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255);
// CHK_POTI(Parameter_NaviGpsP,EE_Parameter.NaviGpsP,0,255);
// CHK_POTI(Parameter_NaviGpsI,EE_Parameter.NaviGpsI,0,255);
// CHK_POTI(Parameter_NaviGpsD,EE_Parameter.NaviGpsD,0,255);
// CHK_POTI(Parameter_NaviGpsACC,EE_Parameter.NaviGpsACC,0,255);
CHK_POTI(Parameter_NaviGpsModeControl,EE_Parameter.NaviGpsModeControl,0,255);
CHK_POTI(Parameter_NaviGpsGain,EE_Parameter.NaviGpsGain,0,255);
CHK_POTI(Parameter_NaviGpsP,EE_Parameter.NaviGpsP,0,255);
CHK_POTI(Parameter_NaviGpsI,EE_Parameter.NaviGpsI,0,255);
CHK_POTI(Parameter_NaviGpsD,EE_Parameter.NaviGpsD,0,255);
CHK_POTI(Parameter_NaviGpsACC,EE_Parameter.NaviGpsACC,0,255);
// CHK_POTI_MM(Parameter_NaviOperatingRadius,EE_Parameter.NaviOperatingRadius,10,255);
// CHK_POTI(Parameter_NaviWindCorrection,EE_Parameter.NaviWindCorrection,0,255);
// CHK_POTI(Parameter_NaviSpeedCompensation,EE_Parameter.NaviSpeedCompensation,0,255);
475,9 → 522,17
static char TimerWerteausgabe = 0;
static char NeueKompassRichtungMerken = 0;
static long ausgleichNick, ausgleichRoll;
 
Mittelwert();
 
Mittelwert();
//****** GPS Daten holen ***************
short int n;
if (gps_alive_cnt > 0) gps_alive_cnt--; //Dekrementieren. Wenn 0 kommen keine ausreichenden GPS Meldungen (Timeout)
n = Get_Rel_Position();
if (n == 0)
{
ROT_ON; //led blitzen lassen
}
//******PROVISORISCH***************
GRN_ON;
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gaswert ermitteln
551,6 → 606,7
if(++delay_neutral > 200) // nicht sofort
{
GRN_OFF;
SetNeutral();
MotorenEin = 0;
delay_neutral = 0;
modell_fliegt = 0;
579,6 → 635,13
}
SetNeutral();
Piep(GetActiveParamSetNumber());
GPS_Save_Home(); //Daten sind jetzt hoffentlich verfuegbar
if (gps_home_position.status > 0 )
{
Delay_ms(1000); //akustisch verkuenden dass GPS Home Daten da sind
beeptime = 1000;
Delay_ms(500);
}
}
}
}
617,6 → 680,10
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(++delay_einschalten > 200)
{
int n;
// Salvo 9.12.2007
RX_SWTCH_ON; //GPS Daten auf RX eingang schalten
// Salvo End
delay_einschalten = 200;
modell_fliegt = 1;
MotorenEin = 1;
629,6 → 696,8
Mess_IntegralRoll2 = IntegralRoll;
SummeNick = 0;
SummeRoll = 0;
n= GPS_CRTL(GPS_CMD_STOP); //GPS Lageregelung beenden
 
MikroKopterFlags |= FLAG_START;
}
}
641,6 → 710,10
{
if(++delay_ausschalten > 200) // nicht sofort
{
// Salvo 9.12.2007
RX_SWTCH_OFF; //Bluetooth Daten auf RX eingang schalten
// Salvo End
MotorenEin = 0;
delay_ausschalten = 200;
modell_fliegt = 0;
897,10 → 970,15
if(GierGyroFehler > ABGLEICH_ANZAHL/2) { AdNeutralGier++; AdNeutralGierBias++; }
if(GierGyroFehler <-ABGLEICH_ANZAHL/2) { AdNeutralGier--; AdNeutralGierBias--; }
 
DebugOut.Analog[22] = MittelIntegralRoll / 26;
//DebugOut.Analog[22] = MittelIntegralRoll / 26;
//DebugOut.Analog[24] = GierGyroFehler;
GierGyroFehler = 0;
 
//Salvo Ersatzkompass Ueberlauf korrigieren
if (GyroKomp_Int >= ((long)360 * GIER_GRAD_FAKTOR)) GyroKomp_Int = GyroKomp_Int - (GIER_GRAD_FAKTOR *(long)360); //neu ab 3.11.2007
if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + (GIER_GRAD_FAKTOR *(long)360); //neu ab 3.11.2007
ROT_OFF;
// Salvo End
 
/*DebugOut.Analog[17] = IntegralAccNick / 26;
DebugOut.Analog[18] = IntegralAccRoll / 26;
1015,8 → 1093,118
ZaehlMessungen = 0;
}
//DebugOut.Analog[31] = StickRoll / (26*IntegralFaktor);
// Salvo Ersatzkompass und Giergyrokompensation 15.12.2007 **********************
if ((Kompass_Neuer_Wert > 0)) //nur wenn Kompass einen neuen Wert geliefert hat
{
Kompass_Neuer_Wert = 0;
w = (abs(Mittelwert_AccNick));
v = (abs(Mittelwert_AccRoll));
if ((w < ACC_WAAGRECHT_LIMIT) && (v < ACC_WAAGRECHT_LIMIT)) //Ersatzkompass und Giergyro nur mit Magnetkompass aktualisieren wenn alles ok
{
if ((abs(KompassValue - Kompass_Value_Old)) <= 5) // Aufeinanderfolgende Werte duerfen nur minimal abweichen
{
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if ((abs(StickGier) < 20)) //Giergyroabgleich mit Kompass
{
if (cnt_stickgier_zero < 255) cnt_stickgier_zero += 1;
if (cnt_stickgier_zero > 2) // nur Abgleichen wenn keine Stickbewegung da
{
w = (int) (GyroGier_Comp/(long)GIER_GRAD_FAKTOR);
v = KompassValue - gyrogier_kompass; // realen Drehwinkel seit letztem Ruecksetzen von GyroGier_Comp bestimmen
if (v <-180) v +=360; // Uberlaufkorrektur
if (v > 180) v -=360; // Uberlaufkorrektur
 
v = w-v; //Differenz Gyro zu Kompass ist der Driftfehler
 
#define GIER_COMP_MAX 4
if (v > GIER_COMP_MAX) v= GIER_COMP_MAX;
if (v < -GIER_COMP_MAX) v= - GIER_COMP_MAX;
if (abs(w) > 1)
{
GyroGier_Comp = 0;
gyrogier_kompass = KompassValue; // Kompasswert merken
AdNeutralGier -= v;
}
}
}
else
{
gyrogier_kompass = KompassValue; // Kompasswert merken
cnt_stickgier_zero = 0;
GyroGier_Comp = 0;
}
 
magkompass_ok = 1; // Flag dass Magnetkompass stabil arbeitet
GyroKomp_Int = (GyroKomp_Int )/(long)GIER_GRAD_FAKTOR;
 
w = KompassValue - GyroKomp_Int;
if ((w > 0) && (w < 180))
{
++GyroKomp_Int;
}
else if ((w > 0) && (w >= 180))
{
--GyroKomp_Int;
}
else if ((w < 0) && (w >= -180))
{
--GyroKomp_Int;
}
else if ((w < 0) && (w < -180))
{
++GyroKomp_Int;
}
if (GyroKomp_Int < 0) GyroKomp_Int = GyroKomp_Int + 360L;
GyroKomp_Int = (GyroKomp_Int%360L) * (long)GIER_GRAD_FAKTOR; // An Magnetkompasswert annaehern
}
}
else //Kompassfehler
{
magkompass_ok = 0;
GyroGier_Comp = 0;
}
Kompass_Value_Old = KompassValue;
}
// Salvo End *************************
 
// Salvo 6.10.2007
// GPS Home aktivieren wenn Knueppel in Ruhelage und Hoehenschalter aktiviert ist
//GPS Hold Aktiveren wenn Knueppel in Ruhelage sind
if ((abs(PPM_in[EE_Parameter.Kanalbelegung[K_NICK]]) < Parameter_NaviStickThreshold)
&& (abs(PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]) < Parameter_NaviStickThreshold) && (gps_alive_cnt > 0))
{
if ((Parameter_NaviGpsModeControl > 170) && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) //Hoehenschalter und GPS Flag aktiv
{
if ( gps_cmd == GPS_CMD_REQ_HOLD) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet
else gps_cmd = GPS_CMD_REQ_HOME;
n = GPS_CRTL(gps_cmd);
}
else if ((Parameter_NaviGpsModeControl < 170) && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV)) //Hoehenschalter Mittelstellung und GPS Flag aktiv
{
if ( gps_cmd == GPS_CMD_REQ_HOME) gps_cmd = GPS_CMD_STOP; // erst mal stoppen, denn altes Kommando wurde noch nicht beendet
else gps_cmd = GPS_CMD_REQ_HOLD;
n= GPS_CRTL(gps_cmd);
}
else // GPS komplett aus
{
if (gps_cmd != GPS_CMD_STOP)
{
gps_cmd = GPS_CMD_STOP;
n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden
}
}
}
else
{
if (gps_cmd != GPS_CMD_STOP)
{
gps_cmd = GPS_CMD_STOP;
n= GPS_CRTL(gps_cmd); //GPS Lageregelung beenden
}
}
if (gps_state != GPS_CRTL_IDLE) if (TimerWerteausgabe == 12) LED_J16_OFF; //led im GPS Mode schnell blinken lassen
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Gieren
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// if(GasMischanteil < 35) { if(StickGier > 10) StickGier = 10; else if(StickGier < -10) StickGier = -10;};
1040,53 → 1228,27
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//DebugOut.Analog[29] = (MaxStickNick + MaxStickRoll);
 
if(KompassValue && (EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV))
{
int w,v,r,fehler,korrektur;
w = abs(IntegralNick /512); // mit zunehmender Neigung den Einfluss drosseln
v = abs(IntegralRoll /512);
if(v > w) w = v; // grösste Neigung ermitteln
korrektur = w / 8 + 1;
fehler = ((540 + KompassValue - (ErsatzKompass/GIER_GRAD_FAKTOR)) % 360) - 180;
if(NeueKompassRichtungMerken)
{
fehler = 0;
ErsatzKompass = KompassValue * GIER_GRAD_FAKTOR;
}
if(!KompassSignalSchlecht && w < 25)
{
GierGyroFehler += fehler;
if(NeueKompassRichtungMerken)
{
beeptime = 200;
// KompassStartwert = KompassValue;
KompassStartwert = (ErsatzKompass/GIER_GRAD_FAKTOR);
NeueKompassRichtungMerken = 0;
}
// Salvo 13.9.2007 Nur wenn Magnetkompass ordentliche Werte liefert
if ((magkompass_ok > 0) && NeueKompassRichtungMerken)
{
KompassStartwert = KompassValue;
NeueKompassRichtungMerken = 0;
}
ErsatzKompass += (fehler * 8) / korrektur;
w = (w * Parameter_KompassWirkung) / 32; // auf die Wirkung normieren
// Salvo 13.9.2007
w=0;
// Salvo End
w = (w * Parameter_KompassWirkung) / 64; // auf die Wirkung normieren
w = Parameter_KompassWirkung - w; // Wirkung ggf drosseln
if(w >= 0)
{
if(!KompassSignalSchlecht)
{
v = 64 + ((MaxStickNick + MaxStickRoll)) / 8;
r = ((540 + (ErsatzKompass/GIER_GRAD_FAKTOR) - KompassStartwert) % 360) - 180;
// r = KompassRichtung;
v = (r * w) / v; // nach Kompass ausrichten
w = 3 * Parameter_KompassWirkung;
if(v > w) v = w; // Begrenzen
else
if(v < -w) v = -w;
Mess_Integral_Gier += v;
}
if(KompassSignalSchlecht) KompassSignalSchlecht--;
}
else KompassSignalSchlecht = 500; // so lange das Signal taub stellen --> ca. 1 sek
}
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Salvo Kompasssteuerung **********************
if (magkompass_ok > 0) Mess_Integral_Gier += (KompassRichtung * w) / 32; // nach Kompass ausrichten
// Salvo End
}
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Debugwerte zuordnen
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1093,6 → 1255,11
if(!TimerWerteausgabe--)
{
TimerWerteausgabe = 24;
// Salvo 13.12.2007 Beleuchtung steuern
if (!(beeptime & BeepMuster)) LED_J16_FLASH;
else if (MotorenEin) LED_J16_ON;
else LED_J16_OFF;
// Salvo End
 
DebugOut.Analog[0] = IntegralNick / EE_Parameter.GyroAccFaktor;
DebugOut.Analog[1] = IntegralRoll / EE_Parameter.GyroAccFaktor;
1100,25 → 1267,34
DebugOut.Analog[3] = Mittelwert_AccRoll;
DebugOut.Analog[4] = MesswertGier;
DebugOut.Analog[5] = HoehenWert;
DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
// DebugOut.Analog[6] = (Mess_Integral_Hoch / 512);
DebugOut.Analog[8] = KompassValue;
DebugOut.Analog[9] = UBat;
DebugOut.Analog[11] = ErsatzKompass / GIER_GRAD_FAKTOR;
DebugOut.Analog[10] = SenderOkay;
DebugOut.Analog[10] = Mess_Integral_Gier / 128;
// DebugOut.Analog[10] = SenderOkay;
DebugOut.Analog[11] = GyroKomp_Int / GIER_GRAD_FAKTOR;
//DebugOut.Analog[16] = Mittelwert_AccHoch;
DebugOut.Analog[17] = FromNaviCtrl_Value.Distance;
DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
DebugOut.Analog[19] = WinkelOut.CalcState;
DebugOut.Analog[20] = ServoValue;
DebugOut.Analog[27] = (int)FromNaviCtrl_Value.Kalman_MaxDrift;
DebugOut.Analog[29] = (int)FromNaviCtrl_Value.Kalman_K;
DebugOut.Analog[30] = GPS_Nick;
DebugOut.Analog[31] = GPS_Roll;
// DebugOut.Analog[17] = FromNaviCtrl_Value.Distance;
// DebugOut.Analog[18] = (int)FromNaviCtrl_Value.OsdBar;
// DebugOut.Analog[19] = WinkelOut.CalcState;
// DebugOut.Analog[20] = ServoValue;
 
 
// DebugOut.Analog[19] -= DebugOut.Analog[19]/128;
// if(DebugOut.Analog[19] > 0) DebugOut.Analog[19]--; else DebugOut.Analog[19]++;
DebugOut.Analog[23] = debug_gp_0;
DebugOut.Analog[24] = debug_gp_1;
DebugOut.Analog[25] = debug_gp_2;
DebugOut.Analog[26] = gps_rel_act_position.utm_east; //in 10cm ausgeben
DebugOut.Analog[27] = gps_rel_act_position.utm_north;
DebugOut.Analog[28] = gps_rel_act_position.utm_alt;
DebugOut.Analog[29] = gps_state + (gps_sub_state*10)+(50*gps_cmd);
 
DebugOut.Analog[30] = GPS_Nick;
DebugOut.Analog[31] = GPS_Roll;
 
 
/* DebugOut.Analog[16] = motor_rx[0];
DebugOut.Analog[17] = motor_rx[1];
DebugOut.Analog[18] = motor_rx[2];
/branches/salvo_gps/Basis_V0071h/trunk/fc.h
4,11 → 4,22
 
#ifndef _FC_H
#define _FC_H
//#define GIER_GRAD_FAKTOR 1450L // Abhängigkeit zwischen GyroIntegral und Winkel
#define GIER_GRAD_FAKTOR 1450L // Abhängigkeit zwischen GyroIntegral und Winkel
//#define GIER_GRAD_FAKTOR 1550L // Abhängigkeit zwischen GyroIntegral und Winkel
#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel
//#define GIER_GRAD_FAKTOR 1291L // Abhängigkeit zwischen GyroIntegral und Winkel
#define STICK_GAIN 4
//Salvo 9.12.2007 Neutralwerte fuer ACC Sensor nur verwendet wenn ACC_FIXED >0
#define ACC_FIXED 0 // wenn > 0werden diese Werte beim ACC Kalbibrieren ins Eeprom geschrieben
#define ACC_WAAGRECHT_LIMIT 100 // Nick und Roll kleiner als dieser Wert gelten als Kriterium fuer waagrechte Lage
 
//Salvo 2.9.2007 Ersatzkompass: Gyroincrements/Grad als Defaultwert *****
// Laut Datenblatt sind die Werte ueber Zeit und Temperatur sehr stabil.
#define CAM_GPS_QUIET 0 // wenn dieses Flag gesetzt ist, wird GPS beim Ausloesen kurzzeitig deaktiviert um eine ruhige Lage zu bekommen
// Salvo End
 
#define GIER_INTEGRAL_MAX 50000 //Salvo 18.10.2008 Gier Integrierer macht Probleme (links /rechts unterschiedlich) Liegt an schraeg stehenden
//Motoren und dann in die begrenzung laufenden Giergyro
 
#define FLAG_MOTOR_RUN 1
#define FLAG_FLY 2
#define FLAG_CALIBRATE 4
62,6 → 73,17
extern void DefaultKonstanten1(void);
extern void DefaultKonstanten2(void);
 
//Salvo 2.1.2008 Debugvariablens
extern int debug_gp_0,debug_gp_1,debug_gp_2,debug_gp_3,debug_gp_4,debug_gp_5,debug_gp_6,debug_gp_7; //Allgemeine Debugvariablen
//Salvo End
 
//Salvo 2.9.2007 Ersatzkompass
extern long GyroKomp_Int;
extern long int GyroGier_Comp;
extern int GyroKomp_Inc_Grad;
extern int GyroKomp_Value; // Der ermittelte Kompasswert aus Gyro und Magnetkompass
// Salvo End
 
#define STRUCT_PARAM_LAENGE 86
struct mk_param_struct
{
155,7 → 177,7
extern unsigned char Parameter_J16Timing; // for the J16 Output
extern unsigned char Parameter_J17Bitmask; // for the J17 Output
extern unsigned char Parameter_J17Timing; // for the J17 Output
/*
 
extern unsigned char Parameter_NaviGpsModeControl; // Parameters for the Naviboard
extern unsigned char Parameter_NaviGpsGain;
extern unsigned char Parameter_NaviGpsP;
165,6 → 187,6
extern unsigned char Parameter_NaviOperatingRadius;
extern unsigned char Parameter_NaviWindCorrection;
extern unsigned char Parameter_NaviSpeedCompensation;
*/
#endif //_FC_H
 
/branches/salvo_gps/Basis_V0071h/trunk/gps.h
1,7 → 1,132
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern signed int GPS_Nick2;
extern signed int GPS_Roll2;
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Peter Muehlenbrock alias Salvo
// Definitionen fuer Modul GPS
// Stand 7.12.2008
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
extern signed int GPS_Nick;
extern signed int GPS_Roll;
extern signed int GPS_Nick2;
extern signed int GPS_Roll2;
extern void GPS_Neutral(void);
extern void Get_Ublox_Msg(uint8_t rx) ;
extern short int Get_GPS_data(void);
extern short int Get_Rel_Position(void);
extern void GPS_Save_Home(void);
extern short int GPS_CRTL(short int cmd);
 
void GPS_Neutral(void);
void GPS_BerechneZielrichtung(void);
typedef struct {
unsigned long utm_itow; // time of week
long utm_east; // UTM Ost in cm
long utm_north; // UTM Nord in cm
long utm_alt; // hoehe in cm
uint8_t utm_zone; //
uint8_t utm_hem; // Hemisphere Indicator
uint8_t status; // 0: kein gueltiges Paket 1: alles ok
} NAV_POSUTM_t;
 
typedef struct {
unsigned long itow; // time of week
uint8_t gpsfix_type;// 3=3D Fix
uint8_t nav_status_flag;
uint8_t nav_diff_status;
uint8_t nav_resevd;
long nav_tff; // Time to First Fix in ms
long nav_msss; // ms since startup
uint8_t status; // 0: kein gueltiges Paket 1: alles ok
} NAV_STATUS_t;
 
typedef struct {
unsigned long itow;
long speed_n; // in cm/s
long speed_e; // in cm/s
long speed_alt; // in cm/s
unsigned long speed_3d; // in cm/s
unsigned long speed_gnd; // V ueber Grund in cm/s
long heading; // Richtung in deg/10000
unsigned long sacc; // Speed Genauigkeit in cm/s
unsigned long cacc; // Richtungsgenauigkeit in deg
uint8_t status; // 0: kein gueltiges Paket 1: alles ok
} NAV_VELNED_t;
 
 
typedef struct {
long utm_east; // UTM Ost in 10 cm
long utm_north; // UTM Nord in 10 cm
long utm_alt; // hoehe in 10 cm
unsigned long speed_gnd; // V ueber Grund in 10cm/s
unsigned heading; // Richtung in Grad
uint8_t status; // 0: keine gueltigen Daten 1: alles ok
 
} GPS_ABS_POSITION_t;
 
 
typedef struct { // Struktur fuer Relative GPS Daten (bezogen z.B. auf Home Position)
int utm_east; // UTM Ost in 10 cm
int utm_north; // UTM Nord in 10 cm
int utm_alt ; // UTM Altitude in 10 cm
uint8_t status; // 0: keine gueltigen Daten 1: alles ok
 
} GPS_REL_POSITION_t;
 
 
extern GPS_ABS_POSITION_t gps_act_position;
extern GPS_ABS_POSITION_t gps_home_position;
extern GPS_REL_POSITION_t gps_rel_act_position;
extern GPS_REL_POSITION_t gps_rel_hold_position;
extern short int gps_state,gps_sub_state;
extern unsigned int gps_alive_cnt;
 
 
 
// Zustaende der zentralen GPS statemachine
#define GPS_CRTL_IDLE 0 // Inaktiv
#define GPS_CRTL_HOLD_ACTIVE 1 // Lageregelung aktiv
#define GPS_CRTL_HOME_ACTIVE 2 // Rueckflug zur Basis Aktiv
#define GPS_HOME_FAST_IN_TOL 3 // Rueckflug: Aktuelle Position innerhalb der Toleranz
#define GPS_HOME_FAST_OUTOF_TOL 4 // Rueckflug: Aktuelle Position ausserhalb der Toleranz
#define GPS_HOME_RMPDWN_IN_TOL 5 // Rueckflug: beim Abbremsen Position innerhalb der Toleranz
#define GPS_HOME_RMPDWN_OUTOF_TOL 6 // Rueckflug: beim Abbremsen Position ausserhalb der Toleranz
#define GPS_HOME_IN_TOL 7 // Rueckflug: Nahe am Ziel innerhalb der Toleranz
#define GPS_HOME_OUTOF_TOL 8 // Rueckflug: Nahe am Ziel ausserhalb der Toleranz
#define GPS_HOME_FINISHED 9 // Rueckflug zur Basis abgeschlossen
 
// Kommandokonstanten fuer die zentrale GPS Statemachine
#define GPS_CMD_STOP 0 // Lageregelung soll deaktiviert werden
#define GPS_CMD_REQ_INIT 1 // Initialisierung
#define GPS_CMD_REQ_HOLD 3 // Lageregelung soll aktiviert werden
#define GPS_CMD_REQ_HOME 4 // Das Heimfliegen soll aktiviert werden
 
// Statusmeldungen der zentralen GPS statemachine
#define GPS_STST_OK 0 // Kommando erfolgreich und abgeschlossen
#define GPS_STST_PEND 1 // Kommando noch nicht komplett durchgefuehrt
#define GPS_STST_ERR 2 // Fehler
 
// GPS Lageregler
#define GPS_USR_PAR_FKT 4 //Faktor durch den die Userparameter geteilt werden
 
#define GPS_NICKROLL_MAX 80 // Maximaler Einfluss des GPS Lagereglers auf Nick und Roll
#define GPS_DIST_MAX 400 // Maximal zulaessige Distanz bevor Regelung gestoppt wird (in 10cm)
//#define GPS_V 8 // Teilerfaktor Regelabweichung zu Ausgabewert
 
 
// Konstanten fuer Verstaerkung fuer Speed Werte in Abhaengigkeit vom SpeedWert (cm/sek)
// um eine exponentielle Verstaerkung zu erreichen
#define DIFF_Y_N_MAX 1 // Verstaerkung bei Eingangswert = DIFF_X_N_MAX im Normal (Hold) Mode
//#define DIFF_X_N_MAX 200 // bei diesem Eingangswert ist die Verstaerkung = DIFF_Y_N_MAX
 
#define DIFF_Y_F_MAX 1 // Verstaerkung bei Eingangswert = DIFF_X_F_MAX im Fast (Coming Home) Mode
//#define DIFF_X_F_MAX 500 // bei diesem Eingangswert ist die Verstaerkung = DIFF_Y_F_MAX
 
// P-Regler Verstaerkung
#define GPS_PROP_NRML_V 2 //maximale Verstaerkung im Normalen Holdmode
#define GPS_PROP_FAST_V 6 //maximale Verstaerkung im Fast mode
 
// GPS G2T /Go to Target Regler
#define GPS_G2T_DIST_MAX_STOP 80 // Ab dieser Entfernung vom Zielpunkt soll die Geschwindigkeit runtergeregelt werden( in 10 cm)
#define GPS_G2T_DIST_HOLD 50 // Ab dieser Entfernung vom Zielpunkt wird mit Minimaler Geschwindigkeit eingeregelt
#define GPS_G2T_FAST_TOL 200 // Bei grosser Entfernung vom Ziel: Der Sollwert wird nur geaendert wenn die aktuelle Position nicht mehr als diesem Wert vom Sollwert abweicht
#define GPS_G2T_NRML_TOL 100 // Bei kleiner Entfernung vom Ziel: Der Sollwert wird nur geaendert wenn die aktuelle Position nicht mehr als diesem Wert vom Sollwert abweicht
#define GPS_G2T_V_MAX 15 // Maximale Geschwindigkeit (in 10cm/0.25 Sekunden) mit der der Sollpunkt geaendert wird.
#define GPS_G2T_V_RAMP_DWN 10 // Geschwindigkeit (in 10cm/0.25ekunden) in der Naehe der Home Position um abzubremsen
#define GPS_G2T_V_MIN 3 // Minimale (in 10cm/0.25 Sekunden) ganz nahe an Homeposition.
 
/branches/salvo_gps/Basis_V0071h/trunk/main.c
133,10 → 133,16
else
{
if(PINB & 0x02) PlatinenVersion = 20;
else PlatinenVersion = 10;
else
{
PlatinenVersion = 10;
// Salvo 9.12.2007 PC6 als Ausgang
DDRC = 0xCD; // SCL und PC2,PC3, PC6 als Ausgang
// Salvo End
}
}
 
DDRC = 0x81; // SCL
// DDRC = 0x81; // SCL
DDRC |=0x40; // HEF4017 Reset
PORTC = 0xff; // Pullup SDA
DDRB = 0x1B; // LEDs und Druckoffset
/branches/salvo_gps/Basis_V0071h/trunk/main.h
19,6 → 19,15
#define GRN_ON {if((PlatinenVersion < 12)) PORTB |= 0x02; else PORTB &=~0x02;}
#define GRN_FLASH PORTB ^= 0x02
 
 
//Salvo 9.12.2007 Umschaltsignal fuer Bluetooth bzw. GPS Daten auf PC7
#define RX_SWTCH_ON PORTC |= 0x40
#define RX_SWTCH_OFF PORTC &= ~0x40
#define LED_J16_ON PORTC |= 0x04
#define LED_J16_OFF PORTC &= ~0x04
#define LED_J16_FLASH PORTC ^= 0x04
//Salvo End
 
#define F_CPU SYSCLK
//#ifndef F_CPU
//#error ################## F_CPU nicht definiert oder ungültig #############
/branches/salvo_gps/Basis_V0071h/trunk/makefile
85,7 → 85,7
 
##########################################################################################################
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c
SRC = main.c uart.c printf_P.c timer0.c analog.c menu.c math.c
SRC += twimaster.c rc.c fc.c GPS.c spi.c led.c
 
##########################################################################################################
/branches/salvo_gps/Basis_V0071h/trunk/math.c
0,0 → 1,127
/*
This program (files math.c and math.h) is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation;
either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License and GNU Lesser General Public License for more details.
You should have received a copy of GNU General Public License (License_GPL.txt) and
GNU Lesser General Public License (License_LGPL.txt) along with this program.
If not, see <http://www.gnu.org/licenses/>.
 
Please note: All the other files for the project "Mikrokopter" by H.Buss are under the license (license_buss.txt) published by www.mikrokopter.de
*/
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Peter Muehlenbrock
Winkelfunktionen sin, cos und arctan in
brute-force Art: Sehr Schnell, nicht sonderlich genau, aber ausreichend
get_dist Funktion fuer Entfernungsermittlung
Stand 12.10.2007
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
#include "main.h"
#include "math.h"
 
 
// arctan Funktion: Eingabewert x,y Rueckgabe =arctan(x,y) in grad
int arctan_i( signed int x, signed int y)
{
short int change_xy = 0;
signed int i;
long signed int wert;
int return_value;
 
if ((abs(x)) > (abs(y))) // x,y Werte vertauschen damit arctan <45 grad bleibt
{
change_xy = 1;
i = x;
x = y;
y = i;
}
// Quadranten ermitteln
 
// Wert durch lineare Interpolation ermitteln
if ((y == 0) && (x == 0)) wert =1; // Division durch 0 nicht erlaubt
else wert= abs(((long)x*1000)/((long)y));
 
if (wert <=268) //0...0.0,268 entsprechend 0..15 Grad
{
return_value = (signed int)((wert*100)/(268-0)*(15-0)/100) +0;
}
else if (wert <=578) //0,268...0.0,568 entsprechend 15..30 Grad
{
return_value = (signed int)((((wert-268)*100)/(578-268)*(30-15))/100) +15;
}
else //0,568...1 entsprechend 30..45 Grad
{
return_value = (signed int)((((wert-578)*50)/(1000-578)*(45-30))/50) +30;
}
 
if (change_xy == 0) return_value = 90-return_value; //Quadrant 45..90 Grad
if ((x >= 0) && (y <0)) return_value = - return_value;
else if ((x < 0) && (y >= 0)) return_value = - return_value;
 
return return_value;
}
 
 
// cosinus Funktion: Eingabewert Winkel in Grad, Rueckgabe =cos(winkel)*1000
signed int cos_i(signed int winkel)
{
winkel = sin_i(90-winkel);
return winkel;
}
 
 
const unsigned int pgm_sinus[91] PROGMEM = {0,17,35,52,70,87,105,122,139,156,174,191,208,225,242,259,276,292,309,326,342,358,375,391,407,423,438,454,469,485,500,515,530,545,559,574,588,602,616,629,643,656,669,682,695,707,719,731,743,755,766,777,788,799,809,819,829,839,848,857,866,875,883,891,899,906,914,921,927,934,940,946,951,956,961,966,970,974,978,982,985,988,990,993,995,996,998,999,999,1000,1000};
//von Nick666, Stand 28.9.2007
// sinus Funktion: Eingabewert Winkel in Grad, Rueckgabe =sin(winkel)*1000
signed int sin_i(signed int winkel)
{
short int m,n;
 
if (abs(winkel) >=360) winkel = winkel % 360;
if (winkel < 0)
{
m = -1;
winkel = abs(winkel);
}
else m = +1;
n =1;
 
// Quadranten auswerten
if ((winkel > 90 ) && (winkel <= 180)) winkel = 180 - winkel;
else if ((winkel > 180 ) && (winkel <= 270))
{
winkel = winkel -180;
n = -1;
}
else if ((winkel > 270) && (winkel <= 360))
{
winkel = 360 - winkel;
n = -1;
}
// else //0 - 90 Grad
 
winkel = pgm_read_word(&pgm_sinus[winkel]);
return (winkel*m*n);
}
 
// Aus x,y und Winkel Distanz ermitteln
long get_dist(signed int x, signed int y, signed int phi)
{
long dist;
if (abs(x) > abs(y) )
{
dist = (long) x; //Groesseren Wert wegen besserer Genauigkeit nehmen
dist = abs((dist *1000) / (long) sin_i(phi));
}
else
{
dist = (long) y;
dist = abs((dist *1000) / (long) cos_i(phi));
}
return dist;
}
 
/branches/salvo_gps/Basis_V0071h/trunk/math.h
0,0 → 1,11
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Peter Muehlenbrock
// Definitionen fuer Modul math
 
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#include "main.h"
 
extern signed int sin_i(signed int winkel);
extern signed int cos_i(signed int winkel);
extern signed int arctan_i(signed int x, signed int y);
extern long get_dist(signed int x, signed int y, signed int phi);
/branches/salvo_gps/Basis_V0071h/trunk/spi.c
280,8 → 280,11
// KompassValue = 0;
// KompassRichtung = 0;
 
GPS_Nick = 0;
GPS_Roll = 0;
// Salvo 28.12.2008
// GPS_Nick = 0;
// GPS_Roll = 0;
//Salvo End
 
}
}
 
/branches/salvo_gps/Basis_V0071h/trunk/spi.h
4,7 → 4,7
 
#include <util/delay.h>
 
#define USE_SPI_COMMUNICATION
#define USE_SPI_COMMUNICATION //Salvo 17.10.2008 SPI deaktiviert
 
#define SPI_PROTOCOL_COMP 1
 
/branches/salvo_gps/Basis_V0071h/trunk/timer0.c
10,7 → 10,13
 
unsigned int BeepMuster = 0xffff;
unsigned int ServoValue = 0;
 
//Salvo 8.9.2007
volatile uint8_t Kompass_Neuer_Wert= 0;
volatile unsigned int Kompass_Value_Old = 0;
// Salvo End
//Salvo 21.9.2007
short unsigned int Kompass_present= 0; //>0 bedeutet dass der Kompass vorhanden ist
// Salvo End
enum {
STOP = 0,
CK = 1,
22,7 → 28,10
T0_RISING_EDGE = 7
};
 
 
// Aenderungen von Peter Muehlenbrock ("Salvo") Stand 24.12.2007
/*
Ersatzkompass abgeleitet aus Magnetkompass und Giergyro fuer nahezu neigungsubhaengige Kompassfunktion
*/
SIGNAL (SIG_OVERFLOW0) // 8kHz
{
static unsigned char cnt_1ms = 1,cnt = 0;
31,6 → 40,7
if(SendSPI) SendSPI--;
if(!cnt--)
{
if (Kompass_present > 0) Kompass_present--; //Runterzaehlen. Wenn 0 ist der Kompass nicht vorhanden
cnt = 9;
cnt_1ms++;
cnt_1ms %= 2;
65,7 → 75,7
else PORTC &= ~(1<<7);
}
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV)
if(EE_Parameter.GlobalConfig & CFG_KOMPASS_AKTIV) //Salvo 25.10.2008
{
if(PINC & 0x10)
{
77,11 → 87,29
{
cntKompass += cntKompass / 41;
if(cntKompass > 10) KompassValue = cntKompass - 10; else KompassValue = 0;
// Salvo Kompassoffset 23.12.2007 ***********
Kompass_present = 255;
// Kompass_Value_Old = KompassValue;
if (KOMPASS_OFFSET > 0) KompassValue = cntKompass -KOMPASS_OFFSET;
else KompassValue = cntKompass - ((int) (Parameter_UserParam4*2));
 
if (KompassValue < 0)
{
KompassValue += 360;
}
if (KompassValue >= 360)
{
KompassValue -= 360;
}
// Salvo End
}
// if(cntKompass < 10) cntKompass = 10;
// KompassValue = (unsigned long)((unsigned long)(cntKompass-10)*720L + 1L) / 703L;
KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
cntKompass = 0;
//Salvo 13.9.2007 Ok Erkennung des Magnetkompasses
Kompass_Neuer_Wert = 1;
// Salvo End
cntKompass = 0;
}
}
}
/branches/salvo_gps/Basis_V0071h/trunk/timer0.h
4,6 → 4,13
#define HEF4017R_ON PORTC ^= (1<<PORTC6)
#define HEF4017R_OFF PORTC &= ~(1<<PORTC6)
 
 
// Salvo Kompassoffset 24.12.2007 ***********
#define KOMPASS_OFFSET 135// Winkel zwischen Nordachse Kopter und Nordachse Kompass
//#define KOMPASS_OFFSET 0 // Winkel zwischen Nordachse Kopter und Nordachse Kompass
// Wenn 0 wird der UserParameter4 fuer den Offset verwendet (0..360 Grad entspricht 0 ..180)
// Salvo End
 
void Timer_Init(void);
void Delay_ms(unsigned int);
void Delay_ms_Mess(unsigned int);
17,3 → 24,8
extern unsigned int ServoValue;
extern unsigned int BeepMuster;
extern volatile unsigned char SendSPI;
//Salvo 21.9.2007
extern volatile uint8_t Kompass_Neuer_Wert;
extern volatile unsigned int Kompass_Value_Old;
extern unsigned short int Kompass_present;
// Salvo End
/branches/salvo_gps/Basis_V0071h/trunk/uart.c
62,19 → 62,19
"Motor_Links ",
"Motor_Rechts ", //15
" ",
"Distance ",
"OsdBar ",
"MK3Mag CalState ",
"Servo ", //20
"Nick ",
"Roll ",
" ",
" ",
" ", //25
" ",
"Kalman_MaxDrift ",
" ",
"Kalman K ",
" ", //20
"Nick ",
"Roll ",
"debug_0 ",
"debug_1 ",
"debug_2 ", //25
"utm_east ",
"utm_north ",
"utm_alt ",
"GPS_State ",
"GPS_Nick ", //30
"GPS_Roll "
};
113,6 → 113,10
unsigned char CrcOkay = 0;
 
SioTmp = UDR;
//Salvo 11.9.2007 GPS Daten holen
Get_Ublox_Msg(SioTmp); // Daten vom GPS Modul holen
// Salvo End
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
if(SioTmp == '\r' && UartState == 2)
{