From 15ed4a0d090038e66a0b67d5cb7b5747e88630d9 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sat, 16 Oct 2021 10:48:32 -0700 Subject: [PATCH] Introduce failing test case for sector decoding. --- .../Clock Signal.xcodeproj/project.pbxproj | 4 + .../Clock SignalTests/AmigaBlitterTests.mm | 60 +- .../sector decode.json | 785 ++++++++++++++++++ 3 files changed, 832 insertions(+), 17 deletions(-) create mode 100644 OSBindings/Mac/Clock SignalTests/Kickstart 1.3 boot logo/sector decode.json diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index 0ce7d24e4..cfeee0cee 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -212,6 +212,7 @@ 4B30512D1D989E2200B4FED8 /* Drive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B30512B1D989E2200B4FED8 /* Drive.cpp */; }; 4B3051301D98ACC600B4FED8 /* Plus3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B30512E1D98ACC600B4FED8 /* Plus3.cpp */; }; 4B322E041F5A2E3C004EB04C /* Z80Base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B322E031F5A2E3C004EB04C /* Z80Base.cpp */; }; + 4B32F72D271B3E1A00BFC623 /* sector decode.json in Resources */ = {isa = PBXBuildFile; fileRef = 4B32F72C271B3E1A00BFC623 /* sector decode.json */; }; 4B37EE821D7345A6006A09A4 /* BinaryDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B37EE801D7345A6006A09A4 /* BinaryDump.cpp */; }; 4B38F3481F2EC11D00D9235D /* AmstradCPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B38F3461F2EC11D00D9235D /* AmstradCPC.cpp */; }; 4B3940E71DA83C8300427841 /* AsyncTaskQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B3940E51DA83C8300427841 /* AsyncTaskQueue.cpp */; }; @@ -1234,6 +1235,7 @@ 4B322E021F5A29D5004EB04C /* Z80Storage.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Z80Storage.hpp; sourceTree = ""; }; 4B322E031F5A2E3C004EB04C /* Z80Base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Z80Base.cpp; sourceTree = ""; }; 4B322E051F5A30F5004EB04C /* Z80Implementation.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Z80Implementation.hpp; sourceTree = ""; }; + 4B32F72C271B3E1A00BFC623 /* sector decode.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "sector decode.json"; path = "Kickstart 1.3 boot logo/sector decode.json"; sourceTree = ""; }; 4B37EE801D7345A6006A09A4 /* BinaryDump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BinaryDump.cpp; sourceTree = ""; }; 4B37EE811D7345A6006A09A4 /* BinaryDump.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = BinaryDump.hpp; sourceTree = ""; }; 4B38F3461F2EC11D00D9235D /* AmstradCPC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AmstradCPC.cpp; sourceTree = ""; }; @@ -2370,6 +2372,7 @@ 4B1414631B588A1100E04248 /* Test Binaries */ = { isa = PBXGroup; children = ( + 4B32F72C271B3E1A00BFC623 /* sector decode.json */, 4BD1552F2711E5FD00410C6E /* kickstart13 boot logo.json */, 4B680CE323A555CA00451D43 /* 68000 Comparative Tests */, 4B9252CD1E74D28200B76AF1 /* Atari ROMs */, @@ -4992,6 +4995,7 @@ 4BB299671B587D8400A49093 /* inxn in Resources */, 4BB2998C1B587D8400A49093 /* lsez in Resources */, 4BB299AF1B587D8400A49093 /* rlaz in Resources */, + 4B32F72D271B3E1A00BFC623 /* sector decode.json in Resources */, 4BB2999C1B587D8400A49093 /* nopzx in Resources */, 4BB299A01B587D8400A49093 /* oraay in Resources */, 4B8DF6E32550D91700F3433C /* CPUEOR.sfc in Resources */, diff --git a/OSBindings/Mac/Clock SignalTests/AmigaBlitterTests.mm b/OSBindings/Mac/Clock SignalTests/AmigaBlitterTests.mm index a538a267d..8a447e745 100644 --- a/OSBindings/Mac/Clock SignalTests/AmigaBlitterTests.mm +++ b/OSBindings/Mac/Clock SignalTests/AmigaBlitterTests.mm @@ -17,17 +17,41 @@ namespace Amiga { struct Chipset {}; }; +namespace { + +using WriteVector = std::vector>; + +} + @interface AmigaBlitterTests: XCTestCase @end @implementation AmigaBlitterTests -- (void)testKickstart13BootLogo { +- (BOOL)verifyWrites:(WriteVector &)writes blitter:(Amiga::Blitter &)blitter ram:(uint16_t *)ram { + // Run for however much time the Blitter wants. + while(blitter.get_status()) { + blitter.advance(); + } + + for(const auto &write: writes) { + XCTAssertEqual(ram[write.first >> 1], write.second, @"Didn't find %04x at address %08x; found %04x instead", write.second, write.first, ram[write.first >> 1]); + + // For now, indicate only the first failure. + if(ram[write.first >> 1] != write.second) { + return NO; + } + } + writes.clear(); + return YES; +} + +- (void)testCase:(NSString *)name { uint16_t ram[256 * 1024]{}; Amiga::Chipset nonChipset; Amiga::Blitter blitter(nonChipset, ram, 256 * 1024); - NSURL *const traceURL = [[NSBundle bundleForClass:[self class]] URLForResource:@"kickstart13 boot logo" withExtension:@"json"]; + NSURL *const traceURL = [[NSBundle bundleForClass:[self class]] URLForResource:name withExtension:@"json"]; NSData *const traceData = [NSData dataWithContentsOfURL:traceURL]; NSArray *const trace = [NSJSONSerialization JSONObjectWithData:traceData options:0 error:nil]; @@ -44,7 +68,7 @@ struct Chipset {}; LoggingWrites } state = State::AwaitingWrites; - std::vector> writes; + WriteVector writes; BOOL hasFailed = NO; for(NSArray *const event in trace) { @@ -72,21 +96,10 @@ struct Chipset {}; // Hackaround for testing my magical all-at-once Blitter is here. if(state == State::LoggingWrites) { - // Run for however much time the Blitter wants. - while(blitter.get_status()) { - blitter.advance(); + if(![self verifyWrites:writes blitter:blitter ram:ram]) { + hasFailed = YES; + break; } - - for(const auto &write: writes) { - XCTAssertEqual(ram[write.first >> 1], write.second, @"Didn't find %04x at address %08x; found %04x instead", write.second, write.first, ram[write.first >> 1]); - - // For now, indicate only the first failure. - if(ram[write.first >> 1] != write.second) { - break; -// hasFailed = YES; - } - } - writes.clear(); state = State::AwaitingWrites; } // Hack ends here. @@ -183,6 +196,19 @@ struct Chipset {}; XCTAssert(false); break; } + + // Check the final set of writes. + if(!hasFailed) { + [self verifyWrites:writes blitter:blitter ram:ram]; + } +} + +- (void)testKickstart13BootLogo { + [self testCase:@"kickstart13 boot logo"]; +} + +- (void)testDOSSector { + [self testCase:@"sector decode"]; } @end diff --git a/OSBindings/Mac/Clock SignalTests/Kickstart 1.3 boot logo/sector decode.json b/OSBindings/Mac/Clock SignalTests/Kickstart 1.3 boot logo/sector decode.json new file mode 100644 index 000000000..007782d1f --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/Kickstart 1.3 boot logo/sector decode.json @@ -0,0 +1,785 @@ +[ + ["bltafwm", 65535], + ["bltalwm", 65535], + ["bltbmod", 0], + ["bltamod", 0], + ["bltdmod", 0], + ["bltcdat", 21845], + ["bltapth", 0], + ["bltaptl", 27983], + ["bltbpth", 0], + ["bltbptl", 28495], + ["bltdpth", 0], + ["bltdptl", 24127], + ["bltcon0", 7640], + ["bltcon1", 2], + ["bltsize", 2056], + ["aread", 27982, 43690], + ["bread", 28494, 43690], + ["write", 24126, 0], + ["aread", 27980, 43690], + ["bread", 28492, 43690], + ["write", 24124, 0], + ["aread", 27978, 43690], + ["bread", 28490, 43690], + ["write", 24122, 0], + ["aread", 27976, 43690], + ["bread", 28488, 43690], + ["write", 24120, 0], + ["aread", 27974, 43690], + ["bread", 28486, 43690], + ["write", 24118, 0], + ["aread", 27972, 43690], + ["bread", 28484, 43690], + ["write", 24116, 0], + ["aread", 27970, 43690], + ["bread", 28482, 43690], + ["write", 24114, 0], + ["aread", 27968, 43690], + ["bread", 28480, 43690], + ["write", 24112, 0], + ["aread", 27966, 43690], + ["bread", 28478, 43690], + ["write", 24110, 0], + ["aread", 27964, 43690], + ["bread", 28476, 43690], + ["write", 24108, 0], + ["aread", 27962, 43690], + ["bread", 28474, 43690], + ["write", 24106, 0], + ["aread", 27960, 43690], + ["bread", 28472, 43690], + ["write", 24104, 0], + ["aread", 27958, 43690], + ["bread", 28470, 43690], + ["write", 24102, 0], + ["aread", 27956, 43690], + ["bread", 28468, 43690], + ["write", 24100, 0], + ["aread", 27954, 43690], + ["bread", 28466, 43690], + ["write", 24098, 0], + ["aread", 27952, 43690], + ["bread", 28464, 43690], + ["write", 24096, 0], + ["aread", 27950, 43690], + ["bread", 28462, 43690], + ["write", 24094, 0], + ["aread", 27948, 43690], + ["bread", 28460, 43690], + ["write", 24092, 0], + ["aread", 27946, 43690], + ["bread", 28458, 43690], + ["write", 24090, 0], + ["aread", 27944, 43690], + ["bread", 28456, 43690], + ["write", 24088, 0], + ["aread", 27942, 43690], + ["bread", 28454, 43690], + ["write", 24086, 0], + ["aread", 27940, 43690], + ["bread", 28452, 43690], + ["write", 24084, 0], + ["aread", 27938, 43690], + ["bread", 28450, 43690], + ["write", 24082, 0], + ["aread", 27936, 43690], + ["bread", 28448, 43690], + ["write", 24080, 0], + ["aread", 27934, 43690], + ["bread", 28446, 43690], + ["write", 24078, 0], + ["aread", 27932, 43690], + ["bread", 28444, 43690], + ["write", 24076, 0], + ["aread", 27930, 43690], + ["bread", 28442, 43690], + ["write", 24074, 0], + ["aread", 27928, 43690], + ["bread", 28440, 43690], + ["write", 24072, 0], + ["aread", 27926, 43690], + ["bread", 28438, 43690], + ["write", 24070, 0], + ["aread", 27924, 43690], + ["bread", 28436, 43690], + ["write", 24068, 0], + ["aread", 27922, 43690], + ["bread", 28434, 43690], + ["write", 24066, 0], + ["aread", 27920, 43690], + ["bread", 28432, 43690], + ["write", 24064, 0], + ["aread", 27918, 43690], + ["bread", 28430, 43690], + ["write", 24062, 0], + ["aread", 27916, 43690], + ["bread", 28428, 43690], + ["write", 24060, 0], + ["aread", 27914, 43690], + ["bread", 28426, 43690], + ["write", 24058, 0], + ["aread", 27912, 43690], + ["bread", 28424, 43690], + ["write", 24056, 0], + ["aread", 27910, 43690], + ["bread", 28422, 43690], + ["write", 24054, 0], + ["aread", 27908, 43690], + ["bread", 28420, 43690], + ["write", 24052, 0], + ["aread", 27906, 43690], + ["bread", 28418, 43690], + ["write", 24050, 0], + ["aread", 27904, 43690], + ["bread", 28416, 43690], + ["write", 24048, 0], + ["aread", 27902, 43690], + ["bread", 28414, 43690], + ["write", 24046, 0], + ["aread", 27900, 43690], + ["bread", 28412, 43690], + ["write", 24044, 0], + ["aread", 27898, 43690], + ["bread", 28410, 43690], + ["write", 24042, 0], + ["aread", 27896, 43690], + ["bread", 28408, 43690], + ["write", 24040, 0], + ["aread", 27894, 43690], + ["bread", 28406, 43690], + ["write", 24038, 0], + ["aread", 27892, 43690], + ["bread", 28404, 43690], + ["write", 24036, 0], + ["aread", 27890, 43690], + ["bread", 28402, 43690], + ["write", 24034, 0], + ["aread", 27888, 43690], + ["bread", 28400, 43690], + ["write", 24032, 0], + ["aread", 27886, 43690], + ["bread", 28398, 43690], + ["write", 24030, 0], + ["aread", 27884, 43690], + ["bread", 28396, 43690], + ["write", 24028, 0], + ["aread", 27882, 43690], + ["bread", 28394, 43690], + ["write", 24026, 0], + ["aread", 27880, 43690], + ["bread", 28392, 43690], + ["write", 24024, 0], + ["aread", 27878, 43690], + ["bread", 28390, 43690], + ["write", 24022, 0], + ["aread", 27876, 43690], + ["bread", 28388, 43690], + ["write", 24020, 0], + ["aread", 27874, 43690], + ["bread", 28386, 43690], + ["write", 24018, 0], + ["aread", 27872, 43690], + ["bread", 28384, 43690], + ["write", 24016, 0], + ["aread", 27870, 43690], + ["bread", 28382, 43690], + ["write", 24014, 0], + ["aread", 27868, 43690], + ["bread", 28380, 43690], + ["write", 24012, 0], + ["aread", 27866, 43690], + ["bread", 28378, 43690], + ["write", 24010, 0], + ["aread", 27864, 43690], + ["bread", 28376, 43690], + ["write", 24008, 0], + ["aread", 27862, 43690], + ["bread", 28374, 43690], + ["write", 24006, 0], + ["aread", 27860, 43690], + ["bread", 28372, 43690], + ["write", 24004, 0], + ["aread", 27858, 43690], + ["bread", 28370, 43690], + ["write", 24002, 0], + ["aread", 27856, 43690], + ["bread", 28368, 43690], + ["write", 24000, 0], + ["aread", 27854, 43690], + ["bread", 28366, 43690], + ["write", 23998, 0], + ["aread", 27852, 43690], + ["bread", 28364, 43690], + ["write", 23996, 0], + ["aread", 27850, 43690], + ["bread", 28362, 43690], + ["write", 23994, 0], + ["aread", 27848, 43690], + ["bread", 28360, 43690], + ["write", 23992, 0], + ["aread", 27846, 43690], + ["bread", 28358, 43690], + ["write", 23990, 0], + ["aread", 27844, 43690], + ["bread", 28356, 43690], + ["write", 23988, 0], + ["aread", 27842, 43690], + ["bread", 28354, 43690], + ["write", 23986, 0], + ["aread", 27840, 43690], + ["bread", 28352, 43690], + ["write", 23984, 0], + ["aread", 27838, 43690], + ["bread", 28350, 43690], + ["write", 23982, 0], + ["aread", 27836, 43690], + ["bread", 28348, 43690], + ["write", 23980, 0], + ["aread", 27834, 43690], + ["bread", 28346, 43690], + ["write", 23978, 0], + ["aread", 27832, 43690], + ["bread", 28344, 43690], + ["write", 23976, 0], + ["aread", 27830, 43690], + ["bread", 28342, 43690], + ["write", 23974, 0], + ["aread", 27828, 43690], + ["bread", 28340, 43690], + ["write", 23972, 0], + ["aread", 27826, 43690], + ["bread", 28338, 43690], + ["write", 23970, 0], + ["aread", 27824, 43690], + ["bread", 28336, 43690], + ["write", 23968, 0], + ["aread", 27822, 43690], + ["bread", 28334, 43690], + ["write", 23966, 0], + ["aread", 27820, 43690], + ["bread", 28332, 43690], + ["write", 23964, 0], + ["aread", 27818, 43690], + ["bread", 28330, 43690], + ["write", 23962, 0], + ["aread", 27816, 43690], + ["bread", 28328, 43690], + ["write", 23960, 0], + ["aread", 27814, 43690], + ["bread", 28326, 43690], + ["write", 23958, 0], + ["aread", 27812, 43690], + ["bread", 28324, 43690], + ["write", 23956, 0], + ["aread", 27810, 43690], + ["bread", 28322, 43690], + ["write", 23954, 0], + ["aread", 27808, 43690], + ["bread", 28320, 43690], + ["write", 23952, 0], + ["aread", 27806, 43690], + ["bread", 28318, 43690], + ["write", 23950, 0], + ["aread", 27804, 43690], + ["bread", 28316, 43690], + ["write", 23948, 0], + ["aread", 27802, 43690], + ["bread", 28314, 43690], + ["write", 23946, 0], + ["aread", 27800, 43690], + ["bread", 28312, 43690], + ["write", 23944, 0], + ["aread", 27798, 43690], + ["bread", 28310, 43690], + ["write", 23942, 0], + ["aread", 27796, 43690], + ["bread", 28308, 43690], + ["write", 23940, 0], + ["aread", 27794, 43690], + ["bread", 28306, 43690], + ["write", 23938, 0], + ["aread", 27792, 43690], + ["bread", 28304, 43690], + ["write", 23936, 0], + ["aread", 27790, 43690], + ["bread", 28302, 43690], + ["write", 23934, 0], + ["aread", 27788, 43690], + ["bread", 28300, 43690], + ["write", 23932, 0], + ["aread", 27786, 43690], + ["bread", 28298, 43690], + ["write", 23930, 0], + ["aread", 27784, 43690], + ["bread", 28296, 43690], + ["write", 23928, 0], + ["aread", 27782, 43690], + ["bread", 28294, 43690], + ["write", 23926, 0], + ["aread", 27780, 43690], + ["bread", 28292, 43690], + ["write", 23924, 0], + ["aread", 27778, 43690], + ["bread", 28290, 43690], + ["write", 23922, 0], + ["aread", 27776, 43690], + ["bread", 28288, 43690], + ["write", 23920, 0], + ["aread", 27774, 43690], + ["bread", 28286, 43690], + ["write", 23918, 0], + ["aread", 27772, 43690], + ["bread", 28284, 43690], + ["write", 23916, 0], + ["aread", 27770, 43690], + ["bread", 28282, 43690], + ["write", 23914, 0], + ["aread", 27768, 43690], + ["bread", 28280, 43690], + ["write", 23912, 0], + ["aread", 27766, 43690], + ["bread", 28278, 43690], + ["write", 23910, 0], + ["aread", 27764, 43690], + ["bread", 28276, 43690], + ["write", 23908, 0], + ["aread", 27762, 43690], + ["bread", 28274, 43690], + ["write", 23906, 0], + ["aread", 27760, 43690], + ["bread", 28272, 43690], + ["write", 23904, 0], + ["aread", 27758, 43690], + ["bread", 28270, 43690], + ["write", 23902, 0], + ["aread", 27756, 43690], + ["bread", 28268, 43690], + ["write", 23900, 0], + ["aread", 27754, 43690], + ["bread", 28266, 43690], + ["write", 23898, 0], + ["aread", 27752, 43690], + ["bread", 28264, 43690], + ["write", 23896, 0], + ["aread", 27750, 43690], + ["bread", 28262, 43690], + ["write", 23894, 0], + ["aread", 27748, 43690], + ["bread", 28260, 43690], + ["write", 23892, 0], + ["aread", 27746, 43690], + ["bread", 28258, 43690], + ["write", 23890, 0], + ["aread", 27744, 43690], + ["bread", 28256, 43690], + ["write", 23888, 0], + ["aread", 27742, 43690], + ["bread", 28254, 43690], + ["write", 23886, 0], + ["aread", 27740, 43690], + ["bread", 28252, 43690], + ["write", 23884, 0], + ["aread", 27738, 43690], + ["bread", 28250, 43690], + ["write", 23882, 0], + ["aread", 27736, 43690], + ["bread", 28248, 43690], + ["write", 23880, 0], + ["aread", 27734, 43690], + ["bread", 28246, 43690], + ["write", 23878, 0], + ["aread", 27732, 43690], + ["bread", 28244, 43690], + ["write", 23876, 0], + ["aread", 27730, 43690], + ["bread", 28242, 43690], + ["write", 23874, 0], + ["aread", 27728, 43690], + ["bread", 28240, 43690], + ["write", 23872, 0], + ["aread", 27726, 43690], + ["bread", 28238, 43690], + ["write", 23870, 0], + ["aread", 27724, 43690], + ["bread", 28236, 43690], + ["write", 23868, 0], + ["aread", 27722, 43690], + ["bread", 28234, 43690], + ["write", 23866, 0], + ["aread", 27720, 43690], + ["bread", 28232, 43690], + ["write", 23864, 0], + ["aread", 27718, 43690], + ["bread", 28230, 43690], + ["write", 23862, 0], + ["aread", 27716, 43690], + ["bread", 28228, 43690], + ["write", 23860, 0], + ["aread", 27714, 43690], + ["bread", 28226, 43690], + ["write", 23858, 0], + ["aread", 27712, 43690], + ["bread", 28224, 43690], + ["write", 23856, 0], + ["aread", 27710, 43690], + ["bread", 28222, 43690], + ["write", 23854, 0], + ["aread", 27708, 43690], + ["bread", 28220, 43690], + ["write", 23852, 0], + ["aread", 27706, 43690], + ["bread", 28218, 43690], + ["write", 23850, 0], + ["aread", 27704, 43690], + ["bread", 28216, 43690], + ["write", 23848, 0], + ["aread", 27702, 43690], + ["bread", 28214, 43690], + ["write", 23846, 0], + ["aread", 27700, 43690], + ["bread", 28212, 43690], + ["write", 23844, 0], + ["aread", 27698, 43690], + ["bread", 28210, 43690], + ["write", 23842, 0], + ["aread", 27696, 43690], + ["bread", 28208, 43690], + ["write", 23840, 0], + ["aread", 27694, 43690], + ["bread", 28206, 43690], + ["write", 23838, 0], + ["aread", 27692, 43690], + ["bread", 28204, 43690], + ["write", 23836, 0], + ["aread", 27690, 43690], + ["bread", 28202, 43690], + ["write", 23834, 0], + ["aread", 27688, 43690], + ["bread", 28200, 43690], + ["write", 23832, 0], + ["aread", 27686, 43690], + ["bread", 28198, 43690], + ["write", 23830, 0], + ["aread", 27684, 43690], + ["bread", 28196, 43690], + ["write", 23828, 0], + ["aread", 27682, 43690], + ["bread", 28194, 43690], + ["write", 23826, 0], + ["aread", 27680, 43690], + ["bread", 28192, 43690], + ["write", 23824, 0], + ["aread", 27678, 43690], + ["bread", 28190, 43690], + ["write", 23822, 0], + ["aread", 27676, 43690], + ["bread", 28188, 43690], + ["write", 23820, 0], + ["aread", 27674, 43690], + ["bread", 28186, 43690], + ["write", 23818, 0], + ["aread", 27672, 43690], + ["bread", 28184, 43690], + ["write", 23816, 0], + ["aread", 27670, 43690], + ["bread", 28182, 43690], + ["write", 23814, 0], + ["aread", 27668, 43690], + ["bread", 28180, 43690], + ["write", 23812, 0], + ["aread", 27666, 43690], + ["bread", 28178, 43690], + ["write", 23810, 0], + ["aread", 27664, 43690], + ["bread", 28176, 43690], + ["write", 23808, 0], + ["aread", 27662, 43690], + ["bread", 28174, 43690], + ["write", 23806, 0], + ["aread", 27660, 43690], + ["bread", 28172, 43690], + ["write", 23804, 0], + ["aread", 27658, 43690], + ["bread", 28170, 43690], + ["write", 23802, 0], + ["aread", 27656, 43690], + ["bread", 28168, 43690], + ["write", 23800, 0], + ["aread", 27654, 43690], + ["bread", 28166, 43690], + ["write", 23798, 0], + ["aread", 27652, 43690], + ["bread", 28164, 43690], + ["write", 23796, 0], + ["aread", 27650, 43690], + ["bread", 28162, 43690], + ["write", 23794, 0], + ["aread", 27648, 43690], + ["bread", 28160, 43690], + ["write", 23792, 0], + ["aread", 27646, 43690], + ["bread", 28158, 43690], + ["write", 23790, 0], + ["aread", 27644, 43690], + ["bread", 28156, 43690], + ["write", 23788, 0], + ["aread", 27642, 43690], + ["bread", 28154, 43690], + ["write", 23786, 0], + ["aread", 27640, 43690], + ["bread", 28152, 43690], + ["write", 23784, 0], + ["aread", 27638, 43690], + ["bread", 28150, 43690], + ["write", 23782, 0], + ["aread", 27636, 43690], + ["bread", 28148, 43690], + ["write", 23780, 0], + ["aread", 27634, 43690], + ["bread", 28146, 43690], + ["write", 23778, 0], + ["aread", 27632, 43690], + ["bread", 28144, 43690], + ["write", 23776, 0], + ["aread", 27630, 43690], + ["bread", 28142, 43690], + ["write", 23774, 0], + ["aread", 27628, 43690], + ["bread", 28140, 43690], + ["write", 23772, 0], + ["aread", 27626, 43690], + ["bread", 28138, 43690], + ["write", 23770, 0], + ["aread", 27624, 43690], + ["bread", 28136, 43690], + ["write", 23768, 0], + ["aread", 27622, 43690], + ["bread", 28134, 43690], + ["write", 23766, 0], + ["aread", 27620, 43690], + ["bread", 28132, 43690], + ["write", 23764, 0], + ["aread", 27618, 43690], + ["bread", 28130, 43690], + ["write", 23762, 0], + ["aread", 27616, 43690], + ["bread", 28128, 43690], + ["write", 23760, 0], + ["aread", 27614, 43690], + ["bread", 28126, 43690], + ["write", 23758, 0], + ["aread", 27612, 43690], + ["bread", 28124, 43690], + ["write", 23756, 0], + ["aread", 27610, 43690], + ["bread", 28122, 43690], + ["write", 23754, 0], + ["aread", 27608, 43690], + ["bread", 28120, 43690], + ["write", 23752, 0], + ["aread", 27606, 43690], + ["bread", 28118, 43690], + ["write", 23750, 0], + ["aread", 27604, 43690], + ["bread", 28116, 43690], + ["write", 23748, 0], + ["aread", 27602, 43690], + ["bread", 28114, 43690], + ["write", 23746, 0], + ["aread", 27600, 43690], + ["bread", 28112, 43690], + ["write", 23744, 0], + ["aread", 27598, 43690], + ["bread", 28110, 43690], + ["write", 23742, 0], + ["aread", 27596, 43690], + ["bread", 28108, 43690], + ["write", 23740, 0], + ["aread", 27594, 43690], + ["bread", 28106, 43690], + ["write", 23738, 0], + ["aread", 27592, 43690], + ["bread", 28104, 43690], + ["write", 23736, 0], + ["aread", 27590, 43690], + ["bread", 28102, 43690], + ["write", 23734, 0], + ["aread", 27588, 43690], + ["bread", 28100, 43690], + ["write", 23732, 0], + ["aread", 27586, 43690], + ["bread", 28098, 43690], + ["write", 23730, 0], + ["aread", 27584, 43690], + ["bread", 28096, 43690], + ["write", 23728, 0], + ["aread", 27582, 43690], + ["bread", 28094, 43690], + ["write", 23726, 0], + ["aread", 27580, 43690], + ["bread", 28092, 43690], + ["write", 23724, 0], + ["aread", 27578, 43690], + ["bread", 28090, 43690], + ["write", 23722, 0], + ["aread", 27576, 43690], + ["bread", 28088, 43690], + ["write", 23720, 0], + ["aread", 27574, 43690], + ["bread", 28086, 43690], + ["write", 23718, 0], + ["aread", 27572, 43690], + ["bread", 28084, 43690], + ["write", 23716, 0], + ["aread", 27570, 43690], + ["bread", 28082, 43690], + ["write", 23714, 0], + ["aread", 27568, 43690], + ["bread", 28080, 43690], + ["write", 23712, 0], + ["aread", 27566, 43690], + ["bread", 28078, 43690], + ["write", 23710, 0], + ["aread", 27564, 43690], + ["bread", 28076, 43690], + ["write", 23708, 0], + ["aread", 27562, 43690], + ["bread", 28074, 43690], + ["write", 23706, 0], + ["aread", 27560, 43690], + ["bread", 28072, 43690], + ["write", 23704, 0], + ["aread", 27558, 43690], + ["bread", 28070, 43690], + ["write", 23702, 0], + ["aread", 27556, 43690], + ["bread", 28068, 43690], + ["write", 23700, 0], + ["aread", 27554, 43690], + ["bread", 28066, 43690], + ["write", 23698, 0], + ["aread", 27552, 43690], + ["bread", 28064, 43690], + ["write", 23696, 0], + ["aread", 27550, 43690], + ["bread", 28062, 43690], + ["write", 23694, 0], + ["aread", 27548, 43690], + ["bread", 28060, 43690], + ["write", 23692, 0], + ["aread", 27546, 43690], + ["bread", 28058, 43690], + ["write", 23690, 0], + ["aread", 27544, 43690], + ["bread", 28056, 43690], + ["write", 23688, 0], + ["aread", 27542, 43690], + ["bread", 28054, 43690], + ["write", 23686, 0], + ["aread", 27540, 43690], + ["bread", 28052, 43690], + ["write", 23684, 0], + ["aread", 27538, 43690], + ["bread", 28050, 43690], + ["write", 23682, 0], + ["aread", 27536, 43690], + ["bread", 28048, 43690], + ["write", 23680, 0], + ["aread", 27534, 43690], + ["bread", 28046, 43690], + ["write", 23678, 0], + ["aread", 27532, 43690], + ["bread", 28044, 43690], + ["write", 23676, 0], + ["aread", 27530, 43690], + ["bread", 28042, 43690], + ["write", 23674, 0], + ["aread", 27528, 43690], + ["bread", 28040, 43690], + ["write", 23672, 0], + ["aread", 27526, 43690], + ["bread", 28038, 43690], + ["write", 23670, 0], + ["aread", 27524, 43690], + ["bread", 28036, 43690], + ["write", 23668, 0], + ["aread", 27522, 43690], + ["bread", 28034, 43690], + ["write", 23666, 0], + ["aread", 27520, 5290], + ["bread", 28032, 20778], + ["write", 23664, 30976], + ["aread", 27518, 4753], + ["bread", 28030, 18770], + ["write", 23662, 24946], + ["aread", 27516, 37137], + ["bread", 28028, 19026], + ["write", 23660, 25202], + ["aread", 27514, 5268], + ["bread", 28026, 17481], + ["write", 23658, 27753], + ["aread", 27512, 4373], + ["bread", 28024, 20772], + ["write", 23656, 29486], + ["aread", 27510, 4757], + ["bread", 28022, 17477], + ["write", 23654, 25711], + ["aread", 27508, 4693], + ["bread", 28020, 19026], + ["write", 23652, 24826], + ["aread", 27506, 37461], + ["bread", 28018, 21077], + ["write", 23650, 28927], + ["aread", 27504, 42258], + ["bread", 28016, 17493], + ["write", 23648, 20085], + ["aread", 27502, 4778], + ["bread", 28014, 21162], + ["write", 23646, 28672], + ["aread", 27500, 43689], + ["bread", 28012, 43668], + ["write", 23644, 22], + ["aread", 27498, 37524], + ["bread", 28010, 43594], + ["write", 23642, 8296], + ["aread", 27496, 4778], + ["bread", 28008, 43594], + ["write", 23640, 8256], + ["aread", 27494, 37157], + ["bread", 28006, 17706], + ["write", 23638, 26378], + ["aread", 27492, 42314], + ["bread", 28004, 19114], + ["write", 23636, 19072], + ["aread", 27490, 21842], + ["bread", 28002, 21802], + ["write", 23634, 65440], + ["aread", 27488, 42325], + ["bread", 28000, 17572], + ["write", 23632, 20142], + ["aread", 27486, 10916], + ["bread", 27998, 43666], + ["write", 23630, 24], + ["aread", 27484, 43349], + ["bread", 27996, 18770], + ["write", 23628, 17402], + ["aread", 27482, 43282], + ["bread", 27994, 43346], + ["write", 23626, 880], + ["aread", 27480, 43690], + ["bread", 27992, 10922], + ["write", 23624, 0], + ["aread", 27478, 42276], + ["bread", 27990, 42257], + ["write", 23622, 3865], + ["aread", 27476, 19090], + ["bread", 27988, 19114], + ["write", 23620, 49184], + ["aread", 27474, 10538], + ["bread", 27986, 20778], + ["write", 23618, 21248], + ["aread", 27472, 43685], + ["bread", 27984, 17477], + ["write", 23616, 17487] +] \ No newline at end of file