miden-crypto/src/dsa/rpo_falcon512/math/fft.rs
src/dsa/rpo_falcon512/math/fft.rsRaw
1use super::{field::FalconFelt, polynomial::Polynomial, Inverse};
2use alloc::vec::Vec;
3use core::{
4 f64::consts::PI,
5 ops::{Add, AddAssign, Mul, MulAssign, Neg, Sub, SubAssign},
6};
7use num::{One, Zero};
8use num_complex::Complex64;
9
10#[cfg(not(feature = "std"))]
11use num::Float;
12
13/// Implements Cyclotomic FFT without bitreversing the outputs, and using precomputed powers of the
14/// 2n-th primitive root of unity.
15pub trait FastFft: Sized + Clone {
16 type Field: Add + Mul + AddAssign + MulAssign + Neg + Sub + SubAssign;
17 fn fft_inplace(&mut self);
18 fn fft(&self) -> Self {
19 let mut a = self.clone();
20 a.fft_inplace();
21 a
22 }
23
24 fn merge_fft(a: &Self, b: &Self) -> Self;
25 fn split_fft(&self) -> (Self, Self);
26
27 fn ifft_inplace(&mut self);
28 fn ifft(&self) -> Self {
29 let mut a = self.clone();
30 a.ifft_inplace();
31 a
32 }
33}
34
35pub trait CyclotomicFourier
36where
37 Self: Sized
38 + Copy
39 + One
40 + Zero
41 + Add<Output = Self>
42 + Sub<Output = Self>
43 + Mul<Output = Self>
44 + MulAssign
45 + Inverse,
46{
47 /// Gets the inverse of 2^n.
48 #[allow(dead_code)]
49 fn power_of_two_inverse(n: usize) -> Self {
50 let mut a = Self::one() + Self::one();
51 for _ in 0..n {
52 a *= a;
53 }
54 Self::inverse_or_zero(a)
55 }
56
57 /// Gets a primitive nth (with n a power of 2) root of unity.
58 #[allow(dead_code)]
59 fn primitive_root_of_unity(n: usize) -> Self;
60
61 /// Computes the integer whose n-bit binary expansion is the reverse of that of the argument.
62 fn bitreverse_index(arg: usize, n: usize) -> usize {
63 assert!(n > 0);
64 assert_eq!(n & (n - 1), 0);
65 let mut rev = 0;
66 let mut m = n >> 1;
67 let mut k = 1;
68 while m > 0 {
69 rev |= (((arg & m) != 0) as usize) * k;
70 k <<= 1;
71 m >>= 1;
72 }
73 rev
74 }
75
76 /// Computes the first n powers of the 2nth root of unity, and put them in bit-reversed order.
77 #[allow(dead_code)]
78 fn bitreversed_powers(n: usize) -> Vec<Self> {
79 let psi = Self::primitive_root_of_unity(2 * n);
80 let mut array = vec![Self::zero(); n];
81 let mut alpha = Self::one();
82 for a in array.iter_mut() {
83 *a = alpha;
84 alpha *= psi;
85 }
86 Self::bitreverse_array(&mut array);
87 array
88 }
89
90 /// Computes the first n powers of the 2nth root of unity, invert them, and put them in
91 /// bit-reversed order.
92 #[allow(dead_code)]
93 fn bitreversed_powers_inverse(n: usize) -> Vec<Self> {
94 let psi = Self::primitive_root_of_unity(2 * n).inverse_or_zero();
95 let mut array = vec![Self::zero(); n];
96 let mut alpha = Self::one();
97 for a in array.iter_mut() {
98 *a = alpha;
99 alpha *= psi;
100 }
101 Self::bitreverse_array(&mut array);
102 array
103 }
104
105 /// Reorders the given elements in the array by reversing the binary expansions of their indices.
106 fn bitreverse_array<T>(array: &mut [T]) {
107 let n = array.len();
108 for i in 0..n {
109 let j = Self::bitreverse_index(i, n);
110 if i < j {
111 array.swap(i, j);
112 }
113 }
114 }
115
116 /// Computes the evaluations of the polynomial on the roots of the polynomial X^n + 1 using a
117 /// fast Fourier transform. Algorithm 1 from https://eprint.iacr.org/2016/504.pdf.
118 ///
119 /// Arguments:
120 ///
121 /// - a : &mut [Self]
122 /// (a reference to) a mutable array of field elements which is to
123 /// be transformed under the FFT. The transformation happens in-
124 /// place.
125 ///
126 /// - psi_rev: &[Self]
127 /// (a reference to) an array of powers of psi, from 0 to n-1,
128 /// but ordered by bit-reversed index. Here psi is a primitive root
129 /// of order 2n. You can use
130 /// `Self::bitreversed_powers(psi, n)` for this purpose, but this
131 /// trait implementation is not const. For the performance benefit
132 /// you want a precompiled array, which you can get if you can get
133 /// by implementing the same method and marking it "const".
134 fn fft(a: &mut [Self], psi_rev: &[Self]) {
135 let n = a.len();
136 let mut t = n;
137 let mut m = 1;
138 while m < n {
139 t >>= 1;
140 for i in 0..m {
141 let j1 = 2 * i * t;
142 let j2 = j1 + t - 1;
143 let s = psi_rev[m + i];
144 for j in j1..=j2 {
145 let u = a[j];
146 let v = a[j + t] * s;
147 a[j] = u + v;
148 a[j + t] = u - v;
149 }
150 }
151 m <<= 1;
152 }
153 }
154
155 /// Computes the coefficients of the polynomial with the given evaluations on the roots of
156 /// X^n + 1 using an inverse fast Fourier transform.
157 /// Algorithm 2 from https://eprint.iacr.org/2016/504.pdf.
158 ///
159 /// Arguments:
160 ///
161 /// - a : &mut [Self]
162 /// (a reference to) a mutable array of field elements which is to
163 /// be transformed under the IFFT. The transformation happens in-
164 /// place.
165 ///
166 /// - psi_inv_rev: &[Self]
167 /// (a reference to) an array of powers of psi^-1, from 0 to n-1,
168 /// but ordered by bit-reversed index. Here psi is a primitive root of
169 /// order 2n. You can use
170 /// `Self::bitreversed_powers(Self::inverse_or_zero(psi), n)` for
171 /// this purpose, but this trait implementation is not const. For
172 /// the performance benefit you want a precompiled array, which you
173 /// can get if you can get by implementing the same methods and marking
174 /// them "const".
175 fn ifft(a: &mut [Self], psi_inv_rev: &[Self], ninv: Self) {
176 let n = a.len();
177 let mut t = 1;
178 let mut m = n;
179 while m > 1 {
180 let h = m / 2;
181 let mut j1 = 0;
182 for i in 0..h {
183 let j2 = j1 + t - 1;
184 let s = psi_inv_rev[h + i];
185 for j in j1..=j2 {
186 let u = a[j];
187 let v = a[j + t];
188 a[j] = u + v;
189 a[j + t] = (u - v) * s;
190 }
191 j1 += 2 * t;
192 }
193 t <<= 1;
194 m >>= 1;
195 }
196 for ai in a.iter_mut() {
197 *ai *= ninv;
198 }
199 }
200
201 fn split_fft(f: &[Self], psi_inv_rev: &[Self]) -> (Vec<Self>, Vec<Self>) {
202 let n_over_2 = f.len() / 2;
203 let mut f0 = vec![Self::zero(); n_over_2];
204 let mut f1 = vec![Self::zero(); n_over_2];
205 let two_inv = (Self::one() + Self::one()).inverse_or_zero();
206 for i in 0..n_over_2 {
207 let two_i = i * 2;
208 let two_zeta_inv = two_inv * psi_inv_rev[n_over_2 + i];
209 f0[i] = two_inv * (f[two_i] + f[two_i + 1]);
210 f1[i] = two_zeta_inv * (f[two_i] - f[two_i + 1]);
211 }
212 (f0, f1)
213 }
214
215 fn merge_fft(f0: &[Self], f1: &[Self], psi_rev: &[Self]) -> Vec<Self> {
216 let n_over_2 = f0.len();
217 let n = 2 * n_over_2;
218 let mut f = vec![Self::zero(); n];
219 for i in 0..n_over_2 {
220 let two_i = i * 2;
221 f[two_i] = f0[i] + psi_rev[n_over_2 + i] * f1[i];
222 f[two_i + 1] = f0[i] - psi_rev[n_over_2 + i] * f1[i];
223 }
224 f
225 }
226}
227
228impl CyclotomicFourier for Complex64 {
229 fn primitive_root_of_unity(n: usize) -> Self {
230 let angle = 2. * PI / (n as f64);
231 Complex64::new(f64::cos(angle), f64::sin(angle))
232 }
233
234 /// Custom implementation of CyclotomicFourier::bitreversed_powers for
235 /// better precision.
236 fn bitreversed_powers(n: usize) -> Vec<Self> {
237 let mut array = vec![Self::zero(); n];
238 let half_circle = PI;
239 for (i, a) in array.iter_mut().enumerate() {
240 let angle = (i as f64) * half_circle / (n as f64);
241 *a = Self::new(f64::cos(angle), f64::sin(angle));
242 }
243 Self::bitreverse_array(&mut array);
244 array
245 }
246
247 /// Custom implementation of CyclotomicFourier::bitreversed_powers_inverse
248 /// for better precision.
249 fn bitreversed_powers_inverse(n: usize) -> Vec<Self> {
250 let mut array = vec![Self::zero(); n];
251 let half_circle = PI;
252 for (i, a) in array.iter_mut().enumerate() {
253 let angle = (i as f64) * half_circle / (n as f64);
254 *a = Self::new(f64::cos(angle), -f64::sin(angle));
255 }
256 Self::bitreverse_array(&mut array);
257 array
258 }
259}
260
261impl FastFft for Polynomial<Complex64> {
262 type Field = Complex64;
263 fn fft_inplace(&mut self) {
264 let n = self.coefficients.len();
265 debug_assert!(
266 (1..=512).contains(&n),
267 "unsupported: n = {n} not a power of 2 or larger than 512"
268 );
269 Complex64::fft(&mut self.coefficients, &COMPLEX_BITREVERSED_POWERS);
270 }
271
272 fn ifft_inplace(&mut self) {
273 let n = self.coefficients.len();
274 debug_assert!(
275 (1..=512).contains(&n),
276 "unsupported: n = {n} not a power of 2 or larger than 512"
277 );
278 let psi_inv_rev: Vec<Complex64> =
279 COMPLEX_BITREVERSED_POWERS.iter().map(|c| Complex64::new(c.re, -c.im)).collect();
280 let ninv = Complex64::new(1.0 / (n as f64), 0.0);
281 Complex64::ifft(&mut self.coefficients, &psi_inv_rev, ninv);
282 }
283
284 fn merge_fft(a: &Self, b: &Self) -> Self {
285 let n = a.coefficients.len();
286 debug_assert!(
287 (1..=512).contains(&n),
288 "unsupported: n = {n} not a power of 2 or larger than 512"
289 );
290 Self {
291 coefficients: Self::Field::merge_fft(
292 &a.coefficients,
293 &b.coefficients,
294 &COMPLEX_BITREVERSED_POWERS,
295 ),
296 }
297 }
298
299 fn split_fft(&self) -> (Self, Self) {
300 let n = self.coefficients.len();
301 debug_assert!(
302 (1..=512).contains(&n),
303 "unsupported: n = {n} not a power of 2 or larger than 512"
304 );
305 let psi_inv_rev: Vec<Complex64> =
306 COMPLEX_BITREVERSED_POWERS.iter().map(|c| Complex64::new(c.re, -c.im)).collect();
307 let (a, b) = Self::Field::split_fft(&self.coefficients, &psi_inv_rev);
308 (Self { coefficients: a }, Self { coefficients: b })
309 }
310}
311
312impl FastFft for Polynomial<FalconFelt> {
313 type Field = FalconFelt;
314
315 fn fft_inplace(&mut self) {
316 let n = self.coefficients.len();
317 debug_assert!(
318 (1..=512).contains(&n),
319 "unsupported: n = {n} not a power of 2 or larger than 512"
320 );
321 FalconFelt::fft(&mut self.coefficients, &FELT_BITREVERSED_POWERS);
322 }
323
324 fn ifft_inplace(&mut self) {
325 let n = self.coefficients.len();
326 debug_assert!(
327 (1..=512).contains(&n),
328 "unsupported: n = {n} not a power of 2 or larger than 512"
329 );
330 let ninv = match n {
331 1 => FELT_NINV_1,
332 2 => FELT_NINV_2,
333 4 => FELT_NINV_4,
334 8 => FELT_NINV_8,
335 16 => FELT_NINV_16,
336 32 => FELT_NINV_32,
337 64 => FELT_NINV_64,
338 128 => FELT_NINV_128,
339 256 => FELT_NINV_256,
340 512 => FELT_NINV_512,
341 _ => unreachable!("vector length is not power of 2 or larger than 512"),
342 };
343 FalconFelt::ifft(&mut self.coefficients, &FELT_BITREVERSED_POWERS_INVERSE, ninv);
344 }
345
346 fn merge_fft(a: &Self, b: &Self) -> Self {
347 let n = a.coefficients.len();
348 debug_assert!(
349 (1..=512).contains(&n),
350 "unsupported: n = {n} not a power of 2 or larger than 512"
351 );
352 Self {
353 coefficients: Self::Field::merge_fft(
354 &a.coefficients,
355 &b.coefficients,
356 &FELT_BITREVERSED_POWERS,
357 ),
358 }
359 }
360
361 fn split_fft(&self) -> (Self, Self) {
362 let n = self.coefficients.len();
363 debug_assert!(
364 (1..=512).contains(&n),
365 "unsupported: n = {n} not a power of 2 or larger than 512"
366 );
367 let (a, b) = Self::Field::split_fft(&self.coefficients, &FELT_BITREVERSED_POWERS_INVERSE);
368 (Self { coefficients: a }, Self { coefficients: b })
369 }
370}
371
372#[allow(clippy::approx_constant)]
373const COMPLEX_BITREVERSED_POWERS: [Complex64; 512] = [
374 Complex64::new(1.0, 0.0),
375 Complex64::new(0.00000000000000006123233995736766, 1.0),
376 Complex64::new(0.7071067811865476, 0.7071067811865475),
377 Complex64::new(-0.7071067811865475, 0.7071067811865476),
378 Complex64::new(0.9238795325112867, 0.3826834323650898),
379 Complex64::new(-0.3826834323650897, 0.9238795325112867),
380 Complex64::new(0.38268343236508984, 0.9238795325112867),
381 Complex64::new(-0.9238795325112867, 0.3826834323650899),
382 Complex64::new(0.9807852804032304, 0.19509032201612825),
383 Complex64::new(-0.1950903220161282, 0.9807852804032304),
384 Complex64::new(0.5555702330196023, 0.8314696123025452),
385 Complex64::new(-0.8314696123025453, 0.5555702330196022),
386 Complex64::new(0.8314696123025452, 0.5555702330196022),
387 Complex64::new(-0.555570233019602, 0.8314696123025455),
388 Complex64::new(0.19509032201612833, 0.9807852804032304),
389 Complex64::new(-0.9807852804032304, 0.1950903220161286),
390 Complex64::new(0.9951847266721969, 0.0980171403295606),
391 Complex64::new(-0.09801714032956065, 0.9951847266721969),
392 Complex64::new(0.6343932841636455, 0.773010453362737),
393 Complex64::new(-0.773010453362737, 0.6343932841636455),
394 Complex64::new(0.881921264348355, 0.47139673682599764),
395 Complex64::new(-0.4713967368259977, 0.881921264348355),
396 Complex64::new(0.29028467725446233, 0.9569403357322089),
397 Complex64::new(-0.9569403357322088, 0.2902846772544624),
398 Complex64::new(0.9569403357322088, 0.29028467725446233),
399 Complex64::new(-0.29028467725446216, 0.9569403357322089),
400 Complex64::new(0.4713967368259978, 0.8819212643483549),
401 Complex64::new(-0.8819212643483549, 0.47139673682599786),
402 Complex64::new(0.773010453362737, 0.6343932841636455),
403 Complex64::new(-0.6343932841636454, 0.7730104533627371),
404 Complex64::new(0.09801714032956077, 0.9951847266721968),
405 Complex64::new(-0.9951847266721968, 0.09801714032956083),
406 Complex64::new(0.9987954562051724, 0.049067674327418015),
407 Complex64::new(-0.04906767432741801, 0.9987954562051724),
408 Complex64::new(0.6715589548470183, 0.7409511253549591),
409 Complex64::new(-0.7409511253549589, 0.6715589548470186),
410 Complex64::new(0.9039892931234433, 0.4275550934302821),
411 Complex64::new(-0.42755509343028186, 0.9039892931234434),
412 Complex64::new(0.33688985339222005, 0.9415440651830208),
413 Complex64::new(-0.9415440651830207, 0.33688985339222033),
414 Complex64::new(0.970031253194544, 0.24298017990326387),
415 Complex64::new(-0.24298017990326387, 0.970031253194544),
416 Complex64::new(0.5141027441932217, 0.8577286100002721),
417 Complex64::new(-0.857728610000272, 0.5141027441932218),
418 Complex64::new(0.8032075314806449, 0.5956993044924334),
419 Complex64::new(-0.5956993044924334, 0.8032075314806449),
420 Complex64::new(0.14673047445536175, 0.989176509964781),
421 Complex64::new(-0.989176509964781, 0.1467304744553618),
422 Complex64::new(0.989176509964781, 0.14673047445536175),
423 Complex64::new(-0.14673047445536164, 0.989176509964781),
424 Complex64::new(0.5956993044924335, 0.8032075314806448),
425 Complex64::new(-0.8032075314806448, 0.5956993044924335),
426 Complex64::new(0.8577286100002721, 0.5141027441932217),
427 Complex64::new(-0.5141027441932217, 0.8577286100002721),
428 Complex64::new(0.24298017990326398, 0.970031253194544),
429 Complex64::new(-0.970031253194544, 0.24298017990326407),
430 Complex64::new(0.9415440651830208, 0.33688985339222005),
431 Complex64::new(-0.33688985339221994, 0.9415440651830208),
432 Complex64::new(0.4275550934302822, 0.9039892931234433),
433 Complex64::new(-0.9039892931234433, 0.42755509343028203),
434 Complex64::new(0.7409511253549591, 0.6715589548470183),
435 Complex64::new(-0.6715589548470184, 0.740951125354959),
436 Complex64::new(0.049067674327418126, 0.9987954562051724),
437 Complex64::new(-0.9987954562051724, 0.049067674327417966),
438 Complex64::new(0.9996988186962042, 0.024541228522912288),
439 Complex64::new(-0.024541228522912142, 0.9996988186962042),
440 Complex64::new(0.6895405447370669, 0.7242470829514669),
441 Complex64::new(-0.7242470829514668, 0.689540544737067),
442 Complex64::new(0.9142097557035307, 0.40524131400498986),
443 Complex64::new(-0.40524131400498975, 0.9142097557035307),
444 Complex64::new(0.3598950365349883, 0.9329927988347388),
445 Complex64::new(-0.9329927988347388, 0.35989503653498833),
446 Complex64::new(0.9757021300385286, 0.2191012401568698),
447 Complex64::new(-0.21910124015686966, 0.9757021300385286),
448 Complex64::new(0.5349976198870973, 0.844853565249707),
449 Complex64::new(-0.8448535652497071, 0.5349976198870972),
450 Complex64::new(0.8175848131515837, 0.5758081914178453),
451 Complex64::new(-0.5758081914178453, 0.8175848131515837),
452 Complex64::new(0.17096188876030136, 0.9852776423889412),
453 Complex64::new(-0.9852776423889412, 0.17096188876030122),
454 Complex64::new(0.99247953459871, 0.1224106751992162),
455 Complex64::new(-0.12241067519921615, 0.99247953459871),
456 Complex64::new(0.6152315905806268, 0.7883464276266062),
457 Complex64::new(-0.7883464276266062, 0.6152315905806269),
458 Complex64::new(0.8700869911087115, 0.49289819222978404),
459 Complex64::new(-0.492898192229784, 0.8700869911087115),
460 Complex64::new(0.2667127574748984, 0.9637760657954398),
461 Complex64::new(-0.9637760657954398, 0.2667127574748985),
462 Complex64::new(0.9495281805930367, 0.3136817403988915),
463 Complex64::new(-0.3136817403988914, 0.9495281805930367),
464 Complex64::new(0.4496113296546066, 0.8932243011955153),
465 Complex64::new(-0.8932243011955152, 0.4496113296546069),
466 Complex64::new(0.7572088465064846, 0.6531728429537768),
467 Complex64::new(-0.6531728429537765, 0.7572088465064847),
468 Complex64::new(0.07356456359966745, 0.9972904566786902),
469 Complex64::new(-0.9972904566786902, 0.07356456359966773),
470 Complex64::new(0.9972904566786902, 0.07356456359966743),
471 Complex64::new(-0.07356456359966733, 0.9972904566786902),
472 Complex64::new(0.6531728429537768, 0.7572088465064845),
473 Complex64::new(-0.7572088465064846, 0.6531728429537766),
474 Complex64::new(0.8932243011955153, 0.44961132965460654),
475 Complex64::new(-0.4496113296546067, 0.8932243011955152),
476 Complex64::new(0.3136817403988916, 0.9495281805930367),
477 Complex64::new(-0.9495281805930367, 0.3136817403988914),
478 Complex64::new(0.9637760657954398, 0.26671275747489837),
479 Complex64::new(-0.2667127574748983, 0.9637760657954398),
480 Complex64::new(0.4928981922297841, 0.8700869911087113),
481 Complex64::new(-0.8700869911087113, 0.49289819222978415),
482 Complex64::new(0.7883464276266063, 0.6152315905806268),
483 Complex64::new(-0.6152315905806267, 0.7883464276266063),
484 Complex64::new(0.12241067519921628, 0.99247953459871),
485 Complex64::new(-0.99247953459871, 0.12241067519921635),
486 Complex64::new(0.9852776423889412, 0.17096188876030122),
487 Complex64::new(-0.17096188876030124, 0.9852776423889412),
488 Complex64::new(0.5758081914178453, 0.8175848131515837),
489 Complex64::new(-0.8175848131515836, 0.5758081914178454),
490 Complex64::new(0.8448535652497071, 0.5349976198870972),
491 Complex64::new(-0.534997619887097, 0.8448535652497072),
492 Complex64::new(0.21910124015686977, 0.9757021300385286),
493 Complex64::new(-0.9757021300385285, 0.21910124015687005),
494 Complex64::new(0.932992798834739, 0.3598950365349881),
495 Complex64::new(-0.35989503653498817, 0.9329927988347388),
496 Complex64::new(0.40524131400498986, 0.9142097557035307),
497 Complex64::new(-0.9142097557035307, 0.4052413140049899),
498 Complex64::new(0.724247082951467, 0.6895405447370668),
499 Complex64::new(-0.6895405447370669, 0.7242470829514669),
500 Complex64::new(0.024541228522912264, 0.9996988186962042),
501 Complex64::new(-0.9996988186962042, 0.024541228522912326),
502 Complex64::new(0.9999247018391445, 0.012271538285719925),
503 Complex64::new(-0.012271538285719823, 0.9999247018391445),
504 Complex64::new(0.6983762494089729, 0.7157308252838186),
505 Complex64::new(-0.7157308252838186, 0.6983762494089729),
506 Complex64::new(0.9191138516900578, 0.3939920400610481),
507 Complex64::new(-0.393992040061048, 0.9191138516900578),
508 Complex64::new(0.3713171939518376, 0.9285060804732155),
509 Complex64::new(-0.9285060804732155, 0.3713171939518377),
510 Complex64::new(0.9783173707196277, 0.20711137619221856),
511 Complex64::new(-0.20711137619221845, 0.9783173707196277),
512 Complex64::new(0.5453249884220465, 0.838224705554838),
513 Complex64::new(-0.8382247055548381, 0.5453249884220464),
514 Complex64::new(0.8245893027850253, 0.5657318107836131),
515 Complex64::new(-0.5657318107836132, 0.8245893027850252),
516 Complex64::new(0.18303988795514106, 0.9831054874312163),
517 Complex64::new(-0.9831054874312163, 0.1830398879551409),
518 Complex64::new(0.9939069700023561, 0.11022220729388306),
519 Complex64::new(-0.11022220729388306, 0.9939069700023561),
520 Complex64::new(0.6248594881423865, 0.7807372285720944),
521 Complex64::new(-0.7807372285720945, 0.6248594881423863),
522 Complex64::new(0.8760700941954066, 0.4821837720791227),
523 Complex64::new(-0.4821837720791227, 0.8760700941954066),
524 Complex64::new(0.27851968938505306, 0.9604305194155658),
525 Complex64::new(-0.9604305194155658, 0.27851968938505317),
526 Complex64::new(0.9533060403541939, 0.3020059493192281),
527 Complex64::new(-0.3020059493192281, 0.9533060403541939),
528 Complex64::new(0.46053871095824, 0.8876396204028539),
529 Complex64::new(-0.8876396204028538, 0.4605387109582402),
530 Complex64::new(0.765167265622459, 0.6438315428897914),
531 Complex64::new(-0.6438315428897913, 0.7651672656224591),
532 Complex64::new(0.08579731234443988, 0.996312612182778),
533 Complex64::new(-0.996312612182778, 0.08579731234444016),
534 Complex64::new(0.9981181129001492, 0.06132073630220858),
535 Complex64::new(-0.06132073630220853, 0.9981181129001492),
536 Complex64::new(0.6624157775901718, 0.7491363945234593),
537 Complex64::new(-0.7491363945234591, 0.662415777590172),
538 Complex64::new(0.8986744656939538, 0.43861623853852766),
539 Complex64::new(-0.4386162385385274, 0.8986744656939539),
540 Complex64::new(0.325310292162263, 0.9456073253805213),
541 Complex64::new(-0.9456073253805212, 0.32531029216226326),
542 Complex64::new(0.9669764710448521, 0.25486565960451457),
543 Complex64::new(-0.2548656596045145, 0.9669764710448521),
544 Complex64::new(0.5035383837257176, 0.8639728561215867),
545 Complex64::new(-0.8639728561215867, 0.5035383837257177),
546 Complex64::new(0.7958369046088836, 0.6055110414043255),
547 Complex64::new(-0.6055110414043254, 0.7958369046088836),
548 Complex64::new(0.13458070850712622, 0.99090263542778),
549 Complex64::new(-0.99090263542778, 0.13458070850712628),
550 Complex64::new(0.9873014181578584, 0.15885814333386145),
551 Complex64::new(-0.15885814333386128, 0.9873014181578584),
552 Complex64::new(0.5857978574564389, 0.8104571982525948),
553 Complex64::new(-0.8104571982525947, 0.585797857456439),
554 Complex64::new(0.8513551931052652, 0.524589682678469),
555 Complex64::new(-0.5245896826784687, 0.8513551931052652),
556 Complex64::new(0.23105810828067128, 0.9729399522055601),
557 Complex64::new(-0.9729399522055601, 0.23105810828067133),
558 Complex64::new(0.937339011912575, 0.34841868024943456),
559 Complex64::new(-0.3484186802494344, 0.937339011912575),
560 Complex64::new(0.4164295600976373, 0.9091679830905223),
561 Complex64::new(-0.9091679830905224, 0.41642956009763715),
562 Complex64::new(0.7326542716724128, 0.680600997795453),
563 Complex64::new(-0.680600997795453, 0.7326542716724128),
564 Complex64::new(0.03680722294135899, 0.9993223845883495),
565 Complex64::new(-0.9993223845883495, 0.03680722294135883),
566 Complex64::new(0.9993223845883495, 0.03680722294135883),
567 Complex64::new(-0.036807222941358866, 0.9993223845883495),
568 Complex64::new(0.6806009977954531, 0.7326542716724128),
569 Complex64::new(-0.7326542716724127, 0.6806009977954532),
570 Complex64::new(0.9091679830905224, 0.41642956009763715),
571 Complex64::new(-0.416429560097637, 0.9091679830905225),
572 Complex64::new(0.3484186802494345, 0.937339011912575),
573 Complex64::new(-0.9373390119125748, 0.3484186802494348),
574 Complex64::new(0.9729399522055602, 0.2310581082806711),
575 Complex64::new(-0.23105810828067114, 0.9729399522055602),
576 Complex64::new(0.5245896826784688, 0.8513551931052652),
577 Complex64::new(-0.8513551931052652, 0.524589682678469),
578 Complex64::new(0.8104571982525948, 0.5857978574564389),
579 Complex64::new(-0.5857978574564389, 0.8104571982525948),
580 Complex64::new(0.1588581433338614, 0.9873014181578584),
581 Complex64::new(-0.9873014181578584, 0.15885814333386147),
582 Complex64::new(0.99090263542778, 0.13458070850712617),
583 Complex64::new(-0.1345807085071261, 0.99090263542778),
584 Complex64::new(0.6055110414043255, 0.7958369046088835),
585 Complex64::new(-0.7958369046088835, 0.6055110414043257),
586 Complex64::new(0.8639728561215868, 0.5035383837257176),
587 Complex64::new(-0.5035383837257175, 0.8639728561215868),
588 Complex64::new(0.2548656596045146, 0.9669764710448521),
589 Complex64::new(-0.9669764710448521, 0.2548656596045147),
590 Complex64::new(0.9456073253805213, 0.3253102921622629),
591 Complex64::new(-0.32531029216226287, 0.9456073253805214),
592 Complex64::new(0.4386162385385277, 0.8986744656939538),
593 Complex64::new(-0.8986744656939539, 0.43861623853852755),
594 Complex64::new(0.7491363945234594, 0.6624157775901718),
595 Complex64::new(-0.6624157775901719, 0.7491363945234593),
596 Complex64::new(0.06132073630220865, 0.9981181129001492),
597 Complex64::new(-0.9981181129001492, 0.06132073630220849),
598 Complex64::new(0.996312612182778, 0.0857973123444399),
599 Complex64::new(-0.08579731234443976, 0.996312612182778),
600 Complex64::new(0.6438315428897915, 0.765167265622459),
601 Complex64::new(-0.765167265622459, 0.6438315428897914),
602 Complex64::new(0.8876396204028539, 0.46053871095824),
603 Complex64::new(-0.46053871095824006, 0.8876396204028539),
604 Complex64::new(0.3020059493192282, 0.9533060403541938),
605 Complex64::new(-0.9533060403541939, 0.30200594931922803),
606 Complex64::new(0.9604305194155658, 0.27851968938505306),
607 Complex64::new(-0.27851968938505295, 0.9604305194155659),
608 Complex64::new(0.48218377207912283, 0.8760700941954066),
609 Complex64::new(-0.8760700941954065, 0.4821837720791229),
610 Complex64::new(0.7807372285720945, 0.6248594881423863),
611 Complex64::new(-0.6248594881423862, 0.7807372285720946),
612 Complex64::new(0.11022220729388318, 0.9939069700023561),
613 Complex64::new(-0.9939069700023561, 0.11022220729388324),
614 Complex64::new(0.9831054874312163, 0.18303988795514095),
615 Complex64::new(-0.18303988795514092, 0.9831054874312163),
616 Complex64::new(0.5657318107836132, 0.8245893027850253),
617 Complex64::new(-0.8245893027850251, 0.5657318107836135),
618 Complex64::new(0.8382247055548381, 0.5453249884220465),
619 Complex64::new(-0.5453249884220462, 0.8382247055548382),
620 Complex64::new(0.20711137619221856, 0.9783173707196277),
621 Complex64::new(-0.9783173707196275, 0.20711137619221884),
622 Complex64::new(0.9285060804732156, 0.37131719395183754),
623 Complex64::new(-0.3713171939518375, 0.9285060804732156),
624 Complex64::new(0.3939920400610481, 0.9191138516900578),
625 Complex64::new(-0.9191138516900578, 0.39399204006104815),
626 Complex64::new(0.7157308252838186, 0.6983762494089729),
627 Complex64::new(-0.6983762494089728, 0.7157308252838187),
628 Complex64::new(0.012271538285719944, 0.9999247018391445),
629 Complex64::new(-0.9999247018391445, 0.012271538285720007),
630 Complex64::new(0.9999811752826011, 0.006135884649154475),
631 Complex64::new(-0.006135884649154393, 0.9999811752826011),
632 Complex64::new(0.7027547444572253, 0.7114321957452164),
633 Complex64::new(-0.7114321957452165, 0.7027547444572252),
634 Complex64::new(0.921514039342042, 0.38834504669882625),
635 Complex64::new(-0.3883450466988262, 0.921514039342042),
636 Complex64::new(0.3770074102164183, 0.9262102421383113),
637 Complex64::new(-0.9262102421383114, 0.37700741021641815),
638 Complex64::new(0.9795697656854405, 0.2011046348420919),
639 Complex64::new(-0.20110463484209182, 0.9795697656854405),
640 Complex64::new(0.5504579729366048, 0.83486287498638),
641 Complex64::new(-0.83486287498638, 0.5504579729366049),
642 Complex64::new(0.8280450452577558, 0.560661576197336),
643 Complex64::new(-0.5606615761973359, 0.8280450452577558),
644 Complex64::new(0.18906866414980628, 0.9819638691095552),
645 Complex64::new(-0.9819638691095552, 0.18906866414980636),
646 Complex64::new(0.9945645707342554, 0.10412163387205459),
647 Complex64::new(-0.1041216338720546, 0.9945645707342554),
648 Complex64::new(0.6296382389149271, 0.7768884656732324),
649 Complex64::new(-0.7768884656732323, 0.6296382389149272),
650 Complex64::new(0.8790122264286335, 0.4767992300633221),
651 Complex64::new(-0.4767992300633219, 0.8790122264286335),
652 Complex64::new(0.2844075372112718, 0.9587034748958716),
653 Complex64::new(-0.9587034748958715, 0.2844075372112721),
654 Complex64::new(0.9551411683057708, 0.2961508882436238),
655 Complex64::new(-0.29615088824362384, 0.9551411683057707),
656 Complex64::new(0.4659764957679661, 0.8847970984309378),
657 Complex64::new(-0.8847970984309378, 0.4659764957679662),
658 Complex64::new(0.7691033376455797, 0.6391244448637757),
659 Complex64::new(-0.6391244448637757, 0.7691033376455796),
660 Complex64::new(0.0919089564971327, 0.9957674144676598),
661 Complex64::new(-0.9957674144676598, 0.09190895649713275),
662 Complex64::new(0.9984755805732948, 0.055195244349689934),
663 Complex64::new(-0.05519524434968991, 0.9984755805732948),
664 Complex64::new(0.6669999223036375, 0.745057785441466),
665 Complex64::new(-0.745057785441466, 0.6669999223036376),
666 Complex64::new(0.901348847046022, 0.43309381885315196),
667 Complex64::new(-0.4330938188531519, 0.901348847046022),
668 Complex64::new(0.33110630575987643, 0.9435934581619604),
669 Complex64::new(-0.9435934581619604, 0.3311063057598765),
670 Complex64::new(0.9685220942744174, 0.24892760574572015),
671 Complex64::new(-0.24892760574572012, 0.9685220942744174),
672 Complex64::new(0.508830142543107, 0.8608669386377673),
673 Complex64::new(-0.8608669386377671, 0.5088301425431073),
674 Complex64::new(0.799537269107905, 0.600616479383869),
675 Complex64::new(-0.6006164793838688, 0.7995372691079052),
676 Complex64::new(0.14065823933284924, 0.9900582102622971),
677 Complex64::new(-0.990058210262297, 0.14065823933284954),
678 Complex64::new(0.9882575677307495, 0.15279718525844344),
679 Complex64::new(-0.1527971852584433, 0.9882575677307495),
680 Complex64::new(0.5907597018588743, 0.8068475535437992),
681 Complex64::new(-0.8068475535437993, 0.5907597018588742),
682 Complex64::new(0.8545579883654005, 0.5193559901655896),
683 Complex64::new(-0.5193559901655896, 0.8545579883654005),
684 Complex64::new(0.23702360599436734, 0.9715038909862518),
685 Complex64::new(-0.9715038909862518, 0.23702360599436717),
686 Complex64::new(0.9394592236021899, 0.3426607173119944),
687 Complex64::new(-0.34266071731199427, 0.9394592236021899),
688 Complex64::new(0.4220002707997998, 0.9065957045149153),
689 Complex64::new(-0.9065957045149153, 0.42200027079979985),
690 Complex64::new(0.7368165688773699, 0.6760927035753159),
691 Complex64::new(-0.6760927035753158, 0.73681656887737),
692 Complex64::new(0.04293825693494096, 0.9990777277526454),
693 Complex64::new(-0.9990777277526454, 0.04293825693494102),
694 Complex64::new(0.9995294175010931, 0.030674803176636626),
695 Complex64::new(-0.03067480317663646, 0.9995294175010931),
696 Complex64::new(0.6850836677727004, 0.7284643904482252),
697 Complex64::new(-0.7284643904482252, 0.6850836677727004),
698 Complex64::new(0.9117060320054299, 0.4108431710579039),
699 Complex64::new(-0.4108431710579038, 0.9117060320054299),
700 Complex64::new(0.3541635254204905, 0.9351835099389475),
701 Complex64::new(-0.9351835099389476, 0.3541635254204904),
702 Complex64::new(0.9743393827855759, 0.22508391135979283),
703 Complex64::new(-0.22508391135979267, 0.9743393827855759),
704 Complex64::new(0.5298036246862948, 0.8481203448032971),
705 Complex64::new(-0.8481203448032971, 0.5298036246862948),
706 Complex64::new(0.8140363297059484, 0.5808139580957645),
707 Complex64::new(-0.5808139580957644, 0.8140363297059485),
708 Complex64::new(0.1649131204899701, 0.9863080972445987),
709 Complex64::new(-0.9863080972445986, 0.16491312048997014),
710 Complex64::new(0.9917097536690995, 0.12849811079379317),
711 Complex64::new(-0.1284981107937931, 0.9917097536690995),
712 Complex64::new(0.6103828062763095, 0.7921065773002124),
713 Complex64::new(-0.7921065773002122, 0.6103828062763097),
714 Complex64::new(0.8670462455156926, 0.49822766697278187),
715 Complex64::new(-0.4982276669727816, 0.8670462455156928),
716 Complex64::new(0.26079411791527557, 0.9653944416976894),
717 Complex64::new(-0.9653944416976893, 0.26079411791527585),
718 Complex64::new(0.9475855910177411, 0.3195020308160157),
719 Complex64::new(-0.31950203081601564, 0.9475855910177412),
720 Complex64::new(0.44412214457042926, 0.8959662497561851),
721 Complex64::new(-0.8959662497561851, 0.4441221445704293),
722 Complex64::new(0.7531867990436125, 0.6578066932970786),
723 Complex64::new(-0.6578066932970786, 0.7531867990436125),
724 Complex64::new(0.0674439195636641, 0.9977230666441916),
725 Complex64::new(-0.9977230666441916, 0.06744391956366418),
726 Complex64::new(0.9968202992911657, 0.07968243797143013),
727 Complex64::new(-0.07968243797143001, 0.9968202992911658),
728 Complex64::new(0.6485144010221126, 0.7612023854842618),
729 Complex64::new(-0.7612023854842617, 0.6485144010221126),
730 Complex64::new(0.8904487232447579, 0.45508358712634384),
731 Complex64::new(-0.4550835871263437, 0.890448723244758),
732 Complex64::new(0.307849640041535, 0.9514350209690083),
733 Complex64::new(-0.9514350209690083, 0.30784964004153503),
734 Complex64::new(0.9621214042690416, 0.272621355449949),
735 Complex64::new(-0.27262135544994887, 0.9621214042690416),
736 Complex64::new(0.48755016014843605, 0.8730949784182901),
737 Complex64::new(-0.8730949784182901, 0.4875501601484359),
738 Complex64::new(0.7845565971555752, 0.6200572117632891),
739 Complex64::new(-0.6200572117632892, 0.7845565971555751),
740 Complex64::new(0.11631863091190488, 0.9932119492347945),
741 Complex64::new(-0.9932119492347945, 0.11631863091190471),
742 Complex64::new(0.984210092386929, 0.17700422041214875),
743 Complex64::new(-0.17700422041214875, 0.984210092386929),
744 Complex64::new(0.5707807458869674, 0.8211025149911046),
745 Complex64::new(-0.8211025149911046, 0.5707807458869673),
746 Complex64::new(0.8415549774368984, 0.5401714727298929),
747 Complex64::new(-0.5401714727298929, 0.8415549774368984),
748 Complex64::new(0.21311031991609136, 0.9770281426577544),
749 Complex64::new(-0.9770281426577544, 0.21311031991609142),
750 Complex64::new(0.9307669610789837, 0.36561299780477385),
751 Complex64::new(-0.36561299780477385, 0.9307669610789837),
752 Complex64::new(0.3996241998456468, 0.9166790599210427),
753 Complex64::new(-0.9166790599210426, 0.39962419984564707),
754 Complex64::new(0.7200025079613817, 0.693971460889654),
755 Complex64::new(-0.6939714608896538, 0.7200025079613818),
756 Complex64::new(0.01840672990580482, 0.9998305817958234),
757 Complex64::new(-0.9998305817958234, 0.0184067299058051),
758 Complex64::new(0.9998305817958234, 0.01840672990580482),
759 Complex64::new(-0.018406729905804695, 0.9998305817958234),
760 Complex64::new(0.693971460889654, 0.7200025079613817),
761 Complex64::new(-0.7200025079613817, 0.693971460889654),
762 Complex64::new(0.9166790599210427, 0.3996241998456468),
763 Complex64::new(-0.3996241998456467, 0.9166790599210427),
764 Complex64::new(0.36561299780477396, 0.9307669610789837),
765 Complex64::new(-0.9307669610789837, 0.3656129978047738),
766 Complex64::new(0.9770281426577544, 0.21311031991609136),
767 Complex64::new(-0.21311031991609125, 0.9770281426577544),
768 Complex64::new(0.540171472729893, 0.8415549774368983),
769 Complex64::new(-0.8415549774368983, 0.540171472729893),
770 Complex64::new(0.8211025149911046, 0.5707807458869673),
771 Complex64::new(-0.5707807458869671, 0.8211025149911048),
772 Complex64::new(0.17700422041214886, 0.984210092386929),
773 Complex64::new(-0.984210092386929, 0.17700422041214894),
774 Complex64::new(0.9932119492347945, 0.11631863091190475),
775 Complex64::new(-0.11631863091190475, 0.9932119492347945),
776 Complex64::new(0.6200572117632892, 0.7845565971555752),
777 Complex64::new(-0.784556597155575, 0.6200572117632894),
778 Complex64::new(0.8730949784182901, 0.487550160148436),
779 Complex64::new(-0.4875501601484357, 0.8730949784182902),
780 Complex64::new(0.272621355449949, 0.9621214042690416),
781 Complex64::new(-0.9621214042690415, 0.27262135544994925),
782 Complex64::new(0.9514350209690083, 0.30784964004153487),
783 Complex64::new(-0.30784964004153487, 0.9514350209690083),
784 Complex64::new(0.45508358712634384, 0.8904487232447579),
785 Complex64::new(-0.8904487232447579, 0.4550835871263439),
786 Complex64::new(0.7612023854842618, 0.6485144010221124),
787 Complex64::new(-0.6485144010221124, 0.7612023854842619),
788 Complex64::new(0.07968243797143013, 0.9968202992911657),
789 Complex64::new(-0.9968202992911657, 0.0796824379714302),
790 Complex64::new(0.9977230666441916, 0.06744391956366405),
791 Complex64::new(-0.06744391956366398, 0.9977230666441916),
792 Complex64::new(0.6578066932970786, 0.7531867990436124),
793 Complex64::new(-0.7531867990436124, 0.6578066932970787),
794 Complex64::new(0.8959662497561852, 0.4441221445704292),
795 Complex64::new(-0.44412214457042914, 0.8959662497561852),
796 Complex64::new(0.31950203081601575, 0.9475855910177411),
797 Complex64::new(-0.9475855910177411, 0.3195020308160158),
798 Complex64::new(0.9653944416976894, 0.2607941179152755),
799 Complex64::new(-0.26079411791527546, 0.9653944416976894),
800 Complex64::new(0.49822766697278187, 0.8670462455156926),
801 Complex64::new(-0.8670462455156928, 0.49822766697278176),
802 Complex64::new(0.7921065773002124, 0.6103828062763095),
803 Complex64::new(-0.6103828062763096, 0.7921065773002123),
804 Complex64::new(0.12849811079379322, 0.9917097536690995),
805 Complex64::new(-0.9917097536690995, 0.12849811079379309),
806 Complex64::new(0.9863080972445987, 0.16491312048996992),
807 Complex64::new(-0.16491312048996995, 0.9863080972445987),
808 Complex64::new(0.5808139580957645, 0.8140363297059483),
809 Complex64::new(-0.8140363297059484, 0.5808139580957645),
810 Complex64::new(0.8481203448032972, 0.5298036246862946),
811 Complex64::new(-0.5298036246862947, 0.8481203448032972),
812 Complex64::new(0.22508391135979278, 0.9743393827855759),
813 Complex64::new(-0.9743393827855759, 0.22508391135979283),
814 Complex64::new(0.9351835099389476, 0.35416352542049034),
815 Complex64::new(-0.3541635254204904, 0.9351835099389476),
816 Complex64::new(0.4108431710579039, 0.9117060320054299),
817 Complex64::new(-0.9117060320054298, 0.41084317105790413),
818 Complex64::new(0.7284643904482252, 0.6850836677727004),
819 Complex64::new(-0.6850836677727002, 0.7284643904482253),
820 Complex64::new(0.03067480317663658, 0.9995294175010931),
821 Complex64::new(-0.9995294175010931, 0.030674803176636865),
822 Complex64::new(0.9990777277526454, 0.04293825693494082),
823 Complex64::new(-0.042938256934940834, 0.9990777277526454),
824 Complex64::new(0.676092703575316, 0.7368165688773698),
825 Complex64::new(-0.7368165688773699, 0.6760927035753159),
826 Complex64::new(0.9065957045149153, 0.4220002707997997),
827 Complex64::new(-0.4220002707997997, 0.9065957045149153),
828 Complex64::new(0.3426607173119944, 0.9394592236021899),
829 Complex64::new(-0.9394592236021899, 0.34266071731199443),
830 Complex64::new(0.9715038909862518, 0.2370236059943672),
831 Complex64::new(-0.23702360599436723, 0.9715038909862518),
832 Complex64::new(0.5193559901655895, 0.8545579883654005),
833 Complex64::new(-0.8545579883654004, 0.5193559901655898),
834 Complex64::new(0.8068475535437993, 0.5907597018588742),
835 Complex64::new(-0.590759701858874, 0.8068475535437994),
836 Complex64::new(0.1527971852584434, 0.9882575677307495),
837 Complex64::new(-0.9882575677307495, 0.15279718525844369),
838 Complex64::new(0.9900582102622971, 0.1406582393328492),
839 Complex64::new(-0.14065823933284913, 0.9900582102622971),
840 Complex64::new(0.600616479383869, 0.799537269107905),
841 Complex64::new(-0.7995372691079051, 0.6006164793838689),
842 Complex64::new(0.8608669386377673, 0.508830142543107),
843 Complex64::new(-0.5088301425431071, 0.8608669386377672),
844 Complex64::new(0.24892760574572026, 0.9685220942744173),
845 Complex64::new(-0.9685220942744174, 0.2489276057457201),
846 Complex64::new(0.9435934581619604, 0.33110630575987643),
847 Complex64::new(-0.3311063057598763, 0.9435934581619604),
848 Complex64::new(0.433093818853152, 0.901348847046022),
849 Complex64::new(-0.9013488470460219, 0.43309381885315207),
850 Complex64::new(0.7450577854414661, 0.6669999223036375),
851 Complex64::new(-0.6669999223036374, 0.7450577854414661),
852 Complex64::new(0.05519524434969003, 0.9984755805732948),
853 Complex64::new(-0.9984755805732948, 0.055195244349690094),
854 Complex64::new(0.9957674144676598, 0.09190895649713272),
855 Complex64::new(-0.09190895649713257, 0.9957674144676598),
856 Complex64::new(0.6391244448637757, 0.7691033376455796),
857 Complex64::new(-0.7691033376455795, 0.6391244448637758),
858 Complex64::new(0.8847970984309378, 0.4659764957679662),
859 Complex64::new(-0.465976495767966, 0.8847970984309379),
860 Complex64::new(0.29615088824362396, 0.9551411683057707),
861 Complex64::new(-0.9551411683057707, 0.296150888243624),
862 Complex64::new(0.9587034748958716, 0.2844075372112719),
863 Complex64::new(-0.2844075372112717, 0.9587034748958716),
864 Complex64::new(0.47679923006332225, 0.8790122264286334),
865 Complex64::new(-0.8790122264286335, 0.4767992300633221),
866 Complex64::new(0.7768884656732324, 0.629638238914927),
867 Complex64::new(-0.6296382389149271, 0.7768884656732324),
868 Complex64::new(0.10412163387205473, 0.9945645707342554),
869 Complex64::new(-0.9945645707342554, 0.10412163387205457),
870 Complex64::new(0.9819638691095552, 0.1890686641498062),
871 Complex64::new(-0.18906866414980616, 0.9819638691095552),
872 Complex64::new(0.560661576197336, 0.8280450452577558),
873 Complex64::new(-0.8280450452577557, 0.5606615761973361),
874 Complex64::new(0.83486287498638, 0.5504579729366048),
875 Complex64::new(-0.5504579729366047, 0.8348628749863801),
876 Complex64::new(0.20110463484209196, 0.9795697656854405),
877 Complex64::new(-0.9795697656854405, 0.201104634842092),
878 Complex64::new(0.9262102421383114, 0.37700741021641826),
879 Complex64::new(-0.3770074102164182, 0.9262102421383114),
880 Complex64::new(0.3883450466988263, 0.9215140393420419),
881 Complex64::new(-0.9215140393420418, 0.3883450466988266),
882 Complex64::new(0.7114321957452164, 0.7027547444572253),
883 Complex64::new(-0.7027547444572251, 0.7114321957452167),
884 Complex64::new(0.006135884649154515, 0.9999811752826011),
885 Complex64::new(-0.9999811752826011, 0.006135884649154799),
886];
887
888const FELT_BITREVERSED_POWERS: [FalconFelt; 512] = [
889 FalconFelt::new(1),
890 FalconFelt::new(1479),
891 FalconFelt::new(8246),
892 FalconFelt::new(5146),
893 FalconFelt::new(4134),
894 FalconFelt::new(6553),
895 FalconFelt::new(11567),
896 FalconFelt::new(1305),
897 FalconFelt::new(5860),
898 FalconFelt::new(3195),
899 FalconFelt::new(1212),
900 FalconFelt::new(10643),
901 FalconFelt::new(3621),
902 FalconFelt::new(9744),
903 FalconFelt::new(8785),
904 FalconFelt::new(3542),
905 FalconFelt::new(7311),
906 FalconFelt::new(10938),
907 FalconFelt::new(8961),
908 FalconFelt::new(5777),
909 FalconFelt::new(5023),
910 FalconFelt::new(6461),
911 FalconFelt::new(5728),
912 FalconFelt::new(4591),
913 FalconFelt::new(3006),
914 FalconFelt::new(9545),
915 FalconFelt::new(563),
916 FalconFelt::new(9314),
917 FalconFelt::new(2625),
918 FalconFelt::new(11340),
919 FalconFelt::new(4821),
920 FalconFelt::new(2639),
921 FalconFelt::new(12149),
922 FalconFelt::new(1853),
923 FalconFelt::new(726),
924 FalconFelt::new(4611),
925 FalconFelt::new(11112),
926 FalconFelt::new(4255),
927 FalconFelt::new(2768),
928 FalconFelt::new(1635),
929 FalconFelt::new(2963),
930 FalconFelt::new(7393),
931 FalconFelt::new(2366),
932 FalconFelt::new(9238),
933 FalconFelt::new(9198),
934 FalconFelt::new(12208),
935 FalconFelt::new(11289),
936 FalconFelt::new(7969),
937 FalconFelt::new(8736),
938 FalconFelt::new(4805),
939 FalconFelt::new(11227),
940 FalconFelt::new(2294),
941 FalconFelt::new(9542),
942 FalconFelt::new(4846),
943 FalconFelt::new(9154),
944 FalconFelt::new(8577),
945 FalconFelt::new(9275),
946 FalconFelt::new(3201),
947 FalconFelt::new(7203),
948 FalconFelt::new(10963),
949 FalconFelt::new(1170),
950 FalconFelt::new(9970),
951 FalconFelt::new(955),
952 FalconFelt::new(11499),
953 FalconFelt::new(8340),
954 FalconFelt::new(8993),
955 FalconFelt::new(2396),
956 FalconFelt::new(4452),
957 FalconFelt::new(6915),
958 FalconFelt::new(2837),
959 FalconFelt::new(130),
960 FalconFelt::new(7935),
961 FalconFelt::new(11336),
962 FalconFelt::new(3748),
963 FalconFelt::new(6522),
964 FalconFelt::new(11462),
965 FalconFelt::new(5067),
966 FalconFelt::new(10092),
967 FalconFelt::new(12171),
968 FalconFelt::new(9813),
969 FalconFelt::new(8011),
970 FalconFelt::new(1673),
971 FalconFelt::new(5331),
972 FalconFelt::new(7300),
973 FalconFelt::new(10908),
974 FalconFelt::new(9764),
975 FalconFelt::new(4177),
976 FalconFelt::new(8705),
977 FalconFelt::new(480),
978 FalconFelt::new(9447),
979 FalconFelt::new(1022),
980 FalconFelt::new(12280),
981 FalconFelt::new(5791),
982 FalconFelt::new(11745),
983 FalconFelt::new(9821),
984 FalconFelt::new(11950),
985 FalconFelt::new(12144),
986 FalconFelt::new(6747),
987 FalconFelt::new(8652),
988 FalconFelt::new(3459),
989 FalconFelt::new(2731),
990 FalconFelt::new(8357),
991 FalconFelt::new(6378),
992 FalconFelt::new(7399),
993 FalconFelt::new(10530),
994 FalconFelt::new(3707),
995 FalconFelt::new(8595),
996 FalconFelt::new(5179),
997 FalconFelt::new(3382),
998 FalconFelt::new(355),
999 FalconFelt::new(4231),
1000 FalconFelt::new(2548),
1001 FalconFelt::new(9048),
1002 FalconFelt::new(11560),
1003 FalconFelt::new(3289),
1004 FalconFelt::new(10276),
1005 FalconFelt::new(9005),
1006 FalconFelt::new(9408),
1007 FalconFelt::new(5092),
1008 FalconFelt::new(10200),
1009 FalconFelt::new(6534),
1010 FalconFelt::new(4632),
1011 FalconFelt::new(4388),
1012 FalconFelt::new(1260),
1013 FalconFelt::new(334),
1014 FalconFelt::new(2426),
1015 FalconFelt::new(1428),
1016 FalconFelt::new(10593),
1017 FalconFelt::new(3400),
1018 FalconFelt::new(2399),
1019 FalconFelt::new(5191),
1020 FalconFelt::new(9153),
1021 FalconFelt::new(9273),
1022 FalconFelt::new(243),
1023 FalconFelt::new(3000),
1024 FalconFelt::new(671),
1025 FalconFelt::new(3531),
1026 FalconFelt::new(11813),
1027 FalconFelt::new(3985),
1028 FalconFelt::new(7384),
1029 FalconFelt::new(10111),
1030 FalconFelt::new(10745),
1031 FalconFelt::new(6730),
1032 FalconFelt::new(11869),
1033 FalconFelt::new(9042),
1034 FalconFelt::new(2686),
1035 FalconFelt::new(2969),
1036 FalconFelt::new(3978),
1037 FalconFelt::new(8779),
1038 FalconFelt::new(6957),
1039 FalconFelt::new(9424),
1040 FalconFelt::new(2370),
1041 FalconFelt::new(8241),
1042 FalconFelt::new(10040),
1043 FalconFelt::new(9405),
1044 FalconFelt::new(11136),
1045 FalconFelt::new(3186),
1046 FalconFelt::new(5407),
1047 FalconFelt::new(10163),
1048 FalconFelt::new(1630),
1049 FalconFelt::new(3271),
1050 FalconFelt::new(8232),
1051 FalconFelt::new(10600),
1052 FalconFelt::new(8925),
1053 FalconFelt::new(4414),
1054 FalconFelt::new(2847),
1055 FalconFelt::new(10115),
1056 FalconFelt::new(4372),
1057 FalconFelt::new(9509),
1058 FalconFelt::new(5195),
1059 FalconFelt::new(7394),
1060 FalconFelt::new(10805),
1061 FalconFelt::new(9984),
1062 FalconFelt::new(7247),
1063 FalconFelt::new(4053),
1064 FalconFelt::new(9644),
1065 FalconFelt::new(12176),
1066 FalconFelt::new(4919),
1067 FalconFelt::new(2166),
1068 FalconFelt::new(8374),
1069 FalconFelt::new(12129),
1070 FalconFelt::new(9140),
1071 FalconFelt::new(7852),
1072 FalconFelt::new(3),
1073 FalconFelt::new(1426),
1074 FalconFelt::new(7635),
1075 FalconFelt::new(10512),
1076 FalconFelt::new(1663),
1077 FalconFelt::new(8653),
1078 FalconFelt::new(4938),
1079 FalconFelt::new(2704),
1080 FalconFelt::new(5291),
1081 FalconFelt::new(5277),
1082 FalconFelt::new(1168),
1083 FalconFelt::new(11082),
1084 FalconFelt::new(9041),
1085 FalconFelt::new(2143),
1086 FalconFelt::new(11224),
1087 FalconFelt::new(11885),
1088 FalconFelt::new(4645),
1089 FalconFelt::new(4096),
1090 FalconFelt::new(11796),
1091 FalconFelt::new(5444),
1092 FalconFelt::new(2381),
1093 FalconFelt::new(10911),
1094 FalconFelt::new(1912),
1095 FalconFelt::new(4337),
1096 FalconFelt::new(11854),
1097 FalconFelt::new(4976),
1098 FalconFelt::new(10682),
1099 FalconFelt::new(11414),
1100 FalconFelt::new(8509),
1101 FalconFelt::new(11287),
1102 FalconFelt::new(5011),
1103 FalconFelt::new(8005),
1104 FalconFelt::new(5088),
1105 FalconFelt::new(9852),
1106 FalconFelt::new(8643),
1107 FalconFelt::new(9302),
1108 FalconFelt::new(6267),
1109 FalconFelt::new(2422),
1110 FalconFelt::new(6039),
1111 FalconFelt::new(2187),
1112 FalconFelt::new(2566),
1113 FalconFelt::new(10849),
1114 FalconFelt::new(8526),
1115 FalconFelt::new(9223),
1116 FalconFelt::new(27),
1117 FalconFelt::new(7205),
1118 FalconFelt::new(1632),
1119 FalconFelt::new(7404),
1120 FalconFelt::new(1017),
1121 FalconFelt::new(4143),
1122 FalconFelt::new(7575),
1123 FalconFelt::new(12047),
1124 FalconFelt::new(10752),
1125 FalconFelt::new(8585),
1126 FalconFelt::new(2678),
1127 FalconFelt::new(7270),
1128 FalconFelt::new(11744),
1129 FalconFelt::new(3833),
1130 FalconFelt::new(3778),
1131 FalconFelt::new(11899),
1132 FalconFelt::new(773),
1133 FalconFelt::new(5101),
1134 FalconFelt::new(11222),
1135 FalconFelt::new(9888),
1136 FalconFelt::new(442),
1137 FalconFelt::new(9377),
1138 FalconFelt::new(6591),
1139 FalconFelt::new(354),
1140 FalconFelt::new(7428),
1141 FalconFelt::new(5012),
1142 FalconFelt::new(2481),
1143 FalconFelt::new(1045),
1144 FalconFelt::new(9430),
1145 FalconFelt::new(10302),
1146 FalconFelt::new(10587),
1147 FalconFelt::new(8724),
1148 FalconFelt::new(11635),
1149 FalconFelt::new(7083),
1150 FalconFelt::new(5529),
1151 FalconFelt::new(9090),
1152 FalconFelt::new(12233),
1153 FalconFelt::new(6152),
1154 FalconFelt::new(4948),
1155 FalconFelt::new(400),
1156 FalconFelt::new(1728),
1157 FalconFelt::new(6427),
1158 FalconFelt::new(6136),
1159 FalconFelt::new(6874),
1160 FalconFelt::new(3643),
1161 FalconFelt::new(10930),
1162 FalconFelt::new(5435),
1163 FalconFelt::new(1254),
1164 FalconFelt::new(11316),
1165 FalconFelt::new(10256),
1166 FalconFelt::new(3998),
1167 FalconFelt::new(10367),
1168 FalconFelt::new(8410),
1169 FalconFelt::new(11821),
1170 FalconFelt::new(8301),
1171 FalconFelt::new(11907),
1172 FalconFelt::new(316),
1173 FalconFelt::new(6950),
1174 FalconFelt::new(5446),
1175 FalconFelt::new(6093),
1176 FalconFelt::new(3710),
1177 FalconFelt::new(7822),
1178 FalconFelt::new(4789),
1179 FalconFelt::new(7540),
1180 FalconFelt::new(5537),
1181 FalconFelt::new(3789),
1182 FalconFelt::new(147),
1183 FalconFelt::new(5456),
1184 FalconFelt::new(7840),
1185 FalconFelt::new(11239),
1186 FalconFelt::new(7753),
1187 FalconFelt::new(5445),
1188 FalconFelt::new(3860),
1189 FalconFelt::new(9606),
1190 FalconFelt::new(1190),
1191 FalconFelt::new(8471),
1192 FalconFelt::new(6118),
1193 FalconFelt::new(5925),
1194 FalconFelt::new(1018),
1195 FalconFelt::new(8775),
1196 FalconFelt::new(1041),
1197 FalconFelt::new(1973),
1198 FalconFelt::new(5574),
1199 FalconFelt::new(11011),
1200 FalconFelt::new(2344),
1201 FalconFelt::new(4075),
1202 FalconFelt::new(5315),
1203 FalconFelt::new(4324),
1204 FalconFelt::new(4916),
1205 FalconFelt::new(10120),
1206 FalconFelt::new(11767),
1207 FalconFelt::new(7210),
1208 FalconFelt::new(9027),
1209 FalconFelt::new(6281),
1210 FalconFelt::new(11404),
1211 FalconFelt::new(7280),
1212 FalconFelt::new(1956),
1213 FalconFelt::new(11286),
1214 FalconFelt::new(3532),
1215 FalconFelt::new(12048),
1216 FalconFelt::new(12231),
1217 FalconFelt::new(1105),
1218 FalconFelt::new(12147),
1219 FalconFelt::new(5681),
1220 FalconFelt::new(8812),
1221 FalconFelt::new(8851),
1222 FalconFelt::new(2844),
1223 FalconFelt::new(975),
1224 FalconFelt::new(4212),
1225 FalconFelt::new(8687),
1226 FalconFelt::new(6068),
1227 FalconFelt::new(421),
1228 FalconFelt::new(8209),
1229 FalconFelt::new(3600),
1230 FalconFelt::new(3263),
1231 FalconFelt::new(7665),
1232 FalconFelt::new(6077),
1233 FalconFelt::new(4782),
1234 FalconFelt::new(6403),
1235 FalconFelt::new(9260),
1236 FalconFelt::new(5594),
1237 FalconFelt::new(8076),
1238 FalconFelt::new(11785),
1239 FalconFelt::new(605),
1240 FalconFelt::new(9987),
1241 FalconFelt::new(5468),
1242 FalconFelt::new(1010),
1243 FalconFelt::new(787),
1244 FalconFelt::new(8807),
1245 FalconFelt::new(5241),
1246 FalconFelt::new(9369),
1247 FalconFelt::new(9162),
1248 FalconFelt::new(8120),
1249 FalconFelt::new(5057),
1250 FalconFelt::new(7591),
1251 FalconFelt::new(3445),
1252 FalconFelt::new(7509),
1253 FalconFelt::new(2049),
1254 FalconFelt::new(7377),
1255 FalconFelt::new(10968),
1256 FalconFelt::new(192),
1257 FalconFelt::new(431),
1258 FalconFelt::new(10710),
1259 FalconFelt::new(2505),
1260 FalconFelt::new(5906),
1261 FalconFelt::new(12138),
1262 FalconFelt::new(10162),
1263 FalconFelt::new(8332),
1264 FalconFelt::new(9450),
1265 FalconFelt::new(6415),
1266 FalconFelt::new(677),
1267 FalconFelt::new(6234),
1268 FalconFelt::new(3336),
1269 FalconFelt::new(12237),
1270 FalconFelt::new(9115),
1271 FalconFelt::new(1323),
1272 FalconFelt::new(2766),
1273 FalconFelt::new(3150),
1274 FalconFelt::new(1319),
1275 FalconFelt::new(8243),
1276 FalconFelt::new(709),
1277 FalconFelt::new(8049),
1278 FalconFelt::new(8719),
1279 FalconFelt::new(11454),
1280 FalconFelt::new(6224),
1281 FalconFelt::new(922),
1282 FalconFelt::new(11848),
1283 FalconFelt::new(8210),
1284 FalconFelt::new(1058),
1285 FalconFelt::new(1958),
1286 FalconFelt::new(7967),
1287 FalconFelt::new(10211),
1288 FalconFelt::new(11177),
1289 FalconFelt::new(64),
1290 FalconFelt::new(8633),
1291 FalconFelt::new(11606),
1292 FalconFelt::new(9830),
1293 FalconFelt::new(6507),
1294 FalconFelt::new(1566),
1295 FalconFelt::new(2948),
1296 FalconFelt::new(9786),
1297 FalconFelt::new(6370),
1298 FalconFelt::new(7856),
1299 FalconFelt::new(3834),
1300 FalconFelt::new(5257),
1301 FalconFelt::new(10542),
1302 FalconFelt::new(9166),
1303 FalconFelt::new(9235),
1304 FalconFelt::new(5486),
1305 FalconFelt::new(1404),
1306 FalconFelt::new(11964),
1307 FalconFelt::new(1146),
1308 FalconFelt::new(11341),
1309 FalconFelt::new(3728),
1310 FalconFelt::new(8240),
1311 FalconFelt::new(6299),
1312 FalconFelt::new(1159),
1313 FalconFelt::new(6099),
1314 FalconFelt::new(295),
1315 FalconFelt::new(5766),
1316 FalconFelt::new(11637),
1317 FalconFelt::new(8527),
1318 FalconFelt::new(2919),
1319 FalconFelt::new(8273),
1320 FalconFelt::new(8212),
1321 FalconFelt::new(3329),
1322 FalconFelt::new(7991),
1323 FalconFelt::new(9597),
1324 FalconFelt::new(168),
1325 FalconFelt::new(10695),
1326 FalconFelt::new(1962),
1327 FalconFelt::new(5106),
1328 FalconFelt::new(6328),
1329 FalconFelt::new(5297),
1330 FalconFelt::new(6170),
1331 FalconFelt::new(3956),
1332 FalconFelt::new(1360),
1333 FalconFelt::new(11089),
1334 FalconFelt::new(7105),
1335 FalconFelt::new(9734),
1336 FalconFelt::new(6167),
1337 FalconFelt::new(9407),
1338 FalconFelt::new(1805),
1339 FalconFelt::new(1954),
1340 FalconFelt::new(2051),
1341 FalconFelt::new(6142),
1342 FalconFelt::new(2447),
1343 FalconFelt::new(3963),
1344 FalconFelt::new(11713),
1345 FalconFelt::new(8855),
1346 FalconFelt::new(8760),
1347 FalconFelt::new(9381),
1348 FalconFelt::new(218),
1349 FalconFelt::new(9928),
1350 FalconFelt::new(10446),
1351 FalconFelt::new(9259),
1352 FalconFelt::new(4115),
1353 FalconFelt::new(5333),
1354 FalconFelt::new(10258),
1355 FalconFelt::new(5876),
1356 FalconFelt::new(2281),
1357 FalconFelt::new(156),
1358 FalconFelt::new(9522),
1359 FalconFelt::new(8320),
1360 FalconFelt::new(3991),
1361 FalconFelt::new(453),
1362 FalconFelt::new(6381),
1363 FalconFelt::new(11871),
1364 FalconFelt::new(8517),
1365 FalconFelt::new(4774),
1366 FalconFelt::new(6860),
1367 FalconFelt::new(4737),
1368 FalconFelt::new(1293),
1369 FalconFelt::new(10232),
1370 FalconFelt::new(5369),
1371 FalconFelt::new(9087),
1372 FalconFelt::new(7796),
1373 FalconFelt::new(350),
1374 FalconFelt::new(1512),
1375 FalconFelt::new(10474),
1376 FalconFelt::new(6906),
1377 FalconFelt::new(1489),
1378 FalconFelt::new(2500),
1379 FalconFelt::new(1583),
1380 FalconFelt::new(6347),
1381 FalconFelt::new(11026),
1382 FalconFelt::new(12240),
1383 FalconFelt::new(6374),
1384 FalconFelt::new(1483),
1385 FalconFelt::new(3009),
1386 FalconFelt::new(1693),
1387 FalconFelt::new(723),
1388 FalconFelt::new(174),
1389 FalconFelt::new(2738),
1390 FalconFelt::new(6421),
1391 FalconFelt::new(2655),
1392 FalconFelt::new(6554),
1393 FalconFelt::new(10314),
1394 FalconFelt::new(3757),
1395 FalconFelt::new(9364),
1396 FalconFelt::new(11942),
1397 FalconFelt::new(7535),
1398 FalconFelt::new(10431),
1399 FalconFelt::new(426),
1400 FalconFelt::new(3315),
1401];
1402
1403const FELT_BITREVERSED_POWERS_INVERSE: [FalconFelt; 512] = [
1404 FalconFelt::new(1),
1405 FalconFelt::new(10810),
1406 FalconFelt::new(7143),
1407 FalconFelt::new(4043),
1408 FalconFelt::new(10984),
1409 FalconFelt::new(722),
1410 FalconFelt::new(5736),
1411 FalconFelt::new(8155),
1412 FalconFelt::new(8747),
1413 FalconFelt::new(3504),
1414 FalconFelt::new(2545),
1415 FalconFelt::new(8668),
1416 FalconFelt::new(1646),
1417 FalconFelt::new(11077),
1418 FalconFelt::new(9094),
1419 FalconFelt::new(6429),
1420 FalconFelt::new(9650),
1421 FalconFelt::new(7468),
1422 FalconFelt::new(949),
1423 FalconFelt::new(9664),
1424 FalconFelt::new(2975),
1425 FalconFelt::new(11726),
1426 FalconFelt::new(2744),
1427 FalconFelt::new(9283),
1428 FalconFelt::new(7698),
1429 FalconFelt::new(6561),
1430 FalconFelt::new(5828),
1431 FalconFelt::new(7266),
1432 FalconFelt::new(6512),
1433 FalconFelt::new(3328),
1434 FalconFelt::new(1351),
1435 FalconFelt::new(4978),
1436 FalconFelt::new(790),
1437 FalconFelt::new(11334),
1438 FalconFelt::new(2319),
1439 FalconFelt::new(11119),
1440 FalconFelt::new(1326),
1441 FalconFelt::new(5086),
1442 FalconFelt::new(9088),
1443 FalconFelt::new(3014),
1444 FalconFelt::new(3712),
1445 FalconFelt::new(3135),
1446 FalconFelt::new(7443),
1447 FalconFelt::new(2747),
1448 FalconFelt::new(9995),
1449 FalconFelt::new(1062),
1450 FalconFelt::new(7484),
1451 FalconFelt::new(3553),
1452 FalconFelt::new(4320),
1453 FalconFelt::new(1000),
1454 FalconFelt::new(81),
1455 FalconFelt::new(3091),
1456 FalconFelt::new(3051),
1457 FalconFelt::new(9923),
1458 FalconFelt::new(4896),
1459 FalconFelt::new(9326),
1460 FalconFelt::new(10654),
1461 FalconFelt::new(9521),
1462 FalconFelt::new(8034),
1463 FalconFelt::new(1177),
1464 FalconFelt::new(7678),
1465 FalconFelt::new(11563),
1466 FalconFelt::new(10436),
1467 FalconFelt::new(140),
1468 FalconFelt::new(1696),
1469 FalconFelt::new(10861),
1470 FalconFelt::new(9863),
1471 FalconFelt::new(11955),
1472 FalconFelt::new(11029),
1473 FalconFelt::new(7901),
1474 FalconFelt::new(7657),
1475 FalconFelt::new(5755),
1476 FalconFelt::new(2089),
1477 FalconFelt::new(7197),
1478 FalconFelt::new(2881),
1479 FalconFelt::new(3284),
1480 FalconFelt::new(2013),
1481 FalconFelt::new(9000),
1482 FalconFelt::new(729),
1483 FalconFelt::new(3241),
1484 FalconFelt::new(9741),
1485 FalconFelt::new(8058),
1486 FalconFelt::new(11934),
1487 FalconFelt::new(8907),
1488 FalconFelt::new(7110),
1489 FalconFelt::new(3694),
1490 FalconFelt::new(8582),
1491 FalconFelt::new(1759),
1492 FalconFelt::new(4890),
1493 FalconFelt::new(5911),
1494 FalconFelt::new(3932),
1495 FalconFelt::new(9558),
1496 FalconFelt::new(8830),
1497 FalconFelt::new(3637),
1498 FalconFelt::new(5542),
1499 FalconFelt::new(145),
1500 FalconFelt::new(339),
1501 FalconFelt::new(2468),
1502 FalconFelt::new(544),
1503 FalconFelt::new(6498),
1504 FalconFelt::new(9),
1505 FalconFelt::new(11267),
1506 FalconFelt::new(2842),
1507 FalconFelt::new(11809),
1508 FalconFelt::new(3584),
1509 FalconFelt::new(8112),
1510 FalconFelt::new(2525),
1511 FalconFelt::new(1381),
1512 FalconFelt::new(4989),
1513 FalconFelt::new(6958),
1514 FalconFelt::new(10616),
1515 FalconFelt::new(4278),
1516 FalconFelt::new(2476),
1517 FalconFelt::new(118),
1518 FalconFelt::new(2197),
1519 FalconFelt::new(7222),
1520 FalconFelt::new(827),
1521 FalconFelt::new(5767),
1522 FalconFelt::new(8541),
1523 FalconFelt::new(953),
1524 FalconFelt::new(4354),
1525 FalconFelt::new(12159),
1526 FalconFelt::new(9452),
1527 FalconFelt::new(5374),
1528 FalconFelt::new(7837),
1529 FalconFelt::new(9893),
1530 FalconFelt::new(3296),
1531 FalconFelt::new(3949),
1532 FalconFelt::new(2859),
1533 FalconFelt::new(11244),
1534 FalconFelt::new(9808),
1535 FalconFelt::new(7277),
1536 FalconFelt::new(4861),
1537 FalconFelt::new(11935),
1538 FalconFelt::new(5698),
1539 FalconFelt::new(2912),
1540 FalconFelt::new(11847),
1541 FalconFelt::new(2401),
1542 FalconFelt::new(1067),
1543 FalconFelt::new(7188),
1544 FalconFelt::new(11516),
1545 FalconFelt::new(390),
1546 FalconFelt::new(8511),
1547 FalconFelt::new(8456),
1548 FalconFelt::new(545),
1549 FalconFelt::new(5019),
1550 FalconFelt::new(9611),
1551 FalconFelt::new(3704),
1552 FalconFelt::new(1537),
1553 FalconFelt::new(242),
1554 FalconFelt::new(4714),
1555 FalconFelt::new(8146),
1556 FalconFelt::new(11272),
1557 FalconFelt::new(4885),
1558 FalconFelt::new(10657),
1559 FalconFelt::new(5084),
1560 FalconFelt::new(12262),
1561 FalconFelt::new(3066),
1562 FalconFelt::new(3763),
1563 FalconFelt::new(1440),
1564 FalconFelt::new(9723),
1565 FalconFelt::new(10102),
1566 FalconFelt::new(6250),
1567 FalconFelt::new(9867),
1568 FalconFelt::new(6022),
1569 FalconFelt::new(2987),
1570 FalconFelt::new(3646),
1571 FalconFelt::new(2437),
1572 FalconFelt::new(7201),
1573 FalconFelt::new(4284),
1574 FalconFelt::new(7278),
1575 FalconFelt::new(1002),
1576 FalconFelt::new(3780),
1577 FalconFelt::new(875),
1578 FalconFelt::new(1607),
1579 FalconFelt::new(7313),
1580 FalconFelt::new(435),
1581 FalconFelt::new(7952),
1582 FalconFelt::new(10377),
1583 FalconFelt::new(1378),
1584 FalconFelt::new(9908),
1585 FalconFelt::new(6845),
1586 FalconFelt::new(493),
1587 FalconFelt::new(8193),
1588 FalconFelt::new(7644),
1589 FalconFelt::new(404),
1590 FalconFelt::new(1065),
1591 FalconFelt::new(10146),
1592 FalconFelt::new(3248),
1593 FalconFelt::new(1207),
1594 FalconFelt::new(11121),
1595 FalconFelt::new(7012),
1596 FalconFelt::new(6998),
1597 FalconFelt::new(9585),
1598 FalconFelt::new(7351),
1599 FalconFelt::new(3636),
1600 FalconFelt::new(10626),
1601 FalconFelt::new(1777),
1602 FalconFelt::new(4654),
1603 FalconFelt::new(10863),
1604 FalconFelt::new(12286),
1605 FalconFelt::new(4437),
1606 FalconFelt::new(3149),
1607 FalconFelt::new(160),
1608 FalconFelt::new(3915),
1609 FalconFelt::new(10123),
1610 FalconFelt::new(7370),
1611 FalconFelt::new(113),
1612 FalconFelt::new(2645),
1613 FalconFelt::new(8236),
1614 FalconFelt::new(5042),
1615 FalconFelt::new(2305),
1616 FalconFelt::new(1484),
1617 FalconFelt::new(4895),
1618 FalconFelt::new(7094),
1619 FalconFelt::new(2780),
1620 FalconFelt::new(7917),
1621 FalconFelt::new(2174),
1622 FalconFelt::new(9442),
1623 FalconFelt::new(7875),
1624 FalconFelt::new(3364),
1625 FalconFelt::new(1689),
1626 FalconFelt::new(4057),
1627 FalconFelt::new(9018),
1628 FalconFelt::new(10659),
1629 FalconFelt::new(2126),
1630 FalconFelt::new(6882),
1631 FalconFelt::new(9103),
1632 FalconFelt::new(1153),
1633 FalconFelt::new(2884),
1634 FalconFelt::new(2249),
1635 FalconFelt::new(4048),
1636 FalconFelt::new(9919),
1637 FalconFelt::new(2865),
1638 FalconFelt::new(5332),
1639 FalconFelt::new(3510),
1640 FalconFelt::new(8311),
1641 FalconFelt::new(9320),
1642 FalconFelt::new(9603),
1643 FalconFelt::new(3247),
1644 FalconFelt::new(420),
1645 FalconFelt::new(5559),
1646 FalconFelt::new(1544),
1647 FalconFelt::new(2178),
1648 FalconFelt::new(4905),
1649 FalconFelt::new(8304),
1650 FalconFelt::new(476),
1651 FalconFelt::new(8758),
1652 FalconFelt::new(11618),
1653 FalconFelt::new(9289),
1654 FalconFelt::new(12046),
1655 FalconFelt::new(3016),
1656 FalconFelt::new(3136),
1657 FalconFelt::new(7098),
1658 FalconFelt::new(9890),
1659 FalconFelt::new(8889),
1660 FalconFelt::new(8974),
1661 FalconFelt::new(11863),
1662 FalconFelt::new(1858),
1663 FalconFelt::new(4754),
1664 FalconFelt::new(347),
1665 FalconFelt::new(2925),
1666 FalconFelt::new(8532),
1667 FalconFelt::new(1975),
1668 FalconFelt::new(5735),
1669 FalconFelt::new(9634),
1670 FalconFelt::new(5868),
1671 FalconFelt::new(9551),
1672 FalconFelt::new(12115),
1673 FalconFelt::new(11566),
1674 FalconFelt::new(10596),
1675 FalconFelt::new(9280),
1676 FalconFelt::new(10806),
1677 FalconFelt::new(5915),
1678 FalconFelt::new(49),
1679 FalconFelt::new(1263),
1680 FalconFelt::new(5942),
1681 FalconFelt::new(10706),
1682 FalconFelt::new(9789),
1683 FalconFelt::new(10800),
1684 FalconFelt::new(5383),
1685 FalconFelt::new(1815),
1686 FalconFelt::new(10777),
1687 FalconFelt::new(11939),
1688 FalconFelt::new(4493),
1689 FalconFelt::new(3202),
1690 FalconFelt::new(6920),
1691 FalconFelt::new(2057),
1692 FalconFelt::new(10996),
1693 FalconFelt::new(7552),
1694 FalconFelt::new(5429),
1695 FalconFelt::new(7515),
1696 FalconFelt::new(3772),
1697 FalconFelt::new(418),
1698 FalconFelt::new(5908),
1699 FalconFelt::new(11836),
1700 FalconFelt::new(8298),
1701 FalconFelt::new(3969),
1702 FalconFelt::new(2767),
1703 FalconFelt::new(12133),
1704 FalconFelt::new(10008),
1705 FalconFelt::new(6413),
1706 FalconFelt::new(2031),
1707 FalconFelt::new(6956),
1708 FalconFelt::new(8174),
1709 FalconFelt::new(3030),
1710 FalconFelt::new(1843),
1711 FalconFelt::new(2361),
1712 FalconFelt::new(12071),
1713 FalconFelt::new(2908),
1714 FalconFelt::new(3529),
1715 FalconFelt::new(3434),
1716 FalconFelt::new(576),
1717 FalconFelt::new(8326),
1718 FalconFelt::new(9842),
1719 FalconFelt::new(6147),
1720 FalconFelt::new(10238),
1721 FalconFelt::new(10335),
1722 FalconFelt::new(10484),
1723 FalconFelt::new(2882),
1724 FalconFelt::new(6122),
1725 FalconFelt::new(2555),
1726 FalconFelt::new(5184),
1727 FalconFelt::new(1200),
1728 FalconFelt::new(10929),
1729 FalconFelt::new(8333),
1730 FalconFelt::new(6119),
1731 FalconFelt::new(6992),
1732 FalconFelt::new(5961),
1733 FalconFelt::new(7183),
1734 FalconFelt::new(10327),
1735 FalconFelt::new(1594),
1736 FalconFelt::new(12121),
1737 FalconFelt::new(2692),
1738 FalconFelt::new(4298),
1739 FalconFelt::new(8960),
1740 FalconFelt::new(4077),
1741 FalconFelt::new(4016),
1742 FalconFelt::new(9370),
1743 FalconFelt::new(3762),
1744 FalconFelt::new(652),
1745 FalconFelt::new(6523),
1746 FalconFelt::new(11994),
1747 FalconFelt::new(6190),
1748 FalconFelt::new(11130),
1749 FalconFelt::new(5990),
1750 FalconFelt::new(4049),
1751 FalconFelt::new(8561),
1752 FalconFelt::new(948),
1753 FalconFelt::new(11143),
1754 FalconFelt::new(325),
1755 FalconFelt::new(10885),
1756 FalconFelt::new(6803),
1757 FalconFelt::new(3054),
1758 FalconFelt::new(3123),
1759 FalconFelt::new(1747),
1760 FalconFelt::new(7032),
1761 FalconFelt::new(8455),
1762 FalconFelt::new(4433),
1763 FalconFelt::new(5919),
1764 FalconFelt::new(2503),
1765 FalconFelt::new(9341),
1766 FalconFelt::new(10723),
1767 FalconFelt::new(5782),
1768 FalconFelt::new(2459),
1769 FalconFelt::new(683),
1770 FalconFelt::new(3656),
1771 FalconFelt::new(12225),
1772 FalconFelt::new(1112),
1773 FalconFelt::new(2078),
1774 FalconFelt::new(4322),
1775 FalconFelt::new(10331),
1776 FalconFelt::new(11231),
1777 FalconFelt::new(4079),
1778 FalconFelt::new(441),
1779 FalconFelt::new(11367),
1780 FalconFelt::new(6065),
1781 FalconFelt::new(835),
1782 FalconFelt::new(3570),
1783 FalconFelt::new(4240),
1784 FalconFelt::new(11580),
1785 FalconFelt::new(4046),
1786 FalconFelt::new(10970),
1787 FalconFelt::new(9139),
1788 FalconFelt::new(9523),
1789 FalconFelt::new(10966),
1790 FalconFelt::new(3174),
1791 FalconFelt::new(52),
1792 FalconFelt::new(8953),
1793 FalconFelt::new(6055),
1794 FalconFelt::new(11612),
1795 FalconFelt::new(5874),
1796 FalconFelt::new(2839),
1797 FalconFelt::new(3957),
1798 FalconFelt::new(2127),
1799 FalconFelt::new(151),
1800 FalconFelt::new(6383),
1801 FalconFelt::new(9784),
1802 FalconFelt::new(1579),
1803 FalconFelt::new(11858),
1804 FalconFelt::new(12097),
1805 FalconFelt::new(1321),
1806 FalconFelt::new(4912),
1807 FalconFelt::new(10240),
1808 FalconFelt::new(4780),
1809 FalconFelt::new(8844),
1810 FalconFelt::new(4698),
1811 FalconFelt::new(7232),
1812 FalconFelt::new(4169),
1813 FalconFelt::new(3127),
1814 FalconFelt::new(2920),
1815 FalconFelt::new(7048),
1816 FalconFelt::new(3482),
1817 FalconFelt::new(11502),
1818 FalconFelt::new(11279),
1819 FalconFelt::new(6821),
1820 FalconFelt::new(2302),
1821 FalconFelt::new(11684),
1822 FalconFelt::new(504),
1823 FalconFelt::new(4213),
1824 FalconFelt::new(6695),
1825 FalconFelt::new(3029),
1826 FalconFelt::new(5886),
1827 FalconFelt::new(7507),
1828 FalconFelt::new(6212),
1829 FalconFelt::new(4624),
1830 FalconFelt::new(9026),
1831 FalconFelt::new(8689),
1832 FalconFelt::new(4080),
1833 FalconFelt::new(11868),
1834 FalconFelt::new(6221),
1835 FalconFelt::new(3602),
1836 FalconFelt::new(8077),
1837 FalconFelt::new(11314),
1838 FalconFelt::new(9445),
1839 FalconFelt::new(3438),
1840 FalconFelt::new(3477),
1841 FalconFelt::new(6608),
1842 FalconFelt::new(142),
1843 FalconFelt::new(11184),
1844 FalconFelt::new(58),
1845 FalconFelt::new(241),
1846 FalconFelt::new(8757),
1847 FalconFelt::new(1003),
1848 FalconFelt::new(10333),
1849 FalconFelt::new(5009),
1850 FalconFelt::new(885),
1851 FalconFelt::new(6008),
1852 FalconFelt::new(3262),
1853 FalconFelt::new(5079),
1854 FalconFelt::new(522),
1855 FalconFelt::new(2169),
1856 FalconFelt::new(7373),
1857 FalconFelt::new(7965),
1858 FalconFelt::new(6974),
1859 FalconFelt::new(8214),
1860 FalconFelt::new(9945),
1861 FalconFelt::new(1278),
1862 FalconFelt::new(6715),
1863 FalconFelt::new(10316),
1864 FalconFelt::new(11248),
1865 FalconFelt::new(3514),
1866 FalconFelt::new(11271),
1867 FalconFelt::new(6364),
1868 FalconFelt::new(6171),
1869 FalconFelt::new(3818),
1870 FalconFelt::new(11099),
1871 FalconFelt::new(2683),
1872 FalconFelt::new(8429),
1873 FalconFelt::new(6844),
1874 FalconFelt::new(4536),
1875 FalconFelt::new(1050),
1876 FalconFelt::new(4449),
1877 FalconFelt::new(6833),
1878 FalconFelt::new(12142),
1879 FalconFelt::new(8500),
1880 FalconFelt::new(6752),
1881 FalconFelt::new(4749),
1882 FalconFelt::new(7500),
1883 FalconFelt::new(4467),
1884 FalconFelt::new(8579),
1885 FalconFelt::new(6196),
1886 FalconFelt::new(6843),
1887 FalconFelt::new(5339),
1888 FalconFelt::new(11973),
1889 FalconFelt::new(382),
1890 FalconFelt::new(3988),
1891 FalconFelt::new(468),
1892 FalconFelt::new(3879),
1893 FalconFelt::new(1922),
1894 FalconFelt::new(8291),
1895 FalconFelt::new(2033),
1896 FalconFelt::new(973),
1897 FalconFelt::new(11035),
1898 FalconFelt::new(6854),
1899 FalconFelt::new(1359),
1900 FalconFelt::new(8646),
1901 FalconFelt::new(5415),
1902 FalconFelt::new(6153),
1903 FalconFelt::new(5862),
1904 FalconFelt::new(10561),
1905 FalconFelt::new(11889),
1906 FalconFelt::new(7341),
1907 FalconFelt::new(6137),
1908 FalconFelt::new(56),
1909 FalconFelt::new(3199),
1910 FalconFelt::new(6760),
1911 FalconFelt::new(5206),
1912 FalconFelt::new(654),
1913 FalconFelt::new(3565),
1914 FalconFelt::new(1702),
1915 FalconFelt::new(1987),
1916];
1917
1918const FELT_NINV_1: FalconFelt = FalconFelt::new(1);
1919const FELT_NINV_2: FalconFelt = FalconFelt::new(6145);
1920const FELT_NINV_4: FalconFelt = FalconFelt::new(9217);
1921const FELT_NINV_8: FalconFelt = FalconFelt::new(10753);
1922const FELT_NINV_16: FalconFelt = FalconFelt::new(11521);
1923const FELT_NINV_32: FalconFelt = FalconFelt::new(11905);
1924const FELT_NINV_64: FalconFelt = FalconFelt::new(12097);
1925const FELT_NINV_128: FalconFelt = FalconFelt::new(12193);
1926const FELT_NINV_256: FalconFelt = FalconFelt::new(12241);
1927const FELT_NINV_512: FalconFelt = FalconFelt::new(12265);