1 Commits

Author SHA1 Message Date
9b15d9837a Испр. опечатку dac_stop 2026-09-22 07:52:36 +03:00
57 changed files with 1681 additions and 3746 deletions

7
.gitignore vendored
View File

@@ -1,9 +1,2 @@
/Debug/
/UKSSTMS320F28335.CS_/
/Bin/UKSSTMS320F28335_*.bin
/Bin/LoggerFix/
/Bin/LoggerEepromFix/
/Bin/Rs232FifoTest/
/Bin/Rs232NoFifoTest/
/Bin/UartFifoTest/
/Bin/*.pending

Binary file not shown.

View File

@@ -1,4 +1,4 @@
:20000000AA08000000000000000000000000000000000000B5B98B02000000C000FFC0DADA
:20000000AA0800000000000000000000000000000000000098B1830200005FB300FFC0DAB5
:2000200000000000C1C081C1400101C3C003800241C201C6C006800741C70005C1C581C4C4
:20004000400401CCC00C800D41CD000FC1CF81CE400E000AC1CA81CB400B01C9C0098008A5
:2000600041C801D8C018801941D9001BC1DB81DA401A001EC1DE81DF401F01DDC01D801CD4
@@ -15,7 +15,7 @@
:2001C0004054019CC05C805D419D005FC19F819E405E005AC19A819B405B0199C0598058A4
:2001E00041980188C04880494189004BC18B818A404A004EC18E818F404F018DC04D804C33
:20020000418C0044C184818540450187C047804641860182C042804341830041C181818051
:200220004040C0FFC0DE00000000000000000000C701B9019B09580900000000000000005A
:200220004040C0FF40DE00000000000000000000C701B9019B0958090000000000000000DA
:20024000CE01B7018A09600948130D136C13F9125E076A07D509E7090C138D130C13EF1293
:200260006A075107E709C609EC0ECE0EB10D340DC806AB0256030E00FB0EC90EC20D040D7F
:20028000D106B1025C0311000105F804000000006E02D708000000000A05050500000000FA
@@ -23,997 +23,865 @@
:2002C000FFFF45DC00000000FFFF46DC00000000FFFF47DC00000000FFFF48DC000000009C
:2002E000FFFF51DC00000000FFFF54DC00000000FFFF55DC00000000EEFF68DC00001BD654
:20030000B738D79AFC3FA84C79BF0000000000000000000000000000000000000000000016
:200320000000FFFF72DF00000000FFFF73DF00000000FFFF74DF00000000FFFF75DF00007B
:200340000000FFFF76DF00000000FFFF77DF00000000FFFF78DF00000000FFFF79DF00004B
:200360000000FFFF00DF00000000FFFF01DF00000000FFFF02DF00000000FFFF03DF000003
:200380000000F4FF10DF00000000000000000000FCA300002EA40000F7A30000F2A30000DB
:2003A000FFFF58DF00000000FFFF59DF00000000FEFF66DF000000000000FEFF68DF00004C
:2003C00000000000FEFF6ADF000000000000FEFF6CDF000000000000EEFF2ADD00004A0C45
:200320000000FFFFACDE00000000FFFFADDE00000000FFFFAEDE00000000FFFFAFDE000097
:200340000000FFFFB0DE00000000FFFFB1DE00000000FFFFB2DE00000000FFFFB3DE000067
:200360000000FFFFA4DD00000000FFFFA5DD00000000FFFFA6DD00000000FFFFA7DD00007B
:200380000000F4FFB4DD00000000000000000000C89C0000FA9C0000C39C0000BE9C000026
:2003A000FFFFCEDE00000000FFFFCFDE00000000FEFFD4DE000000000000FEFFD6DE000088
:2003C00000000000FEFFD8DE000000000000FEFFDADE000000000000EEFF98DE00004A0CFC
:2003E000023E4A0C023E0000803F0000803F6C09F93B6C09F93B6C09F93B6C09F93B000005
:20040000803FFFFF02DD00000000FFFF03DD00000000FFFF04DD00000000FFFF09DD00009F
:200420001400FFFF0CDD00000100F0FFB0DA00003F0006005B004F0066006D007D00070001
:200440007F006F00400000000000000079000000FFFF9BDF00000600FFFF9DDF00000000FD
:20046000FFFF9EDF00000000FEFFA2DF000000000000FFFF82DF00000000FFFF83DF0000C4
:200480000000FFFF84DF00000100FFFF85DF00000000FEFFBCDD000069BB0000FEFFBEDD46
:2004A000000069BB0000FEFFBCDF000000000000FEFFBEDF000000000000FFFF38DF0000D1
:2004C0000000FFFF39DF00000000FBFFCCDF000008000C00100000000400FFFF3CDD000022
:2004E0000A00FFFF3DDD00000100FFFFD5DF00000100FFFFD6DF00000100FEFFD9DF0000BD
:2005000000000000FEFFDBDF000000000000FFFF00D000000100FFFF40DE00000000FFFF3B
:1205200041DC00000000FFFF01DD0000000000000000D0
:20053200733B0000008002FEA4C5A988013B008FC0DBC7924196A9A8A681A71E1F76710305
:20055200C7CC00E041CA4296C7FF01900B9842CCFFFDA98803564201A91CFF03A9180002D8
:20057200A6CA429682FEC796060010E70B0001E8EAFA20E740000DE8BA9E6FE819F000E794
:20059200100000E7490000E70000007710E740004076BEBA02E8010250E80000407696B71E
:2005B2000600A71EA59243880860C4930461C40BA6920C6F009A0A6FC427AA2BA706AB0F7C
:2005D2000362019A036FC40AA69206001F767D03BDB23392BDAA03E2BD04586179D1808D25
:2005F200C0DB78D0013B9A92929EA985A9BD120F007700770077007789E604000077CFE63E
:20061200210002E80818407696B71F76710303E21E0002E8101CCFE621000FE83033407692
:2006320096B77AD11F76710378D0013B008FC0DB03E220009A92949EA985A9BD120F0077CA
:2006520000770077007789E6010002E80818407696B77BD11F76710379D0013B008FC0DBA2
:2006720003E222009A92949EA985A9BD120F007700770077007789E6010002E80818407642
:2006920096B71F76710303E224001F767D0332922F617AD1808DC0DB78D0013B9A92929EAD
:2006B200A985A9BD120F007700770077007789E6010002E84016407696B77BD11F7671038F
:2006D20079D0013B03E222009A92929EA985A9BD120F007700770077007789E6010002E835
:2006F2004016407696B71F76710303E2240000D1008FC0DB013BA9A8A181A98A74D0C8E2B2
:200712009400008F40DFA9A8A181A98AC4920252046002E8D123056F02E8E1300AE8010091
:20073200407696B7013B008F2ADD0356A1010156A40001D9A192045203E2C400DA64AFE201
:20075200BE04BE86BE8B0600BDB2BDAA04FE0052A92DA85A06601F7671030B920B2B0C964C
:20077200008FC0DB013BA9A8AC81A98AC44F076CAC921F7671030654E4FFB401008F86DE9E
:20079200A9A8AC81A9837FD0008FC0DB944CC4E2C500EDFF9E01A9A8AC81A98AC44D3F6CE1
:2007B200AC921F76710306543A6300B6A79200BEA985013BA98E008F40DFA9A8AC81A98343
:2007D200A9A8A681A98AC592C4541460008FC0DBA9A8A681A98A1F7671031392C4CE0A60FA
:2007F200008F86DEA9A8A681A98A01DFA93AC40DA98E01DEA6921852DF64A7920761A985EB
:20081200421EA93AC0006BBAA98EA93AA9BD120F007700770077007789E60000AC921F76DF
:200832007103079EA959A2922561008F40DF013BA9A8AC81A98AC4920A521A60AC92069E28
:20085200A988008FACDFA9A8A681A98AC8E2C401008FA4DFA9A8A681A98A01E860EE0EE837
:20087200686600E74000C492036106E84016A29256601F767D03329252617FD0008FC0DB84
:20089200949316D0D3FF9492C1FFA8CAA940246C1F767C033C0620601F767D033192055291
:2008B2000C6002E849280CE8010094E6080014AD0465A1920250A959A1920E64A9A8013B05
:2008D200A181A98A8CE6000078D013E2940040765380EFFF1401AC921F7671030654E3FF5F
:2008F2000E01A1400F6C79D0C8E29401007720E74000AFE2240300E71800007790E8007619
:200912000E6F78D0C8E29401007720E74000AFE2220300E71800007790E800761F767D03D4
:2009320033925261A192E3FFAF001F767D03319202521F61AC400F6C79D0008FC0DBC8E239
:2009520094011F76710320E74000AFE2240300E718003A6F78D0008FC0DBC8E294011F76FA
:20097200710320E74000AFE2220300E718002C6F08BEAC92A672008FC0DB013BA9A8A68160
:20099200A983807686DEA606AC81A71E18D0C7929596AC9206520D6378D0C8E294011F7693
:2009B200710320E74000AFE21E0300E718000C6F78D0C8E294011F76710320E74000AFE2D6
:2009D200200300E7180016D0008FC0DB26E8000D94937FD0D0FF949232E8401AC9FFA8CA9F
:2009F200A940036C02E8001150E80148A9A8013B8CE60000AC818CE60900A98318D01F76C1
:200A12007C03A6BF120F13E29501432B3C063460A9A8AC81A98AC493A84E2E6DA61BECFFAB
:200A32002565A692C852226330D09592FB9CA6540363A845146D008FC0DBA9A8AC81A98ADC
:200A520030D0A69294540B6248D0945415651F767103431A10000B1A08000E6F1F76710354
:200A7200431A20010B1A0400076F1F767103431A01000B1A1000AD5CAC9283DCA45C40764F
:200A920000803C6F1F767C033C0616601235008F00D90156A400407634BA013B008FC0DB99
:200AB200A9A8A181A98A8CE6000078D013E2940040765380236F1235C07640D70156A7008E
:200AD200008F00D90156A40011F68424176FA9A8AC81A98A8CE6000018D013E294000E6F5B
:200AF200008FC0DBA9A8AC81A983A9A8AC81A98AC52B18D0C51A0080942B84FEBE86BE8B5A
:200B12000600BDB2BDAABDA202FE0052A95A06601F7671030B920B2B0C96008FC0DB013BE9
:200B3200A9A8A281A61EC64FEDFFC700408F86DEA9A0A281A9837FD0944CC4E2C500EDFF52
:200B5200B300408F40DFA9A0A281A9830356C501408F2ADD0156A500AFE2C50100E74000DB
:200B7200A9A88CE60000A281A98AA1BF120F18D01F767C039479422B3C06E0FF8E00C64E90
:200B9200EDFF8B00A29207525C610356A201A95B1F767D034218FFFB008D08DEA32D3E0692
:200BB200412B22560190A95DA93AA381A98A20FFE80340763E80013B019B019089FFA395C7
:200BD2004298A82D4218FFF73E06412B22560190A95DA93AAC81A98A20FFE80340763E8084
:200BF20001908AFF4298A29206522B60029A4218FFEFA394A92D013B3E06412B22560190F2
:200C1200A95DA93AAC81A98A20FFE80340763E80013B039B0190A3958BFF4298A82D4218C5
:200C3200FFDF3E062256412B0190A95DA93AAC81A98A20FFE80340763E8001908CFF42984E
:200C52004292C0FF42CDBFFF42CA008FC0DB013BC0FF42CAC0FF42CAC3FF4090A8CA42963E
:200C7200A9A8A281A98348D0A19295540F63408F1CDFA9A0A281A983421A0800A9A8C581BF
:200C9200A98AC492089084FF4298429205611F7671030B1A0200AD5CA29282DCA45C407609
:200CB2000080156FA9A8A281A98A8CE6000018D013E294000C6FA9A8A281A983A9A8A28105
:200CD200A98AC52B18D0C51A0080942B82FEBE82BE86BE8B060000BE013B008FC0DBA9A811
:200CF200A681A98A01DE18D0A692C41800E01852942BF46400BE013B008FC0DB408FB4DFC6
:200D1200A9A8A681A98A0356A6010156A50070D0C8E294001F767D0303E2C50031920652C2
:200D32001760408F40DFA9A0A681A983C59203520F60A640056D18D094288601096F008FFB
:200D5200C0DBA9A8A681A98A18D09428300201DEA6920452D264319201521060008FC0DB12
:200D72001F767103A9A80881A98AC41A0040CC1A0040D41A0040DC1A00401F767D033192CB
:200D920006520760008FC0DBC41A0040CC1A00404076538006001F767D033092A9931F76DD
:200DB2007103BDB2FF9D052B062B072B01531C69A993FD9D015311690752086109521A60FB
:200DD200BF56060FBF56070D156FBF560508BF560608BF5607080E6FBF560507BF56060EFA
:200DF200BF56070E076FBF56050ABF560614BF5607141F767D033792AC2B013BC07668DC53
:200E12001F76710306940896008F40DFA9A8AC81A98AC42B008F1CDFA9A8AC81A98A408F27
:200E320040D71235C4210156A500008F00D90156A400AC92019C11F68524A92D185211F62C
:200E52008424E3641F767D03349225611F7671030692AC2B20651F767D0333920961008F60
:200E720040DF013BA9A8AC81A98ABF56C4091F767D0332920961008F40DF013BA9A8AC81C7
:200E9200A98ABF56C408AC921F767103019CA92D0654E2641F767D033792AC2B1565013B67
:200EB2001F7671030688AC92A672008F40DFA9A8A681A98A1F767D03AC92019CBF56C40A07
:200ED200A92D3754EE641F767D03359236611F767103AC2B013BBF5612C80892AC94A988C4
:200EF200008F40DFA9A8A681A98A408FB4DFBF56C403008F1CDFA9A8A681A98AAC9201F0E5
:200F12000894C4960356AC01008FC0DB0156A500A9A8AC81A98A70D01235C8E29400008F98
:200F3200C0DD0156A40003E2C500AC92019CA92D11F684240452D2641F767D033192065241
:200F52000B601F767103008F40DF12282C01BF56DC02BF56D4021F767D0330920952346052
:200F7200008F40DF408F1CDFC42BBF56C50108D0BF56CC010ED1CD2BBF56D404BF56D503B2
:200F9200BF56DC04BF56DD02BF56E404BF56E505BF56EC04BF56ED04BF56F406BF56FC052A
:200FB200BF56940609D0BF5694070AD0BF5694060BD0BF5694060CD0BF5694060DD0BF5657
:200FD2009408BF569C081F7671030002132B0D28F915BF560E120F28F22B10283E49AC2BFF
:200FF200013B90E5131A01E01F767D033E1E008FC0DFA9A8AC81A98AC42B008FC6DFA9A85C
:20101200AC81A98A0356AC01C42B008F8EDF0156A400AC92019CA92D03E2C4000652E86474
:20103200AC2B013B00BE0356AC01008F04D70156A400AC92019CC4C2A92D1C52F564AC2B8D
:20105200013B008F08DEA9A8AC81A98AAC92019CC42BA92D2052F664AC2B013B008FA4DF8B
:20107200A9A8AC81A98AC42B008FACDFA9A8AC81A98AAC92019CC42BA92D0852F064BE8B5C
:2010920006001F767D0335921F7671030880026104DF00D5013B00D40356A5038076F0D8E1
:2010B200A4810156A60001DCA492C62B0852F56401DDA5920252F0641F767D03319204525A
:2010D2007761A79200D52D65013BA592A2FF008FF0D8CBFFA594A3FFA927A9A8AB81A61E65
:2010F2000356AB04A92D019BA592ACEA189A67FFA594C699A988A2FFCBFFA594189CA3FFBC
:20111200A92701DDA9A8AB81A98A0356AB04A92DA692ACEA019A66FFC498A792A554D662ED
:2011320000D5013B008FF0D803BEA9A8A581A71EA592A672A9A8A681A98A08D001DDC7922F
:201152009496A5920352EF641F767D033192008FF8D802520460A9280003036FA928000F5F
:20117200FC981F767D0335920961408FF0D8A58A0FDCC41AFF00F51A003F1F767D033792C9
:2011920005611F766303361A08001F767D03319206521460408FF0D8A58A08DCFC1A3000F0
:2011B200EC1A0300FD1A00E0CD1A0030076F008FF8D8C41A0F00F41AFC01008FF0D8A483BB
:2011D20008DC01DDC51A0100F41A0700FC1A00E00600BDB2BDAABDA203E2BD0403E2BD05C8
:2011F20003E2BD060AFE1F767D034496319206520860449206601F7671030B920B2B0C9601
:201212001F7671030892008F1CDF013B4494A988A9A84481A98A808DC0DBC4924696449251
:2012320001F0019047964492A0FFA92D499603354896049AAC94A95BA9AAA681A98A457EAB
:20125200C44FEDFF4002008F3CD7A9A84481A98A64BE4492A672C4E2C404A9AAA681A98A25
:201272008CE62000408DB4DF13E2C40044920356A9010156A10002E891340BE801E0AFE2CC
:20129200C10020E72000407696B7442D008FC0DD1235AFE2C10110E740000156A40003E203
:2012B200C100407634BA1F767C038CE60000AC281F003EC4013B1F767C038DE60000A606CD
:2012D2002256A60740FF3C0F0965A9AA4481A98A8CE6000070D013E294004492408F2ADDAD
:2012F200008FC0DB0356A901A71E0156A500A9A84481A98A70D0C8E29400408D8EDF21E3E9
:20131200C501A70600E70C000156A10000E72101AFE2C10620E7880102E8512B0BE8010012
:20133200407696B7AFE2C10110E74000007703E2C1004076BEBA013B008FC6DF8CE60000E1
:20135200A9A84481A98A13E2C4004792E0FFA4001F767103CFE62000AFE22601407622802F
:20137200452D008F00D912350156A400407634BA4588008F40DF013BA9A8A681A98ACFE684
:201392000600C4920352066012E8060D14AD026396E5008F40DFA9A8A681A98AC492025273
:2013B200066012E8B61414AD026396E501E8A9FDCFE6300008E89927407696B71F767C0315
:2013D200CFE605003C061660008FC0DB4588013BA9A88CE6300018D0A681A98381DEA9A878
:2013F200A681A98A13E295008CE62B0018D013E294031F767103013BAFE62400408D8EDFAE
:20141200AFE226000356A30120E720000156A10000E70100AFE2C10020E7080002E8512B38
:201432000BE80100407696B7AFE2C10110E74000007703E2C1004076BEBA013B408FC6DF1E
:201452008CE60000A9A0A381A61EABBF120F68B6C63F4892A772008FC0DBA9A8A781A61ECF
:20147200A9A04681A71EAA286900C792C696A9A04481A71E4892AA72A9A8AA81A61EAA28BA
:201492006A00C792C6964892AA72A9A8AA81A98AC43F0C6F1F767D03319201520360AFE6D5
:2014B20024001F76710303E22604008FC6DFA9A84481A983A9A84681A98AC8E2C504C8E200
:2014D200C400008FC6DFA9A8A381A98A96E604001F767C03C8E2C4003C06432B96E6040028
:2014F200E0FFEA00008FC0DBA9A84581A98AC4CC0040CDFFA959008FC6DFA9A84481A98A82
:20151200C8E2C400CFE6210020E72000407696B701E8C9F400D50CE8D1CC94E6080014ADFC
:201532000B651F767103C8E21200007794E6040014AD026501D5008FC0DF013B1F767103FE
:20155200A9A84481412BA98A0F0E40763E8000520D61009BA1920260019B0356A8084393C8
:201572000451A818FFFEA8CA4396008FC6DF013BA9A8A381A98AC8E2C400CFE6210020E799
:201592002000407696B701E8C9F400D50CE8D1CC94E6080014AD0B651F767103C8E2120092
:2015B200007794E6040014AD026501D5008FC0DF013B1F767103A9A8412BA381A98A0F0E82
:2015D20040763E8000520D61009BA1920260019B0356A80843930451A818FFFEA8CA4396BD
:2015F2001F767D03319206526660479264604588008FC0DB013BA9A8A681A98A30D0C8E2BE
:201612009400007794E6050014AD0D65009BA1920260019B0356A80843932051A818FFFE22
:20163200A8CA4396008F40DFA9A8A681A98AC49203522860008FC0DBA9A8A681A98A48D0D4
:20165200412BC8E2940000D594E6050014AD026301D5008FDBDF1F767103A9A84981A98ADE
:201672000F0E40763E8000520D61009BA1920260019B0356A80843930851A818FFFEA8CAD4
:2016920043964588008F40DF013BA9A8A681A98AC49202521060008FC0DBA9A8A681A98A0E
:2016B20048D0C8E29400007794E6050014AD0365431A1000AD5C459283DCA45C40760080C1
:2016D2000E6F008FC0DBA9A8A681A983A9A8A681A98AC52B18D0C51A0080942B8AFEAFE2F3
:2016F200BE06AFE2BE05AFE2BE04BE82BE86BE8B06001B76F0FF00E2BD0030E600064229F4
:2017120016562576006F1B76F0FF00E2BD0030E6000602FE422916561F76330038924196C6
:2017320023760008267600003892382B2128FFFF1029103B419238962576006F1B76F0FF37
:2017520000E2BD0030E6000602FE422916561F7633003892419623760008267600003818EF
:2017720090002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000602FE16
:20179200422916561F763300389241962376000826760000381890002128FFFF1029103B0F
:2017B200419238962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003892C8
:2017D2004196237600082676000038189C002128FFFF1029103B419238962576006F1B76F0
:2017F200F0FF00E2BD0030E6000602FE422916561F763300389241962376000826760000B0
:2018120038189E002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000617
:2018320002FE422916561F7633002292419623760101221868002128FFFF1029103B419291
:2018520022962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300229241964F
:20187200237601012292222B2128FFFF1029103B419222962576006F1B76F0FF00E2BD003B
:2018920030E6000602FE422916561F763300229241962376010026760101221878002128BD
:2018B200FFFF1029103B419222962576006F1B76F0FF00E2BD0030E60006422916561029B4
:2018D2002576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E235
:2018F200BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000642291656D1
:2019120010292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF9D
:2019320000E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000642291A
:20195200165610292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76E0
:20197200F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000656
:201992004229165610292576006F1B76F0FF00E2BD0030E600064229165610292576006FC6
:2019B2001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E68B
:2019D200000602FE422916561F7633002292419623760100267601012292222B2128FFFF45
:2019F2001029103B419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F7615
:201A120033002C92419623762000267639012C922C2B2128FFFF1029103B41922C9625764D
:201A3200006F1B76F0FF00E2BD0030E6000602FE422916561F7633002C92419623762000FD
:201A5200267639012C1832002128FFFF1029103B41922C962576006F1B76F0FF00E2BD009F
:201A720030E6000602FE422916561F7633002292419623760100267601012218F80021285B
:201A9200FFFF1029103B419222962576006F1B76F0FF00E2BD0030E6000602FE422916560B
:201AB2001F7633002292419623760100267601012218FA002128FFFF1029103B41922296FF
:201AD2002576006F1B76F0FF00E2BD0030E6000602FE422916561F763300309241962376DE
:201AF200800026760000301803002128FFFF1029103B419230962576006F1B76F0FF00E29D
:201B1200BD0030E6000602FE422916561F76330032924196237600012676000132187500AA
:201B32002128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FE42297D
:201B520016561F7633003292419623760001267600013218FD002128FFFF1029103B419288
:201B720032962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300309241960E
:201B920023768000267600002C1823002128FFFF1029103B419230962576006F1B76F0FF29
:201BB20000E2BD0030E6000602FE422916561F76330032924196237600012676000132189D
:201BD20071002128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FED7
:201BF200422916561F7633003292419623760001267600013292322B2128FFFF1029103B76
:201C1200419232962576006F1B76F0FF00E2BD0030E6000642291656237639011029257654
:201C3200006F1B76F0FF00E2BD0030E60006422916562576006F1B76F0FF00E2BD0030E6D2
:201C520000064229165610292576006F1B76F0FF00E2BD0030E6000602FE422916561F76AB
:201C720033002C92419623762000267639012C1837002128FFFF1029103B41922C96257685
:201C9200006F1B76F0FF00E2BD0030E6000602FE422916561F7633002C924196237620009B
:201CB200267639012C922C2B2128FFFF1029103B41922C962576006F1B76F0FF00E2BD009E
:201CD20030E6000602FE422916561F7633002C92419623762000267639012C183300212853
:201CF200FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E6000602FE422916569F
:201D12001F7633002C92419623762000267639012C1822002128FFFF1029103B41922C96FF
:201D32002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330038924196237673
:201D520000082676000038189F002128FFFF1029103B419238962576006F1B76F0FF00E206
:201D7200BD0030E6000602FE422916561F7633003892419623760008267600003892382BCE
:201D92002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000642291656A9
:201DB2002576006F1B76F0FF00E2BD0030E60006422916562376390110292576006F1B764E
:201DD200F0FF00E2BD0030E60006422916562376391110292576006F1B76F0FF00E2BD002B
:201DF20030E600064229165610292576006F1B76F0FF00E2BD0030E6000602FE4229165689
:201E12001F763300309241962376800026760000301801002128FFFF1029103B41923096ED
:201E32002576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003092419623767A
:201E52008000267600002C922C2B2128FFFF1029103B419230962576006F1B76F0FF00E26F
:201E7200BD0030E6000602FE422916561F7633002A92419623761000267610012A922A2BDE
:201E92002128FFFF1029103B41922A962576006F1B76F0FF00E2BD0030E6000602FE422922
:201EB20016561F7633002A92419623761000267610012A1802002128FFFF1029103B419211
:201ED2002A962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330024924196BF
:201EF200237602002676000024181F002128FFFF1029103B419224962576006F1B76F0FF5C
:201F120000E2BD0030E6000602FE422916561F763300269241962376040026763D01269297
:201F3200262B2128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000602FE9F
:201F5200422916561F76330024924196237602002676000024180F002128FFFF1029103BF6
:201F7200419224962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300269226
:201F920041962376040026763D01261826002128FFFF1029103B419226962576006F1B7688
:201FB200F0FF00E2BD0030E6000602FE422916561F76330024924196237602002676000002
:201FD2002492242B2128FFFF1029103B419224962576006F1B76F0FF00E2BD0030E600064D
:201FF20002FE422916561F763300269241962376040026763D01261826002128FFFF102946
:20201200103B419226962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300F0
:20203200249241962376020026760000241808002128FFFF1029103B419224962576006F24
:202052001B76F0FF00E2BD0030E6000602FE422916561F76330026924196237604002676CC
:202072003D012692262B2128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E66E
:20209200000602FE422916561F76330024924196237602002676000024180C002128FFFF36
:2020B2001029103B419224962576006F1B76F0FF00E2BD0030E6000602FE422916561F764C
:2020D2003300269241962376040026763D012692262B2128FFFF1029103B419226962576B7
:2020F200006F1B76F0FF00E2BD0030E6000602FE422916561F76330024924196237602005D
:202112002676000024180E002128FFFF1029103B419224962576006F1B76F0FF00E2BD0046
:2021320030E6000602FE422916561F763300269241962376040026763D0126183E00212807
:20215200FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000642291656102907
:202172002576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002892419623763F
:2021920008002676080128180F002128FFFF1029103B419228962576006F1B76F0FF00E269
:2021B200BD0030E6000602FE422916561F76330028924196237608002676080128180F006F
:2021D2002128FFFF1029103B419228962576006F1B76F0FF00E2BD0030E6000602FE4229E1
:2021F20016561F763300289241962376080026760801281803002128FFFF1029103B4192E1
:2022120028962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002892419679
:202232002376080026760801281803002128FFFF1029103B419228962576006F1B76F0FF1D
:2022520000E2BD0030E6000602FE422916561F7633002A924196237608002676080128927F
:20227200282B2128FFFF1029103B419228962576006F1B76F0FF00E2BD0030E6000602FE58
:20229200422916561F763300289241962376080026760801281802002128FFFF1029103BA9
:2022B200419228962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003292D3
:2022D20041962376000126760001321875002128FFFF1029103B419232962576006F1B761E
:2022F200F0FF00E2BD0030E6000602FE422916561F763300329241962376000126760001B1
:202312003292322B2128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E60006DF
:2023320002FE422916561F763300329241962376000126760001321831002128FFFF10291F
:20235200103B419232962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300A1
:202372003292419623760001267600013292322B2128FFFF1029103B419232962576006FE8
:202392001B76F0FF00E2BD0030E6000602FE422916561F7633002E92419623764000267645
:2023B20000002E922E2B2128FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E651
:2023D200000602FE422916561F7633002E92419623764000267600002E1828002128FFFF85
:2023F2001029103B41922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F76FF
:2024120033002E92419623764000267600002E1820002128FFFF1029103B41922E96257608
:20243200006F1B76F0FF00E2BD0030E6000602FE422916561F7633002E92419623764000D1
:20245200267600002E1838002128FFFF1029103B41922E962576006F1B76F0FF00E2BD00C5
:2024720030E6000602FE422916561F7633002E92419623764000267600002E1838002128BC
:20249200FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E6000602FE42291656F5
:2024B2001F7633002E92419623764000267600002E183E002128FFFF1029103B41922E9650
:2024D2002576006F1B76F0FF00E2BD0030E60006422916562376390110292576006F1B7627
:2024F200F0FF00E2BD0030E6000602FE422916561F763300229241962376010026760101BE
:20251200221848002128FFFF1029103B419222962576006F22761F767D0316D0008F806FB6
:202532003A9294CDFCFF03901F76BE0118D0A8CA16961F767D033B9294CDFCFF03901F760E
:20255200BE011AD0A8CA18961F767D033C92019094CDFEFF1F76BE01A8CA1BD01A961F76D8
:202572007D033D9201901F76BE0194CDFEFFA8CA1B961A7669FF060016D0008F806F1F769D
:202592007D039492039018D03A96949203901AD03B96949201901BD03C96949201903D96C6
:2025B20022761F76BE011618FCFF1818FCFF1A1A01001B1A01001A7669FF0600A9881F769A
:2025D2007D03319200D4003102521860A640036D008F0008A641056DA9A8A91A0002A98A46
:2025F200A642046DA9A88050A98AA643046DA9A80850A98A1F76BF0102A81F767D0331920F
:2026120003524960A69205601F76BF01041A0008015205601F76BF01041A000202520560AC
:202632001F76BF01041A8000035205601F76BF01041A0800045205601F76BF01041A020030
:20265200055205601F76BF01041A0001065205601F76BF01041A4000075205601F76BF01B5
:20267200041A0100085205601F76BF01051A0008095205601F76BF01051A00010A520560F8
:202692001F76BF010D1A20000B5205601F76BF010D1A04001F767D03319201521F60A640BA
:2026B200056DA9A8A81A0008A98AA641056DA9A8A81A0001A98AA642056DA9A8A81A000239
:2026D200A98AA643036DAA1A0200A644036DAA1A10001F76BF0104A80CA906001F767D0397
:2026F200319202520660008F880A1F76BF0104A8015209602FFF00161F76BF01128F000033
:20271200021E0AA81F767D03319203520B60A928CB0BA82800091F76BF01248F0000021E95
:202732000AA8060022761F76BE01408F806F061800000F8F00F0A5C4071800FF08183F0093
:20275200091800FF1BDD0BDE1606A918C0FF161EA9A818C0A89219C0C618EFFF0B18DFFF8D
:202772000B18BFFFC518F7FF1A76008FC06F1F767D03BF56300109D0CC92C4FF01F001906E
:2027920030721F76BF010192C3FF1F767D0301F0019080FF30721F76BF010192C5FF1F76E2
:2027B2007D0301F0019081FF30729492C2FF01F0019082FF309430960352036104520360FD
:2027D200BF5631010152036102520360BF5631030552036106520360BF563106075203606B
:2027F200BF56310208520360BF5631040952136131920152036106520360BF5635010252D5
:20281200036103520360BF5633010152066105520461056FBF563105BF56320131920152AE
:20283200036103520360BF56340202520360BF563401045217610152BF5636010360BF5639
:20285200370203520A610152086106520B601F76BF01021A80000A6F1F76BF010B1A0010FA
:20287200056F1F76BF010D1A001006520E6103520961015204610D1A0080096F0B1A008044
:20289200066F0B1A0040036F021A800006520B6104520961025204610B1A0004066F0B1A3E
:2028B2000040036F021A000206520661045204610B1A0020036F021A0800227604520A6287
:2028D20004522461015240610252346103522661446F0552116106524060088F8A021F7626
:2028F200BE01059AA82801FC0AA81A1E1F76BF01021A0800326F088F00001F76BE01049A0E
:20291200A82801BC0AA81A1E286F088F49031F76BE0105020AA81A1E206FA928CB0BA82869
:2029320008091F76BE010A1E059AA828257C1A1E146F088F8A0B1F76BE01059AA82801F845
:202952000AA81A1E0A6F2FFF10161F76BE010A1E059AA82813BC1A1E1A7669FF0600BDB24F
:20297200BDAABDA202FE1F767D03319200D200D3025232601F76BF0116D0008FC0DB09921C
:20299200C1FF94CDFEFF01F016D116D00190A8CAA9CDFDFF949616D0099203F01F766F032F
:2029B2000290A8CA9C9600CDFFF39492039089FFA8CA00961F76BF010040036C0102A98691
:2029D2000042026C02DA004A026C04DA0044026C08DA10D0947A1F767D0331920152316085
:2029F200408DC0DBA18A1F76BF01A183012916DCC418FDFF16DD0992C3FFA18A03F00290C5
:202A1200C59816DCC418FBFF0992412B008F78DFC1FF01F00190A95D20FFFFFF40763E80B9
:202A32000356A902A18A1F766F0316D0079016DCC49800CDFFE79192069089FFA8CA009687
:202A52001F767D03319204525B60408DC0DBA18A1F76BF0116DCC418FEFF01CC0004C9FF2F
:202A7200412BA95D008F78DF20FFE80340763E8016D91F76BF010190C198014B026C01DAAB
:202A92000148026C02DA0945026C04DA0942026C08DA014A026C10DA0147026C20DA0944BC
:202AB200026C40DA0044046CA9AA8009A9860149056CA9AA18FF0100A9860941056CA9AA5A
:202AD20019FF0100A986004B056CA9AA1AFF0100A9860045056CA9AA1BFF0100A9860940A8
:202AF200056CA9AA1CFF0100A986004A056CA9AA1DFF0100A98610D0008FC0DB947A1F76AE
:202B12007D033192065210601F76BF010046026D01DA0048026D02DA004B026D04DA10D0A8
:202B3200008FC0DB947A1F767D0331920552E0FF89001F76BF010945036D01DA026F10DB6A
:202B52000944036D02DA026F40DB0042036D04DA056FA9A21CFF0100A9820044036D08DA12
:202B7200056FA9A21DFF0100A9820046036D10DA056FA9A21EFF0100A9820040036D20DAEA
:202B9200056FA9A21FFF0100A9820048036D40DA056FA9A21FFF0200A982004A056DA9AA2F
:202BB2008009A986056FA9A21FFF0400A9820043066DA9AA18FF0100A986056FA9A21FFF12
:202BD2000800A9820045066DA9AA19FF0100A986056FA9A21FFF1000A9820047066DA9AA38
:202BF2001AFF0100A986056FA9A21FFF2000A9820041066DA9AA1BFF0100A986056FA9A242
:202C12001FFF4000A982004B066DA9AA1CFF0100A986056FA9A21FFF8000A9820049066D79
:202C3200A9AA1DFF0100A986056FA9A21FFF0001A9821F767D0310D0008FC0DB3EA2947ACD
:202C5200008FC06FCC92013B1F76BF01C4FF01F0019009D0A985A9860192C3FF01F0019063
:202C720080FFA9850156A2000192C5FF01F0019081FFA9850156A2009492C2FF01F00190B3
:202C920082FFA9850156A20017D0008FC0DB82FE947ABE82BE86BE8B060006000052A88880
:202CB200C48A096509520763FF9CC4CDF8FF0790A8CAC496A69245520D614E5208614F5214
:202CD2000D60C41A2000C418BFFF086FC418DFFF056FC41A2000C41A4000A592015203602F
:202CF200C4187FFF02520360C41A8000C418EFFFC418F7FF0600BDB200D5013B008F40DE84
:202D1200A9A8A581A98AC47D01DDA5924652F76433D1008F40DE34D0BF569C0CBF56940C87
:202D32001F76400335D03BD1BF56940836D0BF56940937D0BF56941038D0BF56940839D0AD
:202D5200BF56940C3AD0BF56940C3DD0BF569C053CD10092FE9C949641D00092FF9C94965F
:202D72003ED0BF56940810D0BF56DC08BF56E465BF56F408BF56940DBF56EC1BBF569C12A5
:202D9200BE8B0600A9BD120F00770077BDB21F7671038BE60100A48B50E8094088E23C001D
:202DB200407696B788E6000000770077A9BF120FC18AA993B7FFFF91D497C18AFF90DC9695
:202DD200BE8B06000852A927A4C50960089A01D54E9B4076BB93008D3B03972BAB9209520C
:202DF2000B60089AA78A01D54E9B4076BB93008D3B03BF5697010600A71EBDB2A492BDAA71
:202E12000152BDA22A60008F5070C08D40D01F76410300A822761F76BE01408F45B609CDAB
:202E3200FFF7A81A0004008F00B6099709CDFFFD1F763700A81A000100A01F76BE010997EA
:202E52001F76370002A81F763300321A0100321A0200237600011A7602523360008F507720
:202E7200C08DC0D31F764F0300A82276408F806F1F76BE01FDCDFFEF8076BBB5A58AA81A18
:202E92000020079716DD07CDFF3F1ADCA81A008007971F763700C518CFFF408F76B5C41A38
:202EB200040004C21F763300321A04001F76370006A01F763300321A0800237600011A7666
:202ED200D396A38A01D54E9B69FF089AC3864076BB93A2C4A2830BD0A28A0CDE0CDDC61AEF
:202EF20000400ADCC518FFDFCA18BFFFCA18DFFFCA18F7FFCA18FBFFCA1A0200CA1A010000
:202F1200C418FFBF92CCE0FF0BD0015092964076E893A38AA70640762F94D39202520560D2
:202F32001F76BF01081A0400C38A099ABF56E402A38A40764F94408D33030CD0932BA28A8A
:202F5200008D9E01932B9B2B0BDCC41A4000CA1A2000BE82BE86BE8B06001F764103BF56E5
:202F720002011F764F03BF5602021F764003009606000002008D4203941E0600BDB2BDAA66
:202F9200A486008D3A0392923660A9AA13FF6700A98A008D360301020156C4009206008D69
:202FB2003803920F0466C28ABF56E40208D092C5A7C408D0090201DE92C2C207A98A008D39
:202FD2003603C792C4969206008D3803920F4966C28AE446FE6CA28A099A40764F94D29297
:202FF200025205601F76BF01081A0400008D9E01922B376F008D3803928A408D3803A492DA
:20301200008D36030190A98801DC9AA89206008D3803920F0466C28ABF56E402A6920B60A2
:2030320008D092830902C207A98AC592A7FFFF90C4960D6F08D09283A5C408D0090201DE10
:2030520092C2C207A98AC592FF90C496008D36039206008D3803920F0466C28AE446FE6CBD
:203072001F763300211A0001BE86BE8B0600BDB200BEACA0BDAAA486BDA2A98201DEA61B73
:203092003075FD69D292025205601F76BF010818FBFF00BE01DEA61B1027FD69408D360386
:2030B200A9AB08D09AA20109921E008D3A03922BC28AE446FE6CA28A089A40764F9401BE4F
:2030D200008D38030102A30F92C21C68A7AB0902C207A98AC792C496C28AE446FE6C00BEDF
:2030F20001DEA61BE803FD69A28A099A40764F94D292025210601F76BF01009A081A040028
:203112000B6FC28A0902A7ABBF56E401C207A98AC792C496009ABE82BE86BE8B0600BDB2F5
:20313200BDAAA486EFFF3901C28AFCCCFF00A958EC47EDFF2C01408DA0019A92E0FF2D01BD
:20315200408D3B039A920152116000BE408D3D03BF569A01408D34039AC2408D3F039A2BB3
:20317200408D3E039A2B0DD19A2B408D3F039A92E0FF1301408D3D039A924F60F2C4208F4C
:203192000000A9A8A60F06662F8F0000A9A8A60F0867608F00000AD1208F0000F2A09AA82B
:2031B2000CD19A923A52E0FFF800408DA0019A922E60408D34039AC4A692A94001DE9AC2AB
:2031D200066DF28A0356A008C496076FF28AA9A80109F21EA092C498008D34039206E20F5B
:2031F200E8FFDB000FD10CD0BF569A33A28A099ABF56923340764F94408D3F03008DA001DE
:20321200BF569A01BF569201EFFFC700008D3F03BF569201EFFFC100408D3E039A923E6091
:20323200A0921F760E03305425611F7674033D5403603D921F60A088408D31039A0EA60FC6
:203252000560408D33039A921560A0921F7674033C5407603C920561408D33039A920A6150
:20327200408D3F03008D3D03BF569A01922BEFFF9400408D32039A78408D3E039A80019A9A
:20329200013BA7949A96A9AAA781A98A0ED1089A9C78A28A40764F947F6F9A80019A013B8E
:2032B200A7949A96A9AAA781A98A0ED19C78408D3E039A9207520E600DD19A9210520A6019
:2032D200408D33039A9206600A9A1F767903A0941096408D3E039A9203520B600DD19A59ED
:2032F200A19204520660059A008F40DEA0949C96408D3E039A9202521A60A0920DD10352AE
:203312009A78336842523166008F40DE949203522C68A09233520B600CD19A923A522560CB
:20333200A09233520460008D3D03922B0DD09258408D3E03008F40DE9A9294540467A91B11
:2033520090012A68A28A099A40764F94408D3D039A2B0DD0408D3F03BF569A01408DA001F4
:20337200BF569A01922B186FA28A099A40764F94408D3E039A2B0DD0408D3D03BF569A0172
:20339200408D3F039A2B922B076FC28ACC18DFFFC28ACC1A2000C28AEC46EDFFC7FE1F76F0
:2033B20033000BDC211A0001C41A4000BE86BE8B0600BDB2BDAAA486A61EBDA2A582D29246
:2033D200025205601F76BF010818FBFF408D360308D09AC292A2008D3A03BF569201C28A87
:2033F200E446FE6CA28A089A40764F94008D38030102921EC28300BE0902BF56E501C20773
:20341200A98AC392A7FFFF90C496A692BE82BE86BE8B06001F76BF0100920093C5FFD7FF64
:2034320001F001F10190019190FFA9CB0092CAFF01F0019081FFA8CA060009D0008FC06F05
:203452001F76BF0194CD0004D9FF09CC004090FFCDFFA9CBC492C2FF01F0019081FFA8CA59
:2034720006001F767403BDB20593A9800153BDAAE0FFFD001F767D0331930653E0FFF70059
:203492001F7671030493E1FFF2001F767403039302CBE0FFEA007FD0008FC0DB1193948837
:2034B2001660A646036C1546086CA647036D1547046D00530C600F6F061B7C0103680628BC
:2034D2007B01122B1128E803A71A0001061BF702E7FFC800A7920552056012930361A71AB4
:2034F2000002AC28F802AB282A00AA2B0B30608F0000ACA9080D6556A900A9A90156A500D2
:203512001E06C5961E06CD97D57FDD7E40767797E59640768A971F767E03ED9608921F7605
:203532007E03F5960680008FC0DBFD7FA4C508D009D11CDC7BDFC792A4C5008FC0DB9596BD
:2035520000D0C7929D96A9A80AD1A00DA71E5AFFA092A17218DFC7929D96A7A9A0920ED1DD
:20357200A17201D8C7929D96A0920452ED681F76740312D01392C076D1DF13D1959614D078
:20359200C7929D9615D1CF92959616D0D792A4C59D9614921F767D0350DF959617D018928A
:2035B2009596A9A851095AFFC792A7A918D119D09D96C7929596A9A87909A71EC792A4C53E
:2035D2001AD11BD078DF9D96C7929596A9A87A09A71EC792A4C51CD06FDF9596C792A4C573
:2035F2001DD01ED11F7674036EDF008F86DE95961FD0C7929D9620D11892959621D0199289
:203612009D9622D11A92959600D01B929D9623D11C929D9624D1A092A172949301D8A092AA
:203632009D970452F868C076DDDF28D129D01F767403C7929D96CF929596157EE5921696D0
:20365200A928F802ED93080A179708540260082B061BF8020267060A010201562000066FD9
:20367200BF561201036FBF560503BE86BE8B0600BDB2A888A98001D1BDAA0876303BBE5AEC
:20369200008F0010AA2BA727A9A8AB0F2A60A6935161A9A8AB0F2560A693015322601F7622
:2036B2007D03319206521D601F767103049219611F767403059201521461062BC076C0DB5A
:2036D200082B112B102B072B7FDF0A2BC7921596032B022B019ABF56050140769E972F6FCB
:2036F20020FF0110AB0F0B601F767403059201520661A6930461A61BE8031A6920FF021008
:20371200AB0F0460A61BF8020F68A78020FF0310A70F0860A692015205661F767403107E40
:203732000E6F00D10C6F1F767403077E086F097E066F1F767403BF560503112BBD7A007698
:20375200A192BE86BE8B06001F76740306930B8808920F0A0B1C0100112B062B0D970C7EE3
:203772000E96082B0600BDB20876303BBE591F767403059201521860010201561E000A0AF1
:2037920009920A5405660A2B019A40769E971F76740311920961FF9C11960660059A4076E2
:2037B2009E9740761199BD790076BE8B0600BDB20876303BBE59049A40769E97BD790076C3
:2037D200BE8B06000052A88005611F7674030D93046F1F7674030693005203610E88026F27
:2037F2000888005203610C27026F0B27A7550366009A1B6FA692A89EA794A908F802A91BEA
:20381200F8020668A90808FDA91BF802FC67AC28B07CAB32AC282A00A930AB07A40D208F91
:2038320000000156A400C4920600A927AB93A80800F00F5337660356AB01A988A60800E0AE
:20385200C076DAC3A706A60DA71EC7C52076A9284D55EFFF99002A9AEFFF9600A928F8022F
:20387200EFFF92001F7674030992EFFF8D001F7674031E06EFFF88001F7674031E06A80E08
:20389200EFFF82001F767D0331927D6F1F767D033092796FA928E803766F1F7674031192D3
:2038B200726FAB1B10105A68AB1B88101A671F76740310930460059301531361AB92A9082D
:2038D200F0EF2A9BA927C0005BBBA95C2ABEAB0E0FF6A61FA9931092079540764F99536F42
:2038F200AB1B00113B68AB1B7C1138671F767403069302530468AA280200026F062F200644
:20391200AB0800EFAA01A61EAB920360A6923B6F01520460A606A80E366F02520360AA9251
:20393200326F035205601F7674030F922C6FFC9C2ABEA927AB0E0FF6A61FA95DAA93A555C2
:203952000D69AB922A9BC0005BBBA95C0693AA9F009AA59540764F99166F009A146F1F7677
:203972007403109205611F7674030D920C6F06920A6F1F76740310920361039A046F1F76C8
:203992007403059206001F7674030592BDB2015227601F767D033192065222600876303B7A
:2039B200BE597FD0008FC0DB94881F767403150EA60F116040767797A9881F767403160ECF
:2039D200A60F096040768A97A9881F767403170EA60F0461039A40769E97BD790076BE8BE7
:2039F20006001F767403052B00B600BE062B009B00D0008FD1DF0F2B0E2B0D2B122B112B00
:203A1200102B142B132B0B2BBF560C01072B082BBF5609140A2B1EC320C2942B01D8A0922B
:203A32000352FC6800D0008FDDDF942B01D8A0920252FC681F7674031A2B192B182B1C2BFF
:203A52001B2B1597169717970600BDB2BDAA04FEA92F1F767D03A82D31920652426008762C
:203A7200303BBE59AACCFF1FAB28008000D04321A980427C417DAB92AACE1761A75A20FFA5
:203A92003101A20F0860AD8883DEA6881F767F0396921D96A79208520860AD8883DEA68854
:203AB2001F767F0396921E96AB9201D8C0FF01DFA927A0920352E0681F76740305920152B7
:203AD2000E6013578076D1DFC621029ACE7CD67D140A40769E97BD790076036FBD79007663
:203AF20084FEBE86BE8B0600608F00001F767403208F00FA22A024A82206261E282B220686
:203B1200046FA98A842BA9A81F767403240FFA680600BDB2A9A8BDAA10FFA101A98BA48610
:203B3200408FFFFFA98ABF56C1100602BF56C904D12BD92BE12BBF56E930407648B8A9CD3D
:203B5200FF00008D9E01A7FFFF90F197A28AA183F9960802BF5692014076A495BE86BE8B5E
:203B72000600BDB200BE00D0408FC0DBAA2B008F80DCA9A8A00DA98A9580C427A70EAB0F66
:203B92000361C47F01BE01D8A0928052F168A6921061408D80DC809AA18A407659B880D049
:203BB200A82802019196A18AA9287E3F40768FA5BE8B0600BDB2BDAABDA2AD5A88DAAD08B4
:203BD2008200A48B0ED90356D108D9CAA988A482A61B00100367009A3E6F0356E108E9CA98
:203BF2000876303BBE93AD5CAD5D08D09297A40880FFA5087FFFA6934196A45CA55DC992A2
:203C1200407663A0A98008D09292BD9600761F767403AD5CA9A23D8809D0A40880FF10FFB3
:203C3200A101417EC988A983A45CA98B427E9292439620FF9001447F4076DE9E00520A6141
:203C5200008D9E01A90EA38AA183BF5693014076A495019AAD087EFFBE82BE86BE8B0600E6
:203C7200A888A927BDB2A9A8A48B1F767403BDAA10FFA101408FFFFFA71EA986A98AAB92EE
:203C92003D278050C73FCF960302D77E407648B8A9CDFF00A7FFA283008D9E01FF90A18A3D
:203CB200DD97E5960502BF5691014076A495BE86BE8B0600BDB2A48B4076479B00523760B4
:203CD20000D5008DA101A9B2A50DA71EA9B2A50DA98A01DD0EDFC7929496A5920852F46881
:203CF200A18A0EDC0356D408DCCAA9580356E408A093ECCA80531667008FC0DB9496A092BD
:203D12007F52036040764499A9B2008D9E01A18A10FFA101BF569101A9830A024076A49599
:203D3200066F069A029BA18A40769D9BBE8B0600BDB2BDAABDA202FEA4864076479B00520E
:203D52007E60A28A0EDC0356D408DCCAA9270356E408ECCAA988FF9C7D526C67AB9280523A
:203D72006967809AAB9EA6546568A9AA10FFA101A71E00D41F7674033D92C7960356A60162
:203D9200BF56CF03D796A6921E61A458AB92408FC0DB03D1A0720356A401A980A9AA952F3F
:203DB20010FFA101A983A792A17204D0AA92C7FF9D96A792A07201DCAACCFF009596A692BF
:203DD200A454E4660356A6014196A993039A408FFFFFA894A959A9AA10FFA101A982A98A72
:203DF200A10E407648B8A9CDFF0004D0A7FF9B974193A073FF90AB280500089B9396AB92D4
:203E120041944195A958069A4194A980079A4194932BA758A859932BA958A28AA383A10E52
:203E3200932B008D9E019B2BBF5692014076A495066F039A029BA28A40769D9B82FEBE82A0
:203E5200BE86BE8B0600BDB2AC2BAB2808008076ACDF0C3505D106D0A483A172A072A980B9
:203E72000EDD03569D089594AC5807D19696AB92A794A958A793A173009B95929DCA0052D4
:203E92000261019BAC92AC58408FA4DF019C0852A92D9597DF68BE8B0600BDB210FEAD5C68
:203EB20089DCA45DAD5CC0768CC38FDCA45C08F6852400D0C0769CC305F68424008FC0DBB8
:203ED200942B01D8A0928052FC68A4C51F767D0330921F767D037EDFC7963192045208613F
:203EF20060D162D0BF569C0ABF569408116F1F76700300D0BF562002AD5C8FDCA45C9492B8
:203F1200008F22DC949601D8A0920652F66861D0008FC0DB1F767D03BF569465379204616B
:203F320063D0BF5694141F767D0336921B611F767D0330883092085281DE0365308882DE5E
:203F520000D00129008F34DC0356A603C076C0DEA00D0156A700C792949601D8A09208524D
:203F7200F4681F767D03319201521A601F767D033788012920FFF2FF00D0A60F1161008F9A
:203F9200C0DBA9A8A00DA98A30D101D8BF569C4648D1BF569C3C37920E9CA054F1661F7619
:203FB2007D0331920252216000D0008FC0DBA9A8A00DA98A01D830D1A092BF569CAA0652ED
:203FD20048D1BF569C96F26806D0008FC0DBA9A8A00DA98A01D830D1A092BF569C7308525A
:203FF20048D1BF569C69F2681F767D0331920352116000D0008FC0DBA9A8A00DA98A01D880
:2040120030D1A092BF569C46145248D1BF569C3CF2681F767D03309209521B6000D0013BE5
:20403200AD5C89DCA480008F40DFA7069481A71E008F08DCC792949601D8A0920F52F168EC
:204052003DD1008FC0DB3ED0BF569C46BF5694461F767D03319206522B60008FC0DB30D03D
:2040720032D19428A401A4C531D09428A40133D09C2884037ADF4BD19428840348D0942825
:204092002C0149D094282C014AD0942820039C282003C792A4C56ED051D194967BDF6FD01A
:2040B200C792949650D0BF569406BF569C101F767D0335920A6100D0008F30DC9428000865
:2040D20001D8A0920452FB684076D88390FEBE8B0600BDB2408D80DCA9287E3FA828020123
:2040F200A18A4076D2A5809AA18A407659B8A98080D0A988910EA70F0E60A688012920FF66
:20411200FFFFA60F08611F767D0330887ED0910EA60F15614076BA9C408DC0DB7FD0912B0D
:2041320040761E9B1F767D03349217617FD91F767103C11A10001128FFFF0F6F00D0008F4B
:2041520080DC9492008FC0DB949601D8A0928052F7681F7670033F2BBE8B06004076A59887
:2041720006000652A888436103520361019A486FA5921C60A492FF9C7D523F67A61B001026
:204192003C68A61B10100667A9281010A69EA4543667A61B10103168A61B88101F67A92827
:2041B2008810A69EA4541A682A6FA68020FF0010A70F0460A49210522261A68020FF10100F
:2041D200A70F0C60A49228521A6150521861785216612A52146154521261A68820FF0011BC
:2041F200A60F0B60A4927C520860096FA61B00100468A61B03100369029A026F009A06007F
:20421200407682990600BDB2BDAABDA206FEA927A85B44A052C44F92A4864196505D46C218
:204232004406036146060360009A366FAB92415CA39340761E9E468A0052C4962860A9AAF7
:204252002361AB9203520461E20604601D6FD2061B61AB9203520961E2C5C28AA3924193AD
:20427200673E00521161136F419200D11561A192D2C5C28AA394673E448A9C9601D9419288
:20429200A154F666096F468ABF56C403448AC47B4193029ACC9786FEBE82BE86BE8B060060
:2042B200A993FF90D7FFC497CC960600A9838076FFFFA9A00360A692146F8492FF90A6F2C4
:2042D20081DD009BA640046CC07601A0026F00B6A692019DC0FFA770A9880853EB67F36F93
:2042F2000600BDB2BDAAABA0BDA2A982A9A04C884B804A58495AA4833061A2922E61F7520A
:204312002C66A0927F522966A792FF52266600522160A9A02261A092035208600352086006
:20433200A692FF9C7C520468186F06521660A09206520460A69202521060A7920B60A09249
:20435200065206610356A601059CA90E046F0802026F0502A30F036900BE4A6FA4A9A79224
:20437200C47ACC782A60A09206521B610356A601D49600D0A6920F610356A001A980A9A9C2
:20439200A70DA98A959203DC4076BD9E01D8A692A054F3660356A601039CA90EAC1E126F0E
:2043B200C59202DC4076BD9EA4A9CD9204DC4076BD9E0602AC1E066FCC1A80000302D47F03
:2043D200AC1EA4A94076C39EA6A9A980A4ABA9AB0156A600A5A901DCA7CDFF00C697A9A839
:2043F20001DC0156A500A4C4A792C7FFC596BE82A606BE86BE8B0600BDB2BDAABDA2AD5A55
:204412008CDAAD0886000ED092A0D28010D0C227CA88927F0CD0DA5B921E0ED092060E61B5
:204432000CD092C5FD02A70F0966A392FF9CF752056710D092927F5203690002216FAD5DB1
:20445200A5087FFFA580AD5D413FA50880FF422BA69344C3A55D4076709EAD5C11D1417B2A
:2044720010D0A40880FF92930ED04297A45C9A934397449692830CD092064076DE9EAD08F2
:204492007AFFBE82BE86BE8B0600BDB2BDAA0AFEAD88C076A2C3AD58808D6D9E408D1B9E6D
:2044B20053278ADEA688522F512D8AD805F6862448AA46B2417DA483A05C42214357443F89
:2044D2004076699F8AFEBE86BE8B0600BDB20AFEAD88C07696C3AD588ADEA6884F27408DD8
:2044F2006D9E8AD805F6862480761B9E48B246C2413FBF56420144A0A483A05C4076709E44
:204512008AFEBE8B0600A4C4BDB2A827A95C4680452FA6061461A9A01261A49202520F68EF
:204532007C520D66A4400B6DC0FFAB540869AA92FF9CFF520467A792FF520369009A1A6FF1
:20455200A68A0356AB01A9599C92A58A4076BD9E01D0A192A072969202DC4076BD9EA58A48
:20457200A928001FAB9404DC4076BD9EF557089AFD7FBE8B0600BDB2BDA20AFEA827A92FD3
:20459200A9A0A5825487528851802C61A9AB2A61417FAD5DAA92AB93427E8ADDA55D407684
:2045B200F09F00521F61012903564A0849AF3FFFA71E03564808A988A38AA706A6AF47AFB9
:2045D200C41E0356460845AF3FFFA71E03564408A988A4ABA706A6AF43AFA71E089AC4C342
:2045F200026F009A8AFEBE82BE8B0600BDB20AFEAD88C076A8C3AD588ADEA6884F27408D5C
:204612006D9E8AD805F6862480761B9E48B246C2413F422B44A0A483A05C4076709E8AFE85
:20463200BE8B0600C493CC92A8380600BDB2BDAABDA204FEA61EABA0A9A0A48B52874D5A40
:2046520050821F61A9A21D610802A60F1A60FD02AC0F1766A292FF9CF7521367A4A9C48892
:20467200A20EA60F0E6000D09492FF520A6601D8A0920852FA6808024076C39E0052036100
:204692000002156FA4A902DC40767FA0A4A9A98804DC40767FA0A4A9417AA383CC934297E9
:2046B200A18A437E4496A9AB4076699F84FEBE82BE86BE8B0600BDB2BDAA04FEAC1EA5C4B0
:2046D200A9A0A48650C54EA34C8E3961A93A3761A9A93561A70633610802AC0F3060A9AB8E
:2046F20000D40D61A683A9A80156A500C592FF52266601DCA483A9ABA50FF566A68A04DC45
:2047120040767FA0A95D20FF001FA50F1860A683F5921561A4A9C496A68A40767FA0A927A0
:2047320002DC40767FA04196BF564201AB93A28A44C3FD92A0834076709E026F009A84FE11
:20475200BE86BE8B0600A988FF9C105203670253036900310B6F0129AB28FFFFAA28B9002A
:204772000356A804A60D0156AB00A9A906000600A983C57C0600BDB2BDAABDA206FE1F76CE
:204792007403A482BF5602010EDCEC92FF90A95AE492FF90A988A9AA37FFA6AFA986DC92A7
:2047B200FF90A988A9AA37FFA6AFA986D492FF90A98809D0A9AA37FFA6AFA9869492FF9059
:2047D20008D0A9599492FF90A988A9B237FFA6AFA98BFC92FF90A988008D3203A9B237FF4C
:2047F200A6AFA98BF492FF90A988408FFFFFA9B237FFA6AFA98BA9A210FFA101A71E441ECE
:20481200A98A9392C7960202BF56CC34407648B8A90E461EA28A465DA9B240761EB841965A
:2048320044830102A38A4076A49544830102A38ABF56C5344076A4954192A90E461EC38A51
:20485200E446FE6CA9B2A38AA28340764697C38AE446FE6CA9A210FFA101A983A38A469264
:20487200A993FF91A7FFFF90C597CD960602D52BDD2B4076A49586FEBE82BE86BE8B060010
:2048920006000600A98AC4920600A988BDB21F767103A9A8008D3203A48BBF560101BDAA02
:2048B20010FFA101408FFFFFA71EA986A98A9193C7970202CF7E407648B8A9CDFF00A2831E
:2048D200A7FFFF90A18AD597DD960602E52BED2B4076A495BE86BE8B0600BDB202FEA48B37
:2048F2000EDCEC92FF90A980E492FF90A988A70637FFA6AFA71EDC92FF90A9880129A7064E
:2049120037FFA6AFA71ED492FF90A988412BA70637FFA6AFA71EFC92FF90A9934196F492F0
:20493200A838419620FF0080A70F0666A706415C407625A1086FAD5CA792029B81DCA45C74
:2049520040768FA5399AA18A4076B2A182FEBE8B0600BDB2BDAA02FE1F767103A486BF5667
:2049720001010EDCEC92FF90A980E492FF90A988A70637FFA6AFA71EDC92FF90A988A706F5
:2049920037FFA6AFA71ED492FF90A988A70637FFA6AFA71E012920FF0080A70F0666A706FA
:2049B2004076AFA14196086FAD5CA792029B81DCA45C4076D2A5A9AA008D320310FFA10162
:2049D2001F767803A71EA98BA98A9292408FFFFFC796BF56CF384192FF90D7964192A7FFD7
:2049F200FF90DF963A92A9CDFF00A7FFFF90E197E9960602407648B8A9CDFF0009D0A7FF82
:204A1200A183A28AFF9008D1F597FD960A029D2B952B4076A49582FEBE86BE8B060002FE17
:204A3200A61EAC281F00013B2256A60740FF0156A400C492A640036CFF90036FA7FFFF9031
:204A520082FE0600BDB2A48BBDAAE1C50AD09183A706A58A021940767CA2A927A706A58AAE
:204A7200011940767CA2A1C5008D3203408FFFFF0EDF0356A908AB94A95AA78A9192C79657
:204A92000202BF56CF33407648B80AD0A95DE106918A021940761EB8A988A20EA60F1061A3
:204AB200008D3C03912BD192025205601F76BF01081A0400A18A099A40764F94096FA18ABB
:204AD200339A4076B2A1008D3C03BF569101BE86BE8B0600A4830EDDED92FF90A980E59228
:204AF200FF90A988A70637FFA6AFA71EDD92FF90A988A70637FFA6AFA71ED592FF90A98894
:204B120009D0A70637FFA6AFA71E9592FF9008D0A90EE41E9592FF90A988E40637FFA6AF0A
:204B3200E41EFD92FF90A988E40637FFA6AFE41EF592FF90A988E40637FFA6AFE41E0202D9
:204B52000156E4000AD01F7674033A9AF4C394C3BF5602014076B2A106000600BDB2BDAA3D
:204B7200BDA2A482008DA00193923D61408DA0010FD09B2B935A008F40DE013BA9A8A28150
:204B9200A98AC49203523268A91B90012F66A29233521A61008F40DEA9A8A281A98AC458FD
:204BB200A059408FFFFFA38A82D981D8A1880EDC035694089CCAA959A606407648B8A18841
:204BD200A90EA60F05600CD0A292937A1C6FD392025205601F76BF01081A0400A38A099AE1
:204BF20040764F94A928FFFF0E6FD392025205601F76BF01081A0400A38A099A40764F94BC
:204C1200A928FFFFBE82BE86BE8B0600BDB206FEA48B0EDCEC92FF90A90E421EE492FF902B
:204C3200A988420637FFA6AF421EDC92FF90A988420637FFA6AF421ED492FF90A98809D09E
:204C5200420637FFA6AF421E9492FF9008D0A90E441E9492FF90A988440637FFA6AF441E4C
:204C7200FC92FF90A988440637FFA6AF441EF492FF90A9880DD0440637FFA6AF441E94921D
:204C9200FF900CD0A90E461E9492FF90A9880BD0460637FFA6AF461E9492FF90A9880AD0C0
:204CB200460637FFA6AF461E9492FF90A9880ED0460637FFA6AF461E94CCFF0004520A6188
:204CD200055212604206448A46C4A6934076D2A5076F4206448A46C4A69340768FA53C9AE4
:204CF200A18A4076B2A186FEBE8B0600C4A0D41A01000600C4A0D41A02000600D493009AE7
:204D1200039100530260019A06001F76BF010118F7FF06001F76BF01011A08000600227617
:204D320008D0408F806F1F76BE0195CCFCFF015008960BDD08CCF7FF0450089608CCDFFFD6
:204D52001050089608183FFF1F76BF01C51A08000118F7FF1A761F76C10169FF0002BF5634
:204D72000007BF56011F022BBF56040D0A2800800B2B0C2BBF560F10D42BC41E001A8000C4
:204D920006001F767C030188BDB2A48BA6921352E6FF5801C076B2C30129A7060456A60162
:204DB200A71EC7C52076C18A020ED40F0561BF560111EFFF470108D091C5673E1F767C0312
:204DD200012B022BD118F7FFD118FDFFEFFF3A011F76C1010246ECFF3501C18A1F767C035C
:204DF200020EC407A71E1F76C10107921F767C03C796BF560113020AEFFF24011F76C10101
:204E12000246ECFF1F0107921F767C03BF5601110396EFFF17011F76C1010246ECFF12011D
:204E320007921F767C03BF56010F0396EFFF0A011F76C1010246ECFF050108D091C5673E99
:204E52001F76C10107400B6DD118FBFF1F767C03D118FEFF012B022BEFFFF4001F767C03FE
:204E7200BF560109EFFFEE001F76C1010246ECFFE90007921F767C03BF56010B0396EFFF5D
:204E9200E1001F76C1010246ECFFDC0007881F767C03037EC18A020ED40F0561BF560107D4
:204EB200EFFFD00008D091C5673E1F767C03BF560109EFFFC7001F76C1010246ECFFC2001B
:204ED20007921F767C03BF5601070396EFFFBA001F76C1010246ECFFB50007921F767C03C9
:204EF200BF5601050396EFFFAD001F76C1010246ECFFA800079208D01F767C03039691C5AB
:204F1200673E1F767C03BF560103EFFF9B00D140086CBF5601010AD0D11A040091C5673EC4
:204F3200D141ECFF8F001F767C030AD0BF56010DD11A080091C5673EEFFF84001F76C1010B
:204F5200BF56008F082B021A20001F767C03BF560112776F1F76C101BF56008FC18AE4924E
:204F72000896021A20001F767C03BF560110696F1F76C101BF56008708280003021A2000D1
:204F92001F767C03BF56010E5C6F1F76C101082B021A20001F767C03BF56010C526F0AD065
:204FB20091C5673E1F76C101BF56008708280005021A20001F767C03BF56010A426F028019
:204FD2001F76C101BF56008FC18AA706C407A71EC79208961F767C03020A1F76C101021AB2
:204FF20020001F767C03BF5601082B6F1F76C101BF56008FC18AE4920896021A20001F7688
:205012007C03BF5601061D6F0AD091C5673E1F76C101BF56008708280002021A20001F768C
:205032007C03BF5601040D6F1F76C101BF56008708280006021A20001F767C03BF560102B8
:20505200BE8B06001F763000A880A927A48E142820400002008F10DF1F7678033A1E4076C6
:20507200EBA30052FD61A792A793C0FF0191A995A880A7922661408F04DFAB9220BE1F907A
:20509200A674A792A6540267A7881F767C03A65C0356AB01043AA90E06A8081E008F10DFB7
:2050B2004076E3A34076EBA30052FD61A93AA60DA98EAB92A694A927A792A69EA980DE60B6
:2050D2001F7630001428104006001F763000A880A927A48E142820400002008F10DF1F76C7
:2050F20078033A1E4076EBA30052FD61A792A793C0FF0191A995A880A7922661408F0ADF35
:20511200AB9220BE1F90A674A792A6540267A7881F767C03A65C0356AB010A3AA90E0CA804
:205132000E1E008F10DF4076E7A34076EBA30052FD61A93AA60DA98EAB92A694A927A79232
:20515200A69EA980DE601F76300014281040060002FE1F767C0314C5008F10DF673E227693
:205172001F763400008FFBB91CA81A7669FF407608B91F7671030F8F40423A0642A8C000CB
:205192006BBAA9BD120F0077007702E84116008F38DE89E60000407647B92376002082FE1F
:2051B200060002FE22761F767D03319204520460008F25B4036F008F77AC1F7634001AA896
:2051D2001A760F8F40421F76710369FF3A0642A8C0006BBAA9BD120F0077007702E8D1233A
:2051F200008F30DE89E60000407647B91F7630000C2820402376001082FE0600BDB2BDAA7D
:20521200BDA24076EDB300D3103B69FF407695BA267600002F760000407648BB407677B95C
:205232004076FF901F767D03009A3093407620A90D9A40761A95418F00C201D4A9A04076B4
:2052520069941F767D0337920860418F00C202D4A9A040766994076F012902D420FF00E11F
:2052720040766994407615A640762990008FC06FA48300D20BDC0CDDC51A0100C41A010043
:20529200012920FF50C3407666B9008FC06FA48301DAA2920EDC0FDDC51A0100C41A010042
:2052B2000A52EF64008FC06FA4830BDC0ADDC51A0100C41A01004076F78F4076E19A407698
:2052D2005E9A1F767D03109B309240766ABB40763EA64076B4BA1F767D0331920452056115
:2052F20040763CAE407638844076AE854076D69D4076D8831F767D0331920652036040761E
:2053120011B01F767D03C076C0DB30927EDFC79622761F76C001BF56292F1A761F76710364
:20533200BF56040169FF40768BA81F76710303927B6163D0032B008FC0DB94920D611F76C2
:205352007F0363D0140A949214540666142B008FC0D34076F69A00D2008FD7DF013B408FA5
:20537200C0DBA9A8A281A98AA9A0A281A98360D0C40A9592C4545466005252611F767F032E
:2053920017924E61408FBEDEC42BA9A0A281A98AC49280520868008FBEDE013BA9A8A28137
:2053B200A98AC42B013B086F109AA794A9CCF0FFC4968052F167008FBEDEA9A8A281A98A67
:2053D200C4800356A203408FF0D8A61EA792C3FFA927A606AB0D0156A500A7CD0F00A82D9B
:2053F200C59262FFA988E161013B0A6F008FBEDEA9A8A281A98AA692A0FFA988C40AA6402D
:20541200F66C408DBEDE013BA9B2A281A98B008FC0DB009AC193407638AAC108030001DA6A
:20543200A29202529A647FD0008FC0DB9441066C7FDCC418FDFF4076BA9C7FD0008FC0DB5C
:205452009442066C7FDCC418FBFF40761E9B7FD0008FC0DB9443066C7FDCC418F7FF4076AD
:20547200D69D7FD0008FC0DB9445066C7FDCC418DFFF4076538040761C921F767D03319209
:205492000152136016D0408FC0DB9592A58AC1FF01F016D0A3CE0356A9027FDC0790C49834
:2054B20095CC0400C1FFA95B319206525A607FD0008FC0DB94921F767F03A99300B6D6FF5F
:2054D200C5FF01910190A9881592026001B6A892A7CE1B61008FC06FA4831F767D030BDDD5
:2054F200C51A0040319206520761045205610DDCC41A0020056F1F76BF01041A0800008FD7
:20551200E8031F767E0308A81F767F03169200B61597026001B6A693A7CF16611F767D0353
:2055320031931F76BF010B1A000406530661045304610B1A0020036F021A0800008FE80346
:205552001F767E0308A81F767F03167E1F767E03080607601F76BF010D1A00400D1A000456
:205572004076309A00D2A2920461408D40D0036F408DC0D3A18A40761BA3A91BFFFF596164
:205592001F76BF0100BE0F1A01001F767E03375222C213623752326133520A6233523A6197
:2055B2000352446104523E6106523861426F34522D61355227613D6F3A5208623A52126184
:2055D2003852186139521261346F3B5207613C523060A18A407673A32C6FA18A40761AA3D2
:2055F200286FA18A4076D7A2246FA18A4076DAA1206FA18A407616A21C6FA18A4076ADA1D7
:20561200186FA18A4076AEA1146FA18A407628A1106FA18A40768FA20C6FA18A4076C79B45
:20563200086FA18A4076909C046FA18A4076059C01DAA2920252E3FF77FE966FBDB2BDAA4A
:205652000AFE1F767D03219225611F76800108421A6D0A420A6D1F767803FABE32061F76A3
:205672007D032E03A60F7C6904021F768001061E0A42766C1F767D03212B1E2B1F7680019F
:205692000A1E0D6F1F767D030402212B1F768001081E1F767D031E921F5423661F767D03DB
:2056B2001A921C610876303BBE5A1B59AD5D1C93008F40DD1D88A1CCFF0089DD1A2BA55D17
:2056D200417E4076D39F1F767D03A1CD00FF1F2B49CB1E962097BD7A00761E921F5440690D
:2056F2001F7680010406A9403B6D1F767D032092AD5CAD5DC7FF1F93419686DC88DDA488CB
:2057120020C6D0FF4296A55D008F40DD1E9244C2407628A0005205601F767D031E2B206F64
:205732001F76780332C5040204BE1F768001468A48A3081E1F767D031F0802001F7680013D
:205752000AC21F76840116A81F767D03BF5621012EC31F76840114A91F768001041E8AFEBF
:20577200BE86BE8B0600BDAA34FEA892FF9C0564105204640F9A026F009A22761F76BE0143
:20579200AB28F0FFAA28457F09CDFFDF013B08B6A81A0010A4A908BE099700D209CDFF3F86
:2057B200A81A00400997A9851F7680015AFF2AC35D56A400A0A9AB2BAA28467F08D42CC2D4
:2057D200ACA91F7684015AFF5D56AC0002A8A5A9AB28E0FFAA28457F0AC3AB03AB28FAFF09
:2057F200AA28FFFF12C21F76800107BE00AA1F768401003A08A0101E1F76800102A900C2C1
:2058120000BE0002011960C2601A80F2081E000260C401190C1E000201191E1E000201198A
:20583200221E00020119181E14C21844FF6C16065E1E5E18FFFD5E1A00015D1800FF5D1AB9
:2058520005005E1A7F005E18FAFF5EC416C26018FFEF6006141E1844FF6D0002488F70645E
:205872001F768301541E088F7064541A010000A00031531A0200010200BE02A8541A060092
:205892001F768001408FBEB800D4301E54C5020232A82EA9008F93B81F76370008A01F76C8
:2058B2008001241E26C220C31F7637000AA81F763300321A1000321A2000237600011A7610
:2058D2001F767D0369FF000200B6182B261EB4FE22C224C3BE86060006FE00021F767E0317
:2058F2000ED0221E94A3AA8820FF001F0CD094C5A60F3D61A9A9A80EA958463FA0CC0080CF
:205912004396A0CC00404296A0CC00204196A706A018FF1F45974392447F00520861A092D1
:20593200805205674692008FC0DB9496429201D80861A092805205674592008FC0DB94963A
:20595200419201D80861A092805205674492008FC0DB9496A9A9455C445DA80E46934076AD
:20597200929A1F76BF010F1A0100146F0AD094920F9008520F60A9A9A91800FF009158FF85
:2059920009611F767D03A7061B3F1C971D7FBF561A0186FE06001F767D031992A88809610C
:2059B2001F7680010806A940046D0A06A9403E6C02D5A692013BAB28010001B6A572AA2BF2
:2059D2001F768001A9A8A581A98308A90AC301B6C58500915AFFA692A772A9A8A781A9839D
:2059F200C5853FFFABCAAACBA71EA9A8A681A98A1F768401C48500915AFFA6853FFFAACB88
:205A1200ABCAA81A00E0061E04C322761F76800100022E1E1A760102041E1F76BF010E1A44
:205A320001001F767D03BF56190169FF06001B76F0FF0500BDABBDAABDA8BDA0BDC2BDC38C
:205A520000E2BD0003E2BD0003E2BD0103E2BD0203E2BD0303E2BD0430E6000602FE69FFDD
:205A7200422916561F7633002292419623760100267601012218FA002128FFFF10291F7669
:205A92007C033C060461010241563C001F7671030492E1FF99011F76710311920D61FF9C2A
:205AB20011960A60008FC0DBA4837FDC7FDDC518EFFFC41A04001F767D033592196100D2E6
:205AD200008F0871013BA9A8A281A98AD492C3FFA988008F3CD7A9A8A281A98A69FFA2928B
:205AF200C47E4076568601DAA2920452EA641F767D03319206523A601F76C4010992C3FF8C
:205B1200A90EA9BD120F0077007763D0808DC0DB8BE60400008F40D78CE6200069FF13E262
:205B32009200CFE62000407634BA6ED16FD0013B008FC0DB9A92929EA985A9BD160F6FD010
:205B5200C8E29402CFE6040020E7A00089E60900407696B750E800C8007790E8008800772A
:205B72008CE600001DD013E292001F767D0331920552436000D21F76710306921F767C03D4
:205B9200390A39540262392B008F0871013BA9A83981A98AC492C3FFA90EA9BD120F392D1D
:205BB20069FF008F40D712358BE604000156A400CFE62000407634BA013B1F767C03008FB6
:205BD20086DE8EE60000A9A83981A98A13E2C400008F40DFA9A83981A98A01DAC49208526D
:205BF200056139924076EE82056F3992009B40761181A2920652C0641F767D033492E1FFAF
:205C1200E3001F767C033888350EA60F1A601F767D0332931F767C03399200530F611F7638
:205C32007103055402600D9A1F767C0339931F767103059F015302600C9A69FF40764B909A
:205C52001F767C033692385472671F767D03349200D26D651F767C03392D008F0871013BB4
:205C72001F767D033412A294A959A9A8A281A98AC492C3FFA980A7BD160FA188008F86DEF2
:205C9200A9A8A681A98A8BE60C00C4E2C400007720E7000100778CE6000000771F767C036D
:205CB200A9BF120FA98556FF009B37540267019B37543A970767008FD9DFA9A8A281A98AE3
:205CD200C40A008FA2DEA9A8A181A98A009AC49300530260019A3ACA2461A12D008F40D7F1
:205CF2001235CFE6200069FF0156A400407634BA1F767C033C0608618EE62000007700772E
:205D1200A6BF120F076F8EE6000000770077A6BF120F008F86DE013BA9A8A181A98AC47E76
:205D320001DA1F767D03A292345495641F767C033492380A38544766382B69FF4076DB906B
:205D520000D21F767D03349220651F767C03392D1F767D033412A294009BA959407611810F
:205D7200013BC076D9DF008FA2DEA706A281A71EA9A8A181A98A01DA1F767D03C792C496FA
:205D9200A292C72B3454E2641F76710305921F767C03029C390A395416621F767D03379285
:205DB20000D21F767C03392B0E651F7671030692019BA2944076118101DA1F767D03A29235
:205DD2003754F464008F0071A4831F76330019DC01DDC51A0040C41A1000BF562101103B7D
:205DF200419282FE2296AFE2BE04AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC54E
:205E1200BEC4BE83BE8ABE86BE870300303BF1FF177602761B76F0FF0500BDABBDA8BDA0CA
:205E3200BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FFA0
:205E520042291656227601021F76780301563200237600102676391110291A767FD0008FEF
:205E7200C0DB944F046D69FF4076C8B21F767103020A029214520468022BBF56030116D1E1
:205E9200008FC0DB7FD09C9294CA0190A9880C9301F10191A6CB10601F767D0331930653F3
:205EB20006611F76BF010B1A0008146F1F76BF010B1A00200F6F1F767D03319306530661B3
:205ED2001F76BF010F1A0008056F1F76BF010F1A00200653E1FF4B011F767103150A1593C3
:205EF2000A53E0FFA1001F767D0331931F7671030553152B03601B9322601F767D033193CD
:205F1200015305601F7671031A9319601F767D03319306530F6104530D61025306611F76CF
:205F3200BF010B1A0004226F1F76BF010B1A00401D6F1F76BF01021A0002186F1F767D0380
:205F5200319306530F6104530D61025306611F76BF010D1A00040A6F1F76BF010D1A00406C
:205F7200056F1F76BF01041A00021F76710319930F601F767D033193035313610153116199
:205F9200065319601F76BF01021A8000186F1F767D03319303530F6101530D610653066184
:205FB2001F76BF010B1A00100A6F1F76BF01041A8000056F1F76BF010D1A00101F767103D0
:205FD2001A9315601F767D03319306530B610353046101531561196F1F76BF010B1A004028
:205FF200226F1F76BF01021A80001D6F1F767D0331930653146103530D61015306611F76C6
:20601200BF010B1A00800F6F1F76BF010D1A00800A6F1F76BF010D1A0040056F1F76BF0191
:20603200041A020000523E601F767103158062D0940EA70F37601F767D03319303530F61E0
:2060520001530D61065306611F76BF010D1A00100A6F1F76BF01021A8000056F1F76BF01ED
:206072000B1A001006530E6103530961015304610D1A0080096F0B1A0080066F0B1A0040FA
:20609200036F021A800006530B6104530961025304610B1A0004066F0B1A0040036F021A0F
:2060B20000021F767103009A1C9300530260019AA693A9CF04611428F401162B140AC4E2DE
:2060D20014001C7E12E8D01F14AD5564160A1693019100B6142B179716930791026101B644
:2060F200A692187F3C601F767D033092095224611F76710316D0BF56190194937FD0D0FF09
:206112009492C9FFA8CAA940026C197F0C42116D0C430C6D0C44036D1A2B2D6F1892009BA4
:2061320000520260019B1A97266F17921A96236FBF561A01206F1F7671030C41BF561B0186
:20615200036C1792026F009A0C401A96036D192B126F179317921B9719960D6F1793178860
:20617200179219971B961A7E066F69FF407680B04076209982FEAFE2BE03AFE2BE02AFE285
:20619200BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF1776027602FE89
:2061B2002276008F84AA1F7635000AA81A7669FF407616BB1F763300221A200023760100BF
:2061D20000D5013B008FA2DEA9A8A581A98AC42B008F86DEA9A8A581A98A01DDA592C42B53
:2061F2001C52F1641F767D03319206522360008F00711F76C401D4CCF0FF05500296DCCC99
:20621200F0FF0350039603CC1FFF1050039603CCFFF1A91A0005039603CCFF0FA91A0040AB
:206232000396E4CCF0FF0750049604CC0FFF205004961F767D03319203521460008F00719A
:206252001F76C401D4CCF0FF02500296DC18F0FF03CC1FFF1050039603CCFFF0A91A00020D
:2062720003961F767D03319201522860008F00711F76C401D4CCF0FF06500296DCCCF0FF52
:206292000550039603CC0FFF4050039603CCFFF7A91A0007039603CCFF0FA91A0020039677
:2062B200E4CCF0FF0350049604CC0FFF6050049604CCFFF1A91A000104961F767D03319222
:2062D20002520960408F0071A58A02DCC418F0FFDD18F0FF319205524C60408F0071A58ABE
:2062F2001F76C40102DCC41A0F00DDCCF0FF0250039603CC3FFF3050039603CCFFF0A91A3D
:206312000006039603CCFF0FA91A00C00396E5CCF8FF0A50049604CCBFFFB050049604CC3F
:20633200FFF7A91A0007049604CCFF0FA91A00400496EDCCF0FF0550059605CC1FFF10508F
:20635200059605CCFFFEA91A000E05960518FF0FF5CCF8FF08500696061AF00006CCFFFDA1
:20637200A91A000D069606CCFF0FA91A00900696408F0071C0760068A5C41F76C401A78AFE
:206392001AD019DD01DEC61A000119DC011A0008C51A1000001A10000018BFFF001A000F1B
:2063B200011A00401F763300BF5621011F76A001C41A000819CCFFFCA91A0004199697CC9C
:2063D200FFFDA91A00011A96BF56098000CC7FFCA91A0001009600CCFFE3A91A00080096ED
:2063F20000CC001CC9FFA92D019A66FFA98800CC800304600102AC1E076F00CC8003C6FFCA
:2064120080FFA985AC1EA6851F7671034456A900421E3A06C0006BBA008FA60E42A8C0000A
:206432006BBA1F767D03008F4C1D31931F76A00105960018FCFF1F767C0302533EA80C60B5
:20645200008F8A66BF56340FBF563504BF563609BF5637143EA81F767D03319203520E60D0
:206472001F767C03008FF22BBF56340ABF563501BF563604BF5637143EA81F767D0332923E
:206492000E611F767C03008FF22BBF5634FABF563519BF563696BF5637143EA81F767D03D9
:2064B200319206520660008F7C921F767C033EA805520660008FA60E1F767C033EA81F7623
:2064D2007C033E0682FE3C1E0600009A019C1952FE640600005206601F76BF010D1A0010B9
:2064F200056F1F76BF010B1A00100600BDB21F76BF01BDAA0D1A0008BDA2A95B0102407610
:206512006FBB00D1808DC06FA28AA392CEFF0BDCC41A00804076D7AFA39280FFA95B0102C8
:2065320040766FBB0DDA0102C21A008040766FBB01D9A1921052E7641F76BF010B1A000807
:20655200BE82BE86BE8B06001F767E03008F5902BF5600050128701706A80600BDB2BDAA02
:20657200BDA202FE79D0008FC0DBAC1E013BA98B94854C82A61E4456A90042A2C0006BBA46
:2065920078D0A98342A2215694004456A100C0006BBA7FD0A607A5039449046C7AD0013BEF
:2065B2009485A918FF0FA95AA91A00804076E3AF7BD0A9B2408FC0DB34FF957AA61EA9B2E2
:2065D20042A232FFA607C0006BBAA98A42A2C802AC1EA9B24456A900C0006BBA1CD0A49EA6
:2065F20082FE289C9596BE82BE86BE8B0600A92802904076E3AF1F767D03319206520F61FC
:2066120004520D61025206611F76BF010F1A00040A6F1F76BF010F1A0040056F1F76BF0167
:20663200061A0002060002FE1F767E03080604610102415608000092020A0254E6FFCF004D
:206652000606022BE0FFAB007FD0008FC0DB9447706C05924C6050D0013B9492FC9CA985AA
:20667200A9BD120F007700770077007789E6000051D003E20A009492FC9CA985A9BD160FAF
:20669200007720E8000003E20A0032E8000589E6090003E20A0003E20C0112E8010C14AD3A
:2066B200056502E8000C03E20A0094E6010014AD06628FE800E0007703E20C00AFE20A017A
:2066D200AFE20C0090E8092090E800201F76740350E8094850E800488EE609008EE60000CC
:2066F20013E21A011F76740313E21B001F767E030192C0FF03540267030A0192030A035430
:2067120002670396AFE20A00AFE20C01C4E20103C4E2030220E709004FE800604FE8096090
:2067320000E7180000E75100007710E74000086F0492032B90E5019CA918FF0304968EE644
:20675200000003887FD0A9BF120F01931F767403187E1F76740319971F7674031C969488F8
:206772001F767E03A693D6FF0191059704930A61A648086D0188013BA98542C240761BB0D8
:206792002D6F407664B01F767E03008FC0DBBF5604017FDCC418FFFE216F06060119A61E79
:2067B200061E20FF5802A60F136120FFF401060F0F6120FF9001060F0B6120FF2C01060FD6
:2067D2000761C802060F04616402060F0760407664B01F767E03BF56040182FE0600005247
:2067F20006601F76BF01041A0001056F1F76BF01021A00010600005206601F76BF01041A96
:206812004000056F1F76BF01021A4000060040765CB1019A407668B1009A40765CB101026E
:2068320040766FBB009A407668B11E0240766FBB0600009A407668B11E0240766FBB019AF3
:2068520040765CB11E0240766FBB009A40765CB11E0240766FBB0600BDB2BDAABDA20EFEBF
:2068720000D2A98BA288A492A52D0252A65BE3FFF000A9B2026301D256FFA983AC920564EC
:206892000452036301D3026FAC2BAC92A58B4B2B0B650A02421EA9B2C0006BBA4B0AA98B85
:2068B200AC924B54F762A9B20A650A02421EA9B2C0006BBA01DE58FFA98BF862A292A58BF2
:2068D200A694A988026001BEA692AC944B2B0452A9880F650A02421EA9B2C0006BBAAC8059
:2068F200A98B4B0AA69281DFFC9CA72D4B54F362AC920263AC2B019A66FFA95801520260D5
:2069120000D08076E803A9B242C2C0006BBA441EA9B242C2C0007ABAA61E6402421EA60685
:20693200C0006BBA461E6402421EA9B2C0007ABAA61E0A02421EA606C0006BBA481E0A02B4
:20695200421EA9B2C0007ABA4A1EA61E460648074407A607046000D0A02DAC5AA392156105
:20697200039A013B4B96AD888ADEA6880356A9010156A600C6060960AC924B5406610F02F6
:206992004B0BC61E4B92F062A2922061019A013B4B96AD5D8ADDA55D0356A9010156A5009D
:2069B2000F02C50F09614B9203520661019C04524B96F0640B6FAD5D8ADDA55D0ABE4B9223
:2069D2000356A9010156A500C5C2009A4B2B013BAD5D8ADDA55D0356A9010156A50080766B
:2069F200B0DAA606C507A61EC685C51E019A4B2D66FFA0CE046180020156C5004B0A4B9276
:206A12000452E76448A3AB92AA2BFF90A927A9A9AC28180037FF5AFF4A064E1E4E92FF906F
:206A32004E964D2B4E06ABCAAACB4E1E4606009BFF903FFF5AFF4E06ABCAAACB4E1E44063D
:206A52003B565AFF4E06ABCAAACB4E1E026F4EB2408FCCDF013BA9A0A481A98A4B2BC45B33
:206A7200A3921052246200D14E92013B0190A9884E0640FF4E1EA692407674B101D9A19219
:206A92000852F364A35A00D1A293A292B0FF0190A85A407674B101D9A1920652F66440766A
:206AB20086B101DB4B0A4B920452DB648EFEBE82BE86BE8B060011D0008F107094920F90D6
:206AD20004520E60CCCC8001C6FF0252096022761F76C001BF562555BF5625AA1A7669FFEC
:206AF200060022761F76C001BF5629681A7669FF0600BDB202FE1F76C001A888A98011437A
:206B1200026C257611CC80010561227611187FFE1A762276408F1070A58AA79211D00F90F9
:206B320001DCC41A400095CDF0FFA8CA21961A76A79204600102A98B026FA759A92880C3E5
:206B5200A828C90169FFAC1E0556A1004076DEB2A1A91140FF6C22761118BFFF1A76A693C7
:206B72000153036102530A602276A69211CD7FFE039086FFA8CA11961A76A6930A60A9B2A2
:206B9200013BAC281E0040FF2256A10741FFA98BA69301530A60A9B2013BAC281E0040FF23
:206BB2002256A10741FFA98BA69302530960A9B2AC281F00013B2256A10740FFA98BA792E2
:206BD2001460A69203521160227611CC7FFFA91A000169FF119620FFDA0540766FBB1F76F8
:206BF200C001111A80011A761F76710382FE69FF3AB2BE8B0600BDB202FE22761F76C001FD
:206C1200BF561A011B2B1A92036001BE046F03561A01A9881F76710342C269FF3A06C00091
:206C32006BBA3E1E1F76C0011B92036001BE046F03561B01A9881F76710342C23A06C00076
:206C52006BBA408D1070A18315D0008F200B3C1E0CDD1F762C0094CCF8FF015014DC359686
:206C7200C41A04003418F7FFC51A0800787680001F76C0011C1A1000A18A1C1A00041C1A52
:206C920000081C1A20000DDC10D91C1A00011C1A00101C1A00201C1A00401C1A00801C187F
:206CB200FBFFC41A01001D1A02001D1A04001D1A08001D1A10001D1A20001C1A04001D1A27
:206CD20000041D1A00081D1A00101D1A00201D1A00011D1A00021D1A00401D1A0080C11A47
:206CF2000001201A0002201A0004201A0008201A0010201A00201A7669FF82FEBE8B06005A
:206D12004076DEB2049A029B4076E6B2407668B3060002FE22761F762B002028FFFF2128D4
:206D3200FFFF2228FFFF2328FFFF2428FFFF2528FFFF2628FFFF2728FFFF1A761F76FFCF91
:206D520069FF38924196399241963A9241963B9241963C9241963D9241963E9241963F926C
:206D72001F762B0041962F9201F0019082FE06001B76F0FF0500BDABBDA8BDA0BDC2BDC3F3
:206D920000E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000669FF4229165600D188
:206DB200227601021F767803015632002376391110291A767FD0008FC0DB944F046D69FFAC
:206DD2004076C8B21F767103020A029214520668022B1F767103BF560301008FC06FA483C0
:206DF2001F767D0306DDC51A0100319206520E6104520C61025205610FDCC41A00040A6F5C
:206E12001F76BF010F1A0040056F1F76BF01061A00021F767D033192065208610452066161
:206E32001F76BF010F1A0020056F1F76BF01061A080001021F767E032207A61E008F204EAE
:206E5200221EA9A8A60F026722A81F0A1F920A5202641F2B1B92AC2B1261008FC0DBA9A84F
:206E7200AC0DA98A62D094921F540465019A66FFA172AC92019C1B54A92DF0681E0A1E927D
:206E9200025202651E2B7FD0008FC0DB9493A89216D094CAA940EDFF8300A84B586D20FF8F
:206EB200204E220F30691E920A60013B1F766F0300D401D569FF0085407699B11F767E037E
:206ED2001E9201520A60008FC0DB013B01D569FFCC8501D4407699B1A192408DC0DB02D4F8
:206EF20000D569FFD1CEA90E407699B11F767E031E9202527B60013B03D400D5D9854076FC
:206F120099B1746F1E92076000D4000200D569FF407699B11F767E031E920152076001D4B3
:206F3200000200D569FF407699B102D4000200D569FF407699B11F767E031E92025256601B
:206F520003D4000200D5407699B1506F1E92086020FFB82200D401D569FF407699B11F76FA
:206F72007E031E920152086020FFB82201D401D569FF407699B1A10E02D400D569FF40768F
:206F920099B11F767E031E9202523060012903D400D520FFFFFF407699B1286F69FF407643
:206FB200DEBA1E920760013B00D404D51A85407699B11F767E031E9201520760013B01D4F7
:206FD20004D51A85407699B11F767E0302D400D52006407699B11F767E031E9202520660C0
:206FF200200603D400D5407699B1AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5C8
:20701200BEC4BE83BE8ABE870300303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC27D
:20703200BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF4229A2
:2070520016561F763300329241962376000126760001321875002128FFFF1029408FC0D377
:2070720069FFA58A4076269540762B95103B4192329682FEAFE2BE03AFE2BE02AFE2BE0127
:20709200AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177602761B76F0FFB9
:2070B2000500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0363
:2070D20030E6000602FE69FF422916561F76330032924196237600012676000132187100EE
:2070F2002128FFFF1029408FC0D369FFA58A407626954076FC95103B4192329682FEAFE256
:20711200BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303B4B
:20713200F1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E274
:20715200BD0103E2BD0203E2BD0330E6000602FE69FF422916561F763300329241962376BF
:207172000001267600013218FD002128FFFF1029408F40D069FFA58A4076269540762B953B
:20719200103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC410
:2071B200BE83BE8ABE870300303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC3DE
:2071D20000E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF4229165615
:2071F2001F7633003292419623760001267600013292322B2128FFFF1029408F40D069FFFB
:20721200A58A407626954076FC95103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE28B
:20723200BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177602762276008F806F12
:20725200A483A4C41F76BE0126DDC51A030027DE261A0C00A483261A3000261AC000261A2C
:20727200000317DD261A000C261A0030261A00C0C61A0300271A0C00271A3000271AC000A7
:20729200271A0003271A000C271A0030271A00C0C51A0300A48328DD171A0C0016DC171A6B
:2072B2003000171AC000171A0003171A000C171A0030171A00C0C51A0300281A0C00281A66
:2072D2003000281AC000281A0003281A000C281A0030281A00C0C41A00C0161AC000161AA5
:2072F2000030161A000C1A7669FF06002276008F806FA4C4A4831F76BE0118DEC61A030040
:2073120019DD181A0C00181A3000181AC000181A0003181A000C181A0030181A00C0C51A2D
:207332000300A48369FF191A0C0014DD15DC191A3000191AC000191A0003191A000C191A8A
:207352000030191A00C0C51A0300141A0C00141A3000141AC000141A0003141A000C141AF7
:207372000030141A00C0C41A0300151A0C00151A3000151AC000151A0003151A000C151AD7
:207392000030151A00C040768AB60600227615D0008F200B1F762C0094CCF8FFA483A4C5E1
:2073B200A4C40150359614DDC518FCFF0CDF3418F7FFA4830DDE341A0400C41A60000EDDB4
:2073D200C41A1C00C41A0300C41A0030C41A000EC41A8001CC1A4000C41A0040C41A0080C5
:2073F200211A0300C71A60002C1A1C002C1A03002C1A00302C1A000E2C1A8001C61A4000A0
:207412002C1A00402C1A00802D1A0300C51A6000A4830FDD2E1A1C0018DC2E1A03002E1A87
:2074320000302E1A000E2E1A8001C51A40002E1A00402E1A00802F1A0300C41A0700381AF9
:2074520038001A7669FF40768AB607F6007769FF0600BD3ABDB2BDAABDA202FE0129A9BF54
:20747200120F58FF5B61A85C7F91A8088000421EA493D6FFA85CA9BF160F6761A85D7F91A8
:20749200A8088000A859A958A593D6FFA85DA493A571A8180001A697A418FF00A518FF00D4
:2074B2007FDCA492A59EA7964D64A90801FF3E62A193A09236FFA859A958420635FF0EF68A
:2074D200A11FA95BA3010AF6A11F2D56A204A32DA03640FF0BF6A11F33FF009B30FF54FF54
:2074F200A20CA39540FFA70801001FF677FF200940FFA70801001FF677FF5AFFA79222655E
:20751200A90801FF1363A9A946FF7F91A85BA95AA625A79596FFA20CA395A9BD120F82FEFC
:20753200BE82BE86BE8BBE8E0600009B57FFA8087FFF5AFFA693F260A8280080AA71AB926F
:20755200ED6F20FF0000EA6F5AFFA493A818000196FFA85CA9A9A8087FFFA81C0080A4CB28
:20757200DD6F58FF5AFF00BE25610129A6920190A958A60640FFA407A71EC793A640046DB9
:20759200A892C7FFA92DA09201520460A8CCFF00A92DAC58A592A0F201DEA092FF90A95863
:2075B200A592408FC0DAC7FF9570A95DA9A9A60FDE66A5920600A71E8076C0DA0A6FA592BB
:2075D2008470FF90A95881DFA592C7FF9670A95DA706F660A59206000052A927FF76FFFFD7
:2075F20000BE3365A9A8013BA681A983A793C592FF90A92FAA71A880009AA740046DB0FF67
:20761200A880056FB0FFA81C01A0A880019C0852F564A9A8013BA681A983A793C592C7FFF9
:20763200A92FAA71A880009AA740046DB0FFA880056FB0FFA81C01A0A880019C0852F56454
:2076520001DEAB92A654CF62A79206001B76F0FF00E2BD0030E6000602FE422916561F76EB
:2076720033003292419623760001267600013292322B2128FFFF102901021F767D03180A18
:207692001F768001061E1F763300211A0001103B419282FE329680E2BE00303BF1FF17762C
:2076B20002761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2C9
:2076D200BD0203E2BD0330E6000602FE69FF422916561F7633003292419623760001267640
:2076F20000013292322B2128FFFF1029008F006169FF4076D9A91F76800102020C1E1F766D
:207712003300211A0001103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2DE
:20773200BE00BEC5BEC4BE83BE8ABE870300303BF1FF1776027600021F763000008F000CE1
:207752000119021E1F767803408F100C000228A81F763000062B0119072BE41A1000041AA2
:2077720020001F763000008F080C0A1E1F76300000020119121E1F76300000020E2B0F2BFC
:207792001F76780330A838A02A1E1F763000162B172B1F763000E41A1000E51A10000C1A7F
:2077B20020001F763000141A20001F7678033A1E321E060000E0E45003E2F40188E610005A
:2077D200C48303E2D500C483F52BC483FD2BC483E51A1000C483E51A2000C483E518FFFBC6
:2077F200C483E518FFF7C4830002E51A0040D41E06000129BDB240FFBDAAA98B00D208610F
:20781200100240766FBB01DAA9B2A20FFA66BE86BE8B06001F76C001201A001040768AB6F4
:207832002276008F200BA4C4A4831F762C000ED015DE14DDC618F8FFC51A03003418F7FFD9
:207852003418FBFF94CCBFFF20502E960FDC2ECCE3FF08502E962ECCFCFF01502E962ECC97
:20787200FFDFA91A00102E962ECCFFF7A91A00062E962E187FFEC418BFFF2E18FFBF2E185D
:20789200FF7F2F1A03001A7607F6007769FF0600AD28000469FF1F5616561A5610E6000210
:2078B20040291F76000002291B762276A92800C0A828000001091B61C07600C004290F6FDC
:2078D200009BA92401DF046C0429A82401DFA61EA1F78624A706A1810109A71EA92403632E
:2078F2005CFF043BA95901DF0900ECFF1A76A928FFFFA828FFFF01090E61FF76FFFF066F78
:2079120001DFBDC3A71E673EBEC5A92401DFA82458FFF7604076FBBA407631BB1B76F0FF54
:207932000500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD03DA
:2079520030E6000669FF42291656227601021F76780301563A00008F10DF69FF1F767C0384
:2079720016C5673E1A76AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE833D
:20799200BE8ABE870300303BF1FF17760276BDB2CFE6010008D003E2BD040ED103E2BD05BC
:2079B20003E2BD0603E2BD07AFE2F400AFE2D40510E394040CD012E39C1F0ED118E394DA16
:2079D2000AE3C4A000E3E4C600E7BB0110E700010CD010E7C00003E29C0203E2940008D0B5
:2079F200F406941E03E2F401AFE2BE07AFE2BE06AFE2BE05AFE2BE04BE8B060002290429F6
:207A12005F565AFF42065F56421E00021FF617564200AB06325602292076022904295F561C
:207A32005AFF420656FF421E00021FF6175642003256022920765AFF00021FF617564200B0
:207A5200A9A920765AFF00021FF6175642002076103B1F7633002018FEFF222B242B69FF2B
:207A7200262B282B2A2B2C2B2E2B302B322B342B362B382B232B252B272B292B2B2B2D2B7E
:207A92002F2B312B332B352B372B392B06001F763300201A01002128FFFF102969FF0600A3
:207AB2000000A0E514AD0962A0E51F76740314AD90E5B4560101156F4FE803C092E6010039
:207AD2008CB5050000E7CA00007700E78A000077CFE812F0007700E75100007700E7400038
:207AF200060002FE1F767E031C0AC4E21C00007712E8D01F14AD11641D0A1D921C2B0A5261
:207B120002601D2B1D3457041A96200603610002036F00020119201E82FE0600A928FFFFA0
:207B3200AA28FFFFAB28FFFFA828FFFFAB0F04ED00D400BE0B6FA927A928FFFFA92FA4A949
:207B5200C488A928FFFF0209A98AA69240766BA6060022761F76C00169FF1C1A0800787633
:207B720080001A761F76C401028FE6491CCCFF3F69FFA91A00401C96BF5618E0A9A8407672
:207B92006FBB06000077006F1F767603BDB23EC5A959673E1F767E033EC5A70603ECA192AE
:207BB200673E1F767E033C0603ECA71E673E40762FBBBE8B0600408F8CC2008F000D22761D
:207BD200009A85C4019C805284C2FC641A7669FF0600A697009B0FF6A61F2076A697009B8D
:207BF2000FF6A61FA89220761F7676033CA806001F7676033EA8060006001F7674033C9702
:0C7C12003D9606000119C356FFFF060056
:207C1E00250100008CC27E8B00007E8B00007E8B00007E8B00007E8B00007E8B00007E8B93
:207C3E0000007E8B00007E8B00007E8B00007E8B00007E8B00007E8B00004C8C00003F8C4D
:207C5E000000CF8F0000718B0000E6880000888B0000598C00001C8A0000118A0000068A75
:207C7E000000FB890000F0890000E5890000DA890000CF890000C48900003D8A0000328AF0
:207C9E000000278A0000B48A0000998A0000E68800009089000077890000DC8F0000488AF0
:207CBE000000A9890000DE8D0000A88D0000728D00003C8D0000068D0000D08C0000E688AF
:207CDE000000E6880000F98D0000C38D00008D8D0000578D0000218D0000EB8C0000E688B1
:207CFE000000E6880000A68E00008B8E0000708E0000558E00003A8E00001F8E0000E688E7
:207D1E000000E6880000B58C00009A8C0000E6880000E6880000E6880000E6880000E6884A
:207D3E000000E68800007E8A0000638A0000C98B0000938B0000E48B0000AE8B0000E6883A
:207D5E000000E6880000B48F0000998F00007E8F0000638F0000488F00002D8F0000E6882C
:207D7E000000E68800007F8C0000648C0000E6880000E6880000208B0000CF8A0000E6882E
:207D9E000000E6880000568B0000058B00003B8B0000EA8A0000128F0000DC8E0000F78E1C
:207DBE000000C18E0000E6880000E6880000E6880000E6880000E6880000E6880000E68854
:207DDE000000E6880000E6880000E6880000E6880000E6880000E6880000E6880000E68815
:207DFE000000E68800005C89000041890000268900000B890000F0880000E6880000FF8B95
:207E1E0000001A8C00002C012C01000000000F00160014000A003C000000000000000000C5
:207E3E000000000000000A00080006000800060008000000000000000000000000000000F6
:107E5E000000000000000000000033000B000A00CC
:207E6E0048000000B2C3F4A4000081A50000E2A4000071A50000D5A4000063A50000C8A4F0
:207E8E0000004CA50000AEA400003CA50000A1A4000032A5000085A4000025A5000078A485
:207EAE00000017A500006BA400000BA5000055A4000040A40000949900002A9A0000269AAB
:207ECE0000001C9A0000989900009B9900009F990000A4990000A9990000AF990000B3992E
:187EEE000000B7990000009A0000209A0000BA9900002C9A00000000BF
:20040000803FF0FFB0DA00003F0006005B004F0066006D007D0007007F006F004000000030
:200420000000000079000000FFFF37DE00000600FFFF39DE00000000FFFF3ADE00000000FF
:20044000FEFF3EDE000000000000FFFFC2DE00000000FFFFC3DE00000000FFFFC4DE0000A6
:200460000100FFFFC5DE00000000FFFFF4DE00000000FFFFF5DE00000000FFFFF6DE000067
:200480000000FEFF28DF000055B30000FEFF2ADF000055B30000FEFF2CDF0000000000003A
:2004A000FEFF2EDF000000000000FFFFE0DE00000000FFFFE1DE00000000FBFF1EDF0000C2
:2004C00008000C00100000000400FFFF23DF00000A00FFFF24DF00000100FFFF3EDD0000CF
:2004E0000100FFFF3FDD00000100FEFF34DF000000000000FEFF36DF000000000000FFFFC0
:2005000000D000000100FFFFC0DD00000000FFFF41DC00000000FFFF27DF00000000000050
:020520000000D9
:200522005F330000008002FEA4C5A988013B008FC0DBC7924196A9A8A681A71E1F76710331
:20054200C7CC00E041CA4296C7FF01900B9842CCFFFDA98803564201A91CFF03A9180002E8
:20056200A6CA429682FEC796060010E70B0001E8EAFA20E740000DE8BA9E6FE819F000E7A4
:20058200100000E7490000E70000007710E740004076A0B202E8010250E80000407679AF79
:2005A2000600A71EA59243880860C4930461C40BA6920C6F009A0A6FC427AA2BA706AB0F8C
:2005C2000362019A036FC40AA69206001F767A03BDB22D92BDAA03E2BD04586179D1808D3E
:2005E200C0DB78D0013B9A92929EA985A9BD120F007700770077007789E604000077CFE64E
:20060200210002E80818407679AF1F76710303E21E0002E8101CCFE621000FE830334076C7
:2006220079AF7AD11F76710378D0013B008FC0DB03E220009A92949EA985A9BD120F0077FF
:2006420000770077007789E6010002E80818407679AF7BD11F76710379D0013B008FC0DBD7
:2006620003E222009A92949EA985A9BD120F007700770077007789E6010002E80818407652
:2006820079AF1F76710303E224001F767A032C922F617AD1808DC0DB78D0013B9A92929EEB
:2006A200A985A9BD120F007700770077007789E6010002E84016407679AF7BD11F767103C4
:2006C20079D0013B03E222009A92929EA985A9BD120F007700770077007789E6010002E845
:2006E2004016407679AF1F76710303E2240000D1008FC0DB013BA9A8A181A98A74D0C8E2E7
:200702009400008F80DEA9A8A181A98AC4920252046002E8D123056F02E8E1300AE8010062
:20072200407679AF013B008F98DE0356A1010156A40001D9A192045203E2C400DA64AFE2C7
:20074200BE04BE86BE8B0600BDB2BDAA04FE0052A92DA85A06601F7671030B920B2B0C965C
:20076200008FC0DB013BA9A8AC81A98AC44F076CAC921F7671030654E4FFB401008F21DD14
:20078200A9A8AC81A9837FD0008FC0DB944CC4E2C500EDFF9E01A9A8AC81A98AC44D3F6CF1
:2007A200AC921F76710306543A6300B6A79200BEA985013BA98E008F80DEA9A8AC81A98314
:2007C200A9A8A681A98AC592C4541460008FC0DBA9A8A681A98A1F7671031392C4CE0A600A
:2007E200008F21DDA9A8A681A98A01DFA93AC40DA98E01DEA6921852DF64A7920761A98561
:20080200421EA93AC0004EB2A98EA93AA9BD120F007700770077007789E60000AC921F7614
:200822007103079EA959A2922561008F80DE013BA9A8AC81A98AC4920A521A60AC92069EF9
:20084200A988008F08DFA9A8A681A98AC8E2C401008F00DFA9A8A681A98A01E860EE0EE88F
:20086200686600E74000C492036106E84016A29256601F767A032C9252617FD0008FC0DB9D
:20088200949316D0D3FF9492C1FFA8CAA940246C1F767B03240620601F767A032B920552C3
:2008A2000C6002E849280CE8010094E6080014AD0465A1920250A959A1920E64A9A8013B15
:2008C200A181A98A8CE6000078D013E2940040765380EFFF1401AC921F7671030654E3FF6F
:2008E2000E01A1400F6C79D0C8E29401007720E74000AFE2240300E71800007790E8007629
:200902000E6F78D0C8E29401007720E74000AFE2220300E71800007790E800761F767A03E7
:200922002D925261A192E3FFAF001F767A032B9202521F61AC400F6C79D0008FC0DBC8E258
:2009420094011F76710320E74000AFE2240300E718003A6F78D0008FC0DBC8E294011F760A
:20096200710320E74000AFE2220300E718002C6F08BEAC92A672008FC0DB013BA9A8A68170
:20098200A983807621DDA606AC81A71E18D0C7929596AC9206520D6378D0C8E294011F7609
:2009A200710320E74000AFE21E0300E718000C6F78D0C8E294011F76710320E74000AFE2E6
:2009C200200300E7180016D0008FC0DB26E8000D94937FD0D0FF949232E8401AC9FFA8CAAF
:2009E200A940036C02E8001150E80148A9A8013B8CE60000AC818CE60900A98318D01F76D1
:200A02007B03A6BF120F13E29501432B24063460A9A8AC81A98AC493A84E2E6DA61BECFFD4
:200A22002565A692C852226330D09592FB9CA6540363A845146D008FC0DBA9A8AC81A98AEC
:200A420030D0A69294540B6248D0945415651F767103431A10000B1A08000E6F1F76710364
:200A6200431A20010B1A0400076F1F767103431A01000B1A1000AD5CAC9283DCA45C40765F
:200A820000803C6F1F767B03240616601235008F00D90156A400407617B2013B008FC0DBE7
:200AA200A9A8A181A98A8CE6000078D013E2940040765380236F1235C07640D70156A7009E
:200AC200008F00D90156A40011F68424176FA9A8AC81A98A8CE6000018D013E294000E6F6B
:200AE200008FC0DBA9A8AC81A983A9A8AC81A98AC52B18D0C51A0080942B84FEBE86BE8B6A
:200B02000600BDB2BDAABDA202FE0052A95A06601F7671030B920B2B0C96008FC0DB013BF9
:200B2200A9A8A281A61EC64FEDFFC700408F21DDA9A0A281A9837FD0944CC4E2C500EDFFC8
:200B4200B300408F80DEA9A0A281A9830356C501408F98DE0156A500AFE2C50100E740003D
:200B6200A9A88CE60000A281A98AA1BF120F18D01F767B039479422B2406E0FF8E00C64EB9
:200B8200EDFF8B00A29207525C610356A201A95B1F767A034218FFFB008D01DDA32D3806B3
:200BA200412B22560190A95DA93AA381A98A20FFE80340763E80013B019B019089FFA395D7
:200BC2004298A82D4218FFF73806412B22560190A95DA93AAC81A98A20FFE80340763E809A
:200BE20001908AFF4298A29206522B60029A4218FFEFA394A92D013B3806412B2256019008
:200C0200A95DA93AAC81A98A20FFE80340763E80013B039B0190A3958BFF4298A82D4218D5
:200C2200FFDF38062256412B0190A95DA93AAC81A98A20FFE80340763E8001908CFF429864
:200C42004292C0FF42CDBFFF42CA008FC0DB013BC0FF42CAC0FF42CAC3FF4090A8CA42964E
:200C6200A9A8A281A98348D0A19295540F63408F1EDEA9A0A281A983421A0800A9A8C581CE
:200C8200A98AC492089084FF4298429205611F7671030B1A0200AD5CA29282DCA45C407619
:200CA2000080156FA9A8A281A98A8CE6000018D013E294000C6FA9A8A281A983A9A8A28115
:200CC200A98AC52B18D0C51A0080942B82FEBE82BE86BE8B060000BE013B008FC0DBA9A821
:200CE200A681A98A01DE18D0A692C41800E01852942BF46400BE013B008FC0DB408F10DF7A
:200D0200A9A8A681A98A0356A6010156A50070D0C8E294001F767A0303E2C5002B920652DB
:200D22001760408F80DEA9A0A681A983C59203520F60A640056D18D094288601096F008FCC
:200D4200C0DBA9A8A681A98A18D09428300201DEA6920452D2642B9201521060008FC0DB28
:200D62001F767103A9A80881A98AC41A0040CC1A0040D41A0040DC1A00401F767A032B92E4
:200D820006520760008FC0DBC41A0040CC1A00404076538006001F767A032A92A9931F76F6
:200DA2007103BDB2FF9D052B062B072B01531C69A993FD9D015311690752086109521A600B
:200DC200BF56060FBF56070D156FBF560508BF560608BF5607080E6FBF560507BF56060E0A
:200DE200BF56070E076FBF56050ABF560614BF5607141F767A033192AC2B013BC07668DC6C
:200E02001F76710306940896008F80DEA9A8AC81A98AC42B008F1EDEA9A8AC81A98A408FF7
:200E220040D71235C4210156A500008F00D90156A400AC92019C11F68524A92D185211F63C
:200E42008424E3641F767A032E9225611F7671030692AC2B20651F767A032D920961008F82
:200E620080DE013BA9A8AC81A98ABF56C4091F767A032C920961008F80DE013BA9A8AC8162
:200E8200A98ABF56C408AC921F767103019CA92D0654E2641F767A033192AC2B1565013B80
:200EA2001F7671030688AC92A672008F80DEA9A8A681A98A1F767A03AC92019CBF56C40ADB
:200EC200A92D3154EE641F767A032F9236611F767103AC2B013BBF5612C80892AC94A988E3
:200EE200008F80DEA9A8A681A98A408F10DFBF56C403008F1EDEA9A8A681A98AAC9201F059
:200F02000894C4960356AC01008FC0DB0156A500A9A8AC81A98A70D01235C8E29400008FA8
:200F220040DD0156A40003E2C500AC92019CA92D11F684240452D2641F767A032B920652DA
:200F42000B601F767103008F80DE12282C01BF56DC02BF56D4021F767A032A92095234602C
:200F6200008F80DE408F1EDEC42BBF56C50108D0BF56CC010ED1CD2BBF56D404BF56D50382
:200F8200BF56DC04BF56DD02BF56E404BF56E505BF56EC04BF56ED04BF56F406BF56FC053A
:200FA200BF56940609D0BF5694070AD0BF5694060BD0BF5694060CD0BF5694060DD0BF5667
:200FC2009408BF569C081F7671030002132B0D28F915BF560E120F28F22B10283E49AC2B0F
:200FE200013B90E5131A01E01F767A03381E008FBADEA9A8AC81A98AC42B008F18DFA9A82A
:20100200AC81A98A0356AC01C42B008FE8DE0156A400AC92019CA92D03E2C4000652E8642B
:20102200AC2B013B00BE0356AC01008F04D70156A400AC92019CC4C2A92D1C52F564AC2B9D
:20104200013B008F01DDA9A8AC81A98AAC92019CC42BA92D2052F664AC2B013B008F00DF47
:20106200A9A8AC81A98AC42B008F08DFA9A8AC81A98AAC92019CC42BA92D0852F064BE8B10
:2010820006001F767A032F921F7671030880026104DF00D5013B00D40356A5038076F0D8FA
:2010A200A4810156A60001DCA492C62B0852F56401DDA5920252F0641F767A032B92045273
:2010C2007761A79200D52D65013BA592A2FF008FF0D8CBFFA594A3FFA927A9A8AB81A61E75
:2010E2000356AB04A92D019BA592ACEA189A67FFA594C699A988A2FFCBFFA594189CA3FFCC
:20110200A92701DDA9A8AB81A98A0356AB04A92DA692ACEA019A66FFC498A792A554D662FD
:2011220000D5013B008FF0D803BEA9A8A581A71EA592A672A9A8A681A98A08D001DDC7923F
:201142009496A5920352EF641F767A032B92008FF8D802520460A9280003036FA928000F78
:20116200FC981F767A032F920961408FF0D8A58A0FDCC41AFF00F51A003F1F767A033192EB
:2011820005611F766303361A08001F767A032B9206521460408FF0D8A58A08DCFC1A300009
:2011A200EC1A0300FD1A00E0CD1A0030076F008FF8D8C41A0F00F41AFC01008FF0D8A483CB
:2011C20008DC01DDC51A0100F41A0700FC1A00E00600BDB2BDAABDA203E2BD0403E2BD05D8
:2011E20003E2BD060AFE1F767A0344962B9206520860449206601F7671030B920B2B0C961A
:201202001F7671030892008F1EDE013B4494A988A9A84481A98A808DC0DBC4924696449260
:2012220001F0019047964492A0FFA92D499603354896049AAC94A95BA9AAA681A98A457EBB
:20124200C44FEDFF4002008F3CD7A9A84481A98A64BE4492A672C4E2C404A9AAA681A98A35
:201262008CE62000408D10DF13E2C40044920356A9010156A10002E891340BE801E0AFE280
:20128200C10020E72000407679AF442D008F40DD1235AFE2C10110E740000156A40003E2B8
:2012A200C100407617B21F767B038CE60000AC281F0026C4013B1F767B038DE60000A6061C
:2012C2002256A60740FF240F0965A9AA4481A98A8CE6000070D013E294004492408F98DE66
:2012E200008FC0DB0356A901A71E0156A500A9A84481A98A70D0C8E29400408DE8DE21E3A0
:20130200C501A70600E70C000156A10000E72101AFE2C10620E7880102E8512B0BE8010022
:20132200407679AFAFE2C10110E74000007703E2C1004076A0B2013B008F18DF8CE60000EA
:20134200A9A84481A98A13E2C4004792E0FFA4001F767103CFE62000AFE22601407622803F
:20136200452D008F00D912350156A400407617B24588008F80DE013BA9A8A681A98ACFE67A
:201382000600C4920352066012E8060D14AD026396E5008F80DEA9A8A681A98AC492025244
:2013A200066012E8B61414AD026396E501E8A9FDCFE6300008E89927407679AF1F767B034B
:2013C200CFE6050024061660008FC0DB4588013BA9A88CE6300018D0A681A98381DEA9A8A0
:2013E200A681A98A13E295008CE62B0018D013E294031F767103013BAFE62400408DE8DE65
:20140200AFE226000356A30120E720000156A10000E70100AFE2C10020E7080002E8512B48
:201422000BE80100407679AFAFE2C10110E74000007703E2C1004076A0B2013B408F18DF27
:201442008CE60000A9A0A381A61EABBF120F68B6C63F4892A772008FC0DBA9A8A781A61EDF
:20146200A9A04681A71EAA286900C792C696A9A04481A71E4892AA72A9A8AA81A61EAA28CA
:201482006A00C792C6964892AA72A9A8AA81A98AC43F0C6F1F767A032B9201520360AFE6EE
:2014A20024001F76710303E22604008F18DFA9A84481A983A9A84681A98AC8E2C504C8E2BE
:2014C200C400008F18DFA9A8A381A98A96E604001F767B03C8E2C4002406432B96E60400FF
:2014E200E0FFEA00008FC0DBA9A84581A98AC4CC0040CDFFA959008F18DFA9A84481A98A40
:20150200C8E2C400CFE6210020E72000407679AF01E8C9F400D50CE8D1CC94E6080014AD31
:201522000B651F767103C8E21200007794E6040014AD026501D5008FBADE013B1F76710315
:20154200A9A84481412BA98A0F0E40763E8000520D61009BA1920260019B0356A8084393D8
:201562000451A818FFFEA8CA4396008F18DF013BA9A8A381A98AC8E2C400CFE6210020E757
:201582002000407679AF01E8C9F400D50CE8D1CC94E6080014AD0B651F767103C8E21200C7
:2015A200007794E6040014AD026501D5008FBADE013B1F767103A9A8412BA381A98A0F0E99
:2015C20040763E8000520D61009BA1920260019B0356A80843930451A818FFFEA8CA4396CD
:2015E2001F767A032B9206526660479264604588008FC0DB013BA9A8A681A98A30D0C8E2D7
:201602009400007794E6050014AD0D65009BA1920260019B0356A80843932051A818FFFE32
:20162200A8CA4396008F80DEA9A8A681A98AC49203522860008FC0DBA9A8A681A98A48D0A5
:20164200412BC8E2940000D594E6050014AD026301D5008F36DF1F767103A9A84981A98A93
:201662000F0E40763E8000520D61009BA1920260019B0356A80843930851A818FFFEA8CAE4
:2016820043964588008F80DE013BA9A8A681A98AC49202521060008FC0DBA9A8A681A98ADF
:2016A20048D0C8E29400007794E6050014AD0365431A1000AD5C459283DCA45C40760080D1
:2016C2000E6F008FC0DBA9A8A681A983A9A8A681A98AC52B18D0C51A0080942B8AFEAFE203
:2016E200BE06AFE2BE05AFE2BE04BE82BE86BE8B06001B76F0FF00E2BD0030E60006422904
:2017020016562576006F1B76F0FF00E2BD0030E6000602FE422916561F76330038924196D6
:2017220023760008267600003892382B2128FFFF1029103B419238962576006F1B76F0FF47
:2017420000E2BD0030E6000602FE422916561F7633003892419623760008267600003818FF
:2017620090002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000602FE26
:20178200422916561F763300389241962376000826760000381890002128FFFF1029103B1F
:2017A200419238962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003892D8
:2017C2004196237600082676000038189C002128FFFF1029103B419238962576006F1B7600
:2017E200F0FF00E2BD0030E6000602FE422916561F763300389241962376000826760000C0
:2018020038189E002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000627
:2018220002FE422916561F7633002292419623760101221868002128FFFF1029103B4192A1
:2018420022962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300229241965F
:20186200237601012292222B2128FFFF1029103B419222962576006F1B76F0FF00E2BD004B
:2018820030E6000602FE422916561F763300229241962376010026760101221878002128CD
:2018A200FFFF1029103B419222962576006F1B76F0FF00E2BD0030E60006422916561029C4
:2018C2002576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E245
:2018E200BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000642291656E1
:2019020010292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0FFAD
:2019220000E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000642292A
:20194200165610292576006F1B76F0FF00E2BD0030E600064229165610292576006F1B76F0
:20196200F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E6000666
:201982004229165610292576006F1B76F0FF00E2BD0030E600064229165610292576006FD6
:2019A2001B76F0FF00E2BD0030E600064229165610292576006F1B76F0FF00E2BD0030E69B
:2019C200000602FE422916561F7633002292419623760100267601012292222B2128FFFF55
:2019E2001029103B419222962576006F1B76F0FF00E2BD0030E6000602FE422916561F7625
:201A020033002C92419623762000267639012C922C2B2128FFFF1029103B41922C9625765D
:201A2200006F1B76F0FF00E2BD0030E6000602FE422916561F7633002C924196237620000D
:201A4200267639012C1832002128FFFF1029103B41922C962576006F1B76F0FF00E2BD00AF
:201A620030E6000602FE422916561F7633002292419623760100267601012218F80021286B
:201A8200FFFF1029103B419222962576006F1B76F0FF00E2BD0030E6000602FE422916561B
:201AA2001F7633002292419623760100267601012218FA002128FFFF1029103B419222960F
:201AC2002576006F1B76F0FF00E2BD0030E6000602FE422916561F763300309241962376EE
:201AE200800026760000301803002128FFFF1029103B419230962576006F1B76F0FF00E2AD
:201B0200BD0030E6000602FE422916561F76330032924196237600012676000132187500BA
:201B22002128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FE42298D
:201B420016561F7633003292419623760001267600013218FD002128FFFF1029103B419298
:201B620032962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300309241961E
:201B820023768000267600002C1823002128FFFF1029103B419230962576006F1B76F0FF39
:201BA20000E2BD0030E6000602FE422916561F7633003292419623760001267600013218AD
:201BC20071002128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E6000602FEE7
:201BE200422916561F7633003292419623760001267600013292322B2128FFFF1029103B86
:201C0200419232962576006F1B76F0FF00E2BD0030E6000642291656237639011029257664
:201C2200006F1B76F0FF00E2BD0030E60006422916562576006F1B76F0FF00E2BD0030E6E2
:201C420000064229165610292576006F1B76F0FF00E2BD0030E6000602FE422916561F76BB
:201C620033002C92419623762000267639012C1837002128FFFF1029103B41922C96257695
:201C8200006F1B76F0FF00E2BD0030E6000602FE422916561F7633002C92419623762000AB
:201CA200267639012C922C2B2128FFFF1029103B41922C962576006F1B76F0FF00E2BD00AE
:201CC20030E6000602FE422916561F7633002C92419623762000267639012C183300212863
:201CE200FFFF1029103B41922C962576006F1B76F0FF00E2BD0030E6000602FE42291656AF
:201D02001F7633002C92419623762000267639012C1822002128FFFF1029103B41922C960F
:201D22002576006F1B76F0FF00E2BD0030E6000602FE422916561F76330038924196237683
:201D420000082676000038189F002128FFFF1029103B419238962576006F1B76F0FF00E216
:201D6200BD0030E6000602FE422916561F7633003892419623760008267600003892382BDE
:201D82002128FFFF1029103B419238962576006F1B76F0FF00E2BD0030E6000642291656B9
:201DA2002576006F1B76F0FF00E2BD0030E60006422916562376390110292576006F1B765E
:201DC200F0FF00E2BD0030E60006422916562376391110292576006F1B76F0FF00E2BD003B
:201DE20030E600064229165610292576006F1B76F0FF00E2BD0030E6000602FE4229165699
:201E02001F763300309241962376800026760000301801002128FFFF1029103B41923096FD
:201E22002576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003092419623768A
:201E42008000267600002C922C2B2128FFFF1029103B419230962576006F1B76F0FF00E27F
:201E6200BD0030E6000602FE422916561F7633002A92419623761000267610012A922A2BEE
:201E82002128FFFF1029103B41922A962576006F1B76F0FF00E2BD0030E6000602FE422932
:201EA20016561F7633002A92419623761000267610012A1802002128FFFF1029103B419221
:201EC2002A962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330024924196CF
:201EE200237602002676000024181F002128FFFF1029103B419224962576006F1B76F0FF6C
:201F020000E2BD0030E6000602FE422916561F763300269241962376040026763D012692A7
:201F2200262B2128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000602FEAF
:201F4200422916561F76330024924196237602002676000024180F002128FFFF1029103B06
:201F6200419224962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300269236
:201F820041962376040026763D01261826002128FFFF1029103B419226962576006F1B7698
:201FA200F0FF00E2BD0030E6000602FE422916561F76330024924196237602002676000012
:201FC2002492242B2128FFFF1029103B419224962576006F1B76F0FF00E2BD0030E600065D
:201FE20002FE422916561F763300269241962376040026763D01261826002128FFFF102956
:20200200103B419226962576006F1B76F0FF00E2BD0030E6000602FE422916561F76330000
:20202200249241962376020026760000241808002128FFFF1029103B419224962576006F34
:202042001B76F0FF00E2BD0030E6000602FE422916561F76330026924196237604002676DC
:202062003D012692262B2128FFFF1029103B419226962576006F1B76F0FF00E2BD0030E67E
:20208200000602FE422916561F76330024924196237602002676000024180C002128FFFF46
:2020A2001029103B419224962576006F1B76F0FF00E2BD0030E6000602FE422916561F765C
:2020C2003300269241962376040026763D012692262B2128FFFF1029103B419226962576C7
:2020E200006F1B76F0FF00E2BD0030E6000602FE422916561F76330024924196237602006D
:202102002676000024180E002128FFFF1029103B419224962576006F1B76F0FF00E2BD0056
:2021220030E6000602FE422916561F763300269241962376040026763D0126183E00212817
:20214200FFFF1029103B419226962576006F1B76F0FF00E2BD0030E6000642291656102917
:202162002576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002892419623764F
:2021820008002676080128180F002128FFFF1029103B419228962576006F1B76F0FF00E279
:2021A200BD0030E6000602FE422916561F76330028924196237608002676080128180F007F
:2021C2002128FFFF1029103B419228962576006F1B76F0FF00E2BD0030E6000602FE4229F1
:2021E20016561F763300289241962376080026760801281803002128FFFF1029103B4192F1
:2022020028962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633002892419689
:202222002376080026760801281803002128FFFF1029103B419228962576006F1B76F0FF2D
:2022420000E2BD0030E6000602FE422916561F7633002A924196237608002676080128928F
:20226200282B2128FFFF1029103B419228962576006F1B76F0FF00E2BD0030E6000602FE68
:20228200422916561F763300289241962376080026760801281802002128FFFF1029103BB9
:2022A200419228962576006F1B76F0FF00E2BD0030E6000602FE422916561F7633003292E3
:2022C20041962376000126760001321875002128FFFF1029103B419232962576006F1B762E
:2022E200F0FF00E2BD0030E6000602FE422916561F763300329241962376000126760001C1
:202302003292322B2128FFFF1029103B419232962576006F1B76F0FF00E2BD0030E60006EF
:2023220002FE422916561F763300329241962376000126760001321831002128FFFF10292F
:20234200103B419232962576006F1B76F0FF00E2BD0030E6000602FE422916561F763300B1
:202362003292419623760001267600013292322B2128FFFF1029103B419232962576006FF8
:202382001B76F0FF00E2BD0030E6000602FE422916561F7633002E92419623764000267655
:2023A20000002E922E2B2128FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E661
:2023C200000602FE422916561F7633002E92419623764000267600002E1828002128FFFF95
:2023E2001029103B41922E962576006F1B76F0FF00E2BD0030E6000602FE422916561F760F
:2024020033002E92419623764000267600002E1820002128FFFF1029103B41922E96257618
:20242200006F1B76F0FF00E2BD0030E6000602FE422916561F7633002E92419623764000E1
:20244200267600002E1838002128FFFF1029103B41922E962576006F1B76F0FF00E2BD00D5
:2024620030E6000602FE422916561F7633002E92419623764000267600002E1838002128CC
:20248200FFFF1029103B41922E962576006F1B76F0FF00E2BD0030E6000602FE4229165605
:2024A2001F7633002E92419623764000267600002E183E002128FFFF1029103B41922E9660
:2024C2002576006F1B76F0FF00E2BD0030E60006422916562376390110292576006F1B7637
:2024E200F0FF00E2BD0030E6000602FE422916561F763300229241962376010026760101CE
:20250200221848002128FFFF1029103B419222962576006F22761F767A0316D0008F806FC9
:20252200349294CDFCFF03901F76BE0118D0A8CA16961F767A03359294CDFCFF03901F762D
:20254200BE011AD0A8CA18961F767A033692019094CDFEFF1F76BE01A8CA1BD01A961F76F1
:202562007A03379201901F76BE0194CDFEFFA8CA1B961A7669FF060016D0008F806F1F76B6
:202582007A039492039018D03496949203901AD03596949201901BD03696949201903796F1
:2025A20022761F76BE011618FCFF1818FCFF1A1A01001B1A01001A7669FF0600A9881F76AA
:2025C2007A032B9200D4003102521860A640036D008F0008A641056DA9A8A91A0002A98A5F
:2025E200A642046DA9A88050A98AA643046DA9A80850A98A1F76BF0102A81F767A032B9228
:2026020003524960A69205601F76BF01041A0008015205601F76BF01041A000202520560BC
:202622001F76BF01041A8000035205601F76BF01041A0800045205601F76BF01041A020040
:20264200055205601F76BF01041A0001065205601F76BF01041A4000075205601F76BF01C5
:20266200041A0100085205601F76BF01051A0008095205601F76BF01051A00010A52056008
:202682001F76BF010D1A20000B5205601F76BF010D1A04001F767A032B9201521F60A640D3
:2026A200056DA9A8A81A0008A98AA641056DA9A8A81A0001A98AA642056DA9A8A81A000249
:2026C200A98AA643036DAA1A0200A644036DAA1A10001F76BF0104A80CA906001F767A03AA
:2026E2002B9202520660008F880A1F76BF0104A8015209602FFF00161F76BF01128F000049
:20270200021E0AA81F767A032B9203520B60A928CB0BA82800091F76BF01248F0000021EAE
:202722000AA8060022761F76BE01408F806F061800000F8F00F0A5C4071800FF08183F00A3
:20274200091800FF1BDD0BDE1606A918C0FF161EA9A818C0A89219C0C618EFFF0B18DFFF9D
:202762000B18BFFFC518F7FF1A76008FC06F1F767A03BF562A0109D0CC92C4FF01F0019087
:202782002A721F76BF010192C3FF1F767A0301F0019080FF2A721F76BF010192C5FF1F7601
:2027A2007A0301F0019081FF2A729492C2FF01F0019082FF2A942A96035203610452036022
:2027C200BF562B010152036102520360BF562B030552036106520360BF562B06075203608D
:2027E200BF562B0208520360BF562B04095213612B920152036106520360BF562F010252FD
:20280200036103520360BF562D010152066105520461056FBF562B05BF562C012B920152D6
:20282200036103520360BF562E0202520360BF562E01045217610152BF5630010360BF565B
:20284200310203520A610152086106520B601F76BF01021A80000A6F1F76BF010B1A001010
:20286200056F1F76BF010D1A001006520E6103520961015204610D1A0080096F0B1A008054
:20288200066F0B1A0040036F021A800006520B6104520961025204610B1A0004066F0B1A4E
:2028A2000040036F021A000206520661045204610B1A0020036F021A0800227604520A6297
:2028C20004522461015240610252346103522661446F0552116106524060088F8A021F7636
:2028E200BE01059AA82801FC0AA81A1E1F76BF01021A0800326F088F00001F76BE01049A1E
:20290200A82801BC0AA81A1E286F088F49031F76BE0105020AA81A1E206FA928CB0BA82879
:2029220008091F76BE010A1E059AA828257C1A1E146F088F8A0B1F76BE01059AA82801F855
:202942000AA81A1E0A6F2FFF10161F76BE010A1E059AA82813BC1A1E1A7669FF0600BDB25F
:20296200BDAABDA202FE1F767A032B9200D200D3025232601F76BF0116D0008FC0DB099235
:20298200C1FF94CDFEFF01F016D116D00190A8CAA9CDFDFF949616D0099203F01F766F033F
:2029A2000290A8CA9C9600CDFFF39492039089FFA8CA00961F76BF010040036C0102A986A1
:2029C2000042026C02DA004A026C04DA0044026C08DA10D0947A1F767A032B92015231609E
:2029E200408DC0DBA18A1F76BF01A183012916DCC418FDFF16DD0992C3FFA18A03F00290D5
:202A0200C59816DCC418FBFF0992412B008FB2DEC1FF01F00190A95D20FFFFFF40763E8090
:202A22000356A902A18A1F766F0316D0079016DCC49800CDFFE79192069089FFA8CA009697
:202A42001F767A032B9204525B60408DC0DBA18A1F76BF0116DCC418FEFF01CC0004C9FF48
:202A6200412BA95D008FB2DE20FFE80340763E8016D91F76BF010190C198014B026C01DA82
:202A82000148026C02DA0945026C04DA0942026C08DA014A026C10DA0147026C20DA0944CC
:202AA200026C40DA0044046CA9AA8009A9860149056CA9AA18FF0100A9860941056CA9AA6A
:202AC20019FF0100A986004B056CA9AA1AFF0100A9860045056CA9AA1BFF0100A9860940B8
:202AE200056CA9AA1CFF0100A986004A056CA9AA1DFF0100A98610D0008FC0DB947A1F76BE
:202B02007A032B92065210601F76BF010046026D01DA0048026D02DA004B026D04DA10D0C1
:202B2200008FC0DB947A1F767A032B920552E0FF89001F76BF010945036D01DA026F10DB83
:202B42000944036D02DA026F40DB0042036D04DA056FA9A21CFF0100A9820044036D08DA22
:202B6200056FA9A21DFF0100A9820046036D10DA056FA9A21EFF0100A9820040036D20DAFA
:202B8200056FA9A21FFF0100A9820048036D40DA056FA9A21FFF0200A982004A056DA9AA3F
:202BA2008009A986056FA9A21FFF0400A9820043066DA9AA18FF0100A986056FA9A21FFF22
:202BC2000800A9820045066DA9AA19FF0100A986056FA9A21FFF1000A9820047066DA9AA48
:202BE2001AFF0100A986056FA9A21FFF2000A9820041066DA9AA1BFF0100A986056FA9A252
:202C02001FFF4000A982004B066DA9AA1CFF0100A986056FA9A21FFF8000A9820049066D89
:202C2200A9AA1DFF0100A986056FA9A21FFF0001A9821F767A0310D0008FC0DB38A2947AE6
:202C4200008FC06FCC92013B1F76BF01C4FF01F0019009D0A985A9860192C3FF01F0019073
:202C620080FFA9850156A2000192C5FF01F0019081FFA9850156A2009492C2FF01F00190C3
:202C820082FFA9850156A20017D0008FC0DB82FE947ABE82BE86BE8B060006000052A88890
:202CA200C48A096509520763FF9CC4CDF8FF0790A8CAC496A69245520D614E5208614F5224
:202CC2000D60C41A2000C418BFFF086FC418DFFF056FC41A2000C41A4000A592015203603F
:202CE200C4187FFF02520360C41A8000C418EFFFC418F7FF0600BDB200D5013B008FC0DD15
:202D0200A9A8A581A98AC47D01DDA5924652F76433D1008FC0DD34D0BF569C0CBF56940C18
:202D22001F76400335D03BD1BF56940836D0BF56940937D0BF56941038D0BF56940839D0BD
:202D4200BF56940C3AD0BF56940C3DD0BF569C053CD10092FE9C949641D00092FF9C94966F
:202D62003ED0BF56940810D0BF56DC08BF56E465BF56F408BF56940DBF56EC1BBF569C12B5
:202D8200BE8B0600A9BD120F00770077BDB21F7671038BE60100A48B50E8094088E23C002D
:202DA200407679AF88E6000000770077A9BF120FC18AA993B7FFFF91D497C18AFF90DC96CA
:202DC200BE8B06000852A927A4C50960089A01D54E9B4076BB93008D3B03972BAB9209521C
:202DE2000B60089AA78A01D54E9B4076BB93008D3B03BF5697010600A71EBDB2A492BDAA81
:202E02000152BDA22A60008F5070C08D40D01F76410300A822761F76BE01408F28AE09CDE0
:202E2200FFF7A81A0004008FE3AD099709CDFFFD1F763700A81A000100A01F76BE01099720
:202E42001F76370002A81F763300321A0100321A0200237600011A7602523360008F507730
:202E6200C08DC0D31F764F0300A82276408F806F1F76BE01FDCDFFEF80769EADA58AA81A4D
:202E82000020079716DD07CDFF3F1ADCA81A008007971F763700C518CFFF408F59ADC41A6D
:202EA200040004C21F763300321A04001F76370006A01F763300321A0800237600011A7676
:202EC200D396A38A01D54E9B69FF089AC3864076BB93A2C4A2830BD0A28A0CDE0CDDC61AFF
:202EE20000400ADCC518FFDFCA18BFFFCA18DFFFCA18F7FFCA18FBFFCA1A0200CA1A010010
:202F0200C418FFBF92CCE0FF0BD0015092964076E893A38AA70640762F94D39202520560E2
:202F22001F76BF01081A0400C38A099ABF56E402A38A40764F94408D33030CD0932BA28A9A
:202F4200008D9E01932B9B2B0BDCC41A4000CA1A2000BE82BE86BE8B06001F764103BF56F5
:202F620002011F764F03BF5602021F764003009606000002008D4203941E0600BDB2BDAA76
:202F8200A486008D3A0392923660A9AA13FF6700A98A008D360301020156C4009206008D79
:202FA2003803920F0466C28ABF56E40208D092C5A7C408D0090201DE92C2C207A98A008D49
:202FC2003603C792C4969206008D3803920F4966C28AE446FE6CA28A099A40764F94D292A7
:202FE200025205601F76BF01081A0400008D9E01922B376F008D3803928A408D3803A492EA
:20300200008D36030190A98801DC9AA89206008D3803920F0466C28ABF56E402A6920B60B2
:2030220008D092830902C207A98AC592A7FFFF90C4960D6F08D09283A5C408D0090201DE20
:2030420092C2C207A98AC592FF90C496008D36039206008D3803920F0466C28AE446FE6CCD
:203062001F763300211A0001BE86BE8B0600BDB200BEACA0BDAAA486BDA2A98201DEA61B83
:203082003075FD69D292025205601F76BF010818FBFF00BE01DEA61B1027FD69408D360396
:2030A200A9AB08D09AA20109921E008D3A03922BC28AE446FE6CA28A089A40764F9401BE5F
:2030C200008D38030102A30F92C21C68A7AB0902C207A98AC792C496C28AE446FE6C00BEEF
:2030E20001DEA61BE803FD69A28A099A40764F94D292025210601F76BF01009A081A040038
:203102000B6FC28A0902A7ABBF56E401C207A98AC792C496009ABE82BE86BE8B0600BDB205
:20312200BDAAA486EFFF3901C28AFCCCFF00A958EC47EDFF2C01408DA0019A92E0FF2D01CD
:20314200408D3B039A920152116000BE408D3D03BF569A01408D34039AC2408D3F039A2BC3
:20316200408D3E039A2B0DD19A2B408D3F039A92E0FF1301408D3D039A924F60F2C4208F5C
:203182000000A9A8A60F06662F8F0000A9A8A60F0867608F00000AD1208F0000F2A09AA83B
:2031A2000CD19A923A52E0FFF800408DA0019A922E60408D34039AC4A692A94001DE9AC2BB
:2031C200066DF28A0356A008C496076FF28AA9A80109F21EA092C498008D34039206E20F6B
:2031E200E8FFDB000FD10CD0BF569A33A28A099ABF56923340764F94408D3F03008DA001EE
:20320200BF569A01BF569201EFFFC700008D3F03BF569201EFFFC100408D3E039A923E60A1
:20322200A0921F760403115425611F767C032454036024921F60A088408D31039A0EA60F29
:203242000560408D33039A921560A0921F767C032354076023920561408D33039A920A618A
:20326200408D3F03008D3D03BF569A01922BEFFF9400408D32039A78408D3E039A80019AAA
:20328200013BA7949A96A9AAA781A98A0ED1089A9C78A28A40764F947F6F9A80019A013B9E
:2032A200A7949A96A9AAA781A98A0ED19C78408D3E039A9207520E600DD19A9210520A6029
:2032C200408D33039A9206600A9A1F767703A0941096408D3E039A9203520B600DD19A59FF
:2032E200A19204520660059A008FC0DDA0949C96408D3E039A9202521A60A0920DD103523F
:203302009A78336842523166008FC0DD949203522C68A09233520B600CD19A923A5225605C
:20332200A09233520460008D3D03922B0DD09258408D3E03008FC0DD9A9294540467A91BA2
:2033420090012A68A28A099A40764F94408D3D039A2B0DD0408D3F03BF569A01408DA00104
:20336200BF569A01922B186FA28A099A40764F94408D3E039A2B0DD0408D3D03BF569A0182
:20338200408D3F039A2B922B076FC28ACC18DFFFC28ACC1A2000C28AEC46EDFFC7FE1F7600
:2033A20033000BDC211A0001C41A4000BE86BE8B0600BDB2BDAAA486A61EBDA2A582D29256
:2033C200025205601F76BF010818FBFF408D360308D09AC292A2008D3A03BF569201C28A97
:2033E200E446FE6CA28A089A40764F94008D38030102921EC28300BE0902BF56E501C20783
:20340200A98AC392A7FFFF90C496A692BE82BE86BE8B06000600A983C57C0600BDB2BDAA39
:20342200BDA206FE1F767B03A482BF5634010EDCEC92FF90A95AE492FF90A988A9AA37FFEB
:20344200A6AFA986DC92FF90A988A9AA37FFA6AFA986D492FF90A98809D0A9AA37FFA6AFCE
:20346200A9869492FF9008D0A9599492FF90A988A9B237FFA6AFA98BFC92FF90A988008DB1
:203482003203A9B237FFA6AFA98BF492FF90A988408FFFFFA9B237FFA6AFA98BA9A210FF54
:2034A200A101A71E441EA98A9392C7960202BF56CC3440762BB0A90E461EA28A465DA9B29D
:2034C200407601B0419644830102A38A4076A49544830102A38ABF56C5344076A4954192FF
:2034E200A90E461EC38AE446FE6CA9B2A38AA28340764697C38AE446FE6CA9A210FFA101B1
:20350200A983A38A4692A993FF91A7FFFF90C597CD960602D52BDD2B4076A49586FEBE82F5
:20352200BE86BE8B060006000600A98AC4920600A988BDB21F767103A9A8008D3203A48B70
:20354200BF560101BDAA10FFA101408FFFFFA71EA986A98A9193C7970202CF7E40762BB0E2
:20356200A9CDFF00A283A7FFFF90A18AD597DD960602E52BED2B4076A495BE86BE8B0600BE
:20358200BDB202FEA48B0EDCEC92FF90A980E492FF90A988A70637FFA6AFA71EDC92FF903B
:2035A200A9880129A70637FFA6AFA71ED492FF90A988412BA70637FFA6AFA71EFC92FF9005
:2035C200A9934196F492A838419620FF0080A70F0666A706415C40767897086FAD5CA79210
:2035E200029B81DCA45C40765B9E399AA18A4076059882FEBE8B0600BDB2BDAA02FE1F7695
:203602007103A486BF5601010EDCEC92FF90A980E492FF90A988A70637FFA6AFA71EDC9232
:20362200FF90A988A70637FFA6AFA71ED492FF90A988A70637FFA6AFA71E012920FF0080DF
:20364200A70F0666A706407602984196086FAD5CA792029B81DCA45C40769E9EA9AA008DED
:20366200320310FFA1011F767803A71EA98BA98A9292408FFFFFC796BF56CF384192FF905A
:20368200D7964192A7FFFF90DF961892A9CDFF00A7FFFF90E197E996060240762BB0A9CDE4
:2036A200FF0009D0A7FFA183A28AFF9008D1F597FD960A029D2B952B4076A49582FEBE866C
:2036C200BE8B060002FEA61EAC281F00013B2256A60740FF0156A400C492A640036CFF900D
:2036E200036FA7FFFF9082FE0600BDB2A48BBDAAE1C50AD09183A706A58A02194076CF98EE
:20370200A927A706A58A01194076CF98A1C5008D3203408FFFFF0EDF0356A908AB94A95A96
:20372200A78A9192C7960202BF56CF3340762BB00AD0A95DE106918A0219407601B0A98895
:20374200A20EA60F1061008D3C03912BD192025205601F76BF01081A0400A18A099A4076EE
:203762004F94096FA18A339A40760598008D3C03BF569101BE86BE8B0600A4830EDDED920A
:20378200FF90A980E592FF90A988A70637FFA6AFA71EDD92FF90A988A70637FFA6AFA71E0F
:2037A200D592FF90A98809D0A70637FFA6AFA71E9592FF9008D0A90EE41E9592FF90A988DC
:2037C200E40637FFA6AFE41EFD92FF90A988E40637FFA6AFE41EF592FF90A988E40637FF43
:2037E200A6AFE41E02020156E4000AD01F767B033A9AF4C394C3BF563401407605980600BF
:203802000600BDB2BDAABDA2A482008DA00193923D61408DA0010FD09B2B935A008FC0DD28
:20382200013BA9A8A281A98AC49203523268A91B90012F66A29233521A61008FC0DDA9A8C3
:20384200A281A98AC458A059408FFFFFA38A82D981D8A1880EDC035694089CCAA959A60631
:2038620040762BB0A188A90EA60F05600CD0A292937A1C6FD392025205601F76BF01081A7E
:203882000400A38A099A40764F94A928FFFF0E6FD392025205601F76BF01081A0400A38AA7
:2038A200099A40764F94A928FFFFBE82BE86BE8B0600BDB206FEA48B0EDCEC92FF90A90ED8
:2038C200421EE492FF90A988420637FFA6AF421EDC92FF90A988420637FFA6AF421ED49256
:2038E200FF90A98809D0420637FFA6AF421E9492FF9008D0A90E441E9492FF90A988440624
:2039020037FFA6AF441EFC92FF90A988440637FFA6AF441EF492FF90A9880DD0440637FF90
:20392200A6AF441E9492FF900CD0A90E461E9492FF90A9880BD0460637FFA6AF461E949200
:20394200FF90A9880AD0460637FFA6AF461E9492FF90A9880ED0460637FFA6AF461E94CC31
:20396200FF0004520A61055212604206448A46C4A69340769E9E076F4206448A46C4A693A2
:2039820040765B9E3C9AA18A4076059886FEBE8B0600BDB2A9A8BDAA10FFA101A98BA48619
:2039A200408FFFFFA98ABF56C1100602BF56C904D12BD92BE12BBF56E93040762BB0A9CDF4
:2039C200FF00008D9E01A7FFFF90F197A28AA183F9960802BF5692014076A495BE86BE8BF0
:2039E2000600BDB200BE00D0408FC0DBAA2B008F80DCA9A8A00DA98A9580C427A70EAB0FF8
:203A02000361C47F01BE01D8A0928052F168A6921061408D80DC809AA18A40763CB080D0FF
:203A2200A82802019196A18AA9287E3F40765B9EBE8B0600BDB200BE008DA101A9A8A60D73
:203A4200A71EA9A8A60DA98301DE0EDFC7929596A6920852F468A483408D9E010EDD03565A
:203A6200E508DD58EDCAA988A9A8408FC0DB10FFA101957EA983BF569C010A024076A495E2
:203A8200BE8B0600BDB2BDAABDA202FEA4860EDC0356E408DC2FECCAA927A9AA10FFA101B2
:203AA200A71E00D51F767C032492C7960356AB01BF56CF03D796AB922061A588AA92A672AB
:203AC200008FC0DB03D1A9A8A60DA98A0356A501A980A9AA10FFA101A61EA792A17204D09F
:203AE200C492C7FF9E96A792A07201DDC492FF909696AB92A554E2660356AB014196A993A4
:203B0200039A408FFFFFA894A959A9AA10FFA101A982A98AA10E40762BB0A9CDFF0004D010
:203B2200A7FF9B974193A073FF90AB280500089B9396AB9241944195A958069A4194A9800A
:203B4200079A4194932BA758A859932BA958A28AA383A10E932B008D9E019B2BBF56920117
:203B62004076A49582FEBE82BE86BE8B0600BDB2AC2BAB280800807608DF0C3505D106D016
:203B8200A483A172A072A9800EDD03569D089594AC5807D19696AB92A794A958A793A173CD
:203BA200009B95929DCA00520261019BAC92AC58408F00DF019C0852A92D9597DF68BE8B10
:203BC2000600BDB210FEAD5C89DCA45DAD5CC07600C18FDCA45C08F6852400D0C07609C10F
:203BE20005F68424008FC0DB942B01D8A0928052FC68A4C51F767A032A921F767A037EDF50
:203C0200C7962B920452086160D162D0BF569C0ABF569408116F1F76700300D0BF5620026B
:203C2200AD5C8FDCA45C9492008F22DC949601D8A0920652F66861D0008FC0DB1F767A0303
:203C4200BF5694653192046163D0BF5694141F767A0330921B611F767A032A882A92085212
:203C620081DE03652A8882DE00D00129008F34DC0356A603C07640DEA00D0156A700C79276
:203C8200949601D8A0920852F4681F767A032B9201521A601F767A033188012920FFF2FF96
:203CA20000D0A60F1161008FC0DBA9A8A00DA98A30D101D8BF569C4648D1BF569C3C319216
:203CC2000E9CA054F1661F767A032B920252216000D0008FC0DBA9A8A00DA98A01D830D144
:203CE200A092BF569CAA065248D1BF569C96F26806D0008FC0DBA9A8A00DA98A01D830D118
:203D0200A092BF569C73085248D1BF569C69F2681F767A032B920352116000D0008FC0DBD5
:203D2200A9A8A00DA98A01D830D1A092BF569C46145248D1BF569C3CF2681F767A032A92B9
:203D420009521B6000D0013BAD5C89DCA480008F80DEA7069481A71E008F08DCC792949683
:203D620001D8A0920F52F1683DD1008FC0DB3ED0BF569C46BF5694461F767A032B92065229
:203D82002B60008FC0DB30D032D19428A401A4C531D09428A40133D09C2884037ADF4BD17A
:203DA2009428840348D094282C0149D094282C014AD0942820039C282003C792A4C56ED0DB
:203DC20051D194967BDF6FD0C792949650D0BF569406BF569C101F767A032F920A6100D0DB
:203DE200008F30DC9428000801D8A0920452FB684076D88390FEBE8B0600BDB2408D80DC18
:203E0200A9287E3FA8280201A18A40769E9E809AA18A40763CB0A98080D0A988910EA70F3C
:203E22000E60A688012920FFFFFFA60F08611F767A032A887ED0910EA60F156140764E9B04
:203E4200408DC0DB7FD0912B40765E9A1F767A032E9217617FD91F767103C11A1000112870
:203E6200FFFF0F6F00D0008F80DC9492008FC0DB949601D8A0928052F7681F7670033F2BE1
:203E8200BE8B0600C4A0D41A01000600C4A0D41A02000600D493009A039100530260019A39
:203EA20006001F76BF010118F7FF06001F76BF01011A08000600227608D0408F806F1F764F
:203EC200BE0195CCFCFF015008960BDD08CCF7FF0450089608CCDFFF1050089608183FFF24
:203EE2001F76BF01C51A08000118F7FF1A761F76C10169FF0002BF560007BF56011F022BA6
:203F0200BF56040D0A2800800B2B0C2BBF560F10D42BC41E001A800006001F7676032588EA
:203F2200BDB2A48BA6921352E6FF5801C07612C10129A7060456A601A71EC7C52076C18AF3
:203F4200260ED40F0561BF562511EFFF470108D091C5673E1F767603252B262BD118F7FF00
:203F6200D118FDFFEFFF3A011F76C1010246ECFF3501C18A1F767603260EC407A71E1F76BF
:203F8200C10107921F767603C796BF562513260AEFFF24011F76C1010246ECFF1F01079286
:203FA2001F767603BF5625112796EFFF17011F76C1010246ECFF120107921F767603BF568A
:203FC200250F2796EFFF0A011F76C1010246ECFF050108D091C5673E1F76C10107400B6D7C
:203FE200D118FBFF1F767603D118FEFF252B262BEFFFF4001F767603BF562509EFFFEE0038
:204002001F76C1010246ECFFE90007921F767603BF56250B2796EFFFE1001F76C101024614
:20402200ECFFDC0007881F767603277EC18A260ED40F0561BF562507EFFFD00008D091C580
:20404200673E1F767603BF562509EFFFC7001F76C1010246ECFFC20007921F767603BF56AB
:2040620025072796EFFFBA001F76C1010246ECFFB50007921F767603BF5625052796EFFFDD
:20408200AD001F76C1010246ECFFA800079208D01F767603279691C5673E1F767603BF56E5
:2040A2002503EFFF9B00D140086CBF5625010AD0D11A040091C5673ED141ECFF8F001F76A8
:2040C20076030AD0BF56250DD11A080091C5673EEFFF84001F76C101BF56008F082B021A9A
:2040E20020001F767603BF562512776F1F76C101BF56008FC18AE4920896021A20001F7633
:204102007603BF562510696F1F76C101BF56008708280003021A20001F767603BF56250E4A
:204122005C6F1F76C101082B021A20001F767603BF56250C526F0AD091C5673E1F76C101AB
:20414200BF56008708280005021A20001F767603BF56250A426F26801F76C101BF56008FAC
:20416200C18AA706C407A71EC79208961F767603260A1F76C101021A20001F767603BF56CA
:2041820025082B6F1F76C101BF56008FC18AE4920896021A20001F767603BF5625061D6FE6
:2041A2000AD091C5673E1F76C101BF56008708280002021A20001F767603BF5625040D6FFF
:2041C2001F76C101BF56008708280006021A20001F767603BF562502BE8B06001F7630001A
:2041E200A880A927A48E142820400002008FB4DD1F767803181E4076B79C0052FD61A7929D
:20420200A793C0FF0191A995A880A7922661408FA8DDAB9220BE1F90A674A792A654026717
:20422200A7881F767603A65C0356AB01283AA90E2AA82C1E008FB4DD4076AF9C4076B79CD9
:204242000052FD61A93AA60DA98EAB92A694A927A792A69EA980DE601F7630001428104063
:2042620006001F763000A880A927A48E142820400002008FB4DD1F767803181E4076B79C3A
:204282000052FD61A792A793C0FF0191A995A880A7922661408FAEDDAB9220BE1F90A67444
:2042A200A792A6540267A7881F767603A65C0356AB012E3AA90E30A8321E008FB4DD4076FF
:2042C200B39C4076B79C0052FD61A93AA60DA98EAB92A694A927A792A69EA980DE601F7647
:2042E200300014281040060002FE1F76760338C5008FB4DD673E22761F763400008FDEB1AB
:204302001CA81A7669FF4076EBB01F7671030F8F40423A0642A8C0004EB2A9BD120F00777D
:20432200007702E84116008F16DE89E6000040762AB12376002082FE060002FE22761F76D4
:204342007A032B9204520460008FCFAA036F008F4AA31F7634001AA81A760F8F40421F76A1
:20436200710369FF3A0642A8C0004EB2A9BD120F0077007702E8D123008F0EDE89E6000038
:2043820040762AB11F7630000C2820402376001082FE0600BDB2BDAABDA2407697AA00D303
:2043A200103B69FF407678B2267600002F76000040763FB340765AB14076FF901F767A0367
:2043C200009A2A93407620AC0D9A40761A95418F00C201D4A9A0407669941F767A033192BE
:2043E2000860418F00C202D4A9A040766994076F012902D420FF00E1407669944076E19E91
:2044020040762990008FC06FA48300D20BDC0CDDC51A0100C41A0100012920FF50C34076D3
:2044220049B1008FC06FA48301DAA2920EDC0FDDC51A0100C41A01000A52EF64008FC06F8A
:20444200A4830BDC0ADDC51A0100C41A01004076F78F40762AB31F767A03109B2A924076A8
:2044620056B340760A9F407697B21F767A032B920452056140760DA5407638844076AE8585
:2044820040766A9C4076D8831F767A032B920652036040764EA81F767A03C076C0DB2A9278
:2044A2007EDFC79622761F76C001BF56292F1A761F767103BF5604011F76710303927D61B6
:2044C20063D0032B008FC0DB94920E611F76740363D03D0A94923D5407663D2B008FC0D386
:2044E20069FF4076369A00D2008F32DF013B408FC0DBA9A8A281A98AA9A0A281A98360D045
:20450200C40A9592C4545566005253611F767C0332924F61408F30DFC42BA9A0A281A98AD7
:20452200C49280520868008F30DF013BA9A8A281A98AC42B013B086F109AA794A9CCF0FF75
:20454200C4968052F167008F30DFA9A8A281A98AC4800356A203408FF0D8A61EA792C3FFF8
:20456200A927A606AB0D0156A500A7CD0F00A82DC59262FFA988E161013B0A6F008F30DF33
:20458200A9A8A281A98AA692A0FFA988C40AA640F66C408D30DF013BA9B2A281A98B008FFB
:2045A200C0DB69FF009AC19340760DADC108030001DAA292025299647FD0008FC0DB94411E
:2045C200076C7FDC69FFC418FDFF40764E9B7FD0008FC0DB9442076C7FDC69FFC418FBFFD1
:2045E20040765E9A7FD0008FC0DB9443076C7FDC69FFC418F7FF40766A9C7FD0008FC0DB7E
:204602009445076C7FDC69FFC418DFFF4076538069FF40761C921F767A032B9201521360E5
:2046220016D0408FC0DB9592A58AC1FF01F016D0A3CE0356A9027FDC0790C49895CC040013
:20464200C1FFA95B2B9206525A607FD0008FC0DB94921F767403A99300B6D6FFC5FF0191FD
:204662000190A9883E92026001B6A892A7CE1B61008FC06FA4831F767A030BDDC51A004064
:204682002B9206520761045205610DDCC41A0020056F1F76BF01041A0800008FE8031F76FA
:2046A2007B0308A81F7674033F9200B63E97026001B6A693A7CF16611F767A032B931F76BE
:2046C200BF010B1A000406530661045304610B1A0020036F021A0800008FE8031F767B030B
:2046E20008A81F7674033F7E1F767B03080607601F76BF010D1A00400D1A000400D2A292CA
:204702000461408D40D0036F408DC0D3A18A40766E99A91BFFFF59611F76BF0100BE0F1AE3
:2047220001001F76780337523EC213623752326133520A6233523A610352446104523E614C
:2047420006523861426F34522D61355227613D6F3A5208623A5212613852186139521261F0
:20476200346F3B5207613C523060A18A4076C6992C6FA18A40766D99286FA18A40762A9984
:20478200246FA18A40762D98206FA18A407669981C6FA18A40760098186FA18A4076019868
:2047A200146FA18A40767B97106FA18A4076E2980C6FA18A4076879A086FA18A4076249B13
:2047C200046FA18A4076AF9A01DAA2920252E3FF75FE966F1B76F0FF0500BDABBDAABDA8C4
:2047E200BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0303E2BD0430E672
:20480200000602FE69FF422916561F7633002292419623760100267601012218FA00212849
:20482200FFFF10291F767B03240604610102415624001F7671030492E1FF99011F767103BD
:2048420011920D61FF9C11960A60008FC0DBA4837FDC7FDDC518EFFFC41A04001F767A03D2
:204862002F92196100D2008F0871013BA9A8A281A98AD492C3FFA988008F3CD7A9A8A281CF
:20488200A98A69FFA292C47E4076568601DAA2920452EA641F767A032B9206523A601F766A
:2048A200C4010992C3FFA90EA9BD120F0077007763D0808DC0DB8BE60400008F40D78CE640
:2048C200200069FF13E29200CFE62000407617B26ED16FD0013B008FC0DB9A92929EA98505
:2048E200A9BD160F6FD0C8E29402CFE6040020E7A00089E60900407679AF50E800C800777F
:2049020090E8008800778CE600001DD013E292001F767A032B920552436000D21F76710394
:2049220006921F767B03210A21540262212B008F0871013BA9A82181A98AC492C3FFA90E41
:20494200A9BD120F212D69FF008F40D712358BE604000156A400CFE62000407617B2013B2B
:204962001F767B03008F21DD8EE60000A9A82181A98A13E2C400008F80DEA9A82181A98A2F
:2049820001DAC4920852056121924076EE82056F2192009B40761181A2920652C0641F76FC
:2049A2007A032E92E1FFE3001F767B0320881D0EA60F1A601F767A032C931F767B03219249
:2049C20000530F611F767103055402600D9A1F767B0321931F767103059F015302600C9AD7
:2049E20069FF40764B901F767B031E92205472671F767A032E9200D26D651F767B03212DD5
:204A0200008F0871013B1F767A032E12A294A959A9A8A281A98AC492C3FFA980A7BD160F55
:204A2200A188008F21DDA9A8A681A98A8BE60C00C4E2C400007720E7000100778CE60000C4
:204A420000771F767B03A9BF120FA98556FF009B1F540267019B1F5422970767008F34DF6F
:204A6200A9A8A281A98AC40A008F88DDA9A8A181A98A009AC49300530260019A22CA246173
:204A8200A12D008F40D71235CFE6200069FF0156A400407617B21F767B03240608618EE688
:204AA200200000770077A6BF120F076F8EE6000000770077A6BF120F008F21DD013BA9A8E8
:204AC200A181A98AC47E01DA1F767A03A2922E5495641F767B031C92200A20544766202B4A
:204AE20069FF4076DB9000D21F767A032E9220651F767B03212D1F767A032E12A294009B7E
:204B0200A95940761181013BC07634DF008F88DDA706A281A71EA9A8A181A98A01DA1F7625
:204B22007A03C792C496A292C72B2E54E2641F76710305921F767B03029C210A21541662EC
:204B42001F767A03319200D21F767B03212B0E651F7671030692019BA2944076118101DA44
:204B62001F767A03A2923154F464008F0071A4831F76330019DC01DDC51A0040C41A100041
:204B8200BF562101103B419282FE2296AFE2BE04AFE2BE03AFE2BE02AFE2BE01AFE2BE00F1
:204BA20080E2BE00BEC5BEC4BE83BE8ABE86BE870300303BF1FF177602761B76F0FF0500D4
:204BC200BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E667
:204BE200000602FE69FF42291656227601021F767803015610002376001026763911102994
:204C02001A767FD0008FC0DB944F046D69FF407672A91F767103020A029214520468022B54
:204C2200BF56030116D1008FC0DB7FD09C9294CA0190A9880C9301F10191A6CB10601F7612
:204C42007A032B93065306611F76BF010B1A0008146F1F76BF010B1A00200F6F1F767A0328
:204C62002B93065306611F76BF010F1A0008056F1F76BF010F1A00200653E1FF4B011F7602
:204C82007103150A15930A53E0FFA1001F767A032B931F7671030553152B03601B932260F6
:204CA2001F767A032B93015305601F7671031A9319601F767A032B9306530F6104530D61DC
:204CC200025306611F76BF010B1A0004226F1F76BF010B1A00401D6F1F76BF01021A00024E
:204CE200186F1F767A032B9306530F6104530D61025306611F76BF010D1A00040A6F1F7683
:204D0200BF010D1A0040056F1F76BF01041A00021F76710319930F601F767A032B93035337
:204D2200136101531161065319601F76BF01021A8000186F1F767A032B9303530F61015303
:204D42000D61065306611F76BF010B1A00100A6F1F76BF01041A8000056F1F76BF010D1A3D
:204D620000101F7671031A9315601F767A032B9306530B610353046101531561196F1F76BF
:204D8200BF010B1A0040226F1F76BF01021A80001D6F1F767A032B930653146103530D617C
:204DA200015306611F76BF010B1A00800F6F1F76BF010D1A00800A6F1F76BF010D1A00408D
:204DC200056F1F76BF01041A020000523E601F767103158062D0940EA70F37601F767A0327
:204DE2002B9303530F6101530D61065306611F76BF010D1A00100A6F1F76BF01021A8000B5
:204E0200056F1F76BF010B1A001006530E6103530961015304610D1A0080096F0B1A00808D
:204E2200066F0B1A0040036F021A800006530B6104530961025304610B1A0004066F0B1A85
:204E42000040036F021A00021F767103009A1C9300530260019AA693A9CF04611428F40197
:204E6200162B140AC4E214001C7E12E8D01F14AD5364160A1693019100B6142B1797169375
:204E82000791026101B6A692187F3C601F767A032A92095224611F76710316D0BF56190127
:204EA20094937FD0D0FF9492C9FFA8CAA940026C197F0C42116D0C430C6D0C44036D1A2BC3
:204EC2002B6F1892009B00520260019B1A97246F17921A96216FBF561A011E6F1F767103AE
:204EE2000C41BF561B01036C1792026F009A0C401A96036D192B106F179317921B9719962C
:204F02000B6F17931788179219971B961A7E046F69FF4076BDA882FEAFE2BE03AFE2BE0211
:204F2200AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177602767A
:204F420002FE2276008F57A11F7635000AA81A7669FF4076F8B21F763300221A200023769F
:204F6200010000D5013B008F88DDA9A8A581A98AC42B008F21DDA9A8A581A98A01DDA59244
:204F8200C42B1C52F1641F767A032B9206522360008F00711F76C401D4CCF0FF05500296DD
:204FA200DCCCF0FF0350039603CC1FFF1050039603CCFFF1A91A0005039603CCFF0FA91AC6
:204FC20000400396E4CCF0FF0750049604CC0FFF205004961F767A032B9203521460008F57
:204FE20000711F76C401D4CCF0FF02500296DC18F0FF03CC1FFF1050039603CCFFF0A91A21
:20500200000203961F767A032B9201522860008F00711F76C401D4CCF0FF06500296DCCCCA
:20502200F0FF0550039603CC0FFF4050039603CCFFF7A91A0007039603CCFF0FA91A0020A3
:205042000396E4CCF0FF0350049604CC0FFF6050049604CCFFF1A91A000104961F767A03D1
:205062002B9202520960408F0071A58A02DCC418F0FFDD18F0FF2B9205524C60408F0071B8
:20508200A58A1F76C40102DCC41A0F00DDCCF0FF0250039603CC3FFF3050039603CCFFF053
:2050A200A91A0006039603CCFF0FA91A00C00396E5CCF8FF0A50049604CCBFFFB0500496CF
:2050C20004CCFFF7A91A0007049604CCFF0FA91A00400496EDCCF0FF0550059605CC1FFFA2
:2050E2001050059605CCFFFEA91A000E05960518FF0FF5CCF8FF08500696061AF00006CCC0
:20510200FFFDA91A000D069606CCFF0FA91A00900696408F0071C0760068A5C41F76C401B5
:20512200A78A1AD019DD01DEC61A000119DC011A0008C51A1000001A10000018BFFF001A7B
:20514200000F011A00401F763300BF5621011F76A001C41A000819CCFFFCA91A0004199672
:2051620097CCFFFDA91A00011A96BF56098000CC7FFCA91A0001009600CCFFE3A91A0008A2
:20518200009600CC001CC9FFA92D019A66FFA98800CC800304600102AC1E076F00CC80037B
:2051A200C6FF80FFA985AC1EA6851F7671034456A900421E3A06C0004EB2008FA60E42A8AD
:2051C200C0004EB21F767A03008F4C1D2B931F76A00105960018FCFF1F767B03025326A82B
:2051E2000C60008F8A66BF561C0FBF561D04BF561E09BF561F1426A81F767A032B920352D6
:205202000E601F767B03008FF22BBF561C0ABF561D01BF561E04BF561F1426A81F767A0392
:205222002C920E611F767B03008FF22BBF561CFABF561D19BF561E96BF561F1426A81F7696
:205242007A032B9206520660008F7C921F767B0326A805520660008FA60E1F767B0326A8F5
:205262001F767B03260682FE241E0600005206601F76BF01041A0001056F1F76BF01021A14
:2052820000010600005206601F76BF01041A4000056F1F76BF01021A400006004076A3A670
:2052A200019A4076AFA6009A4076A3A6010240765BB3009A4076AFA61E0240765BB3060057
:2052C200009A4076AFA61E0240765BB3019A4076A3A61E0240765BB3009A4076A3A61E020C
:2052E20040765BB30600BDB2BDAABDA20EFE00D2A98BA288A492A52D0252A65BE3FFF00042
:20530200A9B2026301D256FFA983AC9205640452036301D3026FAC2BAC92A58B4B2B0B65A4
:205322000A02421EA9B2C0004EB24B0AA98BAC924B54F762A9B20A650A02421EA9B2C000D4
:205342004EB201DE58FFA98BF862A292A58BA694A988026001BEA692AC944B2B0452A98822
:205362000F650A02421EA9B2C0004EB2AC80A98B4B0AA69281DFFC9CA72D4B54F362AC9245
:205382000263AC2B019A66FFA9580152026000D08076E803A9B242C2C0004EB2441EA9B28C
:2053A20042C2C0005DB2A61E6402421EA606C0004EB2461E6402421EA9B2C0005DB2A61E0A
:2053C2000A02421EA606C0004EB2481E0A02421EA9B2C0005DB24A1EA61E460648074407E5
:2053E200A607046000D0A02DAC5AA3921561039A013B4B96AD888ADEA6880356A90101566D
:20540200A600C6060960AC924B5406610F024B0BC61E4B92F062A2922061019A013B4B9684
:20542200AD5D8ADDA55D0356A9010156A5000F02C50F09614B9203520661019C04524B963C
:20544200F0640B6FAD5D8ADDA55D0ABE4B920356A9010156A500C5C2009A4B2B013BAD5D88
:205462008ADDA55D0356A9010156A5008076B0DAA606C507A61EC685C51E019A4B2D66FF60
:20548200A0CE046180020156C5004B0A4B920452E76448A3AB92AA2BFF90A927A9A9AC2844
:2054A200180037FF5AFF4A064E1E4E92FF904E964D2B4E06ABCAAACB4E1E4606009BFF909C
:2054C2003FFF5AFF4E06ABCAAACB4E1E44063B565AFF4E06ABCAAACB4E1E026F4EB2408F6B
:2054E2001EDF013BA9A0A481A98A4B2BC45BA3921052246200D14E92013B0190A9884E061B
:2055020040FF4E1EA6924076BBA601D9A1920852F364A35A00D1A293A292B0FF0190A85A58
:205522004076BBA601D9A1920652F6644076CDA601DB4B0A4B920452DB648EFEBE82BE86B7
:20554200BE8B0600009A019C1952FE640600005206601F76BF010D1A0010056F1F76BF01E3
:205562000B1A00100600BDB21F76BF01BDAA0D1A0008BDA2A95B010240765BB300D1808D8C
:20558200C06FA28AA392CEFF0BDCC41A0080407614A8A39280FFA95B010240765BB30DDA8F
:2055A2000102C21A008040765BB301D9A1921052E7641F76BF010B1A0008BE82BE86BE8BBD
:2055C20006001F767B03008F5902BF5600050128701706A80600BDB2BDAABDA202FE79D0CA
:2055E200008FC0DBAC1E013BA98B94854C82A61E4456A90042A2C0004EB278D0A98342A25B
:20560200215694004456A100C0004EB27FD0A607A5039449046C7AD0013B9485A918FF0F23
:20562200A95AA91A0080407620A87BD0A9B2408FC0DB34FF957AA61EA9B242A232FFA60771
:20564200C0004EB2A98A42A2C802AC1EA9B24456A900C0004EB21CD0A49E82FE289C9596E2
:20566200BE82BE86BE8B0600A9280290407620A81F767A032B9206520F6104520D610252C5
:2056820006611F76BF010F1A00040A6F1F76BF010F1A0040056F1F76BF01061A00020600F7
:2056A20002FE1F767B03080604610102415608000092020A0254E6FFA8000606022BE0FF27
:2056C20084007FD0008FC0DB9447566C0592346050D0013B9492FC9CA985A9BD120F0077BD
:2056E20000770077007789E6000051D003E20A009492FC9CA985A9BD160F007720E80000CE
:2057020003E20A0032E8000589E6090003E20A0003E20C01AFE20C00AFE20A0132E8000CC1
:2057220003E20C0094E6080014AD06628FE808E0007703E20C000192C0FF03540267030AE5
:205742000192030A035402670396AFE20A00AFE20C01C4E20103C4E2030220E709004FE879
:2057620000604FE8096000E7180000E75100007710E74000086F0492032B90E5019CA91834
:20578200FF0304967FD09493A892C6FF0190059604920E61A8480C6D8CE600000188013B25
:2057A200A9BF120F42C2A985407658A82D6F4076A1A81F767B03008FC0DBBF5604017FDC29
:2057C200C418FFFE216F06060119A61E061E20FF5802A60F136120FFF401060F0F6120FFF6
:2057E2009001060F0B6120FF2C01060F0761C802060F04616402060F07604076A1A81F7612
:205802007B03BF56040182FE060011D0008F107094920F9004520E60CCCC8001C6FF0252BD
:20582200096022761F76C001BF562555BF5625AA1A7669FF060022761F76C001BF5629680A
:205842001A7669FF0600BDB202FE1F76C001A888A9801143026C257611CC80010561227671
:2058620011187FFE1A762276408F1070A58AA79211D00F9001DCC41A400095CDF0FFA8CA63
:2058820021961A76A79204600102A98B026FA759A92880C3A828C90169FFAC1E0556A1009E
:2058A200407688A9A1A91140FF6C22761118BFFF1A76A6930153036102530A602276A6926A
:2058C20011CD7FFE039086FFA8CA11961A76A6930A60A9B2013BAC281E0040FF2256A1071F
:2058E20041FFA98BA69301530A60A9B2013BAC281E0040FF2256A10741FFA98BA693025351
:205902000960A9B2AC281F00013B2256A10740FFA98BA7921460A69203521160227611CCDF
:205922007FFFA91A000169FF119620FFDA0540765BB31F76C001111A80011A761F767103B7
:2059420082FE69FF3AB2BE8B0600BDB202FE22761F76C001BF561A011B2B1A92036001BE81
:20596200046F03561A01A9881F76710342C269FF3A06C0004EB23E1E1F76C0011B920360D6
:2059820001BE046F03561B01A9881F76710342C23A06C0004EB2408D1070A18315D0008F3B
:2059A200200B3C1E0CDD1F762C0094CCF8FF015014DC3596C41A04003418F7FFC51A080048
:2059C200787680001F76C0011C1A1000A18A1C1A00041C1A00081C1A20000DDC10D91C1ABA
:2059E20000011C1A00101C1A00201C1A00401C1A00801C18FBFFC41A01001D1A02001D1A5F
:205A020004001D1A08001D1A10001D1A20001C1A04001D1A00041D1A00081D1A00101D1A71
:205A220000201D1A00011D1A00021D1A00401D1A0080C11A0001201A0002201A0004201A15
:205A42000008201A0010201A00201A7669FF82FEBE8B0600407688A9049A029B407690A9C0
:205A6200407612AA060002FE22761F762B002028FFFF2128FFFF2228FFFF2328FFFF2428EA
:205A8200FFFF2528FFFF2628FFFF2728FFFF1A761F76FFCF69FF38924196399241963A92B8
:205AA20041963B9241963C9241963D9241963E9241963F921F762B0041962F9201F00190CC
:205AC20082FE06001B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD01AC
:205AE20003E2BD0203E2BD0330E6000669FF4229165600D1227601021F767803015610001D
:205B02002376391110291A767FD0008FC0DB944F046D69FF407672A91F767103020A029228
:205B220014520668022B1F767103BF560301008FC06FA4831F767A0306DDC51A01002B92C9
:205B420006520E6104520C61025205610FDCC41A00040A6F1F76BF010F1A0040056F1F76F2
:205B6200BF01061A00021F767A032B9206520861045206611F76BF010F1A0020056F1F764D
:205B8200BF01061A080001021F7678033E07A61E008F204E3E1EA9A8A60F02673EA83B0A0C
:205BA2003B920A5202643B2B3792AC2B1261008FC0DBA9A8AC0DA98A62D094923B54046524
:205BC200019A66FFA172AC92019C3754A92DF0683A0A3A92025202653A2B7FD0008FC0DB73
:205BE2009493A89216D094CAA940EDFF8300A84B586D20FF204E3E0F30693A920A60013B09
:205C02001F766F0300D401D569FF00854076E0A61F7678033A9201520A60008FC0DB013BA9
:205C220001D569FFCC8501D44076E0A6A192408DC0DB02D400D569FFD1CEA90E4076E0A682
:205C42001F7678033A9202527B60013B03D400D5D9854076E0A6746F3A92076000D40002C9
:205C620000D569FF4076E0A61F7678033A920152076001D4000200D569FF4076E0A602D4ED
:205C8200000200D569FF4076E0A61F7678033A920252566003D4000200D54076E0A6506FF8
:205CA2003A92086020FFB82200D401D569FF4076E0A61F7678033A920152086020FFB822D7
:205CC20001D401D569FF4076E0A6A10E02D400D569FF4076E0A61F7678033A9202523060B5
:205CE200012903D400D520FFFFFF4076E0A6286F69FF4076C0B23A920760013B00D404D530
:205D020036854076E0A61F7678033A9201520760013B01D404D536854076E0A61F76780303
:205D220002D400D53C064076E0A61F7678033A92025206603C0603D400D54076E0A6AFE2E7
:205D4200BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303B2F
:205D6200F1FF1776027634FEA892FF9C0564105204640F9A026F009A22761F76BE01AB287F
:205D8200F0FFAA28457F09CDFFDF013B08BEA81A001008D4A0A908B6099709CDFF3FA81A9B
:205DA20000400997A9851F7680015AFF2AC25D56A000A5A92CA8AB2BAA28467F1F7684017C
:205DC200AB0302C3AB28FEFFAA28FFFF00B60AC21F76800103BE00C31F76840100A0081EB2
:205DE2001F76800102A900C200BE0002011960C2601A80F2081E000260C401190C1E0002A4
:205E020001191E1E00020119221E00020119181E14C21844FF6C16065E1E5E18FFFD5E1A5D
:205E220000015D1800FF5D1A05005E1A7F005E18FAFF5EC416C26018FFEF6006141E1844B5
:205E4200FF6D0002488F70641F768301541E088F7064541A010000A00031531A020001027F
:205E620000BE02A8541A06001F768001408FA1B000D4301E54C5020232A82EA9008F76B069
:205E82001F76370008A01F768001241E26C220C31F7637000AA81F763300321A1000321A7B
:205EA2002000237600011A761F767B0369FF000200B60E2B141EB4FE10C212C30600BDB22A
:205EC20006FE00021F7678030ED03E1E94C4A606A80EA9580CD19CC5467EA0CC00804396EE
:205EE200A0CC00404296A0CC00204196A018FF1FA70645974392447F00520861A092805203
:205F020005674692008FC0DB9496429201D80861A092805205674592008FC0DB9496419263
:205F220001D80861A092805205674492008FC0DB94961F76BF010F1A010086FEBE8B060031
:205F42001F767B030F92A88809611F7680010806A940046D0A06A9403E6C02D5A692013B85
:205F6200AB28010001B6A572AA2B1F768001A9A8A581A98308A90AC301B6C58500915AFF86
:205F8200A692A772A9A8A781A983C5853FFFABCAAACBA71EA9A8A681A98A1F768401C485C4
:205FA20000915AFFA6853FFFAACBABCAA81A00E0061E04C322761F76800100022E1E1A7689
:205FC2000102041E1F76BF010E1A01001F767B03BF560F0169FF06001B76F0FF0500BDAB89
:205FE200BDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000695
:2060020002FE69FF422916561F763300329241962376000126760001321875002128FFFF9F
:206022001029408FC0D369FFA58A4076269540762B95103B4192329682FEAFE2BE03AFE2FC
:20604200BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF177601
:2060620002761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E22F
:20608200BD0203E2BD0330E6000602FE69FF422916561F76330032924196237600012676A6
:2060A2000001321871002128FFFF1029408FC0D369FFA58A407626954076FC95103B4192D3
:2060C200329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8A86
:2060E200BE870300303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD00A9
:2061020003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F763300CC
:206122003292419623760001267600013218FD002128FFFF1029408F40D069FFA58A407698
:20614200269540762B95103B4192329682FEAFE2BE03AFE2BE02AFE2BE01AFE2BE0080E202
:20616200BE00BEC5BEC4BE83BE8ABE870300303BF1FF177602761B76F0FF0500BDABBDA8D7
:20618200BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E2BD0203E2BD0330E6000602FE58
:2061A20069FF422916561F7633003292419623760001267600013292322B2128FFFF102963
:2061C200408F40D069FFA58A407626954076FC95103B4192329682FEAFE2BE03AFE2BE0286
:2061E200AFE2BE01AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF17760276A8
:206202002276008F806FA483A4C41F76BE0126DDC51A030027DE261A0C00A483261A3000B6
:20622200261AC000261A000317DD261A000C261A0030261A00C0C61A0300271A0C00271AF8
:206242003000271AC000271A0003271A000C271A0030271A00C0C51A0300A48328DD171AC9
:206262000C0016DC171A3000171AC000171A0003171A000C171A0030171A00C0C51A030027
:20628200281A0C00281A3000281AC000281A0003281A000C281A0030281A00C0C41A00C095
:2062A200161AC000161A0030161A000C1A7669FF06002276008F806FA4C4A4831F76BE0159
:2062C20018DEC61A030019DD181A0C00181A3000181AC000181A0003181A000C181A003086
:2062E200181A00C0C51A0300A48369FF191A0C0014DD15DC191A3000191AC000191A00038C
:20630200191A000C191A0030191A00C0C51A0300141A0C00141A3000141AC000141A00034D
:20632200141A000C141A0030141A00C0C41A0300151A0C00151A3000151AC000151A000339
:20634200151A000C151A0030151A00C040766DAE0600227615D0008F200B1F762C0094CC83
:20636200F8FFA483A4C5A4C40150359614DDC518FCFF0CDF3418F7FFA4830DDE341A0400B6
:20638200C41A60000EDDC41A1C00C41A0300C41A0030C41A000EC41A8001CC1A4000C41A9A
:2063A2000040C41A0080211A0300C71A60002C1A1C002C1A03002C1A00302C1A000E2C1A03
:2063C2008001C61A40002C1A00402C1A00802D1A0300C51A6000A4830FDD2E1A1C0018DCDA
:2063E2002E1A03002E1A00302E1A000E2E1A8001C51A40002E1A00402E1A00802F1A0300FE
:20640200C41A0700381A38001A7669FF40766DAE07F6007769FF0600BD3ABDB2BDAABDA234
:2064220002FE0129A9BF120F58FF5B61A85C7F91A8088000421EA493D6FFA85CA9BF160F53
:206442006761A85D7F91A8088000A859A958A593D6FFA85DA493A571A8180001A697A41812
:20646200FF00A518FF007FDCA492A59EA7964D64A90801FF3E62A193A09236FFA859A958AF
:20648200420635FF0EF6A11FA95BA3010AF6A11F2D56A204A32DA03640FF0BF6A11F33FF51
:2064A200009B30FF54FFA20CA39540FFA70801001FF677FF200940FFA70801001FF677FFBA
:2064C2005AFFA7922265A90801FF1363A9A946FF7F91A85BA95AA625A79596FFA20CA3954B
:2064E200A9BD120F82FEBE82BE86BE8BBE8E0600009B57FFA8087FFF5AFFA693F260A828A1
:206502000080AA71AB92ED6F20FF0000EA6F5AFFA493A818000196FFA85CA9A9A8087FFF63
:20652200A81C0080A4CBDD6F58FF5AFF00BE25610129A6920190A958A60640FFA407A71E17
:20654200C793A640046DA892C7FFA92DA09201520460A8CCFF00A92DAC58A592A0F201DED4
:20656200A092FF90A958A592408FC0DAC7FF9570A95DA9A9A60FDE66A5920600A71E8076A3
:20658200C0DA0A6FA5928470FF90A95881DFA592C7FF9670A95DA706F660A5920600005230
:2065A200A927FF76FFFF00BE3365A9A8013BA681A983A793C592FF90A92FAA71A880009A8B
:2065C200A740046DB0FFA880056FB0FFA81C01A0A880019C0852F564A9A8013BA681A983AA
:2065E200A793C592C7FFA92FAA71A880009AA740046DB0FFA880056FB0FFA81C01A0A880AE
:20660200019C0852F56401DEAB92A654CF62A79206001B76F0FF00E2BD0030E6000602FE67
:20662200422916561F7633003292419623760001267600013292322B2128FFFF1029010243
:206642001F767B030E0A1F768001061E1F763300211A0001103B419282FE329680E2BE0049
:20666200303BF1FF177602761B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD00C9
:2066820003E2BD0103E2BD0203E2BD0330E6000602FE69FF422916561F763300329241964E
:2066A20023760001267600013292322B2128FFFF1029008F006169FF4076CCAC1F76800164
:2066C20002020C1E1F763300211A0001103B4192329682FEAFE2BE03AFE2BE02AFE2BE012D
:2066E200AFE2BE0080E2BE00BEC5BEC4BE83BE8ABE870300303BF1FF1776027600021F765C
:206702003000008F000C0119021E1F767803408F100C000206A81F763000062B0119072B85
:20672200E41A1000041A20001F763000008F080C0A1E1F76300000020119121E1F763000A5
:2067420000020E2B0F2B1F7678030EA816A0081E1F763000162B172B1F763000E41A100005
:20676200E51A10000C1A20001F763000141A20001F767803181E101E060000E0E45003E23C
:20678200F40188E61000C48303E2D500C483F52BC483FD2BC483E51A1000C483E51A2000F1
:2067A200C483E518FFFBC483E518FFF7C4830002E51A0040D41E06000129BDB240FFBDAAA0
:2067C200A98B00D20861100240765BB301DAA9B2A20FFA66BE86BE8B06001F76C001201A08
:2067E200001040766DAE2276008F200BA4C4A4831F762C000ED015DE14DDC618F8FFC51A9E
:2068020003003418F7FF3418FBFF94CCBFFF20502E960FDC2ECCE3FF08502E962ECCFCFFC1
:2068220001502E962ECCFFDFA91A00102E962ECCFFF7A91A00062E962E187FFEC418BFFFF8
:206842002E18FFBF2E18FF7F2F1A03001A7607F6007769FF0600AD28000469FF1F5616568E
:206862001A5610E6000240291F76000002291B762276A9285FB3A828000001091B61C076ED
:206882005FB304290F6F009BA92401DF046C0429A82401DFA61EA1F78624A706A1810109C9
:2068A200A71EA92403635CFF043BA95901DF0900ECFF1A76A928FFFFA828FFFF01090E61C8
:2068C200FF76FFFF066F01DFBDC3A71E673EBEC5A92401DFA82458FFF7604076DDB240765F
:2068E20013B31B76F0FF0500BDABBDA8BDA0BDC2BDC300E2BD0003E2BD0003E2BD0103E259
:20690200BD0203E2BD0330E6000669FF42291656227601021F76780301561800008FB4DD7C
:2069220069FF1F7676033AC5673E1A76AFE2BE03AFE2BE02AFE2BE01AFE2BE0080E2BE0049
:20694200BEC5BEC4BE83BE8ABE870300303BF1FF17760276BDB2CFE6010008D003E2BD045C
:206962000ED103E2BD0503E2BD0603E2BD07AFE2F400AFE2D40510E394040CD012E39C1F38
:206982000ED118E394DA0AE3C4A000E3E4C600E7BB0110E700010CD010E7C00003E29C021E
:2069A20003E2940008D0F406941E03E2F401AFE2BE07AFE2BE06AFE2BE05AFE2BE04BE8B63
:2069C2000600022904295F565AFF42065F56421E00021FF617564200AB063256022920762C
:2069E200022904295F565AFF420656FF421E00021FF6175642003256022920765AFF0002C8
:206A02001FF617564200A9A920765AFF00021FF6175642002076103B1F7633002018FEFFCB
:206A2200222B242B69FF262B282B2A2B2C2B2E2B302B322B342B362B382B232B252B272BDC
:206A4200292B2B2B2D2B2F2B312B332B352B372B392B06001F763300201A01002128FFFFA8
:206A6200102969FF0600A0E514AD0962A0E51F767C0314AD90E5B4562701156F4FE803C03D
:206A820092E601008CB5050000E7CA00007700E78A000077CFE812F0007700E75100007746
:206AA20000E74000060002FE1F767803380AC4E23800007712E8D01F14AD1164390A3992D3
:206AC200382B0A520260392B3934570436963C0603610002036F000201193C1E82FE060085
:206AE200A928FFFFAA28FFFFAB28FFFFA828FFFFAB0F04ED00D400BE0B6FA927A928FFFF00
:206B0200A92FA4A9C488A928FFFF0209A98AA6924076379F060022761F76C00169FF1C1A9F
:206B22000800787680001A761F76C401028FE6491CCCFF3F69FFA91A00401C96BF5618E0E3
:206B4200A9A840765BB306000077006F1F767C03BDB22AC5A959673E1F767C032EC5A70665
:206B620003ECA192673E1F767C032C0603ECA71E673E407611B3BE8B0600608F00001F7660
:206B82007B03208F00FA38A03AA838063C1E3E2B3806046FA98A842BA9A81F767B033A0FD1
:206BA200FA680600408F00C0008F000D2276009A85C4019C805284C2FC641A7669FF0600B2
:206BC2001F767C0328A806001F767C032AA8060006001F767C032397249606000119C35616
:046BE200FFFF0600AB
:206BE6001201000000C07E8B00007E8B00007E8B00007E8B00007E8B00007E8B00007E8B7D
:206C060000007E8B00007E8B00007E8B00007E8B00007E8B00007E8B00004C8C00003F8C95
:206C26000000CF8F0000718B0000E6880000888B0000598C00001C8A0000118A0000068ABD
:206C46000000FB890000F0890000E5890000DA890000CF890000C48900003D8A0000328A38
:206C66000000278A0000B48A0000998A0000E68800009089000077890000DC8F0000488A38
:206C86000000A9890000DE8D0000A88D0000728D00003C8D0000068D0000D08C0000E688F7
:206CA6000000E6880000F98D0000C38D00008D8D0000578D0000218D0000EB8C0000E688F9
:206CC6000000E6880000A68E00008B8E0000708E0000558E00003A8E00001F8E0000E6882F
:206CE6000000E6880000B58C00009A8C0000E6880000E6880000E6880000E6880000E68893
:206D06000000E68800007E8A0000638A0000C98B0000938B0000E48B0000AE8B0000E68882
:206D26000000E6880000B48F0000998F00007E8F0000638F0000488F00002D8F0000E68874
:206D46000000E68800007F8C0000648C0000E6880000E6880000208B0000CF8A0000E68876
:206D66000000E6880000568B0000058B00003B8B0000EA8A0000128F0000DC8E0000F78E64
:206D86000000C18E0000E6880000E6880000E6880000E6880000E6880000E6880000E6889C
:206DA6000000E6880000E6880000E6880000E6880000E6880000E6880000E6880000E6885D
:206DC6000000E68800005C89000041890000268900000B890000F0880000E6880000FF8BDD
:206DE60000001A8C00002C012C01000000000F00160014000A003C000A00080006000800EE
:0A6E06000600080033000B000A002C
:206E10002800000012C1C09D00004D9E0000AE9D00003D9E0000A19D00002F9E0000949DBD
:206E30000000189E00007A9D0000089E00006D9D0000FE9D0000519D0000F19D0000449DCD
:186E50000000E39D0000379D0000D79D0000219D00000C9D00000000FB
:00000001FF

View File

@@ -2,7 +2,7 @@
TMS320C2000 Hex Converter v5.2.7
********************************************************************************
INPUT FILE NAME: <UKSSTMS320F28335.out>
INPUT FILE NAME: <C:\Dima\Project\Balsam_167\Bin\UKSSTMS320F28335.out>
OUTPUT FORMAT: Binary
PHYSICAL MEMORY PARAMETERS
@@ -12,20 +12,20 @@ PHYSICAL MEMORY PARAMETERS
BOOT LOADER PARAMETERS
Table Type: SERIAL PORT (SCI 8 bit Mode)
Entry Point: 0x0000b9b5
Entry Point: 0x0000b198
OUTPUT TRANSLATION MAP
--------------------------------------------------------------------------------
00000000..003fffff Page=0 Memory Width=8 ROM Width=8
--------------------------------------------------------------------------------
OUTPUT FILES: UKSSTMS320F28335_34a95bc5.bin [b0..b7]
OUTPUT FILES: C:\Dima\Project\Balsam_167\Bin\UKSSTMS320F28335.bin [b0..b7]
CONTENTS: 00000000..00007f05 BOOT TABLE
.cinit : dest=0000c000 size=0000028b width=00000002
.text : dest=00008000 size=00003b73 width=00000002
.econst : dest=0000c28c size=00000125 width=00000002
.switch : dest=0000c3b2 size=00000048 width=00000002
CONTENTS: 00000000..00006e67 BOOT TABLE
.cinit : dest=0000b35f size=00000283 width=00000002
.text : dest=00008000 size=0000335f width=00000002
.econst : dest=0000c000 size=00000112 width=00000002
.switch : dest=0000c112 size=00000028 width=00000002
--------------------------------------------------------------------------------
00000000..003fffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*"

Binary file not shown.

View File

@@ -1,288 +0,0 @@
# SPI и управление ЦАП в Бальзам 167
Дата анализа: 23.09.2026. Рассмотрена текущая рабочая копия проекта `167`.
Документ описывает существующий код и предложения; прошивка в рамках этого анализа не изменялась.
## 1. Как устроено сейчас
ЦАП обслуживает **программный SPI через GPIO**, реализованный в `DAC.c`.
Аппаратный SPI-A используется отдельно для EEPROM в `spise2p.c`.
Изменение `SpiaRegs.SPIBRR` не меняет скорость передачи в ЦАП.
| Сигнал ЦАП | Вывод DSP | Имя в таблице платы | Действие |
|---|---|---|---|
| CS | GPIO59 | csdac, 1:13B | 0 на время кадра, затем 1 |
| DIN / MOSI | GPIO60 | didac, 1:13A | данные от DSP к ЦАП |
| SCLK | GPIO63 | clkdac, 1:14A | 16 тактов на слово |
Обозначения контактов взяты из комментариев `GPIO_table.h`, а не из проверенной схемы.
MISO в драйвере отсутствует: код отправляет команды, но не читает подтверждение или статус ЦАП.
Для платы нагрузки `get_Mode()` выбирает обычные GPIO и выходные направления этих линий.
Цепочка работы:
```text
CPU Timer1: 1000 Гц, период 1 мс
→ cpu_timer1_isr_SENS(), только Desk == dsk_LOAD
→ Load_runner()
→ каждые 5 вызовов: расчёт задания / инициализация
→ Anal_output(kod, time_dac)
→ dSEND(16-битное слово)
→ GPIO59, GPIO60, GPIO63
→ ump_log_tick()
```
`READY_FREQ=1000`, `DAC_FREQ=200`, поэтому `period_dac=5`.
200 Гц — частота обновления задания, **не частота SCLK**.
`LOAD_TIME=30`, `time_dac=6000` — количество шагов, используемое в расчёте разгона.
Вызов `dSEND` синхронный: обработчик таймера занят, пока не выставлены все биты.
## 2. Что происходит внутри одного SPI-кадра
Функция `dSEND(word)` выполняет:
1. Опускает CS и вызывает `DSP28x_usDelay(1L)`.
2. Повторяет 16 раз: SCLK=1 → DIN=старший бит → сдвиг слова влево → задержка → SCLK=0 → задержка.
3. Поднимает CS.
Передача начинается со старшего бита: D15 … D0. После кадра SCLK остаётся в 0,
DIN — в состоянии последнего бита. Между кадрами CS остаётся в 1.
Перед первым кадром `dSEND` отдельно не устанавливает исходное состояние SCLK.
Последовательность одного бита:
```text
SCLK ↑ → выставить DIN → выдержать время → SCLK ↓ → выдержать время
```
Новый бит устанавливается **после восходящего фронта**, но до нисходящего.
Следовательно, код рассчитан на чтение данных по нисходящему фронту; это
вывод из последовательности операций, а не подтверждение режима конкретной микросхемы.
При SCLK idle=0 такое поведение соответствует замыслу SPI mode 1.
Если приёмник читает по восходящему фронту, нужного setup-time здесь нет.
Нельзя менять фронты по привычному примеру SPI mode 0 без проверки схемы и паспорта ЦАП.
Из исходников установлены такие слова:
| Вызов | Передаваемое слово |
|---|---|
| `Init_DAC()` | `0x9002` |
| Обычное обновление | `0x8000 | (out & 0x0FFF)` |
| Ручная калибровка | `0x8000 | (DAC_cal() & 0x0FFF)` |
Локальная переменная `x` в `Anal_output()` каждый раз получает 0. Ветка отправки
без `0x8000` сейчас не выполняется. Точный смысл командных битов, номера канала,
режима питания и `0x9002` нельзя достоверно назвать: маркировка ЦАП в исследованных
исходниках не указана. Нужны схема или название установленной микросхемы.
После отправки `0x9002` функция `Init_DAC()` также переключает `RES_OUT_1` —
для платы нагрузки это GPIO9. Это отдельная линия с неизвестным здесь
электрическим назначением; считать её аппаратным RESET или LDAC без схемы нельзя.
## 3. Задержки и влияние прерываний
`DSP28x_usDelay(1L)` **не задаёт 1 мкс**. Ассемблерная функция принимает счётчик
циклов своего внутреннего цикла. Для микросекунд библиотека предоставляет макрос
`DELAY_US`, который предварительно пересчитывает время.
В комментарии самой ассемблерной функции приведена модель `9 + 5 × LoopCount`
тактов процессора. Она применима с оговорками о памяти без wait-state; вызовы,
GPIO-записи, цикл C и прерывания дополнительно влияют на реальную длительность.
Поэтому по числу `1L` нельзя вычислять частоту SCLK как 500 кГц или 1 МГц.
В проекте `XCLKIN=30 МГц`, `CLKMULT=2`, PLL множитель 4, делитель 2:
расчётная частота SYSCLKOUT — **60 МГц**, если входной генератор соответствует
константе. При этом `CPU_RATE` для макроса `DELAY_US` остался `6.667 нс`
(150 МГц). Это несоответствие не участвует в прямом вызове `DSP28x_usDelay(1L)`,
но помешает простой замене на `DELAY_US(1)`: сначала надо согласовать CPU_RATE
с фактической частотой. При 60 МГц период такта примерно 16.667 нс.
В таймерном ISR выполняется `EINT` после настройки `IER/MINT13`.
В текущей таблице приоритетов Group9 имеет уровень 1, Timer1 — 4;
разрешённые прерывания CAN/UART могут удлинять части SPI-кадра.
Сам `dSEND` не запрещает прерывания и не имеет защиты от повторного входа.
В найденных вызовах передача ЦАП идёт из `Load_runner`; добавлять второго
вызывающего без организации единого владельца передачи нельзя.
Это не доказывает потерю данных: некоторые ЦАП допускают произвольное растяжение
SCLK. Следует проверить паспортные ограничения и измерить минимальные и
максимальные времена под нагрузкой CAN/RS. Полный запрет прерываний на кадр
может уменьшить разброс, но увеличит задержку обработки связи.
## 4. Инициализация и расчёт аналогового выхода
`Setup_DAC_time()` задаёт `WAKEpowse=601`. Счётчик уменьшается с частотой 200 Гц.
Во время примерно трёхсекундной стартовой фазы `Init_DAC()` вызывается шесть раз,
при остатках 600, 500, 400, 300, 200, 100. После этого начинается обычный вывод.
Команда `cInitDac` вызывает повторную инициализацию; на этом шаге слово задания
не отправляется. При остановленном УМП счётчик `x` в `Load_runner` также вызывает
периодическую инициализацию примерно раз в 5.12 с. Это другая переменная `x`,
не связанная с постоянным нулём в `Anal_output`.
Расчёт кода:
```text
out = DAC_min + vrot × DAC_max / maxx − vrot × DAC_min / maxx
при cCalibrDac: out = DAC_cal
затем out &= 0x0FFF
```
Два деления здесь целочисленные. Их нельзя без проверки заменить одним:
`DAC_min + vrot × (DAC_max − DAC_min) / maxx` может дать другое округление.
Сначала нужно определить требуемое округление и допустимость изменения результата.
В `modbus[0x7B]` сохраняется отправленный 12-битный код, а в `modbus[0x1C]` —
расчётное задание в десятых долях мА. Это **не измерение выходного тока**.
В режиме `cCalibrDac` эти значения могут описывать разные вещи: в ЦАП уходит
ручной код, а `0x1C` остаётся результатом формулы разгона.
## 5. Что стоит исправить в первую очередь
### 5.1. Порядок запуска таймера — высокий приоритет
В `main()` выполняются `timer_Init(); EnableInterrupts();`, а затем загрузка
параметров и только после неё `Setup_DAC_time()`.
В `cpu_timer1_isr_SENS` перед `Load_runner()` нет проверки `READY`.
До настройки глобальные `period_dac`, `time_dac`, `WAKEpowse` нулевые.
Если в этом промежутке сработает Timer1 на плате нагрузки, условие счётчика
проходит при нулевом `period_dac`, стартовая задержка отсутствует, и путь может
дойти до `Anal_output(..., 0)` — деления на ноль. Это найденный путь выполнения,
не результат воспроизведения на железе.
Предложение: до допуска обслуживания ЦАП настроить GPIO в известное состояние,
загрузить/проверить параметры и выполнить `Setup_DAC_time`. Для этого можно
отдельно разрешать ветку ЦАП флагом готовности или запускать Timer1 позднее.
Нельзя просто отключить все прерывания на время загрузки: EEPROM использует Timer2.
Дополнительно проверять `maxx > 0` и допустимость `period_dac` перед расчётом.
### 5.2. Ошибка ограничения уставки
В `Load_runner` есть строка:
```c
if (dac_stop > 16) dac_go = 16;
```
При превышении конечной уставки меняется начальная. Вероятное намерение —
ограничивать `dac_stop`, но это надо подтвердить требованиями к разгонной
характеристике. Ранее `dac_go` ограничивается диапазоном 0..5, а эта строка
может сразу заменить его на 16. Следующая проверка способна поднять `dac_stop`
до 17. Это влияет на ток независимо от исправности SPI.
Предложение: описать допустимые пары начальной/конечной уставок в мА,
проверять их совместно и протестировать границы. Внутри алгоритма из обеих
уставок вычитается 4 мА; ограничения должны учитывать это смещение.
### 5.3. Маскирование вместо насыщения
`out & 0xFFF` обрезает старшие биты, но не ограничивает числовое значение:
4096 превращается в 0, −1 — в 4095. При ошибочной калибровке или выходе
за диапазон это создаёт скачок кода.
Предложение: сначала проверить входные данные и ограничить результат
диапазоном 0..4095, затем сформировать командное слово. Для ошибочных параметров
явно определить поведение: отказ, удержание предыдущего кода или заданное
проектом аварийное значение. Не выбирать «0» автоматически: код и ток связаны
калибровкой и внешней схемой.
### 5.4. Реальная длительность разгона
После половины диапазона `count_load` увеличивается дважды за шаг:
один раз в `if(count_load > time_dac/2)`, второй — в `++count_load`.
Поэтому достижение конца при `LOAD_TIME=30` занимает примерно **22.5 с**,
а не 30 с, без учёта начальной фазы и задержек исполнения.
Это может быть намеренной двухступенчатой характеристикой.
Предложение: явно описать её либо перейти к расчёту по прошедшему времени,
если требование действительно состоит в линейном разгоне за 30 с.
## 6. Улучшения непосредственно SPI
| Изменение | Польза | Что проверить |
|---|---|---|
| Явный `dac_bus_init`: CS=1, SCLK в idle, DIN определён; затем включение выходов | Предсказуемый первый кадр | Схема, подтяжки, активные уровни |
| Именованные задержки setup/hold/high/low/CS-high | Понятные временные ограничения | Паспорт ЦАП и фактическая частота DSP |
| Имена констант вместо `0x9002`, `0x8000`, `0xFFF` | Ясный смысл команд | Сначала установить модель ЦАП |
| Один владелец передачи и флаг занятости | Исключает наложение двух кадров | Все вызывающие и разрешённые ISR |
| Отдельные функции расчёта кода и отправки слова | Проверка алгоритма без железа | Сохранение округления и масштаба |
| Диагностика отправок/максимальной длительности | Показывает нагрузку и задержки | Счётчик отправок не считать ACK от ЦАП |
| Удаление неиспользуемого `wast()` и недостижимой ветки `x` | Упрощает чтение | Не затронуть другой `x` в Load_runner |
Не следует повышать DAC_FREQ ради ускорения SPI: меняется алгоритм обновления,
число шагов и стартовые интервалы. Для других частот проверить целочисленность
отношения READY_FREQ/DAC_FREQ и диапазон 16-битного `time_dac` на C28x.
Текущие 6000 шагов помещаются; будущие LOAD_TIME/DAC_FREQ могут вызвать переполнение.
Вариант без переделки платы: сохранить GPIO-передачу, нормировать её тайминги,
измерить длительность кадра и только затем решать, нужна ли короткая критическая секция.
Не переносить отправку в основной цикл без анализа задержек: в проекте есть
блокирующие операции EEPROM. Если переносить — использовать явную очередь/последнее
задание с оговорённым временем обслуживания и отдельными командами инициализации.
## 7. Можно ли перейти на аппаратный SPI
У F28335 один SPI-A. Его выводы могут быть GPIO16/17/18/19 или GPIO54/55/56/57.
GPIO60 и GPIO63 не имеют функции SPISIMOA/SPICLKA, поэтому текущие DIN/SCLK
не переводятся на SPI-A одной настройкой mux. Нужны изменения соединений.
Это подтверждается [таблицами выводов TI, SPRS439Q](https://www.ti.com/lit/ds/symlink/tms320f28335.pdf).
В данном проекте SPI-A уже обслуживает EEPROM на GPIO16/17/18 и CS=GPIO19.
Вариант общей шины требует подключения ЦАП к тем же MOSI/SCLK и отдельного CS,
проверки электрической совместимости и последовательного доступа к SPI-A.
Если меняются длина слова/фаза/частота, переключать настройки можно только
после завершения предыдущей операции. Текущий автомат EEPROM работает через
Timer2 и сам меняет формат слова: потребуется общий владелец шины.
Сначала достаточно рассмотреть один 16-битный аппаратный кадр с ограниченным
ожиданием либо прерыванием завершения. FIFO/DMA усложнят короткую передачу;
их необходимость следует обосновывать измерениями. CS надо отпускать после
фактического окончания сдвига последнего бита, а не сразу после записи TXBUF.
Возможность DMA именно для выбранного периферийного блока отдельно проверять
по TRM, не переносить механически решение STM32.
Для будущего порта STM32 можно сохранить общий расчёт и формат слова,
а отправку реализовать аппаратным SPI на выводах конкретной платы. Нынешний
эмулятор лишь генерирует поля ЦАП в журнале; он не подтверждает физические
SPI-фронты и выходной ток устройства.
## 8. Практический порядок работ и проверка
1. Установить модель ЦАП, назначение GPIO9, схемные инверсии и требования timing.
2. Исправить порядок готовности ЦАП при запуске и защитить деление на ноль.
3. Согласовать диапазоны уставок, исправить ограничение и обрезание кода.
4. Снять текущие CS/SCLK/DIN при запуске, рабочем разгоне и нагрузке CAN/RS.
5. Нормировать программные задержки; аппаратный SPI выбирать по результатам измерений.
Логический анализатор подключить к CS, SCLK, DIN и общей земле; при необходимости
добавить GPIO9. Записать 16 бит каждого кадра, порядок битов, `0x9002`,
минимум/середину/максимум кода, setup/hold DIN, CS setup/hold, SCLK high/low,
длину кадра и интервал обновления. Отдельно проверить первый кадр после сброса.
Частоту дискретизации анализатора выбрать по измеренному SCLK с запасом.
Осциллографом проверить форму фронтов и выбросы, внешним измерителем — ток.
После правок проверить граничные и ошибочные уставки, `maxx=0`, калибровку,
разгон/останов, cInitDac, сохранение параметров EEPROM одновременно с CAN/RS.
Тесты расчёта должны фиксировать требуемое округление и поведение вне диапазона;
программная трасса GPIO — количество фронтов и порядок данных. Проверка GPIO
на компьютере не заменяет измерение времён на собранной плате.
## 9. Основания анализа
Факты о текущем поведении взяты из следующих файлов; номера строк относятся
к рабочей копии на дату анализа:
- [Формирование кадра, инициализация, расчёт выхода и разгон](C:/setcorp/git/tms_periph_28335/167/Source/Internal/DAC.c:45).
- [Запуск таймера и порядок инициализации](C:/setcorp/git/tms_periph_28335/167/Source/Internal/main.c:26).
- [Вызов Load_runner из ISR](C:/setcorp/git/tms_periph_28335/167/Source/Internal/measure.c:119).
- [Частоты и время разгона](C:/setcorp/git/tms_periph_28335/167/Source/Internal/Include/measure.h:73).
- [Назначение линий платы](C:/setcorp/git/tms_periph_28335/167/Source/Internal/Include/GPIO_table.h:294).
- [Mux и направления GPIO](C:/setcorp/git/tms_periph_28335/167/Source/Internal/peripher.c:44).
- [Аппаратный SPI EEPROM](C:/setcorp/git/tms_periph_28335/167/Source/Internal/spise2p.c:98).
- [Счётчик ассемблерной задержки](C:/setcorp/git/tms_periph_28335/167/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm:62).
- [Настройки PLL и CPU_RATE](C:/setcorp/git/tms_periph_28335/167/Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h:66).
- [Приоритеты прерываний](C:/setcorp/git/tms_periph_28335/167/Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h:61).
Модель ЦАП и электрическая схема не установлены. Режим выборки, назначение
командных битов и допустимые длительности нельзя считать подтверждёнными
до сверки с документацией конкретной микросхемы. Сборка/прошивка и стендовые
измерения в рамках подготовки этого документа не выполнялись.

View File

@@ -1,119 +0,0 @@
# periph_28335: общая панель RS/CAN и регистратор УМП
## Где находятся панели
В верхнем ряду вкладок, рядом с **Altera Logic**, появилась **periph_28335**.
Внутри неё:
- **Dima / CAN terminal** — существующий CAN-терминал, его проекты, узлы и настройки адаптера;
- **rs232_periph_28335** — существующие операции RS232/485, Modbus и настройки COM;
- **Логгер УМП** — единая панель графиков и архива для обоих транспортов.
В общей группе CAN остались «Шина CAN / мост» и «DevBoard_V1».
В общей группе RS232/485 остался RS_TERMINAL_2812.
Терминалы сохраняют свои соединения: перенос вкладок не создаёт новые порты.
## Онлайн и чтение по CAN
1. Откройте **periph_28335 → Dima / CAN terminal → Настройки**.
2. Выберите Candle/gs_usb либо SLCAN/Lawicel и канал адаптера.
Для штатной прошивки Бальзам 167 используется CAN 250000 бит/с.
Нажмите «Подключить».
3. Перейдите в соседнюю вкладку **Логгер УМП**.
4. В строке **Связь логгера** выберите **CAN · адаптер Dima**.
5. Укажите **CAN-плата (Mode)**: физический номер платы в прошивке, 1..16.
Платы нагрузки Бальзам 167 имеют номера 5/6; выбирайте фактически подключённую.
Это не RS-адрес 16 и не индекс строки таблицы Dima. Выбор проекта в Dima
не меняет CAN-адрес регистратора: он явно определяется этим полем.
6. Нажмите **Начать запись** или **Онлайн**, если запись на плате уже идёт.
Остальные действия, флажки, легенда, единицы мА и CSV одинаковы для RS и CAN.
7. После команды отключения и секунды постинтервала нажмите
**Прочитать отключение**. Запись текущего банка на плате продолжается.
Кнопка **Настройки связи** открывает настройки выбранного транспорта.
Состояние адаптера/порта и адреса CAN постоянно отображаются над графиком.
**Прервать обмен** останавливает чтение GUI, не посылая команду остановки
регистратора или УМП. При переключении канала/платы незавершённые запросы
отменяются, поздние ответы не продолжают старую цепочку.
Для RS выберите **RS232/485** и настройте COM в соседней RS-панели:
обычно 115200, адрес 16. Сообщения «не подключён» и «занят запросом» разделены.
Отключение RS-порта не останавливает CAN-просмотр. CAN-разрыв не мешает RS.
Демо, если оно включено в сборке, по-прежнему работает без физической платы.
## Изменения прошивки
Для CAN требуется новая прошивка этой ветки. Предыдущая версия регистратора
умела отдавать данные только через Modbus. Старая плата игнорирует новые
служебные запросы; GUI сообщает о тайм-ауте без изменения команд УМП.
- MBOX0: прежняя передача технологических данных, ID 0xBA0010 + Mode - 1.
- MBOX1: прежний приём команд, ID 0xBA0000 + Mode - 1; дополнительно
распознаётся служебный заголовок 0x1F00 и длина ровно 8 байт.
- MBOX2: отдельные ответы регистратора, ID 0xBA0020 + Mode - 1.
Биты маски записи регистров у служебного запроса равны нулю. Обработчик
перехватывает его до изменения modbus[] и до журналирования CAN-команд:
опрос собственного журнала не заполняет журнал.
Запрос ставится в очередь из ISR. Основной цикл формирует целый снимок
под короткой блокировкой IRQ и отправляет максимум один кадр за вызов
UMP_CAN_service(). Ожидания передачи в цикле нет. Перед следующим
фрагментом приоритет отдаётся ожидающей штатной телеметрии MBOX0.
Если ACK служебного mailbox не приходит 250 тиков таймера, передача
отменяется. При этом штатные CAN-команды и MBOX0 не отменяются.
По CAN доступны те же расширенные адреса 0x1000 / 0x1010 / 0x1100,
состав записи и версия снимка 2. Новый протокол не даёт писать через
служебный запрос в технологические адреса 0..127.
## Формат кадров
CAN 2.0B, расширенный ID, 8 байт данных. Порядок соответствует существующей
прошивке: MDL (слова 1,2), затем MDH (заголовок, слово 0). Каждое слово
содержит сначала старший байт.
Запрос: `[адрес BE16, значение/длина BE16, 0x1F00 BE16, token:function BE16]`.
Функция 3 — чтение, 6 — запись; token — номер запроса 1..255.
Ответ: `[данные0 BE16, данные1 BE16, (0x1F00+индекс) BE16, token:error BE16]`.
Номер фрагмента 0..61, в нём два слова снимка. Ошибка 0 означает успех,
1 — неизвестная функция, 2 — неверный адрес/диапазон, 3 — запрещённое значение.
У записи успешный ответ содержит эхо адреса и значения.
Пример: Mode=5, token=7, чтение статуса 16 слов.
Запрос ID `0x00BA0004`, данные `10 00 00 10 1F 00 07 03`.
Ответы ID `0x00BA0024`, восемь фрагментов по два слова.
Онлайн-снимок из 124 слов передаётся 62 фрагментами.
GUI принимает только ответ выбранной платы с номером текущего запроса,
восстанавливает порядок фрагментов, игнорирует одинаковые дубликаты и
отклоняет противоречащие. Неполный снимок не попадает на график.
После потери подтверждения записи GUI прямо сообщает, что команда могла
выполниться; автоматического повторного старта регистратора нет.
Онлайн показывает последние три записи из полного снимка. При высокой
нагрузке шины/низкой скорости возможны пропуски онлайн-отображения;
они считаются существующим счётчиком. Архив читается целиком по блокам.
Предполагается один активный читатель архива: его курсор общий для RS/CAN.
Одновременное управление архивным курсором из двух независимых программ
не поддерживается.
## Проверки и ограничения
Пройдены тесты протокола, сборки всех 62 фрагментов, неверного адреса/токена,
пропущенных и повторных фрагментов, ACK и ошибок, отмены при смене канала,
иерархии вкладок и сохранения RS/демо. Набор тестов выполнен на Qt 6 и Qt 5.
В прошивке проверен настоящий код формирования ответов через host-тест;
изменённые C-файлы прошли проверку синтаксиса Clang с исходными заголовками.
Сборка TI/CCS, проверка MAP и испытание CAN на реальной плате ещё требуются.
Особенно проверить тайминги IRQ и приоритет штатной телеметрии на нагруженной
шине. Файлы прошивки Bin/*.out/hex не заменены. Архив остаётся в ОЗУ:
команда отключения фиксирует его, пропадание питания стирает.
## Общее ядро templates
Сервер CAN/RS логгера подключён через `Source/Internal/shared_ump.c`.
Для сборки требуется соседний `../../templates`. Контракт и порты:
`templates/c/set-protocol/docs/UMP_PROTOCOL.md`.

View File

@@ -1,69 +0,0 @@
# RS232 FIFO для ПМ35 / TMS320F28335
Ветка `codex/pm35-uart-fifo`. FIFO включён **только SCI-A / COM_1 / RS232**.
SCI-B / COM_2 / RS485 сохраняет прежние настройки и обработчики без FIFO.
Скорости портов не менялись: RS232 115200; RS485 — прежние 57600/115200.
`Source/Internal/Include/RS485.h`: `RS232_USE_FIFO=1` по умолчанию.
Для сборки прежнего пути передачи определить `RS232_USE_FIFO=0`.
## Работа
- TX заполняет до 16 байт, пополняет при остатке не более 8.
- После постановки последнего байта порог переключается на 0. Следующее
прерывание завершает передачу только после пустого FIFO и `TXEMPTY`.
Ожидание внутри завершающего ISR ограничено остатком последнего символа;
передача всего FIFO внутри ISR не ожидается.
- Первый блок ставится в FIFO до разрешения TX-прерывания, под короткой
IRQ-блокировкой с восстановлением прежнего состояния.
- Убраны программные задержки перед передачей именно для SCI-A. Данные
`BM_CHAR32` и упакованный поток `BM_PACKED` сохраняют прежний порядок байтов.
Нулевая длина не обращается к указателю и не включает передатчик.
- RX читает накопленные байты из FIFO. Порог 1 сохраняет немедленный приём
коротких команд и остатка блока. `SCIRXBUF` читается один раз вместе с FE/PE.
- Ошибка/переполнение аннулирует пакет и `BS_LoadOK`, очищает FIFO. После
3–4 мс тишины обработчик таймера 1 мс возвращает SCI-A к ожиданию адреса.
Продолжающийся повреждённый поток продлевает ожидание. CMD_LOAD после
ошибки требует нового CMD_INITLOAD. Расчёт паузы предназначен для 115200.
- Счётчики отладчика: `rs_a.fifo_rx_errors`, `rs_a.fifo_overflows`.
Это UART-оптимизация. Она не меняет команды/формат логгера УМП и не подключает
экспериментальный GAS-логгер. Размеры блоков чтения УМП остаются прежними.
## Проверка
```powershell
python tests/rs232_fifo/run_test.py --cc C:/msys64/mingw64/bin/gcc.exe
```
Тест извлекает рабочие функции из `RS485.c`; заменяется только поведение
аппаратных регистров, ожидание продвижения UART и модель 16-битного char C28x.
Проверены TX-длины 0/1/2/7/8/15/16/17/31/120/253/400, упакованный блок 8194,
приём короткого/разделённого пакета и LOAD 8194, FIFO overflow, FE/PE,
восстановление после тишины, остаток сдвигового регистра и независимость SCI-B.
Полная сборка TI C2000 22.6.0.LTS:
```powershell
./build_logger.ps1 -OptimizeForSize -Rs232Fifo 1 `
-OutputDirectory "$PWD/Bin/Rs232FifoTest" -ImageName PM35_167_rs232_fifo
./build_logger.ps1 -OptimizeForSize -Rs232Fifo 0 `
-OutputDirectory "$PWD/Bin/Rs232NoFifoTest" -ImageName PM35_167_rs232_no_fifo
```
| Образ | Размер | Запас до параметров EEPROM |
|---|---:|---:|
| FIFO, `-O2 --opt_for_speed=0` | 32158 байт | 350 байт |
| Без FIFO, те же параметры оптимизации | 31234 байта | 1274 байта |
Оба BIN прошли проверку структуры SCI8 и лимита 32508 байт существующим
`check_firmware.ps1`. Старые `-O1 --opt_for_speed=3` с FIFO превышают лимит;
для этого варианта обязателен `-OptimizeForSize`. Проверка запрещает выпуск
слишком большого BIN и не даёт затронуть сохранённые параметры.
Оптимизация размера применяется ко всей сборке, поэтому временные
характеристики приложения нужно проверить на стенде.
На плату образы не загружены. Пока подтверждены сборка и тесты модели;
ускорение чтения логгера и устойчивость физического RS232 не измерены.
Для стенда сравнить одно и то же чтение архива на двух образах, проверить
CMD_LOAD/UPLOAD и параллельный RS485. FIFO не увеличивает baud rate.

View File

@@ -1,241 +0,0 @@
# Логгер запуска и отключения УМП: прошивка Бальзам 167 и SetGUI
## Назначение и работа оператора
В SetGUI открыть ПМ35 → Настройки, выбрать COM, скорость (обычно 115200)
и адрес контроллера (обычно 16). Затем открыть вкладку **Логгер УМП**.
Подключение используется существующее: прямой RS232/RS485 Modbus RTU.
CAN-команды от управляющего контроллера фиксируются самой платой нагрузки.
1. **Начать запись** включает только регистратор, не пуск УМП.
Период снимков по умолчанию 20 мс, диапазон 1–1000 мс.
2. Флажки выбирают отображаемые сигналы. Аналоги рисуются линиями,
дискретные сигналы — отдельными дорожками. Выбор не меняет состав
записи на плате: скрытую кривую можно включить после захвата.
3. **Онлайн** подключает график к уже идущей записи, в том числе после
восстановления соединения. Тайм-аут не посылает плате команду останова.
4. Фронт `cUMPreset` (бит 6 команды 0x7F) или спад `cUMPstart` (бит 7)
запускает фиксацию отключения. Ещё через 1000 тиков таймера / 1 секунду
банк становится архивом. Повторные команды внутри этой секунды
не продлевают интервал. Другие изменения команд не служат триггером.
5. **Прочитать отключение** загружает архив, не останавливая запись на плате.
На время чтения и просмотра архива онлайн-график приостанавливается;
вернуться к нему можно кнопкой **Онлайн**.
6. **Остановить и прочитать** останавливает только регистратор и читает
текущий банк. При этом существующий архив отключения остаётся доступным.
7. **Сохранить CSV** сохраняет все поля загруженного/онлайн-буфера,
включая невидимые кривые, время и код события. История GUI ограничена
800 последними точками; это не непрерывная запись на диск.
При разрыве связи журнал на плате продолжает работать. Архив хранится в ОЗУ
до следующей фиксации отключения либо перезагрузки/пропадания питания.
EEPROM не используется: под отключением в этой задаче понимается команда
управляющего контроллера, а не потеря питания.
## Память и точность
Использована существующая секция `.logg` по адресу 0x200000: 64000
16-битных слов. Два банка по 760 записей × 42 слова занимают 63840 слов (160 слов свободны).
Текущий банк кольцевой. При триггере сохраняются последние до 379 записей,
добавляется событие отключения, оставшаяся половина банка отведена
постинтервалу. При 20 мс это до примерно 7.6 секунды до отключения и 1 секунды
после. Дополнительные события CAN и дискретов сокращают временную глубину.
При интенсивном потоке событий или периоде 1 мс постинтервал может заполнить
свои места раньше секунды. Последнее место зарезервировано под конечный
снимок; он помечается `event & 0x200`, и GUI сообщает об усечении.
Событие отключения и предыстория при этом не вытесняются.
Время — 32-битный счётчик миллисекунд записи. Он идёт только при включённом
регистраторе и не является абсолютным временем. События в одном тике имеют
одинаковую отметку; порядок сохраняется порядком записей. На перезапуске
регистратора счётчик продолжает прежнюю шкалу, при перезагрузке платы — 0.
Онлайн-опрос возвращает две последние записи каждые 40 мс. Он не гарантирует
передачу каждого события при высоком CAN-трафике, медленном UART или паузах
GUI. Номера записей позволяют убрать дубликаты и явно показать пропуски.
Полный сохранившийся фрагмент следует читать кнопкой архива. Частота 20 мс
выбрана с учётом размера кадра; на низких скоростях нужна большая пауза
снимков и подходящий тайм-аут RS.
Все писатели и чтение одного Modbus-блока используют короткие критические
секции с восстановлением прежнего состояния IRQ. Внутри нет ожидания UART,
EEPROM, выделения памяти или копирования целого банка. Реальную задержку
прерываний и длительность критических секций нужно измерить на F28335.
## Состав записи v3: 42 слова
| Слова | Данные | Единицы/смысл |
|---|---|---|
| 0–1 | Время, младшее/старшее слово | мс записи |
| 2 | Событие | 1 период, 2 CAN RX, 3 изменение I/O, 4 RS-команда, 5 конец постинтервала |
| 2, бит 8 | Триггер отключения | флаг поверх причины события |
| 2, бит 9 | Усечён постинтервал | установлен в конечном снимке |
| 3 | Commands / modbus[0x7F] | все 16 бит, в том числе пуск, сброс, инициализация и калибровка ЦАП |
| 4 | Входы OMEGA, Start_1, Res_in | биты 0,1,2, активный уровень приведён к 1 |
| 5 | START_DPTB, STOP_DPTB, RES_OUT_2 | биты 0,1,2, активный уровень приведён к 1 |
| 6 | IMPowse | остаток импульса, мс |
| 7 | WAKEpowse | остаток инициализации, тики DAC_FREQ |
| 8 | modbus[0x7B] | 12-битный код, переданный функцией dSEND в ЦАП |
| 9 | modbus[0x1C] | расчётное задание в 0.1 мА; GUI/CSV переводит в мА |
| 10–13 | sens_data[0..3] | измеренные сигналы, знаковое 16-битное значение в исходном масштабе |
| 14–17 | modbus[0..3] | маски ошибок измерений |
| 18 | CAN заголовок | адрес регистра в младших 13 битах и маска трёх слов в старших |
| 19–21 | Три слова последнего принятого CAN-кадра | без преобразования |
| 22 | Счётчик записанных CAN RX | младшие 16 бит |
| 23 | CanTimeOutErrorTR | младшие 16 бит счётчика тайм-аутов CAN TX |
| 24–25 | DAC_go, DAC_stop | исходные начальная/конечная уставки, мА |
| 26–28 | DAC_min(), DAC_max(), DAC_cal() | коды калибровки и ручного задания ЦАП |
| 29–30 | DAC_04, DAC_20 | значения соответствующих регистров |
| 31–32 | count_load, time_dac | положение и длительность разгона в тиках |
| 33–34 | эффективные dac_go/dac_stop + 4 | 0.1 мА после ограничений алгоритма; GUI переводит в мА |
| 35 | kod | целочисленное положение, используемое Anal_output |
| 36–39 | ADC_table[0..3] | значения таблицы АЦП в исходном масштабе прошивки |
| 40 | ЗПТ1: U1 + U2, ПМ67 регистр 306 / индекс 305 | исходное 16-битное слово без пересчёта |
| 41 | ЗПТ2: U3 + U4, ПМ67 регистр 9 / индекс 8 | исходное 16-битное слово без пересчёта |
Напряжения принимаются из технологических CAN-кадров с нулевыми индексами
305 и 8. Учитываются все три позиции и биты маски 0x8000/0x4000/0x2000.
Они хранятся отдельно от массива modbus[0..127], обновляются и при выключенном
логгере. Запись содержит последние принятые значения; до первого приёма — 0.
При потере связи остаётся последнее значение: отдельного признака свежести нет.
Масштаб и знаковость физического напряжения не заданы исходной таблицей;
SetGUI показывает исходное беззнаковое слово, коэффициент задаётся в интерфейсе.
**Отправленный код ЦАП не является измеренным током выхода.** В этом проекте
не установлено, какой вход аппаратно измеряет ток ЦАП. При включённом
`cCalibrDac` отправляется `DAC_cal()`, а расчётное задание 0x1C остаётся
результатом алгоритма разгона. Для диагностики это различие сохранено.
ADC_table также уже обрабатывается существующим измерительным кодом;
это не обязательно необработанный регистр ADCRESULT.
Управляющая логика не исправлялась. Например, существующая строка
`if(dac_stop>16) dac_go=16;` в Load_runner сохранена; журнал показывает
фактически получившиеся эффективные уставки, чтобы выявить такое поведение.
## Протокол расширения Modbus
Технологические адреса 0..127 сохранены. Новая область использует полный
16-битный адрес; исходная реализация игнорировала старший байт.
Сначала GUI читает 16 слов 0x1000 и проверяет сигнатуру, версию, размер записи
и тип платы. До успешной проверки расширенные записи запрещены.
Обычный ответ расширения не содержит исторических хвостовых нулей.
Между ответом и следующим запросом GUI выдерживает паузу RTU.
FC03, 0x1000, 16 слов:
| Смещение | Значение |
|---|---|
| 0,1 | 0x554D, версия 3 |
| 2,3 | состояние и число записей выбранного источника |
| 4,5 | 42 слова в записи, 760 записей в банке |
| 6 | период периодических снимков, мс |
| 7,8 | счётчик времени, младшее/старшее слово |
| 9,10 | Desk (требуется 6 / dsk_LOAD), Mode |
| 11 | частота временной базы, 1000 Гц |
| 12 | поколение архива, mod 65536 |
| 13 | число записей архива |
| 14 | оставшиеся миллисекунды постинтервала |
| 15 | состояние текущего регистратора независимо от выбора источника |
Состояния: 0 — ещё не запущен, 1 — запись, 3 — остановлен/архив.
FC06:
- 0x1000: 1 — новый текущий журнал, 0 — остановить его;
- 0x1001: период 1..1000, менять только при остановленном журнале;
- 0x1002: хронологический индекс первой записи окна 0..759;
- 0x1003: источник окна, 0 — текущий остановленный банк, 1 — архив отключения.
FC03, 0x1010, до 120 слов: окно от установленного индекса; для целых записей v3 читать 42 или 84 слова.
CAN допускает 42/84 и прежние размеры 40/80/120; RTU допускает 1..120 слов.
Чтение текущего банка этим окном во время записи не выдаёт изменяющиеся
данные. GUI сначала останавливает его; архив можно читать при работающем
текущем банке. После всех блоков GUI повторно проверяет поколение архива;
при замене во время чтения результат не подменяет предыдущий график.
FC03, 0x1100, ровно 124 слова: онлайн-блок. Слова 0,1 — 32-битный номер
первой записи, 2 — число записей 0..2, 3 — поколение архива, далее до двух
записей по 42 слова. Неиспользованные слова равны нулю. Окно онлайн не
зависит от курсора/выбора архива. Разделение 0x1010 и 0x1100 предотвращает
пересечение двух окон.
Недопустимые диапазоны и значения возвращают исключения Modbus 2/3.
CRC и разбор стандартного ответа GUI используют существующее общее ядро.
SetGUI распознаёт v2 (40 слов, 800 записей) и v3 (42 слова, 760 записей).
Для v2 новые напряжения недоступны (NaN), для v3 доступны графики и CSV.
CAN-валидация общей библиотеки расширена размерами 42/84 слова.
Исходники протокола подключаются к прошивке из templates/c/set-protocol.
## Проверка и запуск
Полная сборка исправления: `./build_logger.ps1`. По умолчанию используется
`../newProject/SETGUI/third_party/templates`; другую копию можно указать
параметром `-TemplatesRoot`. В ней нужны `c/set-protocol/src/ump_protocol.c`
и `c/set-protocol/ports/tms320f28335/ump_tms28335.c` (порт УМП v3).
Само наличие папки templates не гарантирует наличие этого порта.
Результат — `Bin/LoggerFix/UKSSTMS320F28335_logger_fix.bin` (SCI8 boot),
рядом OUT и MAP. Старые образы в Bin не заменяются.
Скрипт использует TI C2000 22.6 COFF, оптимизацию размера и секции функций;
таблица `.cinit` размещена в RAML4 вместе с константами, код — в RAML0.
Для сборки из CCS добавьте `Source/Internal/shared_ump.c` в проект и каталоги
`<templates>/c/set-protocol`, `<templates>/c/set-protocol/ports/tms320f28335`
в include path; используйте параметры оптимизации из скрипта.
При загрузке `main()` вызывает `ump_log_init()` до включения прерываний.
Это обязательно для TI COFF: стартовый код не обнуляет неинициализированные
переменные `.ebss`. Без явной инициализации состояние, счётчики и номера
банков могут содержать остаточные значения RAM. Очистка `.logg` функцией
`clear_mem()` эти переменные не затрагивает. Повторный запуск записи через
FC06 не вызывает загрузочную инициализацию и сохраняет архив и шкалу времени.
Регрессия `python tests/ump_logger/run_init_test.py` (GCC в PATH) проверяет
запуск с ненулевой RAM и отрицательный контроль без инициализации;
внешняя библиотека `templates/c/set-protocol` для этого теста не нужна.
Изменены исходники прошивки и SetGUI. Готовый образ в Bin не обновлялся.
Для платы необходима сборка штатным TI C2000/CCS, проверка размещения .text,
.stack, .ebss и .logg по MAP, прошивка и испытание на стенде.
Автотест C в tests/ump_logger компилирует непосредственно log_to_mem.c
с подменой GPIO/IRQ. Проверяет кольцо, граничные адреса, обе команды
отключения, защиту триггера от переполнения, переключение банков,
сохранность архива во время дальнейшей записи и контрольные поля CAN/ЦАП.
Это проверка алгоритма на компьютере, не проверка таймингов и 16-битной ABI
TI. Отдельно выполнена синтаксическая проверка изменённых C-файлов Clang
с исходными заголовками и декларациями TI-интринсиков.
Тесты SetGUI: tests/test_ump_logger.py и tests/test_periph28335_tab.py.
Они проверяют единицы мА, битовые сигналы, временные метки, несовместимую
прошивку, порядок команд, архив при активной записи, замену поколения,
дубликаты/пропуски онлайн, потерю связи и флажки графиков.
Проверка на стенде: включить запись → подать CAN-пуск → изменить уставку →
подать откл. → через секунду прочитать архив → сверить код ЦАП, ток внешним
измерителем и физические входы/выходы; затем повторить с разрывом RS.
Период 1 мс проверить отдельно под максимальной CAN-нагрузкой.
Для сборки v3 нужен templates/main начиная с коммита c0ee7c4
(поддержка CAN-чтения 42/84 слов и порт TMS320F28335).
## Пересечение образа 34a95bc5 с параметрами EEPROM
Образ `UKSSTMS320F28335_34a95bc5.bin` имеет размер 32518 байт.
`Save_params` записывает 129 слов с адреса `0x3FFF-(128+1)`;
драйвер EEPROM умножает адрес на 2. Параметры начинаются с байта 32508.
Последние 10 байт BIN пересекаются с параметрами: два последних адреса
таблицы переходов `ump_log_read` (регистры 0x100E/0x100F) и завершающее
нулевое слово загрузочной таблицы. Сохранение параметров повреждает эту
часть образа для последующей загрузки. Это установленный дефект образа;
причину таймаута на конкретной плате нужно подтвердить повторной проверкой.
В исправлении временный снимок RS перенесён со стека в статический буфер:
обработчики RS вызываются последовательно из main, а перед возвратом
снимок полностью кодируется в собственный буфер UART. CAN имеет свой буфер.
Сборка `build_logger.ps1` использует параметры CCS Debug (-O1, speed=3)
и создаёт отдельный `Bin/LoggerEepromFix/UKSSTMS320F28335_logger_eeprom_fix.bin`.
Проверенный размер — 32494 байта, запас до параметров — 14 байт.
Оба сценария сборки вызывают `check_firmware.ps1` до публикации BIN.
Проверяются размер, формат SCI8, полнота блоков и конец загрузочной таблицы.
При превышении границы остаётся только файл `.pending`; готовый BIN
не публикуется. Проверка: `python tests/ump_logger/test_firmware_image.py`.
После перепрошивки требуется проверка на плате; проверка на ПК её не заменяет.

View File

@@ -128,8 +128,7 @@ SECTIONS
{
/* Allocate program areas: */
/* Keep initialization tables out of the code RAM block. */
.cinit : > RAML4 PAGE = 0
.cinit : > RAML0 PAGE = 0
.pinit : > RAML0 PAGE = 0
.text : > RAML0 PAGE = 0
codestart : > BEGIN PAGE = 0

View File

@@ -136,12 +136,8 @@ void Load_runner()
dac_stop=DAC_stop-4;
if(dac_go<0) dac_go=0;
if(dac_go>5) dac_go=5;
if(dac_stop>16) dac_go=16;
if(dac_stop>16) dac_stop=16;
if(dac_stop<=dac_go) dac_stop=dac_go+1;
/* Для лога сохраняем реальные ограниченные уставки:
* внутренние dac_go/stop отсчитываются от 4 мА. */
ump_dac_go10 = (unsigned int)((dac_go + 4.0) * 10.0);
ump_dac_stop10 = (unsigned int)((dac_stop + 4.0) * 10.0);
}
if(count_load > (time_dac/2))count_load++;
@@ -158,11 +154,6 @@ void Load_runner()
x = (x+1)&0x3FF;
}
/* Снимок стадии разгона для сопоставления команды CAN,
* ожидаемого тока и кода, действительно отправленного ЦАП. */
ump_dac_ramp = count_load;
ump_dac_duration = time_dac;
ump_dac_position = (unsigned int)sinus;
preStart = cUMPstart;
if(!x || cInitDac)

View File

@@ -3,6 +3,5 @@ void Anal_output(long vrot, long maxx);
void Init_DAC(void);
void Setup_DAC_time(void);
/* Счётчик пускового импульса и выдержки инициализации доступны логгеру. */
extern unsigned long IMPowse, WAKEpowse;
extern unsigned long IMPowse;
extern unsigned int period_dac, time_dac;

View File

@@ -1,3 +1,12 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************
RS485.h
****************************************************************
* Процедуры работы с UART *
****************************************************************/
#ifndef _RS485
#define _RS485
@@ -10,10 +19,6 @@
//#include "cntrl_adr.h"
//#include "params.h"
#ifndef RS232_USE_FIFO
#define RS232_USE_FIFO 1
#endif
#define COM_1 1
#define COM_2 2
@@ -62,10 +67,6 @@ typedef struct
int RS_FlagSkiping;
unsigned long curr_baud;
unsigned long time_wait_rs_out;
#if RS232_USE_FIFO
volatile unsigned int fifo_tx_active, fifo_rx_guard;
volatile unsigned long fifo_rx_errors, fifo_overflows;
#endif
} RS_DATA;
@@ -114,13 +115,7 @@ void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
// Îæèäàíèå çàâåðøåíèà ïåðåäà÷è UART
// wait for TRDY =1 for empty state
#if RS232_USE_FIFO
void RS_FifoWait(RS_DATA *rs_arr);
void RS_FifoTick1ms(void);
#define RS_Wait4OK(x) RS_FifoWait(x)
#else
#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY))
#endif
/** Ïåðåêëþ÷åíèå ëèíèè íà ïðèåì */
#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;

View File

@@ -1,3 +1,12 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, ÊËÀÈÍ, ÊËÂÑÏ ====== */
/* ÖÍÈÈ ÑÝÒ (ñ) 1998-2000 ã. */
/****************************************************************/
/* Bios_dsp.h */
/****************************************************************/
/* Îñíîâíûå êîììàíäû BIOS */
/****************************************************************/
#ifndef _BIOS_DSP
#define _BIOS_DSP

View File

@@ -1,3 +1,13 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************
cntrl_adr.h
****************************************************************
* Адрес контроллера *
****************************************************************/
#ifndef _CNTRL_ADR
#define _CNTRL_ADR

View File

@@ -1,6 +1,3 @@
void InitCan(int Port, int DevNum);
void CAN_send(int Port, int data[], int Addr);
extern int CAN_input_data[];
/* Íåáëîêèðóþùàÿ ïåðåäà÷à îòâåòîâ ëîããåðà îòäåëüíûì CAN mailbox. */
void UMP_CAN_service(void);

View File

@@ -1,3 +1,13 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2001г. */
/****************************************************************/
/* log_to_mem.h
****************************************************************
* Запись логов в памyть *
****************************************************************/
#ifndef _LOG_TO_MEM
#define _LOG_TO_MEM
@@ -32,24 +42,6 @@ extern LOG Log;
/* Î÷èñòêà ïàìàòè (îáíóëåíèå) */
void clear_mem();
/* Ëîããåð ÓÌÏ: îòäåëüíîå àäðåñíîå ïðîñòðàíñòâî Modbus, áåç èçìåíåíèÿ
* 128 òåõíîëîãè÷åñêèõ ðåãèñòðîâ. Äâà áàíêà ïî 760 çàïèñåé:
* òåêóùèé êîëüöåâîé æóðíàë è çàôèêñèðîâàííûé ôðàãìåíò îòêëþ÷åíèÿ. */
#define UMP_LOG_BASE 0x1000U
#define UMP_LOG_DATA 0x1010U
#define UMP_LOG_WORDS 42U
#define UMP_LOG_CAPACITY 760U
#define UMP_LOG_LIVE_RECORDS (120U / UMP_LOG_WORDS)
#define UMP_LOG_LIVE 0x1100U
extern unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
void ump_log_init(void);
void ump_log_tick(void);
void ump_log_io(void);
void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c);
void ump_log_rs(void);
unsigned int ump_log_read(unsigned int address);
int ump_log_write(unsigned int address, unsigned int value);
#ifdef __cplusplus
}
#endif

View File

@@ -1,3 +1,4 @@
// <20><><E2>
#ifndef _MEASURE
#define _MEASURE

View File

@@ -1,3 +1,18 @@
/*=====================================================================
File name : SPISE2P.H
Originator : Settu Duraisamy
C2000 Applications Team
Texas Instruments
Description :
Header file containing object definitions, proto type
declaration and default object initializers for
SPI Serial EEPROM driver using VSPI
Date : 30/6/2003 (DD/MM/YYYY)
=======================================================================*/
#ifndef __SPISE2P_H__
#define __SPISE2P_H__

View File

@@ -1,9 +0,0 @@
/* Shared logger protocol; application owns IRQ protection and CAN scheduling. */
#ifndef UMP_CAN_PROTOCOL_H
#define UMP_CAN_PROTOCOL_H
#include "log_to_mem.h"
#include "ump_tms28335.h"
#define UMP_CAN_MARKER UMP_MARKER
#define UMP_CAN_MAX_WORDS UMP_MAX_WORDS
#define ump_can_prepare ump_tms28335_prepare
#endif

View File

@@ -1,3 +1,13 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, ÊËÀÈÍ, ÊËÂÑÏ ====== */
/* ÖÍÈÈ ÑÝÒ (ñ) 1998-2000 ã. */
/****************************************************************
RS485.ñ
****************************************************************
* Ïðîöåäóðû ðàáîòû ñ UART *
****************************************************************/
//#include "big_dsp_module.h"
@@ -21,11 +31,6 @@ static char size_cmd15=1;
void RS_RX_Handler(RS_DATA *rs_arr);
void RS_TX_Handler(RS_DATA *rs_arr);
#if RS232_USE_FIFO
static int RS_FifoStart(RS_DATA *, unsigned int *, unsigned long, int);
static void RS_FifoTx(RS_DATA *);
static void RS_FifoAbort(RS_DATA *);
#endif
/** Îáðàáîò÷èê ïðåðûâàíèé UART - ïðèíàòî */
interrupt void RSA_RX_Handler(void)
@@ -110,24 +115,6 @@ void RS_RX_Handler(RS_DATA *rs_arr)
for(;;) // 'goto' ýòî íå îïåðàòîð àçûêà Ñ
{
#if RS232_USE_FIFO
if (rs_arr->commnumber == COM_1) {
unsigned int received;
if (rs_arr->SciRegs->SCIFFRX.bit.RXFFOVF || rs_arr->SciRegs->SCIRXST.bit.RXERROR) {
RS_FifoAbort(rs_arr); return;
}
if (!rs_arr->SciRegs->SCIFFRX.bit.RXFFST) {
rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1;
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
return;
}
received=rs_arr->SciRegs->SCIRXBUF.all; /* one pop, data + FE/PE */
if (received & 0xC000U) { RS_FifoAbort(rs_arr); return; }
if (rs_arr->fifo_rx_guard) { rs_arr->fifo_rx_guard=4; continue; }
Rc=received & 255U;
} else
#endif
{
if(!rs_arr->SciRegs->SCIRXST.bit.RXRDY) // Receiver ready flag
{
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
@@ -145,8 +132,6 @@ void RS_RX_Handler(RS_DATA *rs_arr)
continue;
}
}
if(rs_arr->RS_DataReady) continue; // Íå çàáðàëè äàííûå
if (rs_arr->RS_Flag9bit==1) // äëà RS485????????
@@ -259,9 +244,6 @@ void RS_RX_Handler(RS_DATA *rs_arr)
/** Îáðàáîò÷èê ïðåðûâàíèé UART - ïîñëàíî */
void RS_TX_Handler(RS_DATA *rs_arr)
{
#if RS232_USE_FIFO
if (rs_arr->commnumber == COM_1) { RS_FifoTx(rs_arr); return; }
#endif
char RS_BytePtr;
// unsigned int i;
@@ -306,7 +288,6 @@ void RS_TX_Handler(RS_DATA *rs_arr)
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
// rs_arr->SciRegs->SCIFFTX.bit.TXINTCLR=1; // Clear INT flag
}
/** Èíèöèàëèçàöèà ìàññèâà äëèí êîìàíä */
@@ -358,9 +339,6 @@ void RS_SetBitMode(RS_DATA *rs_arr,int n)
@see RS_BSend, RS_TRANSMIT_INTR */
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf,unsigned long len)
{
#if RS232_USE_FIFO
if (rs_arr->commnumber == COM_1) return RS_FifoStart(rs_arr,pBuf,len,BM_CHAR32);
#endif
unsigned int i;
for (i=0; i <= 30000; i++){} /* Ïàóçà äëà PC */
@@ -391,15 +369,11 @@ int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf,unsigned long len)
RS_Line_to_receive(rs_arr); /* ðåæèì ïðèåìà RS485 */
}
return 0;
}
// Ïîñûëêà áëîêà óïàêîâàííûõ áàéòîâ
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len)
{
#if RS232_USE_FIFO
if (rs_arr->commnumber == COM_1) return RS_FifoStart(rs_arr,pBuf,len,BM_PACKED);
#endif
RS_Line_to_send(rs_arr); // ðåæèì ïåðåäà÷è RS485
@@ -417,7 +391,6 @@ int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len)
SCI_send(rs_arr,HIBYTE(*pBuf));// Ïåðåäàåì ïåðâûé áàéò
return 0;
}
/** Óñòàíàâëèâàåò ñêîðîñòü îáìåíà.
@@ -511,20 +484,7 @@ void setup_uart(char commnumber, unsigned long speed_baud)
SciRegs->SCICTL1.bit.TXENA=1;
SciRegs->SCICTL1.bit.RXENA=1;
#if RS232_USE_FIFO
if (commnumber == COM_1) {
SciRegs->SCIFFTX.all=0xC008U; /* enhancement, reset held, TX level 8, IRQ off */
SciRegs->SCIFFRX.all=0x0061U; /* reset held, RX level 1, IRQ on */
SciRegs->SCIFFCT.all=0;
SciRegs->SCIFFRX.bit.RXFFOVRCLR=1;
SciRegs->SCIFFTX.bit.TXFFINTCLR=1;
SciRegs->SCIFFTX.bit.TXFIFOXRESET=1;
SciRegs->SCIFFRX.bit.RXFIFORESET=1;
rs_arr->fifo_tx_active=rs_arr->fifo_rx_guard=0;
rs_arr->fifo_rx_errors=rs_arr->fifo_overflows=0;
} else
#endif
SciRegs->SCIFFTX.bit.SCIFFENA=0; // fifo off
SciRegs->SCIFFTX.bit.SCIFFENA=0; // fifo off
SciRegs->SCIFFRX.bit.RXFFIL=1; // Äëèíà íàèìåíüøåé êîìàíäû
setup_arr_cmd_length();
@@ -597,117 +557,3 @@ void test_rs_live(RS_DATA *rs_arr)
RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485
RS_SetBitMode(rs_arr,9);
}*/ }
#if RS232_USE_FIFO
/* FIFO is exclusively SCI-A / RS232. SCI-B keeps the legacy path. */
void RS_FifoWait(RS_DATA *rs_arr)
{
if (rs_arr->commnumber != COM_1) {
while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }
return;
}
while (rs_arr->fifo_tx_active || rs_arr->SciRegs->SCIFFTX.bit.TXFFST ||
!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }
}
static void RS_FifoTx(RS_DATA *rs_arr)
{
unsigned int data;
if (!rs_arr->fifo_tx_active) {
rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=0;
} else if (rs_arr->RS_SendLen == rs_arr->RS_SLength) {
/* Level 0 interrupt: FIFO drained, last symbol may still be shifting.
* Do not finish on TXFFST alone. At most one symbol remains. */
if (rs_arr->SciRegs->SCIFFTX.bit.TXFFST) {
rs_arr->SciRegs->SCIFFTX.bit.TXFFINTCLR=1;
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
return;
}
rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=0;
while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }
if (rs_arr->RS_SendBlockMode == BM_CHAR32) {
RS_SetBitMode(rs_arr,9);
rs_arr->flag_TIMEOUT_to_Send=false;
}
rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0;
rs_arr->SciRegs->SCIFFRX.bit.RXFFOVRCLR=1;
rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1;
rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=1;
enableUARTInt(rs_arr);
rs_arr->SciRegs->SCIFFRX.bit.RXFFIENA=1;
rs_arr->fifo_tx_active=0;
} else {
while (rs_arr->RS_SendLen < rs_arr->RS_SLength &&
rs_arr->SciRegs->SCIFFTX.bit.TXFFST < 16) {
if (rs_arr->RS_SendBlockMode == BM_CHAR32)
data=*rs_arr->pRS_SendPtr++;
else if (rs_arr->RS_SendLen & 1U)
data=LOBYTE(*rs_arr->pRS_SendPtr++);
else data=HIBYTE(*rs_arr->pRS_SendPtr);
SCI_send(rs_arr,data);
rs_arr->RS_SendLen++;
}
rs_arr->SciRegs->SCIFFTX.bit.TXFFIL=
rs_arr->RS_SendLen == rs_arr->RS_SLength ? 0 : 8;
}
rs_arr->SciRegs->SCIFFTX.bit.TXFFINTCLR=1;
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
}
static int RS_FifoStart(RS_DATA *rs_arr,unsigned int *buffer,unsigned long count,int mode)
{
unsigned int saved;
if (!count) return 0;
if (!buffer) return -1;
RS_FifoWait(rs_arr); /* before replacing the previous transfer's counters */
saved=__disable_interrupts();
rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=0;
rs_arr->SciRegs->SCIFFRX.bit.RXFFIENA=0;
enableUARTIntW(rs_arr);
RS_SetBitMode(rs_arr,8);
rs_arr->pRS_SendPtr=buffer;
rs_arr->RS_SLength=count;
rs_arr->RS_SendLen=0;
rs_arr->RS_SendBlockMode=mode;
rs_arr->fifo_tx_active=1;
RS_FifoTx(rs_arr); /* prime before enabling a possibly immediate TX IRQ */
rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=1;
__restore_interrupts(saved);
if (count == 1 && mode == BM_CHAR32) RS_FifoWait(rs_arr);
return 0;
}
static void RS_FifoAbort(RS_DATA *rs_arr)
{
rs_arr->fifo_rx_errors++;
if (rs_arr->SciRegs->SCIFFRX.bit.RXFFOVF) rs_arr->fifo_overflows++;
rs_arr->RS_DataReady=0; rs_arr->BS_LoadOK=0;
rs_arr->RS_PrevCmd=0; rs_arr->RS_Cmd=0;
rs_arr->RS_Flag9bit=0; rs_arr->RS_FlagSkiping=1;
rs_arr->fifo_rx_guard=4;
rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0;
rs_arr->SciRegs->SCIFFRX.bit.RXFFOVRCLR=1;
rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1;
if (rs_arr->SciRegs->SCIRXST.bit.RXERROR) {
rs_arr->SciRegs->SCICTL1.bit.SWRESET=0;
rs_arr->SciRegs->SCICTL1.bit.SWRESET=1;
}
rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=1;
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
}
void RS_FifoTick1ms(void)
{
unsigned int saved=__disable_interrupts();
RS_DATA *p=&rs_a;
if (p->SciRegs && p->fifo_rx_guard) {
if (p->SciRegs->SCIFFRX.bit.RXFFST) p->fifo_rx_guard=4;
else if (--p->fifo_rx_guard == 0) {
p->RS_HeaderCnt=0;p->RS_RecvLen=0;
p->RS_FlagBegin=1;p->RS_FlagSkiping=0;
RS_SetBitMode(p,9); /* fresh address after 3..4 ms of idle */
}
}
__restore_interrupts(saved);
}
#endif

View File

@@ -1,3 +1,13 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************
Bios.c
**************************************************************
Основные комманды BIOS *
дла работы с RS232
****************************************************************/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "RS485.h"
#include "bios_dsp.h"

View File

@@ -1,3 +1,13 @@
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************
cntrl_adr.c
****************************************************************
* Адрес контроллера *
****************************************************************/
#include "cntrl_adr.h"
#define ADDR_FOR_ALL_DEF 10

View File

@@ -11,8 +11,6 @@
#include "RS485.h"
#include "message.h"
#include "peripher.h"
#include "log_to_mem.h"
#include "ump_can_protocol.h"
// Prototype statements for functions found within this file.
@@ -32,16 +30,6 @@ int CanTimeOutErrorTR = 0;
int wait=0;
/* MBOX2 âûäåëåí ïîä îòâåòû ðåãèñòðàòîðà; øòàòíûé MBOX0 ïðîäîëæàåò
* ïåðåäàâàòü òåõíîëîãè÷åñêèå äàííûå íåçàâèñèìî. ISR òîëüêî ñòàâèò çàïðîñ,
* à ñíèìîê è îòïðàâêà êîðîòêèìè øàãàìè âûïîëíÿþòñÿ â îñíîâíîì öèêëå. */
static volatile unsigned int ump_can_pending;
static volatile unsigned int ump_can_tag, ump_can_address, ump_can_value;
static unsigned int ump_can_reply[UMP_CAN_MAX_WORDS];
static unsigned int ump_can_length, ump_can_index, ump_can_reply_tag;
static unsigned int ump_can_waiting;
static unsigned long ump_can_sent_at;
void InitCan(int Port, int DevNum)
{
struct ECAN_REGS ECanShadow;
@@ -73,7 +61,6 @@ void InitCan(int Port, int DevNum)
// Specify that 8 bits will be sent/received
ECanMboxes->MBOX0.MSGCTRL.all = 0x00000008;
ECanMboxes->MBOX1.MSGCTRL.all = 0x00000008;
ECanMboxes->MBOX2.MSGCTRL.all = 0x00000008;
// Disable all Mailboxes
// Required before writing the MSGIDs
@@ -85,12 +72,11 @@ void InitCan(int Port, int DevNum)
// çàäàåì àäðåñ 1 àùèêa íà ïðèåì
ECanMboxes->MBOX1.MSGID.all = id + DevNum; //ïîìåíàòü!!!! 1 è 0!!!
// MBOX0 è MBOX2 ïåðåäàþò äàííûå; MBOX1 ïðèíèìàåò êîìàíäû.
ECanMboxes->MBOX2.MSGID.all = id + 0x20 + DevNum;
ECanRegs->CANMD.all = 0xFFFFFFFA;
// задаем режимы работы ащикa 0 на передачу, остальные на прием
ECanRegs->CANMD.all = 0xFFFFFFFE;
// Âêëþ÷àåì òðè mailbox: òåëåìåòðèÿ, êîìàíäû è îòâåòû ëîããåðà.
ECanRegs->CANME.all = 0x00000007;
// выбираем только 2 ащикa дла работы, остальные запрещаем
ECanRegs->CANME.all = 0x00000003;
// Clear all TAn bits
ECanRegs->CANTA.all = 0xFFFFFFFF;
@@ -210,18 +196,6 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
hiword = ECanMboxes->MBOX1.MDH.all;
loword = ECanMboxes->MBOX1.MDL.all;
/* Ñëóæåáíûé çàïðîñ ëîããåðà íå ÿâëÿåòñÿ êîìàíäîé ÓÌÏ è ñàì íå äîëæåí
* çàïîëíÿòü æóðíàë CAN-ñîáûòèÿìè ïðè îíëàéí-÷òåíèè. Êîðîòêèå êàäðû
* îòáðàñûâàþòñÿ: íåçàïîëíåííûå áàéòû mailbox ìîãëè îñòàòüñÿ îò ïðîøëîãî. */
if ((unsigned int)(hiword >> 16) == UMP_CAN_MARKER) {
if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8 && (hiword & 0xFF00UL)) {
ump_can_tag = (unsigned int)hiword;
ump_can_address = (unsigned int)(loword >> 16);
ump_can_value = (unsigned int)loword;
ump_can_pending = 1;
}
return;
}
adr = (hiword >> 16);
bit[0] = adr & 0x8000;
@@ -238,8 +212,6 @@ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes)
if(bit[1]) if(adr < ANSWER_LEN) modbus[adr] = Data[1]; adr++;
if(bit[2]) if(adr < ANSWER_LEN) modbus[adr] = Data[2];
/* Ôèêñèðóåì ïðèìåí¸ííóþ êîìàíäó äî âûõîäà èç îáðàáîò÷èêà CAN. */
ump_log_can((unsigned int)(hiword >> 16), Data[0], Data[1], Data[2]);
led2_toggle();
}
@@ -285,55 +257,3 @@ interrupt void CANa_reset_err(void)
//===========================================================================
// No more.
//===========================================================================
/* Îäèí âûçîâ îáñëóæèâàåò ìàêñèìóì îäèí êàäð è íèêîãäà íå æä¸ò ACK â öèêëå.
* Ñíèìîê ôèêñèðóåòñÿ îäèí ðàç íà çàïðîñ: CAN-ôðàãìåíòû íå ñìåøèâàþò
* çíà÷åíèÿ äî/ïîñëå ïåðåêëþ÷åíèÿ êîëüöåâîãî áàíêà. Íîâûå çàïðîñû çàáèðàåì
* ïîñëå çàâåðøåíèÿ ïðåäûäóùåãî îòâåòà. GUI äåðæèò òîëüêî îäèí çàïðîñ. */
void UMP_CAN_service(void)
{
unsigned int saved, tag, address, value, error;
uint32_t hiword, loword;
if (ump_can_waiting) {
if (ECanaRegs.CANTA.all & 4UL) {
ECanaRegs.CANTA.all = 4UL;
ump_can_waiting = 0;
} else if ((ECanaRegs.CANAA.all & 4UL) ||
((unsigned long)CpuTimer1.InterruptCount - ump_can_sent_at > 250UL)) {
/* Íåò ïîäòâåðæäåíèÿ øèíû: îòìåíÿåì òîëüêî ñëóæåáíûé mailbox.
* GUI îáíàðóæèò íåïîëíûé îòâåò ïî òàéì-àóòó; óïðàâëåíèå MBOX0
* è ïðè¸ì êîìàíä MBOX1 ïðîäîëæàþòñÿ. */
ECanaRegs.CANTRR.all = 4UL;
/* Äî ôàêòè÷åñêîãî çàâåðøåíèÿ îòìåíû mailbox íå ïåðåèñïîëüçóåì. */
if (!(ECanaRegs.CANAA.all & 4UL)) return;
ECanaRegs.CANAA.all = 4UL;
ump_can_waiting = 0;
ump_can_length = 0;
} else return;
}
if (ump_can_index >= ump_can_length && ump_can_pending) {
saved = __disable_interrupts();
tag = ump_can_tag; address = ump_can_address; value = ump_can_value;
ump_can_pending = 0;
ump_can_length = ump_can_prepare(tag & 0xFF, address, value, ump_can_reply, &error);
ump_can_reply_tag = (tag & 0xFF00) | error;
ump_can_index = 0;
__restore_interrupts(saved);
}
if (ump_can_index >= ump_can_length) return;
/* Ïåðåä ñëåäóþùèì ôðàãìåíòîì óñòóïàåì øòàòíîé òåëåìåòðèè MBOX0. */
if (ECanaRegs.CANTRS.all & 1UL) return;
if (!ump_tms28335_fragment(ump_can_reply, ump_can_length, ump_can_index/2,
ump_can_reply_tag >> 8, ump_can_reply_tag & 255U, &loword, &hiword)) {
ump_can_length = 0;
return;
}
ECanaRegs.CANTA.all = 4UL; ECanaRegs.CANAA.all = 4UL;
ECanaMboxes.MBOX2.MDH.all = hiword;
ECanaMboxes.MBOX2.MDL.all = loword;
ump_can_sent_at = CpuTimer1.InterruptCount;
ECanaRegs.CANTRS.all = 4UL;
ump_can_waiting = 1;
ump_can_index += 2;
}

View File

@@ -1,12 +1,13 @@
#include "DSP2833x_Device.h"
#include "filter_bat2.h"
#include "measure.h"
#include "package.h"
#include "RS485.h"
#include "message.h"
#include "peripher.h"
#include "DAC.h"
#include "ADC.h"
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2001г. */
/****************************************************************/
/* log_to_mem.c
****************************************************************
* Запись логов в памyть *
****************************************************************/
#include "log_to_mem.h"
int no_write = 0,
@@ -31,269 +32,3 @@ void clear_mem()
for (i=Log.Start; i<Log.Finis; i++)
*(volatile int *)i = 0;
}
/* Äâà áàíêà èñïîëüçóþò óæå âûäåëåííóþ âíåøíþþ RAM .logg (64000 ñëîâ).
* Àêòèâíûé áàíê êîëüöåâîé. ×åðåç 1000 ìñ ïîñëå êîìàíäû îòêëþ÷åíèÿ îí
* ñòàíîâèòñÿ àðõèâîì, à çàïèñü ïðîäîëæàåòñÿ âî âòîðîì áàíêå. Ïåðåêëþ÷åíèå
* çàíèìàåò ïîñòîÿííîå âðåìÿ: êîïèðîâàíèÿ 30 òûñÿ÷ ñëîâ ïîä çàïðåòîì IRQ íåò.
* Àðõèâ ïåðåæèâàåò ðàçðûâ RS-ñâÿçè, íî ÍÅ èñ÷åçíîâåíèå ïèòàíèÿ ïëàòû. */
static volatile unsigned int ump_state, ump_count, ump_cursor, ump_next;
static volatile unsigned int ump_period = 20, ump_divider;
static volatile unsigned long ump_time, ump_sequence;
static unsigned int ump_bank, ump_archive_bank = 1;
static unsigned int ump_archive_count, ump_archive_next, ump_generation;
static unsigned int ump_source, ump_post, ump_post_dropped;
static unsigned int ump_can_header, ump_can_data[3], ump_can_count;
/* Latest PM67 sums: register 306 (index 305), register 9 (index 8). */
static unsigned int ump_pm67_voltage[2];
static unsigned int ump_prev_commands, ump_prev_inputs, ump_prev_outputs;
extern int CanTimeOutErrorTR;
/* Äèàãíîñòèêà âíóòðåííèõ ïåðåìåííûõ ðàçãîíà. Îáíîâëÿåòñÿ ñàìèì Load_runner,
* íå ïåðåñ÷èòûâàåò è íå èçìåíÿåò óïðàâëÿþùèé àëãîðèòì. */
unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
/* Called once at boot, before enabling interrupts. TI COFF startup does
* not clear uninitialized globals in .ebss. Do not use for record restart:
* restart must preserve the archive, time and latest received voltages. */
void ump_log_init(void)
{
unsigned int i;
ump_state = 0; ump_count = 0; ump_cursor = 0; ump_next = 0;
ump_period = 20; ump_divider = 0;
ump_time = 0; ump_sequence = 0;
ump_bank = 0; ump_archive_bank = 1;
ump_archive_count = 0; ump_archive_next = 0; ump_generation = 0;
ump_source = 0; ump_post = 0; ump_post_dropped = 0;
ump_can_header = 0; ump_can_count = 0;
for (i = 0; i < 3; i++) ump_can_data[i] = 0;
for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0;
ump_prev_commands = 0; ump_prev_inputs = 0; ump_prev_outputs = 0;
ump_dac_ramp = 0; ump_dac_duration = 0; ump_dac_go10 = 0;
ump_dac_stop10 = 0; ump_dac_position = 0;
}
/* Ëîãè÷åñêèå óðîâíè âõîäîâ ïëàòû íàãðóçêè: ôèçè÷åñêèé íîëü îçíà÷àåò 1.
* ×òåíèå GPIO íåïîñðåäñòâåííî çäåñü ïîçâîëÿåò çàïèñàòü âõîä äî ñëåäóþùåãî
* îáíîâëåíèÿ ðåãèñòðà Inputs â îñíîâíîì öèêëå. */
static unsigned int ump_inputs(void)
{
return (!GpioDataRegs.GPADAT.bit.GPIO6) |
((!GpioDataRegs.GPADAT.bit.GPIO8) << 1) |
((!GpioDataRegs.GPADAT.bit.GPIO11) << 2);
}
/* START/STOP àêòèâíû åäèíèöåé; RES_OUT_2 àêòèâåí ôèçè÷åñêèì íóë¸ì. */
static unsigned int ump_outputs(void)
{
return GpioDataRegs.GPBDAT.bit.GPIO62 |
(GpioDataRegs.GPBDAT.bit.GPIO58 << 1) |
((!GpioDataRegs.GPADAT.bit.GPIO3) << 2);
}
/* Âûçûâàåòñÿ òîëüêî âíóòðè êîðîòêîé êðèòè÷åñêîé ñåêöèè. Âñå òðè èñòî÷íèêà
* çàïèñåé (main, CAN ISR, timer ISR) èñïîëüçóþò îäíó áëîêèðîâêó IRQ ñ
* âîññòàíîâëåíèåì ïðåæíåãî ñîñòîÿíèÿ, âêëþ÷àÿ âûçîâû èç ïðåðûâàíèÿ. */
static void ump_capture(unsigned int reason)
{
volatile unsigned int *p;
unsigned int i, commands;
if (ump_state != 1 || Desk != dsk_LOAD || !READY) return;
if (no_write || never_write) { ump_state = 3; return; }
commands = Commands;
/* Îòêëþ÷åíèå: ôðîíò cUMPreset (áèò 6) ëèáî ñïàä cUMPstart (áèò 7).
* Ïîâòîðíûå êîìàíäû íå ñäâèãàþò êîíåö óæå íà÷àòîãî ïîñòèíòåðâàëà. */
if (!ump_post && (((commands & 0x40) && !(ump_prev_commands & 0x40)) ||
(!(commands & 0x80) && (ump_prev_commands & 0x80)))) {
/* Ïîëîâèíó áàíêà ðåçåðâèðóåì ïîä ïîñòèíòåðâàë. Äàæå ïðè ïåðèîäå
* 1 ìñ èëè øêâàëå CAN ñîáûòèå îòêëþ÷åíèÿ íå âûòåñíÿåòñÿ êîëüöîì. */
if (ump_count >= UMP_LOG_CAPACITY/2) ump_count = UMP_LOG_CAPACITY/2-1;
ump_post_dropped = 0;
ump_post = 1000;
reason |= 0x100;
}
/* Ïîñëåäíåå ìåñòî îñòàâëÿåì äëÿ ñíèìêà êîíöà ïîñòèíòåðâàëà. Ïðè
* ïåðåïîëíåíèè ÷åñòíî îòìå÷àåì óñå÷åíèå áèòîì 0x200 â êîíå÷íîé çàïèñè. */
if (ump_post && ump_count >= UMP_LOG_CAPACITY-1) {
ump_post_dropped = 1;
return;
}
if (reason == 5 && ump_post_dropped) reason |= 0x200;
p = logs_block + ((unsigned long)ump_bank * UMP_LOG_CAPACITY + ump_next) * UMP_LOG_WORDS;
p[0] = (unsigned int)ump_time; p[1] = (unsigned int)(ump_time >> 16);
p[2] = reason; p[3] = commands;
p[4] = ump_inputs(); p[5] = ump_outputs();
p[6] = (unsigned int)IMPowse; p[7] = (unsigned int)WAKEpowse;
p[8] = modbus[0x7B]; p[9] = modbus[0x1C];
for (i = 0; i < 4; i++) { p[10+i] = sens_data[i]; p[14+i] = modbus[i]; }
p[18] = ump_can_header;
p[19] = ump_can_data[0]; p[20] = ump_can_data[1]; p[21] = ump_can_data[2];
p[22] = ump_can_count; p[23] = CanTimeOutErrorTR;
/* Èñõîäíûå óñòàâêè — ìÀ; ýôôåêòèâíûå óñòàâêè ïîñëå îãðàíè÷åíèé — 0.1 ìÀ.
* p[8] — îòïðàâëåííûé êîä, à p[9] — ðàñ÷¸òíîå çàäàíèå, ÍÅ èçìåðåíèå òîêà. */
p[24] = DAC_go; p[25] = DAC_stop;
p[26] = DAC_min(); p[27] = DAC_max(); p[28] = DAC_cal();
p[29] = DAC_04; p[30] = DAC_20;
p[31] = ump_dac_ramp; p[32] = ump_dac_duration;
p[33] = ump_dac_go10; p[34] = ump_dac_stop10; p[35] = ump_dac_position;
for (i = 0; i < 4; i++) p[36+i] = ADC_table[i];
p[40] = ump_pm67_voltage[0]; p[41] = ump_pm67_voltage[1];
ump_prev_commands = commands; ump_prev_inputs = p[4]; ump_prev_outputs = p[5];
ump_next++;
if (ump_next == UMP_LOG_CAPACITY) ump_next = 0;
if (ump_count < UMP_LOG_CAPACITY) ump_count++;
ump_sequence++;
}
/* Çàâåðø¸ííûé áàíê áîëüøå íå èçìåíÿåòñÿ äî ñëåäóþùåãî îòêëþ÷åíèÿ.
* Íîìåð ïîêîëåíèÿ ïîçâîëÿåò GUI îáíàðóæèòü çàìåíó àðõèâà âî âðåìÿ ÷òåíèÿ. */
static void ump_freeze(void)
{
ump_archive_bank = ump_bank;
ump_archive_count = ump_count; ump_archive_next = ump_next;
ump_generation++;
ump_bank ^= 1;
ump_count = 0; ump_next = 0; ump_post = 0;
}
void ump_log_tick(void)
{
unsigned int saved = __disable_interrupts();
if (ump_state == 1) {
ump_time++;
if (++ump_divider >= ump_period) { ump_divider = 0; ump_capture(1); }
if (ump_post && --ump_post == 0) {
ump_capture(5);
ump_freeze();
}
}
__restore_interrupts(saved);
}
/* Äîïîëíèòåëüíûé ñíèìîê òîëüêî ïðè èçìåíåíèè êîìàíä, âõîäîâ èëè âûõîäîâ.
* Ýòî íå çàìåíÿåò ïåðèîäè÷åñêóþ çàïèñü àíàëîãîâûõ âåëè÷èí â òàéìåðå. */
void ump_log_io(void)
{
unsigned int saved;
if (ump_state != 1 || Desk != dsk_LOAD) return;
saved = __disable_interrupts();
if (Commands != ump_prev_commands || ump_inputs() != ump_prev_inputs ||
ump_outputs() != ump_prev_outputs) ump_capture(3);
__restore_interrupts(saved);
}
/* Âûçûâàåòñÿ ïîñëå ïðèìåíåíèÿ ñëîâ ïðèíÿòîãî CAN-êàäðà: ñíèìîê ñîäåðæèò
* íîâûå êîìàíäû, à òàêæå èñõîäíûé àäðåñ/ìàñêó è âñå òðè ñëîâà êàäðà. */
void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c)
{
unsigned int saved, i, address, mask, data[3];
if (Desk != dsk_LOAD) return;
saved = __disable_interrupts();
data[0] = a; data[1] = b; data[2] = c;
address = header & 0x1FFFU;
mask = 0x8000U;
/* Track reception even while recording is stopped. Each mask bit
* refers to its own address, including disabled words in between. */
for (i = 0; i < 3; i++, address++, mask >>= 1) {
if (!(header & mask)) continue;
if (address == 305U) ump_pm67_voltage[0] = data[i];
if (address == 8U) ump_pm67_voltage[1] = data[i];
}
if (ump_state != 1) { __restore_interrupts(saved); return; }
ump_can_header = header;
ump_can_data[0] = a; ump_can_data[1] = b; ump_can_data[2] = c;
ump_can_count++;
ump_capture(2);
__restore_interrupts(saved);
}
void ump_log_rs(void)
{
unsigned int saved = __disable_interrupts();
ump_capture(4);
__restore_interrupts(saved);
}
/* Óïðàâëåíèå æóðíàëîì îòäåëåíî îò òåõíîëîãè÷åñêèõ êîìàíä: íà÷àëî çàïèñè
* ÍÅ çàïóñêàåò ÓÌÏ. Âûáîð àðõèâà íå îñòàíàâëèâàåò òåêóùóþ çàïèñü. */
int ump_log_write(unsigned int address, unsigned int value)
{
unsigned int saved, valid = 1;
saved = __disable_interrupts();
if (address == UMP_LOG_BASE && value == 0) {
ump_state = 3; ump_post = 0;
} else if (address == UMP_LOG_BASE && value == 1 && Desk == dsk_LOAD && READY && ump_state != 1) {
ump_count = 0; ump_next = 0; ump_cursor = 0; ump_divider = 0; ump_post = 0;
ump_source = 0;
ump_prev_commands = Commands;
no_write = 0; never_write = 0;
ump_state = 1;
ump_capture(1);
}
else if (address == UMP_LOG_BASE+1 && ump_state != 1 && value >= 1 && value <= 1000)
ump_period = value;
else if (address == UMP_LOG_BASE+2 && value < UMP_LOG_CAPACITY)
ump_cursor = value;
else if (address == UMP_LOG_BASE+3 && value <= 1) ump_source = value;
else valid = 0;
__restore_interrupts(saved);
return valid;
}
/* Ïðåîáðàçîâàíèå õðîíîëîãè÷åñêîãî èíäåêñà â ôèçè÷åñêóþ ïîçèöèþ êîëüöà.
* Äëÿ àðõèâà ñîõðàíåíû ñîáñòâåííûå count/next, íåçàâèñèìûå îò æèâîãî áàíêà. */
static unsigned int ump_word(unsigned int archived, unsigned int record, unsigned int word)
{
unsigned int count = archived ? ump_archive_count : ump_count;
unsigned int next = archived ? ump_archive_next : ump_next;
unsigned int bank = archived ? ump_archive_bank : ump_bank;
unsigned int slot;
if (record >= count) return 0;
slot = next + UMP_LOG_CAPACITY - count + record;
while (slot >= UMP_LOG_CAPACITY) slot -= UMP_LOG_CAPACITY;
return logs_block[((unsigned long)bank * UMP_LOG_CAPACITY + slot) * UMP_LOG_WORDS + word];
}
/* Âåñü Modbus-áëîê ÷èòàåòñÿ âûçûâàþùèì êîäîì ïîä îäíîé áëîêèðîâêîé IRQ.
* Ïîýòîìó timestamp/äàííûå è çàãîëîâîê îíëàéí-áëîêà îòíîñÿòñÿ ê îäíîìó
* ñîñòîÿíèþ êîëüöà, äàæå åñëè â ýòîò ìîìåíò ïðèõîäèò íîâàÿ CAN-êîìàíäà. */
unsigned int ump_log_read(unsigned int address)
{
unsigned int offset, count;
unsigned long first;
switch (address) {
case UMP_LOG_BASE: return 0x554D;
case UMP_LOG_BASE+1: return 3;
case UMP_LOG_BASE+2: return ump_source ? 3 : ump_state;
case UMP_LOG_BASE+3: return ump_source ? ump_archive_count : ump_count;
case UMP_LOG_BASE+4: return UMP_LOG_WORDS;
case UMP_LOG_BASE+5: return UMP_LOG_CAPACITY;
case UMP_LOG_BASE+6: return ump_period;
case UMP_LOG_BASE+7: return (unsigned int)ump_time;
case UMP_LOG_BASE+8: return (unsigned int)(ump_time >> 16);
case UMP_LOG_BASE+9: return Desk;
case UMP_LOG_BASE+10: return Mode;
case UMP_LOG_BASE+11: return (unsigned int)READY_FREQ;
case UMP_LOG_BASE+12: return ump_generation;
case UMP_LOG_BASE+13: return ump_archive_count;
case UMP_LOG_BASE+14: return ump_post;
case UMP_LOG_BASE+15: return ump_state;
}
if (address >= UMP_LOG_DATA && address < UMP_LOG_DATA+120 && (ump_source || ump_state != 1)) {
offset = address - UMP_LOG_DATA;
return ump_word(ump_source, ump_cursor + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS);
}
/* Ïîñëåäíèå òðè çàïèñè äëÿ îíëàéí-ãðàôèêà, áåç îñòàíîâêè è áåç
* èçìåíåíèÿ êóðñîðà àðõèâíîãî ÷òåíèÿ. Ïåðâûå äâà ñëîâà — èõ íîìåð. */
if (address >= UMP_LOG_LIVE && address < UMP_LOG_LIVE+124) {
count = ump_count < UMP_LOG_LIVE_RECORDS ? ump_count : UMP_LOG_LIVE_RECORDS;
first = ump_sequence - count;
offset = address - UMP_LOG_LIVE;
if (offset == 0) return (unsigned int)first;
if (offset == 1) return (unsigned int)(first >> 16);
if (offset == 2) return count;
if (offset == 3) return ump_generation;
offset -= 4;
if (offset / UMP_LOG_WORDS < count)
return ump_word(0, ump_count - count + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS);
}
return 0;
}

View File

@@ -82,7 +82,6 @@ void main()
unsetup_leds_line();
clear_mem();
ump_log_init();
set_cntrl_addr(Mode,16);
timer_Init();
EnableInterrupts();
@@ -110,8 +109,6 @@ void main()
while(1)
{
/* Чтение логгера по CAN не блокирует цикл управления. */
UMP_CAN_service();
if(CanGO)
{
CanGO=0;
@@ -200,9 +197,6 @@ void main()
if(!IMPowse) { clear_START_DPTB(); clear_STOP_DPTB(); }
}
/* Снимок после обновления входов и формирования пусковых выходов. */
ump_log_io();
for(i=0;i<2;i++)
{
if(i) rs = &rs_a;

View File

@@ -130,9 +130,6 @@ interrupt void cpu_timer1_isr_SENS(void)
EALLOW;
CpuTimer1.InterruptCount++;
#if RS232_USE_FIFO
RS_FifoTick1ms();
#endif
IER |= M_INT13; // Set "global" priority
IER &= MINT13; // Set "global" priority
EINT;
@@ -154,8 +151,6 @@ interrupt void cpu_timer1_isr_SENS(void)
if(Desk==dsk_LOAD)
{
Load_runner();
/* Áàçà âðåìåíè 1 ìñ; ñíèìîê ñîäåðæèò ðåçóëüòàò òåêóùåãî øàãà ÖÀÏ. */
ump_log_tick();
return;
}

View File

@@ -17,8 +17,6 @@
#include "spise2p.h"
#include "caliber.h"
#include "log_to_mem.h"
#include "ump_tms28335.h"
int modbus[ANSWER_LEN+1];
unsigned int param[ANSWER_LEN+1];
@@ -184,54 +182,15 @@ void Save_params()
/***************************************************************/
/***************************************************************/
static void modbus_exception(RS_DATA *rs_arr, unsigned int function, unsigned int error)
{
unsigned int crc;
rs_arr->buffer[0] = CNTRL_ADDR;
rs_arr->buffer[1] = function | 0x80;
rs_arr->buffer[2] = error;
crc = get_crc_16(0xFFFF, rs_arr->buffer, 3);
rs_arr->buffer[3] = LOBYTE(crc); rs_arr->buffer[4] = HIBYTE(crc);
rs_arr->flag_TIMEOUT_to_Send = true;
RS_Send(rs_arr, rs_arr->buffer, 5);
}
/* UART parser has already validated CRC and accepted the device address. */
static int receive_ump(RS_DATA *rs_arr)
{
unsigned int address, value, saved, length, count, error;
/* Main-loop only; encoded into the UART buffer before the next request.
* Keep the 124-word snapshot off the shared interrupt stack. */
static uint16_t words[UMP_MAX_WORDS];
address = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
if (address < UMP_BASE) return 0;
value = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
saved = __disable_interrupts();
count = ump_tms28335_capture(rs_arr->RS_Header[1], address, value, words, &error);
__restore_interrupts(saved);
length = ump_rtu_encode(CNTRL_ADDR, rs_arr->RS_Header[1], error,
words, count, rs_arr->buffer, MAX_SEND_LENGTH);
if (length) {
rs_arr->flag_TIMEOUT_to_Send = true;
RS_Send(rs_arr, rs_arr->buffer, length);
}
return 1;
}
void ReceiveCommandModbus3(RS_DATA *rs_arr)
{
unsigned int crc, Address_MB, Length_MB, i, value;
if (receive_ump(rs_arr)) return;
unsigned int crc, Address_MB, Length_MB, i;
// ïîëó÷èëè íà÷àëüíûé àäðåñ ÷òåíèà
Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
Address_MB =/*(rs_arr->RS_Header[2] << 8) |*/ rs_arr->RS_Header[3];
// ïîëó÷èëè êîëè÷åñòâî ñëîâ äàííûõ
Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
if (!Length_MB || Length_MB > 125 ||
!(Address_MB < ANSWER_LEN && Length_MB <= ANSWER_LEN-Address_MB)) {
modbus_exception(rs_arr, CMD_MODBUS_3, 2); return;
}
/////////////////////////////////////////////////
// Îòñûëêà
@@ -241,13 +200,10 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
rs_arr->buffer[1] = CMD_MODBUS_3;
rs_arr->buffer[2] = Length_MB*2;
/* Çàùèùàåì öåëîñòíîñòü îäíîãî ñíèìêà/áëîêà; ïåðåäà÷à UART èä¸ò óæå
* ñ ðàçðåø¸ííûìè ïðåðûâàíèÿìè è íå çàäåðæèâàåò èçìåðåíèå/óïðàâëåíèå. */
for (i=0;i<Length_MB;i++)
{
value = modbus[Address_MB+i];
rs_arr->buffer[3+i*2] = (value >> 8) & 0xFF;
rs_arr->buffer[3+i*2+1] = value & 0xFF;
rs_arr->buffer[3+i*2 ]=(Modbus[Address_MB+i].byt.byte_hi);
rs_arr->buffer[3+i*2+1]=(Modbus[Address_MB+i].byt.byte_lo);
}
crc = 0xffff;
@@ -262,10 +218,7 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
rs_arr->buffer[Length_MB*2+8] = 0;
rs_arr->flag_TIMEOUT_to_Send=true;
/* Ðàñøèðåíèå ëîããåðà îòâå÷àåò òî÷íûì êàäðîì Modbus áåç õâîñòîâûõ
* íóëåé: îíè èíà÷å ïîïàëè áû â íà÷àëî îòâåòà ñëåäóþùåãî áëîêà GUI.
* Èñòîðè÷åñêèé ôîðìàò òåõíîëîãè÷åñêèõ ðåãèñòðîâ îñòàâëåí ïðåæíèì. */
RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8);
RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8);
return;
}
@@ -273,7 +226,6 @@ void ReceiveCommandModbus3(RS_DATA *rs_arr)
void ReceiveCommandModbus6(RS_DATA *rs_arr)
{
unsigned int Address_MB, Data_MB, i;
if (receive_ump(rs_arr)) return;
/////////////////////////////////////////////////
// Îòñûëêà
@@ -284,15 +236,12 @@ void ReceiveCommandModbus6(RS_DATA *rs_arr)
// ïîëó÷èëè íà÷àëüíûé àäðåñ çàïèñè
Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3];
Address_MB = (/*(rs_arr->RS_Header[2] << 8) | */rs_arr->RS_Header[3]);
// ïîëó÷èëè ñëîâî äàííûõ
Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5];
if (Address_MB < ANSWER_LEN) {
Modbus[Address_MB].all = Data_MB;
if (Address_MB == 127) ump_log_rs();
} else { modbus_exception(rs_arr, CMD_MODBUS_6, 2); return; }
Modbus[Address_MB].all = Data_MB;
rs_arr->flag_TIMEOUT_to_Send=true;
RS_Send(rs_arr, rs_arr->buffer, 10);

View File

@@ -1,3 +0,0 @@
/* Build the canonical sources directly; do not copy their implementations. */
#include "src/ump_protocol.c"
#include "ports/tms320f28335/ump_tms28335.c"

View File

@@ -1,3 +1,16 @@
/*=================================================================
File name : SPISE2PD.C
Originator : Settu Duraisamy
C2000 Applications Team
Texas Instruments
Description : This file contains the SPI bus Serial EEPROM driver
implemented using Virtual SPI driver
Date : 6/30/2003 (DD/MM/YYYY)
====================================================================*/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "spise2p.h"

View File

@@ -1,10 +1,10 @@
******************************************************************************
TMS320C2000 Linker PC v22.6.0
TMS320C2000 Linker PC v22.6.1
******************************************************************************
>> Linked Thu Oct 1 18:01:50 2026
>> Linked Tue Sep 22 07:49:31 2026
OUTPUT FILE NAME: <K:/git_project/Balsam_167_periph/UKSSTMS320F28335/../bin/UKSSTMS320F28335.out>
ENTRY POINT SYMBOL: "_c_int00" address: 0000b9b5
OUTPUT FILE NAME: <C:/Dima/Project/Balsam_167/UKSSTMS320F28335/../bin/UKSSTMS320F28335.out>
ENTRY POINT SYMBOL: "_c_int00" address: 0000b198
MEMORY CONFIGURATION
@@ -13,8 +13,8 @@ MEMORY CONFIGURATION
---------------------- -------- --------- -------- -------- ---- --------
PAGE 0:
ZONE0 00004000 00001000 00000000 00001000 RWIX
RAML0 00008000 00004000 00003b73 0000048d RWIX
RAML4 0000c000 00001000 000003f8 00000c08 RWIX
RAML0 00008000 00004000 000035e2 00000a1e RWIX
RAML4 0000c000 00001000 0000013a 00000ec6 RWIX
ZONE6 00100000 00100000 00000000 00100000 RWIX
FLASHH 00300000 00008000 00000000 00008000 RWIX
FLASHG 00308000 00008000 00000000 00008000 RWIX
@@ -87,7 +87,7 @@ PAGE 1:
SCIB 00007750 00000010 00000010 00000000 RWIX
SCIC 00007770 00000010 00000010 00000000 RWIX
I2CA 00007900 00000040 00000022 0000001e RWIX
RAML5 0000d000 00003000 00000fdf 00002021 RWIX
RAML5 0000d000 00003000 00000f38 000020c8 RWIX
ZONE7A 00200000 0000fc00 0000fa00 00000200 RWIX
ZONE7B 0020fc00 00000400 00000000 00000400 RWIX
FLASHB 00330000 00008000 00000000 00008000 RWIX
@@ -100,97 +100,89 @@ SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.cinit 0 0000c000 0000028b
0000c000 00000103 crc16.obj (.cinit:_crc_16_tab)
0000c103 00000043 message.obj (.cinit:_def_cal)
0000c146 0000003d measure.obj (.cinit)
0000c183 00000020 peripher.obj (.cinit)
0000c1a3 0000001f spise2p.obj (.cinit)
0000c1c2 0000001c ecan.obj (.cinit)
0000c1de 00000015 measure.obj (.cinit:_powK)
0000c1f3 00000014 log_to_mem.obj (.cinit)
0000c207 00000013 kanal.obj (.cinit:_digits)
0000c21a 00000011 pulto.obj (.cinit)
0000c22b 00000010 DAC.obj (.cinit)
0000c23b 0000000a rts2800_fpu32.lib : _lock.obj (.cinit)
0000c245 0000000a : exit.obj (.cinit)
0000c24f 00000008 ADC.obj (.cinit)
0000c257 00000008 kanal.obj (.cinit:_readr)
0000c25f 00000008 cntrl_adr.obj (.cinit)
0000c267 00000008 main.obj (.cinit)
0000c26f 00000005 ADC.obj (.cinit:_cwnt_ok$4)
0000c274 00000005 measure.obj (.cinit:_low_count)
0000c279 00000004 RS485.obj (.cinit)
0000c27d 00000004 RS485.obj (.cinit:_RS_Len)
0000c281 00000004 bios.obj (.cinit)
0000c285 00000004 rts2800_fpu32.lib : errno.obj (.cinit)
0000c289 00000002 --HOLE-- [fill = 0]
.cinit 0 0000b35f 00000283
0000b35f 00000103 crc16.obj (.cinit:_crc_16_tab)
0000b462 00000043 message.obj (.cinit:_def_cal)
0000b4a5 0000003d measure.obj (.cinit)
0000b4e2 00000020 peripher.obj (.cinit)
0000b502 0000001f spise2p.obj (.cinit)
0000b521 0000001c ecan.obj (.cinit)
0000b53d 00000015 measure.obj (.cinit:_powK)
0000b552 00000013 kanal.obj (.cinit:_digits)
0000b565 00000011 pulto.obj (.cinit)
0000b576 00000010 DAC.obj (.cinit)
0000b586 0000000c log_to_mem.obj (.cinit)
0000b592 0000000a rts2800_fpu32.lib : _lock.obj (.cinit)
0000b59c 0000000a : exit.obj (.cinit)
0000b5a6 00000008 ADC.obj (.cinit)
0000b5ae 00000008 kanal.obj (.cinit:_readr)
0000b5b6 00000008 cntrl_adr.obj (.cinit)
0000b5be 00000008 main.obj (.cinit)
0000b5c6 00000005 ADC.obj (.cinit:_cwnt_ok$4)
0000b5cb 00000005 measure.obj (.cinit:_low_count)
0000b5d0 00000004 RS485.obj (.cinit)
0000b5d4 00000004 RS485.obj (.cinit:_RS_Len)
0000b5d8 00000004 bios.obj (.cinit)
0000b5dc 00000004 rts2800_fpu32.lib : errno.obj (.cinit)
0000b5e0 00000002 --HOLE-- [fill = 0]
.pinit 0 00008000 00000000 UNINITIALIZED
.text 0 00008000 00003b73
.text 0 00008000 0000335f
00008000 000008e6 measure.obj (.text)
000088e6 00000711 DSP2833x_SWPrioritizedDefaultIsr.obj (.text:retain)
00008ff7 000003c3 peripher.obj (.text)
000093ba 000003bd RS485.obj (.text)
00009777 0000037f log_to_mem.obj (.text)
00009af6 00000325 message.obj (.text)
00009e1b 00000309 shared_ump.obj (.text)
0000a124 000002bf bios.obj (.text)
0000a3e3 0000025b spise2p.obj (.text)
0000a63e 0000024d main.obj (.text)
0000a88b 000001f9 ecan.obj (.text)
0000aa84 000001f3 ADC.obj (.text:retain)
0000ac77 000001c5 measure.obj (.text:retain)
0000ae3c 00000196 ADC.obj (.text)
0000afd2 0000018a DAC.obj (.text)
0000b15c 0000016c kanal.obj (.text)
0000b2c8 0000015d DSP2833x_SysCtrl.obj (.text)
0000b425 00000151 pulto.obj (.text:retain)
0000b576 00000114 RS485.obj (.text:retain)
0000b68a 0000010c DSP2833x_Xintf.obj (.text)
0000b796 00000088 rts2800_fpu32.lib : fs_div.obj (.text)
0000b81e 00000075 crc16.obj (.text)
0000b893 00000075 ecan.obj (.text:retain)
0000b908 0000005e DSP2833x_CpuTimers.obj (.text)
0000b966 0000004f tools.obj (.text)
0000b9b5 00000046 rts2800_fpu32.lib : boot.obj (.text)
0000b9fb 00000039 spise2p.obj (.text:retain)
0000ba34 00000037 filter_bat2.obj (.text)
0000ba6b 0000002a rts2800_fpu32.lib : l_div.obj (.text)
0000ba95 00000028 DSP2833x_PieCtrl.obj (.text)
0000babd 00000001 --HOLE-- [fill = 0]
0000babe 00000020 rts2800_fpu32.lib : sqrt.obj (.text)
0000bade 0000001d pulto.obj (.text)
0000bafb 0000001b rts2800_fpu32.lib : args_main.obj (.text)
0000bb16 00000019 DSP2833x_Adc.obj (.text)
0000bb2f 00000019 rts2800_fpu32.lib : exit.obj (.text)
0000bb48 0000000e DSP2833x_SWPrioritizedPieVect.obj (.text)
0000bb56 0000000b rts2800_fpu32.lib : u_div.obj (.text)
0000bb61 00000009 : _lock.obj (.text)
0000bb6a 00000005 cntrl_adr.obj (.text)
0000bb6f 00000004 DSP2833x_usDelay.obj (.text)
00009777 000002bf bios.obj (.text)
00009a36 00000279 message.obj (.text)
00009caf 0000025b spise2p.obj (.text)
00009f0a 0000024d main.obj (.text)
0000a157 000001f3 ADC.obj (.text:retain)
0000a34a 000001c3 measure.obj (.text:retain)
0000a50d 00000196 ADC.obj (.text)
0000a6a3 0000016c kanal.obj (.text)
0000a80f 00000163 DAC.obj (.text)
0000a972 0000015d DSP2833x_SysCtrl.obj (.text)
0000aacf 00000151 pulto.obj (.text:retain)
0000ac20 00000139 ecan.obj (.text)
0000ad59 00000114 RS485.obj (.text:retain)
0000ae6d 0000010c DSP2833x_Xintf.obj (.text)
0000af79 00000088 rts2800_fpu32.lib : fs_div.obj (.text)
0000b001 00000075 crc16.obj (.text)
0000b076 00000075 ecan.obj (.text:retain)
0000b0eb 0000005e DSP2833x_CpuTimers.obj (.text)
0000b149 0000004f tools.obj (.text)
0000b198 00000046 rts2800_fpu32.lib : boot.obj (.text)
0000b1de 00000039 spise2p.obj (.text:retain)
0000b217 00000037 filter_bat2.obj (.text)
0000b24e 0000002a rts2800_fpu32.lib : l_div.obj (.text)
0000b278 00000028 DSP2833x_PieCtrl.obj (.text)
0000b2a0 00000020 rts2800_fpu32.lib : sqrt.obj (.text)
0000b2c0 0000001d pulto.obj (.text)
0000b2dd 0000001b rts2800_fpu32.lib : args_main.obj (.text)
0000b2f8 00000019 DSP2833x_Adc.obj (.text)
0000b311 00000019 rts2800_fpu32.lib : exit.obj (.text)
0000b32a 00000015 log_to_mem.obj (.text)
0000b33f 0000000e DSP2833x_SWPrioritizedPieVect.obj (.text)
0000b34d 00000009 rts2800_fpu32.lib : _lock.obj (.text)
0000b356 00000005 cntrl_adr.obj (.text)
0000b35b 00000004 DSP2833x_usDelay.obj (.text)
ramfuncs 0 0000c000 00000000 UNINITIALIZED
.econst 0 0000c28c 00000125
0000c28c 00000100 DSP2833x_SWPrioritizedPieVect.obj (.econst:_PieVectTableInit)
0000c38c 00000009 message.obj (.econst:_$P$T0$1)
0000c395 00000001 --HOLE-- [fill = 0]
0000c396 00000006 shared_ump.obj (.econst:_$P$T0$1)
0000c39c 00000006 message.obj (.econst:_$P$T1$2)
0000c3a2 00000006 shared_ump.obj (.econst:_$P$T1$2)
0000c3a8 00000006 shared_ump.obj (.econst:_$P$T2$3)
0000c3ae 00000003 cntrl_adr.obj (.econst)
.econst 0 0000c000 00000112
0000c000 00000100 DSP2833x_SWPrioritizedPieVect.obj (.econst:_PieVectTableInit)
0000c100 00000009 message.obj (.econst:_$P$T0$1)
0000c109 00000006 message.obj (.econst:_$P$T1$2)
0000c10f 00000003 cntrl_adr.obj (.econst)
.switch 0 0000c3b2 00000048
0000c3b2 00000028 spise2p.obj (.switch:_SPISE2P_DRV_tick)
0000c3da 00000020 log_to_mem.obj (.switch:_ump_log_read)
.switch 0 0000c112 00000028
0000c112 00000028 spise2p.obj (.switch:_SPISE2P_DRV_tick)
.stack 1 00000400 000003f0 UNINITIALIZED
00000400 000003f0 --HOLE--
.ebss 1 0000d000 00000fdf UNINITIALIZED
.ebss 1 0000d000 00000f38 UNINITIALIZED
0000d000 00000704 RS485.obj (.ebss)
0000d704 00000038 measure.obj (.ebss:_sens_count)
0000d73c 00000004 ADC.obj (.ebss:_adc_table_lem)
@@ -204,42 +196,39 @@ ramfuncs 0 0000c000 00000000 UNINITIALIZED
0000dc42 00000038 measure.obj (.ebss)
0000dc7a 00000006 DSP2833x_SysCtrl.obj (.ebss)
0000dc80 00000081 message.obj (.ebss:_param)
0000dd01 00000001 rts2800_fpu32.lib : errno.obj (.ebss)
0000dd02 00000028 log_to_mem.obj (.ebss)
0000dd2a 00000012 measure.obj (.ebss:_powK)
0000dd3c 00000004 cntrl_adr.obj (.ebss)
0000dd40 0000007c ecan.obj (.ebss:_ump_can_reply)
0000ddbc 00000004 rts2800_fpu32.lib : _lock.obj (.ebss)
0000ddc0 00000048 measure.obj (.ebss:_zer_filter)
0000de08 00000020 measure.obj (.ebss:_din_count)
0000de28 00000018 DSP2833x_CpuTimers.obj (.ebss)
0000de40 00000046 RS485.obj (.ebss:_RS_Len)
0000de86 0000001c ADC.obj (.ebss:_ADC_table)
0000dea2 0000001c ADC.obj (.ebss:_prev_ok)
0000debe 00000002 main.obj (.ebss:_cancell$2)
0000dec0 00000040 message.obj (.ebss:_def_cal)
0000df00 0000001c spise2p.obj (.ebss)
0000df1c 00000018 measure.obj (.ebss:_sens_pair)
0000df34 0000000c ADC.obj (.ebss)
0000df40 00000018 measure.obj (.ebss:_sens_type)
0000df58 00000018 ecan.obj (.ebss)
0000df70 00000010 peripher.obj (.ebss)
0000df80 0000000e DAC.obj (.ebss)
0000df8e 0000000c measure.obj (.ebss:_lev_quadr)
0000df9a 0000000a pulto.obj (.ebss)
0000dfa4 00000008 measure.obj (.ebss:_ext_diag)
0000dfac 00000008 measure.obj (.ebss:_ext_temp)
0000dfb4 00000008 measure.obj (.ebss:_zer_count)
0000dfbc 00000004 rts2800_fpu32.lib : exit.obj (.ebss)
0000dfc0 00000006 measure.obj (.ebss:_err_count)
0000dfc6 00000006 measure.obj (.ebss:_lev_count)
0000dfcc 00000005 kanal.obj (.ebss:_readr)
0000dfd1 00000003 log_to_mem.obj (.ebss:_ump_can_data)
0000dfd4 00000003 main.obj (.ebss)
0000dfd7 00000002 main.obj (.ebss:_cancount$1)
0000dfd9 00000002 ADC.obj (.ebss:_cwnt_ok$4)
0000dfdb 00000002 measure.obj (.ebss:_low_count)
0000dfdd 00000002 log_to_mem.obj (.ebss:_ump_pm67_voltage)
0000dd01 00000020 measure.obj (.ebss:_din_count)
0000dd21 0000001c ADC.obj (.ebss:_ADC_table)
0000dd3d 00000003 main.obj (.ebss)
0000dd40 00000048 measure.obj (.ebss:_zer_filter)
0000dd88 0000001c ADC.obj (.ebss:_prev_ok)
0000dda4 0000001c spise2p.obj (.ebss)
0000ddc0 00000046 RS485.obj (.ebss:_RS_Len)
0000de06 00000018 DSP2833x_CpuTimers.obj (.ebss)
0000de1e 00000018 measure.obj (.ebss:_sens_pair)
0000de36 0000000a pulto.obj (.ebss)
0000de40 00000040 message.obj (.ebss:_def_cal)
0000de80 00000018 measure.obj (.ebss:_sens_type)
0000de98 00000012 measure.obj (.ebss:_powK)
0000deaa 00000010 peripher.obj (.ebss)
0000deba 00000006 measure.obj (.ebss:_err_count)
0000dec0 0000000e DAC.obj (.ebss)
0000dece 0000000e ecan.obj (.ebss)
0000dedc 0000000c ADC.obj (.ebss)
0000dee8 0000000c measure.obj (.ebss:_lev_quadr)
0000def4 0000000c log_to_mem.obj (.ebss)
0000df00 00000008 measure.obj (.ebss:_ext_diag)
0000df08 00000008 measure.obj (.ebss:_ext_temp)
0000df10 00000008 measure.obj (.ebss:_zer_count)
0000df18 00000006 measure.obj (.ebss:_lev_count)
0000df1e 00000005 kanal.obj (.ebss:_readr)
0000df23 00000004 cntrl_adr.obj (.ebss)
0000df27 00000001 rts2800_fpu32.lib : errno.obj (.ebss)
0000df28 00000004 : _lock.obj (.ebss)
0000df2c 00000004 : exit.obj (.ebss)
0000df30 00000002 main.obj (.ebss:_cancell$2)
0000df32 00000002 main.obj (.ebss:_cancount$1)
0000df34 00000002 ADC.obj (.ebss:_cwnt_ok$4)
0000df36 00000002 measure.obj (.ebss:_low_count)
.logg 1 00200000 0000fa00 UNINITIALIZED
00200000 0000fa00 log_to_mem.obj (.logg)
@@ -456,7 +445,7 @@ MODULE SUMMARY
Module code initialized data uninitialized data
------ ---- ---------------- ------------------
K:\git_project\Balsam_167_periph\Debug\Source\External\v120\DSP2833x_common\source\
C:\Dima\Project\Balsam_167\Debug\Source\External\v120\DSP2833x_common\source\
DSP2833x_SWPrioritizedDefaultIsr.obj 1809 0 0
DSP2833x_SysCtrl.obj 349 0 6
DSP2833x_SWPrioritizedPieVect.obj 14 256 0
@@ -469,34 +458,33 @@ MODULE SUMMARY
+--+--------------------------------------+-------+------------------+--------------------+
Total: 2610 256 30
K:\git_project\Balsam_167_periph\Debug\Source\External\v120\DSP2833x_headers\source\
C:\Dima\Project\Balsam_167\Debug\Source\External\v120\DSP2833x_headers\source\
DSP2833x_GlobalVariableDefs.obj 0 0 2679
+--+--------------------------------------+-------+------------------+--------------------+
Total: 0 0 2679
K:\git_project\Balsam_167_periph\Debug\Source\Internal\
log_to_mem.obj 895 52 64045
measure.obj 2731 87 1212
C:\Dima\Project\Balsam_167\Debug\Source\Internal\
log_to_mem.obj 21 12 64012
measure.obj 2729 87 1212
RS485.obj 1233 8 1866
message.obj 805 82 322
message.obj 633 82 322
peripher.obj 963 32 16
ADC.obj 905 13 74
ecan.obj 622 28 148
shared_ump.obj 777 18 0
spise2p.obj 660 71 28
bios.obj 703 4 1
crc16.obj 117 259 256
main.obj 589 8 7
DAC.obj 394 16 14
ecan.obj 430 28 14
kanal.obj 364 27 21
pulto.obj 366 17 10
DAC.obj 355 16 14
tools.obj 79 0 0
filter_bat2.obj 55 0 0
cntrl_adr.obj 5 11 4
+--+--------------------------------------+-------+------------------+--------------------+
Total: 12263 733 68024
Total: 10207 675 67857
K:/git_project/Balsam_167_periph/Libraries/rts2800_fpu32.lib
C:/Dima/Project/Balsam_167/Libraries/rts2800_fpu32.lib
fs_div.obj 136 0 0
boot.obj 70 0 0
l_div.obj 42 0 0
@@ -504,14 +492,13 @@ MODULE SUMMARY
sqrt.obj 32 0 0
args_main.obj 27 0 0
_lock.obj 9 10 4
u_div.obj 11 0 0
errno.obj 0 4 1
+--+--------------------------------------+-------+------------------+--------------------+
Total: 352 24 9
Total: 341 24 9
Stack: 0 0 1008
+--+--------------------------------------+-------+------------------+--------------------+
Grand Total: 15225 1013 71750
Grand Total: 13158 955 71583
GLOBAL DATA SYMBOLS: SORTED BY DATA PAGE
@@ -606,11 +593,11 @@ address data page name
00007900 1e4 (00007900) _I2caRegs
0000c28c 30a (0000c280) _PieVectTableInit
0000c000 300 (0000c000) _PieVectTableInit
0000c3ae 30e (0000c380) _ADDR_ANSWER
0000c3af 30e (0000c380) _ADDR_TERMINAL
0000c3b0 30e (0000c380) _CNTRL_ADDR_UNIVERSAL
0000c10f 304 (0000c100) _ADDR_ANSWER
0000c110 304 (0000c100) _ADDR_TERMINAL
0000c111 304 (0000c100) _CNTRL_ADDR_UNIVERSAL
0000d040 341 (0000d040) _rs_a
@@ -661,92 +648,85 @@ address data page name
0000dc80 372 (0000dc80) _param
0000dd01 374 (0000dd00) _errno
0000dd02 374 (0000dd00) _no_write
0000dd03 374 (0000dd00) _never_write
0000dd04 374 (0000dd00) _flog
0000dd18 374 (0000dd00) _ump_dac_ramp
0000dd19 374 (0000dd00) _ump_dac_duration
0000dd1a 374 (0000dd00) _ump_dac_go10
0000dd1b 374 (0000dd00) _ump_dac_stop10
0000dd1c 374 (0000dd00) _ump_dac_position
0000dd22 374 (0000dd00) _Log
0000dd2a 374 (0000dd00) _powK
0000dd3c 374 (0000dd00) _ADDR_FOR_ALL
0000dd3d 374 (0000dd00) _CNTRL_ADDR
0000dd3e 374 (0000dd00) _cntr_addr_c
0000dd3f 374 (0000dd00) _cntr_addr_c_all
0000dd01 374 (0000dd00) _din_count
0000dd21 374 (0000dd00) _ADC_table
0000ddbc 376 (0000dd80) __unlock
0000ddbe 376 (0000dd80) __lock
0000dd40 375 (0000dd40) _zer_filter
0000ddc0 377 (0000ddc0) _zer_filter
0000dd88 376 (0000dd80) _prev_ok
0000dda4 376 (0000dd80) _ccc
0000de08 378 (0000de00) _din_count
0000de28 378 (0000de00) _CpuTimer0
0000de30 378 (0000de00) _CpuTimer1
0000de38 378 (0000de00) _CpuTimer2
0000ddc0 377 (0000ddc0) _RS_Len
0000de40 379 (0000de40) _RS_Len
0000de06 378 (0000de00) _CpuTimer0
0000de0e 378 (0000de00) _CpuTimer1
0000de16 378 (0000de00) _CpuTimer2
0000de1e 378 (0000de00) _sens_pair
0000de36 378 (0000de00) _isNumb
0000de37 378 (0000de00) _quaLamp
0000de3c 378 (0000de00) _isMask
0000de3e 378 (0000de00) _Lonely
0000de86 37a (0000de80) _ADC_table
0000dea2 37a (0000de80) _prev_ok
0000de40 379 (0000de40) _def_cal
0000dec0 37b (0000dec0) _def_cal
0000de80 37a (0000de80) _sens_type
0000de98 37a (0000de80) _powK
0000deaa 37a (0000de80) _Mode
0000deab 37a (0000de80) _Desk
0000deac 37a (0000de80) _TermoAD
0000dead 37a (0000de80) _TermoRS
0000deae 37a (0000de80) _TermoSW
0000deaf 37a (0000de80) _Kurrent
0000deb0 37a (0000de80) _Kalibro
0000deb1 37a (0000de80) _Owen
0000deb2 37a (0000de80) _INcount0
0000deb3 37a (0000de80) _INcount1
0000deb4 37a (0000de80) _MUX_GPIO32
0000deb5 37a (0000de80) _MUX_GPIO48
0000deb6 37a (0000de80) _DIR_GPIO32
0000deb7 37a (0000de80) _DIR_GPIO48
0000deb8 37a (0000de80) _DigErr
0000deba 37a (0000de80) _err_count
0000df00 37c (0000df00) _ccc
0000df1c 37c (0000df00) _sens_pair
0000df34 37c (0000df00) _COUNT_ONE_CANAL
0000df35 37c (0000df00) _COUNT_DISCHARGE
0000df36 37c (0000df00) _COUNT_TRANSICIA
0000df37 37c (0000df00) _FILTER_CLIP
0000df3c 37c (0000df00) _WAKE
0000df3e 37c (0000df00) _WAKE_TIME
0000dec0 37b (0000dec0) _period_dac
0000dec1 37b (0000dec0) _time_dac
0000dec6 37b (0000dec0) _WAKEpowse
0000dec8 37b (0000dec0) _IMPowse
0000dece 37b (0000dec0) _CanTimeOutErrorTR
0000decf 37b (0000dec0) _wait
0000ded0 37b (0000dec0) _ErrorCount
0000ded2 37b (0000dec0) _MessageReceivedCount
0000ded4 37b (0000dec0) _MessageTransivedCount
0000ded6 37b (0000dec0) _TestMbox1
0000ded8 37b (0000dec0) _TestMbox2
0000deda 37b (0000dec0) _TestMbox3
0000dedc 37b (0000dec0) _COUNT_ONE_CANAL
0000dedd 37b (0000dec0) _COUNT_DISCHARGE
0000dede 37b (0000dec0) _COUNT_TRANSICIA
0000dedf 37b (0000dec0) _FILTER_CLIP
0000dee4 37b (0000dec0) _WAKE
0000dee6 37b (0000dec0) _WAKE_TIME
0000dee8 37b (0000dec0) _lev_quadr
0000def4 37b (0000dec0) _no_write
0000def5 37b (0000dec0) _never_write
0000def6 37b (0000dec0) _flog
0000def8 37b (0000dec0) _Log
0000df40 37d (0000df40) _sens_type
0000df58 37d (0000df40) _CanTimeOutErrorTR
0000df59 37d (0000df40) _wait
0000df62 37d (0000df40) _ErrorCount
0000df64 37d (0000df40) _MessageReceivedCount
0000df66 37d (0000df40) _MessageTransivedCount
0000df68 37d (0000df40) _TestMbox1
0000df6a 37d (0000df40) _TestMbox2
0000df6c 37d (0000df40) _TestMbox3
0000df70 37d (0000df40) _Mode
0000df71 37d (0000df40) _Desk
0000df72 37d (0000df40) _TermoAD
0000df73 37d (0000df40) _TermoRS
0000df74 37d (0000df40) _TermoSW
0000df75 37d (0000df40) _Kurrent
0000df76 37d (0000df40) _Kalibro
0000df77 37d (0000df40) _Owen
0000df78 37d (0000df40) _INcount0
0000df79 37d (0000df40) _INcount1
0000df7a 37d (0000df40) _MUX_GPIO32
0000df7b 37d (0000df40) _MUX_GPIO48
0000df7c 37d (0000df40) _DIR_GPIO32
0000df7d 37d (0000df40) _DIR_GPIO48
0000df7e 37d (0000df40) _DigErr
0000df80 37e (0000df80) _period_dac
0000df81 37e (0000df80) _time_dac
0000df86 37e (0000df80) _WAKEpowse
0000df88 37e (0000df80) _IMPowse
0000df8e 37e (0000df80) _lev_quadr
0000df9a 37e (0000df80) _isNumb
0000df9b 37e (0000df80) _quaLamp
0000dfa0 37e (0000df80) _isMask
0000dfa2 37e (0000df80) _Lonely
0000dfa4 37e (0000df80) _ext_diag
0000dfac 37e (0000df80) _ext_temp
0000dfb4 37e (0000df80) _zer_count
0000dfbc 37e (0000df80) __cleanup_ptr
0000dfbe 37e (0000df80) __dtors_ptr
0000dfc0 37f (0000dfc0) _err_count
0000dfc6 37f (0000dfc0) _lev_count
0000dfcc 37f (0000dfc0) _readr
0000dfdb 37f (0000dfc0) _low_count
0000df00 37c (0000df00) _ext_diag
0000df08 37c (0000df00) _ext_temp
0000df10 37c (0000df00) _zer_count
0000df18 37c (0000df00) _lev_count
0000df1e 37c (0000df00) _readr
0000df23 37c (0000df00) _ADDR_FOR_ALL
0000df24 37c (0000df00) _CNTRL_ADDR
0000df25 37c (0000df00) _cntr_addr_c
0000df26 37c (0000df00) _cntr_addr_c_all
0000df27 37c (0000df00) _errno
0000df28 37c (0000df00) __unlock
0000df2a 37c (0000df00) __lock
0000df2c 37c (0000df00) __cleanup_ptr
0000df2e 37c (0000df00) __dtors_ptr
0000df36 37c (0000df00) _low_count
00200000 8000 (00200000) _logs_block
@@ -760,65 +740,63 @@ GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
page address name
---- ------- ----
0 00008000 .text
0 0000bb2f C$$EXIT
0 0000b796 FS$$DIV
0 0000ba6b L$$DIV
0 0000ba7a L$$MOD
0 0000bb56 U$$DIV
0 0000bb5b U$$MOD
0 0000ba88 UL$$DIV
0 0000ba8f UL$$MOD
0 0000b311 C$$EXIT
0 0000af79 FS$$DIV
0 0000b24e L$$DIV
0 0000b25d L$$MOD
0 0000b26b UL$$DIV
0 0000b272 UL$$MOD
0 00008fdc _ADCINT_ISR
0 00380080 _ADC_cal
1 0000de86 _ADC_table
0 0000c3ae _ADDR_ANSWER
1 0000dd3c _ADDR_FOR_ALL
0 0000c3af _ADDR_TERMINAL
1 0000dd21 _ADC_table
0 0000c10f _ADDR_ANSWER
1 0000df23 _ADDR_FOR_ALL
0 0000c110 _ADDR_TERMINAL
1 00000b00 _AdcMirror
1 00007100 _AdcRegs
0 0000b01b _Anal_output
0 0000a1b2 _Answer
0 0000aa38 _CAN_send
0 0000b8be _CANa_handler
0 0000b893 _CANa_reset_err
1 0000dd3d _CNTRL_ADDR
0 0000c3b0 _CNTRL_ADDR_UNIVERSAL
1 0000df35 _COUNT_DISCHARGE
1 0000df34 _COUNT_ONE_CANAL
1 0000df36 _COUNT_TRANSICIA
0 0000a858 _Anal_output
0 00009805 _Answer
0 0000ad0d _CAN_send
0 0000b0a1 _CANa_handler
0 0000b076 _CANa_reset_err
1 0000df24 _CNTRL_ADDR
0 0000c111 _CNTRL_ADDR_UNIVERSAL
1 0000dedd _COUNT_DISCHARGE
1 0000dedc _COUNT_ONE_CANAL
1 0000dede _COUNT_TRANSICIA
1 0000dc51 _Caliber_time
1 0000dc43 _CanGO
1 0000dc42 _CanPowse
1 0000df58 _CanTimeOutErrorTR
0 0000b947 _ConfigCpuTimer
1 0000de28 _CpuTimer0
1 0000dece _CanTimeOutErrorTR
0 0000b12a _ConfigCpuTimer
1 0000de06 _CpuTimer0
1 00000c00 _CpuTimer0Regs
1 0000de30 _CpuTimer1
1 0000de0e _CpuTimer1
1 00000c08 _CpuTimer1Regs
1 0000de38 _CpuTimer2
1 0000de16 _CpuTimer2
1 00000c10 _CpuTimer2Regs
1 0033fff8 _CsmPwl
1 00000ae0 _CsmRegs
0 0000b3f6 _CsmUnlock
0 0000aaa0 _CsmUnlock
1 0000dc52 _Curr_Edge
0 00008656 _Current_count
0 00008fcf _DATALOG_ISR
0 0000b168 _DCLK
0 0000a6af _DCLK
0 00008fb4 _DINTCH1_ISR
0 00008f99 _DINTCH2_ISR
0 00008f7e _DINTCH3_ISR
0 00008f63 _DINTCH4_ISR
0 00008f48 _DINTCH5_ISR
0 00008f2d _DINTCH6_ISR
1 0000df7c _DIR_GPIO32
1 0000df7d _DIR_GPIO48
0 0000b15c _DOUT
0 0000bb6f _DSP28x_usDelay
0 00009cba _Default_params
1 0000df71 _Desk
1 0000deb6 _DIR_GPIO32
1 0000deb7 _DIR_GPIO48
0 0000a6a3 _DOUT
0 0000b35b _DSP28x_usDelay
0 00009b4e _Default_params
1 0000deab _Desk
1 00000880 _DevEmuRegs
1 0000df7e _DigErr
0 0000b2de _DisableDog
1 0000deb8 _DigErr
0 0000a988 _DisableDog
1 00001000 _DmaRegs
0 00008f12 _ECAN0INTA_ISR
0 00008ef7 _ECAN0INTB_ISR
@@ -869,38 +847,38 @@ page address name
0 00008c9a _EQEP2_INT_ISR
1 00006b00 _EQep1Regs
1 00006b40 _EQep2Regs
0 0000bab4 _EnableInterrupts
1 0000df62 _ErrorCount
1 0000df37 _FILTER_CLIP
0 0000b297 _EnableInterrupts
1 0000ded0 _ErrorCount
1 0000dedf _FILTER_CLIP
1 00000a80 _FlashRegs
1 00006f80 _GpioCtrlRegs
1 00006fc0 _GpioDataRegs
1 00006fe0 _GpioIntRegs
1 0000dc7e _HSPCLK
0 0000a9d9 _Handlai
0 0000accc _Handlai
0 00008c7f _I2CINT1A_ISR
0 00008c64 _I2CINT2A_ISR
1 00007900 _I2caRegs
0 00008c59 _ILLEGAL_ISR
1 0000df88 _IMPowse
1 0000dec8 _IMPowse
0 00008c4c _INT13_ISR
0 00008c3f _INT14_ISR
0 00008c35 _INT_NOTUSED_ISR
1 0000df78 _INcount0
1 0000df79 _INcount1
0 0000bb16 _InitAdc
0 0000a920 _InitCan
0 0000b908 _InitCpuTimers
0 0000b368 _InitPeripheralClocks
0 0000ba95 _InitPieCtrl
0 0000bb48 _InitPieVectTable
0 0000b2e6 _InitPll
0 0000a615 _InitSeeprom
0 0000b3ed _InitSysCtrl
0 0000b733 _InitXintf
0 0000b68a _InitXintf16Gpio
0 0000b6e3 _InitXintf32Gpio
0 0000b064 _Init_DAC
1 0000deb2 _INcount0
1 0000deb3 _INcount1
0 0000b2f8 _InitAdc
0 0000ac20 _InitCan
0 0000b0eb _InitCpuTimers
0 0000aa12 _InitPeripheralClocks
0 0000b278 _InitPieCtrl
0 0000b33f _InitPieVectTable
0 0000a990 _InitPll
0 00009ee1 _InitSeeprom
0 0000aa97 _InitSysCtrl
0 0000af16 _InitXintf
0 0000ae6d _InitXintf16Gpio
0 0000aec6 _InitXintf32Gpio
0 0000a8a1 _Init_DAC
0 000085ae _Init_packMask
0 00008438 _Init_sensors
0 000083d8 _Init_sensors_more
@@ -908,43 +886,43 @@ page address name
1 0000dc60 _K_50
1 0000dc62 _K_T1
1 0000dc64 _K_T2
1 0000df76 _Kalibro
1 0000df75 _Kurrent
1 0000deb0 _Kalibro
1 0000deaf _Kurrent
1 0000dc7c _LSPCLK
0 00008c1a _LUF_ISR
0 00008bff _LVF_ISR
0 00009dd6 _Load_params
0 0000b080 _Load_runner
1 0000dd22 _Log
1 0000dfa2 _Lonely
0 00009c6a _Load_params
0 0000a8bd _Load_runner
1 0000def8 _Log
1 0000de3e _Lonely
0 00008be4 _MRINTA_ISR
0 00008bc9 _MRINTB_ISR
1 0000df7a _MUX_GPIO32
1 0000df7b _MUX_GPIO48
1 0000deb4 _MUX_GPIO32
1 0000deb5 _MUX_GPIO48
0 00008bae _MXINTA_ISR
0 00008b93 _MXINTB_ISR
1 0000d8f0 _Maska
1 00005000 _McbspaRegs
1 00005040 _McbspbRegs
1 0000df64 _MessageReceivedCount
1 0000df66 _MessageTransivedCount
1 0000df70 _Mode
1 0000ded2 _MessageReceivedCount
1 0000ded4 _MessageTransivedCount
1 0000deaa _Mode
0 00008b88 _NMI_ISR
1 0000df77 _Owen
1 0000deb1 _Owen
0 00008b7e _PIE_RESERVED
1 00380090 _PartIdRegs
1 00000ce0 _PieCtrlRegs
1 00000d00 _PieVectTable
0 0000c28c _PieVectTableInit
0 0000c000 _PieVectTableInit
0 000082ee _Power_count
1 0000dc44 _READY
0 0000b186 _RESET
0 0000b645 _RSA_RX_Handler
0 0000b600 _RSA_TX_Handler
0 0000b5bb _RSB_RX_Handler
0 0000b576 _RSB_TX_Handler
0 0000a6cd _RESET
0 0000ae28 _RSA_RX_Handler
0 0000ade3 _RSA_TX_Handler
0 0000ad9e _RSB_RX_Handler
0 0000ad59 _RSB_TX_Handler
0 00009746 _RS_BSend
1 0000de40 _RS_Len
1 0000ddc0 _RS_Len
0 000095fc _RS_RX_Handler
0 000095a4 _RS_Send
0 0000944f _RS_SetBitMode
@@ -955,46 +933,45 @@ page address name
0 0000c000 _RamfuncsLoadEnd
0 0000c000 _RamfuncsLoadStart
0 0000c000 _RamfuncsRunStart
0 00009c90 _ReceiveAnswerModbus4
0 00009c05 _ReceiveCommandModbus3
0 00009bc7 _ReceiveCommandModbus6
0 00009b24 _ReceiveAnswerModbus4
0 00009aaf _ReceiveCommandModbus3
0 00009a87 _ReceiveCommandModbus6
0 00008b56 _SCIRXINTA_ISR
0 00008b3b _SCIRXINTB_ISR
0 00008b20 _SCIRXINTC_ISR
0 00008b05 _SCITXINTA_ISR
0 00008aea _SCITXINTB_ISR
0 00008acf _SCITXINTC_ISR
0 0000b174 _SENDBIT
0 0000a6bb _SENDBIT
0 00008ab4 _SEQ1INT_ISR
0 00008a99 _SEQ2INT_ISR
0 00008a7e _SPIRXINTA_ISR
0 0000a3f2 _SPISE2P_DRV_csclr
0 0000a3f7 _SPISE2P_DRV_csset
0 0000a3fc _SPISE2P_DRV_init
0 0000a42e _SPISE2P_DRV_tick
0 00009cbe _SPISE2P_DRV_csclr
0 00009cc3 _SPISE2P_DRV_csset
0 00009cc8 _SPISE2P_DRV_init
0 00009cfa _SPISE2P_DRV_tick
0 00008a63 _SPITXINTA_ISR
1 0000dc7a _SYSCLKOUT
0 00009b1e _Save_params
0 00009a5e _Save_params
1 00007050 _SciaRegs
1 00007750 _ScibRegs
1 00007770 _ScicRegs
0 0000a5d2 _Seeprom_read
0 0000a58f _Seeprom_write
0 00009af6 _SendCommandModbus4
0 0000b2c8 _ServiceDog
0 0000b011 _Setup_DAC_time
0 00009e9e _Seeprom_read
0 00009e5b _Seeprom_write
0 00009a36 _SendCommandModbus4
0 0000a972 _ServiceDog
0 0000a84e _Setup_DAC_time
1 00007040 _SpiaRegs
1 00007010 _SysCtrlRegs
0 00008a48 _TINT0_ISR
1 0000dc45 _TPL_CANS
0 00008111 _Temper_count
1 0000df72 _TermoAD
1 0000df73 _TermoRS
1 0000df74 _TermoSW
1 0000df68 _TestMbox1
1 0000df6a _TestMbox2
1 0000df6c _TestMbox3
0 0000a88b _UMP_CAN_service
1 0000deac _TermoAD
1 0000dead _TermoRS
1 0000deae _TermoSW
1 0000ded6 _TestMbox1
1 0000ded8 _TestMbox2
1 0000deda _TestMbox3
0 00008a3d _USER10_ISR
0 00008a32 _USER11_ISR
0 00008a27 _USER12_ISR
@@ -1007,10 +984,10 @@ page address name
0 000089da _USER7_ISR
0 000089cf _USER8_ISR
0 000089c4 _USER9_ISR
1 0000df3c _WAKE
1 0000dee4 _WAKE
0 000089a9 _WAKEINT_ISR
1 0000df3e _WAKE_TIME
1 0000df86 _WAKEpowse
1 0000dee6 _WAKE_TIME
1 0000dec6 _WAKEpowse
0 00008990 _XINT1_ISR
0 00008977 _XINT2_ISR
0 0000895c _XINT3_ISR
@@ -1027,156 +1004,131 @@ abs ffffffff ___TI_prof_data_size
abs ffffffff ___TI_prof_data_start
abs ffffffff ___binit__
abs ffffffff ___c_args__
0 0000c000 ___cinit__
0 0000bb73 ___etext__
0 0000b35f ___cinit__
0 0000b35f ___etext__
abs ffffffff ___pinit__
0 00008000 ___text__
0 0000bafb __args_main
1 0000dfbc __cleanup_ptr
1 0000dfbe __dtors_ptr
1 0000ddbe __lock
0 0000bb69 __nop
0 0000bb65 __register_lock
0 0000bb61 __register_unlock
0 0000b2dd __args_main
1 0000df2c __cleanup_ptr
1 0000df2e __dtors_ptr
1 0000df2a __lock
0 0000b355 __nop
0 0000b351 __register_lock
0 0000b34d __register_unlock
1 00000400 __stack
1 0000ddbc __unlock
0 0000bb2f _abort
1 0000df28 __unlock
0 0000b311 _abort
1 0000d740 _adc_filter
0 0000aa84 _adc_isr
0 0000a157 _adc_isr
1 0000d73c _adc_table_lem
0 0000b9b5 _c_int00
0 0000b198 _c_int00
1 0000dc47 _cal_addr
0 00008053 _calc_sensor_koef
1 0000df00 _ccc
1 0000dda4 _ccc
1 0000dc4b _chk
0 00009ae1 _clear_mem
0 0000b32a _clear_mem
0 00009526 _clear_timer_rs_live
1 0000dd3e _cntr_addr_c
1 0000dd3f _cntr_addr_c_all
0 0000b425 _cpu_timer1_isr_PULT
0 0000ac77 _cpu_timer1_isr_SENS
0 0000b9fb _cpu_timer2_isr
1 0000df25 _cntr_addr_c
1 0000df26 _cntr_addr_c_all
0 0000aacf _cpu_timer1_isr_PULT
0 0000a34a _cpu_timer1_isr_SENS
0 0000b1de _cpu_timer2_isr
1 0000dac0 _crc_16_tab
0 0000951a _create_uart_vars
0 0000afd7 _dOUT
0 0000afe3 _dSEND
0 0000a814 _dOUT
0 0000a820 _dSEND
1 0000dc68 _def_FILTERBAT
1 0000dec0 _def_cal
1 0000de40 _def_cal
1 0000dab0 _digits
1 0000de08 _din_count
1 0000dd01 _din_count
0 0000803e _er_anal
1 0000dfc0 _err_count
1 0000dd01 _errno
0 0000bb31 _exit
1 0000dfa4 _ext_diag
1 0000dfac _ext_temp
0 0000a373 _extendbios
0 0000ba34 _filterbat
1 0000deba _err_count
1 0000df27 _errno
0 0000b313 _exit
1 0000df00 _ext_diag
1 0000df08 _ext_temp
0 000099c6 _extendbios
0 0000b217 _filterbat
1 0000dc41 _flag_DEBUG
1 0000dd04 _flog
1 0000def6 _flog
0 0000921c _get_Buttons
0 000090ff _get_Mode
0 0000a31b _get_command
0 0000b859 _get_crc16
0 0000b848 _get_crc_16
0 0000b81e _get_crc_16b
0 0000996e _get_command
0 0000b03c _get_crc16
0 0000b02b _get_crc_16
0 0000b001 _get_crc_16b
0 00008022 _im_calc
0 0000a31a _init
0 0000b977 _init_zone7
0 0000a2d7 _initload
1 0000dfa0 _isMask
1 0000df9a _isNumb
0 0000b199 _kanal_Send
1 0000dfc6 _lev_count
1 0000df8e _lev_quadr
0 0000a28f _load
0 0000996d _init
0 0000b15a _init_zone7
0 0000992a _initload
1 0000de3c _isMask
1 0000de36 _isNumb
0 0000a6e0 _kanal_Send
1 0000df18 _lev_count
1 0000dee8 _lev_quadr
0 000098e2 _load
1 00200000 _logs_block
1 0000dfdb _low_count
0 0000a66b _main
1 0000df36 _low_count
0 00009f37 _main
1 0000dbc0 _modbus
1 0000dd03 _never_write
1 0000dd02 _no_write
1 0000def5 _never_write
1 0000def4 _no_write
1 0000dc53 _okay
1 0000d900 _out_filter
1 0000dc80 _param
0 0000b966 _pause_us
0 0000a216 _peek
0 0000b149 _pause_us
0 00009869 _peek
1 0000dc4a _period_blink
1 0000df80 _period_dac
1 0000dec0 _period_dac
1 0000dc49 _period_ready
0 0000a1da _poke
1 0000dd2a _powK
0 0000982d _poke
1 0000de98 _powK
1 0000dc48 _pow_addr
1 0000dea2 _prev_ok
1 0000df9b _quaLamp
0 0000a1af _read_memory
1 0000dfcc _readr
1 0000dd88 _prev_ok
1 0000de37 _quaLamp
0 00009802 _read_memory
1 0000df1e _readr
0 00008000 _reset_errs
1 0000d040 _rs_a
1 0000d3c0 _rs_b
0 000088e6 _rsvd_ISR
0 0000a1ae _run
0 00009801 _run
0 000090db _select_tpl_255
0 0000904b _select_tpl_canal
1 0000d704 _sens_count
1 0000df1c _sens_pair
1 0000df40 _sens_type
0 0000bb6a _set_cntrl_addr
0 0000ae3c _setup_adc
1 0000de1e _sens_pair
1 0000de80 _sens_type
0 0000b356 _set_cntrl_addr
0 0000a50d _setup_adc
0 000093e8 _setup_arr_cmd_length
0 00009029 _setup_leds_line
0 00009469 _setup_uart
1 0000dc4c _sig
0 0000a3eb _spiSe2pFree
0 0000a3e7 _spiSe2pRead
0 0000a3e3 _spiSe2pWrite
0 0000babe _sqrt
0 00009cb7 _spiSe2pFree
0 00009cb3 _spiSe2pRead
0 00009caf _spiSe2pWrite
0 0000b2a0 _sqrt
0 000093ba _test_rs_live
0 0000a1ad _tflash
0 00009800 _tflash
1 0000dc4d _time_1_5sec
1 0000dc4f _time_3sec
1 0000dc4e _time_5msec
1 0000dc50 _time_5sec
1 0000df81 _time_dac
0 0000a63e _timer_Init
1 0000dec1 _time_dac
0 00009f0a _timer_Init
1 0000dc46 _tpl_cans
0 00009ff0 _ump_can_fragment
0 0000a110 _ump_can_id
0 0000a0c8 _ump_can_request
0 00009ec3 _ump_crc
1 0000dd19 _ump_dac_duration
1 0000dd1a _ump_dac_go10
1 0000dd1c _ump_dac_position
1 0000dd18 _ump_dac_ramp
1 0000dd1b _ump_dac_stop10
0 00009a92 _ump_log_can
0 00009a5e _ump_log_init
0 00009a30 _ump_log_io
0 00009982 _ump_log_read
0 00009944 _ump_log_rs
0 00009920 _ump_log_tick
0 000098a5 _ump_log_write
0 00009e70 _ump_prepare
0 0000a083 _ump_rtu
0 00009ede _ump_rtu_encode
0 00009f69 _ump_rtu_response
0 0000a063 _ump_tms28335_capture
0 0000a028 _ump_tms28335_fragment
0 00009fd3 _ump_tms28335_prepare
0 00009fb2 _ump_tms28335_rtu
0 00009e1e _ump_validate
0 00008ff7 _unsetup_leds_line
0 0000a128 _upload
1 0000df59 _wait
0 0000afd2 _wast
0 0000bade _what_is
0 0000a125 _write_memory
0 0000a124 _xflash
1 0000dfb4 _zer_count
1 0000ddc0 _zer_filter
0 0000977b _upload
1 0000decf _wait
0 0000a80f _wast
0 0000b2c0 _what_is
0 00009778 _write_memory
0 00009777 _xflash
1 0000df10 _zer_count
1 0000dd40 _zer_filter
abs ffffffff binit
0 0000c000 cinit
0 0000bb73 etext
0 0000b35f cinit
0 0000b35f etext
abs ffffffff pinit
@@ -1294,138 +1246,115 @@ page address name
0 000095a4 _RS_Send
0 000095fc _RS_RX_Handler
0 00009746 _RS_BSend
0 000098a5 _ump_log_write
0 00009920 _ump_log_tick
0 00009944 _ump_log_rs
0 00009982 _ump_log_read
0 00009a30 _ump_log_io
0 00009a5e _ump_log_init
0 00009a92 _ump_log_can
0 00009ae1 _clear_mem
0 00009af6 _SendCommandModbus4
0 00009b1e _Save_params
0 00009bc7 _ReceiveCommandModbus6
0 00009c05 _ReceiveCommandModbus3
0 00009c90 _ReceiveAnswerModbus4
0 00009cba _Default_params
0 00009dd6 _Load_params
0 00009e1e _ump_validate
0 00009e70 _ump_prepare
0 00009ec3 _ump_crc
0 00009ede _ump_rtu_encode
0 00009f69 _ump_rtu_response
0 00009fb2 _ump_tms28335_rtu
0 00009fd3 _ump_tms28335_prepare
0 00009ff0 _ump_can_fragment
0 0000a028 _ump_tms28335_fragment
0 0000a063 _ump_tms28335_capture
0 0000a083 _ump_rtu
0 0000a0c8 _ump_can_request
0 0000a110 _ump_can_id
0 0000a124 _xflash
0 0000a125 _write_memory
0 0000a128 _upload
0 0000a1ad _tflash
0 0000a1ae _run
0 0000a1af _read_memory
0 0000a1b2 _Answer
0 0000a1da _poke
0 0000a216 _peek
0 0000a28f _load
0 0000a2d7 _initload
0 0000a31a _init
0 0000a31b _get_command
0 0000a373 _extendbios
0 0000a3e3 _spiSe2pWrite
0 0000a3e7 _spiSe2pRead
0 0000a3eb _spiSe2pFree
0 0000a3f2 _SPISE2P_DRV_csclr
0 0000a3f7 _SPISE2P_DRV_csset
0 0000a3fc _SPISE2P_DRV_init
0 0000a42e _SPISE2P_DRV_tick
0 0000a58f _Seeprom_write
0 0000a5d2 _Seeprom_read
0 0000a615 _InitSeeprom
0 0000a63e _timer_Init
0 0000a66b _main
0 0000a88b _UMP_CAN_service
0 0000a920 _InitCan
0 0000a9d9 _Handlai
0 0000aa38 _CAN_send
0 0000aa84 _adc_isr
0 0000ac77 _cpu_timer1_isr_SENS
0 0000ae3c _setup_adc
0 0000afd2 _wast
0 0000afd7 _dOUT
0 0000afe3 _dSEND
0 0000b011 _Setup_DAC_time
0 0000b01b _Anal_output
0 0000b064 _Init_DAC
0 0000b080 _Load_runner
0 0000b15c _DOUT
0 0000b168 _DCLK
0 0000b174 _SENDBIT
0 0000b186 _RESET
0 0000b199 _kanal_Send
0 0000b2c8 _ServiceDog
0 0000b2de _DisableDog
0 0000b2e6 _InitPll
0 0000b368 _InitPeripheralClocks
0 0000b3ed _InitSysCtrl
0 0000b3f6 _CsmUnlock
0 0000b425 _cpu_timer1_isr_PULT
0 0000b576 _RSB_TX_Handler
0 0000b5bb _RSB_RX_Handler
0 0000b600 _RSA_TX_Handler
0 0000b645 _RSA_RX_Handler
0 0000b68a _InitXintf16Gpio
0 0000b6e3 _InitXintf32Gpio
0 0000b733 _InitXintf
0 0000b796 FS$$DIV
0 0000b81e _get_crc_16b
0 0000b848 _get_crc_16
0 0000b859 _get_crc16
0 0000b893 _CANa_reset_err
0 0000b8be _CANa_handler
0 0000b908 _InitCpuTimers
0 0000b947 _ConfigCpuTimer
0 0000b966 _pause_us
0 0000b977 _init_zone7
0 0000b9b5 _c_int00
0 0000b9fb _cpu_timer2_isr
0 0000ba34 _filterbat
0 0000ba6b L$$DIV
0 0000ba7a L$$MOD
0 0000ba88 UL$$DIV
0 0000ba8f UL$$MOD
0 0000ba95 _InitPieCtrl
0 0000bab4 _EnableInterrupts
0 0000babe _sqrt
0 0000bade _what_is
0 0000bafb __args_main
0 0000bb16 _InitAdc
0 0000bb2f C$$EXIT
0 0000bb2f _abort
0 0000bb31 _exit
0 0000bb48 _InitPieVectTable
0 0000bb56 U$$DIV
0 0000bb5b U$$MOD
0 0000bb61 __register_unlock
0 0000bb65 __register_lock
0 0000bb69 __nop
0 0000bb6a _set_cntrl_addr
0 0000bb6f _DSP28x_usDelay
0 0000bb73 ___etext__
0 0000bb73 etext
0 00009777 _xflash
0 00009778 _write_memory
0 0000977b _upload
0 00009800 _tflash
0 00009801 _run
0 00009802 _read_memory
0 00009805 _Answer
0 0000982d _poke
0 00009869 _peek
0 000098e2 _load
0 0000992a _initload
0 0000996d _init
0 0000996e _get_command
0 000099c6 _extendbios
0 00009a36 _SendCommandModbus4
0 00009a5e _Save_params
0 00009a87 _ReceiveCommandModbus6
0 00009aaf _ReceiveCommandModbus3
0 00009b24 _ReceiveAnswerModbus4
0 00009b4e _Default_params
0 00009c6a _Load_params
0 00009caf _spiSe2pWrite
0 00009cb3 _spiSe2pRead
0 00009cb7 _spiSe2pFree
0 00009cbe _SPISE2P_DRV_csclr
0 00009cc3 _SPISE2P_DRV_csset
0 00009cc8 _SPISE2P_DRV_init
0 00009cfa _SPISE2P_DRV_tick
0 00009e5b _Seeprom_write
0 00009e9e _Seeprom_read
0 00009ee1 _InitSeeprom
0 00009f0a _timer_Init
0 00009f37 _main
0 0000a157 _adc_isr
0 0000a34a _cpu_timer1_isr_SENS
0 0000a50d _setup_adc
0 0000a6a3 _DOUT
0 0000a6af _DCLK
0 0000a6bb _SENDBIT
0 0000a6cd _RESET
0 0000a6e0 _kanal_Send
0 0000a80f _wast
0 0000a814 _dOUT
0 0000a820 _dSEND
0 0000a84e _Setup_DAC_time
0 0000a858 _Anal_output
0 0000a8a1 _Init_DAC
0 0000a8bd _Load_runner
0 0000a972 _ServiceDog
0 0000a988 _DisableDog
0 0000a990 _InitPll
0 0000aa12 _InitPeripheralClocks
0 0000aa97 _InitSysCtrl
0 0000aaa0 _CsmUnlock
0 0000aacf _cpu_timer1_isr_PULT
0 0000ac20 _InitCan
0 0000accc _Handlai
0 0000ad0d _CAN_send
0 0000ad59 _RSB_TX_Handler
0 0000ad9e _RSB_RX_Handler
0 0000ade3 _RSA_TX_Handler
0 0000ae28 _RSA_RX_Handler
0 0000ae6d _InitXintf16Gpio
0 0000aec6 _InitXintf32Gpio
0 0000af16 _InitXintf
0 0000af79 FS$$DIV
0 0000b001 _get_crc_16b
0 0000b02b _get_crc_16
0 0000b03c _get_crc16
0 0000b076 _CANa_reset_err
0 0000b0a1 _CANa_handler
0 0000b0eb _InitCpuTimers
0 0000b12a _ConfigCpuTimer
0 0000b149 _pause_us
0 0000b15a _init_zone7
0 0000b198 _c_int00
0 0000b1de _cpu_timer2_isr
0 0000b217 _filterbat
0 0000b24e L$$DIV
0 0000b25d L$$MOD
0 0000b26b UL$$DIV
0 0000b272 UL$$MOD
0 0000b278 _InitPieCtrl
0 0000b297 _EnableInterrupts
0 0000b2a0 _sqrt
0 0000b2c0 _what_is
0 0000b2dd __args_main
0 0000b2f8 _InitAdc
0 0000b311 C$$EXIT
0 0000b311 _abort
0 0000b313 _exit
0 0000b32a _clear_mem
0 0000b33f _InitPieVectTable
0 0000b34d __register_unlock
0 0000b351 __register_lock
0 0000b355 __nop
0 0000b356 _set_cntrl_addr
0 0000b35b _DSP28x_usDelay
0 0000b35f ___cinit__
0 0000b35f ___etext__
0 0000b35f cinit
0 0000b35f etext
0 0000c000 _PieVectTableInit
0 0000c000 _RamfuncsLoadEnd
0 0000c000 _RamfuncsLoadStart
0 0000c000 _RamfuncsRunStart
0 0000c000 ___cinit__
0 0000c000 cinit
0 0000c28c _PieVectTableInit
0 0000c3ae _ADDR_ANSWER
0 0000c3af _ADDR_TERMINAL
0 0000c3b0 _CNTRL_ADDR_UNIVERSAL
0 0000c10f _ADDR_ANSWER
0 0000c110 _ADDR_TERMINAL
0 0000c111 _CNTRL_ADDR_UNIVERSAL
0 00380080 _ADC_cal
1 00000400 __stack
1 000007f0 __STACK_END
@@ -1515,82 +1444,77 @@ page address name
1 0000dc7c _LSPCLK
1 0000dc7e _HSPCLK
1 0000dc80 _param
1 0000dd01 _errno
1 0000dd02 _no_write
1 0000dd03 _never_write
1 0000dd04 _flog
1 0000dd18 _ump_dac_ramp
1 0000dd19 _ump_dac_duration
1 0000dd1a _ump_dac_go10
1 0000dd1b _ump_dac_stop10
1 0000dd1c _ump_dac_position
1 0000dd22 _Log
1 0000dd2a _powK
1 0000dd3c _ADDR_FOR_ALL
1 0000dd3d _CNTRL_ADDR
1 0000dd3e _cntr_addr_c
1 0000dd3f _cntr_addr_c_all
1 0000ddbc __unlock
1 0000ddbe __lock
1 0000ddc0 _zer_filter
1 0000de08 _din_count
1 0000de28 _CpuTimer0
1 0000de30 _CpuTimer1
1 0000de38 _CpuTimer2
1 0000de40 _RS_Len
1 0000de86 _ADC_table
1 0000dea2 _prev_ok
1 0000dec0 _def_cal
1 0000df00 _ccc
1 0000df1c _sens_pair
1 0000df34 _COUNT_ONE_CANAL
1 0000df35 _COUNT_DISCHARGE
1 0000df36 _COUNT_TRANSICIA
1 0000df37 _FILTER_CLIP
1 0000df3c _WAKE
1 0000df3e _WAKE_TIME
1 0000df40 _sens_type
1 0000df58 _CanTimeOutErrorTR
1 0000df59 _wait
1 0000df62 _ErrorCount
1 0000df64 _MessageReceivedCount
1 0000df66 _MessageTransivedCount
1 0000df68 _TestMbox1
1 0000df6a _TestMbox2
1 0000df6c _TestMbox3
1 0000df70 _Mode
1 0000df71 _Desk
1 0000df72 _TermoAD
1 0000df73 _TermoRS
1 0000df74 _TermoSW
1 0000df75 _Kurrent
1 0000df76 _Kalibro
1 0000df77 _Owen
1 0000df78 _INcount0
1 0000df79 _INcount1
1 0000df7a _MUX_GPIO32
1 0000df7b _MUX_GPIO48
1 0000df7c _DIR_GPIO32
1 0000df7d _DIR_GPIO48
1 0000df7e _DigErr
1 0000df80 _period_dac
1 0000df81 _time_dac
1 0000df86 _WAKEpowse
1 0000df88 _IMPowse
1 0000df8e _lev_quadr
1 0000df9a _isNumb
1 0000df9b _quaLamp
1 0000dfa0 _isMask
1 0000dfa2 _Lonely
1 0000dfa4 _ext_diag
1 0000dfac _ext_temp
1 0000dfb4 _zer_count
1 0000dfbc __cleanup_ptr
1 0000dfbe __dtors_ptr
1 0000dfc0 _err_count
1 0000dfc6 _lev_count
1 0000dfcc _readr
1 0000dfdb _low_count
1 0000dd01 _din_count
1 0000dd21 _ADC_table
1 0000dd40 _zer_filter
1 0000dd88 _prev_ok
1 0000dda4 _ccc
1 0000ddc0 _RS_Len
1 0000de06 _CpuTimer0
1 0000de0e _CpuTimer1
1 0000de16 _CpuTimer2
1 0000de1e _sens_pair
1 0000de36 _isNumb
1 0000de37 _quaLamp
1 0000de3c _isMask
1 0000de3e _Lonely
1 0000de40 _def_cal
1 0000de80 _sens_type
1 0000de98 _powK
1 0000deaa _Mode
1 0000deab _Desk
1 0000deac _TermoAD
1 0000dead _TermoRS
1 0000deae _TermoSW
1 0000deaf _Kurrent
1 0000deb0 _Kalibro
1 0000deb1 _Owen
1 0000deb2 _INcount0
1 0000deb3 _INcount1
1 0000deb4 _MUX_GPIO32
1 0000deb5 _MUX_GPIO48
1 0000deb6 _DIR_GPIO32
1 0000deb7 _DIR_GPIO48
1 0000deb8 _DigErr
1 0000deba _err_count
1 0000dec0 _period_dac
1 0000dec1 _time_dac
1 0000dec6 _WAKEpowse
1 0000dec8 _IMPowse
1 0000dece _CanTimeOutErrorTR
1 0000decf _wait
1 0000ded0 _ErrorCount
1 0000ded2 _MessageReceivedCount
1 0000ded4 _MessageTransivedCount
1 0000ded6 _TestMbox1
1 0000ded8 _TestMbox2
1 0000deda _TestMbox3
1 0000dedc _COUNT_ONE_CANAL
1 0000dedd _COUNT_DISCHARGE
1 0000dede _COUNT_TRANSICIA
1 0000dedf _FILTER_CLIP
1 0000dee4 _WAKE
1 0000dee6 _WAKE_TIME
1 0000dee8 _lev_quadr
1 0000def4 _no_write
1 0000def5 _never_write
1 0000def6 _flog
1 0000def8 _Log
1 0000df00 _ext_diag
1 0000df08 _ext_temp
1 0000df10 _zer_count
1 0000df18 _lev_count
1 0000df1e _readr
1 0000df23 _ADDR_FOR_ALL
1 0000df24 _CNTRL_ADDR
1 0000df25 _cntr_addr_c
1 0000df26 _cntr_addr_c_all
1 0000df27 _errno
1 0000df28 __unlock
1 0000df2a __lock
1 0000df2c __cleanup_ptr
1 0000df2e __dtors_ptr
1 0000df36 _low_count
1 00200000 _logs_block
1 0033fff8 _CsmPwl
1 00380090 _PartIdRegs
@@ -1604,4 +1528,4 @@ abs ffffffff ___pinit__
abs ffffffff binit
abs ffffffff pinit
[419 symbols]
[391 symbols]

View File

@@ -40,13 +40,12 @@ Source="Source\Internal\pulto.c"
Source="Source\Internal\RS485.c"
Source="Source\Internal\spise2p.c"
Source="Source\Internal\tools.c"
Source="Source\Internal\shared_ump.c"
Source="F28335.cmd"
Source="Source\External\v120\DSP2833x_headers\cmd\DSP2833x_Headers_nonBIOS.cmd"
["Debug" Settings]
FinalBuildCmd=$(Proj_dir)\bin\hex2000.exe $(Proj_dir)\bin\UKSSTMS320F28335.out -boot -sci8 -map $(Proj_dir)\bin\UKSSTMS320F28335.map -o $(Proj_dir)\bin\UKSSTMS320F28335.hex -i
FinalBuildCmd=cmd /c ""$(Proj_dir)\build_bin.bat""
FinalBuildCmd=$(Proj_dir)\bin\hex2000.exe $(Proj_dir)\bin\UKSSTMS320F28335.out -boot -sci8 -map $(Proj_dir)\bin\UKSSTMS320F28335.map -o $(Proj_dir)\bin\UKSSTMS320F28335.bin -b
["Compiler" Settings: "Debug"]
Options=-g -pdsw225 -o1 -fr"$(Proj_dir)\Debug" -fs"$(Proj_dir)\Asm" -i"$(Proj_dir)\Source\External\v120\DSP2833x_headers\include" -i"$(Proj_dir)\Source\Internal\Include" -i"$(Proj_dir)\Source\External\v120\DSP2833x_common\include" -d"_DEBUG" -d"LARGE_MODEL" -md -ml -v28 --float_support=fpu32

View File

@@ -1,13 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<?ccsproject version="1.0"?>
<projectOptions>
<ccsVersion value="12.3.0"/>
<deviceVariant value="TMS320C28XX.TMS320F28335"/>
<deviceFamily value="C2000"/>
<deviceEndianness value="little"/>
<codegenToolVersion value="22.6.0.LTS"/>
<isElfFormat value="false"/>
<rts value=""/>
<isTargetManual value="false"/>
<connection value="common/targetdb/connections/SAU510USBIsoPlusV2_Connection.xml"/>
</projectOptions>

View File

@@ -15,8 +15,8 @@
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="out" artifactName="${SRC_ROOT}/bin/UKSSTMS320F28335" buildProperties="" cleanCommand="${CG_CLEAN_CMD}" description="" id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063" name="Debug" parent="com.ti.ccstudio.buildDefinitions.C2000.Debug" postbuildStep="&quot;${PROJECT_ROOT}/postBuildStep_Debug.bat&quot; PROJECT_ROOT ${PROJECT_ROOT} !">
<folderInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063." name="/" resourcePath="">
<toolChain id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain.1656408937" name="TI Build Tools" secondaryOutputs="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.outputType__BIN.139478444" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.1238234098">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.1809066827" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
<toolChain id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain.1694037709" name="TI Build Tools" secondaryOutputs="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.outputType__BIN.1301609158" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.DebugToolchain" targetTool="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.264881034">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS.2103133342" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_TAGS" valueType="stringList">
<listOptionValue builtIn="false" value="DEVICE_CONFIGURATION_ID=TMS320C28XX.TMS320F28335"/>
<listOptionValue builtIn="false" value="DEVICE_CORE_ID=C2800"/>
<listOptionValue builtIn="false" value="DEVICE_ENDIANNESS=little"/>
@@ -29,110 +29,164 @@
<listOptionValue builtIn="false" value="PRODUCT_MACRO_IMPORTS={&quot;com.ti.rtsc.XDCtools&quot;:[&quot;${COM_TI_XDC_INCLUDE_PATH}&quot;,&quot;${COM_TI_XDC_LIBRARY_PATH}&quot;,&quot;${COM_TI_XDC_LIBRARIES}&quot;,&quot;${COM_TI_XDC_SYMBOLS}&quot;,&quot;${COM_TI_XDC_SYSCONFIG_MANIFEST}&quot;]}"/>
<listOptionValue builtIn="false" value="OUTPUT_TYPE=executable"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1182984787" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="22.6.0.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug.2023332194" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug.1704049401" name="GNU Make.Debug" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug"/>
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug">
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL.1683926605" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY.884660743" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.750562333" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.28" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.1723304888" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.fpu32" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1217592973" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.1885063317" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.3" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH.24504397" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${COM_TI_XDC_INCLUDE_PATH}"/>
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/Source/External/v120/DSP2833x_headers/include"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/Source/Internal/Include"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/../newProject/SETGUI/third_party/templates/c/set-protocol"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/../newProject/SETGUI/third_party/templates/c/set-protocol/ports/tms320f28335"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/Source/External/v120/DSP2833x_common/include"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE.409484878" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE" valueType="definedSymbols">
<option id="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION.1392803021" name="Compiler version" superClass="com.ti.ccstudio.buildDefinitions.core.OPT_CODEGEN_VERSION" value="22.6.1.LTS" valueType="string"/>
<targetPlatform id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug.572767202" name="Platform" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.targetPlatformDebug"/>
<builder buildPath="${BuildDirectory}" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug.587257744" keepEnvironmentInBuildfile="false" name="GNU Make" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.builderDebug"/>
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug">
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL.820393069" name="Option deprecated, set by default (--large_memory_model, -ml)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.LARGE_MEMORY_MODEL" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY.2144616981" name="Unified memory (--unified_memory, -mt)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.UNIFIED_MEMORY" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.170617429" name="Processor version (--silicon_version, -v)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.SILICON_VERSION.28" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.780531335" name="Specify floating point support (--float_support)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.FLOAT_SUPPORT.fpu32" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.1864954388" name="Debugging model" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.985808316" name="Optimization level (--opt_level, -O)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_LEVEL.1" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE.675690116" name="Pre-define NAME (--define, -D)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEFINE" valueType="definedSymbols">
<listOptionValue builtIn="false" value="${COM_TI_XDC_SYMBOLS}"/>
<listOptionValue builtIn="false" value="_DEBUG"/>
<listOptionValue builtIn="false" value="LARGE_MODEL"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.1803616155" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DEBUGGING_MODEL.SYMDEBUG__DWARF" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING.568054879" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING" valueType="stringList">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH.1101592997" name="Add dir to #include search path (--include_path, -I)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${COM_TI_XDC_INCLUDE_PATH}"/>
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/Source/External/v120/DSP2833x_headers/include"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/Source/Internal/Include"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/Source/External/v120/DSP2833x_common/include"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING.1637769882" name="Treat diagnostic &lt;id&gt; as warning (--diag_warning, -pdsw)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIAG_WARNING" valueType="stringList">
<listOptionValue builtIn="false" value="225"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER.362706119" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.1036638377" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.coffabi" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.432714325" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.manual" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ASM_DIRECTORY.1618389870" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ASM_DIRECTORY" value="${SRC_ROOT}/Asm" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OBJ_DIRECTORY.1178110939" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OBJ_DIRECTORY" value="${SRC_ROOT}/Debug" valueType="string"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.413246530" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.1626831603" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.291886960" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.231319110" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER.1718935508" name="Emit diagnostic identifier numbers (--display_error_number, -pden) [deprecated]" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISABLE_DP_LOAD_OPT.508254956" name="No DP load optimization (--disable_dp_load_opt, -md) [deprecated]" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DISABLE_DP_LOAD_OPT" value="false" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.931064558" name="Mode" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.DIRECTORY_MODE.manual" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ASM_DIRECTORY.208951995" name="Assembly file directory (default is .) (--asm_directory, -fs)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ASM_DIRECTORY" value="${SRC_ROOT}/Asm" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OBJ_DIRECTORY.1976695432" name="Object file directory (default is .) (--obj_directory, -fr)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OBJ_DIRECTORY" value="${SRC_ROOT}/Debug" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.868902835" name="Application binary interface [See 'General' page to edit] (--abi)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.coffabi" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.PREPROC_MODE.336664968" name="Mode" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.PREPROC_MODE" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.PREPROC_MODE.automatic" valueType="enumerated"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.286245561" name="Speed vs. size trade-offs (--opt_for_speed, -mf)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.OPT_FOR_SPEED.3" valueType="enumerated"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1841609863" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.1086928492" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.2098330249" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.1634305249" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.1238234098" name="C2000 Linker" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug">
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE.1288161308" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE" value="0x3f0" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE.1478857036" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE" value="${SRC_ROOT}/UKSSTMS320F28335.map" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE.1263270138" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE" value="${SRC_ROOT}/bin/UKSSTMS320F28335.out" valueType="string"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY.1967188356" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY" valueType="libs">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.264881034" name="C2000 Linker" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug">
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE.1448747715" name="Set C system stack size (--stack_size, -stack)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.STACK_SIZE" value="0x3f0" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE.707219786" name="Specify output file name (--output_file, -o)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.OUTPUT_FILE" value="${SRC_ROOT}/bin/UKSSTMS320F28335.out" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE.2139547665" name="Link information (map) listed into &lt;file&gt; (--map_file, -m)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.MAP_FILE" value="${SRC_ROOT}/UKSSTMS320F28335.map" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER.1783170577" name="Emit diagnostic identifier numbers (--display_error_number)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY.947938365" name="Include library file or command file as input (--library, -l)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.LIBRARY" valueType="libs">
<listOptionValue builtIn="false" value="${COM_TI_XDC_LIBRARIES}"/>
<listOptionValue builtIn="false" value="rts2800_fpu32.lib"/>
<listOptionValue builtIn="false" value="libc.a"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH.1097407993" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH" valueType="libPaths">
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH.924106241" name="Add &lt;dir&gt; to library search path (--search_path, -i)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.SEARCH_PATH" valueType="libPaths">
<listOptionValue builtIn="false" value="${COM_TI_XDC_LIBRARY_PATH}"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/lib"/>
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER.2141790994" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.DISPLAY_ERROR_NUMBER" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO.1355214148" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO" value="${ProjName}_linkInfo.xml" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT.862275171" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT" value="_c_int00" valueType="string"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS.1082823352" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS.1635863502" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS.209596448" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO.673891072" name="Detailed link information data-base into &lt;file&gt; (--xml_link_info, -xml_link_info)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.XML_LINK_INFO" value="${ProjName}_linkInfo.xml" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT.428056443" name="Specify program entry point for the output module (--entry_point, -e)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.linkerID.ENTRY_POINT" value="_c_int00" valueType="string"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS.2063076767" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS.1278440468" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS.475308968" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS"/>
</tool>
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.183039420" name="C2000 Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex">
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.TOOL_ENABLE.1314862744" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.TOOL_ENABLE" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.OUTPUT_FILE.691623425" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.OUTPUT_FILE" value="${BuildArtifactFileBaseName}.hex" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BOOT.823974062" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BOOT" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.SCI8.141743697" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.SCI8" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BINARY.1971900245" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BINARY" value="true" valueType="boolean"/>
<outputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.outputType__BIN.139478444" name="Binary File" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.outputType__BIN"/>
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.463184621" name="C2000 Hex Utility" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex">
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.TOOL_ENABLE.1211082216" name="Enable tool" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.TOOL_ENABLE" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BINARY.98035882" name="Binary (--binary, -b)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BINARY" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BOOT.1349342649" name="Select boot mode (--boot, -boot)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.BOOT" value="true" valueType="boolean"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.OUTPUT_FILE.774606840" name="Specify output file names (--outfile, -o)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.OUTPUT_FILE" value="${BuildArtifactFileBaseName}.hex" valueType="string"/>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.SCI8.1311460653" name="Specify table source as SCI-A port, 8-bit mode (--sci8, -sci8)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.SCI8" value="true" valueType="boolean"/>
<outputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.outputType__BIN.1301609158" name="Binary File" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.hex.outputType__BIN"/>
</tool>
</toolChain>
</folderInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Libraries/rts2800_fpu32.lib" name="rts2800_fpu32.lib" rcbsApplicability="disable" resourcePath="Libraries/rts2800_fpu32.lib" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.1238234098.1861788543">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.1238234098.1861788543" name="C2000 Linker" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.1238234098"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Libraries/rts2800_fpu32.lib" name="rts2800_fpu32.lib" rcbsApplicability="disable" resourcePath="Libraries/rts2800_fpu32.lib" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.264881034.1014322399">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.264881034.1014322399" name="C2000 Linker" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.linkerDebug.264881034">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS.594886582" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS.1357268660" name="Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__CMD2_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS.348203498" name="Generated Linker Command Files" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exeLinker.inputType__GEN_CMDS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c" name="DSP2833x_CpuTimers.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1445122022">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1445122022" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c" name="DSP2833x_CpuTimers.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.1666455170">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.1666455170" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.143521838" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.999671720" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.1346171903" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.503835690" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c" name="DSP2833x_PieCtrl.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.507897506">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.507897506" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c" name="DSP2833x_PieCtrl.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.1599547428">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.1599547428" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.897134013" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.1047891942" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.1199013614" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.456955546" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm" name="DSP2833x_usDelay.asm" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1033339643">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1033339643" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm" name="DSP2833x_usDelay.asm" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.286807043">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.286807043" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1639871030" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.549583040" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.1344912169" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.1124994409" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm" name="DSP2833x_ADC_cal.asm" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1671138137">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1671138137" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm" name="DSP2833x_ADC_cal.asm" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.858922652">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.858922652" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.2021243201" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.643014401" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.2041982648" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.1809162205" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c" name="DSP2833x_Xintf.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.447523308">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.447523308" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c" name="DSP2833x_Xintf.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.2000257353">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.2000257353" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.168483562" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.1427889033" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.1414494164" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.1827661242" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c" name="DSP2833x_Adc.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.815420679">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.815420679" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c" name="DSP2833x_Adc.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.2027478012">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.2027478012" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1468095781" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.118824589" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.1403730917" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.927697173" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c" name="DSP2833x_SWPrioritizedDefaultIsr.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.116106031">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.116106031" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c" name="DSP2833x_SWPrioritizedDefaultIsr.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.838973811">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.838973811" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1656275290" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.1030775972" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.819408908" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.169735509" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c" name="DSP2833x_SysCtrl.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.960549337">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.960549337" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c" name="DSP2833x_SysCtrl.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.182605077">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.182605077" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.1017908642" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.904716373" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.210314610" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.674937426" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c" name="DSP2833x_SWPrioritizedPieVect.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1637523013">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1637523013" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c" name="DSP2833x_SWPrioritizedPieVect.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.352122338">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.352122338" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.80268884" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.548740381" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.560780097" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.470479339" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c" name="DSP2833x_GlobalVariableDefs.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1399834869">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068.1399834869" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.68471068"/>
<fileInfo id="com.ti.ccstudio.buildDefinitions.C2000.Debug.952393063.Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c" name="DSP2833x_GlobalVariableDefs.c" rcbsApplicability="disable" resourcePath="Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c" toolsToInvoke="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.2029159718">
<tool id="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918.2029159718" name="C2000 Compiler" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.exe.compilerDebug.288668918">
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS.110796556" name="C Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__C_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS.2037006228" name="C++ Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__CPP_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS.458133570" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM_SRCS"/>
<inputType id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS.703383149" name="Assembly Sources" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compiler.inputType__ASM2_SRCS"/>
</tool>
</fileInfo>
<sourceEntries>
<entry excluding="28335_RAM_lnk.cmd" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
@@ -177,8 +231,6 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH.1192698951" name="Add dir to #include search path (--include_path, -I)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.INCLUDE_PATH" valueType="includePath">
<listOptionValue builtIn="false" value="${PROJECT_ROOT}"/>
<listOptionValue builtIn="false" value="${XDAIS_CG_ROOT}/packages/ti/xdais"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/../newProject/SETGUI/third_party/templates/c/set-protocol"/>
<listOptionValue builtIn="false" value="${SRC_ROOT}/../newProject/SETGUI/third_party/templates/c/set-protocol/ports/tms320f28335"/>
<listOptionValue builtIn="false" value="${CG_TOOL_ROOT}/include"/>
</option>
<option id="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.1753758546" name="Application binary interface [See 'General' page to edit] (--abi)" superClass="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI" useByScannerDiscovery="false" value="com.ti.ccstudio.buildDefinitions.C2000_22.6.compilerID.ABI.coffabi" valueType="enumerated"/>

View File

@@ -105,11 +105,6 @@
<type>1</type>
<locationURI>SRC_ROOT1/Source/Internal/measure.c</locationURI>
</link>
<link>
<name>Source/Internal/shared_ump.c</name>
<type>1</type>
<locationURI>SRC_ROOT1/Source/Internal/shared_ump.c</locationURI>
</link>
<link>
<name>Source/Internal/message.c</name>
<type>1</type>
@@ -198,7 +193,7 @@
</variable>
<variable>
<name>SRC_ROOT1</name>
<value>$%7BPARENT-1-PROJECT_LOC%7D</value>
<value>$%7BPARENT-2-SRC_ROOT%7D/Project/Balsam_167</value>
</variable>
</variableList>
</projectDescription>

View File

@@ -1,16 +0,0 @@
# Результаты сборки
Для сборки требуется общий UMP-протокол из соседнего репозитория:
`../newProject/SETGUI/third_party/templates/c/set-protocol` (от корня этого
репозитория). Пути к заголовкам заданы в `.cproject` для Debug и Release;
`Source/Internal/shared_ump.c` подключён в `.project` и компилирует общую
реализацию протокола и порт TMS320F28335. При другом расположении зависимости
обновите оба пути Include Options в нужной конфигурации CCS.
После сборки Debug в `Bin` создаётся файл
`UKSSTMS320F28335_<commit>.bin`, где `<commit>` — короткий хеш текущего
коммита Git (не менее 8 символов). HEX сохраняет прежнее имя.
BIN создаётся скриптом `build_bin.bat`; Git должен быть доступен в `PATH`
процесса CCS. Если определить коммит не удалось, сборка завершается ошибкой.
При наличии незакоммиченных правок хеш обозначает HEAD и не описывает эти правки.

View File

@@ -23,11 +23,12 @@ shift
goto process_arg
:end_process_arg
pushd "%SRC_ROOT%\Bin" || exit /b 1
hex2000.exe UKSSTMS320F28335.out -boot -sci8 -map UKSSTMS320F28335.map -o UKSSTMS320F28335.hex -i
set "BUILD_RESULT=%errorlevel%"
popd
if not "%BUILD_RESULT%"=="0" exit /b %BUILD_RESULT%
echo. > temp_postBuildStep_Debug.bat
call "%SRC_ROOT%\build_bin.bat"
exit /b %errorlevel%
echo "%SRC_ROOT%\Bin\hex2000.exe" "%SRC_ROOT%\Bin\UKSSTMS320F28335.out" -boot -sci8 -map "%SRC_ROOT%\Bin\UKSSTMS320F28335.map" -o "%SRC_ROOT%\Bin\UKSSTMS320F28335.hex" -i >> temp_postBuildStep_Debug.bat
echo "%SRC_ROOT%\Bin\hex2000.exe" "%SRC_ROOT%\Bin\UKSSTMS320F28335.out" -boot -sci8 -map "%SRC_ROOT%\Bin\UKSSTMS320F28335.map" -o "%SRC_ROOT%\Bin\UKSSTMS320F28335.bin" -b >> temp_postBuildStep_Debug.bat
call temp_postBuildStep_Debug.bat
del temp_postBuildStep_Debug.bat
endlocal

View File

@@ -1,20 +0,0 @@
@echo off
setlocal
set "SRC_ROOT=%~dp0"
set "GIT_COMMIT="
for /f "delims=" %%H in ('git -C "%SRC_ROOT%." rev-parse --short^=8 HEAD') do set "GIT_COMMIT=%%H"
if not defined GIT_COMMIT (
echo ERROR: Cannot determine the Git commit. Make Git available in PATH. 1>&2
exit /b 1
)
pushd "%SRC_ROOT%Bin" || exit /b 1
hex2000.exe UKSSTMS320F28335.out -boot -sci8 -map UKSSTMS320F28335.map -o UKSSTMS320F28335_%GIT_COMMIT%.bin.pending -b
set "BUILD_RESULT=%errorlevel%"
if not "%BUILD_RESULT%"=="0" goto finish
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%SRC_ROOT%check_firmware.ps1" -Path "UKSSTMS320F28335_%GIT_COMMIT%.bin.pending" -PublishPath "UKSSTMS320F28335_%GIT_COMMIT%.bin"
set "BUILD_RESULT=%errorlevel%"
:finish
popd
exit /b %BUILD_RESULT%

View File

@@ -1,53 +0,0 @@
param(
[string]$TemplatesRoot = "$PSScriptRoot/../newProject/SETGUI/third_party/templates",
[string]$CompilerRoot = 'C:/ti/ccs1230/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS',
[string]$OutputDirectory = "$PSScriptRoot/Bin/LoggerEepromFix",
[switch]$OptimizeForSize,
[ValidateSet(0,1)][int]$Rs232Fifo = 1,
[string]$ImageName = "UKSSTMS320F28335_logger_eeprom_fix"
)
$ErrorActionPreference = 'Stop'
$protocol = Join-Path (Resolve-Path -LiteralPath $TemplatesRoot).Path 'c/set-protocol'
foreach ($required in @('src/ump_protocol.c', 'ports/tms320f28335/ump_tms28335.c')) {
if (!(Test-Path -LiteralPath (Join-Path $protocol $required))) {
throw "Missing $required in $protocol. Use templates with the UMP v3 port."
}
}
$output = $OutputDirectory
$objects = Join-Path $output 'obj'
New-Item -ItemType Directory -Force -Path $objects | Out-Null
$includes = @('Source/Internal/Include', 'Source/External/v120/DSP2833x_headers/include',
'Source/External/v120/DSP2833x_common/include') | ForEach-Object { "--include_path=$PSScriptRoot/$_" }
$includes += @("--include_path=$CompilerRoot/include", "--include_path=$protocol",
"--include_path=$protocol/ports/tms320f28335")
# Match the CCS Debug configuration used for 34a95bc5.
$flags = @('-v28', '-ml', '-mt', '--float_support=fpu32', '-O1', '--define=LARGE_MODEL',
'--define=_DEBUG', '--symdebug:dwarf', '--abi=coffabi', '--opt_for_speed=3')
$flags += "--define=RS232_USE_FIFO=$Rs232Fifo"
if ($OptimizeForSize) {
$flags = @($flags | Where-Object { $_ -ne '-O1' -and $_ -ne '--opt_for_speed=3' })
$flags += @('-O2', '--opt_for_speed=0')
}
$external = @('DSP2833x_ADC_cal.asm', 'DSP2833x_Adc.c', 'DSP2833x_CpuTimers.c',
'DSP2833x_PieCtrl.c', 'DSP2833x_SWPrioritizedDefaultIsr.c', 'DSP2833x_SWPrioritizedPieVect.c',
'DSP2833x_SysCtrl.c', 'DSP2833x_Xintf.c', 'DSP2833x_usDelay.asm')
$sources = @(Get-ChildItem -LiteralPath "$PSScriptRoot/Source/Internal" -Filter '*.c' | Sort-Object Name | ForEach-Object FullName)
$sources += $external | ForEach-Object { "$PSScriptRoot/Source/External/v120/DSP2833x_common/source/$_" }
$sources += "$PSScriptRoot/Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c"
$objectFiles = @()
foreach ($source in $sources) {
& "$CompilerRoot/bin/cl2000.exe" @flags @includes --compile_only "--obj_directory=$objects" $source
if ($LASTEXITCODE -ne 0) { throw "Compilation failed: $source" }
$objectFiles += Join-Path $objects ([IO.Path]::GetFileNameWithoutExtension($source) + '.obj')
}
$name = $ImageName
& "$CompilerRoot/bin/cl2000.exe" @flags -z "--map_file=$output/$name.map" --stack_size=0x3f0 --warn_sections `
"--search_path=$CompilerRoot/lib" --reread_libs --entry_point=_c_int00 --rom_model `
"--output_file=$output/$name.out" @objectFiles "$PSScriptRoot/F28335.cmd" `
"$PSScriptRoot/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd" `
"$PSScriptRoot/Libraries/rts2800_fpu32.lib"
if ($LASTEXITCODE -ne 0) { throw 'Link failed' }
& "$CompilerRoot/bin/hex2000.exe" "$output/$name.out" -boot -sci8 -map "$output/${name}_hex.map" -o "$output/$name.bin.pending" -b
if ($LASTEXITCODE -ne 0) { throw 'Binary conversion failed' }
& "$PSScriptRoot/check_firmware.ps1" -Path "$output/$name.bin.pending" -PublishPath "$output/$name.bin"
Write-Output "Firmware: $output/$name.bin"

View File

@@ -1,36 +0,0 @@
param(
[Parameter(Mandatory=$true)][string]$Path,
[string]$PublishPath
)
$ErrorActionPreference = 'Stop'
# Load_params/Save_params use word address 0x3FFF-(ANSWER_LEN+1).
# Seeprom_write converts that address to wire bytes (WORD_LEN=2).
$header = Get-Content -Raw -LiteralPath "$PSScriptRoot/Source/Internal/Include/message.h"
if ($header -notmatch '(?m)^#define\s+ANSWER_LEN\s+(0x[0-9a-fA-F]+|[0-9]+)') {
throw 'Cannot determine the EEPROM parameter reservation from ANSWER_LEN'
}
$registerCount = if ($Matches[1].StartsWith('0x')) {
[Convert]::ToInt32($Matches[1].Substring(2), 16)
} else { [int]$Matches[1] }
$limit = (0x3FFF - ($registerCount + 1)) * 2
$bytes = [IO.File]::ReadAllBytes((Resolve-Path -LiteralPath $Path).Path)
if ($bytes.Length -gt $limit) {
throw "Firmware size $($bytes.Length) exceeds EEPROM firmware area $limit bytes; overlaps saved parameters by $($bytes.Length - $limit) bytes."
}
if ($bytes.Length -lt 30 -or [BitConverter]::ToUInt16($bytes, 0) -ne 0x08AA) {
throw 'Expected a C2000 SCI8 boot image'
}
$offset = 22
$blocks = 0
while ($true) {
if ($offset + 2 -gt $bytes.Length) { throw 'Missing boot table terminator' }
$words = [BitConverter]::ToUInt16($bytes, $offset)
$offset += 2
if (!$words) { break }
$offset += 4 + 2 * $words
if ($offset -gt $bytes.Length) { throw 'Truncated boot table block' }
$blocks++
}
if (!$blocks -or $offset -ne $bytes.Length) { throw 'Invalid boot table length' }
if ($PublishPath) { Move-Item -LiteralPath $Path -Destination $PublishPath -Force }
Write-Output "Verified SCI8 image: $($bytes.Length) bytes, $blocks blocks, $($limit - $bytes.Length) bytes before saved parameters."

View File

@@ -1,118 +0,0 @@
volatile struct SCI_REGS SciaRegs,ScibRegs;
struct { struct { struct { unsigned ACK9; } bit; } PIEACK; } PieCtrlRegs;
struct { struct { struct { unsigned GPIO34; } bit; } GPBDAT; } GpioDataRegs;
RS_DATA rs_a,rs_b;
unsigned int RS_Len[70],irq;
static unsigned int load_memory[4100];
static unsigned int __disable_interrupts(void) { unsigned old=irq;irq=1;return old; }
static void __restore_interrupts(unsigned state) { irq=state; }
void RS_SetLineMode(RS_DATA *p,int bits,char parity,int stop)
{ (void)p;(void)bits;(void)parity;(void)stop; }
static unsigned int queue[2][16],length[2],wire[2][20000],wire_count[2];
static unsigned int rx[2][16],rx_count[2],rx_pos[2],shift_pending[2],shift_checks;
static unsigned int port(RS_DATA *p) {return p->commnumber-1;}
static void model_interrupts(RS_DATA *p,unsigned tx)
{ p->SciRegs->SCICTL2.bit.TXINTENA=tx;p->SciRegs->SCICTL2.bit.RXBKINTENA=!tx; }
static void model_flush(RS_DATA *p)
{ unsigned i=port(p);rx_count[i]=rx_pos[i]=0;p->SciRegs->SCIFFRX.bit.RXFFST=0;p->SciRegs->SCIFFRX.bit.RXFFOVF=0; }
static unsigned int model_pop(RS_DATA *p)
{
unsigned i=port(p),v;assert(rx_pos[i]<rx_count[i]);v=rx[i][rx_pos[i]++];
p->SciRegs->SCIFFRX.bit.RXFFST=rx_count[i]-rx_pos[i];
p->SciRegs->SCIRXST.bit.RXRDY=rx_pos[i]<rx_count[i];return v;
}
static void model_push(RS_DATA *p,unsigned v)
{
unsigned i=port(p);assert(length[i]<16);queue[i][length[i]++]=v&255;
if(i==0)p->SciRegs->SCIFFTX.bit.TXFFST=length[i];
p->SciRegs->SCICTL2.bit.TXEMPTY=0;
}
static void model_shift(RS_DATA *p)
{
unsigned i=port(p);assert(length[i]==0);
if(i==0)assert(p->fifo_tx_active); /* last symbol cannot finish early */
shift_pending[i]=0;p->SciRegs->SCICTL2.bit.TXEMPTY=1;shift_checks++;
}
static void model_step(RS_DATA *p)
{
unsigned i=port(p),j;
if(length[i]) {
wire[i][wire_count[i]++]=queue[i][0];
for(j=1;j<length[i];j++)queue[i][j-1]=queue[i][j];
length[i]--;shift_pending[i]=1;
if(i==0)p->SciRegs->SCIFFTX.bit.TXFFST=length[i];
} else if(shift_pending[i]) model_shift(p);
if(i==0 && p->SciRegs->SCIFFTX.bit.TXFFIENA &&
length[i]<=p->SciRegs->SCIFFTX.bit.TXFFIL) RS_TX_Handler(p);
}
static void reset(void)
{
memset(&rs_a,0,sizeof(rs_a));memset(&rs_b,0,sizeof(rs_b));
memset((void *)&SciaRegs,0,sizeof(SciaRegs));memset((void *)&ScibRegs,0,sizeof(ScibRegs));
memset(length,0,sizeof(length));memset(wire_count,0,sizeof(wire_count));
memset(rx_count,0,sizeof(rx_count));memset(rx_pos,0,sizeof(rx_pos));
memset(shift_pending,0,sizeof(shift_pending));
rs_a.commnumber=1;rs_b.commnumber=2;rs_a.SciRegs=&SciaRegs;rs_b.SciRegs=&ScibRegs;
SciaRegs.SCICTL2.bit.TXEMPTY=ScibRegs.SCICTL2.bit.TXEMPTY=1;
rs_a.RS_Flag9bit=rs_b.RS_Flag9bit=1;
RS_Len[3]=8;RS_Len[6]=8;RS_Len[16]=13;RS_Len[51]=12;
GpioDataRegs.GPBDAT.bit.GPIO34=1;irq=0;
}
static void feed(RS_DATA *p,const unsigned *bytes,unsigned n)
{
unsigned i=port(p),j;assert(n<=16);rx_pos[i]=0;rx_count[i]=n;
for(j=0;j<n;j++)rx[i][j]=bytes[j];
p->SciRegs->SCIFFRX.bit.RXFFST=n;p->SciRegs->SCIRXST.bit.RXRDY=n!=0;
RS_RX_Handler(p);
}
/* HANDLERS */
int main(void)
{
unsigned data[4200],sizes[]={0,1,2,7,8,15,16,17,31,120,253,400,8194};
unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0};
for(mode=0;mode<2;mode++)for(a=0;a<sizeof(sizes)/sizeof(sizes[0]);a++) {
reset();n=sizes[a];for(i=0;i<4200;i++)data[i]=(i*131U+17U)&65535;
if(mode==0 && n>4200)continue;
assert((mode ? RS_BSend(&rs_a,data,n):RS_Send(&rs_a,data,n))==0);
if(n && rs_a.fifo_tx_active)assert(rs_a.RS_Flag9bit==0);
RS_FifoWait(&rs_a);assert(!rs_a.fifo_tx_active && wire_count[0]==n);
for(i=0;i<n;i++)assert(wire[0][i]==(mode?((i&1)?LOBYTE(data[i/2]):HIBYTE(data[i/2])):LOBYTE(data[i])));
assert(GpioDataRegs.GPBDAT.bit.GPIO34==1); /* RS232 never touches DE */
assert(!irq);
}
assert(shift_checks>0);
reset();feed(&rs_a,request,8);assert(rs_a.RS_DataReady && rs_a.RS_HeaderCnt==8);
reset();feed(&rs_a,request,3);feed(&rs_a,request+3,5);assert(rs_a.RS_DataReady);
/* LOAD payload, including a short final chunk: nothing waits for byte 8. */
reset();rs_a.RS_PrevCmd=CMD_INITLOAD;rs_a.RS_Length=8194;
rs_a.pRS_RecvPtr=rs_a.pRecvPtr=load_memory;
data[0]=16;data[1]=CMD_LOAD;feed(&rs_a,data,2);
for(a=0;a<8194;a+=n) {
n=8194-a;n=n<16?n:16;
for(i=0;i<n;i++)data[i]=(a+i)&255;
feed(&rs_a,data,n);
}
assert(rs_a.RS_DataReady && rs_a.RS_RecvLen==8194);
for(i=0;i<4097;i++)assert(load_memory[i]==(((2*i)&255)<<8 | ((2*i+1)&255)));
reset();data[0]=1;data[1]=2;RS_Send(&rs_a,data,2);
feed(&rs_b,request,8);assert(rs_b.RS_DataReady && rs_a.fifo_tx_active);
RS_FifoWait(&rs_a);
reset();request[3]=0xC000;feed(&rs_a,request,8);
assert(!rs_a.RS_DataReady && rs_a.fifo_rx_errors==1 && rs_a.fifo_rx_guard);
request[3]=0;feed(&rs_a,request,8);assert(!rs_a.RS_DataReady);
for(i=0;i<4;i++)RS_FifoTick1ms();
feed(&rs_a,request,8);assert(rs_a.RS_DataReady);
reset();SciaRegs.SCIFFRX.bit.RXFFOVF=1;RS_RX_Handler(&rs_a);
assert(rs_a.fifo_overflows==1 && !rs_a.BS_LoadOK);
for(i=0;i<4;i++)RS_FifoTick1ms();feed(&rs_a,request,8);assert(rs_a.RS_DataReady);
/* A spurious old threshold interrupt may not finish an occupied FIFO. */
reset();RS_Send(&rs_a,data,8);RS_TX_Handler(&rs_a);assert(rs_a.fifo_tx_active);
RS_FifoWait(&rs_a);assert(wire_count[0]==8);
/* SCI-B keeps the original RX parser and IRQ/TX path, never FIFO state. */
reset();feed(&rs_b,request,8);assert(rs_b.RS_DataReady);
reset();RS_Send(&rs_b,data,2);assert(!rs_b.fifo_tx_active && length[1]==1);
model_step(&rs_b);RS_TX_Handler(&rs_b); /* legacy RS_Wait drains final char */
assert(GpioDataRegs.GPBDAT.bit.GPIO34==1);
puts("PM35 RS232 FIFO: PASS (TX/RX/errors/recovery/SCI-B isolation)");return 0;
}

View File

@@ -1,73 +0,0 @@
"""Exercise production RS485.c functions with FIFO register side effects."""
import argparse
import os
from pathlib import Path
import re
import subprocess
import tempfile
root=Path(__file__).resolve().parents[2]
def read(path):
return re.sub(r'/\*.*?\*/|//[^\n]*','',path.read_bytes().decode('cp1251').replace('\r\n','\n'),flags=re.S)
source=read(root/'Source/Internal/RS485.c')
names=['RS_RX_Handler','RS_TX_Handler','RS_Send','RS_BSend','RS_SetBitMode',
'RS_FifoWait','RS_FifoTx','RS_FifoStart','RS_FifoAbort','RS_FifoTick1ms']
prototypes=[];functions=[]
for name in names:
match=re.search(r'(?:static\s+)?(?:void|int)\s+'+name+r'\([^;{}]*\)\s*\{',source)
assert match,name
begin=source.index('{',match.start());end=begin+1;depth=1
while depth:
depth+=(source[end]=='{')-(source[end]=='}');end+=1
prototypes.append(source[match.start():begin]+';')
functions.append(source[match.start():end])
body='\n'.join(functions)
# TI C28x char is 16 bits: 0x80..0xFF remain positive before word packing.
body=re.sub(r'\bchar\s+Rc;', 'unsigned int Rc;', body)
body=body.replace('received=rs_arr->SciRegs->SCIRXBUF.all;', 'received=model_pop(rs_arr);')
body=body.replace('Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT;', 'Rc=model_pop(rs_arr);')
body=body.replace('rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0;',
'model_flush(rs_arr);rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0;')
body=body.replace('rs_arr->SciRegs->SCICTL1.bit.SWRESET=1;',
'rs_arr->SciRegs->SCIRXST.all=0;rs_arr->SciRegs->SCICTL1.bit.SWRESET=1;')
body=body.replace('while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }',
'while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_step(rs_arr); }',1)
body=body.replace('while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }',
'while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_shift(rs_arr); }')
body=body.replace('!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }',
'!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_step(rs_arr); }')
header=read(root/'Source/Internal/Include/RS485.h')
header=re.sub(r'#define SCI_send\(x,y\)[^\n]*', '#define SCI_send(x,y) model_push(x,y)',header)
header=re.sub(r'#define enableUARTInt\(x\)[^\n]*', '#define enableUARTInt(x) model_interrupts(x,0)',header)
header=re.sub(r'#define enableUARTIntW\(x\)[^\n]*', '#define enableUARTIntW(x) model_interrupts(x,1)',header)
header=re.sub(r'#define Rec_Bloc_Begin[^\n]*', '#define Rec_Bloc_Begin ((uintptr_t)load_memory)',header)
header=re.sub(r'#define Rec_Bloc_End[^\n]*', '#define Rec_Bloc_End ((uintptr_t)(load_memory+4100))',header)
registers=read(root/'Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h')
defines='''
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
typedef unsigned short Uint16;
#define interrupt
#define true 1
#define false 0
#define BM_CHAR32 0
#define BM_PACKED 1
#define CNTRL_ADDR_UNIVERSAL 16
#define CNTRL_ADDR 5
#define ADDR_FOR_ALL 0
#define LOBYTE(x) ((x)&255)
#define HIBYTE(x) (((x)>>8)&255)
enum {CMD_MODBUS_3=3,ANS_MODBUS_4=4,CMD_MODBUS_6=6,CMD_MODBUS_16=16,
CMD_LOAD=51,CMD_INITLOAD=58,CMD_STD_ANS=66};
'''
harness=(Path(__file__).with_name('model.inc')).read_text()
before,after=harness.split('/* HANDLERS */')
parser=argparse.ArgumentParser();parser.add_argument('--cc',required=True);args=parser.parse_args()
env=dict(os.environ);env['PATH']=str(Path(args.cc).parent)+os.pathsep+env.get('PATH','')
with tempfile.TemporaryDirectory(prefix='pm35-fifo-') as directory:
path=Path(directory);c=path/'model.c';exe=path/'model.exe'
c.write_text(defines+registers+header+'\n'.join(prototypes)+before+body+after)
subprocess.run([args.cc,'-std=c99','-O1','-Werror=implicit-function-declaration',str(c),'-o',str(exe)],check=True,env=env)
subprocess.run([str(exe)],check=True,env=env,timeout=20)

View File

@@ -1,56 +0,0 @@
#include "../../Source/Internal/log_to_mem.c"
struct mock_gpio GpioDataRegs;
int READY = 1, Desk = 6, Mode = 5;
int modbus[128], CanTimeOutErrorTR;
unsigned long IMPowse, WAKEpowse;
unsigned int ADC_table[4];
#define CHECK(x) if (!(x)) return __LINE__
int main(void)
{
unsigned int i;
/* Simulate COFF boot with dirty RAM, including a stale active bank. */
ump_state = ump_count = ump_cursor = ump_next = 0xA5A5;
ump_period = ump_divider = 0xA5A5;
ump_time = ump_sequence = 0xA5A5A5A5UL;
ump_bank = ump_archive_bank = 0xA5A5;
ump_archive_count = ump_archive_next = ump_generation = 0xA5A5;
ump_source = ump_post = ump_post_dropped = 0xA5A5;
ump_can_header = ump_can_count = 0xA5A5;
for (i = 0; i < 3; i++) ump_can_data[i] = 0xA5A5;
for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5;
ump_prev_commands = ump_prev_inputs = ump_prev_outputs = 0xA5A5;
ump_dac_ramp = ump_dac_duration = ump_dac_go10 = 0xA5A5;
ump_dac_stop10 = ump_dac_position = 0xA5A5;
ump_log_init();
CHECK(ump_log_read(UMP_LOG_BASE) == 0x554D);
CHECK(ump_log_read(UMP_LOG_BASE+1) == 3);
CHECK(ump_log_read(UMP_LOG_BASE+2) == 0);
CHECK(ump_log_read(UMP_LOG_BASE+3) == 0);
CHECK(ump_log_read(UMP_LOG_BASE+6) == 20);
for (i = 7; i <= 8; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);
for (i = 12; i <= 15; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);
CHECK(ump_bank == 0 && ump_archive_bank == 1);
CHECK(ump_cursor == 0 && ump_next == 0 && ump_archive_next == 0);
CHECK(ump_divider == 0 && ump_sequence == 0 && ump_post_dropped == 0);
CHECK(ump_can_header == 0 && ump_can_count == 0);
for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 0);
for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0);
CHECK(ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0);
CHECK(ump_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0);
CHECK(ump_dac_stop10 == 0 && ump_dac_position == 0);
CHECK(ump_log_write(UMP_LOG_BASE+1, 20));
CHECK(ump_log_write(UMP_LOG_BASE, 1));
CHECK(ump_state == 1 && ump_count == 1);
ump_log_tick();
CHECK(ump_time == 1);
CHECK(ump_log_write(UMP_LOG_BASE, 0));
ump_archive_count = 7; ump_generation = 2;
ump_pm67_voltage[0] = 123;
CHECK(ump_log_write(UMP_LOG_BASE, 1));
CHECK(ump_time == 1 && ump_archive_count == 7 && ump_generation == 2);
CHECK(ump_word(0, 0, 40) == 123);
return 0;
}

View File

@@ -1,113 +0,0 @@
#include "../../Source/Internal/log_to_mem.c"
#include "../../Source/Internal/Include/ump_can_protocol.h"
struct mock_gpio GpioDataRegs;
int READY = 1, Desk = 6, Mode = 5;
int modbus[128];
int CanTimeOutErrorTR;
unsigned long IMPowse, WAKEpowse;
unsigned int ADC_table[4];
#define CHECK(x) if (!(x)) return __LINE__
/* Возвращаем номер строки при ошибке, ноль при успехе; CRT не требуется. */
__declspec(dllexport) int run_tests(void)
{
unsigned int i, generation, archived, error, length;
uint16_t reply[UMP_CAN_MAX_WORDS];
unsigned long sequence;
ump_log_init();
CHECK(!ump_log_write(UMP_LOG_BASE+1, 0));
CHECK(!ump_log_write(UMP_LOG_BASE+1, 1001));
CHECK(ump_log_write(UMP_LOG_BASE+1, 1));
modbus[127] = 0x80;
modbus[0x50] = 6; modbus[0x51] = 16;
modbus[0x7B] = 1234; modbus[0x1C] = 160;
/* PM67 reception is independent of recording; all three CAN slots work. */
ump_log_can(0x8000U | 305U, 0xFEDCU, 0, 0);
ump_log_can(0x4000U | 7U, 0, 456, 0);
CHECK(ump_pm67_voltage[0] == 0xFEDCU && ump_pm67_voltage[1] == 456);
ump_log_can(305U, 1, 2, 3); /* Masked-out word must not overwrite. */
ump_log_can(0x2000U | 303U, 0, 0, 123);
ump_log_can(0x2000U | 6U, 0, 0, 789);
CHECK(ump_pm67_voltage[0] == 123 && ump_pm67_voltage[1] == 789);
ump_log_can(0x8000U | 306U, 999, 0, 0); /* Not a one-based CAN address. */
CHECK(ump_log_write(UMP_LOG_BASE, 1));
CHECK(ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789);
CHECK(2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN);
CHECK(!ump_log_write(UMP_LOG_BASE, 1));
CHECK(!ump_log_write(UMP_LOG_BASE+1, 20));
for (i=0; i<900; i++) ump_log_tick();
CHECK(ump_count == UMP_LOG_CAPACITY);
CHECK(ump_word(0, 0, 0) == 901-UMP_LOG_CAPACITY);
CHECK(ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900);
CHECK(ump_word(0, 0, 8) == 1234);
CHECK(ump_word(0, 0, 24) == 6);
/* Короткая CAN-команда должна остаться отдельным событием. */
modbus[127] = 0x40;
ump_log_can(0x807F, 0x40, 0, 0);
CHECK(ump_post == 1000);
CHECK(ump_word(0, ump_count-1, 2) == 0x102);
CHECK(ump_word(0, ump_count-1, 18) == 0x807F);
for (i=0; i<999; i++) ump_log_tick();
CHECK(ump_generation == 0);
ump_log_tick();
CHECK(ump_generation == 1);
CHECK(ump_archive_count == UMP_LOG_CAPACITY);
CHECK(ump_word(1, UMP_LOG_CAPACITY/2-1, 2) == 0x102);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 2) == 0x205);
CHECK(ump_count == 0 && ump_state == 1);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 41) == 789);
ump_log_can(0x8000U | 305U, 999, 0, 0);
CHECK(ump_word(0, ump_count-1, 40) == 999);
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 40) == 123);
generation = ump_generation;
archived = ump_word(1, UMP_LOG_CAPACITY-1, 0);
sequence = ump_sequence;
for (i=0; i<200; i++) ump_log_tick();
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 0) == archived);
CHECK(ump_generation == generation);
CHECK(ump_sequence == sequence + 200);
CHECK(ump_log_read(UMP_LOG_LIVE+2) == UMP_LOG_LIVE_RECORDS);
CHECK(ump_log_read(UMP_LOG_LIVE+4) == ump_time-(UMP_LOG_LIVE_RECORDS-1));
CHECK(ump_log_write(UMP_LOG_BASE+3, 1));
CHECK(ump_log_write(UMP_LOG_BASE+2, UMP_LOG_CAPACITY-1));
CHECK(ump_log_read(UMP_LOG_DATA) == archived);
CHECK(ump_log_read(UMP_LOG_DATA+UMP_LOG_WORDS) == 0);
CHECK(!ump_log_write(UMP_LOG_BASE+2, UMP_LOG_CAPACITY));
CHECK(ump_log_write(UMP_LOG_BASE, 0));
sequence = ump_sequence;
ump_log_tick(); ump_log_io(); ump_log_can(1,2,3,4);
CHECK(sequence == ump_sequence);
CHECK(ump_log_write(UMP_LOG_BASE, 1));
CHECK(ump_word(1, UMP_LOG_CAPACITY-1, 0) == archived);
/* Новый пуск и спад start без reset также фиксируют отключение. */
modbus[127] = 0x80; ump_log_rs();
modbus[127] = 0; ump_log_rs();
CHECK(ump_post == 1000);
for (i=0; i<1000; i++) ump_log_tick();
CHECK(ump_generation == generation+1);
/* CAN читает те же регистры и формирует цельный снимок из 124 слов.
* Запись по старым технологическим адресам через сервис запрещена. */
length = ump_can_prepare(3, UMP_LOG_BASE, 16, reply, &error);
CHECK(!error && length == 16 && reply[0] == 0x554D && reply[1] == 3);
length = ump_can_prepare(3, UMP_LOG_LIVE, 124, reply, &error);
CHECK(!error && length == 124);
CHECK(reply[2] <= UMP_LOG_LIVE_RECORDS);
for (i=4+reply[2]*UMP_LOG_WORDS; i<124; i++) CHECK(reply[i] == 0);
length = ump_can_prepare(3, UMP_LOG_DATA, 84, reply, &error);
CHECK(!error && length == 84);
length = ump_can_prepare(3, UMP_LOG_DATA, 42, reply, &error);
CHECK(!error && length == 42);
ump_can_prepare(3, UMP_LOG_LIVE, 126, reply, &error);
CHECK(error == 2);
ump_can_prepare(6, 127, 0x80, reply, &error);
CHECK(error == 2 && modbus[127] == 0);
length = ump_can_prepare(6, UMP_LOG_BASE, 0, reply, &error);
CHECK(!error && length == 2 && reply[0] == UMP_LOG_BASE && reply[1] == 0);
CHECK(ump_state == 3);
ump_can_prepare(6, UMP_LOG_BASE+1, 0, reply, &error);
CHECK(error == 3);
ump_can_prepare(99, UMP_LOG_BASE, 16, reply, &error);
CHECK(error == 1);
return 0;
}

View File

@@ -1,35 +0,0 @@
"""Boot regression independent of the external shared protocol checkout.
Run with GCC in PATH: python tests/ump_logger/run_init_test.py
The negative control must fail without the boot initialization call.
"""
import os
from pathlib import Path
import subprocess
import tempfile
root = Path(__file__).resolve().parents[2]
source = root / 'tests/ump_logger/init_test.c'
compiler = os.environ.get('CC', 'gcc')
with tempfile.TemporaryDirectory(prefix='ump-init-') as directory:
directory = Path(directory)
text = source.read_text().replace(
'../../Source/Internal/log_to_mem.c',
(root / 'Source/Internal/log_to_mem.c').as_posix(),
)
for initialize in (False, True):
case = directory / 'init_test.c'
case.write_text(text if initialize else text.replace('ump_log_init();', ';'))
executable = directory / 'init_test.exe'
subprocess.run([
compiler, '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast',
'-I' + str(root / 'tests/ump_logger/stubs'),
'-I' + str(root / 'Source/Internal/Include'),
str(case), '-o', str(executable),
], check=True)
result = subprocess.run([str(executable)])
if initialize:
assert result.returncode == 0, f'Initialization failed: {result.returncode}'
else:
assert result.returncode != 0, 'Negative control unexpectedly passed'
print(f'{"Initialized boot" if initialize else "Dirty RAM negative control"}: PASS')

View File

@@ -1,34 +0,0 @@
"""Сборка и запуск исходного регистратора с подменой GPIO/IRQ на Windows.
Нужны GCC либо Clang и lld-link в PATH. TEMPLATES_ROOT задаёт библиотеку. Проверяется алгоритм, но не ABI и тайминги TI.
DLL создаётся во временной папке; исходные .out/.hex прошивки не затрагиваются.
"""
import ctypes
import os
from pathlib import Path
import subprocess
import shutil
import tempfile
root = Path(__file__).resolve().parents[2]
templates = Path(os.environ.get('TEMPLATES_ROOT', root.parent / 'newProject/SETGUI/third_party/templates'))
protocol = templates / 'c/set-protocol'
compiler = os.environ.get('CC') or shutil.which('clang') or shutil.which('gcc')
if not compiler:
raise SystemExit('Clang or GCC is required in PATH')
link_flags = [] if 'gcc' in Path(compiler).name else ['-nostdlib', '-fuse-ld=lld', '-Wl,/noentry,/nodefaultlib']
with tempfile.TemporaryDirectory(prefix='ump-recorder-') as directory:
library = Path(directory) / 'recorder_test.dll'
subprocess.run([
compiler, '-shared', *link_flags, '-Wno-unknown-pragmas', '-Wno-int-to-pointer-cast',
'-Itests/ump_logger/stubs', '-ISource/Internal/Include',
'-I' + str(protocol), '-I' + str(protocol / 'ports/tms320f28335'),
'tests/ump_logger/recorder_test.c', 'Source/Internal/shared_ump.c', '-o', str(library),
], cwd=root, check=True)
# Отдельный процесс освобождает DLL до удаления временной папки Windows.
subprocess.run([
os.sys.executable, '-c',
'import ctypes,sys; r=ctypes.CDLL(sys.argv[1]).run_tests(); '
'print("PASS" if r==0 else f"FAIL: C line {r}"); sys.exit(bool(r))',
str(library),
], check=True)

View File

@@ -1 +0,0 @@
extern unsigned int ADC_table[4];

View File

@@ -1 +0,0 @@
extern unsigned long IMPowse, WAKEpowse;

View File

@@ -1,9 +0,0 @@
#ifndef UMP_TEST_DEVICE_H
#define UMP_TEST_DEVICE_H
struct mock_bits { unsigned int GPIO3, GPIO6, GPIO8, GPIO11, GPIO58, GPIO62; };
struct mock_reg { struct mock_bits bit; };
struct mock_gpio { struct mock_reg GPADAT, GPBDAT; };
extern struct mock_gpio GpioDataRegs;
static unsigned int __disable_interrupts(void) { return 0; }
static void __restore_interrupts(unsigned int saved) { (void)saved; }
#endif

View File

@@ -1 +0,0 @@
/* Подмена зависимостей для проверки регистратора без платы. */

Some files were not shown because too many files have changed in this diff Show More