propane 3.5.0-java → 3.9.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -2
  5. data/.travis.yml +1 -1
  6. data/CHANGELOG.md +7 -1
  7. data/README.md +7 -22
  8. data/Rakefile +3 -2
  9. data/lib/propane.rb +2 -1
  10. data/lib/propane/app.rb +4 -0
  11. data/lib/propane/helper_methods.rb +0 -1
  12. data/lib/propane/runner.rb +12 -12
  13. data/lib/propane/version.rb +1 -1
  14. data/library/pdf/pdf.rb +7 -0
  15. data/library/svg/svg.rb +7 -0
  16. data/pom.rb +65 -43
  17. data/pom.xml +44 -5
  18. data/propane.gemspec +9 -4
  19. data/src/main/java/japplemenubar/JAppleMenuBar.java +3 -3
  20. data/src/main/java/monkstone/fastmath/DegLutTables.java +111 -0
  21. data/src/main/java/monkstone/fastmath/Deglut.java +6 -56
  22. data/src/main/java/monkstone/noise/FastTerrain.java +874 -0
  23. data/src/main/java/monkstone/noise/Noise.java +90 -0
  24. data/src/main/java/monkstone/noise/NoiseGenerator.java +75 -0
  25. data/src/main/java/monkstone/noise/NoiseMode.java +28 -0
  26. data/src/main/java/monkstone/noise/OpenSimplex2F.java +881 -0
  27. data/src/main/java/monkstone/noise/OpenSimplex2S.java +1106 -0
  28. data/src/main/java/monkstone/noise/SmoothTerrain.java +1099 -0
  29. data/src/main/java/processing/awt/PGraphicsJava2D.java +8 -17
  30. data/src/main/java/processing/awt/PImageAWT.java +123 -6
  31. data/src/main/java/processing/awt/PShapeJava2D.java +1 -0
  32. data/src/main/java/processing/awt/PSurfaceAWT.java +9 -7
  33. data/src/main/java/processing/awt/ShimAWT.java +2 -1
  34. data/src/main/java/processing/core/PApplet.java +13297 -14838
  35. data/src/main/java/processing/core/PConstants.java +5 -5
  36. data/src/main/java/processing/core/PFont.java +5 -17
  37. data/src/main/java/processing/core/PGraphics.java +346 -351
  38. data/src/main/java/processing/core/PImage.java +1440 -1537
  39. data/src/main/java/processing/core/PMatrix2D.java +24 -7
  40. data/src/main/java/processing/core/PMatrix3D.java +12 -5
  41. data/src/main/java/processing/core/PShape.java +155 -173
  42. data/src/main/java/processing/core/PShapeOBJ.java +2 -0
  43. data/src/main/java/processing/core/PShapeSVG.java +632 -611
  44. data/src/main/java/processing/core/PSurface.java +15 -10
  45. data/src/main/java/processing/core/PSurfaceNone.java +8 -4
  46. data/src/main/java/processing/core/PVector.java +35 -28
  47. data/src/main/java/processing/data/Table.java +20 -20
  48. data/src/main/java/processing/data/XML.java +1 -1
  49. data/src/main/java/processing/event/Event.java +1 -1
  50. data/src/main/java/processing/event/MouseEvent.java +7 -6
  51. data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
  52. data/src/main/java/processing/javafx/PSurfaceFX.java +127 -125
  53. data/src/main/java/processing/opengl/FrameBuffer.java +2 -4
  54. data/src/main/java/processing/opengl/LinePath.java +4 -0
  55. data/src/main/java/processing/opengl/LineStroker.java +2 -6
  56. data/src/main/java/processing/opengl/PGL.java +72 -45
  57. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +106 -60
  58. data/src/main/java/processing/opengl/PJOGL.java +15 -3
  59. data/src/main/java/processing/opengl/PShader.java +26 -47
  60. data/src/main/java/processing/opengl/PShapeOpenGL.java +1041 -1001
  61. data/src/main/java/processing/opengl/PSurfaceJOGL.java +211 -208
  62. data/src/main/java/processing/opengl/Texture.java +7 -4
  63. data/src/main/java/processing/opengl/VertexBuffer.java +2 -2
  64. data/src/main/java/processing/pdf/PGraphicsPDF.java +581 -0
  65. data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
  66. data/test/deglut_spec_test.rb +2 -2
  67. data/vendors/Rakefile +22 -33
  68. metadata +53 -21
  69. data/library/simplex_noise/simplex_noise.rb +0 -5
  70. data/src/main/java/monkstone/noise/SimplexNoise.java +0 -436
