mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Merge pull request #266 from davidgiven/hharte-northstar
Merge in hharte's Northstar changes
This commit is contained in:
@@ -1,246 +1,246 @@
|
|||||||
:4000000000800020110000003110000031100000064A08B5136843F020031360044B1A6803F53F5302331A6001F020F8E8460040FA46004010B5054C237833B9044B13B18B
|
:4000000000800020110000004110000041100000064A08B5136843F020031360044B1A6803F53F5302331A6001F028F8E8460040FA46004010B5054C237833B9044B13B163
|
||||||
:400040000448AFF300800123237010BD6881FF1F00000000B8380000084B10B51BB108490848AFF300800848036803B910BD074B002BFBD0BDE81040184700BF0000000051
|
:400040000448AFF300800123237010BD6881FF1F00000000C8380000084B10B51BB108490848AFF300800848036803B910BD074B002BFBD0BDE81040184700BF0000000041
|
||||||
:400080006C81FF1FB8380000C880FF1F000000000A4A0B4B116801310B40002BBEBF03F1FF3363F03F030133136011685368994202BF024B01221A72704700BF8881FF1FCC
|
:400080006C81FF1FC8380000C880FF1F000000000A4A0B4B116801310B40002BBEBF03F1FF3363F03F030133136011685368994202BF024B01221A72704700BF8881FF1FBC
|
||||||
:4000C0003F0000800A4A0B4B516801310B40002BBEBF03F1FF3363F03F030133536051681368994202BF024B01221A72704700BF8881FF1F3F0000800E4BDA681AB901215F
|
:4000C0003F0000800A4A0B4B516801310B40002BBEBF03F1FF3363F03F030133536051681368994202BF024B01221A72704700BF8881FF1F3F000080114BDA68196919B9FD
|
||||||
:4001000019745A7410E05A7C1A741A7C0AB1002207E059699A69D8688A1A82428CBF002201225A745A699A611B7C13B1002002F043B970478881FF1F10B5C4B2204601F054
|
:4001000001221A75597514E09969521A19698A4294BF587D00201875187D094908B1002204E0086982428CBF002201224A75DA689A611B7D13B1002002F046B9704700BF70
|
||||||
:4001400057F90128FAD110BD08B572B60F4B0F495A6901325A61DA690132C82A08BF0022DA611A6AD8690132A72A08BF00220A621B6A002B0CBF02230023002814BF184660
|
:400140008881FF1F10B5C4B2204601F059F90128FAD110BD08B572B60F4B0F49DA680132DA60DA690132C82A08BF0022DA611A6AD8690132A72A08BF00220A621B6A002B13
|
||||||
:4001800043F0010002F080FE62B608BD8881FF1F38B50446C5B2284602F0B0F8062002F0CDFA44F00200C0B202F0A8F8062002F0C5FA284602F0A2F8BDE83840062002F0C2
|
:400180000CBF02230023002814BF184643F0010002F082FE62B608BD8881FF1F38B50446C5B2284602F0B2F8062002F0CFFA44F00200C0B202F0AAF8062002F0C7FA28460D
|
||||||
:4001C000A7BA10B5642402F093F828B9FFF7E0FF013CF8D1204610BD012010BD70B5C4B2054620460E4601F003F9012805D0204601F01CFA2846FFF79FFF204601F000F9AD
|
:4001C00002F0A4F8BDE83840062002F0A9BA10B5642402F095F828B9FFF7E0FF013CF8D1204610BD012010BD70B5C4B2054620460E4601F005F9012805D0204601F01EFA34
|
||||||
:40020000314605460246204601F0BCF9204601F0EFF80028FAD1284670BD000038B5044D0024285D013402F039FA402CF9D138BDAC81FF1F08B502F053FC002002F05CFCBD
|
:400200002846FFF79FFF204601F002F9314605460246204601F0BEF9204601F0F1F80028FAD1284670BD000038B5044D0024285D013402F03BFA402CF9D138BDAC81FF1FCB
|
||||||
:4002400002F06EFC02F078FC80B208BD10B50446012002F06BF8642002F05AFAFFF7EAFF2080002002F062F8642002F051FAFFF7E1FF608010BD08B502F05EFD002002F02B
|
:4002400008B502F055FC002002F05EFC02F070FC02F07AFC80B208BD10B50446012002F06DF8642002F05CFAFFF7EAFF2080002002F064F8642002F053FAFFF7E1FF60809C
|
||||||
:4002800067FD02F079FD02F083FD80B208BD10B50446FFF796FF322002F03AFAFFF7EBFF20800120FFF774FF322002F031FAFFF7E2FF608010BD0FB400B593B014AB53F835
|
:4002800010BD08B502F060FD002002F069FD02F07BFD02F085FD80B208BD10B50446FFF796FF322002F03CFAFFF7EBFF20800120FFF774FF322002F033FAFFF7E2FF6080D2
|
||||||
:4002C000042B402102A8019302F0DEFE02A802F07AF802F084F813B05DF804EB04B0704710B5044601780648FFF7E5FF0420FFF723FF62782146BDE81040042001F0D0B8B5
|
:4002C00010BD0FB400B593B014AB53F8042B402102A8019302F0E0FE02A802F07CF802F086F813B05DF804EB04B0704710B5044601780648FFF7E5FF0420FFF723FF627816
|
||||||
:40030000CC38000007B50023ADF804308DF80600032301A88DF80530FFF7E2FF03B05DF804FB000010B5074C94F8643043B1002001F0D8FF002002F06BFD002384F864304E
|
:400300002146BDE81040042001F0D2B8DC38000007B50023ADF804308DF80600032301A88DF80530FFF7E2FF03B05DF804FB000010B5074C94F8643043B1002001F0DAFFEE
|
||||||
:4003400010BD00BF8881FF1F38B5104D837895F8672004469A4204D0FFF7E4FF002385F86A302368C5F865302279094B1A71A378002B14BF0220012002F04AFDE07802F02E
|
:40034000002002F06DFD002384F8643010BD00BF8881FF1F38B5104D837895F8672004469A4204D0FFF7E4FF002385F86A302368C5F865302279094B1A71A378002B14BF45
|
||||||
:4003800041FD2079BDE8384002F078BD8881FF1FED81FF1F38B50D4C94F8645065B904F16500FFF7D1FF012001F09CFF4FF47A7002F0AEF984F86A506369E366012384F84D
|
:400380000220012002F04CFDE07802F043FD2079BDE8384002F07ABD8881FF1FED81FF1F38B50D4C94F8645065B904F16500FFF7D1FF012001F09EFF4FF47A7002F0B0F968
|
||||||
:4003C0006430BDE8384002F0E1B900BF8881FF1FF8B5214C0546FFF7DDFF94F86A3003B15DB91E48FFF767FFFFF7EBFE0120002384F86A00236702F0A1F92A46216F184872
|
:4003C00084F86A50E368E366012384F86430BDE8384002F0E3B900BF8881FF1FF8B5214C0546FFF7DDFF94F86A3003B15DB91E48FFF767FFFFF7EBFE0120002384F86A007C
|
||||||
:40040000FFF759FF144E0027236F9D4216D001F06FFF00B13767236F9D4205DD0120FFF7B7FE336F013305E005DA0020FFF7B0FE336F013B336702F0A9F9E5E7322002F047
|
:40040000236702F0A3F92A46216F1848FFF759FF144E0027236F9D4216D001F071FF00B13767236F9D4205DD0120FFF7B7FE336F013305E005DA0020FFF7B0FE336F013B0B
|
||||||
:4004400067F92A2DCCBF0020012002F023FDBDE8F8400448FFF72FBF8881FF1FD9380000E0380000FD3800002DE9F04F99B062B602F0F6F99D49042002F01AFA9C4801F0D9
|
:40044000336702F0ABF9E5E7322002F069F92A2DCCBF0020012002F025FDBDE8F8400448FFF72FBF8881FF1FE9380000F03800000D3900002DE9F04F99B062B602F0F8F947
|
||||||
:4004800043FF9C4802F0E6FC9B4801F077FF02F0C7FB02F099FA002002F0BAFC01F092FF0221002000F05AFF944C012001F0D2F8002384F86730FFF76DFFFFF782FE84F8A3
|
:400480009E49042002F01CFA9D4801F045FF9D4802F0E8FC9C4801F079FF02F0C9FB02F09BFA002002F0BCFC01F094FF0221002000F05CFF954C012001F0D4F8002384F890
|
||||||
:4004C0007400FFF72FFF012384F86730FFF762FFFFF777FE84F87500FFF724FF884B94F87400884994F875202546002A14BF0A461A46002808BF19468348FFF7DCFE032177
|
:4004C0006730FFF76DFFFFF782FE84F87400FFF72FFF012384F86730FFF762FFFFF777FE84F87500FFF724FF894B94F87400894994F875202546002A14BF0A461A4600286F
|
||||||
:40050000084602F023F9264602F040F994F8643043B1EA6E6B699B1A41F28832934201D9FFF700FF00F052FF18B97848FFF7C3FE04E000F051FF0028F7D10BE000F046FF85
|
:4005000008BF19468448FFF7DCFE0321084602F025F9264602F042F994F8643043B1EA6EEB689B1A41F28832934201D9FFF700FF00F054FF18B97948FFF7C3FE04E000F079
|
||||||
:4005400010B902F023F9F9E77148FFF7B4FE032001F06CF8032000F04BFF0128D4D16D48FFF7F2FE6C490320FFF738FE94F876106A48FFF7A0FE94F87630023B142B00F229
|
:4005400053FF0028F7D10BE000F048FF10B902F025F9F9E77248FFF7B4FE032001F06EF8032000F04DFF0128D4D16E48FFF7F2FE6D490320FFF738FE94F876106B48FFF7F9
|
||||||
:40058000D483DFE813F01500D2031E00D2032400D2034F00D2037500D203D700D203BF01D2030603D2032A03D2033103D2034B0303238DF820308DF821300F238DF8223084
|
:40058000A0FE94F87630023B142B00F2D683DFE813F01500D4031E00D4032400D4035000D4037600D403D900D403C101D4030803D4032C03D4033303D4034D0303238DF851
|
||||||
:4005C00028E394F87800FFF703FF554B1FE3FFF7E1FE002323746069227C02F0FF0132B96B691B1AB3F57A7FF6DD0B4611E083B10022174696F878107069277494F810E007
|
:4005C00020308DF821300F238DF822302AE394F87800FFF703FF564B21E340F2DC57FFF7DFFE00232375E068227D02F0FF012AB9EB681B1ABB42F7DD0B4611E083B100227E
|
||||||
:40060000BEF1000F02D16B691B1AF7E701329142F3DA07228DF8202004228DF82120ADF82230F7E20220FFF787FD4FF000080DF1200A02F0ABF84FF480790027C9EB080303
|
:40060000174696F87810F068277594F814E0BEF1000F02D1EB681B1AF7E701329142F3DA07228DF8202004228DF82120ADF82230F8E20220FFF786FD4FF000080DF1200A54
|
||||||
:40064000DA1907F80A200137402FF9D10220FFF773FD3A465146022000F022FFB9F10109EBD108F10108B8F1400FE2D12D4B38E04FF0010A4FF000080DF1200B02F086F844
|
:4006400002F0ACF84FF480790027C9EB0803DA1907F80A200137402FF9D10220FFF772FD3A465146022000F023FFB9F10109EBD108F10108B8F1400FE2D12E4B38E04FF076
|
||||||
:400680004FF0000959460120FFF7A8FD08EB090300270493049B1BF807203B44DBB29A4209D08DE80C0041463B464A461E48FFF702FE4FF0000A0137402FEBD109F101091B
|
:40068000010A4FF000080DF1200B02F087F84FF0000959460120FFF7A7FD08EB090300270493049B1BF807203B44DBB29A4209D08DE80C0041463B464A461F48FFF701FEE0
|
||||||
:4006C000B9F5807FDED108F10108B8F1400FD5D151461648FFF7EFFDBAF1000F00F01A81134B1B8807A8ADF81C3094E249010000F900000091000000C50000008881FF1F0B
|
:4006C0004FF0000A0137402FEBD109F10109B9F5807FDED108F10108B8F1400FD5D151461648FFF7EEFDBAF1000F00F01B81144B1B8807A8ADF81C3095E200BF5501000004
|
||||||
:400700000F3900000B390000123900002A3900003D390000ED81FF1FFE81FF1F47390000BC380000BE3800005639000072390000C0380000206FFFF74BFE94F8780001F081
|
:40070000F900000091000000C50000008881FF1F1F3900001B390000223900003A3900004D390000ED81FF1FFE81FF1F57390000CC380000CE380000663900008239000026
|
||||||
:40074000F5FD94F8780001F0D9FD02F009FCB94BDFF8FC821A78002702F0FB021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F0F7FB0220FFF7DCFCF9
|
:40074000D0380000206FFFF749FE94F8780001F0F5FD94F8780001F0D9FD02F009FCB94BDFF8FC821A78002702F0FB021A701A7842F001021A701A7802F0FE021A701A7880
|
||||||
:40078000012141F6FF734FF48042084602F046FB84F8B60001F068FF08F807000137402FF8D1DFF8B0A200270AF195091FFA89F80137402F14BF3A4600221AF8010F2244C0
|
:4007800002F0FE021A7002F0F7FB0220FFF7DAFC012141F6FF734FF48042084602F046FB84F8B60001F068FF08F807000137402FF8D1DFF8B0A200270AF195091FFA89F816
|
||||||
:4007C000062392F82420402101F082FF424646F240419AF8000001F08DFF08F14008402F1FFA88F8E4D196F8793053B196F87C30F36000233374237C002BFCD000233374EF
|
:4007C0000137402F14BF3A4600221AF8010F2244062392F82420402101F082FF424646F240419AF8000001F08DFF08F14008402F1FFA88F8E4D196F8793053B196F87C30C8
|
||||||
:40080000F36000234FF0FF32236062602372236894F8B600234493F8241001F0DDFE94F8B60001F09BFE012194F8B60001F06EFE2368002BFCD0002398467360D6F814A0D4
|
:40080000336100233375237D002BFCD000233375336100234FF0FF32236062602372236894F8B600234493F8241001F0DDFE94F8B60001F09BFE012194F8B60001F06EFEAA
|
||||||
:40084000012701F0A3FF6369B4F87A20CAEB030393420DD367B1042195F8B60001F0C8FE94F8B60001F0D4FE0028F9D107463072237AFBB96A682B689A4202D1002FE0D1D9
|
:400840002368002BFCD0002398467360D6F80CA0012701F0A3FFE368B4F87A20CAEB030393420DD367B1042195F8B60001F0C8FE94F8B60001F0D4FE0028F9D107463072CF
|
||||||
:4008800018E00220FFF758FC6968402209EB8111022000F005FE6A68674B01321340002BBEBF03F1FF3363F03F03013308F101086360C6E70220277AFFF73EFC0022114687
|
:40088000237AFBB96A682B689A4202D1002FE0D118E00220FFF756FC6968402209EB8111022000F005FE6A68674B01321340002BBEBF03F1FF3363F03F03013308F1010820
|
||||||
:4008C000022000F0EDFD0220FFF736FCFFB2FFF7A5FC002001F012FD37B15848FFF7EBFC0220FFF70FFD06E0554B08A81B88ADF82030FFF7F5FC227C4146237A5148FFF7BB
|
:4008C0006360C6E70220277AFFF73CFC00221146022000F0EDFD0220FFF734FCFFB2FFF7A3FC002001F012FD37B15848FFF7E9FC0220FFF70DFD06E0554B08A81B88ADF871
|
||||||
:40090000DAFC15E25048FFF7D6FCD4F87A7017F03F0701D0032009E2286FFFF759FD95F8780001F003FD95F8780001F0E7FC012001F002FD02F014FB444BDFF814811A7857
|
:400900002030FFF7F3FC227D4146237A5148FFF7D8FC15E25048FFF7D4FCD4F87A7017F03F0701D0032009E2286FFFF757FD95F8780001F003FD95F8780001F0E7FC012054
|
||||||
:4009400042F004021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F003FB01214FF4804341F6FF72084601F0E9FC85F8B60001F077FE08F8070001378C
|
:4009400001F002FD02F014FB444BDFF814811A7842F004021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F003FB01214FF4804341F6FF72084601F0CB
|
||||||
:40098000402FF8D1DFF8CC90002709F195031FFA83F804930137402F14BF3A46002219F8010F2244052392F82420402101F090FE414646F2475299F8000001F09BFE08F103
|
:40098000E9FC85F8B60001F077FE08F807000137402FF8D1DFF8CC90002709F195031FFA83F804930137402F14BF3A46002219F8010F2244052392F82420402101F090FEB2
|
||||||
:4009C0004008402F1FFA88F8E4D100274FF0FF33376098467360BB463B46D6F87A9037725FEA99190CBF4FF0010A4FF0000A2168114A01310A40002ABCBF02F1FF3262F03B
|
:4009C000414646F2475299F8000001F09BFE08F14008402F1FFA88F8E4D100274FF0FF33376098467360BB463B46D6F87A9037725FEA99190CBF4FF0010A4FF0000A2168C1
|
||||||
:400A00003F026068B8BF013282426FD02BB1227A002A7AD12A7C002A77D12068049A059302EB8010BAF1000F16D040223F2102F0F7FA1CE0906400403F0000807C390000D7
|
:400A0000114A01310A40002ABCBF02F1FF3262F03F026068B8BF013282426FD02BB1227A002A7AD12A7D002A77D12068049A059302EB8010BAF1000F16D040223F2102F079
|
||||||
:400A4000C238000096390000A939000097650040AC81FF1FAB81FF1F014601370120FFF7BDFBC7EB0903D3F1000A4AEB030A2168B34A01310A40002ABEBF02F1FF3262F0BF
|
:400A4000F7FA1CE0906400403F0000808C390000D2380000A6390000B939000097650040AC81FF1FAB81FF1F014601370120FFF7BBFBC7EB0903D3F1000A4AEB030A216882
|
||||||
:400A80003F02013222606268059B01322ED12A683F2A2BD14FF00008C5F8048001F080FC85F808806B6895F8B6002B4493F8241001F092FD95F8B60001F050FD012195F8BF
|
:400A8000B34A01310A40002ABEBF02F1FF3262F03F02013222606268059B01322ED12A683F2A2BD14FF00008C5F8048001F080FC85F808806B6895F8B6002B4493F82410D9
|
||||||
:400AC000B60001F023FD95F87E30EB6085F81080237C002BFCD04FF00008012086F8108001F06AFC404601F027FC00E023B1237A5BB92B7C4BB90123626842453FF477AFC1
|
:400AC00001F092FD95F8B60001F050FD012195F8B60001F023FD95F87E302B6185F81480237D002BFCD04FF00008012086F8148001F06AFC404601F027FC00E023B1237A54
|
||||||
:400B00000BF1010BD5F8048071E701F04FFC012001F012FC002001F04FFC042194F8B60001F066FD94F8B60001F072FD80460028F8D196F8B60001F0FFFC337C327A029318
|
:400B00005BB92B7D4BB90123626842453FF477AF0BF1010BD5F8048071E701F04FFC012001F012FC002001F04FFC042194F8B60001F066FD94F8B60001F072FD8046002873
|
||||||
:400B4000012303920193CDF800A05B463A4649467C48FFF7B0FBC6F80C80BAF1000F0BD0FFF75CFB002001F0C9FB237A63B17648FFF7A1FB0220D9E0B945F1D07349012035
|
:400B4000F8D196F8B60001F0FFFC337D327A0293012303920193CDF800A05B463A4649467C48FFF7AEFBC6F81080BAF1000F0BD0FFF75AFB002001F0C9FB237A63B1764854
|
||||||
:400B8000FFF72CFB0137F7E77148FFF794FB714B3DE094F8780001F0C9FB206FFFF718FC6D48FFF788FB94F87930E36000232374237C002BFCD0012001F0FEFB00233374CE
|
:400B8000FFF79FFB0220D9E0B945F1D073490120FFF72AFB0137F7E77148FFF792FB714B3DE094F8780001F0C9FB206FFFF716FC6D48FFF786FB94F87930236100232375F8
|
||||||
:400BC000237C002BFCD0002001F0F6FB00236348F360FFF770FB624B19E0002084F86A00FFF7F6FB5F4B12E094F8743023B195F875200AB985F8782094F875201AB113B9F6
|
:400BC000237D002BFCD0012001F0FEFB00233375237D002BFCD0002001F0F6FB002363483361FFF76EFB624B19E0002084F86A00FFF7F4FB5F4B12E094F8743023B195F870
|
||||||
:400C0000012385F878305848FFF79EFB574B1B88ADF8203008A8FFF763FB89E0FFF782FB02F07CF8002002F01FF82A2701F04AFF002001F0EDFE3A46002108A802F0F0F9E0
|
:400C000075200AB985F8782094F875201AB113B9012385F878305848FFF79CFB574B1B88ADF8203008A8FFF761FB89E0FFF780FB02F07CF8002002F01FF82A2701F04AFFE9
|
||||||
:400C400017238DF820308DF8217001F09FFD002001F048FB002002F0DBF8C82001F058FD0DF12200FFF7F2FA0DF13600FFF70FFB01F08CFD012002F0CBF8322001F048FD4D
|
:400C4000002001F0EDFE3A46002108A802F0F0F917238DF820308DF8217001F09FFD002001F048FB002002F0DBF8C82001F058FD0DF12200FFF7F0FA0DF13600FFF70DFB01
|
||||||
:400C80000DF12600FFF7E2FA0DF13A00FFF7FFFA012001F027FB4FF4967001F039FD01F075FD0DF12E00FFF7D1FA0DF14200FFF7EEFA002001F016FB4FF4967001F028FD84
|
:400C800001F08CFD012002F0CBF8322001F048FD0DF12600FFF7E0FA0DF13A00FFF7FDFA012001F027FB4FF4967001F039FD01F075FD0DF12E00FFF7CFFA0DF14200FFF71B
|
||||||
:400CC00001F064FD022002F0A3F8322001F020FD0DEB0700FFF7BAFA0DF13E00FFF7D7FA012001F0FFFA4FF4967001F011FD01F04DFD0DF13200FFF7A9FA0DF14600FFF756
|
:400CC000ECFA002001F016FB4FF4967001F028FD01F064FD022002F0A3F8322001F020FD0DEB0700FFF7B8FA0DF13E00FFF7D5FA012001F0FFFA4FF4967001F011FD01F040
|
||||||
:400D0000C6FA002001F0EEFA4FF4967001F000FD01F03CFD002002F07BF8002384F86A3001F07EFF01F050FE74E70120FFF7EAFA032000F07BFC0E48FFF7BDFAFFF7E4BBB6
|
:400D00004DFD0DF13200FFF7A7FA0DF14600FFF7C4FA002001F0EEFA4FF4967001F000FD01F03CFD002002F07BF8002384F86A3001F07EFF01F050FE74E70120FFF7E8FA91
|
||||||
:400D40003F000080B3390000E33900004092FF1FED390000C4380000F5390000033A0000C6380000C8380000FE81FF1FCA380000103A00002DE9F04172B6884B61221A70F9
|
:400D4000032000F07BFC0E48FFF7BBFAFFF7E2BB3F000080C3390000F33900004092FF1FFD390000D4380000053A0000133A0000D6380000D8380000FE81FF1FDA380000E3
|
||||||
:400D8000A3F5F06301221A801924854A9C7092E803008033062283F8002283E80300522203F580731A707F4B7F4A1B787F4EDBB2137040F618027E4B00251A8041F25122A6
|
:400D8000203A00002DE9F04172B6884B61221A70A3F5F06301221A801924854A9C7092E803008033062283F8002283E80300522203F580731A707F4B7F4A1B787F4EDBB2FE
|
||||||
:400DC00023F8022C33784FF4F07003F0010343EA450502F0BDF8013C05F003052ED0032DF0D1744B4FF480721A8007221A70724A002548211570917002221D705D7103F893
|
:400DC000137040F618027E4B00251A8041F2512223F8022C33784FF4F07003F0010343EA450502F0BDF8013C05F003052ED0032DF0D1744B4FF480721A8007221A70724A20
|
||||||
:400E0000032C0422DA716D4A6D4C13786D4E43F00103137012F8013C062743F0030302F8013C2378012243F0800323705B4B1A70654A137843F02003137000E0FEE707FBAD
|
:400E0000002548211570917002221D705D7103F8032C0422DA716D4A6D4C13786D4E43F00103137012F8013C062743F0030302F8013C2378012243F0800323705B4B1A70F9
|
||||||
:400E4000056300219A881868013502F0E9F8072DF5D15E485E4E002550F8041F05F1105303F1480221F0FF074933C9B20B4452005B0002329A4206D012F802EC12F801CC0C
|
:400E4000654A137843F02003137000E0FEE707FB056300219A881868013502F0E9F8072DF5D15E485E4E002550F8041F05F1105303F1480221F0FF074933C9B20B44520042
|
||||||
:400E80000EF807C0F5E7B0420D44E5D1514A002313609360136193614F4B504F1A68504BDFF888811A604F4B1A684F4B1A604F4A137843F002031370137C43F002031374F7
|
:400E80005B0002329A4206D012F802EC12F801CC0EF807C0F5E7B0420D44E5D1514A002313609360136193614F4B504F1A68504BDFF888811A604F4B1A684F4B1A604F4A7B
|
||||||
:400EC0002378A2F5863243F040032370413A137843F010031370464A464B07CA03C31A80454A2833106843F8250C127903F8212C424A07CA03C31A80414AE83B07CA03C33B
|
:400EC000137843F002031370137C43F0020313742378A2F5863243F040032370413A137843F010031370464A464B07CA03C31A80454A2833106843F8250C127903F8212CA9
|
||||||
:400F00001A80404A083307CA03C31A803E4A3F4BA2F5616203CBC2F8100EC2F8141E1378042043F008031370394B02F5AA521B783D78DBB298F80060EDB203F007010C329F
|
:400F0000424A07CA03C31A80414AE83B07CA03C31A80404A083307CA03C31A803E4A3F4BA2F5616203CBC2F8100EC2F8141E1378042043F008031370394B02F5AA521B78A7
|
||||||
:400F40001B091170F6B2537045F003033B7046F0030388F800302F4B48221A702E4A402313702E49937013729372082382F81F3220220A7048710A72294A0A20137001F0C7
|
:400F40003D78DBB298F80060EDB203F007010C321B091170F6B2537045F003033B7046F0030388F800302F4B48221A702E4A402313702E49937013729372082382F81F32BF
|
||||||
:400F8000DDFB284B88F8006044223D70264D1A7094E80F0007C52B80BDE8F081004800404C0A00480F010049A146004025420040224200400440004006400040A2430040BE
|
:400F800020220A7048710A72294A0A20137001F0DDFB284B88F8006044223D70264D1A7094E80F0007C52B80BDE8F081004800404C0A00480F010049A1460040254200408F
|
||||||
:400FC000A0430040153A0000E8460040FCFFFF478C00004800760040540A0048F846004020760040580A004828760040035001400C0A0048C0510040180A0048200A0048A5
|
:400FC000224200400440004006400040A2430040A0430040253A0000E8460040FCFFFF478C00004800760040540A0048F846004020760040580A004828760040035001404D
|
||||||
:401000002C0A0048380A004832510040440A0048CF0100491D51004001590040235B0040585B004076580040B0430040F946004008B501F0C9FF03680C2B00D1FEE7FEE7CA
|
:401000000C0A0048C0510040180A0048200A00482C0A0048380A004832510040440A0048CF0100491D51004001590040235B0040585B004076580040B0430040F9460040F2
|
||||||
:40104000084908B50B68084A1844821A802A01DC086005E001F0B8FF0C2303604FF0FF33184608BDCC80FF1F9093FF1F80B51148114B0025C0B1A3F1100192C92246043933
|
:4010400008B501F0C9FF03680C2B00D1FEE7FEE7084908B50B68084A1844821A802A01DC086005E001F0B8FF0C2303604FF0FF33184608BDCC80FF1F9093FF1F80B5114817
|
||||||
:40108000161BB74204D051F8046F42F8046BF7E7114653F8046C8C1AA64202D041F8045BF9E701381033E5E701F094FFFFF7DCF9FEE700BF01000000E43B0000124A134BF0
|
:40108000114B0025C0B1A3F1100192C922460439161BB74204D051F8046F42F8046BF7E7114653F8046C8C1AA64202D041F8045BF9E701381033E5E701F094FFFFF7DAF9D9
|
||||||
:4010C00010B51A60124A134C1368134843F4007313600023032B98BF54F823204FEA830188BF0E4A0133302B4250F3D10C4B1A780C4B1A700C4B084A1A60FFF73BFEBDE8CA
|
:4010C000FEE700BF01000000F43B0000124A134B10B51A60124A134C1368134843F4007313600023032B98BF54F823204FEA830188BF0E4A0133302B4250F3D10C4B1A7814
|
||||||
:40110000104001F0EDB900BF0004FA050CED00E014ED00E0000000000080FF1F31100000BC760040C080FF1F08ED00E0F8B501F017FF4B4A01271378022643F001031370EA
|
:401100000C4B1A700C4B084A1A60FFF73BFEBDE8104001F0EDB900BF0004FA050CED00E014ED00E0000000000080FF1F41100000BC760040C080FF1F08ED00E0F8B501F042
|
||||||
:40114000137C484C43F001031374474B02F5E3521F700B3203F8946C1378054603F07F031370002001F0EAFA2378404A03F0F90323701378384603F0DF03137023783B4325
|
:4011400017FF4B4A01271378022643F001031370137C484C43F001031374474B02F5E3521F700B3203F8946C1378054603F07F031370002001F0EAFA2378404A03F0F903F2
|
||||||
:40118000237001F0DBFA282001F0D8FA384B30461A7802F07F021A701A7802F0BF021A7023783343237001F0C9FA2378314A43F0040323700023137053702F4AFF2199544A
|
:4011800023701378384603F0DF03137023783B43237001F0DBFA282001F0D8FA384B30461A7802F07F021A701A7802F0BF021A7023783343237001F0C9FA2378314A43F0C6
|
||||||
:4011C0000133092BFBD1284601F0CEFE0721172001F0FCFA2949172001F0EAFA0721182001F0F4FA2649182001F0E2FA0721152001F0ECFA2349152001F0DAFA0721052032
|
:4011C000040323700023137053702F4AFF2199540133092BFBD1284601F0CEFE0721172001F0FCFA2949172001F0EAFA0721182001F0F4FA2649182001F0E2FA0721152033
|
||||||
:4012000001F0E4FA2049052001F0D2FA0721062001F0DCFA1D49062001F0CAFA0721084601F0D4FA1A49072001F0C2FA0721082001F0CCFA1749082001F0BAFA0021162047
|
:4012000001F0ECFA2349152001F0DAFA0721052001F0E4FA2049052001F0D2FA0721062001F0DCFA1D49062001F0CAFA0721084601F0D4FA1A49072001F0C2FA07210820F8
|
||||||
:4012400001F0C4FA1449162001F0B2FA07210C2001F0BCFABDE8F84010490C2001F0A8BAA5430040944300409D60004012600040F851004084600040B592FF1FFB1A00008A
|
:4012400001F0CCFA1749082001F0BAFA0021162001F0C4FA1449162001F0B2FA07210C2001F0BCFABDE8F84010490C2001F0A8BAA5430040944300409D6000401260004076
|
||||||
:4012800035190000F91A00002D1A0000591A0000891A0000C11A0000011B0000751B0000214B224A10B5187000231370204A40201370204A0F2413701F4A13701F4A1370D9
|
:40128000F851004084600040B592FF1F0B1B000045190000091B00003D1A0000691A0000991A0000D11A0000111B0000851B0000214B224A10B5187000231370204A40209B
|
||||||
:4012C0001F4A13701F4A13701F4B4FF400021A604FF080721A604FF400121A6020221A601860802018604FF480701860174804704FF480001860164B1A70933B19B91A7851
|
:4012C0001370204A0F2413701F4A13701F4A13701F4A13701F4A13701F4B4FF400021A604FF080721A604FF400121A6020221A601860802018604FF480701860174804702E
|
||||||
:4013000002F0FE0202E01A7842F001021A70114B03221A70802203F8202C012001F018FE0D4B04221A7010BDD092FF1FD692FF1FD492FF1FD592FF1FD192FF1FC092FF1F97
|
:401300004FF480001860164B1A70933B19B91A7802F0FE0202E01A7842F001021A70114B03221A70802203F8202C012001F018FE0D4B04221A7010BDD092FF1FD692FF1F39
|
||||||
:40134000D392FF1F4893FF1F00E100E09E6000409C600040286000401260004070B5074C054623780E461BB9FFF7E0FE0123237031462846BDE87040FFF792BF8092FF1F7A
|
:40134000D492FF1FD592FF1FD192FF1FC092FF1FD392FF1F4893FF1F00E100E09E6000409C600040286000401260004070B5074C054623780E461BB9FFF7E0FE0123237031
|
||||||
:401380000A4A002313700A4A13700A4A13700A4A13700A4A13700A4A13700A4A13700A4B03221A70802203F8202C7047D692FF1FD492FF1FD592FF1FD192FF1FC092FF1F05
|
:4013800031462846BDE87040FFF792BF8092FF1F0A4A002313700A4A13700A4A13700A4A13700A4A13700A4A13700A4A13700A4B03221A70802203F8202C7047D692FF1F4E
|
||||||
:4013C000D392FF1F4893FF1F28600040014B1878704700BFD592FF1F044B1A7802F0FF001AB118780022C0B21A707047D492FF1F024A0C2303FB002040787047DC92FF1FB8
|
:4013C000D492FF1FD592FF1FD192FF1FC092FF1FD392FF1F4893FF1F28600040014B1878704700BFD592FF1F044B1A7802F0FF001AB118780022C0B21A707047D492FF1F52
|
||||||
:40140000431E072B0CD8074A064B00010344805C5B7800F00F0043EA0020023880B2704700207047FC5F00401A4A38B50C2303FB00231B79090C13F0800F00F1FF35044670
|
:40140000024A0C2303FB002040787047DC92FF1F431E072B0CD8074A064B00010344805C5B7800F00F0043EA0020023880B2704700207047FC5F00401A4A38B50C2303FBA9
|
||||||
:4014400019BF8AB24FF480438BB24FF48042032D18D8DFE805F002070C110021084601F01BF80DE00021084600F0FAFF08E00021084600F0D9FF03E00021084600F0B8FF3E
|
:4014400000231B79090C13F0800F00F1FF35044619BF8AB24FF480438BB24FF48042032D18D8DFE805F002070C110021084601F01BF80DE00021084600F0FAFF08E0002180
|
||||||
:40148000054B1855EDB2072D03D801F0EDF8034B185538BDDC92FF1FAC92FF1FB592FF1F431E072B2DE9F0470446894615465CD82F4F0C2202FB0072D388DFF8B8A09BB274
|
:40148000084600F0D9FF03E00021084600F0B8FF054B1855EDB2072D03D801F0EDF8034B185538BDDC92FF1FAC92FF1FB592FF1F431E072B2DE9F0470446894615465CD857
|
||||||
:4014C000C3F500739D424FF00C0303FB007388BFD588DB7884BFC5F50075ADB2254A43EA15230601B354B244EBB28AF80130224B1A5C9846FF2A01D1FFF796FF0C2303FBBF
|
:4014C0002F4F0C2202FB0072D388DFF8B8A09BB2C3F500739D424FF00C0303FB007388BFD588DB7884BFC5F50075ADB2254A43EA15230601B354B244EBB28AF80130224BD4
|
||||||
:40150000047200215170B9F1000F28D03DB31B4F385D01F011F811232946FE2218F8040001F0D6F806F5C04278321FFA89F118F8040001F0DFF8124D18F80410385D01F004
|
:401500001A5C9846FF2A01D1FFF796FF0C2303FB047200215170B9F1000F28D03DB31B4F385D01F011F811232946FE2218F8040001F0D6F806F5C04278321FFA89F118F8D2
|
||||||
:401540004BF80121385D00F0E1FF735D43F002037355735D03F0FD037355BDE8F08703FB04746379DBB28AF80230BDE8F08700BFDC92FF1FFC5F0040B592FF1FAC92FF1FD4
|
:40154000040001F0DFF8124D18F80410385D01F04BF80121385D00F0E1FF735D43F002037355735D03F0FD037355BDE8F08703FB04746379DBB28AF80230BDE8F08700BFE7
|
||||||
:40158000706000402DE9F047044615468846002940D0431E072B3FD8FFF732FFA84203D22046FFF72DFF05461D4E335DFF2B03D141462046FFF738FFDFF868A027011AF893
|
:40158000DC92FF1FFC5F0040B592FF1FAC92FF1F706000402DE9F047044615468846002940D0431E072B3FD8FFF732FFA84203D22046FFF72DFF05461D4E335DFF2B03D1DE
|
||||||
:4015C000040000F0B9FF1223FE222946305D01F07FF807F5C0411FFA88F27831305D01F089F8DFF84490315D1AF8040000F0F4FF01211AF8040000F089FF17F8093043F0F1
|
:4015C00041462046FFF738FFDFF868A027011AF8040000F0B9FF1223FE222946305D01F07FF807F5C0411FFA88F27831305D01F089F8DFF84490315D1AF8040000F0F4FFE9
|
||||||
:40160000020307F8093017F8093003F0FD0307F8093002E00D4600E000252846BDE8F087B592FF1FAC92FF1F70600040431E072B0AD8064A0C2303FB002300225A705A7991
|
:4016000001211AF8040000F089FF17F8093043F0020307F8093017F8093003F0FD0307F8093002E00D4600E000252846BDE8F087B592FF1FAC92FF1F70600040431E072BA7
|
||||||
:40164000034BD2B200011A54704700BFDC92FF1FFE5F0040431E072B9FBF024B000108221A547047FE5F004030B51A4A1A491B4D0878138803449BB21380194A00231488E7
|
:401640000AD8064A0C2303FB002300225A705A79034BD2B200011A54704700BFDC92FF1FFE5F0040431E072B9FBF024B000108221A547047FE5F004030B51A4A1A491B4D0A
|
||||||
:40168000D8B2A4B27CB1082B0CD050680078C0B2E85450680133013050601088013880B21080ECE718460B780E4C082B0E4A00D040B10E4D2B7883F080032B700F23237022
|
:401680000878138803449BB21380194A00231488D8B2A4B27CB1082B0CD050680078C0B2E85450680133013050601088013880B21080ECE718460B780E4C082B0E4A00D003
|
||||||
:4016C000022301E0022323701370094B1870087030BD00BF4C93FF1F4893FF1F00600040C492FF1FC192FF1FD692FF1FD292FF1F4993FF1F074B02221A70074B80221A70AE
|
:4016C00040B10E4D2B7883F080032B700F232370022301E0022323701370094B1870087030BD00BF4C93FF1F4893FF1F00600040C492FF1FC192FF1FD692FF1FD292FF1FE1
|
||||||
:40170000064B0F221A70064A00231370054A012013707047D692FF1FD292FF1FC192FF1F4893FF1F4993FF1F30B5164B16491B780A8803F00F03023BDBB21A4492B20A80CC
|
:401700004993FF1F074B02221A70074B80221A70064B0F221A70064A00231370054A012013707047D692FF1FD292FF1FC192FF1F4893FF1F4993FF1F30B5164B16491B78E1
|
||||||
:40174000124C134A0020118889B279B173B15568215C013BC9B229705168DBB20131516011880130013989B21180ECE7094A1370094A137883F080031370084B0B221A70DF
|
:401740000A8803F00F03023BDBB21A4492B20A80124C134A0020118889B279B173B15568215C013BC9B229705168DBB20131516011880130013989B21180ECE7094A1370B3
|
||||||
:4017800030BD00BF296000404C93FF1F00600040C492FF1F4993FF1FD292FF1FC192FF1F064A06231370064A01201370054B80221A70054B00221A70704700BFD692FF1F52
|
:40178000094A137883F080031370084B0B221A7030BD00BF296000404C93FF1F00600040C492FF1F4993FF1FD292FF1FC192FF1F064A06231370064A01201370054B802273
|
||||||
:4017C000C192FF1FD292FF1F4993FF1F054B9A683AB19A68044910709A680988518000229A607047C492FF1F4C93FF1F08B5124B1A78D2B21A701B78DBB21A0602D50F4A1E
|
:4017C0001A70054B00221A70704700BFD692FF1FC192FF1FD292FF1F4993FF1F054B9A683AB19A68044910709A680988518000229A607047C492FF1F4C93FF1F08B5124BAC
|
||||||
:40180000137008BD0220FFF7E1FF0D4B1B7803F06003202B05D0402B06D043B900F012FC04E001F0A5FB01E000F046FD10B9034B03221A7008BD00BF28600040C192FF1FC0
|
:401800001A78D2B21A701B78DBB21A0602D50F4A137008BD0220FFF7E1FF0D4B1B7803F06003202B05D0402B06D043B900F012FC04E001F0A5FB01E000F046FD10B9034B1C
|
||||||
:401840000060004008B5084A084B0120197813880B449BB21380064B00221A70FFF7B6FF044B03221A7008BD4C93FF1F4893FF1FD692FF1FC192FF1F08B50C4B1B78DBB25E
|
:4018400003221A7008BD00BF28600040C192FF1F0060004008B5084A084B0120197813880B449BB21380064B00221A70FFF7B6FF044B03221A7008BD4C93FF1F4893FF1F1D
|
||||||
:40188000042B07D0062B09D0022B0DD1BDE80840FFF7D8BFBDE80840FFF746BF0320FFF795FF034B03221A7008BD00BFD692FF1FC192FF1F08B5054B002201201A70FFF7B6
|
:40188000D692FF1FC192FF1F08B50C4B1B78DBB2042B07D0062B09D0022B0DD1BDE80840FFF7D8BFBDE80840FFF746BF0320FFF795FF034B03221A7008BD00BFD692FF1FCC
|
||||||
:4018C00085FF034B03221A7008BD00BFD692FF1FC192FF1F08B50A4B1A7832B11A78094942F080020A7000221A70074B002201201A70FFF76BFF054B03221A7008BD00BFA5
|
:4018C000C192FF1F08B5054B002201201A70FFF785FF034B03221A7008BD00BFD692FF1FC192FF1F08B50A4B1A7832B11A78094942F080020A7000221A70074B00220120D1
|
||||||
:40190000C092FF1F08600040D692FF1FC192FF1F074B1B78DBB2042B05D0062B05D0022B05D1FFF7A1BEFFF7C5BFFFF7D3BF7047D692FF1F38B51D4C2378DBB2DD0634D51B
|
:401900001A70FFF76BFF054B03221A7008BD00BFC092FF1F08600040D692FF1FC192FF1F074B1B78DBB2042B05D0062B05D0022B05D1FFF7A1BEFFF7C5BFFFF7D3BF70479E
|
||||||
:4019400018060AD503F00F03012B2ED1FFF74EFF174B1B78190609D538BD5A0602D5FFF7D7FF03E09D0620D5FFF786FF23781B061BD4104B1A78104B1B7813430F4A13705F
|
:40194000D692FF1F38B51D4C2378DBB2DD0634D518060AD503F00F03012B2ED1FFF74EFF174B1B78190609D538BD5A0602D5FFF7D7FF03E09D0620D5FFF786FF23781B066B
|
||||||
:401980001278934211D10A4A0849154613782078DBB2000605D41378DBB20B700B7803F00F0328788342F1D138BD38BD28600040C192FF1FD292FF1F4993FF1F29600040AD
|
:401980001BD4104B1A78104B1B7813430F4A13701278934211D10A4A0849154613782078DBB2000605D41378DBB20B700B7803F00F0328788342F1D138BD38BD2860004067
|
||||||
:4019C000054A00231380054A916819B191680B7092685380704700BF4C93FF1FC492FF1F0E4808B503889BB213B9FFF783FE13E00B4B02221A700B4B00221A70FFF7E0FFAC
|
:4019C000C192FF1FD292FF1F4993FF1F29600040054A00231380054A916819B191680B7092685380704700BF4C93FF1FC492FF1F0E4808B503889BB213B9FFF783FE13E0D1
|
||||||
:401A0000094AD1799379028843EA012392B2934238BF0380FFF728FE012008BDC492FF1FD692FF1FD292FF1F00600040084B01221A700F3B9B7C074B1A7B02F00302012A07
|
:401A00000B4B02221A700B4B00221A70FFF7E0FF094AD1799379028843EA012392B2934238BF0380FFF728FE012008BDC492FF1FD692FF1FD292FF1F00600040084B012220
|
||||||
:401A40001EBFDA7B82F08002DA7301225A7370470B600040DC92FF1F094B02221A700F3B93F82230074B1A7E02F00302012A1EBFDA7E82F08002DA7601225A76704700BFFE
|
:401A40001A700F3B9B7C074B1A7B02F00302012A1EBFDA7B82F08002DA7301225A7370470B600040DC92FF1F094B02221A700F3B93F82230074B1A7E02F00302012A1EBF0F
|
||||||
:401A80000B600040DC92FF1F0B4B04221A700F3B93F83230094B93F8242002F00302012A1EBF93F8272082F0800283F82720012283F82520704700BF0B600040DC92FF1F78
|
:401A8000DA7E82F08002DA7601225A76704700BF0B600040DC92FF1F0B4B04221A700F3B93F83230094B93F8242002F00302012A1EBF93F8272082F0800283F827200122E0
|
||||||
:401AC0000B4B08221A700F3B93F84230094B93F8302002F00302012A1EBF93F8332082F0800283F83320012283F83120704700BF0B600040DC92FF1F7047FFF741BC000081
|
:401AC00083F82520704700BF0B600040DC92FF1F0B4B08221A700F3B93F84230094B93F8302002F00302012A1EBF93F8332082F0800283F83320012283F83120704700BFF5
|
||||||
:401B0000F0B5184B184E19780C27C9B201234FF0000C31B3CA0720D5144A4FEA031E7244947850782040C5070DD507FB03652C79240608D5147804F0FE0414706D790C4C35
|
:401B00000B600040DC92FF1F7047FFF741BC0000F0B5184B184E19780C27C9B201234FF0000C31B3CA0720D5144A4FEA031E7244947850782040C5070DD507FB03652C799F
|
||||||
:401B4000EDB204F80E50840706D507FB036425792D0658BF84F801C090700133DBB24908D7E7F0BD9F600040DC92FF1F70600040FE5F004000F0ACBC70B50446184B88B021
|
:401B4000240608D5147804F0FE0414706D790C4CEDB204F80E50840706D507FB036425792D0658BF84F801C090700133DBB24908D7E7F0BD9F600040DC92FF1F70600040D5
|
||||||
:401B800003AA03F11006154618685968083303C5B3422A46F7D11B782B70FCB12223237001AD03232846637000F08AFE002220461146AB5C08AC04EB131414F8144C03F053
|
:401B8000FE5F004000F0ACBC70B50446184B88B003AA03F11006154618685968083303C5B3422A46F7D11B782B70FCB12223237001AD03232846637000F08AFE00222046DB
|
||||||
:401BC0000F03847008AC234413F8143C0132082AC1700371417100F10400EAD108B070BD3F3A00002DE9F0431C4D01222E460C201F274FF0800E4FF0080C194B00FB02580B
|
:401BC0001146AB5C08AC04EB131414F8144C03F00F03847008AC234413F8143C0132082AC1700371417100F10400EAD108B070BD4F3A00002DE9F0431C4D01222E460C2093
|
||||||
:401C00001401234418705F70164998F805902144B9F1000F07D098F8044024064CBF887081F802C001E081F802E000FB0261CC880132E4B29C71CC88092AC4F30724DC71A2
|
:401C00001F274FF0800E4FF0080C194B00FB02581401234418705F70164998F805902144B9F1000F07D098F8044024064CBF887081F802C001E081F802E000FB0261CC880F
|
||||||
:401C4000CC88E4B21C71C988C1F307215971D4D1054BFF221A70BDE8F08300BFDC92FF1F70600040FC5F00400A600040064B074A1B7802EBC30253681A7C824286BF03EB6F
|
:401C40000132E4B29C71CC88092AC4F30724DC71CC88E4B21C71C988C1F307215971D4D1054BFF221A70BDE8F08300BFDC92FF1F70600040FC5F00400A600040064B074A70
|
||||||
:401C8000C003586900207047D092FF1FA03A00002DE9F84F424B1A78002A7ED01878414D0138C0B2FFF7E2FFA8463F4AC3681478007ADFF800C1E4B203EBC0000C260027FE
|
:401C80001B7802EBC30253681A7C824286BF03EBC003586900207047D092FF1FB03A00002DE9F84F424B1A78002A7ED01878414D0138C0B2FFF7E2FFA8463F4AC368147810
|
||||||
:401CC0004FF0010E834268D01A78A24263D11CF80420597891425ED19A7893F8039002F07F0206FB02FA05EB0A01CF7093F802B009F0030981F804B093F803B005F80AB0A6
|
:401CC000007ADFF800C1E4B203EBC0000C2600274FF0010E834268D01A78A24263D11CF80420597891425ED19A7893F8039002F07F0206FB02FA05EB0A01CF7093F802B01E
|
||||||
:401D0000B3F804A0A1F808A093F902A0BAF1000F0BDAB9F1010F0CBF4FF007094FF00D0981F8059081F801E009E0B9F1010F0CBF4FF005094FF0090981F805904F704FEAA3
|
:401D000009F0030981F804B093F803B005F80AB0B3F804A0A1F808A093F902A0BAF1000F0BDAB9F1010F0CBF4FF007094FF00D0981F8059081F801E009E0B9F1010F0CBF20
|
||||||
:401D400002191A4906FB0282494481F802E0B2F808A0CAF3072A81F800A0B2F808A05FFA8AFA81F801A0B2F806A011495FFA8AFA494481F806A0B2F80690C9F3072981F8FE
|
:401D40004FF005094FF0090981F805904F704FEA02191A4906FB0282494481F802E0B2F808A0CAF3072A81F800A0B2F808A05FFA8AFA81F801A0B2F806A011495FFA8AFAAB
|
||||||
:401D80000790B2F806905FFA89F981F80490D288C2F307224A71083394E7BDE8F88F00BFD592FF1FDC92FF1FD192FF1FFC5F004070600040C292FF1F08B5064B187801384A
|
:401D8000494481F806A0B2F80690C9F3072981F80790B2F806905FFA89F981F80490D288C2F307224A71083394E7BDE8F88F00BFD592FF1FDC92FF1FD192FF1FFC5F004052
|
||||||
:401DC000C0B2FFF753FF20B143681B7900EBC300406908BDD592FF1F00212DE9F84F0B464E4E0C2707FB01F401313219092933554FF000059370494CD37013819372537031
|
:401DC00070600040C292FF1F08B5064B18780138C0B2FFF753FF20B143681B7900EBC300406908BDD592FF1F00212DE9F84F0B464E4E0C2707FB01F4013132190929335553
|
||||||
:401E00005371EFD118B1464B1D70464B1D70464B1A78002A7FD0187801250138C0B2FFF725FFA8464368DFF8F8E0DB790C2713F0400F3E4B4FF0000C1A7814BF42F0010273
|
:401E00004FF000059370494CD3701381937253705371EFD118B1464B1D70464B1D70464B1A78002A7FD0187801250138C0B2FFF725FFA8464368DFF8F8E0DB790C2713F0B5
|
||||||
:401E400002F0FE021A70027AD20007FB0541C36803EB02094B4531D093F802A00AF07F06AE4229D10E89B3F804B0B6B25E4538BFA1F808B01E7893F801B01EF80660B34576
|
:401E4000400F3E4B4FF0000C1A7814BF42F0010202F0FE021A70027AD20007FB0541C36803EB02094B4531D093F802A00AF07F06AE4229D10E89B3F804B0B6B25E4538BF50
|
||||||
:401E80001AD181F804A0DE780E7093F902A0DE78BAF1000F06F0030607DA012E0CBF07260D264E7181F8018006E0012E0CBF052609264E7181F801C00833CBE70135092D89
|
:401E8000A1F808B01E7893F801B01EF80660B3451AD181F804A0DE780E7093F902A0DE78BAF1000F06F0030607DA012E0CBF07260D264E7181F8018006E0012E0CBF052673
|
||||||
:401EC000C3D1C1680A328B1C0A440C200833934209D013F8081C13F80A5C01F07F0100FB01418D72F2E7FFF767FF114B0121186000230C2000FB0142D38012890131134463
|
:401EC00009264E7181F801C00833CBE70135092DC3D1C1680A328B1C0A440C200833934209D013F8081C13F80A5C01F07F0100FB01418D72F2E7FFF767FF114B01211860E6
|
||||||
:401F00009BB203F00102134409299BB2F2D1BDE8F84FFFF767BEBDE8F88F00BFDC92FF1FC292FF1F4A93FF1FD592FF1FD392FF1FD892FF1F114B1B7903F07F035A1E072A3C
|
:401F000000230C2000FB0142D3801289013113449BB203F00102134409299BB2F2D1BDE8F84FFFF767BEBDE8F88F00BFDC92FF1FC292FF1F4A93FF1FD592FF1FD392FF1FCE
|
||||||
:401F400019D80F490C2202FB031291781B0141F0010191700021D170517841F002015170127912F0800F074A1A4414BF8D2389239370FFF715BC0020704700BF0060004065
|
:401F4000D892FF1F114B1B7903F07F035A1E072A19D80F490C2202FB031291781B0141F0010191700021D170517841F002015170127912F0800F074A1A4414BF8D238923CF
|
||||||
:401F8000DC92FF1FFC5F004030B4194B1A7902F07F02531E072B27D8164B0C2404FB02339978154D01F0FE0199700021D97029461201505D114400F07F0050555A7802F013
|
:401F80009370FFF715BC0020704700BF00600040DC92FF1FFC5F004030B4194B1A7902F07F02531E072B27D8164B0C2404FB02339978154D01F0FE0199700021D970294600
|
||||||
:401FC000FD025A701A795B78120605D5012B01D18C7006E00D2303E0012B0CBF082309238B7030BCFFF7DCBB002030BC704700BF00600040DC92FF1FFC5F004010B50D4BA5
|
:401FC0001201505D114400F07F0050555A7802F0FD025A701A795B78120605D5012B01D18C7006E00D2303E0012B0CBF082309238B7030BCFFF7DCBB002030BC704700BF9C
|
||||||
:402000000D4C21791878C9B20138C0B2FFF72EFE43681B798B4201D2012909D8074A0848535CDBB24354A3780120DBB2535410BD002010BDD592FF1F00600040C292FF1FB6
|
:4020000000600040DC92FF1FFC5F004010B50D4B0D4C21791878C9B20138C0B2FFF72EFE43681B798B4201D2012909D8074A0848535CDBB24354A3780120DBB2535410BD56
|
||||||
:402040004A93FF1F38B58A4A8A4C13780021DBB221801806517840F18D800A2900F20581DFE811F05D00030103010301030103010B0003017E0003018200D3787C49012B9C
|
:40204000002010BDD592FF1F00600040C292FF1F4A93FF1F38B58A4A8A4C13780021DBB221801806517840F18D800A2900F20581DFE811F05D000301030103010301030167
|
||||||
:4020800009D17D4B1A787D4B03EBC2035B685B686360122310E0CB78022B12D18878FFF7E5FD002800F0E180436863606368DA7863689B7843EA02232380BDE83840FFF7EE
|
:402080000B0003017E0003018200D3787C49012B09D17D4B1A787D4B03EBC2035B685B686360122310E0CB78022B12D18878FFF7E5FD002800F0E180436863606368DA7885
|
||||||
:4020C0008FBCCB78032B26D16D4B00228878D5B2854209D3664A91786A4AEE2908BF1346634A917881B106E0187801320028F1D018780344EAE764499278097C914203D180
|
:4020C00063689B7843EA02232380BDE83840FFF78FBCCB78032B26D16D4B00228878D5B2854209D3664A91786A4AEE2908BF1346634A917881B106E0187801320028F1D025
|
||||||
:402100006248FFF739FD614B1A78002A00F0AD801A78228018E0BDE8384000F029BF13F0030313D0022B40F0A0802380504B0C211B7903F07F02564B01FB02339A78554BC3
|
:4021000018780344EAE764499278097C914203D16248FFF739FD614B1A78002A00F0AD801A78228018E0BDE8384000F029BF13F0030313D0022B40F0A0802380504B0C21C4
|
||||||
:40214000D2B21A7000225A706360B6E702222280514A11784F4AC9B2117053706260ACE7012323804D4BEFE70123238013794C4A1344E9E701390A2977D8DFE801F0377608
|
:402140001B7903F07F02564B01FB02339A78554BD2B21A7000225A706360B6E702222280514A11784F4AC9B2117053706260ACE7012323804D4BEFE70123238013794C4AC4
|
||||||
:402180004F76067676760A7620009378454ADBB25AE0937803F0FF0153B9404B1A7891425FD01970404B01201870FFF715FE58E0481EC0B2FFF75AFD0028EED155E0FFF793
|
:402180001344E9E701390A2977D8DFE801F037764F76067676760A7620009378454ADBB25AE0937803F0FF0153B9404B1A7891425FD01970404B01201870FFF715FE58E082
|
||||||
:4021C0001DFF002851D02A4A384913791279DBB2D2B20A70364A3249D25CCB5C9A4240D0314B01221A70FFF753FD3AE003F00303012B2BD009D3022B37D11D4B9B78002B47
|
:4021C000481EC0B2FFF75AFD0028EED155E0FFF71DFF002851D02A4A384913791279DBB2D2B20A70364A3249D25CCB5C9A4240D0314B01221A70FFF753FD3AE003F00303EE
|
||||||
:4022000033D1BDE83840FFF7BFBE194B9B78012B2BD1214A137803F0FD0315E003F00303012B13D008D3022B1FD1114B9B78E3B9BDE83840FFF77EBE0D4B9B78012B14D1B7
|
:40220000012B2BD009D3022B37D11D4B9B78002B33D1BDE83840FFF7BFBE194B9B78012B2BD1214A137803F0FD0315E003F00303012B13D008D3022B1FD1114B9B78E3B9A4
|
||||||
:40224000154A137843F0020313700AE0084B1A795AB998781B791749DBB2CA5C22EA0002CA54BDE83840FFF79BBA002038BD00BF00600040C492FF1FD092FF1FA03A000049
|
:40224000BDE83840FFF77EBE0D4B9B78012B14D1154A137843F0020313700AE0084B1A795AB998781B791749DBB2CA5C22EA0002CA54BDE83840FFF79BBA002038BD00BFEC
|
||||||
:40228000043B00008C3A0000773B00006893FF1FDC92FF1F8192FF1FD392FF1FD592FF1FC292FF1FC092FF1FD492FF1FD192FF1F4A93FF1FD792FF1F074B1A78120609D546
|
:4022800000600040C492FF1FD092FF1FB03A0000143B00009C3A0000873B00006893FF1FDC92FF1F8192FF1FD392FF1FD592FF1FC292FF1FC092FF1FD492FF1FD192FF1FF4
|
||||||
:4022C0005B78012B06D1054B054A5A6012781A80FFF786BB0020704700600040C492FF1F643A0000014B1870704700BF76650040014B1878704700BF67640040014B187035
|
:4022C0004A93FF1FD792FF1F074B1A78120609D55B78012B06D1054B054A5A6012781A80FFF786BB0020704700600040C492FF1F743A0000014B1870704700BF76650040FA
|
||||||
:40230000704700BF77640040064A0123136002F688321268E0211064034A1170A2F540721360704780E100E000E400E0014B1870704700BF74640040014B1870704700BF92
|
:40230000014B1878704700BF67640040014B1870704700BF77640040064A0123136002F688321268E0211064034A1170A2F540721360704780E100E000E400E0014B187039
|
||||||
:402340007565004073B515461E460B4C05230022019200920A4601461846237000F064F932462946207800F01FF90221207800F009F9207802B070BDD080FF1F064A042331
|
:40234000704700BF74640040014B1870704700BF7565004073B515461E460B4C05230022019200920A4601461846237000F064F932462946207800F01FF90221207800F0B7
|
||||||
:40238000136002F688321268E0219064034A1170A2F202321360704780E100E002E400E0014B04221A60704700E100E0014B04221A60704780E100E0014B1870704700BF30
|
:4023800009F9207802B070BDD080FF1F064A0423136002F688321268E0219064034A1170A2F202321360704780E100E002E400E0014B04221A60704700E100E0014B04228E
|
||||||
:4023C00074650040704738B505460078012428B100F066FD285D0134E4B2F8E738BD08B50D2000F05DFDBDE808400A2000F058BDF7B516461F460B4C002303250193009362
|
:4023C0001A60704780E100E0014B1870704700BF74650040704738B505460078012428B100F066FD285D0134E4B2F8E738BD08B50D2000F05DFDBDE808400A2000F058BDDC
|
||||||
:402400000A4601462846257000F00EF93A463146207800F0C9F80221207800F0B3F8207803B0F0BDE080FF1FF7B516461F460B4C00230225019300930A4601462846257030
|
:40240000F7B516461F460B4C00230325019300930A4601462846257000F00EF93A463146207800F0C9F80221207800F0B3F8207803B0F0BDE080FF1FF7B516461F460B4C05
|
||||||
:4024400000F0F2F83A463146207800F0ADF82946207800F097F8207803B0F0BDE180FF1FF7B516461F460B4C00230125019300930A4601462846257000F0D6F83A463146DE
|
:4024400000230225019300930A4601462846257000F0F2F83A463146207800F0ADF82946207800F097F8207803B0F0BDE180FF1FF7B516461F460B4C002301250193009322
|
||||||
:40248000207800F091F80221207800F07BF8207803B0F0BDE280FF1F73B515461E460B4C0023019300930A4601461846237000F0BBF832462946207800F076F8022120782A
|
:402480000A4601462846257000F0D6F83A463146207800F091F80221207800F07BF8207803B0F0BDE280FF1F73B515461E460B4C0023019300930A4601461846237000F026
|
||||||
:4024C00000F060F8207802B070BD00BFE380FF1F024B1878C0F38010704700BF8F450040074A7F23802113705170064A013BDBB202F80839002BF9D1034A1370704700BFCC
|
:4024C000BBF832462946207800F076F80221207800F060F8207802B070BD00BFE380FF1F024B1878C0F38010704700BF8F450040074A7F23802113705170064A013BDBB2F7
|
||||||
:40250000E480FF1FF87B00400078004017280FD8084B0001C25C11B142F0200201E002F0DF02C254C25C42F00102C25400207047012070471070004017280BD8064B0001EA
|
:4025000002F80839002BF9D1034A1370704700BFE480FF1FF87B00400078004017280FD8084B0001C25C11B142F0200201E002F0DF02C254C25C42F00102C2540020704780
|
||||||
:40254000C25C02F0FE02C254C25C02F0DF02C25400207047012070471070004017280DD8074900010B4603441A7942F004021A71435C43F001034354002070470120704740
|
:40254000012070471070004017280BD8064B0001C25C02F0FE02C254C25C02F0DF02C25400207047012070471070004017280DD8074900010B4603441A7942F004021A7150
|
||||||
:402580001070004017280BD8064A0001835C490003F0F10301F00E011943815400207047012070471070004041F6FF73994208BF4FF400519A4208BF4FF4005217289FBF85
|
:40258000435C43F00103435400207047012070471070004017280BD8064A0001835C490003F0F10301F00E011943815400207047012070471070004041F6FF73994208BFD2
|
||||||
:4025C000C00000F1804000F5EC4081809ABFC280002001207047000017289FBF034B00011954002088BF0120704700BF1970004017289FBF054B00011A5C01F007019DBFDC
|
:4025C0004FF400519A4208BF4FF4005217289FBFC00000F1804000F5EC4081809ABFC280002001207047000017289FBF034B00011954002088BF0120704700BF197000402C
|
||||||
:402600001143195400200120704700BF1470004017289FBF034B0001185C00F0070088BFFF20704714700040172810B51AD8C00001F07F0100F1804441EAC21204F5EC4422
|
:4026000017289FBF054B00011A5C01F007019DBF1143195400200120704700BF1470004017289FBF034B0001185C00F0070088BFFF20704714700040172810B51AD8C000B7
|
||||||
:40264000D2B222709DF8082003F00F0343EA0213DBB263709DF80C30002003F00F03A370E07010BD012010BD10B500F079FC0A4A5378182B0AD91478013B5370E30003F1FB
|
:4026400001F07F0100F1804441EAC21204F5EC44D2B222709DF8082003F00F0343EA0213DBB263709DF80C30002003F00F03A370E07010BD012010BD10B500F079FC0A4A00
|
||||||
:40268000804303F5F0431B78137000E0FF2400F06BFC204610BD00BFE480FF1F030610B5044611D400F05CFC084AE300117803F1804303F5F0431970537814700133537094
|
:402680005378182B0AD91478013B5370E30003F1804303F5F0431B78137000E0FF2400F06BFC204610BD00BFE480FF1F030610B5044611D400F05CFC084AE300117803F1FE
|
||||||
:4026C000BDE8104000F050BC10BD00BFE480FF1F30B504060CD411F4704509D1C40004F1804404F5F0442180A270E370284630BD012030BD03065FBFC00000F1804000F5D2
|
:4026C000804303F5F04319705378147001335370BDE8104000F050BC10BD00BFE480FF1F30B504060CD411F4704509D1C40004F1804404F5F0442180A270E370284630BDB0
|
||||||
:40270000F04081805ABFC280002001207047000038B50446084DB4F5004F05D9286800F017FCA4F50044F6E7034B58686043BDE8384000F00DBC00BFEC80FF1F024B1B7AB4
|
:40270000012030BD03065FBFC00000F1804000F5F04081805ABFC280002001207047000038B50446084DB4F5004F05D9286800F017FCA4F50044F6E7034B58686043BDE875
|
||||||
:40274000584300F005BC00BFEC80FF1F0E4B00F003001A78490102F0FC02104318701A7801F0600142F080021A701A7802F07F021A701A7802F09F020A431A701A7842F060
|
:40274000384000F00DBC00BFEC80FF1F024B1B7A584300F005BC00BFEC80FF1F0E4B00F003001A78490102F0FC02104318701A7801F0600142F080021A701A7802F07F024E
|
||||||
:4027800010021A70704700BF83430040014B01221A70704784430040044B00F00F021B6853F8220043F82210704700BF08ED00E0054A00F01F00126800F1100352F8230009
|
:402780001A701A7802F09F020A431A701A7842F010021A70704700BF83430040014B01221A70704784430040044B00F00F021B6853F8220043F82210704700BF08ED00E008
|
||||||
:4027C00042F82310704700BF08ED00E000F01F0000F16040490100F56440C9B2017070470F4B10B50F4900240F205C609C60DC601C615C61FFF7D0FF0B4A136843F0040334
|
:4027C000054A00F01F00126800F1100352F8230042F82310704700BF08ED00E000F01F0000F16040490100F56440C9B2017070470F4B10B50F4900240F205C609C60DC60F4
|
||||||
:4028000013600A4B4FF47A72DB68B3FBF2F3084A1360084B4FF400421C60C3F8E82010BD8492FF1F8D28000010E000E0EC80FF1F14E000E018E000E0024A136843F0020334
|
:402800001C615C61FFF7D0FF0B4A136843F0040313600A4B4FF47A72DB68B3FBF2F3084A1360084B4FF400421C60C3F8E82010BD8492FF1F9D28000010E000E0EC80FF1FC6
|
||||||
:402840001360704710E000E008B5FFF7F5FF034A136843F00103136008BD00BF10E000E010B5054CA3691BB9FFF7BAFF0123A361BDE81040FFF7E8BF8492FF1F024B186891
|
:4028400014E000E018E000E0024A136843F002031360704710E000E008B5FFF7F5FF034A136843F00103136008BD00BF10E000E010B5054CA3691BB9FFF7BAFF0123A36179
|
||||||
:40288000C0F30040704700BF10E000E038B5FFF7F5FF012808D1054D002455F8243003B198470134052CF8D138BD00BF8892FF1F024B03EB80035868596070478492FF1F1F
|
:40288000BDE81040FFF7E8BF8492FF1F024B1868C0F30040704700BF10E000E038B5FFF7F5FF012808D1054D002455F8243003B198470134052CF8D138BD00BF8892FF1FAE
|
||||||
:4028C000134B144A1B78DBB20360127843EA0223114A0360127843EA0243104A0360127843EA026303600E4B0E4A1B78DBB24360127843EA02230C4A4360127843EA024382
|
:4028C000024B03EB80035868596070478492FF1F134B144A1B78DBB20360127843EA0223114A0360127843EA0243104A0360127843EA026303600E4B0E4A1B78DBB2436031
|
||||||
:402900000A4A4360127843EA02634360704700BF0301004904010049EC460040020100490101004900010049050100490601004910B500F015FB204A044613780A2043F07D
|
:40290000127843EA02230C4A4360127843EA02430A4A4360127843EA02634360704700BF0301004904010049EC46004002010049010100490001004905010049060100490D
|
||||||
:4029400002031370137C43F00203137412F80A3C43F0010302F80A3C937943F00103937102F5AB52137843F003031370134B18221A7013F8012C42F0400203F8012C13F837
|
:4029400010B500F015FB204A044613780A2043F002031370137C43F00203137412F80A3C43F0010302F80A3C937943F00103937102F5AB52137843F003031370134B18223F
|
||||||
:40298000012C02F0FC0203F8012CCE2203F8062CA3F597530222183B1A70094A137843F008031370FFF7CAFE064B10222046BDE810401A6000F0D8BAAB4300400E59004026
|
:402980001A7013F8012C42F0400203F8012C13F8012C02F0FC0203F8012CCE2203F8062CA3F597530222183B1A70094A137843F008031370FFF7CAFE064B10222046BDE8DE
|
||||||
:4029C0002F5B004080E200E008B500F0C9FA0F4A137803F0FE031370A2F5AA521D3A137803F0FD031370137C03F0FD03137412F80A3C03F0FE0302F80A3C937903F0FE0388
|
:4029C00010401A6000F0D8BAAB4300400E5900402F5B004080E200E008B500F0C9FA0F4A137803F0FE031370A2F5AA521D3A137803F0FD031370137C03F0FD03137412F8E1
|
||||||
:402A00009371BDE8084000F0AFBA00BF08590040044A137803F03F0343EA8010C0B21070704700BF08590040082804D00A280CBF8223C22300E0422308380E4AC0B2042812
|
:402A00000A3C03F0FE0302F80A3C937903F0FE039371BDE8084000F0AFBA00BF08590040044A137803F03F0343EA8010C0B21070704700BF08590040082804D00A280CBF9D
|
||||||
:402A4000137098BF0C4B4FF0000298BF33F910100A4B88BF11461A8042F210734B4341F2883103F6C41393FBF1F305490B60054B1A8070470A590040503A00005293FF1FB7
|
:402A40008223C22300E0422308380E4AC0B20428137098BF0C4B4FF0000298BF33F910100A4B88BF11461A8042F210734B4341F2883103F6C41393FBF1F305490B60054B33
|
||||||
:402A80005493FF1F5893FF1F08B5102000F0A6F907210420FFF79AFE07490420FFF788FE064A0C20137843F006031370FFF7BCFF034B00221A8008BD812B0000095900402E
|
:402A80001A8070470A590040603A00005293FF1F5493FF1F5893FF1F08B5102000F0A6F907210420FFF79AFE07490420FFF788FE064A0C20137843F006031370FFF7BCFFBA
|
||||||
:402AC0005093FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040FFF72ABFA092FF1F044B1A7802F0FB021A701A7842F001021A7070470859004010B5084B1C7814F0F1
|
:402AC000034B00221A8008BD912B0000095900405093FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040FFF72ABFA092FF1F044B1A7802F0FB021A701A7842F0010256
|
||||||
:402B0000010403D10028F9D0002404E02046FFF715FE024B1B78204610BD00BF09590040034A044B1B881088181A00B2704700BF5893FF1FA25B00400E4A13881BB223B1D5
|
:402B00001A7070470859004010B5084B1C7814F0010403D10028F9D0002404E02046FFF715FE024B1B78204610BD00BF09590040034A044B1B881088181A00B2704700BF1D
|
||||||
:402B400011880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF5B42134493FBF1F000B270475293FF1F5493FF1F5093FF1F29
|
:402B40005893FF1FA25B00400E4A13881BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF5B42134493FBF1F0C1
|
||||||
:402B80007047000010B500F0EBF9214A044613780A2043F001031370137C43F00103137412F80A3C43F0020302F80A3C937943F00203937102F5AA521832137843F0030343
|
:402B800000B270475293FF1F5493FF1F5093FF1F7047000010B500F0EBF9214A044613780A2043F001031370137C43F00103137412F80A3C43F0020302F80A3C937943F0DB
|
||||||
:402BC0001370144B18221A7013F8012C42F0400203F8012C13F8012C02F0FC0203F8012CCE2203F8062CA3F597530222123B1A70094A137843F008031370FFF79FFD074BEE
|
:402BC0000203937102F5AA521832137843F003031370144B18221A7013F8012C42F0400203F8012C13F8012C02F0FC0203F8012CCE2203F8062CA3F597530222123B1A7067
|
||||||
:402C000008222046BDE810401A6000F0ADB900BFAB43004006590040275B004080E200E008B500F09DF90F4A137803F0FE031370A2F5AA52153A137803F0FE031370137C9E
|
:402C0000094A137843F008031370FFF79FFD074B08222046BDE810401A6000F0ADB900BFAB43004006590040275B004080E200E008B500F09DF90F4A137803F0FE0313708E
|
||||||
:402C400003F0FE03137412F80A3C03F0FD0302F80A3C937903F0FD039371BDE8084000F083B900BF00590040044A137803F03F0343EA8010C0B21070704700BF0059004016
|
:402C4000A2F5AA52153A137803F0FE031370137C03F0FE03137412F80A3C03F0FD0302F80A3C937903F0FD039371BDE8084000F083B900BF00590040044A137803F03F0361
|
||||||
:402C8000082804D00A280CBF8223C22300E0422308380E4AC0B20428137098BF0C4B4FF0000298BF33F910100A4B88BF11461A8042F210734B4341F2883103F6C41393FBDD
|
:402C800043EA8010C0B21070704700BF00590040082804D00A280CBF8223C22300E0422308380E4AC0B20428137098BF0C4B4FF0000298BF33F910100A4B88BF11461A80AE
|
||||||
:402CC000F1F305490B60054B1A807047025900405A3A00005E93FF1F6493FF1F5C93FF1F08B5102000F084F807210320FFF76EFD07490320FFF75CFD064A0C20137843F035
|
:402CC00042F210734B4341F2883103F6C41393FBF1F305490B60054B1A807047025900406A3A00005E93FF1F6493FF1F5C93FF1F08B5102000F084F807210320FFF76EFD92
|
||||||
:402D000006031370FFF7BCFF034B00221A8008BDD92D0000015900406093FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040FFF728BFA192FF1F044B1A7802F0FB02D6
|
:402D000007490320FFF75CFD064A0C20137843F006031370FFF7BCFF034B00221A8008BDE92D0000015900406093FF1F10B5054C23781BB9FFF7DCFF01232370BDE81040C8
|
||||||
:402D40001A701A7842F001021A7070470059004010B5084B1C7814F0010403D10028F9D0002404E02046FFF7E9FC024B1B78204610BD00BF01590040034A044B1B88108822
|
:402D4000FFF728BFA192FF1F044B1A7802F0FB021A701A7842F001021A7070470059004010B5084B1C7814F0010403D10028F9D0002404E02046FFF7E9FC024B1B78204621
|
||||||
:402D8000181A00B2704700BF5C93FF1FA05B00400E4A13881BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF86
|
:402D800010BD00BF01590040034A044B1B881088181A00B2704700BF5C93FF1FA05B00400E4A13881BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107381
|
||||||
:402DC0005B42134493FBF1F000B270475E93FF1F6493FF1F6093FF1F70470000034A00F0F800137803431370704700BF02410040034A00F0F800137803431370704700BF9A
|
:402DC00000B203FB00F2022391FBF3F30028D8BF5B42134493FBF1F000B270475E93FF1F6493FF1F6093FF1F70470000034A00F0F800137803431370704700BF02410040A1
|
||||||
:402E000006410040014B1870704700BF72640040014B1870704700BF7864004073B515461E460B4C04230022019200920A46014618462370FFF7F8FB324629462078FFF7B3
|
:402E0000034A00F0F800137803431370704700BF06410040014B1870704700BF72640040014B1870704700BF7864004073B515461E460B4C04230022019200920A46014603
|
||||||
:402E4000B3FB02212078FFF79DFB207802B070BDFC80FF1F074A0223136002F688321268E0215064044A11706FF440710A441360704700BF80E100E001E400E0014B18708C
|
:402E400018462370FFF7F8FB324629462078FFF7B3FB02212078FFF79DFB207802B070BDFC80FF1F074A0223136002F688321268E0215064044A11706FF440710A4413608D
|
||||||
:402E8000704700BF75640040014B1870704700BF76640040014B1870704700BF79640040FEB5494652465B460EB40746244909688A46244A12682448022100F071F80300AD
|
:402E8000704700BF80E100E001E400E0014B1870704700BF75640040014B1870704700BF76640040014B1870704700BF79640040FEB5494652465B460EB407462449096800
|
||||||
:402EC00020480068C018204900F06AF8143883460121C9430C460125002600F041F8814651460B7823400B705846013000F030F83800F04028400B78234003430B705846AA
|
:402EC0008A46244A12682448022100F071F8030020480068C018204900F06AF8143883460121C9430C460125002600F041F8814651460B7823400B705846013000F030F81C
|
||||||
:402F000000F026F80136072EF2D9002001300138013001200B78234003430B705846043000F016F8484600F01FF800BF00BF00BF0EBC894692469B46FEBD00BFAFF3008039
|
:402F00003800F04028400B78234003430B70584600F026F80136072EF2D9002001300138013001200B78234003430B705846043000F016F8484600F01FF800BF00BF00BF12
|
||||||
:402F4000D480FF1FF880FF1F00C20100000000000230800803D000BF01380046FCD17047EFF3108072B6704780F31088704700BF094A137803F00303012B0AD0022B09D181
|
:402F40000EBC894692469B46FEBD00BFAFF30080D480FF1FF880FF1F00C20100000000000230800803D000BF01380046FCD17047EFF3108072B6704780F31088704700BF77
|
||||||
:402F800013790C2103F07F02044B01FB02339B7A00E013790020704700600040DC92FF1F002902D0B0FBF1F0704708B14FF0FF3000F008B80029F8D00246B0FBF1F000FB0B
|
:402F8000094A137803F00303012B0AD0022B09D113790C2103F07F02044B01FB02339B7A00E013790020704700600040DC92FF1F002902D0B0FBF1F0704708B14FF0FF3097
|
||||||
:402FC00011217047704700BF014B1868704700BF6081FF1F0E4B70B51E460E4C0025E41AA410A54204D056F8253098470135F8E700F0DEFD084B094C1E46E41AA41000251E
|
:402FC00000F008B80029F8D00246B0FBF1F000FB11217047704700BF014B1868704700BF6081FF1F0E4B70B51E460E4C0025E41AA410A54204D056F8253098470135F8E75C
|
||||||
:40300000A54204D056F8253098470135F8E770BDBC3B0000BC3B0000BC3B0000C43B000003460244934202D003F8011BFAE7704730B5141E05469BB0184604DA8B232B6026
|
:4030000000F0DEFD084B094C1E46E41AA4100025A54204D056F8253098470135F8E770BDCC3B0000CC3B0000CC3B0000D43B000003460244934202D003F8011BFAE770475A
|
||||||
:403040004FF0FF301DE04FF40273ADF80C300CBF234604F1FF33029305934FF6FF7300910491ADF80E3002461E9B6946284600F073F8431CBCBF8B232B6014B1009B0022F6
|
:4030400030B5141E05469BB0184604DA8B232B604FF0FF301DE04FF40273ADF80C300CBF234604F1FF33029305934FF6FF7300910491ADF80E3002461E9B6946284600F0D4
|
||||||
:403080001A701BB030BD000007B5009313460A46014603480068FFF7CBFF03B05DF804FB6081FF1F2DE9F0478E6882469E420C46914698463ED88A8912F4906F3AD025685F
|
:4030800073F8431CBCBF8B232B6014B1009B00221A701BB030BD000007B5009313460A46014603480068FFF7CBFF03B05DF804FB6081FF1F2DE9F0478E6882469E420C46D9
|
||||||
:4030C000096902236F1A656905EB450595FBF3F57B1C43449D4238BF1D4653050FD5294600F04AFB064698B13A46216900F0D2FAA38923F4906343F08003A38113E02A462B
|
:4030C000914698463ED88A8912F4906F3AD02568096902236F1A656905EB450595FBF3F57B1C43449D4238BF1D4653050FD5294600F04AFB064698B13A46216900F0D2FA24
|
||||||
:4031000000F098FB064670B92169504600F0E8FA0C23CAF80030A3894FF0FF3043F04003A381BDE8F08726613E44266046466561ED1BA560464528BF4646494632462068B9
|
:40310000A38923F4906343F08003A38113E02A4600F098FB064670B92169504600F0E8FA0C23CAF80030A3894FF0FF3043F04003A381BDE8F08726613E44266046466561E0
|
||||||
:4031400000F0B3FAA36800209B1BA36023681E442660BDE8F08700002DE9F04F9DB003938B8980461C060D4616460DD50B695BB9402100F001FB2860286118B90C23C8F8D4
|
:40314000ED1BA560464528BF464649463246206800F0B3FAA36800209B1BA36023681E442660BDE8F08700002DE9F04F9DB003938B8980461C060D4616460DD50B695BB958
|
||||||
:403180000030CDE040236B610023099320238DF82930DFF89CB130238DF82A3037463C4614F8013B1BB9B7EB060910D003E0252BF9D02746F3E74B46324629464046FFF7EA
|
:40318000402100F001FB2860286118B90C23C8F80030CDE040236B610023099320238DF82930DFF89CB130238DF82A3037463C4614F8013B1BB9B7EB060910D003E0252BD0
|
||||||
:4031C00071FF013000F0A780099B4B4409933B78002B00F0A08000234FF0FF3204930793059206938DF853301A930126052221784E4800F041FA671C049B38B14B4A3C46E7
|
:4031C000F9D02746F3E74B46324629464046FFF771FF013000F0A780099B4B4409933B78002B00F0A08000234FF0FF3204930793059206938DF853301A93012605222178C6
|
||||||
:40320000801A06FA00F018430490EFE7D90644BF20228DF853201A0744BF2B228DF8532022782A2A03D0079A00210A200BE0039A111D12680391002A10DA524243F002006C
|
:403200004E4800F041FA671C049B38B14B4A3C46801A06FA00F018430490EFE7D90644BF20228DF853201A0744BF2B228DF8532022782A2A03D0079A00210A200BE0039AA2
|
||||||
:40324000079204900BE027463B780134303B092B03D800FB02320121F5E701B107923B782E2B1ED17B782A2B0AD1039B02371A1D1B680392002BB8BF4FF0FF33059310E010
|
:40324000111D12680391002A10DA524243F00200079204900BE027463B780134303B092B03D800FB02320121F5E701B107923B782E2B1ED17B782A2B0AD1039B02371A1DAA
|
||||||
:40328000002319460593781C0A2407463A780130303A092A03D804FB01210123F5E703B1059103223978224800F0E6F940B14023CBEB000003FA00F0049B01371843049053
|
:403280001B680392002BB8BF4FF0FF33059310E0002319460593781C0A2407463A780130303A092A03D804FB01210123F5E703B1059103223978224800F0E6F940B1402309
|
||||||
:4032C000397806221B487E1C8DF8281000F0D4F988B1194B33B9039B073323F007030833039314E003AB00932A46144B04A94046AFF3008007E003AB00932A460F4B04A937
|
:4032C000CBEB000003FA00F0049B013718430490397806221B487E1C8DF8281000F0D4F988B1194B33B9039B073323F007030833039314E003AB00932A46144B04A940468F
|
||||||
:40330000404600F093F8B0F1FF3F824603D0099B5344099342E7AB895B0601D4099801E04FF0FF301DB0BDE8F08F00BF8B3B0000913B0000953B000000000000A5300000D1
|
:40330000AFF3008007E003AB00932A460F4B04A9404600F093F8B0F1FF3F824603D0099B5344099342E7AB895B0601D4099801E04FF0FF301DB0BDE8F08F00BF9B3B000071
|
||||||
:403340002DE9F04791461F460A698B6806469342B8BF1346C9F8003091F843200C46DDF8208012B10133C9F800302368990642BFD9F800300233C9F80030256815F00605F2
|
:40334000A13B0000A53B000000000000B53000002DE9F04791461F460A698B6806469342B8BF1346C9F8003091F843200C46DDF8208012B10133C9F800302368990642BF15
|
||||||
:4033800010D104F1190A07E00123524639463046C04701301AD00135E368D9F800209B1A9D42F1DB94F843302268003318BF012392060FD5E118302081F843005A1C94F84E
|
:40338000D9F800300233C9F80030256815F0060510D104F1190A07E00123524639463046C04701301AD00135E368D9F800209B1A9D42F1DB94F843302268003318BF01230D
|
||||||
:4033C00045102244023382F8431003E04FF0FF30BDE8F08704F1430239463046C0470130F4D02268D9F80050E36802F00602042A08BF5D1B2269A3680CBF25EAE57500252C
|
:4033C00092060FD5E118302081F843005A1C94F845102244023382F8431003E04FF0FF30BDE8F08704F1430239463046C0470130F4D02268D9F80050E36802F00602042AD7
|
||||||
:403400009342C4BF9B1AED184FF000091A344D4509D00123224639463046C0470130D5D009F10109F3E70020BDE8F0872DE9F04317460A7E85B06E2A984606460C460C9BE3
|
:4034000008BF5D1B2269A3680CBF25EAE57500259342C4BF9B1AED184FF000091A344D4509D00123224639463046C0470130D5D009F10109F3E70020BDE8F0872DE9F0438A
|
||||||
:4034400001F1430E00F0AE8011D8632A22D009D8002A00F0BB80582A40F0CA8081F84520834955E0642A1ED0692A1CD0C0E0732A00F0B08009D86F2A2ED0702A40F0B880A0
|
:4034400017460A7E85B06E2A984606460C460C9B01F1430E00F0AE8011D8632A22D009D8002A00F0BB80582A40F0CA8081F84520834955E0642A1ED0692A1CD0C0E0732A65
|
||||||
:403480000A6842F020020A603EE0752A24D0782A3AD0ADE01A6801F14205111D1960136884F84230A8E021681A6811F0800F02D0111D196008E011F0400F02F104011960E2
|
:4034800000F0B08009D86F2A2ED0702A40F0B8800A6842F020020A603EE0752A24D0782A3AD0ADE01A6801F14205111D1960136884F84230A8E021681A6811F0800F02D098
|
||||||
:4034C00002D0B2F9003000E01368002B3CDA2D225B4284F8432037E021681A6811F0800F02D0111D196007E011F0400F02F10401196001D0138800E01368227E5C496F2A40
|
:4034C000111D196008E011F0400F02F10401196002D0B2F9003000E01368002B3CDA2D225B4284F8432037E021681A6811F0800F02D0111D196007E011F0400F02F104010E
|
||||||
:4035000014BF0A2208221BE078225A4984F845202268186812F0800F00F104051D6003D1550601D5038800E00368D00744BF42F0200222601BB9226822F020022260102266
|
:40350000196001D0138800E01368227E5C496F2A14BF0A2208221BE078225A4984F845202268186812F0800F00F104051D6003D1550601D5038800E00368D00744BF42F032
|
||||||
:40354000002084F8430001E049490A226568002DA56008DB206820F0040020602BB9002D7DD175460CE0002B79D07546B3FBF2F002FB1033CB5C05F8013D03460028F5D131
|
:40354000200222601BB9226822F0200222601022002084F8430001E049490A226568002DA56008DB206820F0040020602BB9002D7DD175460CE0002B79D07546B3FBF2F020
|
||||||
:40358000082A0BD12368DA0708D5236962689A42DEBF302305F8013C05F1FF35C5EB0E0323612EE008681A6810F0800F496903D0101D1860136808E010F0400F02F1040087
|
:4035800002FB1033CB5C05F8013D03460028F5D1082A0BD12368DA0708D5236962689A42DEBF302305F8013C05F1FF35C5EB0E0323612EE008681A6810F0800F496903D0FC
|
||||||
:4035C0001860136801D0198000E0196000232361754616E01A68111D1960156800216268284600F049F808B1401B6060636804E004F1420584F8422001232361002384F8A9
|
:4035C000101D1860136808E010F0400F02F104001860136801D0198000E0196000232361754616E01A68111D1960156800216268284600F049F808B1401B6060636804E0BC
|
||||||
:403600004330CDF800803B4603AA21463046FFF797FE013002D14FF0FF3026E023692A4639463046C0470130F5D023689B0710D5002504F1190907E001234A4639463046F8
|
:4036000004F1420584F8422001232361002384F84330CDF800803B4603AA21463046FFF797FE013002D14FF0FF3026E023692A4639463046C0470130F5D023689B0710D563
|
||||||
:40364000C0470130E7D00135E368039A9B1A9D42F2DBE068039B9842B8BF184605E00B7804F1420584F842308AE705B0BDE8F0833F3A00009C3B000010B5C9B202449042CF
|
:40364000002504F1190907E001234A4639463046C0470130E7D00135E368039A9B1A9D42F2DBE068039B9842B8BF184605E00B7804F1420584F842308AE705B0BDE8F083AB
|
||||||
:40368000034605D01C7801308C42F8D1184610BD002010BD10B5431E0A44914204D011F8014B03F8014FF8E710BD884210B501EB020301D8421E0BE09842FBD28118D21A41
|
:403680004F3A0000AC3B000010B5C9B202449042034605D01C7801308C42F8D1184610BD002010BD10B5431E0A44914204D011F8014B03F8014FF8E710BD884210B501EBCE
|
||||||
:4036C000D34204D013F8014D01F8014DF8E710BD994204D011F8014B02F8014FF8E710BD38B50546002944D051F8043C0C1F002BB8BFE41800F0D4F81E4A1368114613B912
|
:4036C000020301D8421E0BE09842FBD28118D21AD34204D013F8014D01F8014DF8E710BD994204D011F8014B02F8014FF8E710BD38B50546002944D051F8043C0C1F002BF2
|
||||||
:403700006360146030E0A3420DD92268A018834201BF18685B681218226063600C6023E0A24203D813465A68002AF9D118681918A1420BD12168014458188242196013D1F2
|
:40370000B8BFE41800F0D4F81E4A1368114613B96360146030E0A3420DD92268A018834201BF18685B681218226063600C6023E0A24203D813465A68002AF9D118681918DB
|
||||||
:4037400010685268014419605A600DE002D90C232B6009E021686018824201BF106852680918216062605C602846BDE8384000F098B838BDA892FF1F70B5CD1C25F003051A
|
:40374000A1420BD12168014458188242196013D110685268014419605A600DE002D90C232B6009E021686018824201BF106852680918216062605C602846BDE8384000F0C4
|
||||||
:4037800008350C2D38BF0C25002D064601DBA94202D90C23336046E000F082F8234B1C681A462146A1B10B685B1B0ED40B2B03D90B60CC18CD501EE08C420BBF63684B6896
|
:4037800098B838BDA892FF1F70B5CD1C25F0030508350C2D38BF0C25002D064601DBA94202D90C23336046E000F082F8234B1C681A462146A1B10B685B1B0ED40B2B03D94E
|
||||||
:4037C0001360636018BF0C4615E00C464968E9E7174C23681BB9304600F052F820602946304600F04DF8431C18D0C41C24F00304A0420DD12560304600F053F804F10B005E
|
:4037C0000B60CC18CD501EE08C420BBF63684B681360636018BF0C4615E00C464968E9E7174C23681BB9304600F052F820602946304600F04DF8431C18D0C41C24F00304D4
|
||||||
:40380000231D20F00700C31A0ED05A42E25070BD211A304600F034F80130EBD10C233360304600F03EF8002070BD00BFA892FF1FA492FF1FF8B5074615460E4621B91146D1
|
:40380000A0420DD12560304600F053F804F10B00231D20F00700C31A0ED05A42E25070BD211A304600F034F80130EBD10C233360304600F03EF8002070BD00BFA892FF1F09
|
||||||
:40384000BDE8F840FFF798BF1AB9FFF749FF2846F8BD00F027F885420ED929463846FFF78BFF044650B131462A46FFF713FF31463846FFF735FF01E03046F8BD2046F8BD40
|
:40384000A492FF1FF8B5074615460E4621B91146BDE8F840FFF798BF1AB9FFF749FF2846F8BD00F027F885420ED929463846FFF78BFF044650B131462A46FFF713FF3146E1
|
||||||
:4038800038B5064C0023054608462360FDF7D8FB431C02D1236803B12B6038BD8C93FF1F7047704751F8040C0028BEBF091851F8043CC018043870470000000005020902A2
|
:403880003846FFF735FF01E03046F8BD2046F8BD38B5064C0023054608462360FDF7D8FB431C02D1236803B12B6038BD8C93FF1F7047704751F8040C0028BEBF091851F8F0
|
||||||
:4038C0000B020D020F021102130215027265706C792030782530327800686F6D696E6700626567696E6E696E67207365656B2066726F6D20256420746F2025640066696E08
|
:4038C000043CC0180438704700000000050209020B020D020F021102130215027265706C792030782530327800686F6D696E6700626567696E6E696E67207365656B2066CB
|
||||||
:403900006973686564207365656B00796573006E6F00647269766520303A20257320647269766520313A2025730057616974696E6720666F72205553422E2E2E00555342F3
|
:40390000726F6D20256420746F2025640066696E6973686564207365656B00796573006E6F00647269766520303A20257320647269766520313A2025730057616974696E5F
|
||||||
:4039400020726561647900636F6D6D616E6420307825303278006661696C2025642B25642B2564203D3D2025642C206E6F74202564007061737365643D256400756E646544
|
:403940006720666F72205553422E2E2E0055534220726561647900636F6D6D616E6420307825303278006661696C2025642B25642B2564203D3D2025642C206E6F7420254E
|
||||||
:403980007272756E206166746572202564207061636B65747300636F756E743D256420693D256420643D256400636D645F777269746500703D25642063723D256420637729
|
:4039800064007061737365643D256400756E64657272756E206166746572202564207061636B65747300636F756E743D256420693D256420643D256400636D645F77726997
|
||||||
:4039C0003D256420663D256420773D256420696E6465783D256420756E64657272756E3D256400756E64657272756E21007375636365737300737461727420657261736912
|
:4039C000746500703D25642063723D25642063773D256420663D256420773D256420696E6465783D256420756E64657272756E3D256400756E64657272756E21007375635E
|
||||||
:403A00006E670073746F702065726173696E670069646C650000510040100040510040300000000140001000140140000800400140000A004C0140000200500140200030F9
|
:403A0000636573730073746172742065726173696E670073746F702065726173696E670069646C6500005100401000405100403000000001400010001401400008004001A3
|
||||||
:403A400031323334353637383941424344454600000100000004000000100001000000040000001028000000000104000100000000000000000157494E5553420000303043
|
:403A400040000A004C0140000200500140200030313233343536373839414243444546000001000000040000001000010000000400000010280000000001040001000000C2
|
||||||
:403A800030303100000000000000000012034D005300460054003100300030000100000001000000A83A000001000000773B0000000000000000000001000000C03A000003
|
:403A800000000000000157494E5553420000303030303100000000000000000012034D005300460054003100300030000100000001000000B83A000001000000873B0000A5
|
||||||
:403AC00001000000493B000004000000E23A0000000000000000000000000000E03A0000FF00000001024000FF00000082024000FF00000003034000FF00000084034000F7
|
:403AC000000000000000000001000000D03A000001000000593B000004000000F23A0000000000000000000000000000F03A0000FF00000001024000FF00000082024000C7
|
||||||
:403B0000FF00020304030904160346006C007500780045006E00670069006E0065002A0343006F0077006C00610072006B00200054006500630068006E006F006C006F0003
|
:403B0000FF00000003034000FF00000084034000FF00020304030904160346006C007500780045006E00670069006E0065002A0343006F0077006C00610072006B00200034
|
||||||
:403B400067006900650073000009022E0001010080320904000004FF00000107050102400000070582024000000705030340000A0705840340000A12010002FF0001080921
|
:403B400054006500630068006E006F006C006F0067006900650073000009022E0001010080320904000004FF00000107050102400000070582024000000705030340000AE8
|
||||||
:403B800012006E0100020180014300232D302B2000686C4C00656667454647003031323334353637383961626364656600000000F8B500BFF8BC08BC9E4670475900000094
|
:403B80000705840340000A12010002FF0001080912006E0100020180014300232D302B2000686C4C0065666745464700303132333435363738396162636465660000000069
|
||||||
:403BC000BD100000F8B500BFF8BC08BC9E46704735000000E83B0000C880FF1FA00000002812000000000000000000009093FF1FFF000000675000400C0000000700000097
|
:403BC000F8B500BFF8BC08BC9E46704759000000CD100000F8B500BFF8BC08BC9E46704735000000F83B0000C880FF1FA00000002812000000000000000000009093FF1FA8
|
||||||
:403C0000FFFFFFFF7F8000003F0000000000007D00FA0000400000000090D003FF000000000000000000000000000000000000000000000000000000000000000000000031
|
:403C0000FF000000675000400C00000007000000FFFFFFFF7F8000003F0000000000007D00FA0000400000000090D003FF0000000000000000000000000000000000000028
|
||||||
:403C4000893B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080
|
:403C400000000000000000000000000000000000993B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070
|
||||||
:403C80000081FF1F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
|
:403C8000000000000000000000000000000000000081FF1F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
|
||||||
:403CC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4
|
:403CC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4
|
||||||
:403D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083
|
:403D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083
|
||||||
:403D40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043
|
:403D40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043
|
||||||
@@ -4615,12 +4615,12 @@
|
|||||||
:0200000490105A
|
:0200000490105A
|
||||||
:04000000BC90ACAF55
|
:04000000BC90ACAF55
|
||||||
:0200000490303A
|
:0200000490303A
|
||||||
:02000000F830D6
|
:02000000FEBF41
|
||||||
:0200000490402A
|
:0200000490402A
|
||||||
:4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0
|
:4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0
|
||||||
:400040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080
|
:400040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080
|
||||||
:400080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040
|
:400080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040
|
||||||
:4000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
:4000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
:0200000490501A
|
:0200000490501A
|
||||||
:0C00000000012E16106900002E30089937
|
:0C00000000012E16106900002E300F28A1
|
||||||
:00000001FF
|
:00000001FF
|
||||||
@@ -814,7 +814,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Group key="Component">
|
<Group key="Component">
|
||||||
<Group key="v1">
|
<Group key="v1">
|
||||||
<Data key="cy_boot" value="cy_boot_v5_81" />
|
<Data key="cy_boot" value="cy_boot_v6_10" />
|
||||||
<Data key="Em_EEPROM_Dynamic" value="Em_EEPROM_Dynamic_v2_20" />
|
<Data key="Em_EEPROM_Dynamic" value="Em_EEPROM_Dynamic_v2_20" />
|
||||||
<Data key="LIN_Dynamic" value="LIN_Dynamic_v5_0" />
|
<Data key="LIN_Dynamic" value="LIN_Dynamic_v5_0" />
|
||||||
</Group>
|
</Group>
|
||||||
|
|||||||
@@ -3480,8 +3480,8 @@
|
|||||||
</platforms>
|
</platforms>
|
||||||
<project_current_platform v="c9323d49-d323-40b8-9b59-cc008d68a989" />
|
<project_current_platform v="c9323d49-d323-40b8-9b59-cc008d68a989" />
|
||||||
<last_selected_tab v="Cypress" />
|
<last_selected_tab v="Cypress" />
|
||||||
<WriteAppVersionLastSavedWith v="4.2.0.641" />
|
<WriteAppVersionLastSavedWith v="4.4.0.80" />
|
||||||
<WriteAppMarketingVersionLastSavedWith v=" 4.2" />
|
<WriteAppMarketingVersionLastSavedWith v=" 4.4" />
|
||||||
<project_id v="ff3eb327-f593-4eb3-a00f-72497469e963" />
|
<project_id v="ff3eb327-f593-4eb3-a00f-72497469e963" />
|
||||||
<GenerateDescriptionFiles v="False" />
|
<GenerateDescriptionFiles v="False" />
|
||||||
</CyGuid_49cfd574-032a-4a64-b7be-d4eeeaf25e43>
|
</CyGuid_49cfd574-032a-4a64-b7be-d4eeeaf25e43>
|
||||||
@@ -3493,9 +3493,7 @@
|
|||||||
<library_dep persistent="${CyRoot}\psoc\content\default\CyAnnotationLibrary\CyAnnotationLibrary.cylib\CyAnnotationLibrary.cyprj" />
|
<library_dep persistent="${CyRoot}\psoc\content\default\CyAnnotationLibrary\CyAnnotationLibrary.cylib\CyAnnotationLibrary.cyprj" />
|
||||||
</library_deps>
|
</library_deps>
|
||||||
<CyGuid_b0d670ad-d48f-47cb-9d0b-b1642bab195c type_name="CyDesigner.Common.Base.CyExprTypeMgr" version="1" />
|
<CyGuid_b0d670ad-d48f-47cb-9d0b-b1642bab195c type_name="CyDesigner.Common.Base.CyExprTypeMgr" version="1" />
|
||||||
<ignored_deps>
|
<ignored_deps />
|
||||||
<library_dep persistent="C:\Users\dg\Documents\PSoC Creator\4.1\Downloads ( 4.1).cylib\Downloads ( 4.1).cyprj" />
|
|
||||||
</ignored_deps>
|
|
||||||
</CyGuid_495451fe-d201-4d01-b22d-5d3f5609ac37>
|
</CyGuid_495451fe-d201-4d01-b22d-5d3f5609ac37>
|
||||||
<boot_component v="" />
|
<boot_component v="" />
|
||||||
<current_generation v="150" />
|
<current_generation v="150" />
|
||||||
|
|||||||
Binary file not shown.
@@ -79,6 +79,7 @@ CY_ISR(index_irq_cb)
|
|||||||
* the track. */
|
* the track. */
|
||||||
static bool hardsec_index_irq_primed = false;
|
static bool hardsec_index_irq_primed = false;
|
||||||
static uint32_t hardsec_last_pulse_time = 0;
|
static uint32_t hardsec_last_pulse_time = 0;
|
||||||
|
uint32_t index_pulse_duration = clock - hardsec_last_pulse_time;
|
||||||
|
|
||||||
if (!hardsec_index_threshold)
|
if (!hardsec_index_threshold)
|
||||||
{
|
{
|
||||||
@@ -87,12 +88,18 @@ CY_ISR(index_irq_cb)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
index_irq = hardsec_index_irq_primed;
|
/* It's only an index pulse if the previous pulse is less than
|
||||||
|
* the threshold.
|
||||||
|
*/
|
||||||
|
index_irq = (index_pulse_duration <= hardsec_index_threshold) ?
|
||||||
|
hardsec_index_irq_primed : false;
|
||||||
|
|
||||||
if (index_irq)
|
if (index_irq)
|
||||||
hardsec_index_irq_primed = false;
|
hardsec_index_irq_primed = false;
|
||||||
else
|
else
|
||||||
hardsec_index_irq_primed =
|
hardsec_index_irq_primed =
|
||||||
clock - hardsec_last_pulse_time <= hardsec_index_threshold;
|
index_pulse_duration <= hardsec_index_threshold;
|
||||||
|
|
||||||
hardsec_last_pulse_time = clock;
|
hardsec_last_pulse_time = clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,7 +282,6 @@ static void seek_to(int track)
|
|||||||
CyWdtClear();
|
CyWdtClear();
|
||||||
}
|
}
|
||||||
CyDelay(STEP_SETTLING_TIME);
|
CyDelay(STEP_SETTLING_TIME);
|
||||||
|
|
||||||
TK43_REG_Write(track < 43); /* high if 0..42, low if 43 or up */
|
TK43_REG_Write(track < 43); /* high if 0..42, low if 43 or up */
|
||||||
print("finished seek");
|
print("finished seek");
|
||||||
}
|
}
|
||||||
@@ -305,7 +311,7 @@ static void cmd_measure_speed(struct measurespeed_frame* f)
|
|||||||
while (!index_irq)
|
while (!index_irq)
|
||||||
{
|
{
|
||||||
elapsed = clock - start_clock;
|
elapsed = clock - start_clock;
|
||||||
if (elapsed > 1000)
|
if (elapsed > 1500)
|
||||||
{
|
{
|
||||||
elapsed = 0;
|
elapsed = 0;
|
||||||
break;
|
break;
|
||||||
@@ -416,7 +422,6 @@ static void cmd_read(struct read_frame* f)
|
|||||||
seek_to(current_track);
|
seek_to(current_track);
|
||||||
SIDE_REG_Write(f->side);
|
SIDE_REG_Write(f->side);
|
||||||
STEP_REG_Write(f->side); /* for drives which multiplex SIDE and DIR */
|
STEP_REG_Write(f->side); /* for drives which multiplex SIDE and DIR */
|
||||||
|
|
||||||
/* Do slow setup *before* we go into the real-time bit. */
|
/* Do slow setup *before* we go into the real-time bit. */
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -562,7 +567,6 @@ static void cmd_write(struct write_frame* f)
|
|||||||
seek_to(current_track);
|
seek_to(current_track);
|
||||||
SIDE_REG_Write(f->side);
|
SIDE_REG_Write(f->side);
|
||||||
STEP_REG_Write(f->side); /* for drives which multiplex SIDE and DIR */
|
STEP_REG_Write(f->side); /* for drives which multiplex SIDE and DIR */
|
||||||
|
|
||||||
SEQUENCER_CONTROL_Write(1); /* put the sequencer into reset */
|
SEQUENCER_CONTROL_Write(1); /* put the sequencer into reset */
|
||||||
{
|
{
|
||||||
uint8_t i = CyEnterCriticalSection();
|
uint8_t i = CyEnterCriticalSection();
|
||||||
@@ -627,7 +631,6 @@ static void cmd_write(struct write_frame* f)
|
|||||||
|
|
||||||
/* Wait for the index marker. While this happens, the DMA engine
|
/* Wait for the index marker. While this happens, the DMA engine
|
||||||
* will prime the FIFO. */
|
* will prime the FIFO. */
|
||||||
|
|
||||||
hardsec_index_threshold = f->hardsec_threshold_ms;
|
hardsec_index_threshold = f->hardsec_threshold_ms;
|
||||||
index_irq = false;
|
index_irq = false;
|
||||||
while (!index_irq)
|
while (!index_irq)
|
||||||
@@ -693,7 +696,7 @@ abort:
|
|||||||
static void cmd_erase(struct erase_frame* f)
|
static void cmd_erase(struct erase_frame* f)
|
||||||
{
|
{
|
||||||
SIDE_REG_Write(f->side);
|
SIDE_REG_Write(f->side);
|
||||||
seek_to(current_track);
|
seek_to(current_track);
|
||||||
/* Disk is now spinning. */
|
/* Disk is now spinning. */
|
||||||
|
|
||||||
print("start erasing");
|
print("start erasing");
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ at least, check the CRC so what data's there is probably good.
|
|||||||
| [DVK MX](doc/disk-mx.md) | 🦖 | | Soviet PDP-11 clone |
|
| [DVK MX](doc/disk-mx.md) | 🦖 | | Soviet PDP-11 clone |
|
||||||
| [VDS Eco1](doc/disk-eco1.md) | 🦖 | | 8" mixed format |
|
| [VDS Eco1](doc/disk-eco1.md) | 🦖 | | 8" mixed format |
|
||||||
| [Micropolis](doc/disk-micropolis.md) | 🦄 | | Micropolis 100tpi drives |
|
| [Micropolis](doc/disk-micropolis.md) | 🦄 | | Micropolis 100tpi drives |
|
||||||
|
| [Northstar(doc/disk-northstar.md) | 🦖 | 🦖 | 5.25" hard sectors |
|
||||||
| [TI DS990 FD1000](doc/disk-tids990.md) | 🦄 | 🦄 | 8" |
|
| [TI DS990 FD1000](doc/disk-tids990.md) | 🦄 | 🦄 | 8" |
|
||||||
| [Victor 9000](doc/disk-victor9k.md) | 🦖 | | 8" |
|
| [Victor 9000](doc/disk-victor9k.md) | 🦖 | | 8" |
|
||||||
| [Zilog MCZ](doc/disk-zilogmcz.md) | 🦖 | | 8" _and_ hard sectors |
|
| [Zilog MCZ](doc/disk-zilogmcz.md) | 🦖 | | 8" _and_ hard sectors |
|
||||||
|
|||||||
175
arch/northstar/decoder.cc
Normal file
175
arch/northstar/decoder.cc
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
/* Decoder for North Star 10-sector hard-sectored disks.
|
||||||
|
*
|
||||||
|
* Supports both single- and double-density. For the sector format and
|
||||||
|
* checksum algorithm, see pp. 33 of the North Star Double Density Controller
|
||||||
|
* manual:
|
||||||
|
*
|
||||||
|
* http://bitsavers.org/pdf/northstar/boards/Northstar_MDS-A-D_1978.pdf
|
||||||
|
*
|
||||||
|
* North Star disks do not contain any track/head/sector information
|
||||||
|
* encoded in the sector record. For this reason, we have to be absolutely
|
||||||
|
* sure that the hardSectorId is correct.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "globals.h"
|
||||||
|
#include "fluxmap.h"
|
||||||
|
#include "decoders/fluxmapreader.h"
|
||||||
|
#include "decoders/decoders.h"
|
||||||
|
#include "sector.h"
|
||||||
|
#include "northstar.h"
|
||||||
|
#include "bytes.h"
|
||||||
|
#include "fmt/format.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MFM sectors have 32 bytes of 00's followed by two sync characters,
|
||||||
|
* specified in the North Star MDS manual as 0xFBFB.
|
||||||
|
*
|
||||||
|
* This is true for most disks; however, I found a few disks, including an
|
||||||
|
* original North Star DOS/BASIC v2.2.1 DQ disk) that uses 0xFBnn, where
|
||||||
|
* nn is an incrementing pattern.
|
||||||
|
*
|
||||||
|
* 00 00 00 F B
|
||||||
|
* 0000 0000 0000 0000 0000 0000 0101 0101 0100 0101
|
||||||
|
* A A A A A A 5 5 4 5
|
||||||
|
*/
|
||||||
|
static const FluxPattern MFM_PATTERN(64, 0xAAAAAAAAAAAA5545LL);
|
||||||
|
|
||||||
|
/* FM sectors have 16 bytes of 00's followed by 0xFB.
|
||||||
|
* 00 FB
|
||||||
|
* 0000 0000 1111 1111 1110 1111
|
||||||
|
* A A F F E F
|
||||||
|
*/
|
||||||
|
static const FluxPattern FM_PATTERN(64, 0xAAAAAAAAAAAAFFEFLL);
|
||||||
|
|
||||||
|
const FluxMatchers ANY_SECTOR_PATTERN(
|
||||||
|
{
|
||||||
|
&MFM_PATTERN,
|
||||||
|
&FM_PATTERN,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Search for FM or MFM sector record */
|
||||||
|
AbstractDecoder::RecordType NorthstarDecoder::advanceToNextRecord()
|
||||||
|
{
|
||||||
|
nanoseconds_t now = _fmr->tell().ns();
|
||||||
|
|
||||||
|
/* For all but the first sector, seek to the next sector pulse.
|
||||||
|
* The first sector does not contain the sector pulse in the fluxmap.
|
||||||
|
*/
|
||||||
|
if (now != 0) {
|
||||||
|
_fmr->seekToIndexMark();
|
||||||
|
now = _fmr->tell().ns();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Discard a possible partial sector at the end of the track.
|
||||||
|
* This partial sector could be mistaken for a conflicted sector, if
|
||||||
|
* whatever data read happens to match the checksum of 0, which is
|
||||||
|
* rare, but has been observed on some disks.
|
||||||
|
*/
|
||||||
|
if (now > (_fmr->getDuration() - 21e6)) {
|
||||||
|
_fmr->seekToIndexMark();
|
||||||
|
return(UNKNOWN_RECORD);
|
||||||
|
}
|
||||||
|
|
||||||
|
int msSinceIndex = std::round(now / 1e6);
|
||||||
|
|
||||||
|
const FluxMatcher* matcher = nullptr;
|
||||||
|
|
||||||
|
/* Note that the seekToPattern ignores the sector pulses, so if
|
||||||
|
* a sector is not found for some reason, the seek will advance
|
||||||
|
* past one or more sector pulses. For this reason, calculate
|
||||||
|
* _hardSectorId after the sector header is found.
|
||||||
|
*/
|
||||||
|
_sector->clock = _fmr->seekToPattern(ANY_SECTOR_PATTERN, matcher);
|
||||||
|
|
||||||
|
int sectorFoundTimeRaw = std::round((_fmr->tell().ns()) / 1e6);
|
||||||
|
int sectorFoundTime;
|
||||||
|
|
||||||
|
/* Round time to the nearest 20ms */
|
||||||
|
if ((sectorFoundTimeRaw % 20) < 10) {
|
||||||
|
sectorFoundTime = (sectorFoundTimeRaw / 20) * 20;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sectorFoundTime = ((sectorFoundTimeRaw + 20) / 20) * 20;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the sector ID based on time since the index */
|
||||||
|
_hardSectorId = (sectorFoundTime / 20) % 10;
|
||||||
|
|
||||||
|
// std::cout << fmt::format(
|
||||||
|
// "Sector ID {}: hole at {}ms, sector start at {}ms",
|
||||||
|
// _hardSectorId, msSinceIndex, sectorFoundTimeRaw) << std::endl;
|
||||||
|
|
||||||
|
if (matcher == &MFM_PATTERN) {
|
||||||
|
_sectorType = SECTOR_TYPE_MFM;
|
||||||
|
readRawBits(48);
|
||||||
|
return SECTOR_RECORD;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matcher == &FM_PATTERN) {
|
||||||
|
_sectorType = SECTOR_TYPE_FM;
|
||||||
|
readRawBits(48);
|
||||||
|
return SECTOR_RECORD;
|
||||||
|
}
|
||||||
|
|
||||||
|
return UNKNOWN_RECORD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Checksum is initially 0.
|
||||||
|
* For each data byte, XOR with the current checksum.
|
||||||
|
* Rotate checksum left, carrying bit 7 to bit 0.
|
||||||
|
*/
|
||||||
|
uint8_t northstarChecksum(const Bytes& bytes) {
|
||||||
|
ByteReader br(bytes);
|
||||||
|
uint8_t checksum = 0;
|
||||||
|
|
||||||
|
while (!br.eof()) {
|
||||||
|
checksum ^= br.read_8();
|
||||||
|
checksum = ((checksum << 1) | ((checksum >> 7)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return checksum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NorthstarDecoder::decodeSectorRecord()
|
||||||
|
{
|
||||||
|
unsigned recordSize, payloadSize, headerSize;
|
||||||
|
|
||||||
|
if (_sectorType == SECTOR_TYPE_MFM) {
|
||||||
|
recordSize = NORTHSTAR_ENCODED_SECTOR_SIZE_DD;
|
||||||
|
payloadSize = NORTHSTAR_PAYLOAD_SIZE_DD;
|
||||||
|
headerSize = NORTHSTAR_HEADER_SIZE_DD;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
recordSize = NORTHSTAR_ENCODED_SECTOR_SIZE_SD;
|
||||||
|
payloadSize = NORTHSTAR_PAYLOAD_SIZE_SD;
|
||||||
|
headerSize = NORTHSTAR_HEADER_SIZE_SD;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto rawbits = readRawBits(recordSize * 16);
|
||||||
|
auto bytes = decodeFmMfm(rawbits).slice(0, recordSize);
|
||||||
|
ByteReader br(bytes);
|
||||||
|
uint8_t sync_char;
|
||||||
|
|
||||||
|
_sector->logicalSide = _sector->physicalSide;
|
||||||
|
_sector->logicalSector = _hardSectorId;
|
||||||
|
_sector->logicalTrack = _sector->physicalTrack;
|
||||||
|
|
||||||
|
sync_char = br.read_8(); /* Sync char: 0xFB */
|
||||||
|
if (_sectorType == SECTOR_TYPE_MFM) {
|
||||||
|
sync_char = br.read_8();/* MFM second Sync char, usually 0xFB */
|
||||||
|
}
|
||||||
|
|
||||||
|
_sector->data = br.read(payloadSize);
|
||||||
|
|
||||||
|
uint8_t wantChecksum = br.read_8();
|
||||||
|
uint8_t gotChecksum = northstarChecksum(bytes.slice(headerSize, payloadSize));
|
||||||
|
|
||||||
|
_sector->status = (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::set<unsigned> NorthstarDecoder::requiredSectors(Track& track) const
|
||||||
|
{
|
||||||
|
static std::set<unsigned> sectors = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||||
|
return sectors;
|
||||||
|
}
|
||||||
130
arch/northstar/encoder.cc
Normal file
130
arch/northstar/encoder.cc
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
#include "globals.h"
|
||||||
|
#include "northstar.h"
|
||||||
|
#include "sectorset.h"
|
||||||
|
|
||||||
|
#define GAP_FILL_SIZE_SD 30
|
||||||
|
#define PRE_HEADER_GAP_FILL_SIZE_SD 9
|
||||||
|
#define GAP_FILL_SIZE_DD 62
|
||||||
|
#define PRE_HEADER_GAP_FILL_SIZE_DD 16
|
||||||
|
|
||||||
|
#define GAP1_FILL_BYTE (0x4F)
|
||||||
|
#define GAP2_FILL_BYTE (0x4F)
|
||||||
|
|
||||||
|
#define TOTAL_SECTOR_BYTES ()
|
||||||
|
|
||||||
|
static void write_sector(std::vector<bool>& bits, unsigned& cursor, const Sector* sector)
|
||||||
|
{
|
||||||
|
int preambleSize = 0;
|
||||||
|
int encodedSectorSize = 0;
|
||||||
|
int gapFillSize = 0;
|
||||||
|
int preHeaderGapFillSize = 0;
|
||||||
|
|
||||||
|
bool doubleDensity;
|
||||||
|
|
||||||
|
switch (sector->data.size()) {
|
||||||
|
case NORTHSTAR_PAYLOAD_SIZE_SD:
|
||||||
|
preambleSize = NORTHSTAR_PREAMBLE_SIZE_SD;
|
||||||
|
encodedSectorSize = PRE_HEADER_GAP_FILL_SIZE_SD + NORTHSTAR_ENCODED_SECTOR_SIZE_SD + GAP_FILL_SIZE_SD;
|
||||||
|
gapFillSize = GAP_FILL_SIZE_SD;
|
||||||
|
preHeaderGapFillSize = PRE_HEADER_GAP_FILL_SIZE_SD;
|
||||||
|
doubleDensity = false;
|
||||||
|
break;
|
||||||
|
case NORTHSTAR_PAYLOAD_SIZE_DD:
|
||||||
|
preambleSize = NORTHSTAR_PREAMBLE_SIZE_DD;
|
||||||
|
encodedSectorSize = PRE_HEADER_GAP_FILL_SIZE_DD + NORTHSTAR_ENCODED_SECTOR_SIZE_DD + GAP_FILL_SIZE_DD;
|
||||||
|
gapFillSize = GAP_FILL_SIZE_DD;
|
||||||
|
preHeaderGapFillSize = PRE_HEADER_GAP_FILL_SIZE_DD;
|
||||||
|
doubleDensity = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Error() << "unsupported sector size --- you must pick 256 or 512";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fullSectorSize = preambleSize + encodedSectorSize;
|
||||||
|
auto fullSector = std::make_shared<std::vector<uint8_t>>();
|
||||||
|
fullSector->reserve(fullSectorSize);
|
||||||
|
|
||||||
|
/* sector gap after index pulse */
|
||||||
|
for (int i = 0; i < preHeaderGapFillSize; i++)
|
||||||
|
fullSector->push_back(GAP1_FILL_BYTE);
|
||||||
|
|
||||||
|
/* sector preamble */
|
||||||
|
for (int i = 0; i < preambleSize; i++)
|
||||||
|
fullSector->push_back(0);
|
||||||
|
|
||||||
|
Bytes sectorData;
|
||||||
|
if (sector->data.size() == encodedSectorSize)
|
||||||
|
sectorData = sector->data;
|
||||||
|
else {
|
||||||
|
ByteWriter writer(sectorData);
|
||||||
|
writer.write_8(0xFB); /* sync character */
|
||||||
|
if (doubleDensity == true) {
|
||||||
|
writer.write_8(0xFB); /* Double-density has two sync characters */
|
||||||
|
}
|
||||||
|
writer += sector->data;
|
||||||
|
if (doubleDensity == true) {
|
||||||
|
writer.write_8(northstarChecksum(sectorData.slice(2)));
|
||||||
|
} else {
|
||||||
|
writer.write_8(northstarChecksum(sectorData.slice(1)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (uint8_t b : sectorData)
|
||||||
|
fullSector->push_back(b);
|
||||||
|
|
||||||
|
if (sector->logicalSector != 9) {
|
||||||
|
/* sector postamble */
|
||||||
|
for (int i = 0; i < gapFillSize; i++)
|
||||||
|
fullSector->push_back(GAP2_FILL_BYTE);
|
||||||
|
|
||||||
|
if (fullSector->size() != fullSectorSize)
|
||||||
|
Error() << "sector mismatched length (" << sector->data.size() << ") expected: " << fullSector->size() << " got " << fullSectorSize;
|
||||||
|
} else {
|
||||||
|
/* sector postamble */
|
||||||
|
for (int i = 0; i < gapFillSize; i++)
|
||||||
|
fullSector->push_back(GAP2_FILL_BYTE);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool lastBit = false;
|
||||||
|
|
||||||
|
if (doubleDensity == true) {
|
||||||
|
encodeMfm(bits, cursor, fullSector, lastBit);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
encodeFm(bits, cursor, fullSector);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<Fluxmap> NorthstarEncoder::encode(
|
||||||
|
int physicalTrack, int physicalSide, const SectorSet& allSectors)
|
||||||
|
{
|
||||||
|
int bitsPerRevolution = 100000;
|
||||||
|
double clockRateUs = 4.00;
|
||||||
|
|
||||||
|
if ((physicalTrack < 0) || (physicalTrack >= 35))
|
||||||
|
return std::unique_ptr<Fluxmap>();
|
||||||
|
|
||||||
|
const auto& sector = allSectors.get(physicalTrack, physicalSide, 0);
|
||||||
|
|
||||||
|
if (sector->data.size() == NORTHSTAR_PAYLOAD_SIZE_SD) {
|
||||||
|
bitsPerRevolution /= 2; // FM
|
||||||
|
} else {
|
||||||
|
clockRateUs /= 2.00;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<bool> bits(bitsPerRevolution);
|
||||||
|
unsigned cursor = 0;
|
||||||
|
|
||||||
|
for (int sectorId = 0; sectorId < 10; sectorId++)
|
||||||
|
{
|
||||||
|
const auto& sectorData = allSectors.get(physicalTrack, physicalSide, sectorId);
|
||||||
|
write_sector(bits, cursor, sectorData);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cursor > bits.size())
|
||||||
|
Error() << "track data overrun";
|
||||||
|
|
||||||
|
std::unique_ptr<Fluxmap> fluxmap(new Fluxmap);
|
||||||
|
fluxmap->appendBits(bits, clockRateUs * 1e3);
|
||||||
|
return fluxmap;
|
||||||
|
}
|
||||||
72
arch/northstar/northstar.h
Normal file
72
arch/northstar/northstar.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#ifndef NORTHSTAR_H
|
||||||
|
#define NORTHSTAR_H
|
||||||
|
|
||||||
|
/* Northstar floppies are 10-hard sectored disks with a sector format as follows:
|
||||||
|
*
|
||||||
|
* |----------------------------------|
|
||||||
|
* | SYNC Byte | Payload | Checksum |
|
||||||
|
* |------------+----------+----------|
|
||||||
|
* | 1 (0xFB) | 256 (SD) | 1 |
|
||||||
|
* | 2 (0xFBFB) | 512 (DD) | |
|
||||||
|
* |----------------------------------|
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "decoders/decoders.h"
|
||||||
|
#include "encoders/encoders.h"
|
||||||
|
|
||||||
|
#define NORTHSTAR_PREAMBLE_SIZE_SD (16)
|
||||||
|
#define NORTHSTAR_PREAMBLE_SIZE_DD (32)
|
||||||
|
#define NORTHSTAR_HEADER_SIZE_SD (1)
|
||||||
|
#define NORTHSTAR_HEADER_SIZE_DD (2)
|
||||||
|
#define NORTHSTAR_PAYLOAD_SIZE_SD (256)
|
||||||
|
#define NORTHSTAR_PAYLOAD_SIZE_DD (512)
|
||||||
|
#define NORTHSTAR_CHECKSUM_SIZE (1)
|
||||||
|
#define NORTHSTAR_ENCODED_SECTOR_SIZE_SD (NORTHSTAR_HEADER_SIZE_SD + NORTHSTAR_PAYLOAD_SIZE_SD + NORTHSTAR_CHECKSUM_SIZE)
|
||||||
|
#define NORTHSTAR_ENCODED_SECTOR_SIZE_DD (NORTHSTAR_HEADER_SIZE_DD + NORTHSTAR_PAYLOAD_SIZE_DD + NORTHSTAR_CHECKSUM_SIZE)
|
||||||
|
|
||||||
|
#define SECTOR_TYPE_MFM (0)
|
||||||
|
#define SECTOR_TYPE_FM (1)
|
||||||
|
|
||||||
|
class NorthstarEncoderProto;
|
||||||
|
class NorthstarDecoderProto;
|
||||||
|
|
||||||
|
class NorthstarDecoder : public AbstractDecoder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NorthstarDecoder(const NorthstarDecoderProto& config):
|
||||||
|
_config(config)
|
||||||
|
{
|
||||||
|
_sectorType = SECTOR_TYPE_MFM;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~NorthstarDecoder() {}
|
||||||
|
|
||||||
|
RecordType advanceToNextRecord();
|
||||||
|
void decodeSectorRecord();
|
||||||
|
std::set<unsigned> requiredSectors(Track& track) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const NorthstarDecoderProto& _config;
|
||||||
|
uint8_t _sectorType;
|
||||||
|
uint8_t _hardSectorId;
|
||||||
|
};
|
||||||
|
|
||||||
|
class NorthstarEncoder : public AbstractEncoder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NorthstarEncoder(const NorthstarEncoderProto& config):
|
||||||
|
_config(config)
|
||||||
|
{}
|
||||||
|
|
||||||
|
virtual ~NorthstarEncoder() {}
|
||||||
|
std::unique_ptr<Fluxmap> encode(int physicalTrack, int physicalSide, const SectorSet& allSectors);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const NorthstarEncoderProto& _config;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern FlagGroup northstarEncoderFlags;
|
||||||
|
extern uint8_t northstarChecksum(const Bytes& bytes);
|
||||||
|
|
||||||
|
#endif /* NORTHSTAR */
|
||||||
5
arch/northstar/northstar.proto
Normal file
5
arch/northstar/northstar.proto
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
syntax = "proto2";
|
||||||
|
|
||||||
|
message NorthstarDecoderProto {}
|
||||||
|
message NorthstarEncoderProto {}
|
||||||
|
|
||||||
68
doc/disk-northstar.md
Normal file
68
doc/disk-northstar.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
Disk: Northstar
|
||||||
|
================
|
||||||
|
|
||||||
|
Northstar Floppy disks use 10-sector hard sectored disks with either FM or MFM
|
||||||
|
encoding. They may be single- or double-sided. Each of the 10 sectors contains
|
||||||
|
256 (FM) or 512 (MFM) bytes of data. The disk has 35 cylinders, with tracks 0-
|
||||||
|
34 on side 0, and tracks 35-69 on side 1. Tracks on side 1 are numbered "back-
|
||||||
|
wards" in that track 35 corresponds to cylinder 34, side 1, and track 69
|
||||||
|
corresponds to cylinder 0, side 1.
|
||||||
|
|
||||||
|
The Northstar sector format does not include any head positioning information.
|
||||||
|
As such, reads from Northstar floppies need to by synchronized with the index
|
||||||
|
pulse, in order to properly identify the sector being read. This is handled
|
||||||
|
automatically by FluxEngine.
|
||||||
|
|
||||||
|
Due to the nature of the track ordering on side 1, an .nsi image reader and
|
||||||
|
writer are provided for double-sided disks. The .nsi image writer supports
|
||||||
|
both single- and double-sided disks; however single-sided .nsi images are
|
||||||
|
equivalent to .img images.
|
||||||
|
|
||||||
|
Reading disks
|
||||||
|
-------------
|
||||||
|
|
||||||
|
You must use a 48-TPI (40-track) 300RPM 5.25" floppy drive.
|
||||||
|
|
||||||
|
To read a double-sided North Star floppy, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
fluxengine read northstar
|
||||||
|
```
|
||||||
|
|
||||||
|
To read a single-sided North Star floppy, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
fluxengine read northstar -heads 0
|
||||||
|
```
|
||||||
|
|
||||||
|
You should end up with a `northstar.nsi` with a file size dependent on the floppy
|
||||||
|
disk type:
|
||||||
|
|
||||||
|
| Disk Type | File Size (bytes) |
|
||||||
|
| ----------------------------------- | ------- |
|
||||||
|
| Single-Sided, Single-Density (SSSD) | 89,600 |
|
||||||
|
| Single-Sided, Double-Density (SSDD) | 179,200 |
|
||||||
|
| Double-Sided, Double-Density (DSDD) | 358,400 |
|
||||||
|
|
||||||
|
Writing disks
|
||||||
|
-------------
|
||||||
|
|
||||||
|
You must use a 48-TPI (40-track) 300RPM 5.25" floppy drive and make
|
||||||
|
sure that the drive's spindle speed is adjusted to exactly 300RPM.
|
||||||
|
|
||||||
|
To write a double-sided North Star floppy, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
fluxengine write <format> -i image_to_write.nsi
|
||||||
|
```
|
||||||
|
|
||||||
|
...where `<format>` is `northstar87`, `northstar175` or `northstar350`
|
||||||
|
depending on the format you want to write.
|
||||||
|
|
||||||
|
Useful references
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
- [MICRO-DISK SYSTEM MDS-A-D DOUBLE DENSITY Manual][northstar_mds].
|
||||||
|
Page 33 documents sector format for single- and double-density.
|
||||||
|
|
||||||
|
[northstar_mds]: http://bitsavers.org/pdf/northstar/boards/Northstar_MDS-A-D_1978.pdf
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "arch/macintosh/macintosh.h"
|
#include "arch/macintosh/macintosh.h"
|
||||||
#include "arch/micropolis/micropolis.h"
|
#include "arch/micropolis/micropolis.h"
|
||||||
#include "arch/mx/mx.h"
|
#include "arch/mx/mx.h"
|
||||||
|
#include "arch/northstar/northstar.h"
|
||||||
#include "arch/tids990/tids990.h"
|
#include "arch/tids990/tids990.h"
|
||||||
#include "arch/victor9k/victor9k.h"
|
#include "arch/victor9k/victor9k.h"
|
||||||
#include "arch/zilogmcz/zilogmcz.h"
|
#include "arch/zilogmcz/zilogmcz.h"
|
||||||
@@ -69,6 +70,9 @@ std::unique_ptr<AbstractDecoder> AbstractDecoder::create(const DecoderProto& con
|
|||||||
case DecoderProto::kZilogmcz:
|
case DecoderProto::kZilogmcz:
|
||||||
return std::unique_ptr<AbstractDecoder>(new ZilogMczDecoder(config.zilogmcz()));
|
return std::unique_ptr<AbstractDecoder>(new ZilogMczDecoder(config.zilogmcz()));
|
||||||
|
|
||||||
|
case DecoderProto::kNorthstar:
|
||||||
|
return std::unique_ptr<AbstractDecoder>(new NorthstarDecoder(config.northstar()));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Error() << "no input disk format specified";
|
Error() << "no input disk format specified";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import "arch/ibm/ibm.proto";
|
|||||||
import "arch/macintosh/macintosh.proto";
|
import "arch/macintosh/macintosh.proto";
|
||||||
import "arch/micropolis/micropolis.proto";
|
import "arch/micropolis/micropolis.proto";
|
||||||
import "arch/mx/mx.proto";
|
import "arch/mx/mx.proto";
|
||||||
|
import "arch/northstar/northstar.proto";
|
||||||
import "arch/tids990/tids990.proto";
|
import "arch/tids990/tids990.proto";
|
||||||
import "arch/victor9k/victor9k.proto";
|
import "arch/victor9k/victor9k.proto";
|
||||||
import "arch/zilogmcz/zilogmcz.proto";
|
import "arch/zilogmcz/zilogmcz.proto";
|
||||||
@@ -42,6 +43,7 @@ message DecoderProto {
|
|||||||
Tids990DecoderProto tids990 = 16;
|
Tids990DecoderProto tids990 = 16;
|
||||||
Victor9kDecoderProto victor9k = 17;
|
Victor9kDecoderProto victor9k = 17;
|
||||||
ZilogMczDecoderProto zilogmcz = 18;
|
ZilogMczDecoderProto zilogmcz = 18;
|
||||||
|
NorthstarDecoderProto northstar = 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
optional FluxSinkProto copy_flux_to = 19
|
optional FluxSinkProto copy_flux_to = 19
|
||||||
|
|||||||
@@ -88,6 +88,11 @@ public:
|
|||||||
_pos = pos;
|
_pos = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getDuration(void)
|
||||||
|
{
|
||||||
|
return (_fluxmap.duration());
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t getNextEvent(unsigned& ticks);
|
uint8_t getNextEvent(unsigned& ticks);
|
||||||
unsigned findEvent(uint8_t bits);
|
unsigned findEvent(uint8_t bits);
|
||||||
unsigned readInterval(nanoseconds_t clock); /* with debounce support */
|
unsigned readInterval(nanoseconds_t clock); /* with debounce support */
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "arch/c64/c64.h"
|
#include "arch/c64/c64.h"
|
||||||
#include "arch/ibm/ibm.h"
|
#include "arch/ibm/ibm.h"
|
||||||
#include "arch/macintosh/macintosh.h"
|
#include "arch/macintosh/macintosh.h"
|
||||||
|
#include "arch/northstar/northstar.h"
|
||||||
#include "arch/tids990/tids990.h"
|
#include "arch/tids990/tids990.h"
|
||||||
#include "lib/encoders/encoders.pb.h"
|
#include "lib/encoders/encoders.pb.h"
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
@@ -30,6 +31,9 @@ std::unique_ptr<AbstractEncoder> AbstractEncoder::create(const EncoderProto& con
|
|||||||
case EncoderProto::kC64:
|
case EncoderProto::kC64:
|
||||||
return std::unique_ptr<AbstractEncoder>(new Commodore64Encoder(config.c64()));
|
return std::unique_ptr<AbstractEncoder>(new Commodore64Encoder(config.c64()));
|
||||||
|
|
||||||
|
case EncoderProto::kNorthstar:
|
||||||
|
return std::unique_ptr<AbstractEncoder>(new NorthstarEncoder(config.northstar()));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Error() << "no input disk format specified";
|
Error() << "no input disk format specified";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import "arch/brother/brother.proto";
|
|||||||
import "arch/c64/c64.proto";
|
import "arch/c64/c64.proto";
|
||||||
import "arch/ibm/ibm.proto";
|
import "arch/ibm/ibm.proto";
|
||||||
import "arch/macintosh/macintosh.proto";
|
import "arch/macintosh/macintosh.proto";
|
||||||
|
import "arch/northstar/northstar.proto";
|
||||||
import "arch/tids990/tids990.proto";
|
import "arch/tids990/tids990.proto";
|
||||||
//import "lib/common.proto";
|
//import "lib/common.proto";
|
||||||
|
|
||||||
@@ -16,5 +17,6 @@ message EncoderProto {
|
|||||||
MacintoshEncoderProto macintosh = 6;
|
MacintoshEncoderProto macintosh = 6;
|
||||||
Tids990EncoderProto tids990 = 7;
|
Tids990EncoderProto tids990 = 7;
|
||||||
Commodore64EncoderProto c64 = 8;
|
Commodore64EncoderProto c64 = 8;
|
||||||
|
NorthstarEncoderProto northstar = 9;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ std::unique_ptr<ImageReader> ImageReader::create(const ImageReaderProto& config)
|
|||||||
case ImageReaderProto::kD64:
|
case ImageReaderProto::kD64:
|
||||||
return ImageReader::createD64ImageReader(config);
|
return ImageReader::createD64ImageReader(config);
|
||||||
|
|
||||||
|
case ImageReaderProto::kNsi:
|
||||||
|
return ImageReader::createNsiImageReader(config);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Error() << "bad input file config";
|
Error() << "bad input file config";
|
||||||
return std::unique_ptr<ImageReader>();
|
return std::unique_ptr<ImageReader>();
|
||||||
@@ -46,6 +49,7 @@ void ImageReader::updateConfigForFilename(ImageReaderProto* proto, const std::st
|
|||||||
{".diskcopy", [&]() { proto->mutable_diskcopy(); }},
|
{".diskcopy", [&]() { proto->mutable_diskcopy(); }},
|
||||||
{".img", [&]() { proto->mutable_img(); }},
|
{".img", [&]() { proto->mutable_img(); }},
|
||||||
{".st", [&]() { proto->mutable_img(); }},
|
{".st", [&]() { proto->mutable_img(); }},
|
||||||
|
{".nsi", [&]() { proto->mutable_nsi(); }},
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const auto& it : formats)
|
for (const auto& it : formats)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public:
|
|||||||
static std::unique_ptr<ImageReader> createImgImageReader(const ImageReaderProto& config);
|
static std::unique_ptr<ImageReader> createImgImageReader(const ImageReaderProto& config);
|
||||||
static std::unique_ptr<ImageReader> createJv3ImageReader(const ImageReaderProto& config);
|
static std::unique_ptr<ImageReader> createJv3ImageReader(const ImageReaderProto& config);
|
||||||
static std::unique_ptr<ImageReader> createIMDImageReader(const ImageReaderProto& config);
|
static std::unique_ptr<ImageReader> createIMDImageReader(const ImageReaderProto& config);
|
||||||
|
static std::unique_ptr<ImageReader> createNsiImageReader(const ImageReaderProto& config);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual SectorSet readImage() = 0;
|
virtual SectorSet readImage() = 0;
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ message DiskCopyInputProto {}
|
|||||||
message ImdInputProto {}
|
message ImdInputProto {}
|
||||||
message Jv3InputProto {}
|
message Jv3InputProto {}
|
||||||
message D64InputProto {}
|
message D64InputProto {}
|
||||||
|
message NsiInputProto {}
|
||||||
|
|
||||||
message ImageReaderProto {
|
message ImageReaderProto {
|
||||||
optional string filename = 1 [(help) = "filename of input sector image"];
|
optional string filename = 1 [(help) = "filename of input sector image"];
|
||||||
@@ -31,6 +32,7 @@ message ImageReaderProto {
|
|||||||
ImdInputProto imd = 4;
|
ImdInputProto imd = 4;
|
||||||
Jv3InputProto jv3 = 5;
|
Jv3InputProto jv3 = 5;
|
||||||
D64InputProto d64 = 6;
|
D64InputProto d64 = 6;
|
||||||
|
NsiInputProto nsi = 7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
109
lib/imagereader/nsiimagereader.cc
Normal file
109
lib/imagereader/nsiimagereader.cc
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
/* Image reader for Northstar floppy disk images */
|
||||||
|
|
||||||
|
#include "globals.h"
|
||||||
|
#include "flags.h"
|
||||||
|
#include "sector.h"
|
||||||
|
#include "sectorset.h"
|
||||||
|
#include "imagereader/imagereader.h"
|
||||||
|
#include "fmt/format.h"
|
||||||
|
#include "lib/imagereader/imagereader.pb.h"
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
class NsiImageReader : public ImageReader
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NsiImageReader(const ImageReaderProto& config):
|
||||||
|
ImageReader(config)
|
||||||
|
{}
|
||||||
|
|
||||||
|
SectorSet readImage()
|
||||||
|
{
|
||||||
|
std::ifstream inputFile(_config.filename(), std::ios::in | std::ios::binary);
|
||||||
|
if (!inputFile.is_open())
|
||||||
|
Error() << "cannot open input file";
|
||||||
|
|
||||||
|
const auto begin = inputFile.tellg();
|
||||||
|
inputFile.seekg(0, std::ios::end);
|
||||||
|
const auto end = inputFile.tellg();
|
||||||
|
const auto fsize = (end - begin);
|
||||||
|
|
||||||
|
std::cout << "NSI: Autodetecting geometry based on file size: " << fsize << std::endl;
|
||||||
|
|
||||||
|
int numCylinders = 35;
|
||||||
|
int numSectors = 10;
|
||||||
|
int numHeads = 2;
|
||||||
|
int sectorSize = 512;
|
||||||
|
|
||||||
|
switch (fsize) {
|
||||||
|
case 358400:
|
||||||
|
numHeads = 2;
|
||||||
|
sectorSize = 512;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 179200:
|
||||||
|
numHeads = 1;
|
||||||
|
sectorSize = 512;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 89600:
|
||||||
|
numHeads = 1;
|
||||||
|
sectorSize = 256;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Error() << "NSI: unknown file size";
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t trackSize = numSectors * sectorSize;
|
||||||
|
|
||||||
|
std::cout << fmt::format("reading {} tracks, {} heads, {} sectors, {} bytes per sector, {} kB total",
|
||||||
|
numCylinders, numHeads,
|
||||||
|
numSectors, sectorSize,
|
||||||
|
numCylinders * numHeads * trackSize / 1024)
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
|
SectorSet sectors;
|
||||||
|
unsigned sectorFileOffset;
|
||||||
|
|
||||||
|
for (int head = 0; head < numHeads; head++)
|
||||||
|
{
|
||||||
|
for (int track = 0; track < numCylinders; track++)
|
||||||
|
{
|
||||||
|
for (int sectorId = 0; sectorId < numSectors; sectorId++)
|
||||||
|
{
|
||||||
|
if (head == 0) { /* Head 0 is from track 0-34 */
|
||||||
|
sectorFileOffset = track * trackSize + sectorId * sectorSize;
|
||||||
|
}
|
||||||
|
else { /* Head 1 is from track 70-35 */
|
||||||
|
sectorFileOffset = (trackSize * numCylinders) + /* Skip over side 0 */
|
||||||
|
((numCylinders - track - 1) * trackSize) +
|
||||||
|
(sectorId * sectorSize); /* Sector offset from beginning of track. */
|
||||||
|
}
|
||||||
|
|
||||||
|
inputFile.seekg(sectorFileOffset, std::ios::beg);
|
||||||
|
|
||||||
|
Bytes data(sectorSize);
|
||||||
|
inputFile.read((char*) data.begin(), sectorSize);
|
||||||
|
|
||||||
|
std::unique_ptr<Sector>& sector = sectors.get(track, head, sectorId);
|
||||||
|
sector.reset(new Sector);
|
||||||
|
sector->status = Sector::OK;
|
||||||
|
sector->logicalTrack = sector->physicalTrack = track;
|
||||||
|
sector->logicalSide = sector->physicalSide = head;
|
||||||
|
sector->logicalSector = sectorId;
|
||||||
|
sector->data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sectors;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<ImageReader> ImageReader::createNsiImageReader(
|
||||||
|
const ImageReaderProto& config)
|
||||||
|
{
|
||||||
|
return std::unique_ptr<ImageReader>(new NsiImageReader(config));
|
||||||
|
}
|
||||||
|
|
||||||
@@ -26,6 +26,9 @@ std::unique_ptr<ImageWriter> ImageWriter::create(const ImageWriterProto& config)
|
|||||||
case ImageWriterProto::kDiskcopy:
|
case ImageWriterProto::kDiskcopy:
|
||||||
return ImageWriter::createDiskCopyImageWriter(config);
|
return ImageWriter::createDiskCopyImageWriter(config);
|
||||||
|
|
||||||
|
case ImageWriterProto::kNsi:
|
||||||
|
return ImageWriter::createNsiImageWriter(config);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Error() << "bad output image config";
|
Error() << "bad output image config";
|
||||||
return std::unique_ptr<ImageWriter>();
|
return std::unique_ptr<ImageWriter>();
|
||||||
@@ -43,6 +46,7 @@ void ImageWriter::updateConfigForFilename(ImageWriterProto* proto, const std::st
|
|||||||
{".img", [&]() { proto->mutable_img(); }},
|
{".img", [&]() { proto->mutable_img(); }},
|
||||||
{".ldbs", [&]() { proto->mutable_ldbs(); }},
|
{".ldbs", [&]() { proto->mutable_ldbs(); }},
|
||||||
{".st", [&]() { proto->mutable_img(); }},
|
{".st", [&]() { proto->mutable_img(); }},
|
||||||
|
{".nsi", [&]() { proto->mutable_nsi(); }},
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const auto& it : formats)
|
for (const auto& it : formats)
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ public:
|
|||||||
const ImageWriterProto& config);
|
const ImageWriterProto& config);
|
||||||
static std::unique_ptr<ImageWriter> createDiskCopyImageWriter(
|
static std::unique_ptr<ImageWriter> createDiskCopyImageWriter(
|
||||||
const ImageWriterProto& config);
|
const ImageWriterProto& config);
|
||||||
|
static std::unique_ptr<ImageWriter> createNsiImageWriter(
|
||||||
|
const ImageWriterProto& config);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void printMap(const SectorSet& sectors);
|
void printMap(const SectorSet& sectors);
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import "lib/common.proto";
|
|||||||
message D64OutputProto {}
|
message D64OutputProto {}
|
||||||
message LDBSOutputProto {}
|
message LDBSOutputProto {}
|
||||||
message DiskCopyOutputProto {}
|
message DiskCopyOutputProto {}
|
||||||
|
message NsiOutputProto {}
|
||||||
|
|
||||||
message ImageWriterProto {
|
message ImageWriterProto {
|
||||||
optional string filename = 1 [(help) = "filename of output sector image"];
|
optional string filename = 1 [(help) = "filename of output sector image"];
|
||||||
@@ -14,6 +15,7 @@ message ImageWriterProto {
|
|||||||
D64OutputProto d64 = 3;
|
D64OutputProto d64 = 3;
|
||||||
LDBSOutputProto ldbs = 4;
|
LDBSOutputProto ldbs = 4;
|
||||||
DiskCopyOutputProto diskcopy = 5;
|
DiskCopyOutputProto diskcopy = 5;
|
||||||
|
NsiOutputProto nsi = 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
70
lib/imagewriter/nsiimagewriter.cc
Normal file
70
lib/imagewriter/nsiimagewriter.cc
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#include "globals.h"
|
||||||
|
#include "flags.h"
|
||||||
|
#include "sector.h"
|
||||||
|
#include "sectorset.h"
|
||||||
|
#include "imagewriter/imagewriter.h"
|
||||||
|
#include "fmt/format.h"
|
||||||
|
#include "decoders/decoders.h"
|
||||||
|
#include "arch/northstar/northstar.h"
|
||||||
|
#include "lib/imagewriter/imagewriter.pb.h"
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
class NsiImageWriter : public ImageWriter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NsiImageWriter(const ImageWriterProto& config):
|
||||||
|
ImageWriter(config)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void writeImage(const SectorSet& sectors)
|
||||||
|
{
|
||||||
|
unsigned autoTracks;
|
||||||
|
unsigned autoSides;
|
||||||
|
unsigned autoSectors;
|
||||||
|
unsigned autoBytes;
|
||||||
|
sectors.calculateSize(autoTracks, autoSides, autoSectors, autoBytes);
|
||||||
|
|
||||||
|
size_t trackSize = autoSectors * autoBytes;
|
||||||
|
|
||||||
|
std::cout << fmt::format("Writing {} cylinders, {} heads, {} sectors, {} ({} bytes/sector), {} kB total",
|
||||||
|
autoTracks, autoSides,
|
||||||
|
autoSectors, autoBytes == 256 ? "SD" : "DD", autoBytes,
|
||||||
|
autoTracks * trackSize / 1024)
|
||||||
|
<< std::endl;
|
||||||
|
|
||||||
|
std::ofstream outputFile(_config.filename(), std::ios::out | std::ios::binary);
|
||||||
|
if (!outputFile.is_open())
|
||||||
|
Error() << "cannot open output file";
|
||||||
|
|
||||||
|
unsigned sectorFileOffset;
|
||||||
|
for (int track = 0; track < autoTracks * autoSides; track++)
|
||||||
|
{
|
||||||
|
int head = (track < autoTracks) ? 0 : 1;
|
||||||
|
for (int sectorId = 0; sectorId < autoSectors; sectorId++)
|
||||||
|
{
|
||||||
|
const auto& sector = sectors.get(track % autoTracks, head, sectorId);
|
||||||
|
if (sector)
|
||||||
|
{
|
||||||
|
if (head == 0) { /* Side 0 is from track 0-34 */
|
||||||
|
sectorFileOffset = track * trackSize + sectorId * autoBytes;
|
||||||
|
}
|
||||||
|
else { /* Side 1 is from track 70-35 */
|
||||||
|
sectorFileOffset = (autoBytes * autoSectors * autoTracks) + /* Skip over side 0 */
|
||||||
|
((autoTracks - 1) - (track % autoTracks)) * (autoBytes * autoSectors) +
|
||||||
|
(sectorId * autoBytes); /* Sector offset from beginning of track. */
|
||||||
|
}
|
||||||
|
outputFile.seekp(sectorFileOffset, std::ios::beg);
|
||||||
|
sector->data.slice(0, autoBytes).writeTo(outputFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<ImageWriter> ImageWriter::createNsiImageWriter(
|
||||||
|
const ImageWriterProto& config)
|
||||||
|
{
|
||||||
|
return std::unique_ptr<ImageWriter>(new NsiImageWriter(config));
|
||||||
|
}
|
||||||
33
mkninja.sh
33
mkninja.sh
@@ -272,6 +272,7 @@ buildproto libproto.a \
|
|||||||
arch/macintosh/macintosh.proto \
|
arch/macintosh/macintosh.proto \
|
||||||
arch/micropolis/micropolis.proto \
|
arch/micropolis/micropolis.proto \
|
||||||
arch/mx/mx.proto \
|
arch/mx/mx.proto \
|
||||||
|
arch/northstar/northstar.proto \
|
||||||
arch/tids990/tids990.proto \
|
arch/tids990/tids990.proto \
|
||||||
arch/victor9k/victor9k.proto \
|
arch/victor9k/victor9k.proto \
|
||||||
arch/zilogmcz/zilogmcz.proto \
|
arch/zilogmcz/zilogmcz.proto \
|
||||||
@@ -305,6 +306,8 @@ buildlibrary libbackend.a \
|
|||||||
arch/macintosh/encoder.cc \
|
arch/macintosh/encoder.cc \
|
||||||
arch/micropolis/decoder.cc \
|
arch/micropolis/decoder.cc \
|
||||||
arch/mx/decoder.cc \
|
arch/mx/decoder.cc \
|
||||||
|
arch/northstar/decoder.cc \
|
||||||
|
arch/northstar/encoder.cc \
|
||||||
arch/tids990/decoder.cc \
|
arch/tids990/decoder.cc \
|
||||||
arch/tids990/encoder.cc \
|
arch/tids990/encoder.cc \
|
||||||
arch/victor9k/decoder.cc \
|
arch/victor9k/decoder.cc \
|
||||||
@@ -342,11 +345,13 @@ buildlibrary libbackend.a \
|
|||||||
lib/imagereader/imdimagereader.cc \
|
lib/imagereader/imdimagereader.cc \
|
||||||
lib/imagereader/imgimagereader.cc \
|
lib/imagereader/imgimagereader.cc \
|
||||||
lib/imagereader/jv3imagereader.cc \
|
lib/imagereader/jv3imagereader.cc \
|
||||||
|
lib/imagereader/nsiimagereader.cc \
|
||||||
lib/imagewriter/d64imagewriter.cc \
|
lib/imagewriter/d64imagewriter.cc \
|
||||||
lib/imagewriter/diskcopyimagewriter.cc \
|
lib/imagewriter/diskcopyimagewriter.cc \
|
||||||
lib/imagewriter/imagewriter.cc \
|
lib/imagewriter/imagewriter.cc \
|
||||||
lib/imagewriter/imgimagewriter.cc \
|
lib/imagewriter/imgimagewriter.cc \
|
||||||
lib/imagewriter/ldbsimagewriter.cc \
|
lib/imagewriter/ldbsimagewriter.cc \
|
||||||
|
lib/imagewriter/nsiimagewriter.cc \
|
||||||
lib/ldbs.cc \
|
lib/ldbs.cc \
|
||||||
lib/proto.cc \
|
lib/proto.cc \
|
||||||
lib/reader.cc \
|
lib/reader.cc \
|
||||||
@@ -365,8 +370,8 @@ READABLES="\
|
|||||||
acornadfs \
|
acornadfs \
|
||||||
acorndfs \
|
acorndfs \
|
||||||
aeslanier \
|
aeslanier \
|
||||||
ampro \
|
|
||||||
amiga \
|
amiga \
|
||||||
|
ampro \
|
||||||
apple2 \
|
apple2 \
|
||||||
atarist \
|
atarist \
|
||||||
brother \
|
brother \
|
||||||
@@ -379,6 +384,7 @@ READABLES="\
|
|||||||
macintosh \
|
macintosh \
|
||||||
micropolis \
|
micropolis \
|
||||||
mx \
|
mx \
|
||||||
|
northstar \
|
||||||
tids990 \
|
tids990 \
|
||||||
victor9k \
|
victor9k \
|
||||||
zilogmcz \
|
zilogmcz \
|
||||||
@@ -386,17 +392,6 @@ READABLES="\
|
|||||||
|
|
||||||
WRITABLES="\
|
WRITABLES="\
|
||||||
amiga \
|
amiga \
|
||||||
brother120 \
|
|
||||||
brother240 \
|
|
||||||
ibm1440 \
|
|
||||||
ibm720 \
|
|
||||||
ibm180_525 \
|
|
||||||
ibm360_525 \
|
|
||||||
ibm720_525 \
|
|
||||||
ibm1200_525 \
|
|
||||||
commodore1541 \
|
|
||||||
commodore1581 \
|
|
||||||
hplif770 \
|
|
||||||
atarist360 \
|
atarist360 \
|
||||||
atarist370 \
|
atarist370 \
|
||||||
atarist400 \
|
atarist400 \
|
||||||
@@ -405,7 +400,21 @@ WRITABLES="\
|
|||||||
atarist740 \
|
atarist740 \
|
||||||
atarist800 \
|
atarist800 \
|
||||||
atarist820 \
|
atarist820 \
|
||||||
|
brother120 \
|
||||||
|
brother240 \
|
||||||
|
commodore1541 \
|
||||||
|
commodore1581 \
|
||||||
|
hplif770 \
|
||||||
|
ibm1200_525 \
|
||||||
|
ibm1440 \
|
||||||
|
ibm180_525 \
|
||||||
|
ibm360_525 \
|
||||||
|
ibm720 \
|
||||||
|
ibm720_525 \
|
||||||
macintosh \
|
macintosh \
|
||||||
|
northstar87 \
|
||||||
|
northstar175 \
|
||||||
|
northstar350 \
|
||||||
tids990 \
|
tids990 \
|
||||||
"
|
"
|
||||||
|
|
||||||
|
|||||||
27
src/fe-readnorthstar.cc
Normal file
27
src/fe-readnorthstar.cc
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#include "globals.h"
|
||||||
|
#include "flags.h"
|
||||||
|
#include "reader.h"
|
||||||
|
#include "fluxmap.h"
|
||||||
|
#include "encoders/encoders.h"
|
||||||
|
#include "decoders/decoders.h"
|
||||||
|
#include "sector.h"
|
||||||
|
#include "sectorset.h"
|
||||||
|
#include "record.h"
|
||||||
|
#include "northstar/northstar.h"
|
||||||
|
#include "fmt/format.h"
|
||||||
|
|
||||||
|
static FlagGroup flags { &readerFlags };
|
||||||
|
|
||||||
|
int mainReadNorthstar(int argc, const char* argv[])
|
||||||
|
{
|
||||||
|
setReaderDefaultSource(":t=0-34");
|
||||||
|
setReaderDefaultOutput("northstar.nsi");
|
||||||
|
setReaderHardSectorCount(10);
|
||||||
|
setReaderFluxSourceSynced(true);
|
||||||
|
flags.parseFlags(argc, argv);
|
||||||
|
|
||||||
|
NorthstarDecoder decoder;
|
||||||
|
readDiskCommand(decoder);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
32
src/readables/northstar.textpb
Normal file
32
src/readables/northstar.textpb
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
comment: 'Northstar 87kB/175kB/350kB 5.25" 35-track 10-sector hard sectored'
|
||||||
|
|
||||||
|
input {
|
||||||
|
flux {
|
||||||
|
drive {
|
||||||
|
hard_sector_count: 10
|
||||||
|
sync_with_index: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
image {
|
||||||
|
filename: "northstar.nsi"
|
||||||
|
nsi {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
decoder {
|
||||||
|
northstar {}
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinders {
|
||||||
|
start: 0
|
||||||
|
end: 34
|
||||||
|
}
|
||||||
|
|
||||||
|
heads {
|
||||||
|
start: 0
|
||||||
|
end: 1
|
||||||
|
}
|
||||||
|
|
||||||
32
src/writables/northstar175.textpb
Normal file
32
src/writables/northstar175.textpb
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
comment: 'Northstar 175kB 5.25" 35-track single-sided double-density hard-sectored'
|
||||||
|
|
||||||
|
input {
|
||||||
|
image {
|
||||||
|
filename: "northstar.nsi"
|
||||||
|
nsi {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
flux {
|
||||||
|
drive {
|
||||||
|
hard_sector_count: 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder {
|
||||||
|
northstar {}
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinders {
|
||||||
|
start: 0
|
||||||
|
end: 39
|
||||||
|
}
|
||||||
|
|
||||||
|
heads {
|
||||||
|
start: 0
|
||||||
|
end: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
31
src/writables/northstar350.textpb
Normal file
31
src/writables/northstar350.textpb
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
comment: 'Northstar 350kB 5.25" 35-track double-sided double-density hard-sectored'
|
||||||
|
|
||||||
|
input {
|
||||||
|
image {
|
||||||
|
filename: "northstar.nsi"
|
||||||
|
nsi {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
flux {
|
||||||
|
drive {
|
||||||
|
hard_sector_count: 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder {
|
||||||
|
northstar {}
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinders {
|
||||||
|
start: 0
|
||||||
|
end: 39
|
||||||
|
}
|
||||||
|
|
||||||
|
heads {
|
||||||
|
start: 0
|
||||||
|
end: 1
|
||||||
|
}
|
||||||
|
|
||||||
31
src/writables/northstar87.textpb
Normal file
31
src/writables/northstar87.textpb
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
comment: 'Northstar 87.5kB 5.25" 35-track single-sided single-density hard-sectored'
|
||||||
|
|
||||||
|
input {
|
||||||
|
image {
|
||||||
|
filename: "northstar.nsi"
|
||||||
|
nsi {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
flux {
|
||||||
|
drive {
|
||||||
|
hard_sector_count: 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder {
|
||||||
|
northstar {}
|
||||||
|
}
|
||||||
|
|
||||||
|
cylinders {
|
||||||
|
start: 0
|
||||||
|
end: 39
|
||||||
|
}
|
||||||
|
|
||||||
|
heads {
|
||||||
|
start: 0
|
||||||
|
end: 0
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user