1*f94c1902Sdrh /* 2*f94c1902Sdrh ** 2018-03-01 3*f94c1902Sdrh ** 4*f94c1902Sdrh ** The author disclaims copyright to this source code. In place of 5*f94c1902Sdrh ** a legal notice, here is a blessing: 6*f94c1902Sdrh ** 7*f94c1902Sdrh ** May you do good and not evil. 8*f94c1902Sdrh ** May you find forgiveness for yourself and forgive others. 9*f94c1902Sdrh ** May you share freely, never taking more than you give. 10*f94c1902Sdrh ** 11*f94c1902Sdrh ************************************************************************* 12*f94c1902Sdrh ** 13*f94c1902Sdrh ** This file implements a program used for fuzz-testing the session 14*f94c1902Sdrh ** module. 15*f94c1902Sdrh ** 16*f94c1902Sdrh ** Usage: 17*f94c1902Sdrh ** 18*f94c1902Sdrh ** sessionfuzz setup -- Generate starter test cases 19*f94c1902Sdrh ** sessionfuzz run FILE ... -- Run a test fuzz on FILE 20*f94c1902Sdrh ** sesssiofuzz run SQLAR ... -- Run all test cases in the SQL Archive 21*f94c1902Sdrh ** 22*f94c1902Sdrh ** Compiling: 23*f94c1902Sdrh ** 24*f94c1902Sdrh ** (1) Have a version of SQLite that supports SQLITE_ENABLE_MEMDB 25*f94c1902Sdrh ** in the local directory. 26*f94c1902Sdrh ** (2) Run: 27*f94c1902Sdrh ** 28*f94c1902Sdrh ** gcc -Wall -O3 -o sessionfuzz sessionfuzz.c -lz 29*f94c1902Sdrh ** 30*f94c1902Sdrh ** Use with AFL (American Fuzzy Lop - http://lcamtuf.coredump.cx/afl/) 31*f94c1902Sdrh ** 32*f94c1902Sdrh ** (1) ./afl-gcc -O3 -o sessionfuzz sessionfuzz.c -lz 33*f94c1902Sdrh ** (2) mkdir session-init session-run session-cases 34*f94c1902Sdrh ** (3) cd session-init; ../sessionfuzz setup; cd .. 35*f94c1902Sdrh ** (4) ./afl -i session-init -o session-run -- ./sessionfuzz run @@ 36*f94c1902Sdrh ** ... let the previous step run for a while. Weeks, maybe. 37*f94c1902Sdrh ** (5) ./afl-cmin -i session-run -o session-cases 38*f94c1902Sdrh ** 39*f94c1902Sdrh ** The afl-cmin command on step (5) writes a minimal set of test cases 40*f94c1902Sdrh ** for coverage into the session-cases directory. Gather the cases written 41*f94c1902Sdrh ** there into an SQL Archive using a command like this: 42*f94c1902Sdrh ** 43*f94c1902Sdrh ** sqlite3 session-cases.db -Ac session-cases 44*f94c1902Sdrh ** 45*f94c1902Sdrh ** Then repeat the test using: 46*f94c1902Sdrh ** 47*f94c1902Sdrh ** ./sessionfuzz run session-cases.db 48*f94c1902Sdrh */ 49*f94c1902Sdrh 50*f94c1902Sdrh /* 51*f94c1902Sdrh ** We will import the entire SQLite source file to make compiling easier 52*f94c1902Sdrh */ 53*f94c1902Sdrh #define SQLITE_DEBUG 1 54*f94c1902Sdrh #define SQLITE_THREADSAFE 0 55*f94c1902Sdrh #define SQLITE_OMIT_LOAD_EXTENSION 0 56*f94c1902Sdrh #define SQLITE_ENABLE_SESSION 1 57*f94c1902Sdrh #define SQLITE_ENABLE_PREUPDATE_HOOK 1 58*f94c1902Sdrh #define SQLITE_ENABLE_DESERIALIZE 1 59*f94c1902Sdrh #include "sqlite3.c" 60*f94c1902Sdrh 61*f94c1902Sdrh /* Create a test database. This will be an in-memory database */ 62*f94c1902Sdrh static const char zInitSql[] = 63*f94c1902Sdrh "CREATE TABLE t1(a INTEGER PRIMARY KEY,b,c,d);\n" 64*f94c1902Sdrh "CREATE TABLE t2(e TEXT PRIMARY KEY NOT NULL,f,g);\n" 65*f94c1902Sdrh "CREATE TABLE t3(w REAL PRIMARY KEY NOT NULL,x,y);\n" 66*f94c1902Sdrh "CREATE TABLE t4(z PRIMARY KEY) WITHOUT ROWID;\n" 67*f94c1902Sdrh ; 68*f94c1902Sdrh 69*f94c1902Sdrh /* Code to populate the database */ 70*f94c1902Sdrh static const char zFillSql[] = 71*f94c1902Sdrh "INSERT INTO t1(a,b,c,d) VALUES\n" 72*f94c1902Sdrh " (1,2,3,4),\n" 73*f94c1902Sdrh " (2,3.5,'four',x'556677'),\n" 74*f94c1902Sdrh " (3,null,'xyz',15),\n" 75*f94c1902Sdrh " (4,'bubba',0x80000000,0.0);\n" 76*f94c1902Sdrh "INSERT INTO t1 SELECT a+4,c,d,b FROM t1;\n" 77*f94c1902Sdrh "INSERT INTO t1 SELECT a+8,d,b,c FROM t1;\n" 78*f94c1902Sdrh "INSERT INTO t1 SELECT a+16,d,c,b FROM t1;\n" 79*f94c1902Sdrh "INSERT INTO t1 SELECT a+32,b,d,c FROM t1;\n" 80*f94c1902Sdrh "INSERT INTO t2 SELECT printf('x%dy',a),b,c FROM t1;\n" 81*f94c1902Sdrh "INSERT INTO t3 SELECT a*1.1,b,c FROM t1;\n" 82*f94c1902Sdrh "INSERT INTO t4 SELECT a||','||quote(b) FROM t1;\n" 83*f94c1902Sdrh ; 84*f94c1902Sdrh 85*f94c1902Sdrh /* A database file created by running the two scripts above */ 86*f94c1902Sdrh static const unsigned char aDbBytes[] = { 87*f94c1902Sdrh 83, 81, 76,105,116,101, 32,102,111,114,109, 97,116, 32, 51, 0, 2, 0, 1, 88*f94c1902Sdrh 1, 0, 64, 32, 32, 0, 0, 0, 13, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 89*f94c1902Sdrh 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90*f94c1902Sdrh 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92*f94c1902Sdrh 13, 0, 46, 32,152, 13, 1,186, 0, 6, 0,176, 0, 1,194, 1, 84, 1,150, 93*f94c1902Sdrh 0,238, 1, 48, 0,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96*f94c1902Sdrh 0, 0, 0, 0, 0, 60, 6, 6, 23, 17, 17, 1,101,116, 97, 98,108,101,116, 97*f94c1902Sdrh 52,116, 52, 7, 67, 82, 69, 65, 84, 69, 32, 84, 65, 66, 76, 69, 32,116, 52, 98*f94c1902Sdrh 40,122, 32, 80, 82, 73, 77, 65, 82, 89, 32, 75, 69, 89, 41, 32, 87, 73, 84, 99*f94c1902Sdrh 72, 79, 85, 84, 32, 82, 79, 87, 73, 68, 64, 4, 6, 23, 17, 17, 1,109,116, 100*f94c1902Sdrh 97, 98,108,101,116, 51,116, 51, 5, 67, 82, 69, 65, 84, 69, 32, 84, 65, 66, 101*f94c1902Sdrh 76, 69, 32,116, 51, 40,119, 32, 82, 69, 65, 76, 32, 80, 82, 73, 77, 65, 82, 102*f94c1902Sdrh 89, 32, 75, 69, 89, 32, 78, 79, 84, 32, 78, 85, 76, 76, 44,120, 44,121, 41, 103*f94c1902Sdrh 34, 5, 5, 23, 55, 17, 1,105,110,100,101,120,115,113,108,105,116,101, 95, 104*f94c1902Sdrh 97,117,116,111,105,110,100,101,120, 95,116, 51, 95, 49,116, 51, 6, 64, 2, 105*f94c1902Sdrh 6, 23, 17, 17, 1,109,116, 97, 98,108,101,116, 50,116, 50, 3, 67, 82, 69, 106*f94c1902Sdrh 65, 84, 69, 32, 84, 65, 66, 76, 69, 32,116, 50, 40,101, 32, 84, 69, 88, 84, 107*f94c1902Sdrh 32, 80, 82, 73, 77, 65, 82, 89, 32, 75, 69, 89, 32, 78, 79, 84, 32, 78, 85, 108*f94c1902Sdrh 76, 76, 44,102, 44,103, 41, 34, 3, 5, 23, 55, 17, 1,105,110,100,101,120, 109*f94c1902Sdrh 115,113,108,105,116,101, 95, 97,117,116,111,105,110,100,101,120, 95,116, 50, 110*f94c1902Sdrh 95, 49,116, 50, 4, 0, 0, 0, 8, 0, 0, 0, 0, 60, 1, 6, 23, 17, 17, 111*f94c1902Sdrh 1,101,116, 97, 98,108,101,116, 49,116, 49, 2, 67, 82, 69, 65, 84, 69, 32, 112*f94c1902Sdrh 84, 65, 66, 76, 69, 32,116, 49, 40, 97, 32, 73, 78, 84, 69, 71, 69, 82, 32, 113*f94c1902Sdrh 80, 82, 73, 77, 65, 82, 89, 32, 75, 69, 89, 44, 98, 44, 99, 44,100, 41, 5, 114*f94c1902Sdrh 0, 0, 0, 2, 1,246, 0, 0, 0, 0, 10, 1,251, 1,246, 1,177, 1,155, 115*f94c1902Sdrh 1,145, 1,119, 1,109, 1, 87, 1, 76, 1, 50, 1, 40, 1, 18, 1, 7, 0, 116*f94c1902Sdrh 237, 0,227, 0,205, 0,195, 0,169, 0,159, 0,137, 0,126, 0,100, 0, 90, 117*f94c1902Sdrh 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 20, 26, 5, 0, 21, 7, 18,102,111, 118*f94c1902Sdrh 117,114, 64, 12, 0, 0, 0, 0, 0, 0, 85,102,119, 8, 25, 5, 0, 1, 1, 119*f94c1902Sdrh 1, 3, 2, 4, 24, 24, 5, 0, 23, 7, 5, 98,117, 98, 98, 97, 0, 0, 0, 120*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 9, 23, 5, 0, 0, 1, 19, 15, 121*f94c1902Sdrh 120,121,122, 20, 22, 5, 0, 7, 18, 21, 64, 12, 0, 0, 0, 0, 0, 0, 85, 122*f94c1902Sdrh 102,119,102,111,117,114, 8, 21, 5, 0, 1, 1, 1, 2, 4, 3, 24, 20, 5, 123*f94c1902Sdrh 0, 7, 5, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 98, 124*f94c1902Sdrh 117, 98, 98, 97, 8, 19, 4, 0, 1, 19, 15,120,121,122, 20, 18, 5, 0, 18, 125*f94c1902Sdrh 21, 7, 85,102,119,102,111,117,114, 64, 12, 0, 0, 0, 0, 0, 0, 8, 17, 126*f94c1902Sdrh 5, 0, 1, 1, 1, 4, 3, 2, 24, 16, 5, 0, 23, 5, 7, 98,117, 98, 98, 127*f94c1902Sdrh 97, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 15, 5, 0, 128*f94c1902Sdrh 0, 19, 1,120,121,122, 15, 20, 14, 5, 0, 7, 21, 18, 64, 12, 0, 0, 0, 129*f94c1902Sdrh 0, 0, 0,102,111,117,114, 85,102,119, 8, 13, 5, 0, 1, 1, 1, 2, 3, 130*f94c1902Sdrh 4, 24, 12, 5, 0, 7, 23, 5, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 131*f94c1902Sdrh 98, 97, 0, 0,128, 0, 0, 0, 9, 11, 5, 0, 1, 0, 19, 15,120,121,122, 132*f94c1902Sdrh 20, 10, 5, 0, 18, 7, 21, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0,102, 133*f94c1902Sdrh 111,117,114, 8, 9, 5, 0, 1, 1, 1, 4, 2, 3, 24, 8, 5, 0, 5, 7, 134*f94c1902Sdrh 23, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 135*f94c1902Sdrh 97, 8, 7, 4, 0, 19, 1,120,121,122, 15, 20, 6, 5, 0, 21, 18, 7,102, 136*f94c1902Sdrh 111,117,114, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0, 8, 5, 5, 0, 1, 137*f94c1902Sdrh 1, 1, 3, 4, 2, 24, 4, 5, 0, 23, 5, 7, 98,117, 98, 98, 97, 0, 0, 138*f94c1902Sdrh 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 3, 5, 0, 0, 19, 1, 139*f94c1902Sdrh 120,121,122, 15, 20, 2, 5, 0, 7, 21, 18, 64, 12, 0, 0, 0, 0, 0, 0, 140*f94c1902Sdrh 102,111,117,114, 85,102,119, 0, 0, 0, 9, 52, 0, 0, 0, 8, 26, 5, 0, 141*f94c1902Sdrh 0, 0, 2, 1,246, 0, 0, 0, 0, 13, 1,251, 1,246, 1,181, 1,165, 1, 142*f94c1902Sdrh 152, 1,129, 1,118, 1, 97, 1, 87, 1, 64, 1, 52, 1, 30, 1, 17, 0,252, 143*f94c1902Sdrh 0,240, 0,223, 0,209, 0,185, 0,173, 0,152, 0,141, 0,118, 0,106, 0, 144*f94c1902Sdrh 84, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 27, 3, 21, 19,120, 145*f94c1902Sdrh 50, 55,121,120,121,122, 20, 26, 4, 21, 21, 7,120, 50, 54,121,102,111,117, 146*f94c1902Sdrh 114, 64, 12, 0, 0, 0, 0, 0, 0, 10, 25, 4, 21, 1, 1,120, 50, 53,121, 147*f94c1902Sdrh 3, 2, 21, 24, 4, 21, 23, 7,120, 50, 52,121, 98,117, 98, 98, 97, 0, 0, 148*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 9, 23, 4, 21, 0, 1,120, 50, 51,121, 15, 19, 22, 149*f94c1902Sdrh 4, 21, 7, 18,120, 50, 50,121, 64, 12, 0, 0, 0, 0, 0, 0, 85,102,119, 150*f94c1902Sdrh 10, 21, 4, 21, 1, 1,120, 50, 49,121, 2, 4, 22, 20, 4, 21, 7, 5,120, 151*f94c1902Sdrh 50, 48,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 12, 19, 152*f94c1902Sdrh 4, 21, 1, 19,120, 49, 57,121, 15,120,121,122, 15, 18, 4, 21, 18, 21,120, 153*f94c1902Sdrh 49, 56,121, 85,102,119,102,111,117,114, 10, 17, 4, 21, 1, 1,120, 49, 55, 154*f94c1902Sdrh 121, 4, 3, 19, 16, 4, 21, 23, 5,120, 49, 54,121, 98,117, 98, 98, 97, 0, 155*f94c1902Sdrh 0,128, 0, 0, 0, 11, 15, 4, 21, 0, 19,120, 49, 53,121,120,121,122, 20, 156*f94c1902Sdrh 14, 4, 21, 7, 21,120, 49, 52,121, 64, 12, 0, 0, 0, 0, 0, 0,102,111, 157*f94c1902Sdrh 117,114, 10, 13, 4, 21, 1, 1,120, 49, 51,121, 2, 3, 21, 12, 4, 21, 7, 158*f94c1902Sdrh 23,120, 49, 50,121, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 8, 159*f94c1902Sdrh 11, 3, 21, 1,120, 49, 49,121, 15, 19, 10, 4, 21, 18, 7,120, 49, 48,121, 160*f94c1902Sdrh 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0, 9, 9, 4, 19, 1, 1,120, 57, 161*f94c1902Sdrh 121, 4, 2, 21, 8, 4, 19, 5, 7,120, 56,121, 0, 0,128, 0, 0, 0, 0, 162*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 11, 7, 4, 19, 19, 1,120, 55,121,120,121,122, 163*f94c1902Sdrh 15, 14, 6, 4, 19, 21, 18,120, 54,121,102,111,117,114, 85,102,119, 9, 5, 164*f94c1902Sdrh 4, 19, 1, 1,120, 53,121, 3, 4, 18, 4, 4, 19, 23, 5,120, 52,121, 98, 165*f94c1902Sdrh 117, 98, 98, 97, 0, 0,128, 0, 0, 0, 10, 3, 4, 19, 0, 19,120, 51,121, 166*f94c1902Sdrh 120,121,122, 19, 2, 4, 19, 7, 21,120, 50,121, 64, 12, 0, 0, 0, 0, 0, 167*f94c1902Sdrh 0,102,111,117,114, 9, 0, 0, 0, 12, 53, 0, 0, 0, 11, 27, 2, 0, 0, 168*f94c1902Sdrh 0, 1, 1,243, 0, 0, 0, 0, 15, 1,243, 1,220, 1,211, 1,202, 1,193, 169*f94c1902Sdrh 1,184, 1,175, 1,166, 1,159, 1,150, 1,141, 1,132, 1,123, 1,114, 1, 170*f94c1902Sdrh 105, 1, 96, 1, 87, 1, 78, 1, 69, 1, 61, 1, 52, 1, 43, 1, 34, 1, 25, 171*f94c1902Sdrh 1, 16, 1, 7, 0,254, 0,245, 0,236, 0,227, 0,219, 0,210, 0,201, 0, 172*f94c1902Sdrh 192, 0,183, 0,174, 0,165, 0,156, 0,147, 0,138, 0,129, 0,121, 0,112, 173*f94c1902Sdrh 0,103, 0, 0, 0, 8, 3, 21, 1,120, 53, 49,121, 51, 8, 3, 21, 1,120, 174*f94c1902Sdrh 53, 48,121, 50, 7, 3, 19, 1,120, 52,121, 4, 8, 3, 21, 1,120, 52, 57, 175*f94c1902Sdrh 121, 49, 8, 3, 21, 1,120, 52, 56,121, 48, 8, 3, 21, 1,120, 52, 55,121, 176*f94c1902Sdrh 47, 8, 3, 21, 1,120, 52, 54,121, 46, 8, 3, 21, 1,120, 52, 53,121, 45, 177*f94c1902Sdrh 8, 3, 21, 1,120, 52, 52,121, 44, 8, 3, 21, 1,120, 52, 51,121, 43, 8, 178*f94c1902Sdrh 3, 21, 1,120, 52, 50,121, 42, 8, 3, 21, 1,120, 52, 49,121, 41, 8, 3, 179*f94c1902Sdrh 21, 1,120, 52, 48,121, 40, 7, 3, 19, 1,120, 51,121, 3, 8, 3, 21, 1, 180*f94c1902Sdrh 120, 51, 57,121, 39, 8, 3, 21, 1,120, 51, 56,121, 38, 8, 3, 21, 1,120, 181*f94c1902Sdrh 51, 55,121, 37, 8, 3, 21, 1,120, 51, 54,121, 36, 8, 3, 21, 1,120, 51, 182*f94c1902Sdrh 53,121, 35, 8, 3, 21, 1,120, 51, 52,121, 34, 8, 3, 21, 1,120, 51, 51, 183*f94c1902Sdrh 121, 33, 8, 3, 21, 1,120, 51, 50,121, 32, 8, 3, 21, 1,120, 51, 49,121, 184*f94c1902Sdrh 31, 8, 3, 21, 1,120, 51, 48,121, 30, 7, 3, 19, 1,120, 50,121, 2, 8, 185*f94c1902Sdrh 3, 21, 1,120, 50, 57,121, 29, 8, 3, 21, 1,120, 50, 56,121, 28, 8, 3, 186*f94c1902Sdrh 21, 1,120, 50, 55,121, 27, 8, 3, 21, 1,120, 50, 54,121, 26, 8, 3, 21, 187*f94c1902Sdrh 1,120, 50, 53,121, 25, 8, 3, 21, 1,120, 50, 52,121, 24, 8, 3, 21, 1, 188*f94c1902Sdrh 120, 50, 51,121, 23, 8, 3, 21, 1,120, 50, 50,121, 22, 8, 3, 21, 1,120, 189*f94c1902Sdrh 50, 49,121, 21, 8, 3, 21, 1,120, 50, 48,121, 20, 6, 3, 19, 9,120, 49, 190*f94c1902Sdrh 121, 8, 3, 21, 1,120, 49, 57,121, 19, 8, 3, 21, 1,120, 49, 56,121, 18, 191*f94c1902Sdrh 8, 3, 21, 1,120, 49, 55,121, 17, 8, 3, 21, 1,120, 49, 54,121, 16, 8, 192*f94c1902Sdrh 3, 21, 1,120, 49, 53,121, 15, 8, 3, 21, 1,120, 49, 52,121, 14, 8, 3, 193*f94c1902Sdrh 21, 1,120, 49, 51,121, 13, 8, 3, 21, 1,120, 49, 50,121, 12, 8, 3, 21, 194*f94c1902Sdrh 1,120, 0, 0, 0, 14, 8, 3, 21, 1,120, 53, 49,121, 51, 5, 0, 0, 0, 195*f94c1902Sdrh 2, 1,246, 0, 0, 0, 0, 18, 1,251, 1,246, 1,156, 1,135, 1,117, 1, 196*f94c1902Sdrh 89, 1, 73, 1, 55, 1, 41, 1, 14, 0,254, 0,228, 0,211, 0,186, 0,170, 197*f94c1902Sdrh 0,149, 0,131, 0,110, 0, 94, 0, 69, 0, 54, 13, 23, 4, 7, 0, 1, 64, 198*f94c1902Sdrh 57, 76,204,204,204,204,205, 15, 23, 22, 4, 7, 7, 18, 64, 56, 51, 51, 51, 199*f94c1902Sdrh 51, 51, 52, 64, 12, 0, 0, 0, 0, 0, 0, 85,102,119, 14, 21, 4, 7, 1, 200*f94c1902Sdrh 1, 64, 55, 25,153,153,153,153,154, 2, 4, 19, 20, 4, 1, 7, 5, 22, 0, 201*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 16, 19, 4, 7, 1, 19, 202*f94c1902Sdrh 64, 52,230,102,102,102,102,103, 15,120,121,122, 19, 18, 4, 7, 18, 21, 64, 203*f94c1902Sdrh 51,204,204,204,204,204,205, 85,102,119,102,111,117,114, 14, 17, 4, 7, 1, 204*f94c1902Sdrh 1, 64, 50,179, 51, 51, 51, 51, 52, 4, 3, 23, 16, 4, 7, 23, 5, 64, 49, 205*f94c1902Sdrh 153,153,153,153,153,154, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 0, 15, 15, 206*f94c1902Sdrh 4, 7, 0, 19, 64, 48,128, 0, 0, 0, 0, 0,120,121,122, 24, 14, 4, 7, 207*f94c1902Sdrh 7, 21, 64, 46,204,204,204,204,204,206, 64, 12, 0, 0, 0, 0, 0, 0,102, 208*f94c1902Sdrh 111,117,114, 14, 13, 4, 7, 1, 1, 64, 44,153,153,153,153,153,154, 2, 3, 209*f94c1902Sdrh 25, 12, 4, 7, 7, 23, 64, 42,102,102,102,102,102,103, 0, 0, 0, 0, 0, 210*f94c1902Sdrh 0, 0, 0, 98,117, 98, 98, 97, 12, 11, 3, 7, 1, 64, 40, 51, 51, 51, 51, 211*f94c1902Sdrh 51, 52, 15, 16, 10, 4, 1, 18, 7, 11, 85,102,119, 64, 12, 0, 0, 0, 0, 212*f94c1902Sdrh 0, 0, 14, 9, 4, 7, 1, 1, 64, 35,204,204,204,204,204,205, 4, 2, 26, 213*f94c1902Sdrh 8, 4, 7, 5, 7, 64, 33,153,153,153,153,153,154, 0, 0,128, 0, 0, 0, 214*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 16, 7, 4, 7, 19, 1, 64, 30,204,204,204, 215*f94c1902Sdrh 204,204,206,120,121,122, 15, 19, 6, 4, 7, 21, 18, 64, 26,102,102,102,102, 216*f94c1902Sdrh 102,103,102,111,117,114, 85,102,119, 14, 5, 4, 7, 1, 1, 64, 22, 0, 0, 217*f94c1902Sdrh 0, 0, 0, 0, 3, 4, 23, 4, 4, 7, 23, 5, 64, 17,153,153,153,153,153, 218*f94c1902Sdrh 154, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 0, 15, 3, 4, 7, 0, 19, 64, 219*f94c1902Sdrh 10,102,102,102,102,102,103,120,121,122, 24, 2, 4, 7, 7, 21, 64, 1,153, 220*f94c1902Sdrh 153,153,153,153,154, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 14, 1, 221*f94c1902Sdrh 4, 7, 1, 1, 0, 0, 0, 17, 45, 0, 0, 0, 16, 23, 2, 0, 0, 0, 1, 222*f94c1902Sdrh 1,239, 0, 0, 0, 0, 20, 1,239, 1,205, 1,192, 1,179, 1,166, 1,153, 223*f94c1902Sdrh 1,140, 1,134, 1,121, 1,108, 1, 95, 1, 82, 1, 69, 1, 56, 1, 43, 1, 224*f94c1902Sdrh 30, 1, 17, 1, 11, 0,254, 0,241, 0,228, 0,215, 0,202, 0,189, 0,176, 225*f94c1902Sdrh 0,163, 0,150, 0,144, 0,131, 0,118, 0,105, 0, 92, 0, 79, 0, 12, 3, 226*f94c1902Sdrh 7, 1, 64, 67, 64, 0, 0, 0, 0, 0, 35, 12, 3, 7, 1, 64, 66,179, 51, 227*f94c1902Sdrh 51, 51, 51, 52, 34, 12, 3, 7, 1, 64, 66, 38,102,102,102,102,103, 33, 12, 228*f94c1902Sdrh 3, 7, 1, 64, 65,153,153,153,153,153,154, 32, 12, 3, 7, 1, 64, 65, 12, 229*f94c1902Sdrh 204,204,204,204,205, 31, 5, 3, 1, 1, 33, 30, 12, 3, 7, 1, 64, 63,230, 230*f94c1902Sdrh 102,102,102,102,103, 29, 12, 3, 7, 1, 64, 62,204,204,204,204,204,206, 28, 231*f94c1902Sdrh 12, 3, 7, 1, 64, 61,179, 51, 51, 51, 51, 52, 27, 12, 3, 7, 1, 64, 60, 232*f94c1902Sdrh 153,153,153,153,153,154, 26, 12, 3, 7, 1, 64, 59,128, 0, 0, 0, 0, 1, 233*f94c1902Sdrh 25, 12, 3, 7, 1, 64, 58,102,102,102,102,102,103, 24, 12, 3, 7, 1, 64, 234*f94c1902Sdrh 57, 76,204,204,204,204,205, 23, 12, 3, 7, 1, 64, 56, 51, 51, 51, 51, 51, 235*f94c1902Sdrh 52, 22, 12, 3, 7, 1, 64, 55, 25,153,153,153,153,154, 21, 5, 3, 1, 1, 236*f94c1902Sdrh 22, 20, 12, 3, 7, 1, 64, 52,230,102,102,102,102,103, 19, 12, 3, 7, 1, 237*f94c1902Sdrh 64, 51,204,204,204,204,204,205, 18, 12, 3, 7, 1, 64, 50,179, 51, 51, 51, 238*f94c1902Sdrh 51, 52, 17, 12, 3, 7, 1, 64, 49,153,153,153,153,153,154, 16, 12, 3, 7, 239*f94c1902Sdrh 1, 64, 48,128, 0, 0, 0, 0, 0, 15, 12, 3, 7, 1, 64, 46,204,204,204, 240*f94c1902Sdrh 204,204,206, 14, 12, 3, 7, 1, 64, 44,153,153,153,153,153,154, 13, 12, 3, 241*f94c1902Sdrh 7, 1, 64, 42,102,102,102,102,102,103, 12, 12, 3, 7, 1, 64, 40, 51, 51, 242*f94c1902Sdrh 51, 51, 51, 52, 11, 5, 3, 1, 1, 11, 10, 12, 3, 7, 1, 64, 35,204,204, 243*f94c1902Sdrh 204,204,204,205, 9, 12, 3, 7, 1, 64, 33,153,153,153,153,153,154, 8, 12, 244*f94c1902Sdrh 3, 7, 1, 64, 30,204,204,204,204,204,206, 7, 12, 3, 7, 1, 64, 26,102, 245*f94c1902Sdrh 102,102,102,102,103, 6, 12, 3, 7, 1, 64, 22, 0, 0, 0, 0, 0, 0, 5, 246*f94c1902Sdrh 12, 3, 7, 1, 64, 17,153,153,153,153,153,154, 4, 12, 3, 7, 1, 64, 10, 247*f94c1902Sdrh 102,102,102,102,102,103, 3, 12, 3, 7, 1, 64, 1,153,153, 0, 0, 0, 19, 248*f94c1902Sdrh 12, 3, 7, 1, 64, 67, 64, 0, 0, 0, 0, 0, 35, 2, 0, 0, 0, 1, 1, 249*f94c1902Sdrh 242, 0, 0, 0, 0, 22, 1,242, 1,218, 1,211, 1,202, 1,192, 1,179, 1, 250*f94c1902Sdrh 172, 1,157, 1,149, 1,141, 1,132, 1,125, 1,116, 1,106, 1, 93, 1, 86, 251*f94c1902Sdrh 1, 74, 1, 63, 1, 47, 1, 40, 1, 31, 1, 16, 1, 8, 0,255, 0,248, 0, 252*f94c1902Sdrh 239, 0,229, 0,216, 0,209, 0,197, 0,186, 0,174, 0,158, 0,151, 0,136, 253*f94c1902Sdrh 0,128, 0,119, 0,112, 0,103, 0, 93, 0, 9, 2, 27, 52, 55, 44, 78, 85, 254*f94c1902Sdrh 76, 76, 8, 2, 25, 52, 54, 44, 51, 46, 53, 6, 2, 21, 52, 53, 44, 50, 8, 255*f94c1902Sdrh 2, 25, 52, 52, 44, 48, 46, 48, 7, 2, 23, 52, 51, 44, 49, 53, 14, 2, 37, 256*f94c1902Sdrh 52, 50, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39, 6, 2, 21, 52, 49, 44, 52, 257*f94c1902Sdrh 15, 2, 39, 52, 48, 44, 50, 49, 52, 55, 52, 56, 51, 54, 52, 56, 11, 2, 31, 258*f94c1902Sdrh 52, 44, 39, 98,117, 98, 98, 97, 39, 10, 2, 29, 51, 57, 44, 39,120,121,122, 259*f94c1902Sdrh 39, 11, 2, 31, 51, 56, 44, 39,102,111,117,114, 39, 6, 2, 21, 51, 55, 44, 260*f94c1902Sdrh 51, 12, 2, 33, 51, 54, 44, 39, 98,117, 98, 98, 97, 39, 9, 2, 27, 51, 53, 261*f94c1902Sdrh 44, 78, 85, 76, 76, 8, 2, 25, 51, 52, 44, 51, 46, 53, 6, 2, 21, 51, 51, 262*f94c1902Sdrh 44, 50, 8, 2, 25, 51, 50, 44, 48, 46, 48, 7, 2, 23, 51, 49, 44, 49, 53, 263*f94c1902Sdrh 14, 2, 37, 51, 48, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39, 8, 2, 25, 51, 264*f94c1902Sdrh 44, 78, 85, 76, 76, 6, 2, 21, 50, 57, 44, 52, 15, 2, 39, 50, 56, 44, 50, 265*f94c1902Sdrh 49, 52, 55, 52, 56, 51, 54, 52, 56, 10, 2, 29, 50, 55, 44, 39,120,121,122, 266*f94c1902Sdrh 39, 11, 2, 31, 50, 54, 44, 39,102,111,117,114, 39, 6, 2, 21, 50, 53, 44, 267*f94c1902Sdrh 51, 12, 2, 33, 50, 52, 44, 39, 98,117, 98, 98, 97, 39, 9, 2, 27, 50, 51, 268*f94c1902Sdrh 44, 78, 85, 76, 76, 8, 2, 25, 50, 50, 44, 51, 46, 53, 6, 2, 21, 50, 49, 269*f94c1902Sdrh 44, 50, 8, 2, 25, 50, 48, 44, 48, 46, 48, 7, 2, 23, 50, 44, 51, 46, 53, 270*f94c1902Sdrh 7, 2, 23, 49, 57, 44, 49, 53, 14, 2, 37, 49, 56, 44, 88, 39, 53, 53, 54, 271*f94c1902Sdrh 54, 55, 55, 39, 6, 2, 21, 49, 55, 44, 52, 12, 2, 33, 49, 54, 44, 39, 98, 272*f94c1902Sdrh 117, 98, 98, 97, 39, 9, 2, 27, 49, 53, 44, 78, 85, 76, 76, 8, 2, 25, 49, 273*f94c1902Sdrh 52, 44, 51, 46, 53, 6, 2, 21, 49, 51, 44, 50, 8, 2, 25, 49, 50, 44, 48, 274*f94c1902Sdrh 46, 48, 7, 2, 23, 49, 49, 44, 49, 53, 14, 2, 37, 49, 48, 44, 88, 0, 0, 275*f94c1902Sdrh 0, 21, 9, 2, 27, 52, 55, 44, 78, 85, 76, 76, 13, 0, 0, 0, 26, 0, 68, 276*f94c1902Sdrh 0, 1,246, 1,224, 1,213, 1,187, 1,177, 1,155, 1,145, 1,119, 1,109, 277*f94c1902Sdrh 1, 87, 1, 76, 1, 50, 1, 40, 1, 18, 1, 7, 0,237, 0,227, 0,205, 0, 278*f94c1902Sdrh 195, 0,169, 0,159, 0,137, 0,126, 0,100, 0, 90, 0, 68, 0, 0, 0, 0, 279*f94c1902Sdrh 0, 0, 0, 0, 20, 26, 5, 0, 21, 7, 18,102,111,117,114, 64, 12, 0, 0, 280*f94c1902Sdrh 0, 0, 0, 0, 85,102,119, 8, 25, 5, 0, 1, 1, 1, 3, 2, 4, 24, 24, 281*f94c1902Sdrh 5, 0, 23, 7, 5, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 282*f94c1902Sdrh 0,128, 0, 0, 0, 9, 23, 5, 0, 0, 1, 19, 15,120,121,122, 20, 22, 5, 283*f94c1902Sdrh 0, 7, 18, 21, 64, 12, 0, 0, 0, 0, 0, 0, 85,102,119,102,111,117,114, 284*f94c1902Sdrh 8, 21, 5, 0, 1, 1, 1, 2, 4, 3, 24, 20, 5, 0, 7, 5, 23, 0, 0, 285*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 98,117, 98, 98, 97, 8, 19, 286*f94c1902Sdrh 4, 0, 1, 19, 15,120,121,122, 20, 18, 5, 0, 18, 21, 7, 85,102,119,102, 287*f94c1902Sdrh 111,117,114, 64, 12, 0, 0, 0, 0, 0, 0, 8, 17, 5, 0, 1, 1, 1, 4, 288*f94c1902Sdrh 3, 2, 24, 16, 5, 0, 23, 5, 7, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 289*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 15, 5, 0, 0, 19, 1,120,121,122, 290*f94c1902Sdrh 15, 20, 14, 5, 0, 7, 21, 18, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117, 291*f94c1902Sdrh 114, 85,102,119, 8, 13, 5, 0, 1, 1, 1, 2, 3, 4, 24, 12, 5, 0, 7, 292*f94c1902Sdrh 23, 5, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 0, 0,128, 0, 293*f94c1902Sdrh 0, 0, 9, 11, 5, 0, 1, 0, 19, 15,120,121,122, 20, 10, 5, 0, 18, 7, 294*f94c1902Sdrh 21, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 8, 9, 5, 295*f94c1902Sdrh 0, 1, 1, 1, 4, 2, 3, 24, 8, 5, 0, 5, 7, 23, 0, 0,128, 0, 0, 296*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 8, 7, 4, 0, 19, 297*f94c1902Sdrh 1,120,121,122, 15, 20, 6, 5, 0, 21, 18, 7,102,111,117,114, 85,102,119, 298*f94c1902Sdrh 64, 12, 0, 0, 0, 0, 0, 0, 8, 5, 5, 0, 1, 1, 1, 3, 4, 2, 24, 299*f94c1902Sdrh 4, 5, 0, 23, 5, 7, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 0, 0, 0, 300*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 9, 3, 5, 0, 0, 19, 1,120,121,122, 15, 20, 2, 301*f94c1902Sdrh 5, 0, 7, 21, 18, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 85,102, 302*f94c1902Sdrh 119, 8, 1, 5, 0, 1, 1, 1, 2, 3, 4, 13, 0, 0, 0, 26, 0, 63, 0, 303*f94c1902Sdrh 1,245, 1,219, 1,209, 1,187, 1,177, 1,151, 1,141, 1,119, 1,108, 1, 304*f94c1902Sdrh 82, 1, 72, 1, 50, 1, 39, 1, 13, 1, 3, 0,237, 0,227, 0,201, 0,191, 305*f94c1902Sdrh 0,169, 0,158, 0,132, 0,122, 0,100, 0, 89, 0, 63, 0, 0, 0, 24, 52, 306*f94c1902Sdrh 5, 0, 7, 23, 5, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 0, 307*f94c1902Sdrh 0,128, 0, 0, 0, 9, 51, 5, 0, 1, 0, 19, 15,120,121,122, 20, 50, 5, 308*f94c1902Sdrh 0, 18, 7, 21, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 309*f94c1902Sdrh 8, 49, 5, 0, 1, 1, 1, 4, 2, 3, 24, 48, 5, 0, 23, 7, 5, 98,117, 310*f94c1902Sdrh 98, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 9, 47, 311*f94c1902Sdrh 5, 0, 0, 1, 19, 15,120,121,122, 20, 46, 5, 0, 7, 18, 21, 64, 12, 0, 312*f94c1902Sdrh 0, 0, 0, 0, 0, 85,102,119,102,111,117,114, 8, 45, 5, 0, 1, 1, 1, 313*f94c1902Sdrh 2, 4, 3, 24, 44, 5, 0, 7, 5, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 314*f94c1902Sdrh 0,128, 0, 0, 0, 98,117, 98, 98, 97, 8, 43, 4, 0, 1, 19, 15,120,121, 315*f94c1902Sdrh 122, 20, 42, 5, 0, 18, 21, 7, 85,102,119,102,111,117,114, 64, 12, 0, 0, 316*f94c1902Sdrh 0, 0, 0, 0, 8, 41, 5, 0, 1, 1, 1, 4, 3, 2, 24, 40, 5, 0, 5, 317*f94c1902Sdrh 23, 7, 0, 0,128, 0, 0, 0, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 318*f94c1902Sdrh 0, 0, 9, 39, 5, 0, 19, 0, 1,120,121,122, 15, 20, 38, 5, 0, 21, 7, 319*f94c1902Sdrh 18,102,111,117,114, 64, 12, 0, 0, 0, 0, 0, 0, 85,102,119, 8, 37, 5, 320*f94c1902Sdrh 0, 1, 1, 1, 3, 2, 4, 24, 36, 5, 0, 23, 7, 5, 98,117, 98, 98, 97, 321*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 9, 35, 5, 0, 0, 322*f94c1902Sdrh 1, 19, 15,120,121,122, 20, 34, 5, 0, 7, 18, 21, 64, 12, 0, 0, 0, 0, 323*f94c1902Sdrh 0, 0, 85,102,119,102,111,117,114, 8, 33, 5, 0, 1, 1, 1, 2, 4, 3, 324*f94c1902Sdrh 24, 32, 5, 0, 7, 5, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 325*f94c1902Sdrh 0, 0, 98,117, 98, 98, 97, 8, 31, 4, 0, 1, 19, 15,120,121,122, 20, 30, 326*f94c1902Sdrh 5, 0, 18, 21, 7, 85,102,119,102,111,117,114, 64, 12, 0, 0, 0, 0, 0, 327*f94c1902Sdrh 0, 8, 29, 5, 0, 1, 1, 1, 4, 3, 2, 24, 28, 5, 0, 5, 23, 7, 0, 328*f94c1902Sdrh 0,128, 0, 0, 0, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, 9, 329*f94c1902Sdrh 27, 5, 0, 19, 0, 1,120,121,122, 15, 13, 0, 0, 0, 12, 1, 50, 0, 1, 330*f94c1902Sdrh 246, 1,224, 1,213, 1,187, 1,177, 1,155, 1,145, 1,119, 1,109, 1, 87, 331*f94c1902Sdrh 1, 76, 1, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 334*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 335*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 342*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 343*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 344*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 64, 5, 0, 7, 23, 5, 346*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 0, 347*f94c1902Sdrh 9, 63, 5, 0, 1, 0, 19, 15,120,121,122, 20, 62, 5, 0, 18, 7, 21, 85, 348*f94c1902Sdrh 102,119, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 8, 61, 5, 0, 1, 349*f94c1902Sdrh 1, 1, 4, 2, 3, 24, 60, 5, 0, 5, 7, 23, 0, 0,128, 0, 0, 0, 0, 350*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 8, 59, 4, 0, 19, 1,120, 351*f94c1902Sdrh 121,122, 15, 20, 58, 5, 0, 21, 18, 7,102,111,117,114, 85,102,119, 64, 12, 352*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 8, 57, 5, 0, 1, 1, 1, 3, 4, 2, 24, 56, 5, 353*f94c1902Sdrh 0, 23, 5, 7, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 354*f94c1902Sdrh 0, 0, 0, 0, 9, 55, 5, 0, 0, 19, 1,120,121,122, 15, 20, 54, 5, 0, 355*f94c1902Sdrh 7, 21, 18, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 85,102,119, 8, 356*f94c1902Sdrh 53, 5, 0, 1, 1, 1, 2, 3, 4, 13, 0, 0, 0, 27, 0, 72, 0, 1,245, 357*f94c1902Sdrh 1,224, 1,212, 1,192, 1,181, 1,165, 1,152, 1,129, 1,118, 1, 97, 1, 358*f94c1902Sdrh 87, 1, 64, 1, 52, 1, 30, 1, 17, 0,252, 0,240, 0,223, 0,209, 0,185, 359*f94c1902Sdrh 0,173, 0,152, 0,141, 0,118, 0,106, 0, 84, 0, 72, 0, 0, 0, 0, 0, 360*f94c1902Sdrh 0, 0, 0, 0, 0, 10, 27, 3, 21, 19,120, 50, 55,121,120,121,122, 20, 26, 361*f94c1902Sdrh 4, 21, 21, 7,120, 50, 54,121,102,111,117,114, 64, 12, 0, 0, 0, 0, 0, 362*f94c1902Sdrh 0, 10, 25, 4, 21, 1, 1,120, 50, 53,121, 3, 2, 21, 24, 4, 21, 23, 7, 363*f94c1902Sdrh 120, 50, 52,121, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, 9, 23, 364*f94c1902Sdrh 4, 21, 0, 1,120, 50, 51,121, 15, 19, 22, 4, 21, 7, 18,120, 50, 50,121, 365*f94c1902Sdrh 64, 12, 0, 0, 0, 0, 0, 0, 85,102,119, 10, 21, 4, 21, 1, 1,120, 50, 366*f94c1902Sdrh 49,121, 2, 4, 22, 20, 4, 21, 7, 5,120, 50, 48,121, 0, 0, 0, 0, 0, 367*f94c1902Sdrh 0, 0, 0, 0, 0,128, 0, 0, 0, 12, 19, 4, 21, 1, 19,120, 49, 57,121, 368*f94c1902Sdrh 15,120,121,122, 15, 18, 4, 21, 18, 21,120, 49, 56,121, 85,102,119,102,111, 369*f94c1902Sdrh 117,114, 10, 17, 4, 21, 1, 1,120, 49, 55,121, 4, 3, 19, 16, 4, 21, 23, 370*f94c1902Sdrh 5,120, 49, 54,121, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 0, 11, 15, 4, 371*f94c1902Sdrh 21, 0, 19,120, 49, 53,121,120,121,122, 20, 14, 4, 21, 7, 21,120, 49, 52, 372*f94c1902Sdrh 121, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 10, 13, 4, 21, 1, 1, 373*f94c1902Sdrh 120, 49, 51,121, 2, 3, 21, 12, 4, 21, 7, 23,120, 49, 50,121, 0, 0, 0, 374*f94c1902Sdrh 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 8, 11, 3, 21, 1,120, 49, 49,121, 375*f94c1902Sdrh 15, 19, 10, 4, 21, 18, 7,120, 49, 48,121, 85,102,119, 64, 12, 0, 0, 0, 376*f94c1902Sdrh 0, 0, 0, 9, 9, 4, 19, 1, 1,120, 57,121, 4, 2, 21, 8, 4, 19, 5, 377*f94c1902Sdrh 7,120, 56,121, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 378*f94c1902Sdrh 7, 4, 19, 19, 1,120, 55,121,120,121,122, 15, 14, 6, 4, 19, 21, 18,120, 379*f94c1902Sdrh 54,121,102,111,117,114, 85,102,119, 9, 5, 4, 19, 1, 1,120, 53,121, 3, 380*f94c1902Sdrh 4, 18, 4, 4, 19, 23, 5,120, 52,121, 98,117, 98, 98, 97, 0, 0,128, 0, 381*f94c1902Sdrh 0, 0, 10, 3, 4, 19, 0, 19,120, 51,121,120,121,122, 19, 2, 4, 19, 7, 382*f94c1902Sdrh 21,120, 50,121, 64, 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 9, 1, 4, 383*f94c1902Sdrh 19, 1, 1,120, 49,121, 2, 3, 13, 0, 0, 0, 26, 0, 78, 0, 1,235, 1, 384*f94c1902Sdrh 223, 1,206, 1,192, 1,168, 1,156, 1,135, 1,124, 1,101, 1, 89, 1, 67, 385*f94c1902Sdrh 1, 55, 1, 34, 1, 22, 1, 5, 0,247, 0,223, 0,211, 0,190, 0,179, 0, 386*f94c1902Sdrh 156, 0,144, 0,123, 0,113, 0, 90, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 387*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 53, 4, 21, 1, 1,120, 53, 51, 388*f94c1902Sdrh 121, 2, 3, 21, 52, 4, 21, 7, 23,120, 53, 50,121, 0, 0, 0, 0, 0, 0, 389*f94c1902Sdrh 0, 0, 98,117, 98, 98, 97, 8, 51, 3, 21, 1,120, 53, 49,121, 15, 19, 50, 390*f94c1902Sdrh 4, 21, 18, 7,120, 53, 48,121, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0, 391*f94c1902Sdrh 10, 49, 4, 21, 1, 1,120, 52, 57,121, 4, 2, 21, 48, 4, 21, 23, 7,120, 392*f94c1902Sdrh 52, 56,121, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, 9, 47, 4, 393*f94c1902Sdrh 21, 0, 1,120, 52, 55,121, 15, 19, 46, 4, 21, 7, 18,120, 52, 54,121, 64, 394*f94c1902Sdrh 12, 0, 0, 0, 0, 0, 0, 85,102,119, 10, 45, 4, 21, 1, 1,120, 52, 53, 395*f94c1902Sdrh 121, 2, 4, 22, 44, 4, 21, 7, 5,120, 52, 52,121, 0, 0, 0, 0, 0, 0, 396*f94c1902Sdrh 0, 0, 0, 0,128, 0, 0, 0, 12, 43, 4, 21, 1, 19,120, 52, 51,121, 15, 397*f94c1902Sdrh 120,121,122, 15, 42, 4, 21, 18, 21,120, 52, 50,121, 85,102,119,102,111,117, 398*f94c1902Sdrh 114, 10, 41, 4, 21, 1, 1,120, 52, 49,121, 4, 3, 19, 40, 4, 21, 5, 23, 399*f94c1902Sdrh 120, 52, 48,121, 0, 0,128, 0, 0, 0, 98,117, 98, 98, 97, 10, 39, 3, 21, 400*f94c1902Sdrh 19,120, 51, 57,121,120,121,122, 20, 38, 4, 21, 21, 7,120, 51, 56,121,102, 401*f94c1902Sdrh 111,117,114, 64, 12, 0, 0, 0, 0, 0, 0, 10, 37, 4, 21, 1, 1,120, 51, 402*f94c1902Sdrh 55,121, 3, 2, 21, 36, 4, 21, 23, 7,120, 51, 54,121, 98,117, 98, 98, 97, 403*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 9, 35, 4, 21, 0, 1,120, 51, 53,121, 15, 404*f94c1902Sdrh 19, 34, 4, 21, 7, 18,120, 51, 52,121, 64, 12, 0, 0, 0, 0, 0, 0, 85, 405*f94c1902Sdrh 102,119, 10, 33, 4, 21, 1, 1,120, 51, 51,121, 2, 4, 22, 32, 4, 21, 7, 406*f94c1902Sdrh 5,120, 51, 50,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 407*f94c1902Sdrh 12, 31, 4, 21, 1, 19,120, 51, 49,121, 15,120,121,122, 15, 30, 4, 21, 18, 408*f94c1902Sdrh 21,120, 51, 48,121, 85,102,119,102,111,117,114, 10, 29, 4, 21, 1, 1,120, 409*f94c1902Sdrh 50, 57,121, 4, 3, 19, 28, 4, 21, 5, 23,120, 50, 56,121, 0, 0,128, 0, 410*f94c1902Sdrh 0, 0, 98,117, 98, 98, 97, 13, 0, 0, 0, 11, 1, 67, 0, 1,234, 1,221, 411*f94c1902Sdrh 1,200, 1,188, 1,171, 1,157, 1,133, 1,121, 1,100, 1, 90, 1, 67, 0, 412*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 413*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 414*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 415*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 416*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 417*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 419*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 420*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 421*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 422*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 423*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 424*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 425*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 426*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 21, 64, 4, 21, 7, 23,120, 54, 52,121, 0, 0, 428*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 8, 63, 3, 21, 1,120, 54, 51, 429*f94c1902Sdrh 121, 15, 19, 62, 4, 21, 18, 7,120, 54, 50,121, 85,102,119, 64, 12, 0, 0, 430*f94c1902Sdrh 0, 0, 0, 0, 10, 61, 4, 21, 1, 1,120, 54, 49,121, 4, 2, 22, 60, 4, 431*f94c1902Sdrh 21, 5, 7,120, 54, 48,121, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432*f94c1902Sdrh 0, 0, 12, 59, 4, 21, 19, 1,120, 53, 57,121,120,121,122, 15, 15, 58, 4, 433*f94c1902Sdrh 21, 21, 18,120, 53, 56,121,102,111,117,114, 85,102,119, 10, 57, 4, 21, 1, 434*f94c1902Sdrh 1,120, 53, 55,121, 3, 4, 19, 56, 4, 21, 23, 5,120, 53, 54,121, 98,117, 435*f94c1902Sdrh 98, 98, 97, 0, 0,128, 0, 0, 0, 11, 55, 4, 21, 0, 19,120, 53, 53,121, 436*f94c1902Sdrh 120,121,122, 20, 54, 4, 21, 7, 21,120, 53, 52,121, 64, 12, 0, 0, 0, 0, 437*f94c1902Sdrh 0, 0,102,111,117,114, 10, 0, 0, 0, 45, 0,112, 0, 1,247, 1,238, 1, 438*f94c1902Sdrh 229, 1,220, 1,211, 1,202, 1,193, 1,184, 1,175, 1,166, 1,159, 1,150, 439*f94c1902Sdrh 1,141, 1,132, 1,123, 1,114, 1,105, 1, 96, 1, 87, 1, 78, 1, 69, 1, 440*f94c1902Sdrh 61, 1, 52, 1, 43, 1, 34, 1, 25, 1, 16, 1, 7, 0,254, 0,245, 0,236, 441*f94c1902Sdrh 0,227, 0,219, 0,210, 0,201, 0,192, 0,183, 0,174, 0,165, 0,156, 0, 442*f94c1902Sdrh 147, 0,138, 0,129, 0,121, 0,112, 0,103, 0, 0, 0, 0, 0, 0, 9,120, 443*f94c1902Sdrh 53, 49,121, 51, 8, 3, 21, 1,120, 53, 48,121, 50, 7, 3, 19, 1,120, 52, 444*f94c1902Sdrh 121, 4, 8, 3, 21, 1,120, 52, 57,121, 49, 8, 3, 21, 1,120, 52, 56,121, 445*f94c1902Sdrh 48, 8, 3, 21, 1,120, 52, 55,121, 47, 8, 3, 21, 1,120, 52, 54,121, 46, 446*f94c1902Sdrh 8, 3, 21, 1,120, 52, 53,121, 45, 8, 3, 21, 1,120, 52, 52,121, 44, 8, 447*f94c1902Sdrh 3, 21, 1,120, 52, 51,121, 43, 8, 3, 21, 1,120, 52, 50,121, 42, 8, 3, 448*f94c1902Sdrh 21, 1,120, 52, 49,121, 41, 8, 3, 21, 1,120, 52, 48,121, 40, 7, 3, 19, 449*f94c1902Sdrh 1,120, 51,121, 3, 8, 3, 21, 1,120, 51, 57,121, 39, 8, 3, 21, 1,120, 450*f94c1902Sdrh 51, 56,121, 38, 8, 3, 21, 1,120, 51, 55,121, 37, 8, 3, 21, 1,120, 51, 451*f94c1902Sdrh 54,121, 36, 8, 3, 21, 1,120, 51, 53,121, 35, 8, 3, 21, 1,120, 51, 52, 452*f94c1902Sdrh 121, 34, 8, 3, 21, 1,120, 51, 51,121, 33, 8, 3, 21, 1,120, 51, 50,121, 453*f94c1902Sdrh 32, 8, 3, 21, 1,120, 51, 49,121, 31, 8, 3, 21, 1,120, 51, 48,121, 30, 454*f94c1902Sdrh 7, 3, 19, 1,120, 50,121, 2, 8, 3, 21, 1,120, 50, 57,121, 29, 8, 3, 455*f94c1902Sdrh 21, 1,120, 50, 56,121, 28, 8, 3, 21, 1,120, 50, 55,121, 27, 8, 3, 21, 456*f94c1902Sdrh 1,120, 50, 54,121, 26, 8, 3, 21, 1,120, 50, 53,121, 25, 8, 3, 21, 1, 457*f94c1902Sdrh 120, 50, 52,121, 24, 8, 3, 21, 1,120, 50, 51,121, 23, 8, 3, 21, 1,120, 458*f94c1902Sdrh 50, 50,121, 22, 8, 3, 21, 1,120, 50, 49,121, 21, 8, 3, 21, 1,120, 50, 459*f94c1902Sdrh 48,121, 20, 6, 3, 19, 9,120, 49,121, 8, 3, 21, 1,120, 49, 57,121, 19, 460*f94c1902Sdrh 8, 3, 21, 1,120, 49, 56,121, 18, 8, 3, 21, 1,120, 49, 55,121, 17, 8, 461*f94c1902Sdrh 3, 21, 1,120, 49, 54,121, 16, 8, 3, 21, 1,120, 49, 53,121, 15, 8, 3, 462*f94c1902Sdrh 21, 1,120, 49, 52,121, 14, 8, 3, 21, 1,120, 49, 51,121, 13, 8, 3, 21, 463*f94c1902Sdrh 1,120, 49, 50,121, 12, 8, 3, 21, 1,120, 49, 49,121, 11, 8, 3, 21, 1, 464*f94c1902Sdrh 120, 49, 48,121, 10, 10, 0, 0, 0, 18, 1, 99, 0, 1,247, 1,238, 1,229, 465*f94c1902Sdrh 1,220, 1,211, 1,202, 1,193, 1,184, 1,176, 1,167, 1,158, 1,149, 1, 466*f94c1902Sdrh 140, 1,131, 1,123, 1,115, 1,107, 1, 99, 0, 0, 0, 0, 0, 0, 0, 0, 467*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 471*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 474*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 479*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 481*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 482*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 483*f94c1902Sdrh 3, 19, 1,120, 57,121, 9, 7, 3, 19, 1,120, 56,121, 8, 7, 3, 19, 1, 484*f94c1902Sdrh 120, 55,121, 7, 7, 3, 19, 1,120, 54,121, 6, 8, 3, 21, 1,120, 54, 52, 485*f94c1902Sdrh 121, 64, 8, 3, 21, 1,120, 54, 51,121, 63, 8, 3, 21, 1,120, 54, 50,121, 486*f94c1902Sdrh 62, 8, 3, 21, 1,120, 54, 49,121, 61, 8, 3, 21, 1,120, 54, 48,121, 60, 487*f94c1902Sdrh 7, 3, 19, 1,120, 53,121, 5, 8, 3, 21, 1,120, 53, 57,121, 59, 8, 3, 488*f94c1902Sdrh 21, 1,120, 53, 56,121, 58, 8, 3, 21, 1,120, 53, 55,121, 57, 8, 3, 21, 489*f94c1902Sdrh 1,120, 53, 54,121, 56, 8, 3, 21, 1,120, 53, 53,121, 55, 8, 3, 21, 1, 490*f94c1902Sdrh 120, 53, 52,121, 54, 8, 3, 21, 1,120, 53, 51,121, 53, 8, 3, 21, 1,120, 491*f94c1902Sdrh 53, 50,121, 52, 13, 0, 0, 0, 23, 0, 54, 0, 1,240, 1,214, 1,197, 1, 492*f94c1902Sdrh 172, 1,156, 1,135, 1,117, 1, 89, 1, 73, 1, 55, 1, 41, 1, 14, 0,254, 493*f94c1902Sdrh 0,228, 0,211, 0,186, 0,170, 0,149, 0,131, 0,110, 0, 94, 0, 69, 0, 494*f94c1902Sdrh 54, 13, 23, 4, 7, 0, 1, 64, 57, 76,204,204,204,204,205, 15, 23, 22, 4, 495*f94c1902Sdrh 7, 7, 18, 64, 56, 51, 51, 51, 51, 51, 52, 64, 12, 0, 0, 0, 0, 0, 0, 496*f94c1902Sdrh 85,102,119, 14, 21, 4, 7, 1, 1, 64, 55, 25,153,153,153,153,154, 2, 4, 497*f94c1902Sdrh 19, 20, 4, 1, 7, 5, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 498*f94c1902Sdrh 0, 0, 16, 19, 4, 7, 1, 19, 64, 52,230,102,102,102,102,103, 15,120,121, 499*f94c1902Sdrh 122, 19, 18, 4, 7, 18, 21, 64, 51,204,204,204,204,204,205, 85,102,119,102, 500*f94c1902Sdrh 111,117,114, 14, 17, 4, 7, 1, 1, 64, 50,179, 51, 51, 51, 51, 52, 4, 3, 501*f94c1902Sdrh 23, 16, 4, 7, 23, 5, 64, 49,153,153,153,153,153,154, 98,117, 98, 98, 97, 502*f94c1902Sdrh 0, 0,128, 0, 0, 0, 15, 15, 4, 7, 0, 19, 64, 48,128, 0, 0, 0, 0, 503*f94c1902Sdrh 0,120,121,122, 24, 14, 4, 7, 7, 21, 64, 46,204,204,204,204,204,206, 64, 504*f94c1902Sdrh 12, 0, 0, 0, 0, 0, 0,102,111,117,114, 14, 13, 4, 7, 1, 1, 64, 44, 505*f94c1902Sdrh 153,153,153,153,153,154, 2, 3, 25, 12, 4, 7, 7, 23, 64, 42,102,102,102, 506*f94c1902Sdrh 102,102,103, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 12, 11, 3, 507*f94c1902Sdrh 7, 1, 64, 40, 51, 51, 51, 51, 51, 52, 15, 16, 10, 4, 1, 18, 7, 11, 85, 508*f94c1902Sdrh 102,119, 64, 12, 0, 0, 0, 0, 0, 0, 14, 9, 4, 7, 1, 1, 64, 35,204, 509*f94c1902Sdrh 204,204,204,204,205, 4, 2, 26, 8, 4, 7, 5, 7, 64, 33,153,153,153,153, 510*f94c1902Sdrh 153,154, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 7, 4, 511*f94c1902Sdrh 7, 19, 1, 64, 30,204,204,204,204,204,206,120,121,122, 15, 19, 6, 4, 7, 512*f94c1902Sdrh 21, 18, 64, 26,102,102,102,102,102,103,102,111,117,114, 85,102,119, 14, 5, 513*f94c1902Sdrh 4, 7, 1, 1, 64, 22, 0, 0, 0, 0, 0, 0, 3, 4, 23, 4, 4, 7, 23, 514*f94c1902Sdrh 5, 64, 17,153,153,153,153,153,154, 98,117, 98, 98, 97, 0, 0,128, 0, 0, 515*f94c1902Sdrh 0, 15, 3, 4, 7, 0, 19, 64, 10,102,102,102,102,102,103,120,121,122, 24, 516*f94c1902Sdrh 2, 4, 7, 7, 21, 64, 1,153,153,153,153,153,154, 64, 12, 0, 0, 0, 0, 517*f94c1902Sdrh 0, 0,102,111,117,114, 14, 1, 4, 7, 1, 1, 63,241,153,153,153,153,153, 518*f94c1902Sdrh 154, 2, 3, 13, 0, 0, 0, 22, 0, 68, 0, 1,229, 1,213, 1,187, 1,171, 519*f94c1902Sdrh 1,146, 1,130, 1,116, 1, 98, 1, 70, 1, 54, 1, 29, 1, 14, 0,243, 0, 520*f94c1902Sdrh 227, 0,201, 0,185, 0,167, 0,151, 0,130, 0,112, 0, 84, 0, 68, 0, 0, 521*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 45, 4, 7, 1, 522*f94c1902Sdrh 1, 64, 72,192, 0, 0, 0, 0, 1, 2, 4, 26, 44, 4, 7, 7, 5, 64, 72, 523*f94c1902Sdrh 51, 51, 51, 51, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 524*f94c1902Sdrh 0, 16, 43, 4, 7, 1, 19, 64, 71,166,102,102,102,102,103, 15,120,121,122, 525*f94c1902Sdrh 19, 42, 4, 7, 18, 21, 64, 71, 25,153,153,153,153,154, 85,102,119,102,111, 526*f94c1902Sdrh 117,114, 14, 41, 4, 7, 1, 1, 64, 70,140,204,204,204,204,205, 4, 3, 16, 527*f94c1902Sdrh 40, 4, 1, 5, 23, 44, 0, 0,128, 0, 0, 0, 98,117, 98, 98, 97, 14, 39, 528*f94c1902Sdrh 3, 7, 19, 64, 69,115, 51, 51, 51, 51, 52,120,121,122, 24, 38, 4, 7, 21, 529*f94c1902Sdrh 7, 64, 68,230,102,102,102,102,103,102,111,117,114, 64, 12, 0, 0, 0, 0, 530*f94c1902Sdrh 0, 0, 14, 37, 4, 7, 1, 1, 64, 68, 89,153,153,153,153,154, 3, 2, 25, 531*f94c1902Sdrh 36, 4, 7, 23, 7, 64, 67,204,204,204,204,204,205, 98,117, 98, 98, 97, 0, 532*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 13, 35, 4, 7, 0, 1, 64, 67, 64, 0, 0, 0, 533*f94c1902Sdrh 0, 0, 15, 23, 34, 4, 7, 7, 18, 64, 66,179, 51, 51, 51, 51, 52, 64, 12, 534*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 85,102,119, 14, 33, 4, 7, 1, 1, 64, 66, 38,102, 535*f94c1902Sdrh 102,102,102,103, 2, 4, 26, 32, 4, 7, 7, 5, 64, 65,153,153,153,153,153, 536*f94c1902Sdrh 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 16, 31, 4, 7, 537*f94c1902Sdrh 1, 19, 64, 65, 12,204,204,204,204,205, 15,120,121,122, 12, 30, 4, 1, 18, 538*f94c1902Sdrh 21, 33, 85,102,119,102,111,117,114, 14, 29, 4, 7, 1, 1, 64, 63,230,102, 539*f94c1902Sdrh 102,102,102,103, 4, 3, 23, 28, 4, 7, 5, 23, 64, 62,204,204,204,204,204, 540*f94c1902Sdrh 206, 0, 0,128, 0, 0, 0, 98,117, 98, 98, 97, 14, 27, 3, 7, 19, 64, 61, 541*f94c1902Sdrh 179, 51, 51, 51, 51, 52,120,121,122, 24, 26, 4, 7, 21, 7, 64, 60,153,153, 542*f94c1902Sdrh 153,153,153,154,102,111,117,114, 64, 12, 0, 0, 0, 0, 0, 0, 14, 25, 4, 543*f94c1902Sdrh 7, 1, 1, 64, 59,128, 0, 0, 0, 0, 1, 3, 2, 25, 24, 4, 7, 23, 7, 544*f94c1902Sdrh 64, 58,102,102,102,102,102,103, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 545*f94c1902Sdrh 0, 0, 13, 0, 0, 0, 19, 0,121, 0, 1,231, 1,216, 1,189, 1,173, 1, 546*f94c1902Sdrh 148, 1,134, 1,107, 1, 91, 1, 65, 1, 48, 1, 23, 1, 7, 0,242, 0,224, 547*f94c1902Sdrh 0,203, 0,187, 0,162, 0,148, 0,121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 548*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 550*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 551*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 64, 4, 7, 7, 23, 64, 81,153,153, 552*f94c1902Sdrh 153,153,153,154, 0, 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 12, 63, 553*f94c1902Sdrh 3, 7, 1, 64, 81, 83, 51, 51, 51, 51, 52, 15, 23, 62, 4, 7, 18, 7, 64, 554*f94c1902Sdrh 81, 12,204,204,204,204,205, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0, 14, 555*f94c1902Sdrh 61, 4, 7, 1, 1, 64, 80,198,102,102,102,102,103, 4, 2, 19, 60, 4, 1, 556*f94c1902Sdrh 5, 7, 66, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 59, 557*f94c1902Sdrh 4, 7, 19, 1, 64, 80, 57,153,153,153,153,154,120,121,122, 15, 19, 58, 4, 558*f94c1902Sdrh 7, 21, 18, 64, 79,230,102,102,102,102,103,102,111,117,114, 85,102,119, 14, 559*f94c1902Sdrh 57, 4, 7, 1, 1, 64, 79, 89,153,153,153,153,154, 3, 4, 23, 56, 4, 7, 560*f94c1902Sdrh 23, 5, 64, 78,204,204,204,204,204,206, 98,117, 98, 98, 97, 0, 0,128, 0, 561*f94c1902Sdrh 0, 0, 15, 55, 4, 7, 0, 19, 64, 78, 64, 0, 0, 0, 0, 1,120,121,122, 562*f94c1902Sdrh 24, 54, 4, 7, 7, 21, 64, 77,179, 51, 51, 51, 51, 52, 64, 12, 0, 0, 0, 563*f94c1902Sdrh 0, 0, 0,102,111,117,114, 14, 53, 4, 7, 1, 1, 64, 77, 38,102,102,102, 564*f94c1902Sdrh 102,103, 2, 3, 25, 52, 4, 7, 7, 23, 64, 76,153,153,153,153,153,154, 0, 565*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 98,117, 98, 98, 97, 12, 51, 3, 7, 1, 64, 76, 566*f94c1902Sdrh 12,204,204,204,204,205, 15, 23, 50, 4, 7, 18, 7, 64, 75,128, 0, 0, 0, 567*f94c1902Sdrh 0, 1, 85,102,119, 64, 12, 0, 0, 0, 0, 0, 0, 14, 49, 4, 7, 1, 1, 568*f94c1902Sdrh 64, 74,243, 51, 51, 51, 51, 52, 4, 2, 25, 48, 4, 7, 23, 7, 64, 74,102, 569*f94c1902Sdrh 102,102,102,102,103, 98,117, 98, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, 13, 570*f94c1902Sdrh 47, 4, 7, 0, 1, 64, 73,217,153,153,153,153,154, 15, 23, 46, 4, 7, 7, 571*f94c1902Sdrh 18, 64, 73, 76,204,204,204,204,205, 64, 12, 0, 0, 0, 0, 0, 0, 85,102, 572*f94c1902Sdrh 119, 10, 0, 0, 0, 34, 0, 92, 0, 1,244, 1,231, 1,218, 1,205, 1,192, 573*f94c1902Sdrh 1,179, 1,166, 1,153, 1,140, 1,134, 1,121, 1,108, 1, 95, 1, 82, 1, 574*f94c1902Sdrh 69, 1, 56, 1, 43, 1, 30, 1, 17, 1, 11, 0,254, 0,241, 0,228, 0,215, 575*f94c1902Sdrh 0,202, 0,189, 0,176, 0,163, 0,150, 0,144, 0,131, 0,118, 0,105, 0, 576*f94c1902Sdrh 92, 0, 79, 0, 0, 0, 0, 13, 64, 67, 64, 0, 0, 0, 0, 0, 35, 12, 3, 577*f94c1902Sdrh 7, 1, 64, 66,179, 51, 51, 51, 51, 52, 34, 12, 3, 7, 1, 64, 66, 38,102, 578*f94c1902Sdrh 102,102,102,103, 33, 12, 3, 7, 1, 64, 65,153,153,153,153,153,154, 32, 12, 579*f94c1902Sdrh 3, 7, 1, 64, 65, 12,204,204,204,204,205, 31, 5, 3, 1, 1, 33, 30, 12, 580*f94c1902Sdrh 3, 7, 1, 64, 63,230,102,102,102,102,103, 29, 12, 3, 7, 1, 64, 62,204, 581*f94c1902Sdrh 204,204,204,204,206, 28, 12, 3, 7, 1, 64, 61,179, 51, 51, 51, 51, 52, 27, 582*f94c1902Sdrh 12, 3, 7, 1, 64, 60,153,153,153,153,153,154, 26, 12, 3, 7, 1, 64, 59, 583*f94c1902Sdrh 128, 0, 0, 0, 0, 1, 25, 12, 3, 7, 1, 64, 58,102,102,102,102,102,103, 584*f94c1902Sdrh 24, 12, 3, 7, 1, 64, 57, 76,204,204,204,204,205, 23, 12, 3, 7, 1, 64, 585*f94c1902Sdrh 56, 51, 51, 51, 51, 51, 52, 22, 12, 3, 7, 1, 64, 55, 25,153,153,153,153, 586*f94c1902Sdrh 154, 21, 5, 3, 1, 1, 22, 20, 12, 3, 7, 1, 64, 52,230,102,102,102,102, 587*f94c1902Sdrh 103, 19, 12, 3, 7, 1, 64, 51,204,204,204,204,204,205, 18, 12, 3, 7, 1, 588*f94c1902Sdrh 64, 50,179, 51, 51, 51, 51, 52, 17, 12, 3, 7, 1, 64, 49,153,153,153,153, 589*f94c1902Sdrh 153,154, 16, 12, 3, 7, 1, 64, 48,128, 0, 0, 0, 0, 0, 15, 12, 3, 7, 590*f94c1902Sdrh 1, 64, 46,204,204,204,204,204,206, 14, 12, 3, 7, 1, 64, 44,153,153,153, 591*f94c1902Sdrh 153,153,154, 13, 12, 3, 7, 1, 64, 42,102,102,102,102,102,103, 12, 12, 3, 592*f94c1902Sdrh 7, 1, 64, 40, 51, 51, 51, 51, 51, 52, 11, 5, 3, 1, 1, 11, 10, 12, 3, 593*f94c1902Sdrh 7, 1, 64, 35,204,204,204,204,204,205, 9, 12, 3, 7, 1, 64, 33,153,153, 594*f94c1902Sdrh 153,153,153,154, 8, 12, 3, 7, 1, 64, 30,204,204,204,204,204,206, 7, 12, 595*f94c1902Sdrh 3, 7, 1, 64, 26,102,102,102,102,102,103, 6, 12, 3, 7, 1, 64, 22, 0, 596*f94c1902Sdrh 0, 0, 0, 0, 0, 5, 12, 3, 7, 1, 64, 17,153,153,153,153,153,154, 4, 597*f94c1902Sdrh 12, 3, 7, 1, 64, 10,102,102,102,102,102,103, 3, 12, 3, 7, 1, 64, 1, 598*f94c1902Sdrh 153,153,153,153,153,154, 2, 11, 3, 7, 9, 63,241,153,153,153,153,153,154, 599*f94c1902Sdrh 10, 0, 0, 0, 29, 0,149, 0, 1,243, 1,230, 1,217, 1,204, 1,198, 1, 600*f94c1902Sdrh 185, 1,172, 1,159, 1,146, 1,133, 1,120, 1,107, 1, 94, 1, 81, 1, 68, 601*f94c1902Sdrh 1, 55, 1, 42, 1, 29, 1, 16, 1, 3, 0,246, 0,233, 0,220, 0,207, 0, 602*f94c1902Sdrh 201, 0,188, 0,175, 0,162, 0,149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 604*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 605*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 3, 7, 607*f94c1902Sdrh 1, 64, 81,153,153,153,153,153,154, 64, 12, 3, 7, 1, 64, 81, 83, 51, 51, 608*f94c1902Sdrh 51, 51, 52, 63, 12, 3, 7, 1, 64, 81, 12,204,204,204,204,205, 62, 12, 3, 609*f94c1902Sdrh 7, 1, 64, 80,198,102,102,102,102,103, 61, 5, 3, 1, 1, 66, 60, 12, 3, 610*f94c1902Sdrh 7, 1, 64, 80, 57,153,153,153,153,154, 59, 12, 3, 7, 1, 64, 79,230,102, 611*f94c1902Sdrh 102,102,102,103, 58, 12, 3, 7, 1, 64, 79, 89,153,153,153,153,154, 57, 12, 612*f94c1902Sdrh 3, 7, 1, 64, 78,204,204,204,204,204,206, 56, 12, 3, 7, 1, 64, 78, 64, 613*f94c1902Sdrh 0, 0, 0, 0, 1, 55, 12, 3, 7, 1, 64, 77,179, 51, 51, 51, 51, 52, 54, 614*f94c1902Sdrh 12, 3, 7, 1, 64, 77, 38,102,102,102,102,103, 53, 12, 3, 7, 1, 64, 76, 615*f94c1902Sdrh 153,153,153,153,153,154, 52, 12, 3, 7, 1, 64, 76, 12,204,204,204,204,205, 616*f94c1902Sdrh 51, 12, 3, 7, 1, 64, 75,128, 0, 0, 0, 0, 1, 50, 12, 3, 7, 1, 64, 617*f94c1902Sdrh 74,243, 51, 51, 51, 51, 52, 49, 12, 3, 7, 1, 64, 74,102,102,102,102,102, 618*f94c1902Sdrh 103, 48, 12, 3, 7, 1, 64, 73,217,153,153,153,153,154, 47, 12, 3, 7, 1, 619*f94c1902Sdrh 64, 73, 76,204,204,204,204,205, 46, 12, 3, 7, 1, 64, 72,192, 0, 0, 0, 620*f94c1902Sdrh 0, 1, 45, 12, 3, 7, 1, 64, 72, 51, 51, 51, 51, 51, 52, 44, 12, 3, 7, 621*f94c1902Sdrh 1, 64, 71,166,102,102,102,102,103, 43, 12, 3, 7, 1, 64, 71, 25,153,153, 622*f94c1902Sdrh 153,153,154, 42, 12, 3, 7, 1, 64, 70,140,204,204,204,204,205, 41, 5, 3, 623*f94c1902Sdrh 1, 1, 44, 40, 12, 3, 7, 1, 64, 69,115, 51, 51, 51, 51, 52, 39, 12, 3, 624*f94c1902Sdrh 7, 1, 64, 68,230,102,102,102,102,103, 38, 12, 3, 7, 1, 64, 68, 89,153, 625*f94c1902Sdrh 153,153,153,154, 37, 12, 3, 7, 1, 64, 67,204,204,204,204,204,205, 36, 10, 626*f94c1902Sdrh 0, 0, 0, 41, 0,103, 0, 1,250, 1,235, 1,227, 1,218, 1,211, 1,202, 627*f94c1902Sdrh 1,192, 1,179, 1,172, 1,157, 1,149, 1,141, 1,132, 1,125, 1,116, 1, 628*f94c1902Sdrh 106, 1, 93, 1, 86, 1, 74, 1, 63, 1, 47, 1, 40, 1, 31, 1, 16, 1, 8, 629*f94c1902Sdrh 0,255, 0,248, 0,239, 0,229, 0,216, 0,209, 0,197, 0,186, 0,174, 0, 630*f94c1902Sdrh 158, 0,151, 0,136, 0,128, 0,119, 0,112, 0,103, 0, 93, 0, 0, 0, 0, 631*f94c1902Sdrh 10, 55, 44, 78, 85, 76, 76, 8, 2, 25, 52, 54, 44, 51, 46, 53, 6, 2, 21, 632*f94c1902Sdrh 52, 53, 44, 50, 8, 2, 25, 52, 52, 44, 48, 46, 48, 7, 2, 23, 52, 51, 44, 633*f94c1902Sdrh 49, 53, 14, 2, 37, 52, 50, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39, 6, 2, 634*f94c1902Sdrh 21, 52, 49, 44, 52, 15, 2, 39, 52, 48, 44, 50, 49, 52, 55, 52, 56, 51, 54, 635*f94c1902Sdrh 52, 56, 11, 2, 31, 52, 44, 39, 98,117, 98, 98, 97, 39, 10, 2, 29, 51, 57, 636*f94c1902Sdrh 44, 39,120,121,122, 39, 11, 2, 31, 51, 56, 44, 39,102,111,117,114, 39, 6, 637*f94c1902Sdrh 2, 21, 51, 55, 44, 51, 12, 2, 33, 51, 54, 44, 39, 98,117, 98, 98, 97, 39, 638*f94c1902Sdrh 9, 2, 27, 51, 53, 44, 78, 85, 76, 76, 8, 2, 25, 51, 52, 44, 51, 46, 53, 639*f94c1902Sdrh 6, 2, 21, 51, 51, 44, 50, 8, 2, 25, 51, 50, 44, 48, 46, 48, 7, 2, 23, 640*f94c1902Sdrh 51, 49, 44, 49, 53, 14, 2, 37, 51, 48, 44, 88, 39, 53, 53, 54, 54, 55, 55, 641*f94c1902Sdrh 39, 8, 2, 25, 51, 44, 78, 85, 76, 76, 6, 2, 21, 50, 57, 44, 52, 15, 2, 642*f94c1902Sdrh 39, 50, 56, 44, 50, 49, 52, 55, 52, 56, 51, 54, 52, 56, 10, 2, 29, 50, 55, 643*f94c1902Sdrh 44, 39,120,121,122, 39, 11, 2, 31, 50, 54, 44, 39,102,111,117,114, 39, 6, 644*f94c1902Sdrh 2, 21, 50, 53, 44, 51, 12, 2, 33, 50, 52, 44, 39, 98,117, 98, 98, 97, 39, 645*f94c1902Sdrh 9, 2, 27, 50, 51, 44, 78, 85, 76, 76, 8, 2, 25, 50, 50, 44, 51, 46, 53, 646*f94c1902Sdrh 6, 2, 21, 50, 49, 44, 50, 8, 2, 25, 50, 48, 44, 48, 46, 48, 7, 2, 23, 647*f94c1902Sdrh 50, 44, 51, 46, 53, 7, 2, 23, 49, 57, 44, 49, 53, 14, 2, 37, 49, 56, 44, 648*f94c1902Sdrh 88, 39, 53, 53, 54, 54, 55, 55, 39, 6, 2, 21, 49, 55, 44, 52, 12, 2, 33, 649*f94c1902Sdrh 49, 54, 44, 39, 98,117, 98, 98, 97, 39, 9, 2, 27, 49, 53, 44, 78, 85, 76, 650*f94c1902Sdrh 76, 8, 2, 25, 49, 52, 44, 51, 46, 53, 6, 2, 21, 49, 51, 44, 50, 8, 2, 651*f94c1902Sdrh 25, 49, 50, 44, 48, 46, 48, 7, 2, 23, 49, 49, 44, 49, 53, 14, 2, 37, 49, 652*f94c1902Sdrh 48, 44, 88, 39, 53, 53, 54, 54, 55, 55, 39, 5, 2, 19, 49, 44, 50, 10, 0, 653*f94c1902Sdrh 0, 0, 22, 1, 32, 0, 1,243, 1,236, 1,230, 1,215, 1,207, 1,198, 1, 654*f94c1902Sdrh 191, 1,182, 1,172, 1,159, 1,152, 1,140, 1,129, 1,118, 1,102, 1, 95, 655*f94c1902Sdrh 1, 80, 1, 72, 1, 63, 1, 53, 1, 38, 1, 32, 0, 0, 0, 0, 0, 0, 0, 656*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 657*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 658*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 659*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 661*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 662*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 663*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 664*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 665*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 666*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 667*f94c1902Sdrh 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 668*f94c1902Sdrh 0, 5, 2, 19, 57, 44, 52, 14, 2, 37, 56, 44, 50, 49, 52, 55, 52, 56, 51, 669*f94c1902Sdrh 54, 52, 56, 9, 2, 27, 55, 44, 39,120,121,122, 39, 8, 2, 25, 54, 52, 44, 670*f94c1902Sdrh 48, 46, 48, 7, 2, 23, 54, 51, 44, 49, 53, 14, 2, 37, 54, 50, 44, 88, 39, 671*f94c1902Sdrh 53, 53, 54, 54, 55, 55, 39, 6, 2, 21, 54, 49, 44, 52, 15, 2, 39, 54, 48, 672*f94c1902Sdrh 44, 50, 49, 52, 55, 52, 56, 51, 54, 52, 56, 10, 2, 29, 54, 44, 39,102,111, 673*f94c1902Sdrh 117,114, 39, 10, 2, 29, 53, 57, 44, 39,120,121,122, 39, 11, 2, 31, 53, 56, 674*f94c1902Sdrh 44, 39,102,111,117,114, 39, 6, 2, 21, 53, 55, 44, 51, 12, 2, 33, 53, 54, 675*f94c1902Sdrh 44, 39, 98,117, 98, 98, 97, 39, 9, 2, 27, 53, 53, 44, 78, 85, 76, 76, 8, 676*f94c1902Sdrh 2, 25, 53, 52, 44, 51, 46, 53, 6, 2, 21, 53, 51, 44, 50, 8, 2, 25, 53, 677*f94c1902Sdrh 50, 44, 48, 46, 48, 7, 2, 23, 53, 49, 44, 49, 53, 14, 2, 37, 53, 48, 44, 678*f94c1902Sdrh 88, 39, 53, 53, 54, 54, 55, 55, 39, 5, 2, 19, 53, 44, 51, 6, 2, 21, 52, 679*f94c1902Sdrh 57, 44, 52, 12, 2, 33, 52, 56, 44, 39, 98,117, 98, 98, 97, 39, 680*f94c1902Sdrh }; 681*f94c1902Sdrh 682*f94c1902Sdrh /* Help message */ 683*f94c1902Sdrh static const char zHelp[] = 684*f94c1902Sdrh "Usage:\n" 685*f94c1902Sdrh " sessionfuzz setup -- Generate seed files c1.txt, c2.txt, etc.\n" 686*f94c1902Sdrh " sessionfuzz run FILE ... -- Run against fuzzed changeset FILE\n" 687*f94c1902Sdrh " sessionfuzz run SQLAR ... -- Run against all files in the SQL Archive\n" 688*f94c1902Sdrh ; 689*f94c1902Sdrh 690*f94c1902Sdrh #include <stdio.h> 691*f94c1902Sdrh #include <string.h> 692*f94c1902Sdrh #include <assert.h> 693*f94c1902Sdrh #include "zlib.h" 694*f94c1902Sdrh 695*f94c1902Sdrh /* 696*f94c1902Sdrh ** Implementation of the "sqlar_uncompress(X,SZ)" SQL function 697*f94c1902Sdrh ** 698*f94c1902Sdrh ** Parameter SZ is interpreted as an integer. If it is less than or 699*f94c1902Sdrh ** equal to zero, then this function returns a copy of X. Or, if 700*f94c1902Sdrh ** SZ is equal to the size of X when interpreted as a blob, also 701*f94c1902Sdrh ** return a copy of X. Otherwise, decompress blob X using zlib 702*f94c1902Sdrh ** utility function uncompress() and return the results (another 703*f94c1902Sdrh ** blob). 704*f94c1902Sdrh */ 705*f94c1902Sdrh static void sqlarUncompressFunc( 706*f94c1902Sdrh sqlite3_context *context, 707*f94c1902Sdrh int argc, 708*f94c1902Sdrh sqlite3_value **argv 709*f94c1902Sdrh ){ 710*f94c1902Sdrh uLong nData; 711*f94c1902Sdrh uLongf sz; 712*f94c1902Sdrh 713*f94c1902Sdrh assert( argc==2 ); 714*f94c1902Sdrh sz = sqlite3_value_int(argv[1]); 715*f94c1902Sdrh 716*f94c1902Sdrh if( sz<=0 || sz==(nData = sqlite3_value_bytes(argv[0])) ){ 717*f94c1902Sdrh sqlite3_result_value(context, argv[0]); 718*f94c1902Sdrh }else{ 719*f94c1902Sdrh const Bytef *pData= sqlite3_value_blob(argv[0]); 720*f94c1902Sdrh Bytef *pOut = sqlite3_malloc(sz); 721*f94c1902Sdrh if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){ 722*f94c1902Sdrh sqlite3_result_error(context, "error in uncompress()", -1); 723*f94c1902Sdrh }else{ 724*f94c1902Sdrh sqlite3_result_blob(context, pOut, sz, SQLITE_TRANSIENT); 725*f94c1902Sdrh } 726*f94c1902Sdrh sqlite3_free(pOut); 727*f94c1902Sdrh } 728*f94c1902Sdrh } 729*f94c1902Sdrh 730*f94c1902Sdrh 731*f94c1902Sdrh /* Run a chunk of SQL. If any errors happen, print an error message 732*f94c1902Sdrh ** and exit. 733*f94c1902Sdrh */ 734*f94c1902Sdrh static void runSql(sqlite3 *db, const char *zSql){ 735*f94c1902Sdrh int rc; 736*f94c1902Sdrh char *zErr = 0; 737*f94c1902Sdrh rc = sqlite3_exec(db, zSql, 0, 0, &zErr); 738*f94c1902Sdrh if( rc || zErr ){ 739*f94c1902Sdrh fprintf(stderr, "SQL failed: rc=%d zErr=[%s]\n", rc, zErr); 740*f94c1902Sdrh fprintf(stderr, "SQL: [%s]\n", zSql); 741*f94c1902Sdrh exit(1); 742*f94c1902Sdrh } 743*f94c1902Sdrh } 744*f94c1902Sdrh 745*f94c1902Sdrh /* 746*f94c1902Sdrh ** Write buffer to disk 747*f94c1902Sdrh */ 748*f94c1902Sdrh static void writeFile(const char *zFilename, const void *pData, int nData){ 749*f94c1902Sdrh FILE *out; 750*f94c1902Sdrh int n; 751*f94c1902Sdrh out = fopen(zFilename, "wb"); 752*f94c1902Sdrh if( out==0 ){ 753*f94c1902Sdrh fprintf(stderr, "cannot open \"%s\" for writing\n", zFilename); 754*f94c1902Sdrh exit(1); 755*f94c1902Sdrh } 756*f94c1902Sdrh n = (int)fwrite(pData, 1, nData, out); 757*f94c1902Sdrh fclose(out); 758*f94c1902Sdrh if( n!=nData ){ 759*f94c1902Sdrh fprintf(stderr, "only wrote %d of %d bytes to \"%s\"\n",n,nData,zFilename); 760*f94c1902Sdrh exit(1); 761*f94c1902Sdrh } 762*f94c1902Sdrh } 763*f94c1902Sdrh 764*f94c1902Sdrh /* 765*f94c1902Sdrh ** Generate a changeset from session pSess and write it to zFile 766*f94c1902Sdrh */ 767*f94c1902Sdrh static void makeChangeset(const char *zFile, sqlite3_session *pSess){ 768*f94c1902Sdrh void *pChg; 769*f94c1902Sdrh int nChg; 770*f94c1902Sdrh int rc; 771*f94c1902Sdrh rc = sqlite3session_changeset(pSess, &nChg, &pChg); 772*f94c1902Sdrh if( rc ){ 773*f94c1902Sdrh fprintf(stderr, "sqlite3session_changeset() returned %d\n", rc); 774*f94c1902Sdrh exit(1); 775*f94c1902Sdrh } 776*f94c1902Sdrh writeFile(zFile, pChg, nChg); 777*f94c1902Sdrh sqlite3_free(pChg); 778*f94c1902Sdrh } 779*f94c1902Sdrh 780*f94c1902Sdrh /* 781*f94c1902Sdrh ** Read a file from disk. Space to hold the answer is obtained from 782*f94c1902Sdrh ** sqlite3_malloc64(). 783*f94c1902Sdrh */ 784*f94c1902Sdrh static void readFile(const char *zName, void **ppData, int *pnData){ 785*f94c1902Sdrh FILE *in = fopen(zName, "rb"); 786*f94c1902Sdrh long nIn; 787*f94c1902Sdrh size_t nRead; 788*f94c1902Sdrh char *pBuf; 789*f94c1902Sdrh *ppData = 0; 790*f94c1902Sdrh *pnData = 0; 791*f94c1902Sdrh if( in==0 ){ 792*f94c1902Sdrh fprintf(stderr, "Cannot open \"%s\" for reading\n", zName); 793*f94c1902Sdrh exit(1); 794*f94c1902Sdrh } 795*f94c1902Sdrh fseek(in, 0, SEEK_END); 796*f94c1902Sdrh nIn = ftell(in); 797*f94c1902Sdrh rewind(in); 798*f94c1902Sdrh pBuf = sqlite3_malloc64( nIn+1 ); 799*f94c1902Sdrh if( pBuf==0 ){ 800*f94c1902Sdrh fprintf(stderr, "Failed to malloc %lld bytes\n", (sqlite3_int64)(nIn+1)); 801*f94c1902Sdrh exit(1); 802*f94c1902Sdrh } 803*f94c1902Sdrh nRead = fread(pBuf, 1, nIn, in); 804*f94c1902Sdrh fclose(in); 805*f94c1902Sdrh if( nRead!=nIn ){ 806*f94c1902Sdrh fprintf(stderr, "Read only %d of %d bytes from %s\n", (int)nRead, (int)nIn, 807*f94c1902Sdrh zName); 808*f94c1902Sdrh exit(1); 809*f94c1902Sdrh } 810*f94c1902Sdrh pBuf[nIn] = 0; 811*f94c1902Sdrh *pnData = nIn; 812*f94c1902Sdrh *ppData = pBuf; 813*f94c1902Sdrh } 814*f94c1902Sdrh 815*f94c1902Sdrh /* 816*f94c1902Sdrh ** The conflict callback 817*f94c1902Sdrh */ 818*f94c1902Sdrh static int conflictCall( 819*f94c1902Sdrh void *NotUsed, 820*f94c1902Sdrh int eConflict, 821*f94c1902Sdrh sqlite3_changeset_iter *p 822*f94c1902Sdrh ){ 823*f94c1902Sdrh (void)NotUsed; 824*f94c1902Sdrh (void)p; 825*f94c1902Sdrh printf("Conflict %d\n", eConflict); 826*f94c1902Sdrh return SQLITE_CHANGESET_OMIT; 827*f94c1902Sdrh } 828*f94c1902Sdrh 829*f94c1902Sdrh /* 830*f94c1902Sdrh ** Reset the database file 831*f94c1902Sdrh */ 832*f94c1902Sdrh static void db_reset(sqlite3 *db){ 833*f94c1902Sdrh unsigned char *pData; 834*f94c1902Sdrh int nData; 835*f94c1902Sdrh int rc; 836*f94c1902Sdrh 837*f94c1902Sdrh nData = sizeof(aDbBytes); 838*f94c1902Sdrh pData = sqlite3_malloc64( nData ); 839*f94c1902Sdrh if( pData==0 ){ 840*f94c1902Sdrh fprintf(stderr, "could not allocate %d bytes\n", nData); 841*f94c1902Sdrh exit(1); 842*f94c1902Sdrh } 843*f94c1902Sdrh memcpy(pData, aDbBytes, nData); 844*f94c1902Sdrh rc = sqlite3_deserialize(db, 0, pData, nData, nData, 845*f94c1902Sdrh SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE); 846*f94c1902Sdrh if( rc ){ 847*f94c1902Sdrh fprintf(stderr, "sqlite3_deserialize() failed with %d: %s\n", 848*f94c1902Sdrh rc, sqlite3_errmsg(db)); 849*f94c1902Sdrh exit(1); 850*f94c1902Sdrh } 851*f94c1902Sdrh } 852*f94c1902Sdrh 853*f94c1902Sdrh /* 854*f94c1902Sdrh ** Given a full file pathname, return a pointer to the tail. 855*f94c1902Sdrh ** Example: 856*f94c1902Sdrh ** 857*f94c1902Sdrh ** input: /home/drh/sqlite/abc.db 858*f94c1902Sdrh ** output: abc.db 859*f94c1902Sdrh */ 860*f94c1902Sdrh static const char *fileTail(const char *z){ 861*f94c1902Sdrh const char *zOut = z; 862*f94c1902Sdrh while( z[0] ){ 863*f94c1902Sdrh if( z[0]=='/' && z[1]!=0 ) zOut = &z[1]; 864*f94c1902Sdrh z++; 865*f94c1902Sdrh } 866*f94c1902Sdrh return zOut; 867*f94c1902Sdrh } 868*f94c1902Sdrh 869*f94c1902Sdrh int main(int argc, char **argv){ 870*f94c1902Sdrh const char *zCmd; 871*f94c1902Sdrh sqlite3 *db; 872*f94c1902Sdrh int rc; 873*f94c1902Sdrh sqlite3_session *pSess; 874*f94c1902Sdrh sqlite3_stmt *pStmt; 875*f94c1902Sdrh void *pChgset; 876*f94c1902Sdrh int nChgset; 877*f94c1902Sdrh int bVerbose = 0; 878*f94c1902Sdrh 879*f94c1902Sdrh if( argc<2 ){ 880*f94c1902Sdrh fprintf(stderr, "%s", zHelp); 881*f94c1902Sdrh exit(1); 882*f94c1902Sdrh } 883*f94c1902Sdrh rc = sqlite3_open_v2(":memory:",&db, 884*f94c1902Sdrh SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, "memdb"); 885*f94c1902Sdrh if( rc ){ 886*f94c1902Sdrh fprintf(stderr, "Failed to open :memory: database: %s\n", 887*f94c1902Sdrh sqlite3_errmsg(db)); 888*f94c1902Sdrh exit(1); 889*f94c1902Sdrh } 890*f94c1902Sdrh db_reset(db); 891*f94c1902Sdrh zCmd = argv[1]; 892*f94c1902Sdrh if( strcmp(zCmd, "setup")==0 ){ 893*f94c1902Sdrh if( argc!=2 ){ 894*f94c1902Sdrh fprintf(stdout, "Wrong number of arguments.\n%s", zHelp); 895*f94c1902Sdrh exit(1); 896*f94c1902Sdrh } 897*f94c1902Sdrh runSql(db, zFillSql); 898*f94c1902Sdrh rc = sqlite3session_create(db, "main", &pSess); 899*f94c1902Sdrh if( rc ){ 900*f94c1902Sdrh fprintf(stderr, "sqlite3session_create() returns %d\n", rc); 901*f94c1902Sdrh exit(1); 902*f94c1902Sdrh } 903*f94c1902Sdrh rc = sqlite3session_attach(pSess, 0); 904*f94c1902Sdrh if( rc ){ 905*f94c1902Sdrh fprintf(stderr, "sqlite3session_attach(db,0) returns %d\n", rc); 906*f94c1902Sdrh exit(1); 907*f94c1902Sdrh } 908*f94c1902Sdrh runSql(db, "INSERT INTO t4(z) VALUES('');"); 909*f94c1902Sdrh makeChangeset("c1.txt", pSess); 910*f94c1902Sdrh runSql(db, 911*f94c1902Sdrh "UPDATE t1 SET b=c, c=b WHERE a IN (5,7);\n" 912*f94c1902Sdrh "DELETE FROM t2 WHERE rowid IN (8,2);\n" 913*f94c1902Sdrh "INSERT OR IGNORE INTO t4 SELECT b FROM t1 WHERE b IS TRUE LIMIT 2;"); 914*f94c1902Sdrh makeChangeset("c2.txt", pSess); 915*f94c1902Sdrh runSql(db, "UPDATE t3 SET x=y, y=NULL WHERE rowid IN (1,3);"); 916*f94c1902Sdrh makeChangeset("c3.txt", pSess); 917*f94c1902Sdrh sqlite3session_delete(pSess); 918*f94c1902Sdrh }else 919*f94c1902Sdrh if( strcmp(zCmd, "run")==0 ){ 920*f94c1902Sdrh int i; 921*f94c1902Sdrh if( argc<3 ){ 922*f94c1902Sdrh fprintf(stdout, "Wrong number of arguments.\n%s", zHelp); 923*f94c1902Sdrh exit(1); 924*f94c1902Sdrh } 925*f94c1902Sdrh for(i=2; i<argc; i++){ 926*f94c1902Sdrh if( strcmp(argv[i],"-v")==0 ){ 927*f94c1902Sdrh bVerbose = 1; 928*f94c1902Sdrh continue; 929*f94c1902Sdrh } 930*f94c1902Sdrh readFile(argv[i], &pChgset, &nChgset); 931*f94c1902Sdrh if( nChgset >= 512 932*f94c1902Sdrh && memcmp(pChgset, "SQLite format 3", 16)==0 933*f94c1902Sdrh ){ 934*f94c1902Sdrh sqlite3 *db2; 935*f94c1902Sdrh sqlite3_stmt *pStmt; 936*f94c1902Sdrh int nCase = 0; 937*f94c1902Sdrh /* This file is an SQL Archive containing many changesets */ 938*f94c1902Sdrh if( !bVerbose ){ printf("%s: ", fileTail(argv[i])); fflush(stdout); } 939*f94c1902Sdrh sqlite3_open_v2(":memory:", &db2, 940*f94c1902Sdrh SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE, "memdb"); 941*f94c1902Sdrh sqlite3_deserialize(db2, 0, pChgset, nChgset, nChgset, 942*f94c1902Sdrh SQLITE_DESERIALIZE_READONLY | SQLITE_DESERIALIZE_FREEONCLOSE); 943*f94c1902Sdrh sqlite3_create_function(db2, "sqlar_uncompress", 2, SQLITE_UTF8, 0, 944*f94c1902Sdrh sqlarUncompressFunc, 0, 0); 945*f94c1902Sdrh rc = sqlite3_prepare_v2(db2, "SELECT name, sqlar_uncompress(data,sz)" 946*f94c1902Sdrh " FROM sqlar", -1, &pStmt, 0); 947*f94c1902Sdrh if( rc ){ 948*f94c1902Sdrh fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db2)); 949*f94c1902Sdrh exit(1); 950*f94c1902Sdrh } 951*f94c1902Sdrh while( SQLITE_ROW==sqlite3_step(pStmt) ){ 952*f94c1902Sdrh if( bVerbose ){ 953*f94c1902Sdrh printf("%s/%s:", fileTail(argv[i]), sqlite3_column_text(pStmt,0)); 954*f94c1902Sdrh fflush(stdout); 955*f94c1902Sdrh } 956*f94c1902Sdrh runSql(db, "BEGIN"); 957*f94c1902Sdrh pChgset = (unsigned char*)sqlite3_column_blob(pStmt, 1); 958*f94c1902Sdrh nChgset = sqlite3_column_bytes(pStmt, 1); 959*f94c1902Sdrh rc = sqlite3changeset_apply(db, nChgset, pChgset, 0, conflictCall, 0); 960*f94c1902Sdrh if( bVerbose ){ 961*f94c1902Sdrh printf(" Ok. rc=%d\n", rc); 962*f94c1902Sdrh fflush(stdout); 963*f94c1902Sdrh } 964*f94c1902Sdrh runSql(db, "ROLLBACK"); 965*f94c1902Sdrh nCase++; 966*f94c1902Sdrh } 967*f94c1902Sdrh sqlite3_finalize(pStmt); 968*f94c1902Sdrh sqlite3_close(db2); 969*f94c1902Sdrh if( bVerbose ) printf("%s: ", fileTail(argv[i])); 970*f94c1902Sdrh printf(" %d cases, 0 crashes\n", nCase); 971*f94c1902Sdrh fflush(stdout); 972*f94c1902Sdrh }else{ 973*f94c1902Sdrh /* The named file is just an ordinary changeset */ 974*f94c1902Sdrh printf("%s:", fileTail(argv[i])); 975*f94c1902Sdrh fflush(stdout); 976*f94c1902Sdrh runSql(db, "BEGIN"); 977*f94c1902Sdrh rc = sqlite3changeset_apply(db, nChgset, pChgset, 0, conflictCall, 0); 978*f94c1902Sdrh printf(" %d\n", rc); 979*f94c1902Sdrh fflush(stdout); 980*f94c1902Sdrh runSql(db, "ROLLBACK"); 981*f94c1902Sdrh sqlite3_free(pChgset); 982*f94c1902Sdrh } 983*f94c1902Sdrh } 984*f94c1902Sdrh }else 985*f94c1902Sdrh { 986*f94c1902Sdrh fprintf(stderr, "%s", zHelp); 987*f94c1902Sdrh exit(1); 988*f94c1902Sdrh } 989*f94c1902Sdrh rc = sqlite3_prepare_v2(db, "PRAGMA integrity_check;", -1, &pStmt, 0); 990*f94c1902Sdrh if( rc ){ 991*f94c1902Sdrh fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); 992*f94c1902Sdrh exit(1); 993*f94c1902Sdrh } 994*f94c1902Sdrh if( sqlite3_step(pStmt)!=SQLITE_ROW 995*f94c1902Sdrh || strcmp((const char*)sqlite3_column_text(pStmt,0),"ok")!=0 996*f94c1902Sdrh ){ 997*f94c1902Sdrh fprintf(stderr, "Integrity check failed!\n"); 998*f94c1902Sdrh do{ 999*f94c1902Sdrh fprintf(stderr, "%s\n", sqlite3_column_text(pStmt,0)); 1000*f94c1902Sdrh }while( sqlite3_step(pStmt)==SQLITE_ROW ); 1001*f94c1902Sdrh } 1002*f94c1902Sdrh sqlite3_finalize(pStmt); 1003*f94c1902Sdrh sqlite3_close(db); 1004*f94c1902Sdrh if( sqlite3_memory_used()>0 ){ 1005*f94c1902Sdrh fprintf(stderr, "memory leak of %lld bytes\n", 1006*f94c1902Sdrh sqlite3_memory_used()); 1007*f94c1902Sdrh exit(1); 1008*f94c1902Sdrh } 1009*f94c1902Sdrh return 0; 1010*f94c1902Sdrh } 1011