@@ -0,0 +1,1099 @@
1
+ package monkstone.noise;
2
+
3
+ /**
4
+ * K.jpg's OpenSimplex 2, smooth variant ("SuperSimplex")
5
+ *
6
+ * - 2D is standard simplex, modified to support larger kernels. Implemented
7
+ * using a lookup table. - 3D is "Re-oriented 8-point BCC noise" which
8
+ * constructs a congruent BCC lattice in a much different way than usual. - 4D
9
+ * uses a naïve pregenerated lookup table, and averages out to the expected
10
+ * performance.
11
+ *
12
+ * Multiple versions of each function are provided. See the documentation above
13
+ * each, for more info.
14
+ */
15
+ public class SmoothTerrain implements Noise {
16
+
17
+ private static final int PSIZE = 2048;
18
+ private static final int PMASK = 2047;
19
+
20
+ private final short[] perm;
21
+ private final Grad2[] permGrad2;
22
+ private final Grad3[] permGrad3;
23
+ private final Grad4[] permGrad4;
24
+
25
+ public SmoothTerrain(long seed) {
26
+ perm = new short[PSIZE];
27
+ permGrad2 = new Grad2[PSIZE];
28
+ permGrad3 = new Grad3[PSIZE];
29
+ permGrad4 = new Grad4[PSIZE];
30
+ short[] source = new short[PSIZE];
31
+ for (short i = 0; i < PSIZE; i++) {
32
+ source[i] = i;
33
+ }
34
+ for (int i = PSIZE - 1; i >= 0; i--) {
35
+ seed = seed * 6364136223846793005L + 1442695040888963407L;
36
+ int r = (int) ((seed + 31) % (i + 1));
37
+ if (r < 0) {
38
+ r += (i + 1);
39
+ }
40
+ perm[i] = source[r];
41
+ permGrad2[i] = GRADIENTS_2D[perm[i]];
42
+ permGrad3[i] = GRADIENTS_3D[perm[i]];
43
+ permGrad4[i] = GRADIENTS_4D[perm[i]];
44
+ source[r] = source[i];
45
+ }
46
+ }
47
+
48
+ /*
49
+ * Noise Evaluators
50
+ */
51
+ /**
52
+ * 2D SuperSimplex noise, standard lattice orientation.
53
+ *
54
+ * @param x
55
+ * @param y
56
+ * @return
57
+ */
58
+ public double noise2(double x, double y) {
59
+
60
+ // Get points for A2* lattice
61
+ double s = 0.366025403784439 * (x + y);
62
+ double xs = x + s, ys = y + s;
63
+
64
+ return noise2_Base(xs, ys);
65
+ }
66
+
67
+ /**
68
+ * 2D SuperSimplex noise, with Y pointing down the main diagonal.Might be
69
+ * better for a 2D sandbox style game, where Y is vertical.Probably slightly
70
+ * less optimal for heightmaps or continent maps.
71
+ *
72
+ * @param x
73
+ * @param y
74
+ * @return
75
+ */
76
+ public double noise2_XBeforeY(double x, double y) {
77
+
78
+ // Skew transform and rotation baked into one.
79
+ double xx = x * 0.7071067811865476;
80
+ double yy = y * 1.224744871380249;
81
+
82
+ return noise2_Base(yy + xx, yy - xx);
83
+ }
84
+
85
+ /**
86
+ * 2D SuperSimplex noise base. Lookup table implementation inspired by
87
+ * DigitalShadow.
88
+ */
89
+ private double noise2_Base(double xs, double ys) {
90
+ double value = 0;
91
+
92
+ // Get base points and offsets
93
+ int xsb = fastFloor(xs), ysb = fastFloor(ys);
94
+ double xsi = xs - xsb, ysi = ys - ysb;
95
+
96
+ // Index to point list
97
+ int a = (int) (xsi + ysi);
98
+ int index
99
+ = (a << 2)
100
+ | (int) (xsi - ysi / 2 + 1 - a / 2.0) << 3
101
+ | (int) (ysi - xsi / 2 + 1 - a / 2.0) << 4;
102
+
103
+ double ssi = (xsi + ysi) * -0.211324865405187;
104
+ double xi = xsi + ssi, yi = ysi + ssi;
105
+
106
+ // Point contributions
107
+ for (int i = 0; i < 4; i++) {
108
+ LatticePoint2D c = LOOKUP_2D[index + i];
109
+
110
+ double dx = xi + c.dx, dy = yi + c.dy;
111
+ double attn = 2.0 / 3.0 - dx * dx - dy * dy;
112
+ if (attn <= 0) {
113
+ continue;
114
+ }
115
+
116
+ int pxm = (xsb + c.xsv) & PMASK, pym = (ysb + c.ysv) & PMASK;
117
+ Grad2 grad = permGrad2[perm[pxm] ^ pym];
118
+ double extrapolation = grad.dx * dx + grad.dy * dy;
119
+
120
+ attn *= attn;
121
+ value += attn * attn * extrapolation;
122
+ }
123
+
124
+ return value;
125
+ }
126
+
127
+ /**
128
+ * 3D Re-oriented 8-point BCC noise, with better visual isotropy in (X,
129
+ * Y).Recommended for 3D terrain and time-varied animations.The Z coordinate
130
+ * should always be the "different" coordinate in your use case.If Y is
131
+ * vertical in world coordinates, call noise3_XYBeforeZ(x, z, Y) or use
132
+ * noise3_XZBeforeY.If Z is vertical in world coordinates, call
133
+ * noise3_XYBeforeZ(x, y, Z). For a time varied animation, call
134
+ * noise3_XYBeforeZ(x, y, T).
135
+ *
136
+ * @param x
137
+ * @param y
138
+ * @param z
139
+ * @return
140
+ */
141
+ public double noise3_XYBeforeZ(double x, double y, double z) {
142
+
143
+ // Re-orient the cubic lattices without skewing, to make X and Y triangular like 2D.
144
+ // Orthonormal rotation. Not a skew transform.
145
+ double xy = x + y;
146
+ double s2 = xy * -0.211324865405187;
147
+ double zz = z * 0.577350269189626;
148
+ double xr = x + s2 - zz, yr = y + s2 - zz;
149
+ double zr = xy * 0.577350269189626 + zz;
150
+
151
+ // Evaluate both lattices to form a BCC lattice.
152
+ return noise3_BCC(xr, yr, zr);
153
+ }
154
+
155
+ /**
156
+ * 3D Re-oriented 8-point BCC noise, with better visual isotropy in (X,
157
+ * Z).Recommended for 3D terrain and time-varied animations.The Y coordinate
158
+ * should always be the "different" coordinate in your use case.If Y is
159
+ * vertical in world coordinates, call noise3_XZBeforeY(x, Y, z).If Z is
160
+ * vertical in world coordinates, call noise3_XZBeforeY(x, Z, y) or use
161
+ * noise3_XYBeforeZ. For a time varied animation, call noise3_XZBeforeY(x,
162
+ * T, y) or use noise3_XYBeforeZ.
163
+ *
164
+ * @param x
165
+ * @param y
166
+ * @param z
167
+ * @return
168
+ */
169
+ public double noise3_XZBeforeY(double x, double y, double z) {
170
+
171
+ // Re-orient the cubic lattices without skewing, to make X and Z triangular like 2D.
172
+ // Orthonormal rotation. Not a skew transform.
173
+ double xz = x + z;
174
+ double s2 = xz * -0.211324865405187;
175
+ double yy = y * 0.577350269189626;
176
+ double xr = x + s2 - yy;
177
+ double zr = z + s2 - yy;
178
+ double yr = xz * 0.577350269189626 + yy;
179
+
180
+ // Evaluate both lattices to form a BCC lattice.
181
+ return noise3_BCC(xr, yr, zr);
182
+ }
183
+
184
+ /**
185
+ * Generate overlapping cubic lattices for 3D Re-oriented BCC noise. Lookup
186
+ * table implementation inspired by DigitalShadow. It was actually faster to
187
+ * narrow down the points in the loop itself, than to build up the index
188
+ * with enough info to isolate 8 points.
189
+ */
190
+ private double noise3_BCC(double xr, double yr, double zr) {
191
+
192
+ // Get base and offsets inside cube of first lattice.
193
+ int xrb = fastFloor(xr), yrb = fastFloor(yr), zrb = fastFloor(zr);
194
+ double xri = xr - xrb, yri = yr - yrb, zri = zr - zrb;
195
+
196
+ // Identify which octant of the cube we're in. This determines which cell
197
+ // in the other cubic lattice we're in, and also narrows down one point on each.
198
+ int xht = (int) (xri + 0.5), yht = (int) (yri + 0.5), zht = (int) (zri + 0.5);
199
+ int index = (xht) | (yht << 1) | (zht << 2);
200
+
201
+ // Point contributions
202
+ double value = 0;
203
+ LatticePoint3D c = LOOKUP_3D[index];
204
+ while (c != null) {
205
+ double dxr = xri + c.dxr, dyr = yri + c.dyr, dzr = zri + c.dzr;
206
+ double attn = 0.75 - dxr * dxr - dyr * dyr - dzr * dzr;
207
+ if (attn < 0) {
208
+ c = c.nextOnFailure;
209
+ } else {
210
+ int pxm = (xrb + c.xrv) & PMASK, pym = (yrb + c.yrv) & PMASK, pzm = (zrb + c.zrv) & PMASK;
211
+ Grad3 grad = permGrad3[perm[perm[pxm] ^ pym] ^ pzm];
212
+ double extrapolation = grad.dx * dxr + grad.dy * dyr + grad.dz * dzr;
213
+
214
+ attn *= attn;
215
+ value += attn * attn * extrapolation;
216
+ c = c.nextOnSuccess;
217
+ }
218
+ }
219
+ return value;
220
+ }
221
+
222
+ /**
223
+ * 4D SuperSimplex noise, with XY and ZW forming orthogonal triangular-based
224
+ * planes.Recommended for 3D terrain, where X and Y (or Z and W) are
225
+ * horizontal.Recommended for noise(x, y, sin(time), cos(time)) trick.
226
+ *
227
+ * @param x
228
+ * @param y
229
+ * @param z
230
+ * @param w
231
+ * @return
232
+ */
233
+ public double noise4_XYBeforeZW(double x, double y, double z, double w) {
234
+
235
+ double s2 = (x + y) * -0.28522513987434876941 + (z + w) * 0.83897065470611435718;
236
+ double t2 = (z + w) * 0.21939749883706435719 + (x + y) * -0.48214856493302476942;
237
+ double xs = x + s2, ys = y + s2, zs = z + t2, ws = w + t2;
238
+
239
+ return noise4_Base(xs, ys, zs, ws);
240
+ }
241
+
242
+ /**
243
+ * 4D SuperSimplex noise, with XZ and YW forming orthogonal triangular-based
244
+ * planes.Recommended for 3D terrain, where X and Z (or Y and W) are
245
+ * horizontal.
246
+ *
247
+ * @param x
248
+ * @param y
249
+ * @param z
250
+ * @param w
251
+ * @return
252
+ */
253
+ public double noise4_XZBeforeYW(double x, double y, double z, double w) {
254
+
255
+ double s2 = (x + z) * -0.28522513987434876941 + (y + w) * 0.83897065470611435718;
256
+ double t2 = (y + w) * 0.21939749883706435719 + (x + z) * -0.48214856493302476942;
257
+ double xs = x + s2, ys = y + t2, zs = z + s2, ws = w + t2;
258
+
259
+ return noise4_Base(xs, ys, zs, ws);
260
+ }
261
+
262
+
263
+ /**
264
+ * 4D SuperSimplex noise base. Using ultra-simple 4x4x4x4 lookup
265
+ * partitioning. This isn't as elegant or SIMD/GPU/etc. portable as other
266
+ * approaches, but it does compete performance-wise with optimized
267
+ * OpenSimplex1.
268
+ */
269
+ private double noise4_Base(double xs, double ys, double zs, double ws) {
270
+ double value = 0;
271
+
272
+ // Get base points and offsets
273
+ int xsb = fastFloor(xs), ysb = fastFloor(ys), zsb = fastFloor(zs), wsb = fastFloor(ws);
274
+ double xsi = xs - xsb, ysi = ys - ysb, zsi = zs - zsb, wsi = ws - wsb;
275
+
276
+ // Unskewed offsets
277
+ double ssi = (xsi + ysi + zsi + wsi) * -0.138196601125011;
278
+ double xi = xsi + ssi, yi = ysi + ssi, zi = zsi + ssi, wi = wsi + ssi;
279
+
280
+ int index = ((fastFloor(xs * 4) & 3))
281
+ | ((fastFloor(ys * 4) & 3) << 2)
282
+ | ((fastFloor(zs * 4) & 3) << 4)
283
+ | ((fastFloor(ws * 4) & 3) << 6);
284
+
285
+ // Point contributions
286
+ for (LatticePoint4D c : LOOKUP_4D[index]) {
287
+ double dx = xi + c.dx, dy = yi + c.dy, dz = zi + c.dz, dw = wi + c.dw;
288
+ double attn = 0.8 - dx * dx - dy * dy - dz * dz - dw * dw;
289
+ if (attn > 0) {
290
+ attn *= attn;
291
+
292
+ int pxm = (xsb + c.xsv) & PMASK, pym = (ysb + c.ysv) & PMASK;
293
+ int pzm = (zsb + c.zsv) & PMASK, pwm = (wsb + c.wsv) & PMASK;
294
+ Grad4 grad = permGrad4[perm[perm[perm[pxm] ^ pym] ^ pzm] ^ pwm];
295
+ double extrapolation = grad.dx * dx + grad.dy * dy + grad.dz * dz + grad.dw * dw;
296
+
297
+ value += attn * attn * extrapolation;
298
+ }
299
+ }
300
+ return value;
301
+ }
302
+
303
+ /*
304
+ * Utility
305
+ */
306
+ private static int fastFloor(double x) {
307
+ int xi = (int) x;
308
+ return x < xi ? xi - 1 : xi;
309
+ }
310
+
311
+ /*
312
+ * Definitions
313
+ */
314
+ private static final LatticePoint2D[] LOOKUP_2D;
315
+ private static final LatticePoint3D[] LOOKUP_3D;
316
+ private static final LatticePoint4D[][] LOOKUP_4D;
317
+
318
+ static {
319
+ LOOKUP_2D = new LatticePoint2D[8 * 4];
320
+ LOOKUP_3D = new LatticePoint3D[8];
321
+ LOOKUP_4D = new LatticePoint4D[256][];
322
+
323
+ for (int i = 0; i < 8; i++) {
324
+ int i1, j1, i2, j2;
325
+ if ((i & 1) == 0) {
326
+ if ((i & 2) == 0) {
327
+ i1 = -1;
328
+ j1 = 0;
329
+ } else {
330
+ i1 = 1;
331
+ j1 = 0;
332
+ }
333
+ if ((i & 4) == 0) {
334
+ i2 = 0;
335
+ j2 = -1;
336
+ } else {
337
+ i2 = 0;
338
+ j2 = 1;
339
+ }
340
+ } else {
341
+ if ((i & 2) != 0) {
342
+ i1 = 2;
343
+ j1 = 1;
344
+ } else {
345
+ i1 = 0;
346
+ j1 = 1;
347
+ }
348
+ if ((i & 4) != 0) {
349
+ i2 = 1;
350
+ j2 = 2;
351
+ } else {
352
+ i2 = 1;
353
+ j2 = 0;
354
+ }
355
+ }
356
+ LOOKUP_2D[i * 4 + 0] = new LatticePoint2D(0, 0);
357
+ LOOKUP_2D[i * 4 + 1] = new LatticePoint2D(1, 1);
358
+ LOOKUP_2D[i * 4 + 2] = new LatticePoint2D(i1, j1);
359
+ LOOKUP_2D[i * 4 + 3] = new LatticePoint2D(i2, j2);
360
+ }
361
+
362
+ for (int i = 0; i < 8; i++) {
363
+ int i1, j1, k1, i2, j2, k2;
364
+ i1 = (i) & 1;
365
+ j1 = (i >> 1) & 1;
366
+ k1 = (i >> 2) & 1;
367
+ i2 = i1 ^ 1;
368
+ j2 = j1 ^ 1;
369
+ k2 = k1 ^ 1;
370
+
371
+ // The two points within this octant, one from each of the two cubic half-lattices.
372
+ LatticePoint3D c0 = new LatticePoint3D(i1, j1, k1, 0);
373
+ LatticePoint3D c1 = new LatticePoint3D(i1 + i2, j1 + j2, k1 + k2, 1);
374
+
375
+ // (1, 0, 0) vs (0, 1, 1) away from octant.
376
+ LatticePoint3D c2 = new LatticePoint3D(i1 ^ 1, j1, k1, 0);
377
+ LatticePoint3D c3 = new LatticePoint3D(i1, j1 ^ 1, k1 ^ 1, 0);
378
+
379
+ // (1, 0, 0) vs (0, 1, 1) away from octant, on second half-lattice.
380
+ LatticePoint3D c4 = new LatticePoint3D(i1 + (i2 ^ 1), j1 + j2, k1 + k2, 1);
381
+ LatticePoint3D c5 = new LatticePoint3D(i1 + i2, j1 + (j2 ^ 1), k1 + (k2 ^ 1), 1);
382
+
383
+ // (0, 1, 0) vs (1, 0, 1) away from octant.
384
+ LatticePoint3D c6 = new LatticePoint3D(i1, j1 ^ 1, k1, 0);
385
+ LatticePoint3D c7 = new LatticePoint3D(i1 ^ 1, j1, k1 ^ 1, 0);
386
+
387
+ // (0, 1, 0) vs (1, 0, 1) away from octant, on second half-lattice.
388
+ LatticePoint3D c8 = new LatticePoint3D(i1 + i2, j1 + (j2 ^ 1), k1 + k2, 1);
389
+ LatticePoint3D c9 = new LatticePoint3D(i1 + (i2 ^ 1), j1 + j2, k1 + (k2 ^ 1), 1);
390
+
391
+ // (0, 0, 1) vs (1, 1, 0) away from octant.
392
+ LatticePoint3D cA = new LatticePoint3D(i1, j1, k1 ^ 1, 0);
393
+ LatticePoint3D cB = new LatticePoint3D(i1 ^ 1, j1 ^ 1, k1, 0);
394
+
395
+ // (0, 0, 1) vs (1, 1, 0) away from octant, on second half-lattice.
396
+ LatticePoint3D cC = new LatticePoint3D(i1 + i2, j1 + j2, k1 + (k2 ^ 1), 1);
397
+ LatticePoint3D cD = new LatticePoint3D(i1 + (i2 ^ 1), j1 + (j2 ^ 1), k1 + k2, 1);
398
+
399
+ // First two points are guaranteed.
400
+ c0.nextOnFailure = c0.nextOnSuccess = c1;
401
+ c1.nextOnFailure = c1.nextOnSuccess = c2;
402
+
403
+ // If c2 is in range, then we know c3 and c4 are not.
404
+ c2.nextOnFailure = c3;
405
+ c2.nextOnSuccess = c5;
406
+ c3.nextOnFailure = c4;
407
+ c3.nextOnSuccess = c4;
408
+
409
+ // If c4 is in range, then we know c5 is not.
410
+ c4.nextOnFailure = c5;
411
+ c4.nextOnSuccess = c6;
412
+ c5.nextOnFailure = c5.nextOnSuccess = c6;
413
+
414
+ // If c6 is in range, then we know c7 and c8 are not.
415
+ c6.nextOnFailure = c7;
416
+ c6.nextOnSuccess = c9;
417
+ c7.nextOnFailure = c8;
418
+ c7.nextOnSuccess = c8;
419
+
420
+ // If c8 is in range, then we know c9 is not.
421
+ c8.nextOnFailure = c9;
422
+ c8.nextOnSuccess = cA;
423
+ c9.nextOnFailure = c9.nextOnSuccess = cA;
424
+
425
+ // If cA is in range, then we know cB and cC are not.
426
+ cA.nextOnFailure = cB;
427
+ cA.nextOnSuccess = cD;
428
+ cB.nextOnFailure = cC;
429
+ cB.nextOnSuccess = cC;
430
+
431
+ // If cC is in range, then we know cD is not.
432
+ cC.nextOnFailure = cD;
433
+ cC.nextOnSuccess = null;
434
+ cD.nextOnFailure = cD.nextOnSuccess = null;
435
+
436
+ LOOKUP_3D[i] = c0;
437
+ }
438
+
439
+ int[][] lookup4DPregen = {
440
+ {0x15, 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
441
+ {0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA},
442
+ {0x01, 0x05, 0x11, 0x15, 0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA},
443
+ {0x01, 0x15, 0x16, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
444
+ {0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA},
445
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA},
446
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA},
447
+ {0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA, 0xAB},
448
+ {0x04, 0x05, 0x14, 0x15, 0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA},
449
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA},
450
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA},
451
+ {0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x6A, 0x9A, 0xAA, 0xAB},
452
+ {0x04, 0x15, 0x19, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
453
+ {0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA, 0xAE},
454
+ {0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x5E, 0x6A, 0x9A, 0xAA, 0xAE},
455
+ {0x05, 0x15, 0x1A, 0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x5E, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
456
+ {0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA},
457
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA},
458
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA},
459
+ {0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA, 0xAB},
460
+ {0x14, 0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA},
461
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA6, 0xA9, 0xAA},
462
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
463
+ {0x15, 0x16, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x6B, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
464
+ {0x14, 0x15, 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA},
465
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
466
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xAA},
467
+ {0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x6B, 0x9A, 0xAA, 0xAB},
468
+ {0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAE},
469
+ {0x15, 0x19, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
470
+ {0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x9A, 0xAA, 0xAE},
471
+ {0x15, 0x1A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
472
+ {0x10, 0x11, 0x14, 0x15, 0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA},
473
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA},
474
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA},
475
+ {0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x67, 0x6A, 0xA6, 0xAA, 0xAB},
476
+ {0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA},
477
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
478
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA},
479
+ {0x15, 0x16, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x6B, 0xA6, 0xAA, 0xAB},
480
+ {0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA},
481
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA},
482
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA},
483
+ {0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0xAA, 0xAB},
484
+ {0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x6D, 0xA9, 0xAA, 0xAE},
485
+ {0x15, 0x19, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x6E, 0xA9, 0xAA, 0xAE},
486
+ {0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0xAA, 0xAE},
487
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
488
+ {0x10, 0x15, 0x25, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
489
+ {0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA, 0xBA},
490
+ {0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0x76, 0xA6, 0xAA, 0xBA},
491
+ {0x11, 0x15, 0x26, 0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x67, 0x6A, 0x76, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
492
+ {0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xBA},
493
+ {0x15, 0x25, 0x55, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
494
+ {0x15, 0x25, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA6, 0xAA, 0xBA},
495
+ {0x15, 0x26, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
496
+ {0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0x79, 0xA9, 0xAA, 0xBA},
497
+ {0x15, 0x25, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA9, 0xAA, 0xBA},
498
+ {0x15, 0x25, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xAA, 0xBA},
499
+ {0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
500
+ {0x14, 0x15, 0x29, 0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0x6D, 0x79, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
501
+ {0x15, 0x29, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
502
+ {0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
503
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x7A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF},
504
+ {0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
505
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA},
506
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA},
507
+ {0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
508
+ {0x44, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA},
509
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA},
510
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB},
511
+ {0x45, 0x46, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB},
512
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA},
513
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
514
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA},
515
+ {0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x9A, 0x9B, 0xAA, 0xAB},
516
+ {0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
517
+ {0x45, 0x49, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE},
518
+ {0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x99, 0x9A, 0x9E, 0xAA, 0xAE},
519
+ {0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF},
520
+ {0x50, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA},
521
+ {0x51, 0x55, 0x56, 0x59, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
522
+ {0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB},
523
+ {0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB},
524
+ {0x54, 0x55, 0x56, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
525
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
526
+ {0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
527
+ {0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
528
+ {0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE},
529
+ {0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
530
+ {0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE},
531
+ {0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
532
+ {0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE},
533
+ {0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
534
+ {0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
535
+ {0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
536
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA},
537
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
538
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA},
539
+ {0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xA7, 0xAA, 0xAB},
540
+ {0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
541
+ {0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
542
+ {0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA},
543
+ {0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
544
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA},
545
+ {0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA},
546
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA},
547
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
548
+ {0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAD, 0xAE},
549
+ {0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
550
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
551
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
552
+ {0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
553
+ {0x51, 0x55, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA},
554
+ {0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA},
555
+ {0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x6A, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB},
556
+ {0x54, 0x55, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA},
557
+ {0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
558
+ {0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
559
+ {0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
560
+ {0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA},
561
+ {0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
562
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
563
+ {0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
564
+ {0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE},
565
+ {0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
566
+ {0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
567
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF},
568
+ {0x40, 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
569
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA},
570
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA},
571
+ {0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB},
572
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA},
573
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
574
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA},
575
+ {0x45, 0x46, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB},
576
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA},
577
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA},
578
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA},
579
+ {0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xAA, 0xAB},
580
+ {0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x95, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE},
581
+ {0x45, 0x49, 0x55, 0x59, 0x5A, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE},
582
+ {0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xAA, 0xAE},
583
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF},
584
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA},
585
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
586
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA},
587
+ {0x51, 0x52, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB},
588
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
589
+ {0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
590
+ {0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA},
591
+ {0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
592
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA},
593
+ {0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA},
594
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA},
595
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB},
596
+ {0x54, 0x55, 0x58, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE},
597
+ {0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
598
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
599
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
600
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA},
601
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA},
602
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA},
603
+ {0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB},
604
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA},
605
+ {0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA},
606
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
607
+ {0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB},
608
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA},
609
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
610
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
611
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB},
612
+ {0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE},
613
+ {0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE},
614
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAE},
615
+ {0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xAF},
616
+ {0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA},
617
+ {0x51, 0x55, 0x61, 0x65, 0x66, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA},
618
+ {0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA},
619
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB},
620
+ {0x54, 0x55, 0x64, 0x65, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA},
621
+ {0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
622
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
623
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
624
+ {0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA},
625
+ {0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
626
+ {0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
627
+ {0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xBB},
628
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE},
629
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
630
+ {0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
631
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA},
632
+ {0x40, 0x45, 0x51, 0x54, 0x55, 0x85, 0x91, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
633
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA, 0xEA},
634
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xD6, 0xEA},
635
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x86, 0x92, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB, 0xD6, 0xEA, 0xEB},
636
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xEA},
637
+ {0x45, 0x55, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xDA, 0xEA},
638
+ {0x45, 0x55, 0x56, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xDA, 0xEA},
639
+ {0x45, 0x55, 0x56, 0x86, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB},
640
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xD9, 0xEA},
641
+ {0x45, 0x55, 0x59, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xDA, 0xEA},
642
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xDA, 0xEA},
643
+ {0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB},
644
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x89, 0x95, 0x98, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE, 0xD9, 0xEA, 0xEE},
645
+ {0x45, 0x55, 0x59, 0x89, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE},
646
+ {0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE},
647
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xDA, 0xEA, 0xEF},
648
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
649
+ {0x51, 0x55, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA},
650
+ {0x51, 0x55, 0x56, 0x91, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA},
651
+ {0x51, 0x55, 0x56, 0x92, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB},
652
+ {0x54, 0x55, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA},
653
+ {0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
654
+ {0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
655
+ {0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB},
656
+ {0x54, 0x55, 0x59, 0x94, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA},
657
+ {0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
658
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
659
+ {0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB},
660
+ {0x54, 0x55, 0x59, 0x95, 0x98, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE},
661
+ {0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
662
+ {0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
663
+ {0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xEA, 0xEF},
664
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xE5, 0xEA},
665
+ {0x51, 0x55, 0x65, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA},
666
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA},
667
+ {0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB},
668
+ {0x54, 0x55, 0x65, 0x94, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA},
669
+ {0x55, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
670
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
671
+ {0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB},
672
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x94, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA},
673
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
674
+ {0x55, 0x56, 0x59, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
675
+ {0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA, 0xEB},
676
+ {0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE},
677
+ {0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
678
+ {0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
679
+ {0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xEA},
680
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA1, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA, 0xE5, 0xEA, 0xFA},
681
+ {0x51, 0x55, 0x65, 0x95, 0xA1, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA},
682
+ {0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA},
683
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xE6, 0xEA, 0xFB},
684
+ {0x54, 0x55, 0x65, 0x95, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA},
685
+ {0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
686
+ {0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
687
+ {0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xEA, 0xFB},
688
+ {0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA},
689
+ {0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
690
+ {0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
691
+ {0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xEA},
692
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xE9, 0xEA, 0xFE},
693
+ {0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA, 0xFE},
694
+ {0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA},
695
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA, 0xEA},};
696
+ LatticePoint4D[] latticePoints = new LatticePoint4D[256];
697
+ for (int i = 0; i < 256; i++) {
698
+ int cx = ((i) & 3) - 1;
699
+ int cy = ((i >> 2) & 3) - 1;
700
+ int cz = ((i >> 4) & 3) - 1;
701
+ int cw = ((i >> 6) & 3) - 1;
702
+ latticePoints[i] = new LatticePoint4D(cx, cy, cz, cw);
703
+ }
704
+ for (int i = 0; i < 256; i++) {
705
+ LOOKUP_4D[i] = new LatticePoint4D[lookup4DPregen[i].length];
706
+ for (int j = 0; j < lookup4DPregen[i].length; j++) {
707
+ LOOKUP_4D[i][j] = latticePoints[lookup4DPregen[i][j]];
708
+ }
709
+ }
710
+ }
711
+
712
+ @Override
713
+ public float noise(float x, float y){
714
+ return (float)noise2_XBeforeY(x, y);
715
+ }
716
+
717
+ @Override
718
+ public float noise(float x, float y, float z) {
719
+ return (float)noise3_XYBeforeZ(x, y, z);
720
+ }
721
+
722
+ @Override
723
+ public float noise(float x, float y, float z, float w) {
724
+ return (float)noise4_XZBeforeYW(x, y, z, w);
725
+ }
726
+
727
+ @Override
728
+ public void noiseMode(NoiseMode mode) {
729
+
730
+ }
731
+
732
+ @Override
733
+ public void noiseSeed(long seed) {
734
+
735
+ }
736
+
737
+ private static class LatticePoint2D {
738
+
739
+ int xsv, ysv;
740
+ double dx, dy;
741
+
742
+ public LatticePoint2D(int xsv, int ysv) {
743
+ this.xsv = xsv;
744
+ this.ysv = ysv;
745
+ double ssv = (xsv + ysv) * -0.211324865405187;
746
+ this.dx = -xsv - ssv;
747
+ this.dy = -ysv - ssv;
748
+ }
749
+ }
750
+
751
+ private static class LatticePoint3D {
752
+
753
+ public double dxr, dyr, dzr;
754
+ public int xrv, yrv, zrv;
755
+ LatticePoint3D nextOnFailure, nextOnSuccess;
756
+
757
+ public LatticePoint3D(int xrv, int yrv, int zrv, int lattice) {
758
+ this.dxr = -xrv + lattice * 0.5;
759
+ this.dyr = -yrv + lattice * 0.5;
760
+ this.dzr = -zrv + lattice * 0.5;
761
+ this.xrv = xrv + lattice * 1024;
762
+ this.yrv = yrv + lattice * 1024;
763
+ this.zrv = zrv + lattice * 1024;
764
+ }
765
+ }
766
+
767
+ private static class LatticePoint4D {
768
+
769
+ int xsv, ysv, zsv, wsv;
770
+ double dx, dy, dz, dw;
771
+
772
+ public LatticePoint4D(int xsv, int ysv, int zsv, int wsv) {
773
+ this.xsv = xsv;
774
+ this.ysv = ysv;
775
+ this.zsv = zsv;
776
+ this.wsv = wsv;
777
+ double ssv = (xsv + ysv + zsv + wsv) * -0.138196601125011;
778
+ this.dx = -xsv - ssv;
779
+ this.dy = -ysv - ssv;
780
+ this.dz = -zsv - ssv;
781
+ this.dw = -wsv - ssv;
782
+ }
783
+ }
784
+
785
+ /*
786
+ * Gradients
787
+ */
788
+ private static class Grad2 {
789
+
790
+ double dx, dy;
791
+
792
+ public Grad2(double dx, double dy) {
793
+ this.dx = dx;
794
+ this.dy = dy;
795
+ }
796
+ }
797
+
798
+ private static class Grad3 {
799
+
800
+ double dx, dy, dz;
801
+
802
+ public Grad3(double dx, double dy, double dz) {
803
+ this.dx = dx;
804
+ this.dy = dy;
805
+ this.dz = dz;
806
+ }
807
+ }
808
+
809
+ private static class Grad4 {
810
+
811
+ double dx, dy, dz, dw;
812
+
813
+ public Grad4(double dx, double dy, double dz, double dw) {
814
+ this.dx = dx;
815
+ this.dy = dy;
816
+ this.dz = dz;
817
+ this.dw = dw;
818
+ }
819
+ }
820
+
821
+ private static final double N2 = 0.05481866495625118;
822
+ private static final double N3 = 0.2781926117527186;
823
+ private static final double N4 = 0.11127401889945551;
824
+ private static final Grad2[] GRADIENTS_2D;
825
+ private static final Grad3[] GRADIENTS_3D;
826
+ private static final Grad4[] GRADIENTS_4D;
827
+
828
+ static {
829
+
830
+ GRADIENTS_2D = new Grad2[PSIZE];
831
+ Grad2[] grad2 = {
832
+ new Grad2(0.130526192220052, 0.99144486137381),
833
+ new Grad2(0.38268343236509, 0.923879532511287),
834
+ new Grad2(0.608761429008721, 0.793353340291235),
835
+ new Grad2(0.793353340291235, 0.608761429008721),
836
+ new Grad2(0.923879532511287, 0.38268343236509),
837
+ new Grad2(0.99144486137381, 0.130526192220051),
838
+ new Grad2(0.99144486137381, -0.130526192220051),
839
+ new Grad2(0.923879532511287, -0.38268343236509),
840
+ new Grad2(0.793353340291235, -0.60876142900872),
841
+ new Grad2(0.608761429008721, -0.793353340291235),
842
+ new Grad2(0.38268343236509, -0.923879532511287),
843
+ new Grad2(0.130526192220052, -0.99144486137381),
844
+ new Grad2(-0.130526192220052, -0.99144486137381),
845
+ new Grad2(-0.38268343236509, -0.923879532511287),
846
+ new Grad2(-0.608761429008721, -0.793353340291235),
847
+ new Grad2(-0.793353340291235, -0.608761429008721),
848
+ new Grad2(-0.923879532511287, -0.38268343236509),
849
+ new Grad2(-0.99144486137381, -0.130526192220052),
850
+ new Grad2(-0.99144486137381, 0.130526192220051),
851
+ new Grad2(-0.923879532511287, 0.38268343236509),
852
+ new Grad2(-0.793353340291235, 0.608761429008721),
853
+ new Grad2(-0.608761429008721, 0.793353340291235),
854
+ new Grad2(-0.38268343236509, 0.923879532511287),
855
+ new Grad2(-0.130526192220052, 0.99144486137381)
856
+ };
857
+ Grad2[] grad2XBeforeY = new Grad2[grad2.length];
858
+ for (Grad2 grad21 : grad2) {
859
+ grad21.dx /= N2;
860
+ grad21.dy /= N2;
861
+ }
862
+ for (int i = 0; i < PSIZE; i++) {
863
+ GRADIENTS_2D[i] = grad2[i % grad2.length];
864
+ }
865
+
866
+ GRADIENTS_3D = new Grad3[PSIZE];
867
+ Grad3[] grad3 = {
868
+ new Grad3(-2.22474487139, -2.22474487139, -1.0),
869
+ new Grad3(-2.22474487139, -2.22474487139, 1.0),
870
+ new Grad3(-3.0862664687972017, -1.1721513422464978, 0.0),
871
+ new Grad3(-1.1721513422464978, -3.0862664687972017, 0.0),
872
+ new Grad3(-2.22474487139, -1.0, -2.22474487139),
873
+ new Grad3(-2.22474487139, 1.0, -2.22474487139),
874
+ new Grad3(-1.1721513422464978, 0.0, -3.0862664687972017),
875
+ new Grad3(-3.0862664687972017, 0.0, -1.1721513422464978),
876
+ new Grad3(-2.22474487139, -1.0, 2.22474487139),
877
+ new Grad3(-2.22474487139, 1.0, 2.22474487139),
878
+ new Grad3(-3.0862664687972017, 0.0, 1.1721513422464978),
879
+ new Grad3(-1.1721513422464978, 0.0, 3.0862664687972017),
880
+ new Grad3(-2.22474487139, 2.22474487139, -1.0),
881
+ new Grad3(-2.22474487139, 2.22474487139, 1.0),
882
+ new Grad3(-1.1721513422464978, 3.0862664687972017, 0.0),
883
+ new Grad3(-3.0862664687972017, 1.1721513422464978, 0.0),
884
+ new Grad3(-1.0, -2.22474487139, -2.22474487139),
885
+ new Grad3(1.0, -2.22474487139, -2.22474487139),
886
+ new Grad3(0.0, -3.0862664687972017, -1.1721513422464978),
887
+ new Grad3(0.0, -1.1721513422464978, -3.0862664687972017),
888
+ new Grad3(-1.0, -2.22474487139, 2.22474487139),
889
+ new Grad3(1.0, -2.22474487139, 2.22474487139),
890
+ new Grad3(0.0, -1.1721513422464978, 3.0862664687972017),
891
+ new Grad3(0.0, -3.0862664687972017, 1.1721513422464978),
892
+ new Grad3(-1.0, 2.22474487139, -2.22474487139),
893
+ new Grad3(1.0, 2.22474487139, -2.22474487139),
894
+ new Grad3(0.0, 1.1721513422464978, -3.0862664687972017),
895
+ new Grad3(0.0, 3.0862664687972017, -1.1721513422464978),
896
+ new Grad3(-1.0, 2.22474487139, 2.22474487139),
897
+ new Grad3(1.0, 2.22474487139, 2.22474487139),
898
+ new Grad3(0.0, 3.0862664687972017, 1.1721513422464978),
899
+ new Grad3(0.0, 1.1721513422464978, 3.0862664687972017),
900
+ new Grad3(2.22474487139, -2.22474487139, -1.0),
901
+ new Grad3(2.22474487139, -2.22474487139, 1.0),
902
+ new Grad3(1.1721513422464978, -3.0862664687972017, 0.0),
903
+ new Grad3(3.0862664687972017, -1.1721513422464978, 0.0),
904
+ new Grad3(2.22474487139, -1.0, -2.22474487139),
905
+ new Grad3(2.22474487139, 1.0, -2.22474487139),
906
+ new Grad3(3.0862664687972017, 0.0, -1.1721513422464978),
907
+ new Grad3(1.1721513422464978, 0.0, -3.0862664687972017),
908
+ new Grad3(2.22474487139, -1.0, 2.22474487139),
909
+ new Grad3(2.22474487139, 1.0, 2.22474487139),
910
+ new Grad3(1.1721513422464978, 0.0, 3.0862664687972017),
911
+ new Grad3(3.0862664687972017, 0.0, 1.1721513422464978),
912
+ new Grad3(2.22474487139, 2.22474487139, -1.0),
913
+ new Grad3(2.22474487139, 2.22474487139, 1.0),
914
+ new Grad3(3.0862664687972017, 1.1721513422464978, 0.0),
915
+ new Grad3(1.1721513422464978, 3.0862664687972017, 0.0)
916
+ };
917
+ for (Grad3 grad31 : grad3) {
918
+ grad31.dx /= N3;
919
+ grad31.dy /= N3;
920
+ grad31.dz /= N3;
921
+ }
922
+ for (int i = 0; i < PSIZE; i++) {
923
+ GRADIENTS_3D[i] = grad3[i % grad3.length];
924
+ }
925
+
926
+ GRADIENTS_4D = new Grad4[PSIZE];
927
+ Grad4[] grad4 = {
928
+ new Grad4(-0.753341017856078, -0.37968289875261624, -0.37968289875261624, -0.37968289875261624),
929
+ new Grad4(-0.7821684431180708, -0.4321472685365301, -0.4321472685365301, 0.12128480194602098),
930
+ new Grad4(-0.7821684431180708, -0.4321472685365301, 0.12128480194602098, -0.4321472685365301),
931
+ new Grad4(-0.7821684431180708, 0.12128480194602098, -0.4321472685365301, -0.4321472685365301),
932
+ new Grad4(-0.8586508742123365, -0.508629699630796, 0.044802370851755174, 0.044802370851755174),
933
+ new Grad4(-0.8586508742123365, 0.044802370851755174, -0.508629699630796, 0.044802370851755174),
934
+ new Grad4(-0.8586508742123365, 0.044802370851755174, 0.044802370851755174, -0.508629699630796),
935
+ new Grad4(-0.9982828964265062, -0.03381941603233842, -0.03381941603233842, -0.03381941603233842),
936
+ new Grad4(-0.37968289875261624, -0.753341017856078, -0.37968289875261624, -0.37968289875261624),
937
+ new Grad4(-0.4321472685365301, -0.7821684431180708, -0.4321472685365301, 0.12128480194602098),
938
+ new Grad4(-0.4321472685365301, -0.7821684431180708, 0.12128480194602098, -0.4321472685365301),
939
+ new Grad4(0.12128480194602098, -0.7821684431180708, -0.4321472685365301, -0.4321472685365301),
940
+ new Grad4(-0.508629699630796, -0.8586508742123365, 0.044802370851755174, 0.044802370851755174),
941
+ new Grad4(0.044802370851755174, -0.8586508742123365, -0.508629699630796, 0.044802370851755174),
942
+ new Grad4(0.044802370851755174, -0.8586508742123365, 0.044802370851755174, -0.508629699630796),
943
+ new Grad4(-0.03381941603233842, -0.9982828964265062, -0.03381941603233842, -0.03381941603233842),
944
+ new Grad4(-0.37968289875261624, -0.37968289875261624, -0.753341017856078, -0.37968289875261624),
945
+ new Grad4(-0.4321472685365301, -0.4321472685365301, -0.7821684431180708, 0.12128480194602098),
946
+ new Grad4(-0.4321472685365301, 0.12128480194602098, -0.7821684431180708, -0.4321472685365301),
947
+ new Grad4(0.12128480194602098, -0.4321472685365301, -0.7821684431180708, -0.4321472685365301),
948
+ new Grad4(-0.508629699630796, 0.044802370851755174, -0.8586508742123365, 0.044802370851755174),
949
+ new Grad4(0.044802370851755174, -0.508629699630796, -0.8586508742123365, 0.044802370851755174),
950
+ new Grad4(0.044802370851755174, 0.044802370851755174, -0.8586508742123365, -0.508629699630796),
951
+ new Grad4(-0.03381941603233842, -0.03381941603233842, -0.9982828964265062, -0.03381941603233842),
952
+ new Grad4(-0.37968289875261624, -0.37968289875261624, -0.37968289875261624, -0.753341017856078),
953
+ new Grad4(-0.4321472685365301, -0.4321472685365301, 0.12128480194602098, -0.7821684431180708),
954
+ new Grad4(-0.4321472685365301, 0.12128480194602098, -0.4321472685365301, -0.7821684431180708),
955
+ new Grad4(0.12128480194602098, -0.4321472685365301, -0.4321472685365301, -0.7821684431180708),
956
+ new Grad4(-0.508629699630796, 0.044802370851755174, 0.044802370851755174, -0.8586508742123365),
957
+ new Grad4(0.044802370851755174, -0.508629699630796, 0.044802370851755174, -0.8586508742123365),
958
+ new Grad4(0.044802370851755174, 0.044802370851755174, -0.508629699630796, -0.8586508742123365),
959
+ new Grad4(-0.03381941603233842, -0.03381941603233842, -0.03381941603233842, -0.9982828964265062),
960
+ new Grad4(-0.6740059517812944, -0.3239847771997537, -0.3239847771997537, 0.5794684678643381),
961
+ new Grad4(-0.7504883828755602, -0.4004672082940195, 0.15296486218853164, 0.5029860367700724),
962
+ new Grad4(-0.7504883828755602, 0.15296486218853164, -0.4004672082940195, 0.5029860367700724),
963
+ new Grad4(-0.8828161875373585, 0.08164729285680945, 0.08164729285680945, 0.4553054119602712),
964
+ new Grad4(-0.4553054119602712, -0.08164729285680945, -0.08164729285680945, 0.8828161875373585),
965
+ new Grad4(-0.5029860367700724, -0.15296486218853164, 0.4004672082940195, 0.7504883828755602),
966
+ new Grad4(-0.5029860367700724, 0.4004672082940195, -0.15296486218853164, 0.7504883828755602),
967
+ new Grad4(-0.5794684678643381, 0.3239847771997537, 0.3239847771997537, 0.6740059517812944),
968
+ new Grad4(-0.3239847771997537, -0.6740059517812944, -0.3239847771997537, 0.5794684678643381),
969
+ new Grad4(-0.4004672082940195, -0.7504883828755602, 0.15296486218853164, 0.5029860367700724),
970
+ new Grad4(0.15296486218853164, -0.7504883828755602, -0.4004672082940195, 0.5029860367700724),
971
+ new Grad4(0.08164729285680945, -0.8828161875373585, 0.08164729285680945, 0.4553054119602712),
972
+ new Grad4(-0.08164729285680945, -0.4553054119602712, -0.08164729285680945, 0.8828161875373585),
973
+ new Grad4(-0.15296486218853164, -0.5029860367700724, 0.4004672082940195, 0.7504883828755602),
974
+ new Grad4(0.4004672082940195, -0.5029860367700724, -0.15296486218853164, 0.7504883828755602),
975
+ new Grad4(0.3239847771997537, -0.5794684678643381, 0.3239847771997537, 0.6740059517812944),
976
+ new Grad4(-0.3239847771997537, -0.3239847771997537, -0.6740059517812944, 0.5794684678643381),
977
+ new Grad4(-0.4004672082940195, 0.15296486218853164, -0.7504883828755602, 0.5029860367700724),
978
+ new Grad4(0.15296486218853164, -0.4004672082940195, -0.7504883828755602, 0.5029860367700724),
979
+ new Grad4(0.08164729285680945, 0.08164729285680945, -0.8828161875373585, 0.4553054119602712),
980
+ new Grad4(-0.08164729285680945, -0.08164729285680945, -0.4553054119602712, 0.8828161875373585),
981
+ new Grad4(-0.15296486218853164, 0.4004672082940195, -0.5029860367700724, 0.7504883828755602),
982
+ new Grad4(0.4004672082940195, -0.15296486218853164, -0.5029860367700724, 0.7504883828755602),
983
+ new Grad4(0.3239847771997537, 0.3239847771997537, -0.5794684678643381, 0.6740059517812944),
984
+ new Grad4(-0.6740059517812944, -0.3239847771997537, 0.5794684678643381, -0.3239847771997537),
985
+ new Grad4(-0.7504883828755602, -0.4004672082940195, 0.5029860367700724, 0.15296486218853164),
986
+ new Grad4(-0.7504883828755602, 0.15296486218853164, 0.5029860367700724, -0.4004672082940195),
987
+ new Grad4(-0.8828161875373585, 0.08164729285680945, 0.4553054119602712, 0.08164729285680945),
988
+ new Grad4(-0.4553054119602712, -0.08164729285680945, 0.8828161875373585, -0.08164729285680945),
989
+ new Grad4(-0.5029860367700724, -0.15296486218853164, 0.7504883828755602, 0.4004672082940195),
990
+ new Grad4(-0.5029860367700724, 0.4004672082940195, 0.7504883828755602, -0.15296486218853164),
991
+ new Grad4(-0.5794684678643381, 0.3239847771997537, 0.6740059517812944, 0.3239847771997537),
992
+ new Grad4(-0.3239847771997537, -0.6740059517812944, 0.5794684678643381, -0.3239847771997537),
993
+ new Grad4(-0.4004672082940195, -0.7504883828755602, 0.5029860367700724, 0.15296486218853164),
994
+ new Grad4(0.15296486218853164, -0.7504883828755602, 0.5029860367700724, -0.4004672082940195),
995
+ new Grad4(0.08164729285680945, -0.8828161875373585, 0.4553054119602712, 0.08164729285680945),
996
+ new Grad4(-0.08164729285680945, -0.4553054119602712, 0.8828161875373585, -0.08164729285680945),
997
+ new Grad4(-0.15296486218853164, -0.5029860367700724, 0.7504883828755602, 0.4004672082940195),
998
+ new Grad4(0.4004672082940195, -0.5029860367700724, 0.7504883828755602, -0.15296486218853164),
999
+ new Grad4(0.3239847771997537, -0.5794684678643381, 0.6740059517812944, 0.3239847771997537),
1000
+ new Grad4(-0.3239847771997537, -0.3239847771997537, 0.5794684678643381, -0.6740059517812944),
1001
+ new Grad4(-0.4004672082940195, 0.15296486218853164, 0.5029860367700724, -0.7504883828755602),
1002
+ new Grad4(0.15296486218853164, -0.4004672082940195, 0.5029860367700724, -0.7504883828755602),
1003
+ new Grad4(0.08164729285680945, 0.08164729285680945, 0.4553054119602712, -0.8828161875373585),
1004
+ new Grad4(-0.08164729285680945, -0.08164729285680945, 0.8828161875373585, -0.4553054119602712),
1005
+ new Grad4(-0.15296486218853164, 0.4004672082940195, 0.7504883828755602, -0.5029860367700724),
1006
+ new Grad4(0.4004672082940195, -0.15296486218853164, 0.7504883828755602, -0.5029860367700724),
1007
+ new Grad4(0.3239847771997537, 0.3239847771997537, 0.6740059517812944, -0.5794684678643381),
1008
+ new Grad4(-0.6740059517812944, 0.5794684678643381, -0.3239847771997537, -0.3239847771997537),
1009
+ new Grad4(-0.7504883828755602, 0.5029860367700724, -0.4004672082940195, 0.15296486218853164),
1010
+ new Grad4(-0.7504883828755602, 0.5029860367700724, 0.15296486218853164, -0.4004672082940195),
1011
+ new Grad4(-0.8828161875373585, 0.4553054119602712, 0.08164729285680945, 0.08164729285680945),
1012
+ new Grad4(-0.4553054119602712, 0.8828161875373585, -0.08164729285680945, -0.08164729285680945),
1013
+ new Grad4(-0.5029860367700724, 0.7504883828755602, -0.15296486218853164, 0.4004672082940195),
1014
+ new Grad4(-0.5029860367700724, 0.7504883828755602, 0.4004672082940195, -0.15296486218853164),
1015
+ new Grad4(-0.5794684678643381, 0.6740059517812944, 0.3239847771997537, 0.3239847771997537),
1016
+ new Grad4(-0.3239847771997537, 0.5794684678643381, -0.6740059517812944, -0.3239847771997537),
1017
+ new Grad4(-0.4004672082940195, 0.5029860367700724, -0.7504883828755602, 0.15296486218853164),
1018
+ new Grad4(0.15296486218853164, 0.5029860367700724, -0.7504883828755602, -0.4004672082940195),
1019
+ new Grad4(0.08164729285680945, 0.4553054119602712, -0.8828161875373585, 0.08164729285680945),
1020
+ new Grad4(-0.08164729285680945, 0.8828161875373585, -0.4553054119602712, -0.08164729285680945),
1021
+ new Grad4(-0.15296486218853164, 0.7504883828755602, -0.5029860367700724, 0.4004672082940195),
1022
+ new Grad4(0.4004672082940195, 0.7504883828755602, -0.5029860367700724, -0.15296486218853164),
1023
+ new Grad4(0.3239847771997537, 0.6740059517812944, -0.5794684678643381, 0.3239847771997537),
1024
+ new Grad4(-0.3239847771997537, 0.5794684678643381, -0.3239847771997537, -0.6740059517812944),
1025
+ new Grad4(-0.4004672082940195, 0.5029860367700724, 0.15296486218853164, -0.7504883828755602),
1026
+ new Grad4(0.15296486218853164, 0.5029860367700724, -0.4004672082940195, -0.7504883828755602),
1027
+ new Grad4(0.08164729285680945, 0.4553054119602712, 0.08164729285680945, -0.8828161875373585),
1028
+ new Grad4(-0.08164729285680945, 0.8828161875373585, -0.08164729285680945, -0.4553054119602712),
1029
+ new Grad4(-0.15296486218853164, 0.7504883828755602, 0.4004672082940195, -0.5029860367700724),
1030
+ new Grad4(0.4004672082940195, 0.7504883828755602, -0.15296486218853164, -0.5029860367700724),
1031
+ new Grad4(0.3239847771997537, 0.6740059517812944, 0.3239847771997537, -0.5794684678643381),
1032
+ new Grad4(0.5794684678643381, -0.6740059517812944, -0.3239847771997537, -0.3239847771997537),
1033
+ new Grad4(0.5029860367700724, -0.7504883828755602, -0.4004672082940195, 0.15296486218853164),
1034
+ new Grad4(0.5029860367700724, -0.7504883828755602, 0.15296486218853164, -0.4004672082940195),
1035
+ new Grad4(0.4553054119602712, -0.8828161875373585, 0.08164729285680945, 0.08164729285680945),
1036
+ new Grad4(0.8828161875373585, -0.4553054119602712, -0.08164729285680945, -0.08164729285680945),
1037
+ new Grad4(0.7504883828755602, -0.5029860367700724, -0.15296486218853164, 0.4004672082940195),
1038
+ new Grad4(0.7504883828755602, -0.5029860367700724, 0.4004672082940195, -0.15296486218853164),
1039
+ new Grad4(0.6740059517812944, -0.5794684678643381, 0.3239847771997537, 0.3239847771997537),
1040
+ new Grad4(0.5794684678643381, -0.3239847771997537, -0.6740059517812944, -0.3239847771997537),
1041
+ new Grad4(0.5029860367700724, -0.4004672082940195, -0.7504883828755602, 0.15296486218853164),
1042
+ new Grad4(0.5029860367700724, 0.15296486218853164, -0.7504883828755602, -0.4004672082940195),
1043
+ new Grad4(0.4553054119602712, 0.08164729285680945, -0.8828161875373585, 0.08164729285680945),
1044
+ new Grad4(0.8828161875373585, -0.08164729285680945, -0.4553054119602712, -0.08164729285680945),
1045
+ new Grad4(0.7504883828755602, -0.15296486218853164, -0.5029860367700724, 0.4004672082940195),
1046
+ new Grad4(0.7504883828755602, 0.4004672082940195, -0.5029860367700724, -0.15296486218853164),
1047
+ new Grad4(0.6740059517812944, 0.3239847771997537, -0.5794684678643381, 0.3239847771997537),
1048
+ new Grad4(0.5794684678643381, -0.3239847771997537, -0.3239847771997537, -0.6740059517812944),
1049
+ new Grad4(0.5029860367700724, -0.4004672082940195, 0.15296486218853164, -0.7504883828755602),
1050
+ new Grad4(0.5029860367700724, 0.15296486218853164, -0.4004672082940195, -0.7504883828755602),
1051
+ new Grad4(0.4553054119602712, 0.08164729285680945, 0.08164729285680945, -0.8828161875373585),
1052
+ new Grad4(0.8828161875373585, -0.08164729285680945, -0.08164729285680945, -0.4553054119602712),
1053
+ new Grad4(0.7504883828755602, -0.15296486218853164, 0.4004672082940195, -0.5029860367700724),
1054
+ new Grad4(0.7504883828755602, 0.4004672082940195, -0.15296486218853164, -0.5029860367700724),
1055
+ new Grad4(0.6740059517812944, 0.3239847771997537, 0.3239847771997537, -0.5794684678643381),
1056
+ new Grad4(0.03381941603233842, 0.03381941603233842, 0.03381941603233842, 0.9982828964265062),
1057
+ new Grad4(-0.044802370851755174, -0.044802370851755174, 0.508629699630796, 0.8586508742123365),
1058
+ new Grad4(-0.044802370851755174, 0.508629699630796, -0.044802370851755174, 0.8586508742123365),
1059
+ new Grad4(-0.12128480194602098, 0.4321472685365301, 0.4321472685365301, 0.7821684431180708),
1060
+ new Grad4(0.508629699630796, -0.044802370851755174, -0.044802370851755174, 0.8586508742123365),
1061
+ new Grad4(0.4321472685365301, -0.12128480194602098, 0.4321472685365301, 0.7821684431180708),
1062
+ new Grad4(0.4321472685365301, 0.4321472685365301, -0.12128480194602098, 0.7821684431180708),
1063
+ new Grad4(0.37968289875261624, 0.37968289875261624, 0.37968289875261624, 0.753341017856078),
1064
+ new Grad4(0.03381941603233842, 0.03381941603233842, 0.9982828964265062, 0.03381941603233842),
1065
+ new Grad4(-0.044802370851755174, 0.044802370851755174, 0.8586508742123365, 0.508629699630796),
1066
+ new Grad4(-0.044802370851755174, 0.508629699630796, 0.8586508742123365, -0.044802370851755174),
1067
+ new Grad4(-0.12128480194602098, 0.4321472685365301, 0.7821684431180708, 0.4321472685365301),
1068
+ new Grad4(0.508629699630796, -0.044802370851755174, 0.8586508742123365, -0.044802370851755174),
1069
+ new Grad4(0.4321472685365301, -0.12128480194602098, 0.7821684431180708, 0.4321472685365301),
1070
+ new Grad4(0.4321472685365301, 0.4321472685365301, 0.7821684431180708, -0.12128480194602098),
1071
+ new Grad4(0.37968289875261624, 0.37968289875261624, 0.753341017856078, 0.37968289875261624),
1072
+ new Grad4(0.03381941603233842, 0.9982828964265062, 0.03381941603233842, 0.03381941603233842),
1073
+ new Grad4(-0.044802370851755174, 0.8586508742123365, -0.044802370851755174, 0.508629699630796),
1074
+ new Grad4(-0.044802370851755174, 0.8586508742123365, 0.508629699630796, -0.044802370851755174),
1075
+ new Grad4(-0.12128480194602098, 0.7821684431180708, 0.4321472685365301, 0.4321472685365301),
1076
+ new Grad4(0.508629699630796, 0.8586508742123365, -0.044802370851755174, -0.044802370851755174),
1077
+ new Grad4(0.4321472685365301, 0.7821684431180708, -0.12128480194602098, 0.4321472685365301),
1078
+ new Grad4(0.4321472685365301, 0.7821684431180708, 0.4321472685365301, -0.12128480194602098),
1079
+ new Grad4(0.37968289875261624, 0.753341017856078, 0.37968289875261624, 0.37968289875261624),
1080
+ new Grad4(0.9982828964265062, 0.03381941603233842, 0.03381941603233842, 0.03381941603233842),
1081
+ new Grad4(0.8586508742123365, -0.044802370851755174, -0.044802370851755174, 0.508629699630796),
1082
+ new Grad4(0.8586508742123365, -0.044802370851755174, 0.508629699630796, -0.044802370851755174),
1083
+ new Grad4(0.7821684431180708, -0.12128480194602098, 0.4321472685365301, 0.4321472685365301),
1084
+ new Grad4(0.8586508742123365, 0.508629699630796, -0.044802370851755174, -0.044802370851755174),
1085
+ new Grad4(0.7821684431180708, 0.4321472685365301, -0.12128480194602098, 0.4321472685365301),
1086
+ new Grad4(0.7821684431180708, 0.4321472685365301, 0.4321472685365301, -0.12128480194602098),
1087
+ new Grad4(0.753341017856078, 0.37968289875261624, 0.37968289875261624, 0.37968289875261624)
1088
+ };
1089
+ for (Grad4 grad41 : grad4) {
1090
+ grad41.dx /= N4;
1091
+ grad41.dy /= N4;
1092
+ grad41.dz /= N4;
1093
+ grad41.dw /= N4;
1094
+ }
1095
+ for (int i = 0; i < PSIZE; i++) {
1096
+ GRADIENTS_4D[i] = grad4[i % grad4.length];
1097
+ }
1098
+ }
1099
+ }