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