github.com/aigarnetwork/aigar@v0.0.0-20191115204914-d59a6eb70f8e/consensus/ethash/algorithm.go (about)

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