From 70f67f077301100363b44ae0772c484d4c5b72cd Mon Sep 17 00:00:00 2001 From: Drew Nutter Date: Mon, 19 Aug 2024 13:25:50 -0400 Subject: [PATCH] refactor(blockstore): rename blockstore to ledger and move shred (#229) * only gitignore /ledger, not ledger * refactor(blockstore): rename blockstore to ledger. move shred to ledger this only moves files, and it won't compile yet. next commit will include edits to files to make things work * refactor: fix imports for blockstore/shred/ledger move --- .gitignore | 2 +- src/blockstore/blockstore.zig | 7 -- src/blockstore/test_shreds.zig | 114 ------------------ src/cmd/cmd.zig | 20 +-- src/ledger/blockstore.zig | 7 ++ .../cleanup_service.zig | 26 ++-- src/{blockstore => ledger}/database.zig | 0 src/{blockstore => ledger}/hashmap_db.zig | 12 +- src/{blockstore => ledger}/insert_shred.zig | 28 ++--- src/{blockstore => ledger}/lib.zig | 1 + src/{blockstore => ledger}/meta.zig | 12 +- src/{blockstore => ledger}/reader.zig | 28 ++--- src/{blockstore => ledger}/reed_solomon.zig | 0 .../reed_solomon_table.zig | 0 src/{blockstore => ledger}/rocksdb.zig | 12 +- src/{blockstore => ledger}/schema.zig | 6 +- src/{shred_collector => ledger}/shred.zig | 2 +- src/{blockstore => ledger}/shredder.zig | 20 +-- .../test_shreds.zig | 113 +++++++++++++++++ src/{blockstore => ledger}/tests.zig | 8 +- .../transaction_status.zig | 0 src/{blockstore => ledger}/writer.zig | 10 +- src/lib.zig | 2 +- src/shred_collector/lib.zig | 1 - src/shred_collector/service.zig | 2 +- src/shred_collector/shred_processor.zig | 6 +- src/shred_collector/shred_receiver.zig | 6 +- src/shred_collector/shred_tracker.zig | 2 +- src/shred_collector/shred_verifier.zig | 2 +- 29 files changed, 224 insertions(+), 225 deletions(-) delete mode 100644 src/blockstore/blockstore.zig delete mode 100644 src/blockstore/test_shreds.zig create mode 100644 src/ledger/blockstore.zig rename src/{blockstore => ledger}/cleanup_service.zig (91%) rename src/{blockstore => ledger}/database.zig (100%) rename src/{blockstore => ledger}/hashmap_db.zig (97%) rename src/{blockstore => ledger}/insert_shred.zig (99%) rename src/{blockstore => ledger}/lib.zig (95%) rename src/{blockstore => ledger}/meta.zig (96%) rename src/{blockstore => ledger}/reader.zig (98%) rename src/{blockstore => ledger}/reed_solomon.zig (100%) rename src/{blockstore => ledger}/reed_solomon_table.zig (100%) rename src/{blockstore => ledger}/rocksdb.zig (97%) rename src/{blockstore => ledger}/schema.zig (96%) rename src/{shred_collector => ledger}/shred.zig (99%) rename src/{blockstore => ledger}/shredder.zig (94%) rename src/{shred_collector => ledger}/test_shreds.zig (86%) rename src/{blockstore => ledger}/tests.zig (83%) rename src/{blockstore => ledger}/transaction_status.zig (100%) rename src/{blockstore => ledger}/writer.zig (99%) diff --git a/.gitignore b/.gitignore index 53502aaa7..44e827e9f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ zig-cache/ zig-out/ data/ -ledger/ +/ledger/ index_storage/ kcov-output/ .vscode/ diff --git a/src/blockstore/blockstore.zig b/src/blockstore/blockstore.zig deleted file mode 100644 index 383d7e7af..000000000 --- a/src/blockstore/blockstore.zig +++ /dev/null @@ -1,7 +0,0 @@ -const sig = @import("../lib.zig"); - -pub const BlockstoreDB = sig.blockstore.rocksdb.RocksDB(&sig.blockstore.schema.list); - -test BlockstoreDB { - sig.blockstore.database.assertIsDatabase(BlockstoreDB); -} diff --git a/src/blockstore/test_shreds.zig b/src/blockstore/test_shreds.zig deleted file mode 100644 index 60bdfb7c1..000000000 --- a/src/blockstore/test_shreds.zig +++ /dev/null @@ -1,114 +0,0 @@ -// this uses variables instead of raw data because otherwise ZLS gets unresponsive when the file is open - -pub const mainnet_shreds = @import("../shred_collector/test_shreds.zig").mainnet_shreds; - -pub const handle_chaining_basic_shreds: [96][]const u8 = blk: { - const zero900: [900]u8 = .{0} ** 900; - const zero64: [64]u8 = .{0} ** 64; - const zero659: [659]u8 = .{0} ** 659; - const start1 = .{ 96, 60, 61, 101, 232, 249, 12, 210, 45, 250, 198, 233, 4, 121, 139, 32, 184, 38, 242, 111, 212, 18, 73, 214, 83, 34, 105, 199, 80, 57, 57, 222, 188, 227, 47, 65, 252, 149, 212, 72, 51, 122, 205, 84, 197, 125, 10, 204, 202, 90, 78, 94, 186, 35, 7, 107, 207, 57, 205, 141, 83, 130, 154, 8, 182, 0, 0, 0, 0, 0, 0, 0, 0 }; - const start2 = .{ 150, 189, 66, 0, 12, 225, 76, 165, 158, 198, 42, 111, 203, 82, 33, 231, 164, 3, 44, 163, 255, 172, 221, 30, 73, 252, 11, 21, 229, 24, 255, 155, 249, 106, 203, 38, 162, 215, 3, 6, 107, 145, 93, 171, 191, 49, 85, 196, 0, 141, 167, 59, 57, 207, 89, 38, 107, 22, 127, 17, 58, 219, 226, 12, 182, 1, 0, 0, 0, 0, 0, 0, 0 }; - const start3 = .{ 108, 112, 9, 161, 195, 103, 54, 246, 26, 27, 46, 185, 171, 94, 225, 153, 65, 245, 77, 249, 83, 78, 136, 133, 69, 43, 69, 30, 60, 180, 232, 124, 174, 180, 90, 34, 153, 143, 173, 240, 243, 231, 147, 17, 186, 109, 58, 8, 18, 67, 76, 159, 253, 110, 82, 146, 237, 202, 172, 191, 52, 226, 137, 1, 182, 2, 0, 0, 0, 0, 0, 0, 0 }; - const mid1 = .{ 72, 185, 119, 196, 86, 77, 54, 2, 229, 193, 189, 195, 77, 115, 163, 89, 145, 34, 129, 127, 62, 157, 215, 70, 18, 73, 71, 176, 149, 1, 179, 109 }; - const mid2 = .{ 51, 197, 31, 180, 168, 125, 120, 130, 143, 192, 1, 248, 211, 182, 21, 63, 225, 118, 26, 122, 209, 81, 230, 50, 177, 205, 217, 89, 107, 41, 145, 156 }; - const mid3 = .{ 104, 232, 42, 254, 46, 48, 104, 89, 101, 211, 253, 161, 65, 155, 204, 89, 126, 187, 180, 191, 60, 59, 88, 119, 106, 20, 194, 80, 11, 200, 76, 0 }; - - break :blk [96][]const u8{ - &(start1 ++ .{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 208, 250, 189, 37, 31, 203, 190, 43, 147, 180, 185, 39, 178, 106, 210, 161, 169, 144, 119, 21, 46, 69, 222, 209, 230, 120, 175, 164, 93, 190, 197, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 126, 89, 153, 133, 132, 248, 52, 84, 164, 9, 92, 144, 0, 107, 39, 124, 49, 236, 123, 68, 127, 238, 68, 248, 139, 245, 127, 16, 237, 245, 171, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 121, 7, 202, 175, 23, 98, 186, 89, 71, 113, 194, 7, 222, 104, 213, 10, 147, 31, 4, 41, 164, 190, 28, 118, 50, 209, 2, 89, 209, 66, 124, 137, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 76, 136, 235, 123, 127, 220, 132, 138, 120, 220, 88, 247, 126, 130, 64, 2, 134, 202, 224, 90, 210, 75, 78, 35, 170, 230, 20, 177, 146, 158, 149, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 126, 2, 196, 129, 129, 167, 143, 231, 63, 21, 212, 77, 167, 195, 44, 90, 131, 73, 184, 67, 20, 149, 122, 239, 154, 200, 229, 94, 163, 138, 140, 113 } ++ zero659 ++ .{ 72, 185, 119, 196, 86, 77, 54, 2, 229, 193, 189, 195, 77, 115, 163, 89, 145, 34, 129, 127, 62, 157, 215, 70, 18, 73, 71, 176, 149, 1, 179, 109, 114, 207, 189, 252, 225, 17, 13, 47, 211, 184, 255, 232, 182, 146, 217, 58, 37, 193, 111, 13, 147, 149, 68, 187, 199, 149, 131, 92, 169, 117, 174, 112, 191, 242, 93, 141, 238, 132, 251, 28, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 80, 95, 188, 191, 86, 7, 225, 170, 117, 221, 168, 221, 43, 199, 202, 100, 33, 142, 178, 53, 147, 149, 68, 187, 199, 149, 131, 92, 169, 117, 174, 112, 191, 242, 93, 141, 238, 132, 251, 28, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 173, 199, 158, 49, 133, 16, 182, 206, 115, 33, 7, 199, 193, 53, 132, 22, 127, 80, 192, 252, 36, 202, 93, 120, 204, 116, 52, 151, 221, 91, 118, 175, 121, 69, 161, 53, 205, 109, 120, 92, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 74, 162, 32, 97, 90, 252, 56, 67, 252, 66, 241, 151, 199, 22, 11, 242, 191, 71, 54, 25, 36, 202, 93, 120, 204, 116, 52, 151, 221, 91, 118, 175, 121, 69, 161, 53, 205, 109, 120, 92, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 119, 228, 106, 83, 228, 208, 16, 7, 176, 210, 61, 42, 44, 189, 48, 0, 130, 247, 41, 211, 15, 213, 147, 56, 246, 246, 28, 66, 184, 121, 221, 34, 60, 14, 107, 143, 106, 2, 119, 31, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 165, 202, 138, 252, 157, 71, 155, 206, 189, 110, 233, 2, 19, 4, 40, 46, 91, 55, 146, 120, 15, 213, 147, 56, 246, 246, 28, 66, 184, 121, 221, 34, 60, 14, 107, 143, 106, 2, 119, 31, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 248, 97, 55, 145, 125, 100, 7, 116, 22, 9, 191, 94, 140, 201, 75, 247, 175, 116, 51, 16, 137, 47, 183, 197, 104, 252, 133, 244, 242, 163, 214, 117, 53, 242, 193, 60, 20, 156, 123, 208, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 240, 162, 42, 184, 46, 193, 77, 38, 61, 222, 38, 153, 33, 15, 29, 117, 95, 9, 183, 213, 137, 47, 183, 197, 104, 252, 133, 244, 242, 163, 214, 117, 53, 242, 193, 60, 20, 156, 123, 208, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 227, 225, 76, 135, 129, 84, 173, 114, 131, 200, 246, 93, 206, 80, 218, 104, 47, 236, 94, 39, 18, 117, 98, 108, 130, 209, 246, 253, 169, 91, 212, 12, 177, 2, 131, 146, 178, 98, 189, 82, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 203, 213, 128, 230, 241, 178, 97, 25, 200, 245, 178, 198, 159, 169, 72, 250, 6, 94, 202, 229, 18, 117, 98, 108, 130, 209, 246, 253, 169, 91, 212, 12, 177, 2, 131, 146, 178, 98, 189, 82, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 249, 226, 89, 165, 206, 91, 75, 147, 35, 227, 209, 173, 230, 42, 147, 156, 252, 193, 162, 67, 191, 144, 115, 88, 120, 63, 36, 243, 116, 163, 190, 49, 98, 97, 71, 98, 115, 185, 93, 241, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 230, 8, 47, 141, 160, 160, 239, 247, 42, 78, 167, 104, 80, 87, 194, 99, 116, 203, 227, 58, 191, 144, 115, 88, 120, 63, 36, 243, 116, 163, 190, 49, 98, 97, 71, 98, 115, 185, 93, 241, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 170, 55, 23, 195, 219, 225, 136, 222, 165, 227, 217, 89, 24, 1, 224, 75, 213, 41, 232, 33, 2, 66, 131, 61, 81, 114, 84, 238, 244, 78, 249, 44, 240, 176, 203, 122, 169, 56, 33, 234, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 184, 222, 6, 209, 235, 69, 70, 14, 164, 0, 139, 184, 22, 153, 155, 149, 217, 207, 208, 44, 2, 66, 131, 61, 81, 114, 84, 238, 244, 78, 249, 44, 240, 176, 203, 122, 169, 56, 33, 234, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 209, 162, 158, 34, 228, 190, 239, 36, 152, 116, 213, 83, 11, 252, 235, 9, 233, 152, 137, 115, 200, 93, 13, 129, 218, 66, 152, 61, 241, 195, 253, 212, 147, 149, 158, 205, 193, 18, 145, 43, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 85, 75, 248, 78, 166, 176, 135, 209, 210, 7, 74, 16, 45, 75, 52, 210, 76, 48, 250, 91, 200, 93, 13, 129, 218, 66, 152, 61, 241, 195, 253, 212, 147, 149, 158, 205, 193, 18, 145, 43, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 182, 228, 42, 170, 10, 189, 81, 218, 153, 135, 196, 226, 202, 31, 55, 162, 82, 176, 200, 24, 70, 45, 180, 60, 168, 83, 67, 14, 18, 86, 152, 201, 59, 183, 208, 111, 120, 219, 166, 11, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 119, 232, 93, 19, 13, 101, 104, 17, 117, 67, 122, 31, 45, 89, 117, 167, 156, 255, 110, 209, 70, 45, 180, 60, 168, 83, 67, 14, 18, 86, 152, 201, 59, 183, 208, 111, 120, 219, 166, 11, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 134, 110, 28, 199, 41, 202, 123, 208, 2, 204, 65, 163, 209, 231, 164, 164, 85, 57, 26, 192, 149, 13, 250, 189, 27, 21, 108, 51, 199, 107, 151, 119, 183, 105, 78, 21, 194, 104, 163, 133, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 176, 32, 242, 64, 69, 149, 166, 185, 180, 249, 149, 0, 21, 3, 236, 89, 170, 43, 129, 131, 149, 13, 250, 189, 27, 21, 108, 51, 199, 107, 151, 119, 183, 105, 78, 21, 194, 104, 163, 133, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 38, 166, 214, 186, 88, 162, 220, 76, 59, 222, 36, 210, 223, 237, 103, 207, 125, 65, 169, 4, 109, 173, 41, 199, 96, 178, 23, 24, 21, 29, 204, 34, 168, 127, 164, 110, 122, 90, 16, 200, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 48, 85, 179, 181, 159, 245, 137, 230, 196, 65, 41, 255, 46, 223, 60, 175, 198, 105, 146, 130, 109, 173, 41, 199, 96, 178, 23, 24, 21, 29, 204, 34, 168, 127, 164, 110, 122, 90, 16, 200, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 244, 227, 10, 114, 5, 112, 253, 76, 109, 115, 60, 218, 52, 152, 81, 187, 92, 58, 5, 195, 207, 51, 223, 108, 42, 79, 241, 247, 199, 251, 37, 102, 225, 175, 184, 249, 151, 113, 99, 66, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 194, 58, 126, 4, 218, 94, 207, 45, 223, 159, 188, 255, 40, 101, 157, 221, 3, 86, 184, 168, 207, 51, 223, 108, 42, 79, 241, 247, 199, 251, 37, 102, 225, 175, 184, 249, 151, 113, 99, 66, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 20, 162, 167, 204, 72, 228, 219, 124, 166, 154, 68, 45, 207, 134, 231, 241, 140, 66, 221, 225, 140, 67, 239, 85, 255, 242, 20, 207, 117, 28, 177, 90, 12, 88, 55, 55, 235, 125, 174, 126, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 100, 137, 169, 97, 67, 156, 70, 242, 183, 124, 118, 220, 218, 173, 123, 86, 1, 203, 172, 106, 140, 67, 239, 85, 255, 242, 20, 207, 117, 28, 177, 90, 12, 88, 55, 55, 235, 125, 174, 126, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 224, 42, 250, 247, 242, 252, 161, 2, 93, 165, 128, 248, 116, 29, 178, 227, 187, 201, 253, 68, 59, 91, 12, 44, 103, 103, 241, 22, 115, 221, 241, 163, 212, 56, 17, 247, 197, 175, 74, 80, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 175, 138, 52, 210, 163, 121, 238, 197, 165, 6, 39, 117, 197, 253, 174, 160, 252, 14, 238, 140, 59, 91, 12, 44, 103, 103, 241, 22, 115, 221, 241, 163, 212, 56, 17, 247, 197, 175, 74, 80, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 19, 96, 40, 65, 234, 139, 117, 221, 166, 133, 35, 242, 215, 121, 2, 60, 124, 79, 93, 16, 110, 177, 20, 202, 242, 246, 47, 134, 232, 70, 67, 137, 168, 46, 132, 56, 232, 67, 45, 68, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 40, 161, 106, 91, 233, 224, 164, 214, 62, 254, 173, 43, 51, 176, 1, 31, 0, 169, 60, 243, 110, 177, 20, 202, 242, 246, 47, 134, 232, 70, 67, 137, 168, 46, 132, 56, 232, 67, 45, 68, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 175, 9, 215, 61, 71, 57, 107, 186, 14, 119, 44, 8, 83, 158, 25, 219, 161, 237, 108, 154, 169, 63, 146, 72, 201, 85, 61, 211, 39, 233, 51, 113, 50, 136, 125, 34, 52, 30, 113, 188, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start1 ++ .{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 88 } ++ zero900 ++ mid1 ++ .{ 78, 75, 154, 245, 48, 233, 28, 8, 14, 69, 73, 81, 79, 98, 21, 35, 124, 255, 32, 227, 169, 63, 146, 72, 201, 85, 61, 211, 39, 233, 51, 113, 50, 136, 125, 34, 52, 30, 113, 188, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), - &(start2 ++ .{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 80, 1, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 87, 120, 249, 133, 219, 117, 76, 102, 40, 105, 31, 86, 250, 218, 229, 12, 101, 253, 219, 232, 235, 46, 147, 3, 150, 51, 254, 250, 5, 212, 94, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 124, 246, 166, 218, 149, 184, 75, 78, 160, 21, 236, 64, 208, 26, 130, 253, 69, 232, 118, 125, 133, 101, 41, 137, 216, 124, 236, 63, 34, 232, 7, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 17, 81, 90, 66, 186, 19, 231, 219, 197, 23, 171, 218, 195, 112, 26, 137, 153, 209, 195, 67, 86, 131, 72, 161, 97, 29, 9, 42, 154, 113, 97, 232, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 143, 132, 91, 23, 111, 120, 122, 179, 130, 117, 111, 160, 223, 202, 230, 28, 236, 195, 121, 118, 84, 52, 163, 143, 71, 97, 118, 71, 113, 91, 224, 241, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 215, 17, 199, 104, 249, 48, 230, 187, 78, 90, 229, 255, 215, 21, 150, 247, 131, 147, 170, 110, 77, 49, 213, 229, 0, 149, 105, 160, 15, 145, 133, 112 } ++ zero659 ++ .{ 51, 197, 31, 180, 168, 125, 120, 130, 143, 192, 1, 248, 211, 182, 21, 63, 225, 118, 26, 122, 209, 81, 230, 50, 177, 205, 217, 89, 107, 41, 145, 156, 55, 203, 37, 188, 136, 243, 117, 240, 218, 152, 250, 145, 106, 161, 42, 29, 117, 199, 52, 237, 50, 124, 109, 32, 201, 167, 156, 6, 196, 26, 33, 112, 199, 8, 3, 145, 235, 225, 39, 92, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 218, 104, 230, 230, 216, 133, 118, 160, 10, 139, 171, 23, 195, 119, 68, 118, 169, 176, 45, 101, 50, 124, 109, 32, 201, 167, 156, 6, 196, 26, 33, 112, 199, 8, 3, 145, 235, 225, 39, 92, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 116, 150, 79, 36, 21, 42, 50, 94, 92, 10, 233, 177, 152, 13, 13, 114, 5, 244, 162, 145, 172, 24, 230, 130, 137, 219, 236, 192, 102, 117, 90, 16, 65, 17, 181, 38, 150, 150, 86, 0, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 110, 57, 38, 148, 61, 139, 116, 229, 18, 178, 68, 136, 18, 54, 128, 135, 108, 43, 68, 188, 172, 24, 230, 130, 137, 219, 236, 192, 102, 117, 90, 16, 65, 17, 181, 38, 150, 150, 86, 0, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 129, 162, 208, 0, 248, 245, 33, 98, 196, 159, 88, 97, 37, 216, 64, 20, 141, 176, 15, 168, 110, 182, 114, 95, 118, 80, 188, 40, 243, 23, 178, 34, 232, 13, 199, 28, 1, 223, 89, 155, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 239, 73, 79, 55, 122, 153, 216, 210, 186, 101, 174, 183, 205, 189, 0, 78, 196, 141, 102, 191, 110, 182, 114, 95, 118, 80, 188, 40, 243, 23, 178, 34, 232, 13, 199, 28, 1, 223, 89, 155, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 251, 15, 182, 160, 190, 125, 68, 109, 208, 221, 162, 49, 212, 16, 238, 136, 215, 231, 116, 70, 24, 145, 60, 131, 77, 139, 67, 40, 32, 225, 81, 102, 63, 227, 173, 62, 174, 119, 21, 223, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 245, 77, 231, 33, 205, 60, 207, 164, 47, 130, 253, 120, 154, 109, 142, 185, 122, 63, 59, 194, 24, 145, 60, 131, 77, 139, 67, 40, 32, 225, 81, 102, 63, 227, 173, 62, 174, 119, 21, 223, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 209, 103, 149, 18, 65, 107, 245, 118, 141, 90, 236, 242, 138, 21, 210, 242, 93, 39, 119, 225, 247, 249, 108, 41, 166, 178, 10, 183, 101, 228, 232, 170, 153, 229, 120, 108, 218, 151, 78, 242, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 130, 52, 229, 182, 28, 146, 239, 7, 45, 182, 123, 165, 152, 161, 252, 37, 168, 59, 149, 18, 247, 249, 108, 41, 166, 178, 10, 183, 101, 228, 232, 170, 153, 229, 120, 108, 218, 151, 78, 242, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 177, 89, 155, 220, 209, 101, 30, 193, 70, 165, 21, 179, 232, 154, 9, 155, 86, 4, 169, 137, 53, 255, 28, 150, 14, 122, 255, 105, 187, 121, 62, 97, 133, 60, 192, 251, 22, 67, 81, 70, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 227, 31, 196, 122, 215, 154, 175, 165, 209, 60, 118, 216, 104, 208, 240, 198, 137, 243, 41, 107, 53, 255, 28, 150, 14, 122, 255, 105, 187, 121, 62, 97, 133, 60, 192, 251, 22, 67, 81, 70, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 179, 139, 157, 48, 164, 60, 92, 200, 17, 47, 187, 38, 212, 78, 82, 183, 34, 216, 162, 137, 14, 44, 245, 179, 222, 143, 4, 218, 251, 55, 212, 249, 210, 195, 18, 90, 140, 141, 63, 101, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 66, 20, 206, 102, 119, 74, 207, 3, 192, 82, 48, 45, 92, 33, 34, 131, 84, 184, 177, 67, 14, 44, 245, 179, 222, 143, 4, 218, 251, 55, 212, 249, 210, 195, 18, 90, 140, 141, 63, 101, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 164, 74, 100, 60, 34, 140, 229, 196, 250, 69, 160, 101, 151, 234, 7, 143, 65, 184, 24, 45, 148, 89, 78, 224, 113, 134, 193, 173, 29, 251, 184, 169, 28, 205, 138, 65, 23, 226, 35, 181, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 177, 99, 235, 241, 115, 189, 108, 200, 53, 179, 126, 75, 228, 170, 251, 123, 180, 178, 179, 236, 148, 89, 78, 224, 113, 134, 193, 173, 29, 251, 184, 169, 28, 205, 138, 65, 23, 226, 35, 181, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 232, 40, 177, 69, 78, 176, 111, 219, 239, 61, 245, 168, 156, 144, 171, 32, 190, 204, 16, 213, 186, 40, 236, 97, 202, 121, 147, 87, 146, 4, 134, 73, 24, 148, 111, 93, 35, 101, 77, 119, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 182, 155, 166, 218, 178, 98, 48, 238, 215, 97, 117, 30, 63, 75, 205, 136, 124, 151, 186, 159, 186, 40, 236, 97, 202, 121, 147, 87, 146, 4, 134, 73, 24, 148, 111, 93, 35, 101, 77, 119, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 183, 51, 75, 31, 160, 114, 60, 121, 195, 38, 195, 117, 99, 233, 194, 116, 161, 123, 18, 147, 34, 167, 129, 216, 185, 225, 239, 36, 175, 229, 185, 168, 14, 225, 204, 144, 163, 177, 6, 178, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 14, 207, 154, 18, 108, 22, 48, 252, 234, 46, 176, 151, 35, 182, 197, 223, 148, 208, 235, 66, 34, 167, 129, 216, 185, 225, 239, 36, 175, 229, 185, 168, 14, 225, 204, 144, 163, 177, 6, 178, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 174, 160, 255, 10, 136, 138, 17, 228, 138, 234, 223, 116, 193, 36, 71, 240, 122, 13, 105, 51, 139, 85, 118, 178, 170, 63, 51, 202, 224, 242, 220, 41, 153, 76, 30, 87, 64, 212, 50, 133, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 200, 79, 208, 57, 180, 213, 166, 142, 19, 164, 82, 124, 238, 147, 9, 224, 125, 190, 108, 29, 139, 85, 118, 178, 170, 63, 51, 202, 224, 242, 220, 41, 153, 76, 30, 87, 64, 212, 50, 133, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 81, 140, 23, 41, 130, 179, 150, 226, 221, 40, 228, 94, 94, 163, 200, 209, 206, 121, 192, 157, 145, 155, 239, 192, 204, 9, 220, 154, 174, 138, 72, 19, 177, 121, 178, 218, 11, 96, 24, 24, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 109, 250, 107, 192, 6, 198, 163, 91, 188, 68, 188, 120, 146, 16, 120, 110, 81, 46, 219, 11, 145, 155, 239, 192, 204, 9, 220, 154, 174, 138, 72, 19, 177, 121, 178, 218, 11, 96, 24, 24, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 110, 66, 174, 56, 248, 129, 211, 213, 200, 138, 153, 229, 252, 84, 226, 31, 13, 29, 98, 1, 192, 92, 87, 68, 228, 82, 255, 182, 52, 133, 182, 94, 206, 211, 193, 127, 112, 253, 24, 75, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 240, 253, 234, 90, 25, 166, 127, 219, 99, 47, 82, 214, 124, 93, 156, 236, 245, 17, 10, 89, 192, 92, 87, 68, 228, 82, 255, 182, 52, 133, 182, 94, 206, 211, 193, 127, 112, 253, 24, 75, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 1, 138, 196, 174, 118, 205, 105, 116, 158, 149, 186, 126, 47, 193, 79, 191, 149, 217, 35, 135, 178, 187, 178, 210, 209, 205, 29, 17, 27, 113, 133, 168, 191, 78, 133, 147, 225, 167, 22, 152, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 153, 21, 244, 31, 131, 28, 177, 241, 127, 201, 41, 76, 255, 40, 50, 72, 17, 157, 173, 195, 178, 187, 178, 210, 209, 205, 29, 17, 27, 113, 133, 168, 191, 78, 133, 147, 225, 167, 22, 152, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 27, 248, 68, 41, 171, 40, 224, 86, 44, 50, 41, 69, 2, 193, 128, 61, 150, 79, 136, 140, 149, 220, 56, 9, 144, 128, 31, 86, 65, 154, 233, 54, 28, 188, 231, 241, 107, 15, 87, 215, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 239, 214, 165, 189, 200, 151, 48, 217, 172, 182, 92, 2, 112, 138, 169, 70, 172, 207, 213, 56, 149, 220, 56, 9, 144, 128, 31, 86, 65, 154, 233, 54, 28, 188, 231, 241, 107, 15, 87, 215, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 179, 52, 185, 217, 218, 137, 76, 195, 3, 212, 39, 174, 165, 222, 136, 242, 71, 26, 206, 135, 110, 213, 9, 8, 134, 27, 148, 19, 222, 232, 207, 223, 209, 80, 241, 7, 181, 137, 106, 253, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start2 ++ .{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 192, 88 } ++ zero900 ++ mid2 ++ .{ 244, 23, 35, 246, 146, 183, 193, 210, 40, 179, 226, 175, 159, 157, 223, 137, 157, 129, 225, 3, 110, 213, 9, 8, 134, 27, 148, 19, 222, 232, 207, 223, 209, 80, 241, 7, 181, 137, 106, 253, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), - &(start3 ++ .{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 80, 1, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 145, 211, 130, 127, 5, 47, 90, 75, 68, 213, 254, 43, 237, 101, 124, 117, 34, 71, 54, 93, 148, 248, 10, 51, 203, 9, 193, 67, 106, 22, 177, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 227, 78, 198, 95, 240, 26, 190, 163, 75, 11, 215, 249, 82, 235, 186, 146, 235, 137, 215, 114, 54, 213, 57, 33, 217, 110, 83, 240, 152, 216, 97, 176, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 127, 49, 235, 185, 156, 39, 140, 77, 7, 163, 234, 30, 119, 176, 153, 140, 103, 195, 251, 11, 66, 78, 228, 16, 153, 82, 218, 253, 176, 150, 162, 141, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 250, 204, 102, 27, 128, 208, 217, 185, 245, 125, 27, 27, 179, 144, 137, 21, 241, 183, 176, 124, 48, 140, 44, 192, 0, 165, 221, 33, 137, 56, 115, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 202, 106, 143, 114, 71, 252, 179, 188, 190, 67, 254, 35, 186, 246, 204, 143, 4, 170, 170, 85, 122, 150, 66, 26, 169, 105, 16, 116, 202, 216, 200, 101 } ++ zero659 ++ mid3 ++ .{ 40, 135, 246, 144, 230, 139, 176, 26, 13, 2, 244, 227, 28, 68, 174, 94, 156, 201, 88, 21, 55, 119, 53, 40, 117, 113, 133, 97, 121, 163, 33, 242, 37, 128, 6, 232, 166, 26, 225, 3, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 222, 106, 47, 15, 50, 129, 204, 109, 57, 246, 81, 55, 233, 96, 97, 252, 255, 182, 137, 82, 55, 119, 53, 40, 117, 113, 133, 97, 121, 163, 33, 242, 37, 128, 6, 232, 166, 26, 225, 3, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 81, 65, 128, 65, 174, 194, 236, 92, 175, 202, 132, 235, 100, 140, 78, 67, 59, 142, 70, 207, 114, 124, 249, 245, 245, 144, 226, 97, 222, 177, 236, 224, 19, 96, 49, 36, 1, 157, 84, 152, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 100, 57, 130, 129, 28, 93, 189, 47, 57, 213, 195, 205, 159, 21, 225, 221, 203, 83, 224, 205, 114, 124, 249, 245, 245, 144, 226, 97, 222, 177, 236, 224, 19, 96, 49, 36, 1, 157, 84, 152, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 236, 115, 58, 111, 128, 176, 247, 127, 140, 173, 18, 169, 85, 136, 219, 14, 228, 114, 84, 144, 182, 131, 133, 169, 81, 52, 114, 18, 80, 233, 217, 55, 249, 71, 168, 123, 223, 76, 156, 6, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 140, 10, 142, 63, 178, 110, 107, 182, 235, 36, 80, 77, 196, 185, 19, 106, 220, 237, 244, 52, 182, 131, 133, 169, 81, 52, 114, 18, 80, 233, 217, 55, 249, 71, 168, 123, 223, 76, 156, 6, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 143, 28, 97, 17, 100, 145, 90, 116, 29, 22, 193, 150, 222, 18, 74, 230, 58, 233, 99, 117, 136, 187, 163, 214, 27, 244, 112, 55, 101, 70, 82, 193, 5, 27, 9, 143, 208, 8, 157, 109, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 75, 23, 205, 159, 46, 102, 230, 43, 123, 211, 38, 135, 213, 191, 127, 181, 156, 126, 10, 42, 136, 187, 163, 214, 27, 244, 112, 55, 101, 70, 82, 193, 5, 27, 9, 143, 208, 8, 157, 109, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 157, 70, 246, 163, 150, 244, 39, 186, 107, 41, 208, 53, 9, 9, 220, 154, 82, 14, 33, 156, 223, 71, 153, 52, 250, 10, 201, 204, 198, 85, 83, 75, 172, 232, 118, 1, 248, 127, 229, 234, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 217, 24, 6, 2, 96, 59, 100, 54, 11, 30, 188, 231, 39, 127, 216, 63, 91, 46, 177, 138, 223, 71, 153, 52, 250, 10, 201, 204, 198, 85, 83, 75, 172, 232, 118, 1, 248, 127, 229, 234, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 110, 27, 5, 85, 163, 37, 4, 2, 140, 170, 185, 120, 171, 182, 139, 208, 132, 102, 223, 154, 195, 39, 195, 21, 19, 128, 4, 73, 166, 33, 187, 23, 199, 110, 161, 42, 196, 129, 228, 43, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 59, 250, 177, 99, 236, 3, 53, 80, 131, 117, 105, 139, 129, 87, 247, 102, 170, 183, 11, 202, 195, 39, 195, 21, 19, 128, 4, 73, 166, 33, 187, 23, 199, 110, 161, 42, 196, 129, 228, 43, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 223, 92, 236, 100, 223, 147, 138, 42, 237, 130, 17, 71, 135, 237, 198, 207, 91, 233, 152, 110, 183, 61, 2, 215, 201, 160, 107, 5, 13, 158, 151, 131, 118, 70, 156, 52, 91, 21, 246, 49, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 107, 100, 196, 149, 157, 60, 145, 207, 107, 240, 56, 63, 29, 141, 206, 193, 98, 58, 249, 31, 183, 61, 2, 215, 201, 160, 107, 5, 13, 158, 151, 131, 118, 70, 156, 52, 91, 21, 246, 49, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 186, 155, 71, 77, 200, 135, 215, 227, 70, 237, 252, 18, 94, 57, 131, 238, 240, 22, 150, 247, 253, 213, 24, 113, 79, 180, 1, 135, 20, 79, 19, 58, 54, 212, 196, 115, 96, 4, 0, 144, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 246, 87, 220, 72, 214, 103, 174, 107, 234, 222, 70, 110, 129, 184, 126, 128, 131, 119, 244, 197, 253, 213, 24, 113, 79, 180, 1, 135, 20, 79, 19, 58, 54, 212, 196, 115, 96, 4, 0, 144, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 118, 112, 109, 195, 154, 129, 51, 98, 15, 176, 103, 201, 247, 111, 218, 213, 117, 166, 155, 41, 49, 0, 243, 221, 88, 161, 228, 213, 84, 2, 64, 89, 12, 221, 228, 87, 219, 14, 142, 61, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 253, 8, 122, 229, 109, 75, 98, 164, 108, 119, 199, 114, 65, 110, 239, 254, 83, 193, 63, 91, 49, 0, 243, 221, 88, 161, 228, 213, 84, 2, 64, 89, 12, 221, 228, 87, 219, 14, 142, 61, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 2, 44, 190, 207, 11, 153, 174, 134, 172, 226, 28, 229, 7, 152, 203, 156, 174, 149, 210, 9, 52, 190, 186, 151, 113, 128, 172, 14, 237, 205, 239, 202, 57, 27, 40, 8, 105, 178, 91, 32, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 112, 200, 222, 173, 235, 252, 99, 217, 58, 104, 167, 251, 169, 210, 86, 154, 83, 30, 104, 156, 52, 190, 186, 151, 113, 128, 172, 14, 237, 205, 239, 202, 57, 27, 40, 8, 105, 178, 91, 32, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 0, 97, 23, 156, 170, 193, 204, 26, 84, 245, 217, 23, 139, 57, 58, 55, 208, 66, 119, 133, 143, 25, 9, 197, 219, 29, 106, 233, 239, 138, 39, 194, 246, 97, 17, 86, 38, 202, 229, 240, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 6, 241, 96, 200, 187, 22, 110, 207, 164, 168, 158, 211, 135, 202, 21, 52, 117, 210, 87, 37, 143, 25, 9, 197, 219, 29, 106, 233, 239, 138, 39, 194, 246, 97, 17, 86, 38, 202, 229, 240, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 57, 178, 210, 237, 96, 230, 159, 9, 58, 244, 53, 206, 240, 190, 95, 240, 1, 95, 108, 10, 29, 250, 218, 255, 4, 121, 220, 50, 154, 36, 207, 82, 183, 131, 118, 185, 46, 53, 153, 119, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 65, 123, 55, 20, 7, 72, 194, 184, 139, 133, 170, 85, 43, 119, 41, 75, 214, 156, 234, 194, 29, 250, 218, 255, 4, 121, 220, 50, 154, 36, 207, 82, 183, 131, 118, 185, 46, 53, 153, 119, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 6, 175, 4, 161, 14, 126, 239, 17, 190, 96, 144, 68, 110, 20, 87, 65, 117, 104, 168, 88, 239, 37, 255, 209, 91, 119, 165, 83, 173, 1, 130, 54, 119, 217, 189, 39, 175, 27, 253, 41, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 0, 191, 187, 140, 152, 60, 171, 172, 11, 31, 195, 49, 233, 101, 151, 70, 223, 237, 115, 189, 239, 37, 255, 209, 91, 119, 165, 83, 173, 1, 130, 54, 119, 217, 189, 39, 175, 27, 253, 41, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 159, 137, 16, 169, 15, 54, 150, 228, 187, 254, 48, 145, 225, 159, 231, 98, 48, 155, 247, 246, 9, 234, 81, 30, 245, 63, 82, 207, 21, 210, 12, 227, 238, 163, 78, 184, 216, 47, 13, 42, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 94, 6, 254, 16, 207, 244, 11, 148, 194, 220, 25, 0, 154, 113, 237, 168, 81, 59, 251, 96, 9, 234, 81, 30, 245, 63, 82, 207, 21, 210, 12, 227, 238, 163, 78, 184, 216, 47, 13, 42, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 113, 97, 169, 207, 211, 86, 244, 108, 206, 149, 149, 204, 61, 222, 0, 117, 48, 215, 229, 232, 93, 84, 132, 203, 110, 120, 241, 220, 238, 227, 82, 148, 180, 199, 200, 26, 203, 74, 69, 245, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 166, 17, 143, 217, 65, 251, 239, 74, 22, 253, 205, 128, 181, 223, 187, 79, 95, 220, 176, 67, 93, 84, 132, 203, 110, 120, 241, 220, 238, 227, 82, 148, 180, 199, 200, 26, 203, 74, 69, 245, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 206, 62, 158, 104, 195, 242, 160, 215, 233, 18, 186, 13, 66, 48, 1, 71, 13, 73, 132, 224, 127, 93, 63, 52, 143, 147, 24, 190, 117, 230, 82, 100, 11, 131, 211, 255, 182, 123, 25, 250, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - &(start3 ++ .{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 192, 88 } ++ zero900 ++ mid3 ++ .{ 69, 148, 155, 74, 193, 175, 175, 3, 8, 119, 153, 8, 154, 18, 173, 200, 49, 181, 213, 232, 127, 93, 63, 52, 143, 147, 24, 190, 117, 230, 82, 100, 11, 131, 211, 255, 182, 123, 25, 250, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), - }; -}; diff --git a/src/cmd/cmd.zig b/src/cmd/cmd.zig index 953f20ba3..3b88dc805 100644 --- a/src/cmd/cmd.zig +++ b/src/cmd/cmd.zig @@ -35,8 +35,8 @@ const requestIpEcho = sig.net.requestIpEcho; const servePrometheus = sig.prometheus.servePrometheus; const writeLeaderSchedule = sig.core.leader_schedule.writeLeaderSchedule; -const BlockstoreReader = sig.blockstore.BlockstoreReader; -const BlockstoreWriter = sig.blockstore.BlockstoreWriter; +const BlockstoreReader = sig.ledger.BlockstoreReader; +const BlockstoreWriter = sig.ledger.BlockstoreWriter; const SocketTag = sig.gossip.SocketTag; @@ -560,12 +560,12 @@ fn validator() !void { const leader_provider = leader_schedule.provider(); // blockstore - const blockstore_db = try sig.blockstore.BlockstoreDB.open( + const blockstore_db = try sig.ledger.BlockstoreDB.open( allocator, app_base.logger, "ledger/blockstore", ); - const shred_inserter = try sig.blockstore.ShredInserter.init( + const shred_inserter = try sig.ledger.ShredInserter.init( allocator, app_base.logger, app_base.metrics_registry, @@ -589,7 +589,7 @@ fn validator() !void { .logger = app_base.logger, .lowest_cleanup_slot = lowest_cleanup_slot, .max_root = max_root, - .scan_and_fix_roots_metrics = try sig.blockstore.writer.ScanAndFixRootsMetrics.init( + .scan_and_fix_roots_metrics = try sig.ledger.writer.ScanAndFixRootsMetrics.init( app_base.metrics_registry, ), }; @@ -605,7 +605,7 @@ fn validator() !void { max_root, ); - var cleanup_service_handle = try std.Thread.spawn(.{}, sig.blockstore.cleanup_service.run, .{ + var cleanup_service_handle = try std.Thread.spawn(.{}, sig.ledger.cleanup_service.run, .{ allocator, app_base.logger, blockstore_reader, @@ -658,12 +658,12 @@ fn shredCollector() !void { const leader_provider = leader_schedule.provider(); // blockstore - const blockstore_db = try sig.blockstore.BlockstoreDB.open( + const blockstore_db = try sig.ledger.BlockstoreDB.open( allocator, app_base.logger, "ledger/blockstore", ); - const shred_inserter = try sig.blockstore.ShredInserter.init( + const shred_inserter = try sig.ledger.ShredInserter.init( allocator, app_base.logger, app_base.metrics_registry, @@ -687,7 +687,7 @@ fn shredCollector() !void { .logger = app_base.logger, .lowest_cleanup_slot = lowest_cleanup_slot, .max_root = max_root, - .scan_and_fix_roots_metrics = try sig.blockstore.writer.ScanAndFixRootsMetrics.init( + .scan_and_fix_roots_metrics = try sig.ledger.writer.ScanAndFixRootsMetrics.init( app_base.metrics_registry, ), }; @@ -703,7 +703,7 @@ fn shredCollector() !void { max_root, ); - var cleanup_service_handle = try std.Thread.spawn(.{}, sig.blockstore.cleanup_service.run, .{ + var cleanup_service_handle = try std.Thread.spawn(.{}, sig.ledger.cleanup_service.run, .{ allocator, app_base.logger, blockstore_reader, diff --git a/src/ledger/blockstore.zig b/src/ledger/blockstore.zig new file mode 100644 index 000000000..4d0d48a13 --- /dev/null +++ b/src/ledger/blockstore.zig @@ -0,0 +1,7 @@ +const sig = @import("../lib.zig"); + +pub const BlockstoreDB = sig.ledger.rocksdb.RocksDB(&sig.ledger.schema.list); + +test BlockstoreDB { + sig.ledger.database.assertIsDatabase(BlockstoreDB); +} diff --git a/src/blockstore/cleanup_service.zig b/src/ledger/cleanup_service.zig similarity index 91% rename from src/blockstore/cleanup_service.zig rename to src/ledger/cleanup_service.zig index 2bfccc97a..36311109a 100644 --- a/src/blockstore/cleanup_service.zig +++ b/src/ledger/cleanup_service.zig @@ -4,11 +4,11 @@ const sig = @import("../lib.zig"); const AtomicBool = std.atomic.Value(bool); const Instant = std.time.Instant; -const BlockstoreReader = sig.blockstore.reader.BlockstoreReader; -const BlockstoreWriter = sig.blockstore.writer.BlockstoreWriter; +const BlockstoreReader = sig.ledger.reader.BlockstoreReader; +const BlockstoreWriter = sig.ledger.writer.BlockstoreWriter; const Slot = sig.core.Slot; const Duration = sig.time.Duration; -const Schema = sig.blockstore.schema.schema; +const Schema = sig.ledger.schema.schema; // The default time to sleep between checks for new roots const DEFAULT_MS_PER_SLOT: u64 = 400; @@ -196,10 +196,10 @@ fn findSlotsToClean( } const bincode = sig.bincode; -const Blockstore = sig.blockstore.BlockstoreDB; -const ShredInserter = sig.blockstore.ShredInserter; -const CodingShred = sig.shred_collector.shred.CodingShred; -const TestState = sig.blockstore.insert_shred.TestState; +const Blockstore = sig.ledger.BlockstoreDB; +const ShredInserter = sig.ledger.ShredInserter; +const CodingShred = sig.ledger.shred.CodingShred; +const TestState = sig.ledger.insert_shred.TestState; test "findSlotsToClean" { const allocator = std.testing.allocator; @@ -223,18 +223,18 @@ test "findSlotsToClean" { ); // set highest and lowest slot by inserting slot_meta - var lowest_slot_meta = sig.blockstore.meta.SlotMeta.init(allocator, 10, null); + var lowest_slot_meta = sig.ledger.meta.SlotMeta.init(allocator, 10, null); defer lowest_slot_meta.deinit(); lowest_slot_meta.received = 10; - var highest_slot_meta = sig.blockstore.meta.SlotMeta.init(allocator, 20, null); + var highest_slot_meta = sig.ledger.meta.SlotMeta.init(allocator, 20, null); defer highest_slot_meta.deinit(); highest_slot_meta.received = 20; { var write_batch = try db.initWriteBatch(); - try write_batch.put(sig.blockstore.schema.schema.slot_meta, lowest_slot_meta.slot, lowest_slot_meta); - try write_batch.put(sig.blockstore.schema.schema.slot_meta, highest_slot_meta.slot, highest_slot_meta); + try write_batch.put(sig.ledger.schema.schema.slot_meta, lowest_slot_meta.slot, lowest_slot_meta); + try write_batch.put(sig.ledger.schema.schema.slot_meta, highest_slot_meta.slot, highest_slot_meta); try db.commit(write_batch); } @@ -245,12 +245,12 @@ test "findSlotsToClean" { // // TODO: understand how live files are created // // add data shreds - // var data_shred = try sig.shred_collector.shred.DataShred.default(allocator); + // var data_shred = try sig.ledger.shred.DataShred.default(allocator); // defer data_shred.fields.deinit(); // { // var write_batch = try db.initWriteBatch(); // for (0..1000) |i| { - // try write_batch.put(sig.blockstore.schema.schema.data_shred, .{ 19, i }, data_shred.fields.payload); + // try write_batch.put(sig.ledger.schema.schema.data_shred, .{ 19, i }, data_shred.fields.payload); // } // try db.commit(write_batch); // } diff --git a/src/blockstore/database.zig b/src/ledger/database.zig similarity index 100% rename from src/blockstore/database.zig rename to src/ledger/database.zig diff --git a/src/blockstore/hashmap_db.zig b/src/ledger/hashmap_db.zig similarity index 97% rename from src/blockstore/hashmap_db.zig rename to src/ledger/hashmap_db.zig index 36c108285..f8a8314c1 100644 --- a/src/blockstore/hashmap_db.zig +++ b/src/ledger/hashmap_db.zig @@ -4,14 +4,14 @@ const sig = @import("../lib.zig"); const Allocator = std.mem.Allocator; const DefaultRwLock = std.Thread.RwLock.DefaultRwLock; -const BytesRef = sig.blockstore.database.BytesRef; -const ColumnFamily = sig.blockstore.database.ColumnFamily; -const IteratorDirection = sig.blockstore.database.IteratorDirection; +const BytesRef = sig.ledger.database.BytesRef; +const ColumnFamily = sig.ledger.database.ColumnFamily; +const IteratorDirection = sig.ledger.database.IteratorDirection; const Logger = sig.trace.Logger; const SortedMap = sig.utils.collections.SortedMap; -const key_serializer = sig.blockstore.database.key_serializer; -const value_serializer = sig.blockstore.database.value_serializer; +const key_serializer = sig.ledger.database.key_serializer; +const value_serializer = sig.ledger.database.value_serializer; pub fn SharedHashMapDB(comptime column_families: []const ColumnFamily) type { return struct { @@ -378,5 +378,5 @@ const SharedHashMap = struct { }; test "hashmap database" { - try sig.blockstore.database.testDatabase(SharedHashMapDB); + try sig.ledger.database.testDatabase(SharedHashMapDB); } diff --git a/src/blockstore/insert_shred.zig b/src/ledger/insert_shred.zig similarity index 99% rename from src/blockstore/insert_shred.zig rename to src/ledger/insert_shred.zig index bde8736ff..39c5ba2cc 100644 --- a/src/blockstore/insert_shred.zig +++ b/src/ledger/insert_shred.zig @@ -1,11 +1,11 @@ const std = @import("std"); const sig = @import("../lib.zig"); -const bs = sig.blockstore; +const bs = sig.ledger; const meta = bs.meta; const schema = bs.schema.schema; -const shred_mod = sig.shred_collector.shred; -const shredder = sig.blockstore.shredder; +const shred_mod = sig.ledger.shred; +const shredder = sig.ledger.shredder; const Allocator = std.mem.Allocator; const ArrayList = std.ArrayList; @@ -16,15 +16,15 @@ const Mutex = std.Thread.Mutex; const PointerClosure = sig.utils.closure.PointerClosure; const Counter = sig.prometheus.Counter; -const ErasureSetId = sig.shred_collector.shred.ErasureSetId; +const ErasureSetId = sig.ledger.shred.ErasureSetId; const Hash = sig.core.Hash; const Pubkey = sig.core.Pubkey; const Slot = sig.core.Slot; -const Shred = sig.shred_collector.shred.Shred; -const CodingShred = sig.shred_collector.shred.CodingShred; -const DataShred = sig.shred_collector.shred.DataShred; +const Shred = sig.ledger.shred.Shred; +const CodingShred = sig.ledger.shred.CodingShred; +const DataShred = sig.ledger.shred.DataShred; const ReedSolomonCache = bs.shredder.ReedSolomonCache; -const ShredId = sig.shred_collector.shred.ShredId; +const ShredId = sig.ledger.shred.ShredId; const SlotLeaderProvider = sig.core.leader_schedule.SlotLeaderProvider; const SortedSet = sig.utils.collections.SortedSet; const SortedMap = sig.utils.collections.SortedMap; @@ -39,8 +39,8 @@ const MerkleRootMeta = meta.MerkleRootMeta; const ShredIndex = meta.ShredIndex; const SlotMeta = meta.SlotMeta; -const key_serializer = sig.blockstore.database.key_serializer; -const value_serializer = sig.blockstore.database.value_serializer; +const key_serializer = sig.ledger.database.key_serializer; +const value_serializer = sig.ledger.database.value_serializer; const DEFAULT_TICKS_PER_SECOND = sig.core.time.DEFAULT_TICKS_PER_SECOND; @@ -1100,7 +1100,7 @@ pub const ShredInserter = struct { // agave: get_recovery_data_shreds and get_recovery_coding_shreds fn getRecoveryShreds( self: *Self, - comptime shred_type: sig.shred_collector.shred.ShredType, + comptime shred_type: sig.ledger.shred.ShredType, index: *const ShredIndex, slot: Slot, shred_indices: [2]u64, @@ -1883,7 +1883,7 @@ pub const TestState = struct { fn initWithLogger(comptime test_name: []const u8, logger: sig.trace.Logger) !TestState { const path = comptimePrint("{s}/{s}", .{ test_dir, test_name }); - try sig.blockstore.tests.freshDir(path); + try sig.ledger.tests.freshDir(path); const db = try BlockstoreDB.open(allocator, logger, path); var registry = sig.prometheus.Registry(.{}).init(allocator); const inserter = try ShredInserter.init(allocator, logger, ®istry, db); @@ -1964,7 +1964,7 @@ test "insertShreds single shred" { var state = try TestState.init("insertShreds single shred"); defer state.deinit(); const allocator = std.testing.allocator; - const shred = try Shred.fromPayload(allocator, &sig.shred_collector.shred.test_data_shred); + const shred = try Shred.fromPayload(allocator, &sig.ledger.shred.test_data_shred); defer shred.deinit(); _ = try state.inserter.insertShreds(&.{shred}, &.{false}, null, false, null); const stored_shred = try state.db.getBytes( @@ -2256,4 +2256,4 @@ const OneSlotLeaderProvider = struct { } }; -const loadShredsFromFile = sig.shred_collector.shred.loadShredsFromFile; +const loadShredsFromFile = sig.ledger.shred.loadShredsFromFile; diff --git a/src/blockstore/lib.zig b/src/ledger/lib.zig similarity index 95% rename from src/blockstore/lib.zig rename to src/ledger/lib.zig index 910590f7a..9f268824a 100644 --- a/src/blockstore/lib.zig +++ b/src/ledger/lib.zig @@ -7,6 +7,7 @@ pub const reader = @import("reader.zig"); pub const reed_solomon = @import("reed_solomon.zig"); pub const rocksdb = @import("rocksdb.zig"); pub const schema = @import("schema.zig"); +pub const shred = @import("shred.zig"); pub const shredder = @import("shredder.zig"); pub const transaction_status = @import("transaction_status.zig"); pub const tests = @import("tests.zig"); diff --git a/src/blockstore/meta.zig b/src/ledger/meta.zig similarity index 96% rename from src/blockstore/meta.zig rename to src/ledger/meta.zig index 174c29319..95e910a67 100644 --- a/src/blockstore/meta.zig +++ b/src/ledger/meta.zig @@ -4,7 +4,7 @@ const sig = @import("../lib.zig"); const Allocator = std.mem.Allocator; const BitFlags = sig.utils.bitflags.BitFlags; -const CodingShred = sig.shred_collector.shred.CodingShred; +const CodingShred = sig.ledger.shred.CodingShred; const Slot = sig.core.Slot; const SortedSet = sig.utils.collections.SortedSet; @@ -277,7 +277,7 @@ pub const Index = struct { pub const ShredIndex = SortedSet(u64); -pub const TransactionStatusMeta = sig.blockstore.transaction_status.TransactionStatusMeta; +pub const TransactionStatusMeta = sig.ledger.transaction_status.TransactionStatusMeta; pub const AddressSignatureMeta = struct { writeable: bool, @@ -288,7 +288,7 @@ pub const TransactionStatusIndexMeta = struct { frozen: bool, }; -pub const Reward = sig.blockstore.transaction_status.Reward; +pub const Reward = sig.ledger.transaction_status.Reward; pub const UnixTimestamp = i64; @@ -344,12 +344,12 @@ pub const MerkleRootMeta = struct { /// The first received shred index first_received_shred_index: u32, /// The shred type of the first received shred - first_received_shred_type: sig.shred_collector.shred.ShredType, + first_received_shred_type: sig.ledger.shred.ShredType, pub fn fromShred(shred: anytype) MerkleRootMeta { comptime std.debug.assert( - @TypeOf(shred) == sig.shred_collector.shred.DataShred or - @TypeOf(shred) == sig.shred_collector.shred.CodingShred, + @TypeOf(shred) == sig.ledger.shred.DataShred or + @TypeOf(shred) == sig.ledger.shred.CodingShred, ); return MerkleRootMeta{ // An error here after the shred has already sigverified diff --git a/src/blockstore/reader.zig b/src/ledger/reader.zig similarity index 98% rename from src/blockstore/reader.zig rename to src/ledger/reader.zig index b75791583..c527abcbe 100644 --- a/src/blockstore/reader.zig +++ b/src/ledger/reader.zig @@ -24,10 +24,10 @@ const Transaction = sig.core.Transaction; const VersionedTransaction = sig.core.VersionedTransaction; // shred -const Shred = sig.shred_collector.shred.Shred; -const DataShred = sig.shred_collector.shred.DataShred; +const Shred = sig.ledger.shred.Shred; +const DataShred = sig.ledger.shred.DataShred; -const shred_layout = sig.shred_collector.shred.layout; +const shred_layout = sig.ledger.shred.layout; // blockstore const BytesRef = blockstore.database.BytesRef; @@ -1468,10 +1468,10 @@ pub const AncestorIterator = struct { }; const bincode = sig.bincode; -const Blockstore = sig.blockstore.BlockstoreDB; -const ShredInserter = sig.blockstore.ShredInserter; -const CodingShred = sig.shred_collector.shred.CodingShred; -const TestState = sig.blockstore.insert_shred.TestState; +const Blockstore = sig.ledger.BlockstoreDB; +const ShredInserter = sig.ledger.ShredInserter; +const CodingShred = sig.ledger.shred.CodingShred; +const TestState = sig.ledger.insert_shred.TestState; const test_shreds = @import("test_shreds.zig"); @@ -1556,7 +1556,7 @@ test "getFirstDuplicateProof" { const registry = sig.prometheus.globalRegistry(); const path = std.fmt.comptimePrint("{s}/{s}", .{ "test_data/blockstore/insert_shred", "getFirstDuplicateProof" }); - try sig.blockstore.tests.freshDir(path); + try sig.ledger.tests.freshDir(path); var db = try BlockstoreDB.open(allocator, logger, path); defer db.deinit(true); @@ -1972,7 +1972,7 @@ test "isShredDuplicate" { const shred_slot = 10; const shred_index = 10; - const size = sig.shred_collector.shred.DataShred.constants.payload_size; + const size = sig.ledger.shred.DataShred.constants.payload_size; const shred_payload = try allocator.alloc(u8, size); defer allocator.free(shred_payload); @@ -2030,7 +2030,7 @@ test "findMissingDataIndexes" { shred.data.fields.common.index = shred_index; // set the variant - const variant = sig.shred_collector.shred.ShredVariant{ + const variant = sig.ledger.shred.ShredVariant{ .shred_type = .data, .proof_size = 100 & 0x0F, .chained = false, @@ -2097,7 +2097,7 @@ test "getCodeShred" { try std.testing.expect(shred == .code); // set the variant - const variant = sig.shred_collector.shred.ShredVariant{ + const variant = sig.ledger.shred.ShredVariant{ .shred_type = .code, .proof_size = 100 & 0x0F, .chained = false, @@ -2169,13 +2169,13 @@ test "getDataShred" { &max_root, ); - var shred_vec = sig.shred_collector.shred.test_data_shred; // local copy - const shred_payload = shred_vec[0..sig.shred_collector.shred.DataShred.constants.payload_size]; + var shred_vec = sig.ledger.shred.test_data_shred; // local copy + const shred_payload = shred_vec[0..sig.ledger.shred.DataShred.constants.payload_size]; const shred_slot = shred_layout.getSlot(shred_payload) orelse return error.InvalidShredData; // shred_payload[73] = 0; // zero-th shred index const shred_index = shred_layout.getIndex(shred_payload) orelse return error.InvalidShredData; - var shred = try sig.shred_collector.shred.Shred.fromPayload(allocator, shred_payload); + var shred = try sig.ledger.shred.Shred.fromPayload(allocator, shred_payload); defer shred.deinit(); var write_batch = try db.initWriteBatch(); diff --git a/src/blockstore/reed_solomon.zig b/src/ledger/reed_solomon.zig similarity index 100% rename from src/blockstore/reed_solomon.zig rename to src/ledger/reed_solomon.zig diff --git a/src/blockstore/reed_solomon_table.zig b/src/ledger/reed_solomon_table.zig similarity index 100% rename from src/blockstore/reed_solomon_table.zig rename to src/ledger/reed_solomon_table.zig diff --git a/src/blockstore/rocksdb.zig b/src/ledger/rocksdb.zig similarity index 97% rename from src/blockstore/rocksdb.zig rename to src/ledger/rocksdb.zig index 826a5f6fe..c8843ae09 100644 --- a/src/blockstore/rocksdb.zig +++ b/src/ledger/rocksdb.zig @@ -4,14 +4,14 @@ const sig = @import("../lib.zig"); const Allocator = std.mem.Allocator; -const BytesRef = sig.blockstore.database.BytesRef; -const ColumnFamily = sig.blockstore.database.ColumnFamily; -const IteratorDirection = sig.blockstore.database.IteratorDirection; +const BytesRef = sig.ledger.database.BytesRef; +const ColumnFamily = sig.ledger.database.ColumnFamily; +const IteratorDirection = sig.ledger.database.IteratorDirection; const Logger = sig.trace.Logger; const ReturnType = sig.utils.types.ReturnType; -const key_serializer = sig.blockstore.database.key_serializer; -const value_serializer = sig.blockstore.database.value_serializer; +const key_serializer = sig.ledger.database.key_serializer; +const value_serializer = sig.ledger.database.value_serializer; pub fn RocksDB(comptime column_families: []const ColumnFamily) type { return struct { @@ -318,5 +318,5 @@ fn callRocks(logger: Logger, comptime func: anytype, args: anytype) ReturnType(@ } test "rocksdb database" { - try sig.blockstore.database.testDatabase(RocksDB); + try sig.ledger.database.testDatabase(RocksDB); } diff --git a/src/blockstore/schema.zig b/src/ledger/schema.zig similarity index 96% rename from src/blockstore/schema.zig rename to src/ledger/schema.zig index 47f3b2bf2..0f97efa44 100644 --- a/src/blockstore/schema.zig +++ b/src/ledger/schema.zig @@ -1,10 +1,10 @@ const std = @import("std"); const sig = @import("../lib.zig"); -const meta = sig.blockstore.meta; +const meta = sig.ledger.meta; -const ColumnFamily = sig.blockstore.database.ColumnFamily; -const ErasureSetId = sig.shred_collector.shred.ErasureSetId; +const ColumnFamily = sig.ledger.database.ColumnFamily; +const ErasureSetId = sig.ledger.shred.ErasureSetId; const Pubkey = sig.core.Pubkey; const Signature = sig.core.Signature; const Slot = sig.core.Slot; diff --git a/src/shred_collector/shred.zig b/src/ledger/shred.zig similarity index 99% rename from src/shred_collector/shred.zig rename to src/ledger/shred.zig index a3137d45d..4fb0b4ab5 100644 --- a/src/shred_collector/shred.zig +++ b/src/ledger/shred.zig @@ -518,7 +518,7 @@ pub fn GenericShred( pub const ShredId = struct { slot: Slot, index: u32, - shred_type: sig.shred_collector.shred.ShredType, + shred_type: sig.ledger.shred.ShredType, }; pub const ErasureSetId = struct { diff --git a/src/blockstore/shredder.zig b/src/ledger/shredder.zig similarity index 94% rename from src/blockstore/shredder.zig rename to src/ledger/shredder.zig index ae2e09810..ff296526b 100644 --- a/src/blockstore/shredder.zig +++ b/src/ledger/shredder.zig @@ -3,22 +3,22 @@ const sig = @import("../lib.zig"); const Allocator = std.mem.Allocator; -const CodingShred = sig.shred_collector.shred.CodingShred; -const CodingShredHeader = sig.shred_collector.shred.CodingShredHeader; -const CommonHeader = sig.shred_collector.shred.CommonHeader; -const DataShred = sig.shred_collector.shred.DataShred; +const CodingShred = sig.ledger.shred.CodingShred; +const CodingShredHeader = sig.ledger.shred.CodingShredHeader; +const CommonHeader = sig.ledger.shred.CommonHeader; +const DataShred = sig.ledger.shred.DataShred; const Hash = sig.core.Hash; const Lru = sig.common.lru.LruCacheCustom; -const MerkleProofEntryList = sig.shred_collector.shred.MerkleProofEntryList; -const ReedSolomon = sig.blockstore.reed_solomon.ReedSolomon; -const Shred = sig.shred_collector.shred.Shred; +const MerkleProofEntryList = sig.ledger.shred.MerkleProofEntryList; +const ReedSolomon = sig.ledger.reed_solomon.ReedSolomon; +const Shred = sig.ledger.shred.Shred; const Signature = sig.core.Signature; const checkedSub = sig.utils.math.checkedSub; -const makeMerkleTree = sig.shred_collector.shred.makeMerkleTree; -const makeMerkleProof = sig.shred_collector.shred.makeMerkleProof; +const makeMerkleTree = sig.ledger.shred.makeMerkleTree; +const makeMerkleProof = sig.ledger.shred.makeMerkleProof; -const DATA_SHREDS_PER_FEC_BLOCK = sig.shred_collector.shred.DATA_SHREDS_PER_FEC_BLOCK; +const DATA_SHREDS_PER_FEC_BLOCK = sig.ledger.shred.DATA_SHREDS_PER_FEC_BLOCK; pub const ReedSolomonCache = struct { cache: Cache, diff --git a/src/shred_collector/test_shreds.zig b/src/ledger/test_shreds.zig similarity index 86% rename from src/shred_collector/test_shreds.zig rename to src/ledger/test_shreds.zig index fd25bc3fd..3e8568de2 100644 --- a/src/shred_collector/test_shreds.zig +++ b/src/ledger/test_shreds.zig @@ -1,3 +1,116 @@ +// this uses variables instead of raw data because otherwise ZLS gets unresponsive when the file is open + +pub const handle_chaining_basic_shreds: [96][]const u8 = blk: { + const zero900: [900]u8 = .{0} ** 900; + const zero64: [64]u8 = .{0} ** 64; + const zero659: [659]u8 = .{0} ** 659; + const start1 = .{ 96, 60, 61, 101, 232, 249, 12, 210, 45, 250, 198, 233, 4, 121, 139, 32, 184, 38, 242, 111, 212, 18, 73, 214, 83, 34, 105, 199, 80, 57, 57, 222, 188, 227, 47, 65, 252, 149, 212, 72, 51, 122, 205, 84, 197, 125, 10, 204, 202, 90, 78, 94, 186, 35, 7, 107, 207, 57, 205, 141, 83, 130, 154, 8, 182, 0, 0, 0, 0, 0, 0, 0, 0 }; + const start2 = .{ 150, 189, 66, 0, 12, 225, 76, 165, 158, 198, 42, 111, 203, 82, 33, 231, 164, 3, 44, 163, 255, 172, 221, 30, 73, 252, 11, 21, 229, 24, 255, 155, 249, 106, 203, 38, 162, 215, 3, 6, 107, 145, 93, 171, 191, 49, 85, 196, 0, 141, 167, 59, 57, 207, 89, 38, 107, 22, 127, 17, 58, 219, 226, 12, 182, 1, 0, 0, 0, 0, 0, 0, 0 }; + const start3 = .{ 108, 112, 9, 161, 195, 103, 54, 246, 26, 27, 46, 185, 171, 94, 225, 153, 65, 245, 77, 249, 83, 78, 136, 133, 69, 43, 69, 30, 60, 180, 232, 124, 174, 180, 90, 34, 153, 143, 173, 240, 243, 231, 147, 17, 186, 109, 58, 8, 18, 67, 76, 159, 253, 110, 82, 146, 237, 202, 172, 191, 52, 226, 137, 1, 182, 2, 0, 0, 0, 0, 0, 0, 0 }; + const mid1 = .{ 72, 185, 119, 196, 86, 77, 54, 2, 229, 193, 189, 195, 77, 115, 163, 89, 145, 34, 129, 127, 62, 157, 215, 70, 18, 73, 71, 176, 149, 1, 179, 109 }; + const mid2 = .{ 51, 197, 31, 180, 168, 125, 120, 130, 143, 192, 1, 248, 211, 182, 21, 63, 225, 118, 26, 122, 209, 81, 230, 50, 177, 205, 217, 89, 107, 41, 145, 156 }; + const mid3 = .{ 104, 232, 42, 254, 46, 48, 104, 89, 101, 211, 253, 161, 65, 155, 204, 89, 126, 187, 180, 191, 60, 59, 88, 119, 106, 20, 194, 80, 11, 200, 76, 0 }; + + break :blk [96][]const u8{ + &(start1 ++ .{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 1, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 208, 250, 189, 37, 31, 203, 190, 43, 147, 180, 185, 39, 178, 106, 210, 161, 169, 144, 119, 21, 46, 69, 222, 209, 230, 120, 175, 164, 93, 190, 197, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 126, 89, 153, 133, 132, 248, 52, 84, 164, 9, 92, 144, 0, 107, 39, 124, 49, 236, 123, 68, 127, 238, 68, 248, 139, 245, 127, 16, 237, 245, 171, 20, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 121, 7, 202, 175, 23, 98, 186, 89, 71, 113, 194, 7, 222, 104, 213, 10, 147, 31, 4, 41, 164, 190, 28, 118, 50, 209, 2, 89, 209, 66, 124, 137, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 76, 136, 235, 123, 127, 220, 132, 138, 120, 220, 88, 247, 126, 130, 64, 2, 134, 202, 224, 90, 210, 75, 78, 35, 170, 230, 20, 177, 146, 158, 149, 22, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 126, 2, 196, 129, 129, 167, 143, 231, 63, 21, 212, 77, 167, 195, 44, 90, 131, 73, 184, 67, 20, 149, 122, 239, 154, 200, 229, 94, 163, 138, 140, 113 } ++ zero659 ++ .{ 72, 185, 119, 196, 86, 77, 54, 2, 229, 193, 189, 195, 77, 115, 163, 89, 145, 34, 129, 127, 62, 157, 215, 70, 18, 73, 71, 176, 149, 1, 179, 109, 114, 207, 189, 252, 225, 17, 13, 47, 211, 184, 255, 232, 182, 146, 217, 58, 37, 193, 111, 13, 147, 149, 68, 187, 199, 149, 131, 92, 169, 117, 174, 112, 191, 242, 93, 141, 238, 132, 251, 28, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 80, 95, 188, 191, 86, 7, 225, 170, 117, 221, 168, 221, 43, 199, 202, 100, 33, 142, 178, 53, 147, 149, 68, 187, 199, 149, 131, 92, 169, 117, 174, 112, 191, 242, 93, 141, 238, 132, 251, 28, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 173, 199, 158, 49, 133, 16, 182, 206, 115, 33, 7, 199, 193, 53, 132, 22, 127, 80, 192, 252, 36, 202, 93, 120, 204, 116, 52, 151, 221, 91, 118, 175, 121, 69, 161, 53, 205, 109, 120, 92, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 74, 162, 32, 97, 90, 252, 56, 67, 252, 66, 241, 151, 199, 22, 11, 242, 191, 71, 54, 25, 36, 202, 93, 120, 204, 116, 52, 151, 221, 91, 118, 175, 121, 69, 161, 53, 205, 109, 120, 92, 207, 93, 203, 125, 210, 221, 223, 25, 140, 165, 242, 231, 160, 199, 12, 32, 84, 177, 219, 252, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 119, 228, 106, 83, 228, 208, 16, 7, 176, 210, 61, 42, 44, 189, 48, 0, 130, 247, 41, 211, 15, 213, 147, 56, 246, 246, 28, 66, 184, 121, 221, 34, 60, 14, 107, 143, 106, 2, 119, 31, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 165, 202, 138, 252, 157, 71, 155, 206, 189, 110, 233, 2, 19, 4, 40, 46, 91, 55, 146, 120, 15, 213, 147, 56, 246, 246, 28, 66, 184, 121, 221, 34, 60, 14, 107, 143, 106, 2, 119, 31, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 248, 97, 55, 145, 125, 100, 7, 116, 22, 9, 191, 94, 140, 201, 75, 247, 175, 116, 51, 16, 137, 47, 183, 197, 104, 252, 133, 244, 242, 163, 214, 117, 53, 242, 193, 60, 20, 156, 123, 208, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 240, 162, 42, 184, 46, 193, 77, 38, 61, 222, 38, 153, 33, 15, 29, 117, 95, 9, 183, 213, 137, 47, 183, 197, 104, 252, 133, 244, 242, 163, 214, 117, 53, 242, 193, 60, 20, 156, 123, 208, 56, 48, 2, 136, 60, 52, 1, 109, 169, 207, 181, 186, 38, 8, 130, 87, 6, 116, 118, 63, 217, 70, 186, 204, 149, 126, 140, 11, 22, 185, 242, 206, 31, 253, 48, 98, 235, 80, 217, 134, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 227, 225, 76, 135, 129, 84, 173, 114, 131, 200, 246, 93, 206, 80, 218, 104, 47, 236, 94, 39, 18, 117, 98, 108, 130, 209, 246, 253, 169, 91, 212, 12, 177, 2, 131, 146, 178, 98, 189, 82, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 203, 213, 128, 230, 241, 178, 97, 25, 200, 245, 178, 198, 159, 169, 72, 250, 6, 94, 202, 229, 18, 117, 98, 108, 130, 209, 246, 253, 169, 91, 212, 12, 177, 2, 131, 146, 178, 98, 189, 82, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 249, 226, 89, 165, 206, 91, 75, 147, 35, 227, 209, 173, 230, 42, 147, 156, 252, 193, 162, 67, 191, 144, 115, 88, 120, 63, 36, 243, 116, 163, 190, 49, 98, 97, 71, 98, 115, 185, 93, 241, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 230, 8, 47, 141, 160, 160, 239, 247, 42, 78, 167, 104, 80, 87, 194, 99, 116, 203, 227, 58, 191, 144, 115, 88, 120, 63, 36, 243, 116, 163, 190, 49, 98, 97, 71, 98, 115, 185, 93, 241, 51, 143, 52, 139, 219, 163, 190, 3, 145, 242, 245, 194, 222, 214, 114, 140, 70, 9, 167, 149, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 170, 55, 23, 195, 219, 225, 136, 222, 165, 227, 217, 89, 24, 1, 224, 75, 213, 41, 232, 33, 2, 66, 131, 61, 81, 114, 84, 238, 244, 78, 249, 44, 240, 176, 203, 122, 169, 56, 33, 234, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 184, 222, 6, 209, 235, 69, 70, 14, 164, 0, 139, 184, 22, 153, 155, 149, 217, 207, 208, 44, 2, 66, 131, 61, 81, 114, 84, 238, 244, 78, 249, 44, 240, 176, 203, 122, 169, 56, 33, 234, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 209, 162, 158, 34, 228, 190, 239, 36, 152, 116, 213, 83, 11, 252, 235, 9, 233, 152, 137, 115, 200, 93, 13, 129, 218, 66, 152, 61, 241, 195, 253, 212, 147, 149, 158, 205, 193, 18, 145, 43, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 85, 75, 248, 78, 166, 176, 135, 209, 210, 7, 74, 16, 45, 75, 52, 210, 76, 48, 250, 91, 200, 93, 13, 129, 218, 66, 152, 61, 241, 195, 253, 212, 147, 149, 158, 205, 193, 18, 145, 43, 118, 28, 176, 163, 167, 231, 152, 111, 73, 59, 188, 253, 207, 85, 46, 200, 222, 158, 121, 155, 80, 31, 93, 91, 31, 242, 12, 1, 130, 72, 252, 238, 138, 162, 84, 232, 44, 166, 48, 98, 19, 207, 4, 210, 239, 3, 41, 43, 12, 104, 107, 232, 37, 198, 78, 75, 157, 190, 3, 147, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 182, 228, 42, 170, 10, 189, 81, 218, 153, 135, 196, 226, 202, 31, 55, 162, 82, 176, 200, 24, 70, 45, 180, 60, 168, 83, 67, 14, 18, 86, 152, 201, 59, 183, 208, 111, 120, 219, 166, 11, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 119, 232, 93, 19, 13, 101, 104, 17, 117, 67, 122, 31, 45, 89, 117, 167, 156, 255, 110, 209, 70, 45, 180, 60, 168, 83, 67, 14, 18, 86, 152, 201, 59, 183, 208, 111, 120, 219, 166, 11, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 134, 110, 28, 199, 41, 202, 123, 208, 2, 204, 65, 163, 209, 231, 164, 164, 85, 57, 26, 192, 149, 13, 250, 189, 27, 21, 108, 51, 199, 107, 151, 119, 183, 105, 78, 21, 194, 104, 163, 133, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 176, 32, 242, 64, 69, 149, 166, 185, 180, 249, 149, 0, 21, 3, 236, 89, 170, 43, 129, 131, 149, 13, 250, 189, 27, 21, 108, 51, 199, 107, 151, 119, 183, 105, 78, 21, 194, 104, 163, 133, 215, 127, 204, 116, 45, 205, 143, 243, 249, 252, 75, 227, 175, 169, 33, 134, 93, 37, 116, 24, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 38, 166, 214, 186, 88, 162, 220, 76, 59, 222, 36, 210, 223, 237, 103, 207, 125, 65, 169, 4, 109, 173, 41, 199, 96, 178, 23, 24, 21, 29, 204, 34, 168, 127, 164, 110, 122, 90, 16, 200, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 48, 85, 179, 181, 159, 245, 137, 230, 196, 65, 41, 255, 46, 223, 60, 175, 198, 105, 146, 130, 109, 173, 41, 199, 96, 178, 23, 24, 21, 29, 204, 34, 168, 127, 164, 110, 122, 90, 16, 200, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 244, 227, 10, 114, 5, 112, 253, 76, 109, 115, 60, 218, 52, 152, 81, 187, 92, 58, 5, 195, 207, 51, 223, 108, 42, 79, 241, 247, 199, 251, 37, 102, 225, 175, 184, 249, 151, 113, 99, 66, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 194, 58, 126, 4, 218, 94, 207, 45, 223, 159, 188, 255, 40, 101, 157, 221, 3, 86, 184, 168, 207, 51, 223, 108, 42, 79, 241, 247, 199, 251, 37, 102, 225, 175, 184, 249, 151, 113, 99, 66, 136, 2, 149, 182, 168, 248, 61, 158, 155, 201, 142, 0, 195, 176, 107, 166, 233, 235, 53, 198, 45, 74, 31, 121, 217, 78, 93, 180, 236, 219, 219, 75, 25, 20, 118, 231, 90, 236, 17, 83, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 20, 162, 167, 204, 72, 228, 219, 124, 166, 154, 68, 45, 207, 134, 231, 241, 140, 66, 221, 225, 140, 67, 239, 85, 255, 242, 20, 207, 117, 28, 177, 90, 12, 88, 55, 55, 235, 125, 174, 126, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 100, 137, 169, 97, 67, 156, 70, 242, 183, 124, 118, 220, 218, 173, 123, 86, 1, 203, 172, 106, 140, 67, 239, 85, 255, 242, 20, 207, 117, 28, 177, 90, 12, 88, 55, 55, 235, 125, 174, 126, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 224, 42, 250, 247, 242, 252, 161, 2, 93, 165, 128, 248, 116, 29, 178, 227, 187, 201, 253, 68, 59, 91, 12, 44, 103, 103, 241, 22, 115, 221, 241, 163, 212, 56, 17, 247, 197, 175, 74, 80, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 175, 138, 52, 210, 163, 121, 238, 197, 165, 6, 39, 117, 197, 253, 174, 160, 252, 14, 238, 140, 59, 91, 12, 44, 103, 103, 241, 22, 115, 221, 241, 163, 212, 56, 17, 247, 197, 175, 74, 80, 49, 205, 62, 80, 102, 129, 184, 53, 234, 212, 208, 82, 74, 149, 62, 161, 40, 151, 183, 80, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 19, 96, 40, 65, 234, 139, 117, 221, 166, 133, 35, 242, 215, 121, 2, 60, 124, 79, 93, 16, 110, 177, 20, 202, 242, 246, 47, 134, 232, 70, 67, 137, 168, 46, 132, 56, 232, 67, 45, 68, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 40, 161, 106, 91, 233, 224, 164, 214, 62, 254, 173, 43, 51, 176, 1, 31, 0, 169, 60, 243, 110, 177, 20, 202, 242, 246, 47, 134, 232, 70, 67, 137, 168, 46, 132, 56, 232, 67, 45, 68, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88 } ++ zero900 ++ mid1 ++ .{ 175, 9, 215, 61, 71, 57, 107, 186, 14, 119, 44, 8, 83, 158, 25, 219, 161, 237, 108, 154, 169, 63, 146, 72, 201, 85, 61, 211, 39, 233, 51, 113, 50, 136, 125, 34, 52, 30, 113, 188, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start1 ++ .{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 192, 88 } ++ zero900 ++ mid1 ++ .{ 78, 75, 154, 245, 48, 233, 28, 8, 14, 69, 73, 81, 79, 98, 21, 35, 124, 255, 32, 227, 169, 63, 146, 72, 201, 85, 61, 211, 39, 233, 51, 113, 50, 136, 125, 34, 52, 30, 113, 188, 107, 166, 171, 75, 121, 25, 103, 150, 248, 189, 247, 49, 180, 86, 229, 211, 228, 25, 141, 226, 11, 234, 90, 234, 125, 249, 217, 247, 31, 119, 249, 255, 147, 151, 141, 214, 9, 5, 22, 99, 78, 17, 183, 20, 12, 234, 5, 229, 178, 95, 208, 21, 78, 217, 91, 14, 141, 101, 139, 206, 53, 125, 129, 51, 200, 154, 249, 74, 137, 173, 43, 253, 185, 198, 209, 200, 185, 240, 73, 5 } ++ zero64), + &(start2 ++ .{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 80, 1, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 87, 120, 249, 133, 219, 117, 76, 102, 40, 105, 31, 86, 250, 218, 229, 12, 101, 253, 219, 232, 235, 46, 147, 3, 150, 51, 254, 250, 5, 212, 94, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 124, 246, 166, 218, 149, 184, 75, 78, 160, 21, 236, 64, 208, 26, 130, 253, 69, 232, 118, 125, 133, 101, 41, 137, 216, 124, 236, 63, 34, 232, 7, 91, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 17, 81, 90, 66, 186, 19, 231, 219, 197, 23, 171, 218, 195, 112, 26, 137, 153, 209, 195, 67, 86, 131, 72, 161, 97, 29, 9, 42, 154, 113, 97, 232, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 143, 132, 91, 23, 111, 120, 122, 179, 130, 117, 111, 160, 223, 202, 230, 28, 236, 195, 121, 118, 84, 52, 163, 143, 71, 97, 118, 71, 113, 91, 224, 241, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 215, 17, 199, 104, 249, 48, 230, 187, 78, 90, 229, 255, 215, 21, 150, 247, 131, 147, 170, 110, 77, 49, 213, 229, 0, 149, 105, 160, 15, 145, 133, 112 } ++ zero659 ++ .{ 51, 197, 31, 180, 168, 125, 120, 130, 143, 192, 1, 248, 211, 182, 21, 63, 225, 118, 26, 122, 209, 81, 230, 50, 177, 205, 217, 89, 107, 41, 145, 156, 55, 203, 37, 188, 136, 243, 117, 240, 218, 152, 250, 145, 106, 161, 42, 29, 117, 199, 52, 237, 50, 124, 109, 32, 201, 167, 156, 6, 196, 26, 33, 112, 199, 8, 3, 145, 235, 225, 39, 92, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 218, 104, 230, 230, 216, 133, 118, 160, 10, 139, 171, 23, 195, 119, 68, 118, 169, 176, 45, 101, 50, 124, 109, 32, 201, 167, 156, 6, 196, 26, 33, 112, 199, 8, 3, 145, 235, 225, 39, 92, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 116, 150, 79, 36, 21, 42, 50, 94, 92, 10, 233, 177, 152, 13, 13, 114, 5, 244, 162, 145, 172, 24, 230, 130, 137, 219, 236, 192, 102, 117, 90, 16, 65, 17, 181, 38, 150, 150, 86, 0, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 110, 57, 38, 148, 61, 139, 116, 229, 18, 178, 68, 136, 18, 54, 128, 135, 108, 43, 68, 188, 172, 24, 230, 130, 137, 219, 236, 192, 102, 117, 90, 16, 65, 17, 181, 38, 150, 150, 86, 0, 83, 82, 148, 50, 209, 235, 244, 137, 2, 188, 144, 79, 217, 176, 240, 241, 88, 6, 114, 25, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 129, 162, 208, 0, 248, 245, 33, 98, 196, 159, 88, 97, 37, 216, 64, 20, 141, 176, 15, 168, 110, 182, 114, 95, 118, 80, 188, 40, 243, 23, 178, 34, 232, 13, 199, 28, 1, 223, 89, 155, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 239, 73, 79, 55, 122, 153, 216, 210, 186, 101, 174, 183, 205, 189, 0, 78, 196, 141, 102, 191, 110, 182, 114, 95, 118, 80, 188, 40, 243, 23, 178, 34, 232, 13, 199, 28, 1, 223, 89, 155, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 251, 15, 182, 160, 190, 125, 68, 109, 208, 221, 162, 49, 212, 16, 238, 136, 215, 231, 116, 70, 24, 145, 60, 131, 77, 139, 67, 40, 32, 225, 81, 102, 63, 227, 173, 62, 174, 119, 21, 223, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 245, 77, 231, 33, 205, 60, 207, 164, 47, 130, 253, 120, 154, 109, 142, 185, 122, 63, 59, 194, 24, 145, 60, 131, 77, 139, 67, 40, 32, 225, 81, 102, 63, 227, 173, 62, 174, 119, 21, 223, 229, 10, 181, 238, 162, 78, 15, 52, 3, 236, 68, 140, 83, 225, 59, 241, 202, 84, 193, 255, 71, 90, 158, 8, 175, 29, 176, 161, 121, 37, 158, 180, 204, 18, 195, 19, 118, 192, 49, 4, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 209, 103, 149, 18, 65, 107, 245, 118, 141, 90, 236, 242, 138, 21, 210, 242, 93, 39, 119, 225, 247, 249, 108, 41, 166, 178, 10, 183, 101, 228, 232, 170, 153, 229, 120, 108, 218, 151, 78, 242, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 130, 52, 229, 182, 28, 146, 239, 7, 45, 182, 123, 165, 152, 161, 252, 37, 168, 59, 149, 18, 247, 249, 108, 41, 166, 178, 10, 183, 101, 228, 232, 170, 153, 229, 120, 108, 218, 151, 78, 242, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 177, 89, 155, 220, 209, 101, 30, 193, 70, 165, 21, 179, 232, 154, 9, 155, 86, 4, 169, 137, 53, 255, 28, 150, 14, 122, 255, 105, 187, 121, 62, 97, 133, 60, 192, 251, 22, 67, 81, 70, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 227, 31, 196, 122, 215, 154, 175, 165, 209, 60, 118, 216, 104, 208, 240, 198, 137, 243, 41, 107, 53, 255, 28, 150, 14, 122, 255, 105, 187, 121, 62, 97, 133, 60, 192, 251, 22, 67, 81, 70, 105, 139, 69, 231, 147, 141, 126, 222, 236, 102, 164, 218, 179, 88, 178, 123, 75, 116, 158, 101, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 179, 139, 157, 48, 164, 60, 92, 200, 17, 47, 187, 38, 212, 78, 82, 183, 34, 216, 162, 137, 14, 44, 245, 179, 222, 143, 4, 218, 251, 55, 212, 249, 210, 195, 18, 90, 140, 141, 63, 101, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 66, 20, 206, 102, 119, 74, 207, 3, 192, 82, 48, 45, 92, 33, 34, 131, 84, 184, 177, 67, 14, 44, 245, 179, 222, 143, 4, 218, 251, 55, 212, 249, 210, 195, 18, 90, 140, 141, 63, 101, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 164, 74, 100, 60, 34, 140, 229, 196, 250, 69, 160, 101, 151, 234, 7, 143, 65, 184, 24, 45, 148, 89, 78, 224, 113, 134, 193, 173, 29, 251, 184, 169, 28, 205, 138, 65, 23, 226, 35, 181, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 177, 99, 235, 241, 115, 189, 108, 200, 53, 179, 126, 75, 228, 170, 251, 123, 180, 178, 179, 236, 148, 89, 78, 224, 113, 134, 193, 173, 29, 251, 184, 169, 28, 205, 138, 65, 23, 226, 35, 181, 237, 184, 164, 79, 231, 30, 54, 32, 183, 121, 176, 218, 213, 186, 47, 14, 147, 96, 92, 160, 65, 192, 103, 211, 80, 1, 45, 182, 93, 192, 183, 9, 50, 43, 206, 234, 19, 101, 132, 183, 52, 49, 12, 150, 16, 35, 237, 93, 211, 5, 237, 108, 20, 92, 212, 165, 192, 45, 218, 226, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 232, 40, 177, 69, 78, 176, 111, 219, 239, 61, 245, 168, 156, 144, 171, 32, 190, 204, 16, 213, 186, 40, 236, 97, 202, 121, 147, 87, 146, 4, 134, 73, 24, 148, 111, 93, 35, 101, 77, 119, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 182, 155, 166, 218, 178, 98, 48, 238, 215, 97, 117, 30, 63, 75, 205, 136, 124, 151, 186, 159, 186, 40, 236, 97, 202, 121, 147, 87, 146, 4, 134, 73, 24, 148, 111, 93, 35, 101, 77, 119, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 183, 51, 75, 31, 160, 114, 60, 121, 195, 38, 195, 117, 99, 233, 194, 116, 161, 123, 18, 147, 34, 167, 129, 216, 185, 225, 239, 36, 175, 229, 185, 168, 14, 225, 204, 144, 163, 177, 6, 178, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 14, 207, 154, 18, 108, 22, 48, 252, 234, 46, 176, 151, 35, 182, 197, 223, 148, 208, 235, 66, 34, 167, 129, 216, 185, 225, 239, 36, 175, 229, 185, 168, 14, 225, 204, 144, 163, 177, 6, 178, 194, 73, 151, 140, 7, 119, 114, 141, 143, 63, 59, 153, 6, 74, 78, 164, 222, 88, 14, 145, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 174, 160, 255, 10, 136, 138, 17, 228, 138, 234, 223, 116, 193, 36, 71, 240, 122, 13, 105, 51, 139, 85, 118, 178, 170, 63, 51, 202, 224, 242, 220, 41, 153, 76, 30, 87, 64, 212, 50, 133, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 200, 79, 208, 57, 180, 213, 166, 142, 19, 164, 82, 124, 238, 147, 9, 224, 125, 190, 108, 29, 139, 85, 118, 178, 170, 63, 51, 202, 224, 242, 220, 41, 153, 76, 30, 87, 64, 212, 50, 133, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 81, 140, 23, 41, 130, 179, 150, 226, 221, 40, 228, 94, 94, 163, 200, 209, 206, 121, 192, 157, 145, 155, 239, 192, 204, 9, 220, 154, 174, 138, 72, 19, 177, 121, 178, 218, 11, 96, 24, 24, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 109, 250, 107, 192, 6, 198, 163, 91, 188, 68, 188, 120, 146, 16, 120, 110, 81, 46, 219, 11, 145, 155, 239, 192, 204, 9, 220, 154, 174, 138, 72, 19, 177, 121, 178, 218, 11, 96, 24, 24, 64, 113, 65, 162, 194, 53, 203, 249, 230, 19, 17, 238, 168, 8, 111, 102, 108, 146, 218, 118, 195, 151, 245, 153, 171, 127, 2, 239, 62, 136, 189, 241, 104, 160, 101, 138, 33, 11, 45, 45, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 110, 66, 174, 56, 248, 129, 211, 213, 200, 138, 153, 229, 252, 84, 226, 31, 13, 29, 98, 1, 192, 92, 87, 68, 228, 82, 255, 182, 52, 133, 182, 94, 206, 211, 193, 127, 112, 253, 24, 75, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 240, 253, 234, 90, 25, 166, 127, 219, 99, 47, 82, 214, 124, 93, 156, 236, 245, 17, 10, 89, 192, 92, 87, 68, 228, 82, 255, 182, 52, 133, 182, 94, 206, 211, 193, 127, 112, 253, 24, 75, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 1, 138, 196, 174, 118, 205, 105, 116, 158, 149, 186, 126, 47, 193, 79, 191, 149, 217, 35, 135, 178, 187, 178, 210, 209, 205, 29, 17, 27, 113, 133, 168, 191, 78, 133, 147, 225, 167, 22, 152, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 153, 21, 244, 31, 131, 28, 177, 241, 127, 201, 41, 76, 255, 40, 50, 72, 17, 157, 173, 195, 178, 187, 178, 210, 209, 205, 29, 17, 27, 113, 133, 168, 191, 78, 133, 147, 225, 167, 22, 152, 71, 141, 112, 242, 3, 49, 217, 152, 99, 157, 157, 209, 82, 177, 141, 235, 72, 114, 232, 138, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 27, 248, 68, 41, 171, 40, 224, 86, 44, 50, 41, 69, 2, 193, 128, 61, 150, 79, 136, 140, 149, 220, 56, 9, 144, 128, 31, 86, 65, 154, 233, 54, 28, 188, 231, 241, 107, 15, 87, 215, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 239, 214, 165, 189, 200, 151, 48, 217, 172, 182, 92, 2, 112, 138, 169, 70, 172, 207, 213, 56, 149, 220, 56, 9, 144, 128, 31, 86, 65, 154, 233, 54, 28, 188, 231, 241, 107, 15, 87, 215, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid2 ++ .{ 179, 52, 185, 217, 218, 137, 76, 195, 3, 212, 39, 174, 165, 222, 136, 242, 71, 26, 206, 135, 110, 213, 9, 8, 134, 27, 148, 19, 222, 232, 207, 223, 209, 80, 241, 7, 181, 137, 106, 253, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start2 ++ .{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 192, 88 } ++ zero900 ++ mid2 ++ .{ 244, 23, 35, 246, 146, 183, 193, 210, 40, 179, 226, 175, 159, 157, 223, 137, 157, 129, 225, 3, 110, 213, 9, 8, 134, 27, 148, 19, 222, 232, 207, 223, 209, 80, 241, 7, 181, 137, 106, 253, 111, 84, 148, 83, 11, 22, 133, 239, 25, 254, 166, 230, 101, 7, 164, 112, 174, 57, 196, 218, 131, 1, 152, 177, 169, 109, 195, 149, 22, 137, 202, 132, 33, 244, 188, 83, 15, 36, 78, 135, 56, 247, 199, 76, 56, 158, 144, 161, 126, 35, 202, 36, 233, 186, 215, 136, 46, 31, 70, 44, 199, 215, 38, 103, 245, 52, 49, 34, 5, 23, 63, 211, 45, 43, 165, 221, 5, 99, 217, 174 } ++ zero64), + &(start3 ++ .{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 80, 1, 5, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 145, 211, 130, 127, 5, 47, 90, 75, 68, 213, 254, 43, 237, 101, 124, 117, 34, 71, 54, 93, 148, 248, 10, 51, 203, 9, 193, 67, 106, 22, 177, 37, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 227, 78, 198, 95, 240, 26, 190, 163, 75, 11, 215, 249, 82, 235, 186, 146, 235, 137, 215, 114, 54, 213, 57, 33, 217, 110, 83, 240, 152, 216, 97, 176, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 127, 49, 235, 185, 156, 39, 140, 77, 7, 163, 234, 30, 119, 176, 153, 140, 103, 195, 251, 11, 66, 78, 228, 16, 153, 82, 218, 253, 176, 150, 162, 141, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 250, 204, 102, 27, 128, 208, 217, 185, 245, 125, 27, 27, 179, 144, 137, 21, 241, 183, 176, 124, 48, 140, 44, 192, 0, 165, 221, 33, 137, 56, 115, 106, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 202, 106, 143, 114, 71, 252, 179, 188, 190, 67, 254, 35, 186, 246, 204, 143, 4, 170, 170, 85, 122, 150, 66, 26, 169, 105, 16, 116, 202, 216, 200, 101 } ++ zero659 ++ mid3 ++ .{ 40, 135, 246, 144, 230, 139, 176, 26, 13, 2, 244, 227, 28, 68, 174, 94, 156, 201, 88, 21, 55, 119, 53, 40, 117, 113, 133, 97, 121, 163, 33, 242, 37, 128, 6, 232, 166, 26, 225, 3, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 222, 106, 47, 15, 50, 129, 204, 109, 57, 246, 81, 55, 233, 96, 97, 252, 255, 182, 137, 82, 55, 119, 53, 40, 117, 113, 133, 97, 121, 163, 33, 242, 37, 128, 6, 232, 166, 26, 225, 3, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 81, 65, 128, 65, 174, 194, 236, 92, 175, 202, 132, 235, 100, 140, 78, 67, 59, 142, 70, 207, 114, 124, 249, 245, 245, 144, 226, 97, 222, 177, 236, 224, 19, 96, 49, 36, 1, 157, 84, 152, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 100, 57, 130, 129, 28, 93, 189, 47, 57, 213, 195, 205, 159, 21, 225, 221, 203, 83, 224, 205, 114, 124, 249, 245, 245, 144, 226, 97, 222, 177, 236, 224, 19, 96, 49, 36, 1, 157, 84, 152, 7, 5, 1, 93, 176, 81, 215, 233, 124, 196, 180, 168, 209, 155, 214, 1, 221, 4, 4, 142, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 236, 115, 58, 111, 128, 176, 247, 127, 140, 173, 18, 169, 85, 136, 219, 14, 228, 114, 84, 144, 182, 131, 133, 169, 81, 52, 114, 18, 80, 233, 217, 55, 249, 71, 168, 123, 223, 76, 156, 6, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 140, 10, 142, 63, 178, 110, 107, 182, 235, 36, 80, 77, 196, 185, 19, 106, 220, 237, 244, 52, 182, 131, 133, 169, 81, 52, 114, 18, 80, 233, 217, 55, 249, 71, 168, 123, 223, 76, 156, 6, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 143, 28, 97, 17, 100, 145, 90, 116, 29, 22, 193, 150, 222, 18, 74, 230, 58, 233, 99, 117, 136, 187, 163, 214, 27, 244, 112, 55, 101, 70, 82, 193, 5, 27, 9, 143, 208, 8, 157, 109, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 75, 23, 205, 159, 46, 102, 230, 43, 123, 211, 38, 135, 213, 191, 127, 181, 156, 126, 10, 42, 136, 187, 163, 214, 27, 244, 112, 55, 101, 70, 82, 193, 5, 27, 9, 143, 208, 8, 157, 109, 206, 73, 237, 186, 125, 102, 148, 114, 101, 41, 187, 224, 105, 246, 108, 216, 160, 218, 226, 213, 194, 193, 231, 40, 156, 180, 9, 55, 98, 127, 14, 133, 43, 193, 228, 187, 86, 1, 68, 112, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 157, 70, 246, 163, 150, 244, 39, 186, 107, 41, 208, 53, 9, 9, 220, 154, 82, 14, 33, 156, 223, 71, 153, 52, 250, 10, 201, 204, 198, 85, 83, 75, 172, 232, 118, 1, 248, 127, 229, 234, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 217, 24, 6, 2, 96, 59, 100, 54, 11, 30, 188, 231, 39, 127, 216, 63, 91, 46, 177, 138, 223, 71, 153, 52, 250, 10, 201, 204, 198, 85, 83, 75, 172, 232, 118, 1, 248, 127, 229, 234, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 110, 27, 5, 85, 163, 37, 4, 2, 140, 170, 185, 120, 171, 182, 139, 208, 132, 102, 223, 154, 195, 39, 195, 21, 19, 128, 4, 73, 166, 33, 187, 23, 199, 110, 161, 42, 196, 129, 228, 43, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 59, 250, 177, 99, 236, 3, 53, 80, 131, 117, 105, 139, 129, 87, 247, 102, 170, 183, 11, 202, 195, 39, 195, 21, 19, 128, 4, 73, 166, 33, 187, 23, 199, 110, 161, 42, 196, 129, 228, 43, 250, 76, 191, 83, 229, 151, 171, 56, 156, 184, 98, 212, 228, 27, 114, 134, 255, 212, 236, 112, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 223, 92, 236, 100, 223, 147, 138, 42, 237, 130, 17, 71, 135, 237, 198, 207, 91, 233, 152, 110, 183, 61, 2, 215, 201, 160, 107, 5, 13, 158, 151, 131, 118, 70, 156, 52, 91, 21, 246, 49, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 107, 100, 196, 149, 157, 60, 145, 207, 107, 240, 56, 63, 29, 141, 206, 193, 98, 58, 249, 31, 183, 61, 2, 215, 201, 160, 107, 5, 13, 158, 151, 131, 118, 70, 156, 52, 91, 21, 246, 49, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 186, 155, 71, 77, 200, 135, 215, 227, 70, 237, 252, 18, 94, 57, 131, 238, 240, 22, 150, 247, 253, 213, 24, 113, 79, 180, 1, 135, 20, 79, 19, 58, 54, 212, 196, 115, 96, 4, 0, 144, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 246, 87, 220, 72, 214, 103, 174, 107, 234, 222, 70, 110, 129, 184, 126, 128, 131, 119, 244, 197, 253, 213, 24, 113, 79, 180, 1, 135, 20, 79, 19, 58, 54, 212, 196, 115, 96, 4, 0, 144, 109, 90, 84, 236, 83, 20, 8, 94, 125, 228, 5, 93, 76, 122, 10, 181, 187, 29, 87, 239, 44, 230, 159, 45, 166, 179, 103, 28, 19, 80, 168, 115, 238, 47, 96, 61, 23, 82, 13, 135, 137, 170, 186, 224, 33, 29, 111, 216, 255, 17, 30, 154, 253, 153, 131, 60, 6, 227, 226, 253, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 118, 112, 109, 195, 154, 129, 51, 98, 15, 176, 103, 201, 247, 111, 218, 213, 117, 166, 155, 41, 49, 0, 243, 221, 88, 161, 228, 213, 84, 2, 64, 89, 12, 221, 228, 87, 219, 14, 142, 61, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 253, 8, 122, 229, 109, 75, 98, 164, 108, 119, 199, 114, 65, 110, 239, 254, 83, 193, 63, 91, 49, 0, 243, 221, 88, 161, 228, 213, 84, 2, 64, 89, 12, 221, 228, 87, 219, 14, 142, 61, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 2, 44, 190, 207, 11, 153, 174, 134, 172, 226, 28, 229, 7, 152, 203, 156, 174, 149, 210, 9, 52, 190, 186, 151, 113, 128, 172, 14, 237, 205, 239, 202, 57, 27, 40, 8, 105, 178, 91, 32, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 112, 200, 222, 173, 235, 252, 99, 217, 58, 104, 167, 251, 169, 210, 86, 154, 83, 30, 104, 156, 52, 190, 186, 151, 113, 128, 172, 14, 237, 205, 239, 202, 57, 27, 40, 8, 105, 178, 91, 32, 237, 75, 180, 145, 243, 56, 74, 124, 125, 165, 76, 74, 106, 182, 14, 56, 4, 230, 221, 196, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 0, 97, 23, 156, 170, 193, 204, 26, 84, 245, 217, 23, 139, 57, 58, 55, 208, 66, 119, 133, 143, 25, 9, 197, 219, 29, 106, 233, 239, 138, 39, 194, 246, 97, 17, 86, 38, 202, 229, 240, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 6, 241, 96, 200, 187, 22, 110, 207, 164, 168, 158, 211, 135, 202, 21, 52, 117, 210, 87, 37, 143, 25, 9, 197, 219, 29, 106, 233, 239, 138, 39, 194, 246, 97, 17, 86, 38, 202, 229, 240, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 57, 178, 210, 237, 96, 230, 159, 9, 58, 244, 53, 206, 240, 190, 95, 240, 1, 95, 108, 10, 29, 250, 218, 255, 4, 121, 220, 50, 154, 36, 207, 82, 183, 131, 118, 185, 46, 53, 153, 119, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 65, 123, 55, 20, 7, 72, 194, 184, 139, 133, 170, 85, 43, 119, 41, 75, 214, 156, 234, 194, 29, 250, 218, 255, 4, 121, 220, 50, 154, 36, 207, 82, 183, 131, 118, 185, 46, 53, 153, 119, 188, 163, 89, 68, 36, 72, 36, 134, 63, 247, 71, 170, 205, 158, 114, 94, 73, 111, 158, 210, 104, 121, 215, 171, 117, 87, 213, 47, 206, 19, 129, 225, 7, 52, 231, 235, 254, 148, 41, 33, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 6, 175, 4, 161, 14, 126, 239, 17, 190, 96, 144, 68, 110, 20, 87, 65, 117, 104, 168, 88, 239, 37, 255, 209, 91, 119, 165, 83, 173, 1, 130, 54, 119, 217, 189, 39, 175, 27, 253, 41, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 0, 191, 187, 140, 152, 60, 171, 172, 11, 31, 195, 49, 233, 101, 151, 70, 223, 237, 115, 189, 239, 37, 255, 209, 91, 119, 165, 83, 173, 1, 130, 54, 119, 217, 189, 39, 175, 27, 253, 41, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 159, 137, 16, 169, 15, 54, 150, 228, 187, 254, 48, 145, 225, 159, 231, 98, 48, 155, 247, 246, 9, 234, 81, 30, 245, 63, 82, 207, 21, 210, 12, 227, 238, 163, 78, 184, 216, 47, 13, 42, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 94, 6, 254, 16, 207, 244, 11, 148, 194, 220, 25, 0, 154, 113, 237, 168, 81, 59, 251, 96, 9, 234, 81, 30, 245, 63, 82, 207, 21, 210, 12, 227, 238, 163, 78, 184, 216, 47, 13, 42, 183, 111, 143, 149, 146, 139, 20, 114, 244, 195, 184, 189, 7, 62, 138, 221, 134, 217, 191, 49, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 113, 97, 169, 207, 211, 86, 244, 108, 206, 149, 149, 204, 61, 222, 0, 117, 48, 215, 229, 232, 93, 84, 132, 203, 110, 120, 241, 220, 238, 227, 82, 148, 180, 199, 200, 26, 203, 74, 69, 245, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 166, 17, 143, 217, 65, 251, 239, 74, 22, 253, 205, 128, 181, 223, 187, 79, 95, 220, 176, 67, 93, 84, 132, 203, 110, 120, 241, 220, 238, 227, 82, 148, 180, 199, 200, 26, 203, 74, 69, 245, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 88 } ++ zero900 ++ mid3 ++ .{ 206, 62, 158, 104, 195, 242, 160, 215, 233, 18, 186, 13, 66, 48, 1, 71, 13, 73, 132, 224, 127, 93, 63, 52, 143, 147, 24, 190, 117, 230, 82, 100, 11, 131, 211, 255, 182, 123, 25, 250, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + &(start3 ++ .{ 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 192, 88 } ++ zero900 ++ mid3 ++ .{ 69, 148, 155, 74, 193, 175, 175, 3, 8, 119, 153, 8, 154, 18, 173, 200, 49, 181, 213, 232, 127, 93, 63, 52, 143, 147, 24, 190, 117, 230, 82, 100, 11, 131, 211, 255, 182, 123, 25, 250, 190, 121, 226, 74, 144, 200, 126, 42, 5, 91, 11, 87, 125, 84, 51, 146, 225, 17, 133, 162, 223, 218, 157, 174, 126, 97, 200, 101, 209, 2, 21, 69, 69, 52, 80, 32, 172, 204, 11, 236, 4, 130, 121, 94, 202, 174, 63, 6, 220, 181, 11, 134, 190, 66, 17, 196, 140, 117, 85, 163, 241, 68, 41, 87, 175, 211, 176, 252, 173, 194, 240, 102, 73, 124, 46, 225, 18, 81, 224, 124 } ++ zero64), + }; +}; + pub const mainnet_shreds = [_][]const u8{ &.{ 252, 184, 231, 82, 1, 32, 43, 139, 134, 145, 34, 173, 75, 144, 21, 124, 222, 174, 133, 227, 102, 243, 193, 211, 247, 150, 93, 136, 67, 12, 196, 213, 124, 203, 70, 161, 74, 240, 227, 65, 159, 137, 28, 87, 156, 74, 47, 223, 143, 168, 47, 51, 182, 105, 151, 107, 21, 174, 189, 180, 133, 43, 66, 7, 135, 241, 62, 225, 16, 0, 0, 0, 0, 162, 1, 0, 0, 173, 195, 143, 1, 0, 0, 1, 0, 54, 39, 4, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 1, 25, 1, 24, 1, 23, 1, 22, 1, 21, 1, 20, 1, 19, 1, 18, 1, 17, 1, 16, 1, 15, 1, 14, 1, 13, 1, 12, 1, 11, 1, 10, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 1, 4, 1, 3, 1, 2, 1, 1, 84, 167, 242, 180, 177, 20, 221, 7, 119, 51, 136, 238, 205, 186, 52, 228, 230, 4, 157, 146, 131, 236, 36, 27, 152, 92, 50, 203, 58, 6, 87, 79, 1, 76, 92, 186, 102, 0, 0, 0, 0, 1, 243, 80, 140, 253, 248, 13, 158, 242, 151, 211, 60, 118, 194, 254, 41, 62, 239, 8, 74, 172, 68, 127, 202, 140, 10, 71, 195, 134, 239, 136, 184, 151, 175, 39, 126, 90, 216, 158, 19, 88, 221, 152, 57, 213, 144, 169, 65, 35, 153, 163, 219, 140, 231, 132, 45, 245, 132, 57, 35, 31, 136, 234, 26, 2, 1, 0, 1, 3, 142, 59, 31, 71, 100, 46, 63, 254, 46, 147, 13, 244, 136, 29, 146, 77, 92, 169, 2, 244, 206, 246, 239, 55, 140, 81, 142, 198, 123, 31, 72, 187, 185, 22, 234, 51, 207, 178, 249, 12, 205, 132, 58, 197, 107, 42, 100, 188, 134, 212, 188, 215, 181, 125, 164, 230, 235, 190, 164, 202, 143, 37, 160, 100, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 67, 44, 234, 15, 154, 32, 50, 251, 6, 76, 217, 232, 45, 183, 135, 56, 126, 247, 23, 198, 240, 86, 122, 19, 68, 184, 98, 20, 58, 103, 72, 247, 1, 2, 2, 1, 0, 116, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 1, 25, 1, 24, 1, 23, 1, 22, 1, 21, 1, 20, 1, 19, 1, 18, 1, 17, 1, 16, 1, 15, 1, 14, 1, 13, 1, 12, 1, 11, 1, 10, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 1, 4, 1, 3, 1, 2, 1, 1, 84, 167, 242, 180, 177, 20, 221, 7, 119, 51, 136, 238, 205, 186, 52, 228, 230, 4, 157, 146, 131, 236, 36, 27, 152, 92, 50, 203, 58, 6, 87, 79, 1, 76, 92, 186, 102, 0, 0, 0, 0, 1, 20, 40, 94, 142, 175, 233, 176, 23, 182, 220, 252, 215, 59, 68, 18, 201, 117, 9, 14, 41, 244, 53, 48, 143, 179, 217, 200, 161, 201, 13, 116, 74, 233, 135, 170, 55, 50, 98, 152, 117, 111, 106, 68, 217, 112, 195, 33, 151, 132, 140, 82, 26, 72, 135, 217, 114, 240, 195, 247, 146, 122, 115, 171, 11, 1, 0, 1, 3, 149, 150, 85, 9, 135, 57, 61, 51, 240, 240, 182, 79, 171, 49, 174, 197, 22, 246, 113, 46, 167, 41, 239, 129, 233, 214, 171, 189, 189, 233, 104, 2, 202, 122, 105, 26, 45, 71, 74, 106, 49, 24, 16, 108, 97, 159, 212, 59, 144, 19, 183, 110, 155, 248, 196, 87, 233, 73, 119, 215, 174, 76, 37, 218, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 67, 44, 234, 15, 154, 32, 50, 251, 6, 76, 217, 232, 45, 183, 135, 56, 126, 247, 23, 198, 240, 86, 122, 19, 68, 184, 98, 20, 58, 103, 72, 247, 1, 2, 2, 1, 0, 116, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 1, 25, 1, 24, 1, 23, 1, 22, 1, 21, 1, 20, 1, 19, 1, 18, 1, 17, 1, 16, 1, 15, 1, 14, 1, 13, 1, 12, 1, 11, 1, 10, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 1, 4, 1, 3, 1, 2, 1, 1, 84, 167, 242, 180, 177, 20, 221, 7, 119, 51, 136, 238, 205, 186, 52, 228, 230, 4, 157, 146, 131, 236, 36, 27, 152, 92, 50, 203, 58, 6, 87, 79, 1, 76, 92, 186, 102, 0, 0, 0, 0, 1, 72, 206, 214, 202, 248, 6, 169, 74, 26, 112, 29, 18, 34, 66, 52, 27, 135, 40, 252, 42, 240, 233, 41, 51, 155, 23, 87, 71, 51, 133, 255, 57, 89, 74, 99, 116, 137, 94, 192, 124, 181, 73, 41, 109, 130, 21, 251, 71, 8, 3, 194, 76, 3, 102, 171, 83, 163, 195, 81, 202, 252, 230, 132, 7, 1, 0, 1, 3, 12, 208, 146, 226, 211, 224, 50, 236, 18, 254, 127, 12, 188, 143, 118, 208, 231, 41, 38, 80, 10, 130, 227, 227, 146, 66, 179, 182, 232, 232, 35, 45, 12, 208, 186, 93, 18, 4, 207, 9, 214, 201, 193, 227, 41, 108, 167, 253, 175, 62, 186, 54, 252, 58, 216, 55, 178, 51, 96, 234, 247, 166, 197, 58, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 67, 44, 234, 15, 154, 32, 50, 251, 6, 76, 217, 232, 45, 183, 135, 56, 126, 247, 23, 198, 240, 86, 122, 19, 68, 184, 98, 20, 58, 103, 72, 247, 1, 2, 2, 1, 0, 116, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 105, 28, 1, 181, 128, 17, 84, 197, 125, 180, 73, 131, 85, 194, 32, 29, 253, 102, 35, 144, 176, 31, 57, 174, 136, 161, 93, 109, 57, 27, 72, 74, 115, 0, 125, 240, 190, 156, 87, 101, 205, 147, 230, 133, 158, 252, 142, 48, 143, 108, 188, 186, 38, 229, 125, 117, 162, 243, 117, 20, 200, 38, 98, 16, 36, 86, 253, 12, 66, 160, 32, 194, 190, 222, 185, 222, 75, 41, 106, 82, 75, 14, 132, 235, 17, 228, 174, 165, 40, 121, 116, 11, 30, 84, 184, 86, 126, 106, 129, 100, 37, 203, 211, 161, 188, 85, 100, 147, 202, 234, 220, 215, 229, 170, 89, 141, 76, 106, 146, 187, 19, 63, 230, 219, 145, 126, 188, 133, 223, 121, 203, 149, 74, 5, 230, 198, 100, 108, 177, 110, 224, 131, 164, 150, 25, 231, 9, 98, 225, 55, 178, 109, 37, 240, 254, 217, 87, 223, 118, 30, 241 }, &.{ 79, 120, 184, 64, 67, 127, 24, 70, 44, 104, 50, 129, 51, 238, 114, 61, 161, 71, 153, 207, 253, 81, 193, 138, 189, 234, 161, 191, 141, 86, 55, 153, 97, 114, 111, 82, 168, 45, 218, 205, 144, 203, 152, 58, 32, 84, 201, 147, 188, 73, 112, 110, 25, 99, 62, 33, 120, 90, 30, 123, 230, 190, 29, 12, 135, 241, 62, 225, 16, 0, 0, 0, 0, 196, 1, 0, 0, 173, 195, 179, 1, 0, 0, 1, 0, 54, 39, 4, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 1, 25, 1, 24, 1, 23, 1, 22, 1, 21, 1, 20, 1, 19, 1, 18, 1, 17, 1, 16, 1, 15, 1, 14, 1, 13, 1, 12, 1, 11, 1, 10, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 1, 4, 1, 3, 1, 2, 1, 1, 84, 167, 242, 180, 177, 20, 221, 7, 119, 51, 136, 238, 205, 186, 52, 228, 230, 4, 157, 146, 131, 236, 36, 27, 152, 92, 50, 203, 58, 6, 87, 79, 1, 76, 92, 186, 102, 0, 0, 0, 0, 1, 229, 220, 153, 86, 112, 76, 189, 82, 98, 186, 236, 75, 47, 15, 23, 200, 78, 24, 178, 242, 90, 161, 24, 214, 25, 48, 100, 25, 150, 176, 74, 224, 46, 150, 5, 38, 232, 26, 4, 143, 25, 133, 53, 89, 198, 39, 134, 152, 26, 90, 68, 60, 35, 174, 131, 145, 56, 91, 206, 150, 164, 251, 7, 5, 1, 0, 1, 3, 77, 44, 216, 187, 113, 136, 106, 51, 231, 198, 141, 246, 119, 255, 206, 24, 119, 87, 247, 155, 142, 100, 52, 77, 215, 168, 191, 238, 82, 88, 246, 66, 172, 144, 183, 37, 63, 128, 181, 135, 32, 7, 14, 162, 2, 117, 220, 3, 66, 5, 112, 225, 147, 251, 99, 253, 105, 68, 48, 207, 61, 197, 221, 156, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 67, 44, 234, 15, 154, 32, 50, 251, 6, 76, 217, 232, 45, 183, 135, 56, 126, 247, 23, 198, 240, 86, 122, 19, 68, 184, 98, 20, 58, 103, 72, 247, 1, 2, 2, 1, 0, 116, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 1, 25, 1, 24, 1, 23, 1, 22, 1, 21, 1, 20, 1, 19, 1, 18, 1, 17, 1, 16, 1, 15, 1, 14, 1, 13, 1, 12, 1, 11, 1, 10, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 1, 4, 1, 3, 1, 2, 1, 1, 84, 167, 242, 180, 177, 20, 221, 7, 119, 51, 136, 238, 205, 186, 52, 228, 230, 4, 157, 146, 131, 236, 36, 27, 152, 92, 50, 203, 58, 6, 87, 79, 1, 76, 92, 186, 102, 0, 0, 0, 0, 1, 0, 230, 63, 202, 48, 177, 57, 208, 192, 40, 103, 152, 61, 50, 55, 245, 135, 180, 18, 53, 213, 174, 113, 71, 46, 152, 79, 42, 35, 250, 236, 133, 80, 53, 227, 204, 31, 122, 176, 177, 224, 92, 188, 166, 180, 44, 91, 238, 56, 93, 133, 121, 118, 119, 207, 195, 219, 1, 240, 188, 248, 21, 145, 7, 1, 0, 1, 3, 253, 246, 232, 157, 109, 154, 69, 159, 120, 183, 175, 26, 244, 62, 197, 230, 217, 149, 235, 223, 145, 203, 14, 226, 123, 70, 231, 16, 162, 111, 227, 202, 215, 176, 254, 83, 141, 74, 228, 150, 190, 77, 176, 177, 237, 255, 137, 28, 64, 4, 84, 241, 118, 255, 92, 17, 168, 108, 94, 142, 104, 97, 217, 72, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 67, 44, 234, 15, 154, 32, 50, 251, 6, 76, 217, 232, 45, 183, 135, 56, 126, 247, 23, 198, 240, 86, 122, 19, 68, 184, 98, 20, 58, 103, 72, 247, 1, 2, 2, 1, 0, 116, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 29, 1, 28, 1, 27, 1, 26, 1, 25, 1, 24, 1, 23, 1, 22, 1, 21, 1, 20, 1, 19, 1, 18, 1, 17, 1, 16, 1, 15, 1, 14, 1, 13, 1, 12, 1, 11, 1, 10, 1, 9, 1, 8, 1, 7, 1, 6, 1, 5, 1, 4, 1, 3, 1, 2, 1, 1, 84, 167, 242, 180, 177, 20, 221, 7, 119, 51, 136, 238, 205, 186, 52, 228, 230, 4, 157, 146, 131, 236, 36, 27, 152, 92, 50, 203, 58, 6, 87, 79, 1, 76, 92, 186, 102, 0, 0, 0, 0, 1, 151, 55, 54, 246, 151, 209, 148, 211, 216, 6, 227, 138, 69, 208, 74, 199, 98, 24, 201, 129, 52, 118, 8, 60, 90, 44, 112, 237, 174, 170, 226, 98, 103, 88, 206, 78, 90, 156, 223, 198, 220, 111, 68, 71, 174, 223, 104, 67, 217, 194, 143, 90, 66, 249, 3, 136, 142, 97, 234, 101, 228, 122, 192, 12, 1, 0, 1, 3, 43, 127, 227, 131, 83, 195, 118, 140, 250, 119, 56, 96, 12, 189, 108, 108, 161, 155, 234, 79, 8, 119, 168, 7, 213, 44, 219, 11, 57, 35, 184, 180, 227, 61, 141, 112, 234, 37, 246, 209, 124, 152, 71, 94, 142, 132, 4, 174, 73, 186, 23, 166, 145, 70, 100, 104, 54, 47, 10, 194, 205, 206, 74, 230, 7, 97, 72, 29, 53, 116, 116, 187, 124, 77, 118, 36, 235, 211, 189, 179, 216, 53, 94, 115, 209, 16, 67, 252, 13, 163, 83, 128, 0, 0, 0, 0, 67, 44, 234, 15, 154, 32, 50, 251, 6, 76, 217, 232, 45, 183, 135, 56, 126, 247, 23, 198, 240, 86, 122, 19, 68, 184, 98, 20, 58, 103, 72, 247, 1, 2, 2, 1, 0, 116, 12, 0, 0, 0, 209, 62, 225, 16, 0, 0, 0, 0, 31, 1, 31, 1, 30, 1, 148, 32, 150, 237, 169, 107, 176, 242, 8, 113, 198, 31, 73, 41, 38, 22, 59, 54, 64, 27, 106, 36, 255, 81, 172, 136, 212, 85, 56, 90, 215, 62, 92, 57, 58, 23, 181, 35, 107, 156, 5, 103, 121, 12, 158, 173, 5, 81, 76, 211, 74, 19, 110, 85, 146, 92, 111, 156, 34, 189, 184, 62, 162, 227, 248, 255, 105, 146, 170, 145, 141, 7, 165, 126, 197, 209, 239, 159, 215, 181, 251, 205, 29, 242, 92, 110, 228, 218, 253, 192, 63, 146, 145, 55, 28, 45, 147, 194, 113, 84, 124, 221, 160, 244, 56, 92, 234, 177, 119, 104, 127, 151, 0, 252, 17, 2, 117, 70, 149, 154, 129, 24, 178, 7, 135, 191, 10, 9, 66, 197, 224, 35, 130, 250, 98, 110, 170, 0, 173, 142, 216, 133, 31, 35, 210, 157, 114, 25, 99, 223, 108, 196, 179, 124, 4, 43, 75, 72, 110, 88, 13 }, diff --git a/src/blockstore/tests.zig b/src/ledger/tests.zig similarity index 83% rename from src/blockstore/tests.zig rename to src/ledger/tests.zig index dd387b2e6..3e5b38145 100644 --- a/src/blockstore/tests.zig +++ b/src/ledger/tests.zig @@ -6,7 +6,7 @@ const Logger = sig.trace.Logger; const BlockstoreDB = blockstore.BlockstoreDB; const schema = blockstore.schema.schema; -const TestState = sig.blockstore.insert_shred.TestState; +const TestState = sig.ledger.insert_shred.TestState; test "put/get data consistency for merkle root" { const logger = Logger.init(std.testing.allocator, Logger.TEST_DEFAULT_LEVEL); @@ -18,7 +18,7 @@ test "put/get data consistency for merkle root" { defer state.deinit(); var db = state.db; - const id = sig.shred_collector.shred.ErasureSetId{ + const id = sig.ledger.shred.ErasureSetId{ .slot = 1234127498, .fec_set_index = 4932874234, }; @@ -27,13 +27,13 @@ test "put/get data consistency for merkle root" { try db.put( schema.merkle_root_meta, id, - sig.blockstore.meta.MerkleRootMeta{ + sig.ledger.meta.MerkleRootMeta{ .merkle_root = root, .first_received_shred_index = 100, .first_received_shred_type = .data, }, ); - const output: sig.blockstore.meta.MerkleRootMeta = (try db.get(schema.merkle_root_meta, id)).?; + const output: sig.ledger.meta.MerkleRootMeta = (try db.get(schema.merkle_root_meta, id)).?; try std.testing.expectEqualSlices(u8, &root.data, &output.merkle_root.?.data); } diff --git a/src/blockstore/transaction_status.zig b/src/ledger/transaction_status.zig similarity index 100% rename from src/blockstore/transaction_status.zig rename to src/ledger/transaction_status.zig diff --git a/src/blockstore/writer.zig b/src/ledger/writer.zig similarity index 99% rename from src/blockstore/writer.zig rename to src/ledger/writer.zig index c5aabbd13..d4ebb4358 100644 --- a/src/blockstore/writer.zig +++ b/src/ledger/writer.zig @@ -354,7 +354,7 @@ pub const BlockstoreWriter = struct { pub fn purgeRangeWithCount( write_batch: *BlockstoreDB.WriteBatch, - comptime cf: sig.blockstore.database.ColumnFamily, + comptime cf: sig.ledger.database.ColumnFamily, from_key: cf.Key, to_key: cf.Key, count: *u32, @@ -405,7 +405,7 @@ pub const BlockstoreWriter = struct { pub fn purgeFileRangeWithCount( db: *BlockstoreDB, - comptime cf: sig.blockstore.database.ColumnFamily, + comptime cf: sig.ledger.database.ColumnFamily, from_key: cf.Key, to_key: cf.Key, count: *u32, @@ -442,7 +442,7 @@ pub const ScanAndFixRootsMetrics = struct { }; }; -const TestState = sig.blockstore.insert_shred.TestState; +const TestState = sig.ledger.insert_shred.TestState; test "purgeSlots" { const allocator = std.testing.allocator; @@ -485,11 +485,11 @@ test "purgeSlots" { // write another type var write_batch = try db.initWriteBatch(); for (0..roots.len + 1) |i| { - const merkle_root_meta = sig.shred_collector.shred.ErasureSetId{ + const merkle_root_meta = sig.ledger.shred.ErasureSetId{ .fec_set_index = i, .slot = i, }; - const merkle_meta = sig.blockstore.meta.MerkleRootMeta{ + const merkle_meta = sig.ledger.meta.MerkleRootMeta{ .merkle_root = null, .first_received_shred_index = 0, .first_received_shred_type = .data, diff --git a/src/lib.zig b/src/lib.zig index 143a3ac2a..78253c769 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -1,10 +1,10 @@ pub const accounts_db = @import("accountsdb/lib.zig"); pub const bincode = @import("bincode/bincode.zig"); -pub const blockstore = @import("blockstore/lib.zig"); pub const bloom = @import("bloom/lib.zig"); pub const core = @import("core/lib.zig"); pub const crypto = @import("crypto/fnv.zig"); pub const gossip = @import("gossip/lib.zig"); +pub const ledger = @import("ledger/lib.zig"); pub const net = @import("net/lib.zig"); pub const prometheus = @import("prometheus/lib.zig"); pub const rand = @import("rand/rand.zig"); diff --git a/src/shred_collector/lib.zig b/src/shred_collector/lib.zig index e423268c1..3bafcc4d9 100644 --- a/src/shred_collector/lib.zig +++ b/src/shred_collector/lib.zig @@ -5,7 +5,6 @@ pub const shred_processor = @import("shred_processor.zig"); pub const shred_receiver = @import("shred_receiver.zig"); pub const shred_tracker = @import("shred_tracker.zig"); pub const shred_verifier = @import("shred_verifier.zig"); -pub const shred = @import("shred.zig"); pub const ShredCollectorConfig = service.ShredCollectorConfig; pub const ShredCollectorDependencies = service.ShredCollectorDependencies; diff --git a/src/shred_collector/service.zig b/src/shred_collector/service.zig index 8514214e0..21b0786f9 100644 --- a/src/shred_collector/service.zig +++ b/src/shred_collector/service.zig @@ -49,7 +49,7 @@ pub const ShredCollectorDependencies = struct { /// Shared state that is read from gossip my_shred_version: *const Atomic(u16), leader_schedule: SlotLeaderProvider, - shred_inserter: sig.blockstore.ShredInserter, + shred_inserter: sig.ledger.ShredInserter, }; /// Start the Shred Collector. diff --git a/src/shred_collector/shred_processor.zig b/src/shred_collector/shred_processor.zig index 8b19a011b..a8c9f62dd 100644 --- a/src/shred_collector/shred_processor.zig +++ b/src/shred_collector/shred_processor.zig @@ -2,7 +2,7 @@ const std = @import("std"); const sig = @import("../lib.zig"); const shred_collector = @import("lib.zig"); -const layout = shred_collector.shred.layout; +const layout = sig.ledger.shred.layout; const Allocator = std.mem.Allocator; const ArrayList = std.ArrayList; @@ -13,8 +13,8 @@ const BasicShredTracker = shred_collector.shred_tracker.BasicShredTracker; const Channel = sig.sync.Channel; const Logger = sig.trace.Logger; const Packet = sig.net.Packet; -const Shred = shred_collector.shred.Shred; -const ShredInserter = sig.blockstore.ShredInserter; +const Shred = sig.ledger.shred.Shred; +const ShredInserter = sig.ledger.ShredInserter; // TODO: add metrics (e.g. total count of shreds processed) diff --git a/src/shred_collector/shred_receiver.zig b/src/shred_collector/shred_receiver.zig index 4536c5d32..ce265a566 100644 --- a/src/shred_collector/shred_receiver.zig +++ b/src/shred_collector/shred_receiver.zig @@ -4,7 +4,7 @@ const sig = @import("../lib.zig"); const shred_collector = @import("lib.zig"); const bincode = sig.bincode; -const layout = shred_collector.shred.layout; +const layout = sig.ledger.shred.layout; const Allocator = std.mem.Allocator; const ArrayList = std.ArrayList; @@ -162,11 +162,11 @@ fn shouldDiscardShred( if (slot > max_slot) return true; switch (variant.shred_type) { .code => { - if (index >= shred_collector.shred.coding_shred.max_per_slot) return true; + if (index >= sig.ledger.shred.coding_shred.max_per_slot) return true; if (slot <= root) return true; }, .data => { - if (index >= shred_collector.shred.data_shred.max_per_slot) return true; + if (index >= sig.ledger.shred.data_shred.max_per_slot) return true; const parent_offset = layout.getParentOffset(shred) orelse return true; const parent = slot -| @as(Slot, @intCast(parent_offset)); if (!verifyShredSlots(slot, parent, root)) return true; diff --git a/src/shred_collector/shred_tracker.zig b/src/shred_collector/shred_tracker.zig index 54508caa2..406d6922f 100644 --- a/src/shred_collector/shred_tracker.zig +++ b/src/shred_collector/shred_tracker.zig @@ -8,7 +8,7 @@ const Mutex = std.Thread.Mutex; const Slot = sig.core.Slot; -const MAX_SHREDS_PER_SLOT: usize = shred_collector.shred.MAX_SHREDS_PER_SLOT; +const MAX_SHREDS_PER_SLOT: usize = sig.ledger.shred.MAX_SHREDS_PER_SLOT; const MIN_SLOT_AGE_TO_REPORT_AS_MISSING: u64 = 200; diff --git a/src/shred_collector/shred_verifier.zig b/src/shred_collector/shred_verifier.zig index 2404a6520..069c9563d 100644 --- a/src/shred_collector/shred_verifier.zig +++ b/src/shred_collector/shred_verifier.zig @@ -2,7 +2,7 @@ const std = @import("std"); const sig = @import("../lib.zig"); const shred_collector = @import("lib.zig"); -const shred_layout = shred_collector.shred.layout; +const shred_layout = sig.ledger.shred.layout; const ArrayList = std.ArrayList; const Atomic = std.atomic.Value;