github.com/SmartMeshFoundation/Spectrum@v0.0.0-20220621030607-452a266fee1e/consensus/ethash/algorithm.go (about)

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