001package squidpony.squidmath;
002
003import squidpony.annotation.Beta;
004
005/**
006 * Arbitrary-dimensional continuous noise that maintains most of the same style even as the dimensionality gets fairly
007 * high. If you know what dimension of noise you need, and it's covered by {@link FoamNoise} (meaning it's 2D, 3D, 4D,
008 * or 6D noise), then using FoamNoise will give you a significantly faster version of approximately the same algorithm.
009 * If your noise has an unknown dimension count, this won't really work either, since PhantomNoise needs to do some
010 * preparation and allocation for a specific dimension in its constructor. But, if you know what the range of dimensions
011 * is, and the lowest is at least 2D, you can make one PhantomNoise per dimension easily enough.
012 * <br>
013 * The algorithm this uses is surprisingly simple. To produce N-D noise, it makes N+1 calls to N-D value noise, with
014 * each call using a different rotation of the same size of grid. It "domain warps" value noise calls after the first,
015 * adding the previous value noise result to one coordinate of the next value noise call. To get a PhantomNoise result,
016 * it averages all the value noise calls and curves the output range so it doesn't get more biased toward 0 with higher
017 * dimensions (which would happen with a pure average of a rising number of variables). The curving here uses adapted
018 * code from libGDX's Interpolation.Pow class; it looks
019 * <a href="https://user-images.githubusercontent.com/12948924/75205109-c2194b00-5727-11ea-99e9-614c2f613331.png">like this for 2D</a>,
020 * <a href="https://user-images.githubusercontent.com/12948924/75205657-36082300-5729-11ea-8636-683fa98d1988.png">like this for 3D</a>, and
021 * <a href="https://user-images.githubusercontent.com/12948924/75206040-52f12600-572a-11ea-8621-7763df2868e5.png">like this for 4D</a>.
022 * There's some preparation this does in the constructor, which eliminates the need for allocations during noise
023 * generation. For N-D PhantomNoise, this makes N+1 double arrays, one for each rotation for a value noise call, and
024 * each rotation array has N items. The rotations match the vertices of an N-simplex, so a triangle in 2D, a tetrahedron
025 * in 3D, etc. It also stores two working-room arrays, each with N+1 double items, two frequently-edited int arrays of
026 * the floors of doubles it's using, and of modified versions of those floors to be hashed (each with N+1 items), and
027 * interestingly, a {@link CrossHash.Yolk} hash functor, seeded in the PhantomNoise constructor.
028 * <br>
029 * At higher dimensions, Simplex noise (what {@link SeededNoise} produces) starts to change how it looks compared to
030 * lower dimensions. PhantomNoise, on the other hand, maintains a fairly consistent blob-like organic look, such as
031 * <a href="https://i.imgur.com/wxomHAc.png">this 6D PhantomNoise sample</a>. Red and purple mark the highest and lowest
032 * possible values, respectively, and while they appear plenty in PhantomNoise, they are absent in
033 * <a href="https://i.imgur.com/2t7hRtk.png">this 6D SeededNoise sample</a>. There may be differences in how the inputs
034 * are handled between the two samples, but 6D Simplex generally suffers from "the curse of dimensionality" more-so than
035 * PhantomNoise (or Perlin noise like {@link ClassicNoise}, somewhat surprisingly), with the "curse" affecting the
036 * density of information in higher-dimensional space.
037 * <br>
038 * This is marked Beta because it's still pretty slow at higher dimensions, and if some optimization becomes available
039 * here, I'll take it and the output will change from this version.
040 */
041@Beta
042public class PhantomNoise {
043    private final CrossHash.Yolk yolk;
044    public final int dim;
045    private final double inverse;
046    private final double[] working, points;
047    private final double[][] vertices;
048    private final int[] floors, hashFloors;
049    public PhantomNoise() {
050        this(0xFEEDBEEF1337CAFEL, 3);
051    }
052
053    public PhantomNoise(long seed, int dimension) {
054        dim = Math.max(2, dimension);
055        working = new double[dim+1];
056        points = new double[dim+1];
057        vertices = new double[dim+1][dim];
058        double id = -1.0 / dim;
059        vertices[0][0] = 1.0;
060        for (int v = 1; v <= dim; v++) {
061            vertices[v][0] = id;
062        }
063        for (int d = 1; d < dim; d++) {
064            double t = 0.0;
065            for (int i = 0; i < d; i++) {
066                t += vertices[d][i] * vertices[d][i];
067            }
068            vertices[d][d] = Math.sqrt(1.0 - t);
069            t = (id - t) / vertices[d][d];
070            for (int v = d + 1; v <= dim; v++) {
071                vertices[v][d] = t;
072            }
073        }
074        for (int v = 0; v <= dim; v++) {
075            final double theta = NumberTools.atan2(vertices[v][1], vertices[v][0]) + 0.6180339887498949,
076                    dist = Math.sqrt(vertices[v][1] * vertices[v][1] + vertices[v][0] * vertices[v][0]);
077            vertices[v][0] = NumberTools.cos(theta) * dist;
078            vertices[v][1] = NumberTools.sin(theta) * dist;
079        }
080        floors = new int[dim+1];
081        hashFloors = new int[dim+1];
082        yolk = new CrossHash.Yolk(seed);
083        inverse = 1.0 / (dim + 1.0);
084//        printDebugInfo();
085    }
086
087    protected double valueNoise()
088    {
089        hashFloors[dim] = NumberTools.doubleToMixedIntBits(working[dim]);
090        for (int i = 0; i < dim; i++) {
091            floors[i] = working[i] >= 0.0 ? (int)working[i] : (int)working[i] - 1;
092            working[i] -= floors[i];
093            working[i] *= working[i] * (3.0 - 2.0 * working[i]);
094        }
095        double sum = 0.0, temp;
096        final int limit = 1 << dim;
097        int bit;
098        for (int i = 0; i < limit; i++) {
099            temp = 1.0;
100            for (int j = 0; j < dim; j++) {
101                bit = (i >>> j & 1);
102                temp *= bit + (1|-bit) * working[j];
103                hashFloors[j] = floors[j] - bit;
104            }
105            sum += temp * yolk.hash(hashFloors);
106        }
107        return (sum * 0x1p-32 + 0.5);
108    }
109    
110    public double getNoise(double... args) {
111        for (int v = 0; v <= dim; v++) {
112            points[v] = 0.0;
113            for (int d = 0; d < dim; d++) {
114                points[v] += args[d] * vertices[v][d];
115            }
116        }
117        working[dim] = 0.6180339887498949; // inverse golden ratio; irrational, so its bit representation nears random
118        double result = 0.0, warp = 0.0;
119        for (int i = 0; i <= dim; i++) {
120            for (int j = 0, d = 0; j < dim; j++, d++) {
121                if(d == i) d++;
122                working[j] = points[d];
123            }
124            working[0] += warp;
125            warp = valueNoise();
126            result += warp;
127            working[dim] += -0.423310825130748; // e - pi
128        }
129        result *= inverse;
130        return (result <= 0.5)
131                ? Math.pow(result * 2, dim) - 1.0
132                : Math.pow((result - 1) * 2, dim) * (((dim & 1) << 1) - 1) + 1.0;
133//        for (int i = 1; i < dim; i++) {
134//            result *= result * (3.0 - 2.0 * result);
135//        }
136//        return  (result * result * (6.0 - 4.0 * result) - 1.0);
137    }
138
139    public double getNoise2D(double x, double y) {
140        points[0] = -0.4161468365471422 * x + 0.9092974268256818 * y;
141        points[1] = -0.5794012529532914 * x + -0.8150424455671962 * y;
142        points[2] = 0.9955480895004332 * x + -0.09425498125848553 * y;
143        working[dim] = Math.PI;
144        double result = 0.0, warp = 0.0;
145        for (int i = 0; i <= dim; i++) {
146            for (int j = 0, d = 0; j < dim; j++, d++) {
147                if(d == i) d++;
148                working[j] = points[d] + warp;
149            }
150            warp = valueNoise();
151            result += warp;
152            working[dim] += Math.E;
153        }
154        result *= inverse;
155        return (result <= 0.5)
156                ? (result * result * 4) - 1.0
157                : ((result - 1) * (result - 1) * -4) + 1.0;
158
159//        result *= result * (3.0 - 2.0 * result);
160//        return  (result * result * (6.0 - 4.0 * result) - 1.0);
161    }
162    
163    void printDebugInfo(){         
164        System.out.println("PhantomNoise with Dimension " + dim + ":");
165        final String dimNames = "xyzwuvabcdefghijklmnopqrst";
166        for (int v = 0; v <= dim; v++) {
167            System.out.print("points[" + v + "] = ");
168            for (int i = 0; i < dim; i++) {
169                if(vertices[v][i] != 0.0) 
170                {
171                    if(i > 0)
172                        System.out.print(" + ");
173                    if(vertices[v][i] == 1.0)
174                        System.out.print(dimNames.charAt(i % dimNames.length()));
175                    else 
176                        System.out.print(dimNames.charAt(i % dimNames.length()) + " * " + vertices[v][i]);
177                }
178            }
179            System.out.println(';');
180        }
181    }
182
183    public static final double[][] goldenDouble = {
184            {0.6180339887498949},
185            {0.7548776662466927, 0.5698402909980532},
186            {0.8191725133961645, 0.6710436067037893, 0.5497004779019703},
187            {0.8566748838545029, 0.733891856627126, 0.6287067210378087, 0.5385972572236101},
188            {0.8812714616335696, 0.7766393890897682, 0.6844301295853426, 0.6031687406857282, 0.5315553977157913},
189            {0.8986537126286993, 0.8075784952213448, 0.7257334129697598,
190                    0.6521830259439717, 0.5860866975779695, 0.5266889867007359}
191    };
192
193    public static final long[][] goldenLong = {
194            {0x9E3779B97F4A7C15L},
195            {0xC13FA9A902A6328FL, 0x91E10DA5C79E7B1DL},
196            {0xD1B54A32D192ED03L, 0xABC98388FB8FAC03L, 0x8CB92BA72F3D8DD7L},
197            {0xDB4F0B9175AE2165L, 0xBBE0563303A4615FL, 0xA0F2EC75A1FE1575L, 0x89E182857D9ED689L},
198            {0xE19B01AA9D42C633L, 0xC6D1D6C8ED0C9631L, 0xAF36D01EF7518DBBL, 0x9A69443F36F710E7L, 0x881403B9339BD42DL},
199            {0xE60E2B722B53AEEBL, 0xCEBD76D9EDB6A8EFL, 0xB9C9AA3A51D00B65L, 0xA6F5777F6F88983FL, 0x9609C71EB7D03F7BL,
200                    0x86D516E50B04AB1BL},
201            {0xE95E1DD17D35800DL, 0xD4BC74E13F3C782FL, 0xC1EDBC5B5C68AC25L, 0xB0C8AC50F0EDEF5DL,
202                    0xA127A31C56D1CDB5L, 0x92E852C80D153DB3L, 0x85EB75C3024385C3L},
203            {0xEBEDEED9D803C815L, 0xD96EB1A810CAAF5FL, 0xC862B36DAF790DD5L, 0xB8ACD90C142FE10BL,
204                    0xAA324F90DED86B69L, 0x9CDA5E693FEA10AFL, 0x908E3D2C82567A73L, 0x8538ECB5BD456EA3L},
205            {0xEDF84ED4185625ADL, 0xDD35B2CD88449739L, 0xCDA146AB203DAD89L, 0xBF25C1FA63435003L,
206                    0xB1AF5C04970044E1L, 0xA52BB0C808635D87L, 0x9989A7D8994B239DL, 0x8EB95D05457AA16BL, 0x84AC0AA2B7D7E1C5L},
207            {0xEFA239AADFF080FFL, 0xE0504E7A17640707L, 0xD1F91E9D401F2CD3L, 0xC48CA286CD4C4B4DL, 0xB7FBD901347B3E45L,
208                    0xAC38B6695442DF75L, 0xA13614FB593F897DL, 0x96E7A62094FC418FL, 0x8D41E4ADD988EA91L, 0x843A0802F95827ADL},
209            {0xF104272092F57C5DL, 0xE2E8D1BC93B1BCBFL, 0xD5A0DBC4254CF233L, 0xC91FE60DC666F779L, 0xBD5A4AD0037BF1F9L,
210                    0xB24512C7D7E9D953L, 0xA7D5EB01A237A78BL, 0x9E031B3B27A07ECDL, 0x94C37CD5B1796B93L, 0x8C0E724FD5446177L,
211                    0x83DBDF3EF6A3B35BL},
212            {0xF22EECF611D9436FL, 0xE51CC09B3D83CAFFL, 0xD8BF2D5017352FF9L, 0xCD0C73D06EEC786BL,
213                    0xC1FB5B846B56C221L, 0xB7832B3BCCB1A38BL, 0xAD9BA24D9CF0D513L, 0xA43CF216E1960C65L, 0x9B5FB7D32E8D899FL,
214                    0x92FCF6CA403AB5A5L, 0x8B0E12CE05E62F5BL, 0x838CCB04C5269A59L},
215            {0xF32E81F362A69FDDL, 0xE701532702B6F82DL,
216                    0xDB70396E42C39DCBL, 0xD073641228368B05L, 0xC60366898AB7FC8FL, 0xBC193374F397645DL, 0xB2AE17DAC99253B9L,
217                    0xA9BBB6A090C6F39DL, 0xA13C043E2FE475FBL, 0x992942A852DFBF6FL, 0x917DFD6F28AFDA5DL, 0x8A35060EDCF5BD75L,
218                    0x8349706F500D7573L},
219            {0xF40BA295557EB087L, 0xE8A62E740B1030B7L, 0xDDC8F72B7958B04FL, 0xD36DA0129AF999DDL,
220                    0xC98E188E5138882DL, 0xC02498843215A687L, 0xB72B9CF7CB66736FL, 0xAE9DE4D05F66AF41L, 0xA6766DC536E4D933L,
221                    0x9EB0716EBBC7DEE5L, 0x9747627AA435C841L, 0x9036EA018B2BCF9FL, 0x897AE4FC66EB83E9L, 0x830F61D86049BD33L},
222            {0xF4CCD627D640C91BL, 0xEA171C21F30F9703L, 0xDFD9550E85ACC5E5L, 0xD60E418421899E89L, 0xCCB0DCDF5F586A6BL,
223                    0xC3BC5AB09BC44545L, 0xBB2C24468285A235L, 0xB2FBD654234A1D55L, 0xAB273EB15C029011L, 0xA3AA5A3471A8B1F5L,
224                    0x9C8152A3BD74C39DL, 0x95A87CBE60D27129L, 0x8F1C565AFE309975L, 0x88D9849B80100109L, 0x82DCD235027EF537L},
225            {0xF57716BC263D1509L, 0xEB5D28EA462157E9L, 0xE1ADA55D371AAD51L, 0xD8642B04DD8237EDL, 0xCF7C86F34CD519B3L,
226                    0xC6F2B276C5AAA9AFL, 0xBEC2D147B3AAF99BL, 0xB6E92FC9D8D36E9DL, 0xAF62415FDC02D5B3L, 0xA82A9ED07916A9A9L,
227                    0xA13F04BC98DBF8F5L, 0x9A9C52259EBB171FL, 0x943F870341597D83L, 0x8E25C2E84A744115L, 0x884C43B5A0F27CEDL,
228                    0x82B0645B06A50EEBL},
229            {0xF60E40931CDDA7E5L, 0xEC7F64E5DBDB09E5L, 0xE34F959426E19C8FL, 0xDA7B216D11305FB7L,
230                    0xD1FE7BF6F82D85CBL, 0xC9D63C0265C9E5E3L, 0xC1FF1A4B21B8D3A7L, 0xBA75F026E4723465L, 0xB337B641246F3469L,
231                    0xAC4183637B560F87L, 0xA5908B4A25D9127DL, 0x9F221D8425EA5847L, 0x98F3A45E9392C40DL, 0x9302A3DAAD39363DL,
232                    0x8D4CB8AE3C78C8BFL, 0x87CF974DE8CBB6C7L, 0x82890B01154E248BL},
233            {0xF6955E0400B91807L, 0xED8367D64493823BL,
234                    0xE4C6DA7D4C75AFC7L, 0xDC5C91B62A616C9DL, 0xD44186D34B52C711L, 0xCC72CFA5E47D8AB3L, 0xC4ED9D719FBC9AFFL,
235                    0xBDAF3BEA26B5C657L, 0xB6B5103A2FC143B5L, 0xAFFC9813B30F3AFBL, 0xA98368C8F1D0B4A7L, 0xA3472E6DFC5547E1L,
236                    0x9D45AB02671CFAD7L, 0x977CB5A2E1CF20EBL, 0x91EA39C265DCA3FBL, 0x8C8C366AB54F1765L, 0x8760BD83E4E72E47L,
237                    0x8265F322AF35A6BFL},
238            {0xF70EDC6AB8A796DBL, 0xEE6DAE32C9C7314DL, 0xE619AA5C2E8EEB25L, 0xDE101EE43CF747A9L,
239                    0xD64E71E254B3D023L, 0xCED220B05B087579L, 0xC798BF1ABDC1A781L, 0xC09FF697B9FEC8F7L, 0xB9E58585A5D89199L,
240                    0xB3673E6FFE31D46DL, 0xAD23075AFC31BA73L, 0xA716D9157803872DL, 0xA140BE90E0821C0BL, 0x9B9ED43F116D5253L,
241                    0x962F4775D3AD8C5DL, 0x90F055D7D4FF2B53L, 0x8BE04CC2E6247F0FL, 0x86FD88C35071DBFDL, 0x8246750C152D54B9L},
242            {0xF77CB1D641353E21L, 0xEF41DBE834EDE2F5L, 0xE74D154856960573L, 0xDF9C098CFBA62BC3L, 0xD82C7821AF16CE8DL,
243                    0xD0FC339E5B8BC6BBL, 0xCA09212412C75829L, 0xC35137BF42996A17L, 0xBCD27FCF29165CF9L, 0xB68B12725B6A44F9L,
244                    0xB07918F83419939BL, 0xAA9ACC56FEEFD88DL, 0xA4EE74A6BA40A66FL, 0x9F7268A046763B11L, 0x9A250D20DE35B0E7L,
245                    0x9504D4B1B2A19A37L, 0x90103F13887A534BL, 0x8B45D8CE340773A7L, 0x86A43AC3D2D7E5D9L, 0x822A09C7A37EA76BL},
246            {0xF7E0785B8323F5F9L, 0xF002ED136FCACF3FL, 0xE86546245CFD180FL, 0xE1057C8D01770237L, 0xD9E199C40A65E4C5L,
247                    0xD2F7B73254740353L, 0xCC45FDB16385F085L, 0xC5CAA50DF6AE27A1L, 0xBF83F38E96F3936DL, 0xB9703D7E0096EF81L,
248                    0xB38DE4B947898D35L, 0xADDB584198C64BF5L, 0xA85713D17B33C9EDL, 0xA2FF9F7573A53727L, 0x9DD38F27F07609E7L,
249                    0x98D18270621C5493L, 0x93F8240566E5E78DL, 0x8F462971F0E5F545L, 0x8ABA52BD4DE3D4BFL, 0x86536A15F9DFF487L,
250                    0x8210437F25824997L},
251            {0xF83B8239BBCD51D9L, 0xF0B35A2524B90EF9L, 0xE965B31B1E6CBB7FL, 0xE250C6ACD48A7A13L,
252                    0xDB72DC3546A1A6C1L, 0xD4CA486E2E16DE85L, 0xCE556D0823F747B3L, 0xC812B845ED79238BL, 0xC200A49AD6AFC313L,
253                    0xBC1DB84C03B717C3L, 0xB6688514A1537297L, 0xB0DFA7CCDEB4C5FBL, 0xAB81C8139ABA1463L, 0xA64D97FAAFB9C87BL,
254                    0xA141D3B5C976AD69L, 0x9C5D414BB1874509L, 0x979EB049FF0E766DL, 0x9304F97B17392461L, 0x8E8EFE9E6C844FD5L,
255                    0x8A3BAA22EB5B1E49L, 0x8609EEE3832393E3L, 0x81F8C7E5BB542C07L},
256            {0xF88EE8EC947BAC23L, 0xF15533119A11FE77L,
257                    0xEA51424F9DD1C415L, 0xE381868217F635A9L, 0xDCE47B2644A27E2BL, 0xD678A70494127F57L, 0xD03C9BDC9EF788C5L,
258                    0xCA2EF6138C473C7FL, 0xC44E5C64D64E360BL, 0xBE997F955D5F55F7L, 0xB90F1A28B6FBF225L, 0xB3ADF018A8D0B781L,
259                    0xAE74CE8EBF5EE175L, 0xA9628B9FF0A1A8E9L, 0xA476060A3B748BC9L, 0x9FAE24F434F06829L, 0x9B09D7AE756374C3L,
260                    0x96881576D6F2FC29L, 0x9227DD3D785D806DL, 0x8DE8356B76B8A95BL, 0x89C82BAB51682E05L, 0x85C6D4B2EBE9E125L,
261                    0x81E34C0F216F3C09L},
262            {0xF8DB9899F68818F9L, 0xF1EA3408C00AAE97L, 0xEB2A65F78A5C978BL, 0xE49ACC3BA426BE8FL,
263                    0xDE3A0E8BE3F8B7A7L, 0xD806DE3A15DCA725L, 0xD1FFF5EE60F535A5L, 0xCC24196497159D91L, 0xC672152B60A84E73L,
264                    0xC0E8BE65379A4499L, 0xBB86F28B24601C5BL, 0xB64B973130862B7FL, 0xB13599CC82969B59L, 0xAC43EF7B1777ADA7L,
265                    0xA77594CD0DB91721L, 0xA2C98D8F7799BE3BL, 0x9E3EE498A8DF438DL, 0x99D4AB95F5E69475L, 0x9589FADAD9A07791L,
266                    0x915DF13178769511L, 0x8D4FB3AC765D01CDL, 0x895E6D7A1699DA71L, 0x85894FB89C101161L, 0x81CF914BE11C4529L},
267            {0xF92258D8434F8A31L, 0xF273D5706B3800EDL, 0xEBF332215412178BL, 0xE59F33F1FFAA79DBL, 0xDF76A85BFC5FCBEBL,
268                    0xD9786511656FDABFL, 0xD3A347C4717A9A2BL, 0xCDF635F0848CE469L, 0xC8701CA4BB4E43A7L, 0xC30FF04FE53469DFL,
269                    0xBDD4AC8DE3E46D41L, 0xB8BD53F6662D74EDL, 0xB3C8EFECF54A46EBL, 0xAEF690724B5729F1L, 0xAA454BF6EA27D80DL,
270                    0xA5B43F2EE9E5DD71L, 0xA1428CE6F71ABD83L, 0x9CEF5DDA7802A12BL, 0x98B9E08AD13C30D7L, 0x94A14917C2209C1FL,
271                    0x90A4D118D143BB19L, 0x8CC3B777C1CFB485L, 0x88FD404C0AA1B13DL, 0x8550B4B7483DEA9DL, 0x81BD62C2A2E0D811L},
272            {0xF963D37E6AD397B1L, 0xF2F358592E4FDF43L, 0xECAD6DC073812739L, 0xE690FA59735A5CA5L, 0xE09CEC0D2BB40BEFL,
273                    0xDAD037D85A1FAFE9L, 0xD529D99CB4258D85L, 0xCFA8D3F354BAF8AFL, 0xCA4C300056F50BBFL, 0xC512FD479630A193L,
274                    0xBFFC51828C1BCC49L, 0xBB074877453F18A7L, 0xB63303D064D5B8FDL, 0xB17EAAF630F33AD9L, 0xACE96AE8A023B92FL,
275                    0xA872761A61E09887L, 0xA419044CDB5FCCEDL, 0x9FDC526D126E78A5L, 0x9BBBA27180316765L, 0x97B63B38C5CE8A63L,
276                    0x93CB68693D2A2E11L, 0x8FFA7A51600930CBL, 0x8C42C5C9000F11A1L, 0x88A3A4134A3345FDL, 0x851C72C1906CEA55L,
277                    0x81AC9396D4769C31L},
278            {0xF9A099FB652F7569L, 0xF369D04BE1B34389L, 0xED5AA0254466E043L, 0xE7720D2C9634DC87L,
279                    0xE1AF214F0C24C34FL, 0xDC10EC99FF092E81L, 0xD6968513E24AD1C3L, 0xD13F06963376BC15L, 0xCC0992A85C5E894FL,
280                    0xC6F5505B81C0B31DL, 0xC2016C273895ABE9L, 0xBD2D17C71C43F3EFL, 0xB8778A194021EF43L, 0xB3DFFEFD76CFF10DL,
281                    0xAF65B7356A17BA2BL, 0xAB07F8457E209615L, 0xA6C60C567AE854B7L, 0xA29F4217F711A191L, 0x9E92ECA37F37AC39L,
282                    0x9AA063607515C1B5L, 0x96C701E8A1EF5E21L, 0x930627ED77C26777L, 0x8F5D391DFCE9B1DBL, 0x8BCB9D0D5DF1A803L,
283                    0x8850BF1A217BFC29L, 0x84EC0E55FA29A321L, 0x819CFD6E329C1075L},
284            {0xF9D929986B5EEEB9L, 0xF3D82B220C06E07BL,
285                    0xEDFC1BCF7B16B91BL, 0xE844186B738DCE55L, 0xE2AF4336683C2DFFL, 0xDD3CC3C4ED67D397L, 0xD7EBC6DEF1107135L,
286                    0xD2BB7E5FBCDABC13L, 0xCDAB2116BCCAB79DL, 0xC8B9EAA90612499FL, 0xC3E71B73995679F7L, 0xBF31F86E5BEA2525L,
287                    0xBA99CB0FC3989F53L, 0xB61DE13130B5D161L, 0xB1BD8CF3F243BEB5L, 0xAD7824A6F01725D3L, 0xA94D02ACF6FE122DL,
288                    0xA53B8563A303BF93L, 0xA1430F0AE4052279L, 0x9D6305AD18E0C827L, 0x999AD307BDA3917BL, 0x95E9E474A92A0E69L,
289                    0x924FAAD3D6C3FB33L, 0x8ECB9A75B87C94B9L, 0x8B5D2B060EBF2C2DL, 0x8803D77742239521L, 0x84BF1DEE3C41BFEBL,
290                    0x818E7FAEBC7F0FFBL},
291            {0xFA0DEED8E62B756BL, 0xF43F3741C26C457DL, 0xEE93070DBC849FE3L, 0xE90890F198E9682FL,
292                    0xE39F0C66B318DD27L, 0xDE55B58EA47EDAA5L, 0xD92BCD1793E4C8BDL, 0xD420982129831E45L, 0xCF33602223E1A33DL,
293                    0xCA6372CE89CA5B13L, 0xC5B021FE75A93343L, 0xC118C39576C84389L, 0xBC9CB16A84ED9C1DL, 0xB83B493082F45033L,
294                    0xB3F3EC5F4D0EA19FL, 0xAFC6001D4F72F081L, 0xABB0ED29A2485B47L, 0xA7B41FC6A7BAD15BL, 0xA3CF07A52930C135L,
295                    0xA00117CFF0AE8395L, 0x9C49C697DB853389L, 0x98A88D80637BC8CFL, 0x951CE92C9BB209A9L, 0x91A6594C9E8D459BL,
296                    0x8E44608B6A0EC52DL, 0x8AF6847D28037703L, 0x87BC4D8DDF8BA161L, 0x849546F08D8843C7L, 0x8180FE8EA18A6047L},
297            {0xFA3F486F7B176F11L, 0xF49FA91E77C7403FL, 0xEF2063A9CDE20F67L, 0xE9C0BDF597E5D9BFL, 0xE4800214962B496BL,
298                    0xDF5D7E301FAC5725L, 0xDA5884709D33B639L, 0xD5706AE68BD8CD09L, 0xD0A48B7403BDE0F3L, 0xCBF443B6C0179A11L,
299                    0xC75EF4F2A5961C7DL, 0xC2E403FCC458AB43L, 0xBE82D926D2A51FD9L, 0xBA3AE02B1DAC798FL, 0xB60B8818EDB564FDL,
300                    0xB1F443415B14DE55L, 0xADF48724916BFCADL, 0xAA0BCC5F7EB08975L, 0xA6398E99EB9448BFL, 0xA27D4C74FAECC655L,
301                    0x9ED6877A0DCB1ABDL, 0x9B44C40A0A006C2DL, 0x97C7894D00D8F3A3L, 0x945E612233E407B1L, 0x9108D81075AC1E93L,
302                    0x8DC67D36E44DE1F9L, 0x8A96E23DFBE9515DL, 0x87799B48FEF38DFBL, 0x846E3EE7B27B4743L, 0x817466086C7CD82DL},
303            {0xFA6D85BD7B83D8BFL, 0xF4FA18113E772031L, 0xEFA509F857AEFD4BL, 0xEA6DB233E30452E9L, 0xE5536B340D76D84BL,
304                    0xE05593038E3D2B9BL, 0xDB738B3392365683L, 0xD6ACB8C8173F6B75L, 0xD2008424B4FDC1ABL, 0xCD6E58F9D0BBE7DDL,
305                    0xC8F5A6323A04AC75L, 0xC495DDE12DB49653L, 0xC04E7530BD46DD6DL, 0xBC1EE450982F5FFFL, 0xB806A665351F3943L,
306                    0xB4053977591D82B1L, 0xB01A1E63FA696B4DL, 0xAC44D8CC7D2631A7L, 0xA884EF0747DCAEFDL, 0xA4D9EA10ADE9061BL,
307                    0xA143557C2DF5AF63L, 0x9DC0BF6602AF8781L, 0x9A51B86503E8B7EFL, 0x96F5D37CD66A4963L, 0x93ACA61068BDF1B3L,
308                    0x9075C7D4BB43399BL, 0x8D50D2C3F1EC6CD1L, 0x8A3D6310AE08E88DL, 0x873B1719AE8B4BADL, 0x84498F5DB542C8AFL,
309                    0x81686E6FAF87664DL},
310            {0xFA98EFEF3C53DD4BL, 0xF54F0FFD0ECC0203L, 0xF021C278AD401597L, 0xEB106D053D813FA3L,
311                    0xE61A7887DAAF4445L, 0xE13F5115FBAFF277L, 0xDC7E65E438BC1DFDL, 0xD7D729356E007179L, 0xD349104A395B3CA7L,
312                    0xCED39350D14AFF63L, 0xCA762D55332BD5AFL, 0xC6305C31A6EC13F9L, 0xC201A07F966A5779L, 0xBDE97D88B6B90CF3L,
313                    0xB9E77938818CFA07L, 0xB5FB1C0DFD25ABBBL, 0xB223F10DD107D0C5L, 0xAE6185B4A5EA78B3L, 0xAAB369E9CF40F355L,
314                    0xA7192FF23CD39E85L, 0xA3926C63B2E2553DL, 0xA01EB618475369FBL, 0x9CBDA622227A2153L, 0x996ED7BF82078107L,
315                    0x9631E84EFCBFFCC7L, 0x9306774405981503L, 0x8FEC261BACE15EAFL, 0x8CE298519E38A56BL, 0x89E9735559ECED09L,
316                    0x87005E7FA89E04BBL, 0x8427030847D82601L, 0x815D0BFBCE78BCDBL},
317            {0xFAC1E364FEA8C287L, 0xF59F42F9E9A5D9DDL,
318                    0xF0978EA6AB84D035L, 0xEBAA39469D2D7F79L, 0xE6D6B8990D712A5BL, 0xE21C853219B4AFDDL, 0xDD7B1A6BD60CA405L,
319                    0xD8F1F657C32ACDEDL, 0xD48099B0908512C5L, 0xD02687CC29263023L, 0xCBE3468E09A0D73BL, 0xC7B65E59DDA5BE8DL,
320                    0xC39F5A0663C519BBL, 0xBF9DC6D095EB983DL, 0xBBB1344F1532941BL, 0xB7D93465D7A27B45L, 0xB4155B3A168DB819L,
321                    0xB0653F267C3172B1L, 0xACC878AF8F507395L, 0xA93EA2785B833BC7L, 0xA5C7593754FF0D63L, 0xA2623BAB769C24A7L,
322                    0x9F0EEA9198E9C3B9L, 0x9BCD089A0124F43BL, 0x989C3A5E26ED0205L, 0x957C2656AF96B259L, 0x926C74D19E051B71L,
323                    0x8F6CCFE8B5F4C1FFL, 0x8C7CE37811AB45E7L, 0x899C5D14E9036D5BL, 0x86CAEC0488D2C6B3L, 0x8408413379AB65D1L,
324                    0x81540F2CD5017313L},
325            {0xFAE842F1FD2D2CA7L, 0xF5EA757A0A98C863L, 0xF10613828C28F7FBL, 0xEC3A9B96914C96B9L,
326                    0xE7878ED473415E13L, 0xE2EC70E0B7805833L, 0xDE68C7D934F58C01L, 0xD9FC1C487AAEB91BL, 0xD5A5F91976B3BE43L,
327                    0xD165EB8B5BC1E6E5L, 0xCD3B8325C4A9DC47L, 0xC92651AD1416562FL, 0xC525EB170F87E511L, 0xC139E57FB4584EF5L,
328                    0xBD61D91E459DF78BL, 0xB99D603A91CDAD27L, 0xB5EC17226EFEF75BL, 0xB24D9C1F6CBCA9C1L, 0xAEC18F6CBA510669L,
329                    0xAB47932D40822855L, 0xA7DF4B61EDB8BF7BL, 0xA4885DE033905DEFL, 0xA1427248B4D5B15FL, 0x9E0D31FE22FC05B1L,
330                    0x9AE8481C4A185585L, 0x97D3616F4A74FC6BL, 0x94CE2C6AFED5D56BL, 0x91D859228E892EB9L, 0x8EF199402A6682CBL,
331                    0x8C199FFCF3E056D3L, 0x895022190D52F827L, 0x8694D5D3D2BE1549L, 0x83E772E43A1B5CC1L, 0x8147B2715A886473L},
332            {0xFB0C904DEDC71EABL, 0xF631A396A8EA8405L, 0xF16EC07F404C404BL, 0xECC3700594D89347L, 0xE82F3D74BAE83EF3L,
333                    0xE3B1B6599529F247L, 0xDF4A6A77A7F5FB99L, 0xDAF8EBBE23F4F3D7L, 0xD6BCCE3D27077AF3L, 0xD295A81B326269ABL,
334                    0xCE83118AD4D80EEDL, 0xCA84A4C0884C271DL, 0xC699FDE8C1553A63L, 0xC2C2BB1E3012F58FL, 0xBEFE7C603145DEB5L,
335                    0xBB4CE3896EB97D21L, 0xB7AD9446AE16AAD9L, 0xB420340DCD384DF7L, 0xB0A46A14EB212977L, 0xAD39DF49BCB5D0F1L,
336                    0xA9E03E490C621029L, 0xA697335663D548B5L, 0xA35E6C53DF056371L, 0xA03598BA27ABFBAFL, 0x9D1C699098755D61L,
337                    0x9A129165871CCFF3L, 0x9717C446B4B57445L, 0x942BB7B9E362B6B3L, 0x914E22B590C6FD67L, 0x8E7EBD99D472D11BL,
338                    0x8BBD422961A2424BL, 0x89096B82AB99BF13L, 0x8662F6192BF6EFA7L, 0x83C99FAECA4D7FB3L, 0x813D274D646AFB8FL},
339            {0xFB2E70F0672DEAC3L, 0xF67419E4328C5AE5L, 0xF1D08AF9A011B93BL, 0xED43566A0A91EB2DL, 0xE8CC107FC3FB0607L,
340                    0xE46A4F8C20778F89L, 0xE01DABDDB18AAEF3L, 0xDBE5BFB6B03F20DBL, 0xD7C2274395861A1BL, 0xD3B28091DFE78B43L,
341                    0xCFB66B8705A9661BL, 0xCBCD89D79297A36BL, 0xC7F77EFE709ACF33L, 0xC433F0345A4ED6BFL, 0xC082846776CFB603L,
342                    0xBCE2E4331DF57083L, 0xB954B9D7C43C7F5DL, 0xB5D7B1330D9B8881L, 0xB26B77B8068ACC91L, 0xAF0FBC6782854095L,
343                    0xABC42FC89F4EBF83L, 0xA88883E16C4E25EFL, 0xA55C6C2FB54D7F91L, 0xA23F9DA1EFF5B477L, 0x9F31CE904B5E5947L,
344                    0x9C32B6B5E10D6C97L, 0x99420F2A06C5E287L, 0x965F9259C086E847L, 0x938AFC015220C2F1L, 0x90C40925EFC71851L,
345                    0x8E0A780F8D0B4DFBL, 0x8B5E0842C9AC7A2DL, 0x88BE7A7AFBAD244BL, 0x862B90A45621C743L, 0x83A50DD62C2DB015L,
346                    0x812AB64D4FA66D45L},
347            {0xFB50D0447B78F80DL, 0xF6B791E91E5BBCFBL, 0xF233DE244FEC61C3L, 0xEDC5500DF4CB9F07L,
348                    0xE96B84969F82E781L, 0xE5261A7EEA55C0C7L, 0xE0F4B24EF9970D8BL, 0xDCD6EE4E25C47F99L, 0xD8CC727ACCADE12FL,
349                    0xD4D4E48248F14DF5L, 0xD0EFEBB90F18CC85L, 0xCD1D3112EFA902DFL, 0xC95C5F1B7D73F963L, 0xC5AD21EE97860B19L,
350                    0xC20F273116063D41L, 0xBE821E09996645E9L, 0xBB05B7197B4187B7L, 0xB799A475E04D3A53L, 0xB43D99A0EABED9CFL,
351                    0xB0F14B830C90CD01L, 0xADB47064790FFB1BL, 0xAA86BFE6B51FC425L, 0xA767F2FE45A47E49L, 0xA457C3EC7B873C09L,
352                    0xA155EE395CC834D1L, 0x9E622EADAA17B30BL, 0x9B7C434D006FE831L, 0x98A3EB50162C79AFL, 0x95D8E71F131EFF4BL,
353                    0x931AF84C032207B3L, 0x9069E18D62AE8765L, 0x8DC566B8C4F9DBF5L, 0x8B2D4CBD9324C81FL, 0x88A1599FE405FD95L,
354                    0x862154736C1CEF53L, 0x83AD0556853BC35BL, 0x8144356D4D794CB5L},
355            {0xFB6D5599BDF133D1L, 0xF6EF948D7C022F77L,
356                    0xF2865D3AD18E3E67L, 0xEE3151B6A0B5A4E3L, 0xE9F015C346AAD57BL, 0xE5C24EC8EFB818A7L, 0xE1A7A3CE0E5A4DD5L,
357                    0xDD9FBD6FF4D0581BL, 0xD9AA45DB9081A661L, 0xD5C6E8C646A11777L, 0xD1F55366F1743DEDL, 0xCE35346EFDA9BEEDL,
358                    0xCA863C03A72C3191L, 0xC6E81BB754E182C5L, 0xC35A868312C97437L, 0xBFDD30C029F0535DL, 0xBC6FD021D5AD80E3L,
359                    0xB9121BAF15A7D079L, 0xB5C3CBBC9C1C2DA1L, 0xB28499E6D7E54BD3L, 0xAF54410C19C57735L, 0xAC327D46D475DF91L,
360                    0xA91F0BE7F700F123L, 0xA619AB7160EF7EB9L, 0xA3221B906FD2A687L, 0xA0381D18A5B676E5L, 0x9D5B71FE680B6AC1L,
361                    0x9A8BDD51D696DE37L, 0x97C92339B9FC9B9FL, 0x951308EE89759779L, 0x926954B58749DF79L, 0x8FCBCDDBF3A5A54DL,
362                    0x8D3A3CB2556329E7L, 0x8AB46A87D8652177L, 0x883A21A5C11EF379L, 0x85CB2D4AF4E9FD39L, 0x836759A796C8B7D1L,
363                    0x810E73D8B83A55FDL},
364            {0xFB8F8AF296473783L, 0xF732CAF4391DFA4FL, 0xF2E9688872F4556DL, 0xEEB30DB72E847BD9L,
365                    0xEA8F6605FAB5E921L, 0xE67E1E716C665867L, 0xE27EE5669D93D64BL, 0xDE916ABCC965815BL, 0xDAB55FAF0492CFAFL,
366                    0xD6EA76D611AB6957L, 0xD330642250C3D62DL, 0xCF86DCD5CA0D633FL, 0xCBED977E52E1BF99L, 0xC8644BEFCCCCE2EFL,
367                    0xC4EAB33E7E21D9CBL, 0xC18087B983A91355L, 0xBE2584E55AF8C3DFL, 0xBAD967768509DE5DL, 0xB79BED4C409E0CB9L,
368                    0xB46CD56B5C0CECC5L, 0xB14BDFF91E10ACD5L, 0xAE38CE36452BF031L, 0xAB33627A1D44A8FFL, 0xA83B602DAB115255L,
369                    0xA5508BC6ECF7AB17L, 0xA272AAC430FDBFF7L, 0x9FA183A77F6FB9E9L, 0x9CDCDDF219DE8547L, 0x9A2482200E1CFE17L,
370                    0x977839A3DCE2DF07L, 0x94D7CEE233BE3A55L, 0x92430D2DB9FDC787L, 0x8FB9C0C2F03FCCE9L, 0x8D3BB6C42252E1F5L,
371                    0x8AC8BD356B173707L, 0x8860A2F8CA1077C7L, 0x860337CA4A59C09DL, 0x83B04C3C3AAE7BEFL, 0x8167B1B3763C52A9L},
372            {0xFBAD8DEED8FB2209L, 0xF76DC9FB80FEB207L, 0xF340636968788E7FL, 0xEF250AD8F2743C11L, 0xEB1B7241906F3CF1L,
373                    0xE7234CEBF7A3CD01L, 0xE33C4F6C6F5BF5B5L, 0xDF662F9D37E0C88DL, 0xDBA0A499099B628BL, 0xD7EB66B5ABFF26C7L,
374                    0xD4462F7EA3D6623FL, 0xD0B0B9AFF88C4749L, 0xCD2AC1311010E3E1L, 0xC9B4030FA0F56381L, 0xC64C3D7ABA609379L,
375                    0xC2F32FBDE17D3F97L, 0xBFA89A3C4405955BL, 0xBC6C3E6BFF904CA1L, 0xB93DDED17D45DFA9L, 0xB61D3EFAE1A59F8FL,
376                    0xB30A237B9003EFEBL, 0xB00451E7C16C6AC5L, 0xAD0B90D02E941EB1L, 0xAA1FA7BDCC8982EBL, 0xA7405F2D9BD12195L,
377                    0xA46D808C899F5623L, 0xA1A6D63362E0D645L, 0x9EEC2B62D8C50E0FL, 0x9C3D4C3F967EA489L, 0x999A05CE67EFC51DL,
378                    0x970225F070F90BC5L, 0x94757B5F75232DCBL, 0x91F3D5AA2F5CAFF5L, 0x8F7D0530B9862C37L, 0x8D10DB210388D58BL,
379                    0x8AAF297359B40FA7L, 0x8857C2E6FA2012D3L, 0x860A7AFEB8D4B141L, 0x83C725FDB2746C03L, 0x818D98E40D2D198FL},
380            {0xFBBBA0DAAEEC680DL, 0xF78976F1379136DFL, 0xF3693491C2390A33L, 0xEF5A8D55FEAAF3D3L, 0xEB5D361D9D81532BL,
381                    0xE770E508E115260BL, 0xE3955173459932CDL, 0xDFCA33EE40021AE5L, 0xDC0F463C135A0B75L, 0xD864434ABC206085L,
382                    0xD4C8E72EF15727A1L, 0xD13CEF1F3AE20029L, 0xCDC0196F1CDB6263L, 0xCA52258A5786DA61L, 0xC6F2D3F03B88419BL,
383                    0xC3A1E62F12097969L, 0xC05F1EDF98799989L, 0xBD2A41A08F91F0EDL, 0xBA0313125D4E9BBBL, 0xB6E958D2C189D077L,
384                    0xB3DCD9789CEA5F55L, 0xB0DD5C8FC9D731F7L, 0xADEAAA950722E7A5L, 0xAB048CF1F423F1F3L, 0xA82ACDF91DEED89DL,
385                    0xA55D38E21D698881L, 0xA29B99C5C5EFC9ADL, 0x9FE5BD9A64422B13L, 0x9D3B72300D79E05BL, 0x9A9C862CFDBD36ABL,
386                    0x9808C90A0671690BL, 0x95800B0F0BA7BBF1L, 0x93021D4F9084E135L, 0x908ED1A75262BB93L, 0x8E25FAB6F26DA8EDL,
387                    0x8BC76BE0AD7F873DL, 0x8972F94521FBAF7DL, 0x872877C02370254FL, 0x84E7BCE59BC138E5L, 0x82B09EFE79A5D3D9L,
388                    0x8082F505AC3B9F93L},
389            {0xFBE7BD0A608BAD17L, 0xF7E03E790DA47477L, 0xF3E93FA3A9F8B32BL, 0xF0027CFAFB6A1463L,
390                    0xEC2BB4046BDBEE9FL, 0xE864A3559C6B8123L, 0xE4AD0A900AC6AB77L, 0xE104AA5CC856ED81L, 0xDD6B446842F7AE65L,
391                    0xD9E09B5E1EEFF399L, 0xD66472E521E8D767L, 0xD2F68F9B2E9B2FDFL, 0xCF96B71150EFF3CDL, 0xCC44AFC7DA5003D5L,
392                    0xC900412A8DE11143L, 0xC5C9338CDC6E6BE7L, 0xC29F50262FBD8AFBL, 0xBF82610E450F2C2FL, 0xBC723139968EE63BL,
393                    0xB96E8C75D3740AF5L, 0xB6773F666697AF3DL, 0xB38C17810B44A553L, 0xB0ACE30A700728ADL, 0xADD97112E742E8EBL,
394                    0xAB11917325570C3BL, 0xA85514C90C18A85BL, 0xA5A3CC74836D14E7L, 0xA2FD8A945ECE591BL, 0xA06222034F84D331L,
395                    0x9DD16654E362103BL, 0x9B4B2BD28FC9A05FL, 0x98CF4778C8D584CDL, 0x965D8EF42464A387L, 0x93F5D89E88E277A1L,
396                    0x9197FB7C6797FCA7L, 0x8F43CF3A02569879L, 0x8CF92C28BC4E8805L, 0x8AB7EB3C75E31201L, 0x887FE608F34F7DD1L,
397                    0x8650F6BF4DF08511L, 0x842AF82B7006ABD1L, 0x820DC5B19AC69DA5L},
398            {0xFBF33ADB4A247B63L, 0xF7F6DC82CD3A64A7L,
399                    0xF40AA289E556077BL, 0xF02E4B90F15A2E05L, 0xEC61974111819B83L, 0xE8A44647F724B981L, 0xE4F61A53C575AAD9L,
400                    0xE156D60F02EE122DL, 0xDDC63D1C9B2AF001L, 0xDA441413F0F40E21L, 0xD6D0207D002D7BBFL, 0xD36A28CC8F72A6ABL,
401                    0xD011F460711BA35BL, 0xCCC74B7BD36E35FBL, 0xC989F7439FBD2BEBL, 0xC659C1BAE8398DADL, 0xC33675BF643A2645L,
402                    0xC01FDF05FABECDF1L, 0xBD15CA175AF5D381L, 0xBA18044CA28AC8EDL, 0xB7265BCC1186DD6FL, 0xB4409F85CB8BD1DFL,
403                    0xB1669F30A6337225L, 0xAE982B47045E59F9L, 0xABD51503BE3DA293L, 0xA91D2E5F15E3EB11L, 0xA6704A0BB82AFE25L,
404                    0xA3CE3B73C9BC2527L, 0xA136D6B6000A02EBL, 0x9EA9F0A2C60B978BL, 0x9C275EB96C88D2A3L, 0x99AEF72565C9D9CBL,
405                    0x974090BB8C7AE74FL, 0x94DC02F775975F89L, 0x928125F8CD2F733DL, 0x902FD280BDDC5A1BL, 0x8DE7E1EF62B7E2BBL,
406                    0x8BA92E4143ACC451L, 0x8973920CDBF5CB1DL, 0x8746E8802AA2A203L, 0x85230D5E4CF9A2E7L, 0x8307DCFD228EBBC1L,
407                    0x80F53442FAE81817L},
408            {0xFBF8641D0EBD9F37L, 0xF80105531A5B1C69L, 0xF419A2322FD2AF1DL, 0xF041FA520DD315C5L,
409                    0xEC79CE4DFE225559L, 0xE8C0DFC0BFBA8355L, 0xE516F140815D3291L, 0xE17BC65AEC5B2B4FL, 0xDDEF23913F4F21DFL,
410                    0xDA70CE54788B2693L, 0xD7008D018FF98CB3L, 0xD39E26DDC03304F5L, 0xD0496412DE8CA2FBL, 0xCD020DABC1E17C4DL,
411                    0xC9C7ED90B7DC8245L, 0xC69ACE84088827A5L, 0xC37A7C1E87EA4E29L, 0xC066C2CC3573DFF5L, 0xBD5F6FC8E90C5D07L,
412                    0xBA64511D0D828555L, 0xB775359A682C2529L, 0xB491ECD8ED7FE2F1L, 0xB1BA4733A274C3BDL, 0xAEEE15C58A73EE4BL,
413                    0xAC2D2A66A1AA0429L, 0xA97757A8E386344DL, 0xA6CC70D55D35F399L, 0xA42C49E94BED0D87L, 0xA196B79346CA81D7L,
414                    0x9F0B8F30742B63A1L, 0x9C8AA6C9CA3DAADDL, 0x9A13D5115AA5A2F7L, 0x97A6F15FA90957BDL, 0x9543D3B10C5615B5L,
415                    0x92EA54A31A94C409L, 0x909A4D721F228C2FL, 0x8E5397F69B23EF17L, 0x8C160EA2D009104FL, 0x89E18C8053FAA5B1L,
416                    0x87B5ED2DB0079D91L, 0x85930CDC07EC2E7DL, 0x8378C84CCB4BA1BDL, 0x8166FCCF7036C5DBL, 0x7F5D883F36D98FB9L},
417            {0xFC371C6CEDDC7205L, 0xF87C8BD3AE403793L, 0xF4D017FDC4B91205L, 0xF1318B81E30CC827L, 0xEDA0B1C0E0ABFC8DL,
418                    0xEA1D56E2BDA00BFFL, 0xE6A747D3B0C88081L, 0xE33E5241413D4A33L, 0xDFE244976AAB90CBL, 0xDC92EDFDCC839099L,
419                    0xD9501E54E3CE92E1L, 0xD619A6334F84AC69L, 0xD2EF56E31F3A85D5L, 0xCFD1025F2C00079DL, 0xCCBE7B507B4957D5L,
420                    0xC9B7950BABBC29B5L, 0xC6BC238E6BBBEEC7L, 0xC3CBFB7CF9900767L, 0xC0E6F21FACFF9B93L, 0xBE0CDD608A3F4EE1L,
421                    0xBB3D93C8DE0D89BFL, 0xB878EC7EE2DA97A9L, 0xB5BEBF436EDA5D9DL, 0xB30EE46FAADDED93L, 0xB06934F2D1D3BB5FL,
422                    0xADCD8A4FF8CDB553L, 0xAB3BBE9BDF6CFEBBL, 0xA8B3AC7AC893846FL, 0xA6352F1E5B3C1C03L, 0xA3C022438B5A54A1L,
423                    0xA15462308AA39537L, 0x9EF1CBB2C12396F1L, 0x9C983C1CCD7EBBEFL, 0x9A4791448CC53213L, 0x97FFA98129BA3FADL,
424                    0x95C063A933738415L, 0x93899F10BB346123L, 0x915B3B87796A2BA5L, 0x8F351956F9AE2877L, 0x8D171940CDB2C21FL,
425                    0x8B011C7CC701C767L, 0x88F304B73771E64FL, 0x86ECB40F3839F8BFL, 0x84EE0D14F7891817L, 0x82F6F2C80C8ACBFBL},
426            {0xFC58F81E60DA5B81L, 0xF8BF4767540B5989L, 0xF532BD2113F26E23L, 0xF1B32943D2EFE0BBL, 0xEE405C77315E8669L,
427                    0xEADA280FBCD3AD3DL, 0xE7805E0C788358CFL, 0xE432D1146EA76C1DL, 0xE0F154744AC8D6D1L, 0xDDBBBC1BFCCA5427L,
428                    0xDA91DC9C6494C03BL, 0xD7738B2506457D31L, 0xD4609D81C6BFD51FL, 0xD158EA18B082B6BBL, 0xCE5C47E7C0A49B07L,
429                    0xCB6A8E82BBD7D049L, 0xC88396110B59D367L, 0xC5A7374BA1B0CBF9L, 0xC2D54B7AE71AA8D7L, 0xC00DAC74AD91C33BL,
430                    0xBD50349A2C4B5513L, 0xBA9CBED60294744FL, 0xB7F3269A41F2A8D9L, 0xB55347DE7F6D94E1L, 0xB2BCFF1DEBE7886DL,
431                    0xB0302955736B386BL, 0xADACA401E3552FB7L, 0xAB324D1E173FED4DL, 0xA8C103212C99FE8FL, 0xA658A4FCBCCDBE79L,
432                    0xA3F9121B1DE2BB8FL, 0xA1A22A5DA9811E33L, 0x9F53CE1B0A3FBF0DL, 0x9D0DDE1D8F25F2AFL, 0x9AD03BA1854A6351L,
433                    0x989AC8539778A469L, 0x966D664F33C77D53L, 0x9447F81CF70A38ADL, 0x922A60B11E07955BL, 0x90148369FC614411L,
434                    0x8E06440E7917299BL, 0x8BFF86CC9091E98BL, 0x8A003037DC208843L, 0x880825481ED53CAFL, 0x86174B57D7ADD2E5L,
435                    0x842D8822D8F4489BL},
436            {0xFC62A7389C25206BL, 0xF8D25F3BE7FB8C7BL, 0xF54EF8CFAF339DF7L, 0xF1D84564732D7D13L,
437                    0xEE6E171301EB70CFL, 0xEB10409A15BA9BBFL, 0xE7BE955BFD72A71BL, 0xE478E95C4D2D4FBFL, 0xE13F113D975738FFL,
438                    0xDE10E23F2DFBD7D5L, 0xDAEE323AEC2EB61DL, 0xD7D6D7A30774B8DFL, 0xD4CAA97FE9107EFBL, 0xD1C97F6E0F1555D9L,
439                    0xCED3319BF524A8EDL, 0xCBE798C804BA364DL, 0xC9068E3E8CEBB6F7L, 0xC62FEBD7C1810C09L, 0xC3638BF5C14A6369L,
440                    0xC0A14982A39A269BL, 0xBDE8FFEE8CC8E4CFL, 0xBB3A8B2DC9A9C6D7L, 0xB895C7B6F1D67747L, 0xB5FA928110B9C405L,
441                    0xB368C901D54097BFL, 0xB0E0492BC81941F7L, 0xAE60F16C88695B1DL, 0xABEAA0AB0EE2E7F7L, 0xA97D3645F721B3EBL,
442                    0xA7189211CF3A2D29L, 0xA4BC94576D635F85L, 0xA2691DD24BA5FC11L, 0xA01E0FAEE97AAAF3L, 0x9DDB4B89334233FBL,
443                    0x9BA0B36AEF8257ADL, 0x996E29CA31D27F19L, 0x97439187D363B43DL, 0x9520CDEDF10F9ECFL, 0x9305C2AE6EDA8AB9L,
444                    0x90F253E180D4C5C5L, 0x8EE666043947E8FFL, 0x8CE1DDF71C1CE8BBL, 0x8AE4A0FCB7680B4DL, 0x88EE94B841082A9DL,
445                    0x86FF9F2C3946E83FL, 0x8517A6B91267BDD5L, 0x8336921BDD1414F1L},
446            {0xFC8C1FB2CA6255C7L, 0xF9242B1AADEBBE4FL,
447                    0xF5C7F90F371F9D33L, 0xF27760F60D177BB7L, 0xEF323AC106E0D2BFL, 0xEBF85EEC4778D02FL, 0xE8C9A67C604F3EFDL,
448                    0xE5A5EAFC7A3A080BL, 0xE28D067C84C30FE3L, 0xDF7ED38F6BBA81FBL, 0xDC7B2D4952F7E615L, 0xD981EF3DD834A6D9L,
449                    0xD692F57E5AEAFA9DL, 0xD3AE1C984A2467EFL, 0xD0D3419378236739L, 0xCE0241F073D3E9A5L, 0xCB3AFBA6E7EED305L,
450                    0xC87D4D23FFBCB9B5L, 0xC5C91548D1648307L, 0xC31E3368CDB2B5FBL, 0xC07C87483546A027L, 0xBDE3F11A9312A9D7L,
451                    0xBB5451813C1D76CFL, 0xB8CD8989D471B091L, 0xB64F7AACD92A95ABL, 0xB3DA06CC2F8BA769L, 0xB16D1031B9120BFDL,
452                    0xAF08798DEC6E77A1L, 0xACAC25F67356AA49L, 0xAA57F8E4CD1DCA0FL, 0xA80BD634F6031C45L, 0xA5C7A2241326D801L,
453                    0xA38B414F2315052DL, 0xA15698B1B2D69281L, 0x9F298DA497790377L, 0x9D0405DCABFD4D61L, 0x9AE5E769939EAFBBL,
454                    0x98CF18B48062888FL, 0x96BF807EFDE25957L, 0x94B705E1C04163FBL, 0x92B5904B773F79F5L, 0x90BB077FA55AC933L,
455                    0x8EC753957AF2A37DL, 0x8CDA5CF6B55D6D8DL, 0x8AF40C5E81E41293L, 0x89144AD864958831L, 0x873B01BF22E51D3DL,
456                    0x85681ABBB2067B7BL},
457            {0xFC7A9A2A032A8977L, 0xF9019A3A031D55E3L, 0xF594D4886ED4F4B3L, 0xF2341E076B6CF033L,
458                    0xEEDF4C40B6E4AD29L, 0xEB963553925602DFL, 0xE858AFF2B3835555L, 0xE52693623DA357C7L, 0xE1FFB775C150F88DL,
459                    0xDEE3F48E43865153L, 0xDBD323984B89CEFBL, 0xD8CD1E09F7B51BF1L, 0xD5D1BDE118FDADE3L, 0xD2E0DDA155272C7BL,
460                    0xCFFA58524F883AE1L, 0xCD1E097DD84A8003L, 0xCA4BCD2E220F1B75L, 0xC7837FEBFDE104C1L, 0xC4C4FEBD1D5F2291L,
461                    0xC21027225B083507L, 0xBF64D7160892FBD3L, 0xBCC2ED0A433D4C8DL, 0xBA2A47E74DFD18D1L, 0xB79AC709F17EADA9L,
462                    0xB5144A41E1DBBE89L, 0xB296B1D029F71665L, 0xB021DE659C690FE7L, 0xADB5B12149E93C39L, 0xAB520B8EFD21E485L,
463                    0xA8F6CFA5BBDA566FL, 0xA6A3DFC64D652EFBL, 0xA4591EB9C640198DL, 0xA2166FB018D2B9ADL, 0x9FDBB63EAB3AB70DL,
464                    0x9DA8D65EF213227BL, 0x9B7DB46D1025A921L, 0x995A35267AF44947L, 0x973E3DA8A40A7899L, 0x9529B36FA704E833L,
465                    0x931C7C54FC3F4DBFL, 0x91167E8E3017D383L, 0x8F17A0AB9EB80AE7L, 0x8D1FC997345375ABL, 0x8B2EE09331CBF23FL,
466                    0x8944CD38F5AC8ED3L, 0x87617777C96B7D5DL, 0x8584C793B2E41889L, 0x83AEA62449FA1E85L, 0x81DEFC1392577B03L},
467            {0xFC89901CE7581669L, 0xF91F1DA477858FEDL, 0xF5C07F1263DFFDA1L, 0xF26D8B7221C57113L, 0xEF261A5CF6D22527L,
468                    0xEBEA03F80DD3CBDDL, 0xE8B920F29261309BL, 0xE5934A83D2FF2F77L, 0xE2785A6969BC515DL, 0xDF682AE56B2CABA7L,
469                    0xDC6296BC9BAFEF53L, 0xD9677934AAEBE025L, 0xD676AE127565B7BFL, 0xD39011984C254301L, 0xD0B38084424CD14FL,
470                    0xCDE0D80E809155D9L, 0xCB17F5E79E7E6275L, 0xC858B8370171E9F3L, 0xC5A2FD99413BFD59L, 0xC2F6A51E924EFC1DL,
471                    0xC0538E49356CF2EDL, 0xBDB9990BECBF2773L, 0xBB28A5C87645111DL, 0xB8A0954E0B884035L, 0xB62148D7E682F43BL,
472                    0xB3AAA20BCBA761E3L, 0xB13C82F898F5E761L, 0xAED6CE14DA10AB17L, 0xAC79663D613B5D61L, 0xAA242EB3E536122FL,
473                    0xA7D70B1DA3E261EBL, 0xA591DF8209A23B9BL, 0xA35490495D600B75L, 0xA11F023B713011C9L, 0x9EF11A7E577AFE2FL,
474                    0x9CCABE951CA219C3L, 0x9AABD45E850D81E9L, 0x98944213CF952A87L, 0x9683EE477C359391L, 0x947ABFE417015227L,
475                    0x92789E2B0740C0CFL, 0x907D70B362B15D3FL, 0x8E891F68C4D68C4DL, 0x8C9B928A2A4DAE11L, 0x8AB4B2A8D0179CD7L,
476                    0x88D468A716C9E203L, 0x86FA9DB7699A1B09L, 0x85273B5B293637D3L, 0x835A2B619A5C69D3L, 0x819357E6D825C8C5L}
477    };
478
479    public static final PhantomNoise instance2D = new PhantomNoise(goldenLong[2][0], 2);
480    public static final PhantomNoise instance3D = new PhantomNoise(goldenLong[3][0], 3);
481    public static final PhantomNoise instance4D = new PhantomNoise(goldenLong[4][0], 4);
482    public static final PhantomNoise instance5D = new PhantomNoise(goldenLong[5][0], 5);
483    public static final PhantomNoise instance6D = new PhantomNoise(goldenLong[6][0], 6);
484    public static final PhantomNoise instance7D = new PhantomNoise(goldenLong[7][0], 7);
485    public static final PhantomNoise instance8D = new PhantomNoise(goldenLong[8][0], 8);
486}