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