github.com/devfans/go-ethereum@v1.5.10-0.20170326212234-7419d0c38291/pow/ethash_algo.go (about) 1 // Copyright 2017 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package pow 18 19 import ( 20 "encoding/binary" 21 "hash" 22 "reflect" 23 "runtime" 24 "sync" 25 "sync/atomic" 26 "time" 27 "unsafe" 28 29 "github.com/ethereum/go-ethereum/common" 30 "github.com/ethereum/go-ethereum/crypto" 31 "github.com/ethereum/go-ethereum/crypto/sha3" 32 "github.com/ethereum/go-ethereum/log" 33 ) 34 35 const ( 36 datasetInitBytes = 1 << 30 // Bytes in dataset at genesis 37 datasetGrowthBytes = 1 << 23 // Dataset growth per epoch 38 cacheInitBytes = 1 << 24 // Bytes in cache at genesis 39 cacheGrowthBytes = 1 << 17 // Cache growth per epoch 40 epochLength = 30000 // Blocks per epoch 41 mixBytes = 128 // Width of mix 42 hashBytes = 64 // Hash length in bytes 43 hashWords = 16 // Number of 32 bit ints in a hash 44 datasetParents = 256 // Number of parents of each dataset element 45 cacheRounds = 3 // Number of rounds in cache production 46 loopAccesses = 64 // Number of accesses in hashimoto loop 47 ) 48 49 // hasher is a repetitive hasher allowing the same hash data structures to be 50 // reused between hash runs instead of requiring new ones to be created. 51 type hasher func(dest []byte, data []byte) 52 53 // makeHasher creates a repetitive hasher, allowing the same hash data structures 54 // to be reused between hash runs instead of requiring new ones to be created. 55 // 56 // The returned function is not thread safe! 57 func makeHasher(h hash.Hash) hasher { 58 return func(dest []byte, data []byte) { 59 h.Write(data) 60 h.Sum(dest[:0]) 61 h.Reset() 62 } 63 } 64 65 // seedHash is the seed to use for generating a verification cache and the mining 66 // dataset. 67 func seedHash(block uint64) []byte { 68 seed := make([]byte, 32) 69 if block < epochLength { 70 return seed 71 } 72 keccak256 := makeHasher(sha3.NewKeccak256()) 73 for i := 0; i < int(block/epochLength); i++ { 74 keccak256(seed, seed) 75 } 76 return seed 77 } 78 79 // generateCache creates a verification cache of a given size for an input seed. 80 // The cache production process involves first sequentially filling up 32 MB of 81 // memory, then performing two passes of Sergio Demian Lerner's RandMemoHash 82 // algorithm from Strict Memory Hard Hashing Functions (2014). The output is a 83 // set of 524288 64-byte values. 84 // 85 // This method places the result into dest in machine byte order. 86 func generateCache(dest []uint32, epoch uint64, seed []byte) { 87 // Print some debug logs to allow analysis on low end devices 88 logger := log.New("epoch", epoch) 89 90 start := time.Now() 91 defer func() { 92 elapsed := time.Since(start) 93 94 logFn := logger.Debug 95 if elapsed > 3*time.Second { 96 logFn = logger.Info 97 } 98 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 99 }() 100 // Convert our destination slice to a byte buffer 101 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 102 header.Len *= 4 103 header.Cap *= 4 104 cache := *(*[]byte)(unsafe.Pointer(&header)) 105 106 // Calculate the number of thoretical rows (we'll store in one buffer nonetheless) 107 size := uint64(len(cache)) 108 rows := int(size) / hashBytes 109 110 // Start a monitoring goroutine to report progress on low end devices 111 var progress uint32 112 113 done := make(chan struct{}) 114 defer close(done) 115 116 go func() { 117 for { 118 select { 119 case <-done: 120 return 121 case <-time.After(3 * time.Second): 122 logger.Info("Generating ethash verification cache", "percentage", atomic.LoadUint32(&progress)*100/uint32(rows)/4, "elapsed", common.PrettyDuration(time.Since(start))) 123 } 124 } 125 }() 126 // Create a hasher to reuse between invocations 127 keccak512 := makeHasher(sha3.NewKeccak512()) 128 129 // Sequentially produce the initial dataset 130 keccak512(cache, seed) 131 for offset := uint64(hashBytes); offset < size; offset += hashBytes { 132 keccak512(cache[offset:], cache[offset-hashBytes:offset]) 133 atomic.AddUint32(&progress, 1) 134 } 135 // Use a low-round version of randmemohash 136 temp := make([]byte, hashBytes) 137 138 for i := 0; i < cacheRounds; i++ { 139 for j := 0; j < rows; j++ { 140 var ( 141 srcOff = ((j - 1 + rows) % rows) * hashBytes 142 dstOff = j * hashBytes 143 xorOff = (binary.LittleEndian.Uint32(cache[dstOff:]) % uint32(rows)) * hashBytes 144 ) 145 xorBytes(temp, cache[srcOff:srcOff+hashBytes], cache[xorOff:xorOff+hashBytes]) 146 keccak512(cache[dstOff:], temp) 147 148 atomic.AddUint32(&progress, 1) 149 } 150 } 151 // Swap the byte order on big endian systems and return 152 if !isLittleEndian() { 153 swap(cache) 154 } 155 } 156 157 // swap changes the byte order of the buffer assuming a uint32 representation. 158 func swap(buffer []byte) { 159 for i := 0; i < len(buffer); i += 4 { 160 binary.BigEndian.PutUint32(buffer[i:], binary.LittleEndian.Uint32(buffer[i:])) 161 } 162 } 163 164 // prepare converts an ethash cache or dataset from a byte stream into the internal 165 // int representation. All ethash methods work with ints to avoid constant byte to 166 // int conversions as well as to handle both little and big endian systems. 167 func prepare(dest []uint32, src []byte) { 168 for i := 0; i < len(dest); i++ { 169 dest[i] = binary.LittleEndian.Uint32(src[i*4:]) 170 } 171 } 172 173 // fnv is an algorithm inspired by the FNV hash, which in some cases is used as 174 // a non-associative substitute for XOR. Note that we multiply the prime with 175 // the full 32-bit input, in contrast with the FNV-1 spec which multiplies the 176 // prime with one byte (octet) in turn. 177 func fnv(a, b uint32) uint32 { 178 return a*0x01000193 ^ b 179 } 180 181 // fnvHash mixes in data into mix using the ethash fnv method. 182 func fnvHash(mix []uint32, data []uint32) { 183 for i := 0; i < len(mix); i++ { 184 mix[i] = mix[i]*0x01000193 ^ data[i] 185 } 186 } 187 188 // generateDatasetItem combines data from 256 pseudorandomly selected cache nodes, 189 // and hashes that to compute a single dataset node. 190 func generateDatasetItem(cache []uint32, index uint32, keccak512 hasher) []byte { 191 // Calculate the number of thoretical rows (we use one buffer nonetheless) 192 rows := uint32(len(cache) / hashWords) 193 194 // Initialize the mix 195 mix := make([]byte, hashBytes) 196 197 binary.LittleEndian.PutUint32(mix, cache[(index%rows)*hashWords]^index) 198 for i := 1; i < hashWords; i++ { 199 binary.LittleEndian.PutUint32(mix[i*4:], cache[(index%rows)*hashWords+uint32(i)]) 200 } 201 keccak512(mix, mix) 202 203 // Convert the mix to uint32s to avoid constant bit shifting 204 intMix := make([]uint32, hashWords) 205 for i := 0; i < len(intMix); i++ { 206 intMix[i] = binary.LittleEndian.Uint32(mix[i*4:]) 207 } 208 // fnv it with a lot of random cache nodes based on index 209 for i := uint32(0); i < datasetParents; i++ { 210 parent := fnv(index^i, intMix[i%16]) % rows 211 fnvHash(intMix, cache[parent*hashWords:]) 212 } 213 // Flatten the uint32 mix into a binary one and return 214 for i, val := range intMix { 215 binary.LittleEndian.PutUint32(mix[i*4:], val) 216 } 217 keccak512(mix, mix) 218 return mix 219 } 220 221 // generateDataset generates the entire ethash dataset for mining. 222 // 223 // This method places the result into dest in machine byte order. 224 func generateDataset(dest []uint32, epoch uint64, cache []uint32) { 225 // Print some debug logs to allow analysis on low end devices 226 logger := log.New("epoch", epoch) 227 228 start := time.Now() 229 defer func() { 230 elapsed := time.Since(start) 231 232 logFn := logger.Debug 233 if elapsed > 3*time.Second { 234 logFn = logger.Info 235 } 236 logFn("Generated ethash verification cache", "elapsed", common.PrettyDuration(elapsed)) 237 }() 238 239 // Figure out whether the bytes need to be swapped for the machine 240 swapped := !isLittleEndian() 241 242 // Convert our destination slice to a byte buffer 243 header := *(*reflect.SliceHeader)(unsafe.Pointer(&dest)) 244 header.Len *= 4 245 header.Cap *= 4 246 dataset := *(*[]byte)(unsafe.Pointer(&header)) 247 248 // Generate the dataset on many goroutines since it takes a while 249 threads := runtime.NumCPU() 250 size := uint64(len(dataset)) 251 252 var pend sync.WaitGroup 253 pend.Add(threads) 254 255 var progress uint32 256 for i := 0; i < threads; i++ { 257 go func(id int) { 258 defer pend.Done() 259 260 // Create a hasher to reuse between invocations 261 keccak512 := makeHasher(sha3.NewKeccak512()) 262 263 // Calculate the data segment this thread should generate 264 batch := uint32((size + hashBytes*uint64(threads) - 1) / (hashBytes * uint64(threads))) 265 first := uint32(id) * batch 266 limit := first + batch 267 if limit > uint32(size/hashBytes) { 268 limit = uint32(size / hashBytes) 269 } 270 // Calculate the dataset segment 271 percent := uint32(size / hashBytes / 100) 272 for index := first; index < limit; index++ { 273 item := generateDatasetItem(cache, index, keccak512) 274 if swapped { 275 swap(item) 276 } 277 copy(dataset[index*hashBytes:], item) 278 279 if status := atomic.AddUint32(&progress, 1); status%percent == 0 { 280 logger.Info("Generating DAG in progress", "percentage", uint64(status*100)/(size/hashBytes), "elapsed", common.PrettyDuration(time.Since(start))) 281 } 282 } 283 }(i) 284 } 285 // Wait for all the generators to finish and return 286 pend.Wait() 287 } 288 289 // hashimoto aggregates data from the full dataset in order to produce our final 290 // value for a particular header hash and nonce. 291 func hashimoto(hash []byte, nonce uint64, size uint64, lookup func(index uint32) []uint32) ([]byte, []byte) { 292 // Calculate the number of thoretical rows (we use one buffer nonetheless) 293 rows := uint32(size / mixBytes) 294 295 // Combine header+nonce into a 64 byte seed 296 seed := make([]byte, 40) 297 copy(seed, hash) 298 binary.LittleEndian.PutUint64(seed[32:], nonce) 299 300 seed = crypto.Keccak512(seed) 301 seedHead := binary.LittleEndian.Uint32(seed) 302 303 // Start the mix with replicated seed 304 mix := make([]uint32, mixBytes/4) 305 for i := 0; i < len(mix); i++ { 306 mix[i] = binary.LittleEndian.Uint32(seed[i%16*4:]) 307 } 308 // Mix in random dataset nodes 309 temp := make([]uint32, len(mix)) 310 311 for i := 0; i < loopAccesses; i++ { 312 parent := fnv(uint32(i)^seedHead, mix[i%len(mix)]) % rows 313 for j := uint32(0); j < mixBytes/hashBytes; j++ { 314 copy(temp[j*hashWords:], lookup(2*parent+j)) 315 } 316 fnvHash(mix, temp) 317 } 318 // Compress mix 319 for i := 0; i < len(mix); i += 4 { 320 mix[i/4] = fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3]) 321 } 322 mix = mix[:len(mix)/4] 323 324 digest := make([]byte, common.HashLength) 325 for i, val := range mix { 326 binary.LittleEndian.PutUint32(digest[i*4:], val) 327 } 328 return digest, crypto.Keccak256(append(seed, digest...)) 329 } 330 331 // hashimotoLight aggregates data from the full dataset (using only a small 332 // in-memory cache) in order to produce our final value for a particular header 333 // hash and nonce. 334 func hashimotoLight(size uint64, cache []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 335 keccak512 := makeHasher(sha3.NewKeccak512()) 336 337 lookup := func(index uint32) []uint32 { 338 rawData := generateDatasetItem(cache, index, keccak512) 339 340 data := make([]uint32, len(rawData)/4) 341 for i := 0; i < len(data); i++ { 342 data[i] = binary.LittleEndian.Uint32(rawData[i*4:]) 343 } 344 return data 345 } 346 return hashimoto(hash, nonce, size, lookup) 347 } 348 349 // hashimotoFull aggregates data from the full dataset (using the full in-memory 350 // dataset) in order to produce our final value for a particular header hash and 351 // nonce. 352 func hashimotoFull(dataset []uint32, hash []byte, nonce uint64) ([]byte, []byte) { 353 lookup := func(index uint32) []uint32 { 354 offset := index * hashWords 355 return dataset[offset : offset+hashWords] 356 } 357 return hashimoto(hash, nonce, uint64(len(dataset))*4, lookup) 358 } 359 360 // datasetSizes is a lookup table for the ethash dataset size for the first 2048 361 // epochs (i.e. 61440000 blocks). 362 var datasetSizes = []uint64{ 363 1073739904, 1082130304, 1090514816, 1098906752, 1107293056, 364 1115684224, 1124070016, 1132461952, 1140849536, 1149232768, 365 1157627776, 1166013824, 1174404736, 1182786944, 1191180416, 366 1199568512, 1207958912, 1216345216, 1224732032, 1233124736, 367 1241513344, 1249902464, 1258290304, 1266673792, 1275067264, 368 1283453312, 1291844992, 1300234112, 1308619904, 1317010048, 369 1325397376, 1333787776, 1342176128, 1350561664, 1358954368, 370 1367339392, 1375731584, 1384118144, 1392507008, 1400897408, 371 1409284736, 1417673344, 1426062464, 1434451072, 1442839168, 372 1451229056, 1459615616, 1468006016, 1476394112, 1484782976, 373 1493171584, 1501559168, 1509948032, 1518337664, 1526726528, 374 1535114624, 1543503488, 1551892096, 1560278656, 1568669056, 375 1577056384, 1585446272, 1593831296, 1602219392, 1610610304, 376 1619000192, 1627386752, 1635773824, 1644164224, 1652555648, 377 1660943488, 1669332608, 1677721216, 1686109312, 1694497664, 378 1702886272, 1711274624, 1719661184, 1728047744, 1736434816, 379 1744829056, 1753218944, 1761606272, 1769995904, 1778382464, 380 1786772864, 1795157888, 1803550592, 1811937664, 1820327552, 381 1828711552, 1837102976, 1845488768, 1853879936, 1862269312, 382 1870656896, 1879048064, 1887431552, 1895825024, 1904212096, 383 1912601216, 1920988544, 1929379456, 1937765504, 1946156672, 384 1954543232, 1962932096, 1971321728, 1979707264, 1988093056, 385 1996487552, 2004874624, 2013262208, 2021653888, 2030039936, 386 2038430848, 2046819968, 2055208576, 2063596672, 2071981952, 387 2080373632, 2088762752, 2097149056, 2105539712, 2113928576, 388 2122315136, 2130700672, 2139092608, 2147483264, 2155872128, 389 2164257664, 2172642176, 2181035392, 2189426048, 2197814912, 390 2206203008, 2214587264, 2222979712, 2231367808, 2239758208, 391 2248145024, 2256527744, 2264922752, 2273312128, 2281701248, 392 2290086272, 2298476672, 2306867072, 2315251072, 2323639168, 393 2332032128, 2340420224, 2348808064, 2357196416, 2365580416, 394 2373966976, 2382363008, 2390748544, 2399139968, 2407530368, 395 2415918976, 2424307328, 2432695424, 2441084288, 2449472384, 396 2457861248, 2466247808, 2474637184, 2483026816, 2491414144, 397 2499803776, 2508191872, 2516582272, 2524970368, 2533359232, 398 2541743488, 2550134144, 2558525056, 2566913408, 2575301504, 399 2583686528, 2592073856, 2600467328, 2608856192, 2617240448, 400 2625631616, 2634022016, 2642407552, 2650796416, 2659188352, 401 2667574912, 2675965312, 2684352896, 2692738688, 2701130624, 402 2709518464, 2717907328, 2726293376, 2734685056, 2743073152, 403 2751462016, 2759851648, 2768232832, 2776625536, 2785017728, 404 2793401984, 2801794432, 2810182016, 2818571648, 2826959488, 405 2835349376, 2843734144, 2852121472, 2860514432, 2868900992, 406 2877286784, 2885676928, 2894069632, 2902451584, 2910843008, 407 2919234688, 2927622784, 2936011648, 2944400768, 2952789376, 408 2961177728, 2969565568, 2977951616, 2986338944, 2994731392, 409 3003120256, 3011508352, 3019895936, 3028287104, 3036675968, 410 3045063808, 3053452928, 3061837696, 3070228352, 3078615424, 411 3087003776, 3095394944, 3103782272, 3112173184, 3120562048, 412 3128944768, 3137339264, 3145725056, 3154109312, 3162505088, 413 3170893184, 3179280256, 3187669376, 3196056704, 3204445568, 414 3212836736, 3221224064, 3229612928, 3238002304, 3246391168, 415 3254778496, 3263165824, 3271556224, 3279944576, 3288332416, 416 3296719232, 3305110912, 3313500032, 3321887104, 3330273152, 417 3338658944, 3347053184, 3355440512, 3363827072, 3372220288, 418 3380608384, 3388997504, 3397384576, 3405774208, 3414163072, 419 3422551936, 3430937984, 3439328384, 3447714176, 3456104576, 420 3464493952, 3472883584, 3481268864, 3489655168, 3498048896, 421 3506434432, 3514826368, 3523213952, 3531603584, 3539987072, 422 3548380288, 3556763264, 3565157248, 3573545344, 3581934464, 423 3590324096, 3598712704, 3607098752, 3615488384, 3623877248, 424 3632265856, 3640646528, 3649043584, 3657430144, 3665821568, 425 3674207872, 3682597504, 3690984832, 3699367808, 3707764352, 426 3716152448, 3724541056, 3732925568, 3741318016, 3749706368, 427 3758091136, 3766481536, 3774872704, 3783260032, 3791650432, 428 3800036224, 3808427648, 3816815488, 3825204608, 3833592704, 429 3841981568, 3850370432, 3858755968, 3867147904, 3875536256, 430 3883920512, 3892313728, 3900702592, 3909087872, 3917478784, 431 3925868416, 3934256512, 3942645376, 3951032192, 3959422336, 432 3967809152, 3976200064, 3984588416, 3992974976, 4001363584, 433 4009751168, 4018141312, 4026530432, 4034911616, 4043308928, 434 4051695488, 4060084352, 4068472448, 4076862848, 4085249408, 435 4093640576, 4102028416, 4110413696, 4118805632, 4127194496, 436 4135583104, 4143971968, 4152360832, 4160746112, 4169135744, 437 4177525888, 4185912704, 4194303616, 4202691968, 4211076736, 438 4219463552, 4227855488, 4236246656, 4244633728, 4253022848, 439 4261412224, 4269799808, 4278184832, 4286578048, 4294962304, 440 4303349632, 4311743104, 4320130432, 4328521088, 4336909184, 441 4345295488, 4353687424, 4362073472, 4370458496, 4378852736, 442 4387238528, 4395630208, 4404019072, 4412407424, 4420790656, 443 4429182848, 4437571456, 4445962112, 4454344064, 4462738048, 444 4471119232, 4479516544, 4487904128, 4496289664, 4504682368, 445 4513068416, 4521459584, 4529846144, 4538232704, 4546619776, 446 4555010176, 4563402112, 4571790208, 4580174464, 4588567936, 447 4596957056, 4605344896, 4613734016, 4622119808, 4630511488, 448 4638898816, 4647287936, 4655675264, 4664065664, 4672451968, 449 4680842624, 4689231488, 4697620352, 4706007424, 4714397056, 450 4722786176, 4731173248, 4739562368, 4747951744, 4756340608, 451 4764727936, 4773114496, 4781504384, 4789894784, 4798283648, 452 4806667648, 4815059584, 4823449472, 4831835776, 4840226176, 453 4848612224, 4857003392, 4865391488, 4873780096, 4882169728, 454 4890557312, 4898946944, 4907333248, 4915722368, 4924110976, 455 4932499328, 4940889728, 4949276032, 4957666432, 4966054784, 456 4974438016, 4982831488, 4991221376, 4999607168, 5007998848, 457 5016386432, 5024763776, 5033164672, 5041544576, 5049941888, 458 5058329728, 5066717056, 5075107456, 5083494272, 5091883904, 459 5100273536, 5108662144, 5117048192, 5125436032, 5133827456, 460 5142215296, 5150605184, 5158993024, 5167382144, 5175769472, 461 5184157568, 5192543872, 5200936064, 5209324928, 5217711232, 462 5226102656, 5234490496, 5242877312, 5251263872, 5259654016, 463 5268040832, 5276434304, 5284819328, 5293209728, 5301598592, 464 5309986688, 5318374784, 5326764416, 5335151488, 5343542144, 465 5351929472, 5360319872, 5368706944, 5377096576, 5385484928, 466 5393871232, 5402263424, 5410650496, 5419040384, 5427426944, 467 5435816576, 5444205952, 5452594816, 5460981376, 5469367936, 468 5477760896, 5486148736, 5494536832, 5502925952, 5511315328, 469 5519703424, 5528089984, 5536481152, 5544869504, 5553256064, 470 5561645696, 5570032768, 5578423936, 5586811264, 5595193216, 471 5603585408, 5611972736, 5620366208, 5628750464, 5637143936, 472 5645528192, 5653921408, 5662310272, 5670694784, 5679082624, 473 5687474048, 5695864448, 5704251008, 5712641408, 5721030272, 474 5729416832, 5737806208, 5746194304, 5754583936, 5762969984, 475 5771358592, 5779748224, 5788137856, 5796527488, 5804911232, 476 5813300608, 5821692544, 5830082176, 5838468992, 5846855552, 477 5855247488, 5863636096, 5872024448, 5880411008, 5888799872, 478 5897186432, 5905576832, 5913966976, 5922352768, 5930744704, 479 5939132288, 5947522432, 5955911296, 5964299392, 5972688256, 480 5981074304, 5989465472, 5997851008, 6006241408, 6014627968, 481 6023015552, 6031408256, 6039796096, 6048185216, 6056574848, 482 6064963456, 6073351808, 6081736064, 6090128768, 6098517632, 483 6106906496, 6115289216, 6123680896, 6132070016, 6140459648, 484 6148849024, 6157237376, 6165624704, 6174009728, 6182403712, 485 6190792064, 6199176064, 6207569792, 6215952256, 6224345216, 486 6232732544, 6241124224, 6249510272, 6257899136, 6266287744, 487 6274676864, 6283065728, 6291454336, 6299843456, 6308232064, 488 6316620928, 6325006208, 6333395584, 6341784704, 6350174848, 489 6358562176, 6366951296, 6375337856, 6383729536, 6392119168, 490 6400504192, 6408895616, 6417283456, 6425673344, 6434059136, 491 6442444672, 6450837376, 6459223424, 6467613056, 6476004224, 492 6484393088, 6492781952, 6501170048, 6509555072, 6517947008, 493 6526336384, 6534725504, 6543112832, 6551500672, 6559888768, 494 6568278656, 6576662912, 6585055616, 6593443456, 6601834112, 495 6610219648, 6618610304, 6626999168, 6635385472, 6643777408, 496 6652164224, 6660552832, 6668941952, 6677330048, 6685719424, 497 6694107776, 6702493568, 6710882176, 6719274112, 6727662976, 498 6736052096, 6744437632, 6752825984, 6761213824, 6769604224, 499 6777993856, 6786383488, 6794770816, 6803158144, 6811549312, 500 6819937664, 6828326528, 6836706176, 6845101696, 6853491328, 501 6861880448, 6870269312, 6878655104, 6887046272, 6895433344, 502 6903822208, 6912212864, 6920596864, 6928988288, 6937377152, 503 6945764992, 6954149248, 6962544256, 6970928768, 6979317376, 504 6987709312, 6996093824, 7004487296, 7012875392, 7021258624, 505 7029652352, 7038038912, 7046427776, 7054818944, 7063207808, 506 7071595136, 7079980928, 7088372608, 7096759424, 7105149824, 507 7113536896, 7121928064, 7130315392, 7138699648, 7147092352, 508 7155479168, 7163865728, 7172249984, 7180648064, 7189036672, 509 7197424768, 7205810816, 7214196608, 7222589824, 7230975104, 510 7239367552, 7247755904, 7256145536, 7264533376, 7272921472, 511 7281308032, 7289694848, 7298088832, 7306471808, 7314864512, 512 7323253888, 7331643008, 7340029568, 7348419712, 7356808832, 513 7365196672, 7373585792, 7381973888, 7390362752, 7398750592, 514 7407138944, 7415528576, 7423915648, 7432302208, 7440690304, 515 7449080192, 7457472128, 7465860992, 7474249088, 7482635648, 516 7491023744, 7499412608, 7507803008, 7516192384, 7524579968, 517 7532967296, 7541358464, 7549745792, 7558134656, 7566524032, 518 7574912896, 7583300992, 7591690112, 7600075136, 7608466816, 519 7616854912, 7625244544, 7633629824, 7642020992, 7650410368, 520 7658794112, 7667187328, 7675574912, 7683961984, 7692349568, 521 7700739712, 7709130368, 7717519232, 7725905536, 7734295424, 522 7742683264, 7751069056, 7759457408, 7767849088, 7776238208, 523 7784626816, 7793014912, 7801405312, 7809792128, 7818179968, 524 7826571136, 7834957184, 7843347328, 7851732352, 7860124544, 525 7868512384, 7876902016, 7885287808, 7893679744, 7902067072, 526 7910455936, 7918844288, 7927230848, 7935622784, 7944009344, 527 7952400256, 7960786048, 7969176704, 7977565312, 7985953408, 528 7994339968, 8002730368, 8011119488, 8019508096, 8027896192, 529 8036285056, 8044674688, 8053062272, 8061448832, 8069838464, 530 8078227328, 8086616704, 8095006592, 8103393664, 8111783552, 531 8120171392, 8128560256, 8136949376, 8145336704, 8153726848, 532 8162114944, 8170503296, 8178891904, 8187280768, 8195669632, 533 8204058496, 8212444544, 8220834176, 8229222272, 8237612672, 534 8246000768, 8254389376, 8262775168, 8271167104, 8279553664, 535 8287944064, 8296333184, 8304715136, 8313108352, 8321497984, 536 8329885568, 8338274432, 8346663296, 8355052928, 8363441536, 537 8371828352, 8380217984, 8388606592, 8396996224, 8405384576, 538 8413772672, 8422161536, 8430549376, 8438939008, 8447326592, 539 8455715456, 8464104832, 8472492928, 8480882048, 8489270656, 540 8497659776, 8506045312, 8514434944, 8522823808, 8531208832, 541 8539602304, 8547990656, 8556378752, 8564768384, 8573154176, 542 8581542784, 8589933952, 8598322816, 8606705024, 8615099264, 543 8623487872, 8631876992, 8640264064, 8648653952, 8657040256, 544 8665430656, 8673820544, 8682209152, 8690592128, 8698977152, 545 8707374464, 8715763328, 8724151424, 8732540032, 8740928384, 546 8749315712, 8757704576, 8766089344, 8774480768, 8782871936, 547 8791260032, 8799645824, 8808034432, 8816426368, 8824812928, 548 8833199488, 8841591424, 8849976448, 8858366336, 8866757248, 549 8875147136, 8883532928, 8891923328, 8900306816, 8908700288, 550 8917088384, 8925478784, 8933867392, 8942250368, 8950644608, 551 8959032704, 8967420544, 8975809664, 8984197504, 8992584064, 552 9000976256, 9009362048, 9017752448, 9026141312, 9034530688, 553 9042917504, 9051307904, 9059694208, 9068084864, 9076471424, 554 9084861824, 9093250688, 9101638528, 9110027648, 9118416512, 555 9126803584, 9135188096, 9143581312, 9151969664, 9160356224, 556 9168747136, 9177134464, 9185525632, 9193910144, 9202302848, 557 9210690688, 9219079552, 9227465344, 9235854464, 9244244864, 558 9252633472, 9261021824, 9269411456, 9277799296, 9286188928, 559 9294574208, 9302965888, 9311351936, 9319740032, 9328131968, 560 9336516736, 9344907392, 9353296768, 9361685888, 9370074752, 561 9378463616, 9386849408, 9395239808, 9403629184, 9412016512, 562 9420405376, 9428795008, 9437181568, 9445570688, 9453960832, 563 9462346624, 9470738048, 9479121536, 9487515008, 9495903616, 564 9504289664, 9512678528, 9521067904, 9529456256, 9537843584, 565 9546233728, 9554621312, 9563011456, 9571398784, 9579788672, 566 9588178304, 9596567168, 9604954496, 9613343104, 9621732992, 567 9630121856, 9638508416, 9646898816, 9655283584, 9663675776, 568 9672061312, 9680449664, 9688840064, 9697230464, 9705617536, 569 9714003584, 9722393984, 9730772608, 9739172224, 9747561088, 570 9755945344, 9764338816, 9772726144, 9781116544, 9789503872, 571 9797892992, 9806282624, 9814670464, 9823056512, 9831439232, 572 9839833984, 9848224384, 9856613504, 9865000576, 9873391232, 573 9881772416, 9890162816, 9898556288, 9906940544, 9915333248, 574 9923721088, 9932108672, 9940496512, 9948888448, 9957276544, 575 9965666176, 9974048384, 9982441088, 9990830464, 9999219584, 576 10007602816, 10015996544, 10024385152, 10032774016, 10041163648, 577 10049548928, 10057940096, 10066329472, 10074717824, 10083105152, 578 10091495296, 10099878784, 10108272256, 10116660608, 10125049216, 579 10133437312, 10141825664, 10150213504, 10158601088, 10166991232, 580 10175378816, 10183766144, 10192157312, 10200545408, 10208935552, 581 10217322112, 10225712768, 10234099328, 10242489472, 10250876032, 582 10259264896, 10267656064, 10276042624, 10284429184, 10292820352, 583 10301209472, 10309598848, 10317987712, 10326375296, 10334763392, 584 10343153536, 10351541632, 10359930752, 10368318592, 10376707456, 585 10385096576, 10393484672, 10401867136, 10410262144, 10418647424, 586 10427039104, 10435425664, 10443810176, 10452203648, 10460589952, 587 10468982144, 10477369472, 10485759104, 10494147712, 10502533504, 588 10510923392, 10519313536, 10527702656, 10536091264, 10544478592, 589 10552867712, 10561255808, 10569642368, 10578032768, 10586423168, 590 10594805632, 10603200128, 10611588992, 10619976064, 10628361344, 591 10636754048, 10645143424, 10653531776, 10661920384, 10670307968, 592 10678696832, 10687086464, 10695475072, 10703863168, 10712246144, 593 10720639616, 10729026688, 10737414784, 10745806208, 10754190976, 594 10762581376, 10770971264, 10779356288, 10787747456, 10796135552, 595 10804525184, 10812915584, 10821301888, 10829692288, 10838078336, 596 10846469248, 10854858368, 10863247232, 10871631488, 10880023424, 597 10888412032, 10896799616, 10905188992, 10913574016, 10921964672, 598 10930352768, 10938742912, 10947132544, 10955518592, 10963909504, 599 10972298368, 10980687488, 10989074816, 10997462912, 11005851776, 600 11014241152, 11022627712, 11031017344, 11039403904, 11047793024, 601 11056184704, 11064570752, 11072960896, 11081343872, 11089737856, 602 11098128256, 11106514816, 11114904448, 11123293568, 11131680128, 603 11140065152, 11148458368, 11156845696, 11165236864, 11173624192, 604 11182013824, 11190402688, 11198790784, 11207179136, 11215568768, 605 11223957376, 11232345728, 11240734592, 11249122688, 11257511296, 606 11265899648, 11274285952, 11282675584, 11291065472, 11299452544, 607 11307842432, 11316231296, 11324616832, 11333009024, 11341395584, 608 11349782656, 11358172288, 11366560384, 11374950016, 11383339648, 609 11391721856, 11400117376, 11408504192, 11416893568, 11425283456, 610 11433671552, 11442061184, 11450444672, 11458837888, 11467226752, 611 11475611776, 11484003968, 11492392064, 11500780672, 11509169024, 612 11517550976, 11525944448, 11534335616, 11542724224, 11551111808, 613 11559500672, 11567890304, 11576277376, 11584667008, 11593056128, 614 11601443456, 11609830016, 11618221952, 11626607488, 11634995072, 615 11643387776, 11651775104, 11660161664, 11668552576, 11676940928, 616 11685330304, 11693718656, 11702106496, 11710496128, 11718882688, 617 11727273088, 11735660416, 11744050048, 11752437376, 11760824704, 618 11769216128, 11777604736, 11785991296, 11794381952, 11802770048, 619 11811157888, 11819548544, 11827932544, 11836324736, 11844713344, 620 11853100928, 11861486464, 11869879936, 11878268032, 11886656896, 621 11895044992, 11903433088, 11911822976, 11920210816, 11928600448, 622 11936987264, 11945375872, 11953761152, 11962151296, 11970543488, 623 11978928512, 11987320448, 11995708288, 12004095104, 12012486272, 624 12020875136, 12029255552, 12037652096, 12046039168, 12054429568, 625 12062813824, 12071206528, 12079594624, 12087983744, 12096371072, 626 12104759936, 12113147264, 12121534592, 12129924992, 12138314624, 627 12146703232, 12155091584, 12163481216, 12171864704, 12180255872, 628 12188643968, 12197034112, 12205424512, 12213811328, 12222199424, 629 12230590336, 12238977664, 12247365248, 12255755392, 12264143488, 630 12272531584, 12280920448, 12289309568, 12297694592, 12306086528, 631 12314475392, 12322865024, 12331253632, 12339640448, 12348029312, 632 12356418944, 12364805248, 12373196672, 12381580928, 12389969024, 633 12398357632, 12406750592, 12415138432, 12423527552, 12431916416, 634 12440304512, 12448692352, 12457081216, 12465467776, 12473859968, 635 12482245504, 12490636672, 12499025536, 12507411584, 12515801728, 636 12524190592, 12532577152, 12540966272, 12549354368, 12557743232, 637 12566129536, 12574523264, 12582911872, 12591299456, 12599688064, 638 12608074624, 12616463488, 12624845696, 12633239936, 12641631616, 639 12650019968, 12658407296, 12666795136, 12675183232, 12683574656, 640 12691960192, 12700350592, 12708740224, 12717128576, 12725515904, 641 12733906816, 12742295168, 12750680192, 12759071872, 12767460736, 642 12775848832, 12784236928, 12792626816, 12801014656, 12809404288, 643 12817789312, 12826181504, 12834568832, 12842954624, 12851345792, 644 12859732352, 12868122496, 12876512128, 12884901248, 12893289088, 645 12901672832, 12910067584, 12918455168, 12926842496, 12935232896, 646 12943620736, 12952009856, 12960396928, 12968786816, 12977176192, 647 12985563776, 12993951104, 13002341504, 13010730368, 13019115392, 648 13027506304, 13035895168, 13044272512, 13052673152, 13061062528, 649 13069446272, 13077838976, 13086227072, 13094613632, 13103000192, 650 13111393664, 13119782528, 13128157568, 13136559232, 13144945024, 651 13153329536, 13161724288, 13170111872, 13178502784, 13186884736, 652 13195279744, 13203667072, 13212057472, 13220445824, 13228832128, 653 13237221248, 13245610624, 13254000512, 13262388352, 13270777472, 654 13279166336, 13287553408, 13295943296, 13304331904, 13312719488, 655 13321108096, 13329494656, 13337885824, 13346274944, 13354663808, 656 13363051136, 13371439232, 13379825024, 13388210816, 13396605056, 657 13404995456, 13413380224, 13421771392, 13430159744, 13438546048, 658 13446937216, 13455326848, 13463708288, 13472103808, 13480492672, 659 13488875648, 13497269888, 13505657728, 13514045312, 13522435712, 660 13530824576, 13539210112, 13547599232, 13555989376, 13564379008, 661 13572766336, 13581154432, 13589544832, 13597932928, 13606320512, 662 13614710656, 13623097472, 13631477632, 13639874944, 13648264064, 663 13656652928, 13665041792, 13673430656, 13681818496, 13690207616, 664 13698595712, 13706982272, 13715373184, 13723762048, 13732150144, 665 13740536704, 13748926592, 13757316224, 13765700992, 13774090112, 666 13782477952, 13790869376, 13799259008, 13807647872, 13816036736, 667 13824425344, 13832814208, 13841202304, 13849591424, 13857978752, 668 13866368896, 13874754688, 13883145344, 13891533184, 13899919232, 669 13908311168, 13916692096, 13925085056, 13933473152, 13941866368, 670 13950253696, 13958643584, 13967032192, 13975417216, 13983807616, 671 13992197504, 14000582272, 14008973696, 14017363072, 14025752192, 672 14034137984, 14042528384, 14050918016, 14059301504, 14067691648, 673 14076083584, 14084470144, 14092852352, 14101249664, 14109635968, 674 14118024832, 14126407552, 14134804352, 14143188608, 14151577984, 675 14159968384, 14168357248, 14176741504, 14185127296, 14193521024, 676 14201911424, 14210301824, 14218685056, 14227067264, 14235467392, 677 14243855488, 14252243072, 14260630144, 14269021568, 14277409408, 678 14285799296, 14294187904, 14302571392, 14310961792, 14319353728, 679 14327738752, 14336130944, 14344518784, 14352906368, 14361296512, 680 14369685376, 14378071424, 14386462592, 14394848128, 14403230848, 681 14411627392, 14420013952, 14428402304, 14436793472, 14445181568, 682 14453569664, 14461959808, 14470347904, 14478737024, 14487122816, 683 14495511424, 14503901824, 14512291712, 14520677504, 14529064832, 684 14537456768, 14545845632, 14554234496, 14562618496, 14571011456, 685 14579398784, 14587789184, 14596172672, 14604564608, 14612953984, 686 14621341312, 14629724288, 14638120832, 14646503296, 14654897536, 687 14663284864, 14671675264, 14680061056, 14688447616, 14696835968, 688 14705228416, 14713616768, 14722003328, 14730392192, 14738784128, 689 14747172736, 14755561088, 14763947648, 14772336512, 14780725376, 690 14789110144, 14797499776, 14805892736, 14814276992, 14822670208, 691 14831056256, 14839444352, 14847836032, 14856222848, 14864612992, 692 14872997504, 14881388672, 14889775744, 14898165376, 14906553472, 693 14914944896, 14923329664, 14931721856, 14940109696, 14948497024, 694 14956887424, 14965276544, 14973663616, 14982053248, 14990439808, 695 14998830976, 15007216768, 15015605888, 15023995264, 15032385152, 696 15040768384, 15049154944, 15057549184, 15065939072, 15074328448, 697 15082715008, 15091104128, 15099493504, 15107879296, 15116269184, 698 15124659584, 15133042304, 15141431936, 15149824384, 15158214272, 699 15166602368, 15174991232, 15183378304, 15191760512, 15200154496, 700 15208542592, 15216931712, 15225323392, 15233708416, 15242098048, 701 15250489216, 15258875264, 15267265408, 15275654528, 15284043136, 702 15292431488, 15300819584, 15309208192, 15317596544, 15325986176, 703 15334374784, 15342763648, 15351151744, 15359540608, 15367929728, 704 15376318336, 15384706432, 15393092992, 15401481856, 15409869952, 705 15418258816, 15426649984, 15435037568, 15443425664, 15451815296, 706 15460203392, 15468589184, 15476979328, 15485369216, 15493755776, 707 15502146944, 15510534272, 15518924416, 15527311232, 15535699072, 708 15544089472, 15552478336, 15560866688, 15569254528, 15577642624, 709 15586031488, 15594419072, 15602809472, 15611199104, 15619586432, 710 15627975296, 15636364928, 15644753792, 15653141888, 15661529216, 711 15669918848, 15678305152, 15686696576, 15695083136, 15703474048, 712 15711861632, 15720251264, 15728636288, 15737027456, 15745417088, 713 15753804928, 15762194048, 15770582656, 15778971008, 15787358336, 714 15795747712, 15804132224, 15812523392, 15820909696, 15829300096, 715 15837691264, 15846071936, 15854466944, 15862855808, 15871244672, 716 15879634816, 15888020608, 15896409728, 15904799104, 15913185152, 717 15921577088, 15929966464, 15938354816, 15946743424, 15955129472, 718 15963519872, 15971907968, 15980296064, 15988684928, 15997073024, 719 16005460864, 16013851264, 16022241152, 16030629248, 16039012736, 720 16047406976, 16055794816, 16064181376, 16072571264, 16080957824, 721 16089346688, 16097737856, 16106125184, 16114514816, 16122904192, 722 16131292544, 16139678848, 16148066944, 16156453504, 16164839552, 723 16173236096, 16181623424, 16190012032, 16198401152, 16206790528, 724 16215177344, 16223567744, 16231956352, 16240344704, 16248731008, 725 16257117824, 16265504384, 16273898624, 16282281856, 16290668672, 726 16299064192, 16307449216, 16315842176, 16324230016, 16332613504, 727 16341006464, 16349394304, 16357783168, 16366172288, 16374561664, 728 16382951296, 16391337856, 16399726208, 16408116352, 16416505472, 729 16424892032, 16433282176, 16441668224, 16450058624, 16458448768, 730 16466836864, 16475224448, 16483613056, 16492001408, 16500391808, 731 16508779648, 16517166976, 16525555328, 16533944192, 16542330752, 732 16550719616, 16559110528, 16567497088, 16575888512, 16584274816, 733 16592665472, 16601051008, 16609442944, 16617832064, 16626218624, 734 16634607488, 16642996096, 16651385728, 16659773824, 16668163712, 735 16676552576, 16684938112, 16693328768, 16701718144, 16710095488, 736 16718492288, 16726883968, 16735272832, 16743661184, 16752049792, 737 16760436608, 16768827008, 16777214336, 16785599104, 16793992832, 738 16802381696, 16810768768, 16819151744, 16827542656, 16835934848, 739 16844323712, 16852711552, 16861101952, 16869489536, 16877876864, 740 16886265728, 16894653056, 16903044736, 16911431296, 16919821696, 741 16928207488, 16936592768, 16944987776, 16953375616, 16961763968, 742 16970152832, 16978540928, 16986929536, 16995319168, 17003704448, 743 17012096896, 17020481152, 17028870784, 17037262208, 17045649536, 744 17054039936, 17062426496, 17070814336, 17079205504, 17087592064, 745 17095978112, 17104369024, 17112759424, 17121147776, 17129536384, 746 17137926016, 17146314368, 17154700928, 17163089792, 17171480192, 747 17179864192, 17188256896, 17196644992, 17205033856, 17213423488, 748 17221811072, 17230198912, 17238588032, 17246976896, 17255360384, 749 17263754624, 17272143232, 17280530048, 17288918912, 17297309312, 750 17305696384, 17314085504, 17322475136, 17330863744, 17339252096, 751 17347640192, 17356026496, 17364413824, 17372796544, 17381190016, 752 17389583488, 17397972608, 17406360704, 17414748544, 17423135872, 753 17431527296, 17439915904, 17448303232, 17456691584, 17465081728, 754 17473468288, 17481857408, 17490247552, 17498635904, 17507022464, 755 17515409024, 17523801728, 17532189824, 17540577664, 17548966016, 756 17557353344, 17565741184, 17574131584, 17582519168, 17590907008, 757 17599296128, 17607687808, 17616076672, 17624455808, 17632852352, 758 17641238656, 17649630848, 17658018944, 17666403968, 17674794112, 759 17683178368, 17691573376, 17699962496, 17708350592, 17716739968, 760 17725126528, 17733517184, 17741898112, 17750293888, 17758673024, 761 17767070336, 17775458432, 17783848832, 17792236928, 17800625536, 762 17809012352, 17817402752, 17825785984, 17834178944, 17842563968, 763 17850955648, 17859344512, 17867732864, 17876119424, 17884511872, 764 17892900224, 17901287296, 17909677696, 17918058112, 17926451072, 765 17934843776, 17943230848, 17951609216, 17960008576, 17968397696, 766 17976784256, 17985175424, 17993564032, 18001952128, 18010339712, 767 18018728576, 18027116672, 18035503232, 18043894144, 18052283264, 768 18060672128, 18069056384, 18077449856, 18085837184, 18094225792, 769 18102613376, 18111004544, 18119388544, 18127781248, 18136170368, 770 18144558976, 18152947328, 18161336192, 18169724288, 18178108544, 771 18186498944, 18194886784, 18203275648, 18211666048, 18220048768, 772 18228444544, 18236833408, 18245220736} 773 774 // cacheSizes is a lookup table for the ethash verification cache size for the 775 // first 2048 epochs (i.e. 61440000 blocks). 776 var cacheSizes = []uint64{ 777 16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, 778 17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, 779 18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, 780 19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, 781 20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, 782 21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, 783 22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, 784 23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, 785 24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, 786 25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, 787 25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, 788 26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, 789 27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, 790 28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, 791 29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, 792 30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, 793 31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, 794 32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, 795 33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, 796 34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, 797 35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, 798 36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, 799 36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, 800 37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, 801 38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, 802 39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, 803 40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, 804 41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, 805 42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, 806 43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, 807 44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, 808 45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, 809 46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, 810 47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, 811 47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, 812 48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, 813 49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, 814 50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, 815 51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, 816 52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, 817 53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, 818 54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, 819 55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, 820 56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, 821 57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, 822 58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, 823 58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, 824 59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, 825 60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, 826 61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, 827 62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, 828 63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, 829 64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, 830 65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, 831 66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, 832 67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, 833 68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, 834 69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, 835 69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, 836 70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, 837 71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, 838 72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, 839 73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, 840 74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, 841 75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, 842 76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, 843 77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, 844 78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, 845 79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, 846 80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, 847 81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, 848 81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, 849 82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, 850 83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, 851 84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, 852 85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, 853 86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, 854 87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, 855 88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, 856 89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, 857 90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, 858 91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, 859 92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, 860 92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, 861 93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, 862 94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, 863 95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, 864 96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, 865 97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, 866 98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, 867 99352384, 99482816, 99614272, 99745472, 99876416, 100007104, 868 100138048, 100267072, 100401088, 100529984, 100662592, 100791872, 869 100925248, 101056064, 101187392, 101317952, 101449408, 101580608, 870 101711296, 101841728, 101973824, 102104896, 102235712, 102366016, 871 102498112, 102628672, 102760384, 102890432, 103021888, 103153472, 872 103284032, 103415744, 103545152, 103677248, 103808576, 103939648, 873 104070976, 104201792, 104332736, 104462528, 104594752, 104725952, 874 104854592, 104988608, 105118912, 105247808, 105381184, 105511232, 875 105643072, 105774784, 105903296, 106037056, 106167872, 106298944, 876 106429504, 106561472, 106691392, 106822592, 106954304, 107085376, 877 107216576, 107346368, 107478464, 107609792, 107739712, 107872192, 878 108003136, 108131392, 108265408, 108396224, 108527168, 108657344, 879 108789568, 108920384, 109049792, 109182272, 109312576, 109444928, 880 109572928, 109706944, 109837888, 109969088, 110099648, 110230976, 881 110362432, 110492992, 110624704, 110755264, 110886208, 111017408, 882 111148864, 111279296, 111410752, 111541952, 111673024, 111803456, 883 111933632, 112066496, 112196416, 112328512, 112457792, 112590784, 884 112715968, 112852672, 112983616, 113114944, 113244224, 113376448, 885 113505472, 113639104, 113770304, 113901376, 114031552, 114163264, 886 114294592, 114425536, 114556864, 114687424, 114818624, 114948544, 887 115080512, 115212224, 115343296, 115473472, 115605184, 115736128, 888 115867072, 115997248, 116128576, 116260288, 116391488, 116522944, 889 116652992, 116784704, 116915648, 117046208, 117178304, 117308608, 890 117440192, 117569728, 117701824, 117833024, 117964096, 118094656, 891 118225984, 118357312, 118489024, 118617536, 118749632, 118882112, 892 119012416, 119144384, 119275328, 119406016, 119537344, 119668672, 893 119798464, 119928896, 120061376, 120192832, 120321728, 120454336, 894 120584512, 120716608, 120848192, 120979136, 121109056, 121241408, 895 121372352, 121502912, 121634752, 121764416, 121895744, 122027072, 896 122157632, 122289088, 122421184, 122550592, 122682944, 122813888, 897 122945344, 123075776, 123207488, 123338048, 123468736, 123600704, 898 123731264, 123861952, 123993664, 124124608, 124256192, 124386368, 899 124518208, 124649024, 124778048, 124911296, 125041088, 125173696, 900 125303744, 125432896, 125566912, 125696576, 125829056, 125958592, 901 126090304, 126221248, 126352832, 126483776, 126615232, 126746432, 902 126876608, 127008704, 127139392, 127270336, 127401152, 127532224, 903 127663552, 127794752, 127925696, 128055232, 128188096, 128319424, 904 128449856, 128581312, 128712256, 128843584, 128973632, 129103808, 905 129236288, 129365696, 129498944, 129629888, 129760832, 129892288, 906 130023104, 130154048, 130283968, 130416448, 130547008, 130678336, 907 130807616, 130939456, 131071552, 131202112, 131331776, 131464384, 908 131594048, 131727296, 131858368, 131987392, 132120256, 132250816, 909 132382528, 132513728, 132644672, 132774976, 132905792, 133038016, 910 133168832, 133299392, 133429312, 133562048, 133692992, 133823296, 911 133954624, 134086336, 134217152, 134348608, 134479808, 134607296, 912 134741056, 134872384, 135002944, 135134144, 135265472, 135396544, 913 135527872, 135659072, 135787712, 135921472, 136052416, 136182848, 914 136313792, 136444864, 136576448, 136707904, 136837952, 136970048, 915 137099584, 137232064, 137363392, 137494208, 137625536, 137755712, 916 137887424, 138018368, 138149824, 138280256, 138411584, 138539584, 917 138672832, 138804928, 138936128, 139066688, 139196864, 139328704, 918 139460032, 139590208, 139721024, 139852864, 139984576, 140115776, 919 140245696, 140376512, 140508352, 140640064, 140769856, 140902336, 920 141032768, 141162688, 141294016, 141426496, 141556544, 141687488, 921 141819584, 141949888, 142080448, 142212544, 142342336, 142474432, 922 142606144, 142736192, 142868288, 142997824, 143129408, 143258944, 923 143392448, 143523136, 143653696, 143785024, 143916992, 144045632, 924 144177856, 144309184, 144440768, 144570688, 144701888, 144832448, 925 144965056, 145096384, 145227584, 145358656, 145489856, 145620928, 926 145751488, 145883072, 146011456, 146144704, 146275264, 146407232, 927 146538176, 146668736, 146800448, 146931392, 147062336, 147193664, 928 147324224, 147455936, 147586624, 147717056, 147848768, 147979456, 929 148110784, 148242368, 148373312, 148503232, 148635584, 148766144, 930 148897088, 149028416, 149159488, 149290688, 149420224, 149551552, 931 149683136, 149814976, 149943616, 150076352, 150208064, 150338624, 932 150470464, 150600256, 150732224, 150862784, 150993088, 151125952, 933 151254976, 151388096, 151519168, 151649728, 151778752, 151911104, 934 152042944, 152174144, 152304704, 152435648, 152567488, 152698816, 935 152828992, 152960576, 153091648, 153222976, 153353792, 153484096, 936 153616192, 153747008, 153878336, 154008256, 154139968, 154270912, 937 154402624, 154533824, 154663616, 154795712, 154926272, 155057984, 938 155188928, 155319872, 155450816, 155580608, 155712064, 155843392, 939 155971136, 156106688, 156237376, 156367424, 156499264, 156630976, 940 156761536, 156892352, 157024064, 157155008, 157284416, 157415872, 941 157545536, 157677248, 157810496, 157938112, 158071744, 158203328, 942 158334656, 158464832, 158596288, 158727616, 158858048, 158988992, 943 159121216, 159252416, 159381568, 159513152, 159645632, 159776192, 944 159906496, 160038464, 160169536, 160300352, 160430656, 160563008, 945 160693952, 160822208, 160956352, 161086784, 161217344, 161349184, 946 161480512, 161611456, 161742272, 161873216, 162002752, 162135872, 947 162266432, 162397888, 162529216, 162660032, 162790976, 162922048, 948 163052096, 163184576, 163314752, 163446592, 163577408, 163707968, 949 163839296, 163969984, 164100928, 164233024, 164364224, 164494912, 950 164625856, 164756672, 164887616, 165019072, 165150016, 165280064, 951 165412672, 165543104, 165674944, 165805888, 165936832, 166067648, 952 166198336, 166330048, 166461248, 166591552, 166722496, 166854208, 953 166985408, 167116736, 167246656, 167378368, 167508416, 167641024, 954 167771584, 167903168, 168034112, 168164032, 168295744, 168427456, 955 168557632, 168688448, 168819136, 168951616, 169082176, 169213504, 956 169344832, 169475648, 169605952, 169738048, 169866304, 169999552, 957 170131264, 170262464, 170393536, 170524352, 170655424, 170782016, 958 170917696, 171048896, 171179072, 171310784, 171439936, 171573184, 959 171702976, 171835072, 171966272, 172097216, 172228288, 172359232, 960 172489664, 172621376, 172747712, 172883264, 173014208, 173144512, 961 173275072, 173407424, 173539136, 173669696, 173800768, 173931712, 962 174063424, 174193472, 174325696, 174455744, 174586816, 174718912, 963 174849728, 174977728, 175109696, 175242688, 175374272, 175504832, 964 175636288, 175765696, 175898432, 176028992, 176159936, 176291264, 965 176422592, 176552512, 176684864, 176815424, 176946496, 177076544, 966 177209152, 177340096, 177470528, 177600704, 177731648, 177864256, 967 177994816, 178126528, 178257472, 178387648, 178518464, 178650176, 968 178781888, 178912064, 179044288, 179174848, 179305024, 179436736, 969 179568448, 179698496, 179830208, 179960512, 180092608, 180223808, 970 180354752, 180485696, 180617152, 180748096, 180877504, 181009984, 971 181139264, 181272512, 181402688, 181532608, 181663168, 181795136, 972 181926592, 182057536, 182190016, 182320192, 182451904, 182582336, 973 182713792, 182843072, 182976064, 183107264, 183237056, 183368384, 974 183494848, 183631424, 183762752, 183893824, 184024768, 184154816, 975 184286656, 184417984, 184548928, 184680128, 184810816, 184941248, 976 185072704, 185203904, 185335616, 185465408, 185596352, 185727296, 977 185859904, 185989696, 186121664, 186252992, 186383552, 186514112, 978 186645952, 186777152, 186907328, 187037504, 187170112, 187301824, 979 187429184, 187562048, 187693504, 187825472, 187957184, 188087104, 980 188218304, 188349376, 188481344, 188609728, 188743616, 188874304, 981 189005248, 189136448, 189265088, 189396544, 189528128, 189660992, 982 189791936, 189923264, 190054208, 190182848, 190315072, 190447424, 983 190577984, 190709312, 190840768, 190971328, 191102656, 191233472, 984 191364032, 191495872, 191626816, 191758016, 191888192, 192020288, 985 192148928, 192282176, 192413504, 192542528, 192674752, 192805952, 986 192937792, 193068608, 193198912, 193330496, 193462208, 193592384, 987 193723456, 193854272, 193985984, 194116672, 194247232, 194379712, 988 194508352, 194641856, 194772544, 194900672, 195035072, 195166016, 989 195296704, 195428032, 195558592, 195690304, 195818176, 195952576, 990 196083392, 196214336, 196345792, 196476736, 196607552, 196739008, 991 196869952, 197000768, 197130688, 197262784, 197394368, 197523904, 992 197656384, 197787584, 197916608, 198049472, 198180544, 198310208, 993 198442432, 198573632, 198705088, 198834368, 198967232, 199097792, 994 199228352, 199360192, 199491392, 199621696, 199751744, 199883968, 995 200014016, 200146624, 200276672, 200408128, 200540096, 200671168, 996 200801984, 200933312, 201062464, 201194944, 201326144, 201457472, 997 201588544, 201719744, 201850816, 201981632, 202111552, 202244032, 998 202374464, 202505152, 202636352, 202767808, 202898368, 203030336, 999 203159872, 203292608, 203423296, 203553472, 203685824, 203816896, 1000 203947712, 204078272, 204208192, 204341056, 204472256, 204603328, 1001 204733888, 204864448, 204996544, 205125568, 205258304, 205388864, 1002 205517632, 205650112, 205782208, 205913536, 206044736, 206176192, 1003 206307008, 206434496, 206569024, 206700224, 206831168, 206961856, 1004 207093056, 207223616, 207355328, 207486784, 207616832, 207749056, 1005 207879104, 208010048, 208141888, 208273216, 208404032, 208534336, 1006 208666048, 208796864, 208927424, 209059264, 209189824, 209321792, 1007 209451584, 209582656, 209715136, 209845568, 209976896, 210106432, 1008 210239296, 210370112, 210501568, 210630976, 210763712, 210894272, 1009 211024832, 211156672, 211287616, 211418176, 211549376, 211679296, 1010 211812032, 211942592, 212074432, 212204864, 212334016, 212467648, 1011 212597824, 212727616, 212860352, 212991424, 213120832, 213253952, 1012 213385024, 213515584, 213645632, 213777728, 213909184, 214040128, 1013 214170688, 214302656, 214433728, 214564544, 214695232, 214826048, 1014 214956992, 215089088, 215219776, 215350592, 215482304, 215613248, 1015 215743552, 215874752, 216005312, 216137024, 216267328, 216399296, 1016 216530752, 216661696, 216790592, 216923968, 217054528, 217183168, 1017 217316672, 217448128, 217579072, 217709504, 217838912, 217972672, 1018 218102848, 218233024, 218364736, 218496832, 218627776, 218759104, 1019 218888896, 219021248, 219151936, 219281728, 219413056, 219545024, 1020 219675968, 219807296, 219938624, 220069312, 220200128, 220331456, 1021 220461632, 220592704, 220725184, 220855744, 220987072, 221117888, 1022 221249216, 221378368, 221510336, 221642048, 221772736, 221904832, 1023 222031808, 222166976, 222297536, 222428992, 222559936, 222690368, 1024 222820672, 222953152, 223083968, 223213376, 223345984, 223476928, 1025 223608512, 223738688, 223869376, 224001472, 224132672, 224262848, 1026 224394944, 224524864, 224657344, 224788288, 224919488, 225050432, 1027 225181504, 225312704, 225443776, 225574592, 225704768, 225834176, 1028 225966784, 226097216, 226229824, 226360384, 226491712, 226623424, 1029 226754368, 226885312, 227015104, 227147456, 227278528, 227409472, 1030 227539904, 227669696, 227802944, 227932352, 228065216, 228196288, 1031 228326464, 228457792, 228588736, 228720064, 228850112, 228981056, 1032 229113152, 229243328, 229375936, 229505344, 229636928, 229769152, 1033 229894976, 230030272, 230162368, 230292416, 230424512, 230553152, 1034 230684864, 230816704, 230948416, 231079616, 231210944, 231342016, 1035 231472448, 231603776, 231733952, 231866176, 231996736, 232127296, 1036 232259392, 232388672, 232521664, 232652608, 232782272, 232914496, 1037 233043904, 233175616, 233306816, 233438528, 233569984, 233699776, 1038 233830592, 233962688, 234092224, 234221888, 234353984, 234485312, 1039 234618304, 234749888, 234880832, 235011776, 235142464, 235274048, 1040 235403456, 235535936, 235667392, 235797568, 235928768, 236057152, 1041 236190272, 236322752, 236453312, 236583616, 236715712, 236846528, 1042 236976448, 237108544, 237239104, 237371072, 237501632, 237630784, 1043 237764416, 237895232, 238026688, 238157632, 238286912, 238419392, 1044 238548032, 238681024, 238812608, 238941632, 239075008, 239206336, 1045 239335232, 239466944, 239599168, 239730496, 239861312, 239992384, 1046 240122816, 240254656, 240385856, 240516928, 240647872, 240779072, 1047 240909632, 241040704, 241171904, 241302848, 241433408, 241565248, 1048 241696192, 241825984, 241958848, 242088256, 242220224, 242352064, 1049 242481856, 242611648, 242744896, 242876224, 243005632, 243138496, 1050 243268672, 243400384, 243531712, 243662656, 243793856, 243924544, 1051 244054592, 244187072, 244316608, 244448704, 244580032, 244710976, 1052 244841536, 244972864, 245104448, 245233984, 245365312, 245497792, 1053 245628736, 245759936, 245889856, 246021056, 246152512, 246284224, 1054 246415168, 246545344, 246675904, 246808384, 246939584, 247070144, 1055 247199552, 247331648, 247463872, 247593536, 247726016, 247857088, 1056 247987648, 248116928, 248249536, 248380736, 248512064, 248643008, 1057 248773312, 248901056, 249036608, 249167552, 249298624, 249429184, 1058 249560512, 249692096, 249822784, 249954112, 250085312, 250215488, 1059 250345792, 250478528, 250608704, 250739264, 250870976, 251002816, 1060 251133632, 251263552, 251395136, 251523904, 251657792, 251789248, 1061 251919424, 252051392, 252182464, 252313408, 252444224, 252575552, 1062 252706624, 252836032, 252968512, 253099712, 253227584, 253361728, 1063 253493056, 253623488, 253754432, 253885504, 254017216, 254148032, 1064 254279488, 254410432, 254541376, 254672576, 254803264, 254933824, 1065 255065792, 255196736, 255326528, 255458752, 255589952, 255721408, 1066 255851072, 255983296, 256114624, 256244416, 256374208, 256507712, 1067 256636096, 256768832, 256900544, 257031616, 257162176, 257294272, 1068 257424448, 257555776, 257686976, 257818432, 257949632, 258079552, 1069 258211136, 258342464, 258473408, 258603712, 258734656, 258867008, 1070 258996544, 259127744, 259260224, 259391296, 259522112, 259651904, 1071 259784384, 259915328, 260045888, 260175424, 260308544, 260438336, 1072 260570944, 260700992, 260832448, 260963776, 261092672, 261226304, 1073 261356864, 261487936, 261619648, 261750592, 261879872, 262011968, 1074 262143424, 262274752, 262404416, 262537024, 262667968, 262799296, 1075 262928704, 263061184, 263191744, 263322944, 263454656, 263585216, 1076 263716672, 263847872, 263978944, 264108608, 264241088, 264371648, 1077 264501184, 264632768, 264764096, 264895936, 265024576, 265158464, 1078 265287488, 265418432, 265550528, 265681216, 265813312, 265943488, 1079 266075968, 266206144, 266337728, 266468032, 266600384, 266731072, 1080 266862272, 266993344, 267124288, 267255616, 267386432, 267516992, 1081 267648704, 267777728, 267910592, 268040512, 268172096, 268302784, 1082 268435264, 268566208, 268696256, 268828096, 268959296, 269090368, 1083 269221312, 269352256, 269482688, 269614784, 269745856, 269876416, 1084 270007616, 270139328, 270270272, 270401216, 270531904, 270663616, 1085 270791744, 270924736, 271056832, 271186112, 271317184, 271449536, 1086 271580992, 271711936, 271843136, 271973056, 272105408, 272236352, 1087 272367296, 272498368, 272629568, 272759488, 272891456, 273022784, 1088 273153856, 273284672, 273415616, 273547072, 273677632, 273808448, 1089 273937088, 274071488, 274200896, 274332992, 274463296, 274595392, 1090 274726208, 274857536, 274988992, 275118656, 275250496, 275382208, 1091 275513024, 275643968, 275775296, 275906368, 276037184, 276167872, 1092 276297664, 276429376, 276560576, 276692672, 276822976, 276955072, 1093 277085632, 277216832, 277347008, 277478848, 277609664, 277740992, 1094 277868608, 278002624, 278134336, 278265536, 278395328, 278526784, 1095 278657728, 278789824, 278921152, 279052096, 279182912, 279313088, 1096 279443776, 279576256, 279706048, 279838528, 279969728, 280099648, 1097 280230976, 280361408, 280493632, 280622528, 280755392, 280887104, 1098 281018176, 281147968, 281278912, 281411392, 281542592, 281673152, 1099 281803712, 281935552, 282066496, 282197312, 282329024, 282458816, 1100 282590272, 282720832, 282853184, 282983744, 283115072, 283246144, 1101 283377344, 283508416, 283639744, 283770304, 283901504, 284032576, 1102 284163136, 284294848, 284426176, 284556992, 284687296, 284819264, 1103 284950208, 285081536}