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