aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYawning Angel <yawning@schwanenlied.me>2026-02-01 02:32:09 +0900
committerYawning Angel <yawning@schwanenlied.me>2026-02-03 18:48:07 +0900
commit64ce2bdf0e84a52b4837f26062bb47643fab0bc5 (patch)
tree7e7c12adcd3c19d8e31de035578ec9d2b90c0870
parentbd0cfe4a81400a4ab8dfbcc7b63177976a4ee0b5 (diff)
core/crypto/_weierstrass: Add secp384r1
-rw-r--r--core/crypto/_fiat/field_p384r1/field.odin436
-rw-r--r--core/crypto/_fiat/field_p384r1/field64.odin1063
-rw-r--r--core/crypto/_fiat/field_scalarp384r1/field.odin239
-rw-r--r--core/crypto/_fiat/field_scalarp384r1/field64.odin1081
-rw-r--r--core/crypto/_weierstrass/fe.odin78
-rw-r--r--core/crypto/_weierstrass/point.odin32
-rw-r--r--core/crypto/_weierstrass/point_s11n_sec.odin4
-rw-r--r--core/crypto/_weierstrass/sc.odin25
-rw-r--r--core/crypto/_weierstrass/scalar_mul.odin27
-rw-r--r--core/crypto/_weierstrass/secp384r1_table.odin5969
-rw-r--r--core/crypto/_weierstrass/tools/ecc_gen_tables.odin77
-rw-r--r--tests/core/crypto/test_core_crypto_weierstrass.odin455
12 files changed, 9445 insertions, 41 deletions
diff --git a/core/crypto/_fiat/field_p384r1/field.odin b/core/crypto/_fiat/field_p384r1/field.odin
new file mode 100644
index 000000000..65affc38c
--- /dev/null
+++ b/core/crypto/_fiat/field_p384r1/field.odin
@@ -0,0 +1,436 @@
+package field_p384r1
+
+import subtle "core:crypto/_subtle"
+import "core:encoding/endian"
+import "core:math/bits"
+import "core:mem"
+
+fe_clear :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) {
+ mem.zero_explicit(arg1, size_of(Montgomery_Domain_Field_Element))
+}
+
+fe_clear_vec :: proc "contextless" (
+ arg1: []^Montgomery_Domain_Field_Element,
+) {
+ for fe in arg1 {
+ fe_clear(fe)
+ }
+}
+
+fe_from_bytes :: proc "contextless" (
+ out1: ^Montgomery_Domain_Field_Element,
+ arg1: []byte,
+ unsafe_assume_canonical := false,
+) -> bool {
+ ensure_contextless(len(arg1) == 48, "p384r1: invalid fe input buffer")
+
+ // Note: We assume the input is in big-endian.
+ tmp := Non_Montgomery_Domain_Field_Element {
+ endian.unchecked_get_u64be(arg1[40:]),
+ endian.unchecked_get_u64be(arg1[32:]),
+ endian.unchecked_get_u64be(arg1[24:]),
+ endian.unchecked_get_u64be(arg1[16:]),
+ endian.unchecked_get_u64be(arg1[8:]),
+ endian.unchecked_get_u64be(arg1[0:]),
+ }
+ defer mem.zero_explicit(&tmp, size_of(tmp))
+
+ // Check that tmp is in the the range [0, ELL).
+ if !unsafe_assume_canonical {
+ _, borrow := bits.sub_u64(ELL[0] - 1, tmp[0], 0)
+ _, borrow = bits.sub_u64(ELL[1], tmp[1], borrow)
+ _, borrow = bits.sub_u64(ELL[2], tmp[2], borrow)
+ _, borrow = bits.sub_u64(ELL[3], tmp[3], borrow)
+ _, borrow = bits.sub_u64(ELL[4], tmp[4], borrow)
+ _, borrow = bits.sub_u64(ELL[5], tmp[5], borrow)
+ if borrow != 0 {
+ return false
+ }
+ }
+
+ fe_to_montgomery(out1, &tmp)
+
+ return true
+}
+
+fe_to_bytes :: proc "contextless" (out1: []byte, arg1: ^Montgomery_Domain_Field_Element) {
+ ensure_contextless(len(out1) == 48, "p384r1: invalid fe output buffer")
+
+ tmp: Non_Montgomery_Domain_Field_Element = ---
+ fe_from_montgomery(&tmp, arg1)
+
+ // Note: Likewise, output in big-endian.
+ endian.unchecked_put_u64be(out1[40:], tmp[0])
+ endian.unchecked_put_u64be(out1[32:], tmp[1])
+ endian.unchecked_put_u64be(out1[24:], tmp[2])
+ endian.unchecked_put_u64be(out1[16:], tmp[3])
+ endian.unchecked_put_u64be(out1[8:], tmp[4])
+ endian.unchecked_put_u64be(out1[0:], tmp[5])
+
+ mem.zero_explicit(&tmp, size_of(tmp))
+}
+
+@(require_results)
+fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> int {
+ tmp: Montgomery_Domain_Field_Element = ---
+ fe_sub(&tmp, arg1, arg2)
+
+ // This will only underflow iff arg1 == arg2, and we return the borrow,
+ // which will be 1.
+ is_eq := subtle.u64_is_zero(fe_non_zero(&tmp))
+
+ fe_clear(&tmp)
+
+ return int(is_eq)
+}
+
+@(require_results)
+fe_is_odd :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> int {
+ tmp: Non_Montgomery_Domain_Field_Element = ---
+ defer mem.zero_explicit(&tmp, size_of(tmp))
+
+ fe_from_montgomery(&tmp, arg1)
+ return int(tmp[0] & 1)
+}
+
+fe_pow2k :: proc "contextless" (
+ out1: ^Montgomery_Domain_Field_Element,
+ arg1: ^Montgomery_Domain_Field_Element,
+ arg2: uint,
+) {
+ // Special case: `arg1^(2 * 0) = 1`, though this should never happen.
+ if arg2 == 0 {
+ fe_one(out1)
+ return
+ }
+
+ fe_square(out1, arg1)
+ for _ in 1 ..< arg2 {
+ fe_square(out1, out1)
+ }
+}
+
+fe_inv :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ // Inversion computation is derived from the addition chain:
+ //
+ // _10 = 2*1
+ // _11 = 1 + _10
+ // _110 = 2*_11
+ // _111 = 1 + _110
+ // _111000 = _111 << 3
+ // _111111 = _111 + _111000
+ // x12 = _111111 << 6 + _111111
+ // x24 = x12 << 12 + x12
+ // x30 = x24 << 6 + _111111
+ // x31 = 2*x30 + 1
+ // x32 = 2*x31 + 1
+ // x63 = x32 << 31 + x31
+ // x126 = x63 << 63 + x63
+ // x252 = x126 << 126 + x126
+ // x255 = x252 << 3 + _111
+ // return ((x255 << 33 + x32) << 94 + x30) << 2
+ //
+ // Operations: 383 squares 14 multiplies
+ //
+ // Generated by github.com/mmcloughlin/addchain v0.4.0.
+
+ // Note: Need to stash `arg1` (`xx`) in the case that `out1`/`arg1` alias,
+ // as `arg1` is used after `out1` has been altered.
+ t0, t1, t2, t3, xx: Montgomery_Domain_Field_Element = ---, ---, ---, ---, arg1^
+
+ // Step 1: z = x^0x2
+ fe_square(out1, arg1)
+
+ // Step 2: z = x^0x3
+ fe_mul(out1, &xx, out1)
+
+ // Step 3: z = x^0x6
+ fe_square(out1, out1)
+
+ // Step 4: t1 = x^0x7
+ fe_mul(&t1, &xx, out1)
+
+ // Step 7: z = x^0x38
+ fe_pow2k(out1, &t1, 3)
+
+ // Step 8: z = x^0x3f
+ fe_mul(out1, &t1, out1)
+
+ // Step 14: t0 = x^0xfc0
+ fe_pow2k(&t0, out1, 6)
+
+ // Step 15: t0 = x^0xfff
+ fe_mul(&t0, out1, &t0)
+
+ // Step 27: t2 = x^0xfff000
+ fe_pow2k(&t2, &t0, 12)
+
+ // Step 28: t0 = x^0xffffff
+ fe_mul(&t0, &t0, &t2)
+
+ // Step 34: t0 = x^0x3fffffc0
+ fe_pow2k(&t0, &t0, 6)
+
+ // Step 35: z = x^0x3fffffff
+ fe_mul(out1, out1, &t0)
+
+ // Step 36: t0 = x^0x7ffffffe
+ fe_square(&t0, out1)
+
+ // Step 37: t2 = x^0x7fffffff
+ fe_mul(&t2, &xx, &t0)
+
+ // Step 38: t0 = x^0xfffffffe
+ fe_square(&t0, &t2)
+
+ // Step 39: t0 = x^0xffffffff
+ fe_mul(&t0, &xx, &t0)
+
+ // Step 70: t3 = x^0x7fffffff80000000
+ fe_pow2k(&t3, &t0, 31)
+
+ // Step 71: t2 = x^0x7fffffffffffffff
+ fe_mul(&t2, &t2, &t3)
+
+ // Step 134: t3 = x^0x3fffffffffffffff8000000000000000
+ fe_pow2k(&t3, &t2, 63)
+
+ // Step 135: t2 = x^0x3fffffffffffffffffffffffffffffff
+ fe_mul(&t2, &t2, &t3)
+
+ // Step 261: t3 = x^0xfffffffffffffffffffffffffffffffc0000000000000000000000000000000
+ fe_pow2k(&t3, &t2, 126)
+
+ // Step 262: t2 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ fe_mul(&t2, &t2, &t3)
+
+ // Step 265: t2 = x^0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8
+ fe_pow2k(&t2, &t2, 3)
+
+ // Step 266: t1 = x^0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ fe_mul(&t1, &t1, &t2)
+
+ // Step 299: t1 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000
+ fe_pow2k(&t1, &t1, 33)
+
+ // Step 300: t0 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff
+ fe_mul(&t0, &t0, &t1)
+
+ // Step 394: t0 = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000000000000
+ fe_pow2k(&t0, &t0, 94)
+
+ // Step 395: z = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc0000000000000003fffffff
+ fe_mul(out1, out1, &t0)
+
+ // Step 397: z = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc
+ fe_pow2k(out1, out1, 2)
+
+ fe_mul(out1, out1, &xx)
+
+ fe_clear_vec([]^Montgomery_Domain_Field_Element{&t0, &t1, &t2, &t3, &xx})
+}
+
+@(require_results)
+fe_sqrt :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) -> int {
+ // Square root candidate can be derived via exponentiation by `(p + 1) / 4`
+ // From sage: 9850501549098619803069760025035903451269934817616361666987073351061430442874217582261816522064734500465401743278080
+ //
+ // Inversion computation is derived from the addition chain:
+ //
+ // _10 = 2*1
+ // _11 = 1 + _10
+ // _110 = 2*_11
+ // _111 = 1 + _110
+ // _111000 = _111 << 3
+ // _111111 = _111 + _111000
+ // x12 = _111111 << 6 + _111111
+ // x24 = x12 << 12 + x12
+ // x30 = x24 << 6 + _111111
+ // x31 = 2*x30 + 1
+ // x32 = 2*x31 + 1
+ // x63 = x32 << 31 + x31
+ // x126 = x63 << 63 + x63
+ // x252 = x126 << 126 + x126
+ // x255 = x252 << 3 + _111
+ // return ((x255 << 33 + x32) << 94 + x30) << 2
+ //
+ // Operations: 383 squares 14 multiplies
+ //
+ // Generated by github.com/mmcloughlin/addchain v0.4.0.
+
+ // Likewise this tramples over arg1, so stash another copy.
+ t0, t1, t2, t3, xx: Montgomery_Domain_Field_Element = ---, ---, ---, ---, arg1^
+
+ // Step 1: z = x^0x2
+ fe_square(out1, arg1)
+
+ // Step 2: z = x^0x3
+ fe_mul(out1, &xx, out1)
+
+ // Step 3: z = x^0x6
+ fe_square(out1, out1)
+
+ // Step 4: t1 = x^0x7
+ fe_mul(&t1, &xx, out1)
+
+ // Step 7: z = x^0x38
+ fe_pow2k(out1, &t1, 3)
+
+ // Step 8: z = x^0x3f
+ fe_mul(out1, &t1, out1)
+
+ // Step 14: t0 = x^0xfc0
+ fe_pow2k(&t0, out1, 6)
+
+ // Step 15: t0 = x^0xfff
+ fe_mul(&t0, out1, &t0)
+
+ // Step 27: t2 = x^0xfff000
+ fe_pow2k(&t2, &t0, 12)
+
+ // Step 28: t0 = x^0xffffff
+ fe_mul(&t0, &t0, &t2)
+
+ // Step 34: t0 = x^0x3fffffc0
+ fe_pow2k(&t0, &t0, 6)
+
+ // Step 35: z = x^0x3fffffff
+ fe_mul(out1, out1, &t0)
+
+ // Step 36: t0 = x^0x7ffffffe
+ fe_square(&t0, out1)
+
+ // Step 37: t2 = x^0x7fffffff
+ fe_mul(&t2, &xx, &t0)
+
+ // Step 38: t0 = x^0xfffffffe
+ fe_square(&t0, &t2)
+
+ // Step 39: t0 = x^0xffffffff
+ fe_mul(&t0, &xx, &t0)
+
+ // Step 70: t3 = x^0x7fffffff80000000
+ fe_pow2k(&t3, &t0, 31)
+
+ // Step 71: t2 = x^0x7fffffffffffffff
+ fe_mul(&t2, &t2, &t3)
+
+ // Step 134: t3 = x^0x3fffffffffffffff8000000000000000
+ fe_pow2k(&t3, &t2, 63)
+
+ // Step 135: t2 = x^0x3fffffffffffffffffffffffffffffff
+ fe_mul(&t2, &t2, &t3)
+
+ // Step 261: t3 = x^0xfffffffffffffffffffffffffffffffc0000000000000000000000000000000
+ fe_pow2k(&t3, &t2, 126)
+
+ // Step 262: t2 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ fe_mul(&t2, &t2, &t3)
+
+ // Step 265: t2 = x^0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8
+ fe_pow2k(&t2, &t2, 3)
+
+ // Step 266: t1 = x^0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ fe_mul(&t1, &t1, &t2)
+
+ // Step 299: t1 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000
+ fe_pow2k(&t1, &t1, 33)
+
+ // Step 300: t0 = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff
+ fe_mul(&t0, &t0, &t1)
+
+ // Step 394: t0 = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc00000000000000000000000
+ fe_pow2k(&t0, &t0, 94)
+
+ // Step 395: z = x^0x3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffc0000000000000003fffffff
+ fe_mul(out1, out1, &t0)
+
+ // Step 397: z = x^0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc
+ fe_pow2k(out1, out1, 2)
+
+ // Ensure that our candidate is actually the square root.
+ check, zero: Montgomery_Domain_Field_Element
+ fe_square(&check, out1)
+
+ is_valid := fe_equal(&check, &xx)
+ fe_cond_select(out1, &zero, out1, is_valid)
+
+ fe_clear_vec([]^Montgomery_Domain_Field_Element{&t0, &t1, &t2, &t3, &xx, &check})
+
+ return is_valid
+}
+
+fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) {
+ out1[0] = 0
+ out1[1] = 0
+ out1[2] = 0
+ out1[3] = 0
+ out1[4] = 0
+ out1[5] = 0
+}
+
+fe_set :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ x1 := arg1[0]
+ x2 := arg1[1]
+ x3 := arg1[2]
+ x4 := arg1[3]
+ x5 := arg1[4]
+ x6 := arg1[5]
+ out1[0] = x1
+ out1[1] = x2
+ out1[2] = x3
+ out1[3] = x4
+ out1[4] = x5
+ out1[5] = x6
+}
+
+@(optimization_mode = "none")
+fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Montgomery_Domain_Field_Element, arg1: int) {
+ mask := (u64(arg1) * 0xffffffffffffffff)
+ x := (out1[0] ~ out2[0]) & mask
+ x1, y1 := out1[0] ~ x, out2[0] ~ x
+ x = (out1[1] ~ out2[1]) & mask
+ x2, y2 := out1[1] ~ x, out2[1] ~ x
+ x = (out1[2] ~ out2[2]) & mask
+ x3, y3 := out1[2] ~ x, out2[2] ~ x
+ x = (out1[3] ~ out2[3]) & mask
+ x4, y4 := out1[3] ~ x, out2[3] ~ x
+ x = (out1[4] ~ out2[4]) & mask
+ x5, y5 := out1[4] ~ x, out2[4] ~ x
+ x = (out1[5] ~ out2[5]) & mask
+ x6, y6 := out1[5] ~ x, out2[5] ~ x
+ out1[0], out2[0] = x1, y1
+ out1[1], out2[1] = x2, y2
+ out1[2], out2[2] = x3, y3
+ out1[3], out2[3] = x4, y4
+ out1[4], out2[4] = x5, y5
+ out1[5], out2[5] = x6, y6
+}
+
+@(optimization_mode = "none")
+fe_cond_select :: #force_no_inline proc "contextless" (
+ out1, arg1, arg2: ^Montgomery_Domain_Field_Element,
+ arg3: int,
+) {
+ mask := (u64(arg3) * 0xffffffffffffffff)
+ x1 := ((mask & arg2[0]) | ((~mask) & arg1[0]))
+ x2 := ((mask & arg2[1]) | ((~mask) & arg1[1]))
+ x3 := ((mask & arg2[2]) | ((~mask) & arg1[2]))
+ x4 := ((mask & arg2[3]) | ((~mask) & arg1[3]))
+ x5 := ((mask & arg2[4]) | ((~mask) & arg1[4]))
+ x6 := ((mask & arg2[5]) | ((~mask) & arg1[5]))
+ out1[0] = x1
+ out1[1] = x2
+ out1[2] = x3
+ out1[3] = x4
+ out1[4] = x5
+ out1[5] = x6
+}
+
+fe_cond_negate :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element, ctrl: int) {
+ tmp1: Montgomery_Domain_Field_Element = ---
+ fe_opp(&tmp1, arg1)
+ fe_cond_select(out1, arg1, &tmp1, ctrl)
+
+ fe_clear(&tmp1)
+}
diff --git a/core/crypto/_fiat/field_p384r1/field64.odin b/core/crypto/_fiat/field_p384r1/field64.odin
new file mode 100644
index 000000000..493f24b17
--- /dev/null
+++ b/core/crypto/_fiat/field_p384r1/field64.odin
@@ -0,0 +1,1063 @@
+// The BSD 1-Clause License (BSD-1-Clause)
+//
+// Copyright (c) 2015-2020 the fiat-crypto authors (see the AUTHORS file)
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design,
+// Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package field_p384r1
+
+// The file provides arithmetic on the field Z/(2^384 - 2^128 - 2^96 + 2^32 - 1)
+// using a 64-bit Montgomery form internal representation. It is derived
+// primarily from the machine generated Golang output from the fiat-crypto
+// project.
+//
+// While the base implementation is provably correct, this implementation
+// makes no such claims as the port and optimizations were done by hand.
+//
+// WARNING: While big-endian is the common representation used for this
+// curve, the fiat output uses least-significant-limb first.
+
+import fiat "core:crypto/_fiat"
+import "core:math/bits"
+
+// ELL is the saturated representation of the field order, least-significant
+// limb first.
+ELL :: [6]u64{0xffffffff, 0xffffffff00000000, 0xfffffffffffffffe, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff}
+
+Montgomery_Domain_Field_Element :: distinct [6]u64
+Non_Montgomery_Domain_Field_Element :: distinct [6]u64
+
+fe_mul :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) {
+ x1 := arg1[1]
+ x2 := arg1[2]
+ x3 := arg1[3]
+ x4 := arg1[4]
+ x5 := arg1[5]
+ x6 := arg1[0]
+ x8, x7 := bits.mul_u64(x6, arg2[5])
+ x10, x9 := bits.mul_u64(x6, arg2[4])
+ x12, x11 := bits.mul_u64(x6, arg2[3])
+ x14, x13 := bits.mul_u64(x6, arg2[2])
+ x16, x15 := bits.mul_u64(x6, arg2[1])
+ x18, x17 := bits.mul_u64(x6, arg2[0])
+ x19, x20 := bits.add_u64(x18, x15, u64(0x0))
+ x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20)))
+ x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22)))
+ x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24)))
+ x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26)))
+ x29 := (u64(fiat.u1(x28)) + x8)
+ _, x30 := bits.mul_u64(x17, 0x100000001)
+ x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x39, x38 := bits.mul_u64(x30, 0xfffffffffffffffe)
+ x41, x40 := bits.mul_u64(x30, 0xffffffff00000000)
+ x43, x42 := bits.mul_u64(x30, 0xffffffff)
+ x44, x45 := bits.add_u64(x43, x40, u64(0x0))
+ x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45)))
+ x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47)))
+ x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49)))
+ x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51)))
+ x54 := (u64(fiat.u1(x53)) + x33)
+ _, x56 := bits.add_u64(x17, x42, u64(0x0))
+ x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56)))
+ x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58)))
+ x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60)))
+ x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62)))
+ x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64)))
+ x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66)))
+ x70, x69 := bits.mul_u64(x1, arg2[5])
+ x72, x71 := bits.mul_u64(x1, arg2[4])
+ x74, x73 := bits.mul_u64(x1, arg2[3])
+ x76, x75 := bits.mul_u64(x1, arg2[2])
+ x78, x77 := bits.mul_u64(x1, arg2[1])
+ x80, x79 := bits.mul_u64(x1, arg2[0])
+ x81, x82 := bits.add_u64(x80, x77, u64(0x0))
+ x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82)))
+ x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84)))
+ x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86)))
+ x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88)))
+ x91 := (u64(fiat.u1(x90)) + x70)
+ x92, x93 := bits.add_u64(x57, x79, u64(0x0))
+ x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93)))
+ x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95)))
+ x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97)))
+ x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99)))
+ x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101)))
+ x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103)))
+ _, x106 := bits.mul_u64(x92, 0x100000001)
+ x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x115, x114 := bits.mul_u64(x106, 0xfffffffffffffffe)
+ x117, x116 := bits.mul_u64(x106, 0xffffffff00000000)
+ x119, x118 := bits.mul_u64(x106, 0xffffffff)
+ x120, x121 := bits.add_u64(x119, x116, u64(0x0))
+ x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121)))
+ x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123)))
+ x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125)))
+ x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127)))
+ x130 := (u64(fiat.u1(x129)) + x109)
+ _, x132 := bits.add_u64(x92, x118, u64(0x0))
+ x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132)))
+ x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134)))
+ x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136)))
+ x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138)))
+ x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140)))
+ x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142)))
+ x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105)))
+ x147, x146 := bits.mul_u64(x2, arg2[5])
+ x149, x148 := bits.mul_u64(x2, arg2[4])
+ x151, x150 := bits.mul_u64(x2, arg2[3])
+ x153, x152 := bits.mul_u64(x2, arg2[2])
+ x155, x154 := bits.mul_u64(x2, arg2[1])
+ x157, x156 := bits.mul_u64(x2, arg2[0])
+ x158, x159 := bits.add_u64(x157, x154, u64(0x0))
+ x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159)))
+ x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161)))
+ x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163)))
+ x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165)))
+ x168 := (u64(fiat.u1(x167)) + x147)
+ x169, x170 := bits.add_u64(x133, x156, u64(0x0))
+ x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170)))
+ x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172)))
+ x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174)))
+ x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176)))
+ x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178)))
+ x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180)))
+ _, x183 := bits.mul_u64(x169, 0x100000001)
+ x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x192, x191 := bits.mul_u64(x183, 0xfffffffffffffffe)
+ x194, x193 := bits.mul_u64(x183, 0xffffffff00000000)
+ x196, x195 := bits.mul_u64(x183, 0xffffffff)
+ x197, x198 := bits.add_u64(x196, x193, u64(0x0))
+ x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198)))
+ x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200)))
+ x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202)))
+ x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204)))
+ x207 := (u64(fiat.u1(x206)) + x186)
+ _, x209 := bits.add_u64(x169, x195, u64(0x0))
+ x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209)))
+ x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211)))
+ x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213)))
+ x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215)))
+ x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217)))
+ x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219)))
+ x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182)))
+ x224, x223 := bits.mul_u64(x3, arg2[5])
+ x226, x225 := bits.mul_u64(x3, arg2[4])
+ x228, x227 := bits.mul_u64(x3, arg2[3])
+ x230, x229 := bits.mul_u64(x3, arg2[2])
+ x232, x231 := bits.mul_u64(x3, arg2[1])
+ x234, x233 := bits.mul_u64(x3, arg2[0])
+ x235, x236 := bits.add_u64(x234, x231, u64(0x0))
+ x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236)))
+ x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238)))
+ x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240)))
+ x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242)))
+ x245 := (u64(fiat.u1(x244)) + x224)
+ x246, x247 := bits.add_u64(x210, x233, u64(0x0))
+ x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247)))
+ x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249)))
+ x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251)))
+ x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253)))
+ x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255)))
+ x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257)))
+ _, x260 := bits.mul_u64(x246, 0x100000001)
+ x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x269, x268 := bits.mul_u64(x260, 0xfffffffffffffffe)
+ x271, x270 := bits.mul_u64(x260, 0xffffffff00000000)
+ x273, x272 := bits.mul_u64(x260, 0xffffffff)
+ x274, x275 := bits.add_u64(x273, x270, u64(0x0))
+ x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275)))
+ x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277)))
+ x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279)))
+ x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281)))
+ x284 := (u64(fiat.u1(x283)) + x263)
+ _, x286 := bits.add_u64(x246, x272, u64(0x0))
+ x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286)))
+ x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288)))
+ x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290)))
+ x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292)))
+ x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294)))
+ x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296)))
+ x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259)))
+ x301, x300 := bits.mul_u64(x4, arg2[5])
+ x303, x302 := bits.mul_u64(x4, arg2[4])
+ x305, x304 := bits.mul_u64(x4, arg2[3])
+ x307, x306 := bits.mul_u64(x4, arg2[2])
+ x309, x308 := bits.mul_u64(x4, arg2[1])
+ x311, x310 := bits.mul_u64(x4, arg2[0])
+ x312, x313 := bits.add_u64(x311, x308, u64(0x0))
+ x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313)))
+ x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315)))
+ x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317)))
+ x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319)))
+ x322 := (u64(fiat.u1(x321)) + x301)
+ x323, x324 := bits.add_u64(x287, x310, u64(0x0))
+ x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324)))
+ x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326)))
+ x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328)))
+ x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330)))
+ x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332)))
+ x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334)))
+ _, x337 := bits.mul_u64(x323, 0x100000001)
+ x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x346, x345 := bits.mul_u64(x337, 0xfffffffffffffffe)
+ x348, x347 := bits.mul_u64(x337, 0xffffffff00000000)
+ x350, x349 := bits.mul_u64(x337, 0xffffffff)
+ x351, x352 := bits.add_u64(x350, x347, u64(0x0))
+ x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352)))
+ x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354)))
+ x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356)))
+ x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358)))
+ x361 := (u64(fiat.u1(x360)) + x340)
+ _, x363 := bits.add_u64(x323, x349, u64(0x0))
+ x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363)))
+ x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365)))
+ x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367)))
+ x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369)))
+ x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371)))
+ x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373)))
+ x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336)))
+ x378, x377 := bits.mul_u64(x5, arg2[5])
+ x380, x379 := bits.mul_u64(x5, arg2[4])
+ x382, x381 := bits.mul_u64(x5, arg2[3])
+ x384, x383 := bits.mul_u64(x5, arg2[2])
+ x386, x385 := bits.mul_u64(x5, arg2[1])
+ x388, x387 := bits.mul_u64(x5, arg2[0])
+ x389, x390 := bits.add_u64(x388, x385, u64(0x0))
+ x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390)))
+ x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392)))
+ x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394)))
+ x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396)))
+ x399 := (u64(fiat.u1(x398)) + x378)
+ x400, x401 := bits.add_u64(x364, x387, u64(0x0))
+ x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401)))
+ x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403)))
+ x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405)))
+ x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407)))
+ x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409)))
+ x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411)))
+ _, x414 := bits.mul_u64(x400, 0x100000001)
+ x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x423, x422 := bits.mul_u64(x414, 0xfffffffffffffffe)
+ x425, x424 := bits.mul_u64(x414, 0xffffffff00000000)
+ x427, x426 := bits.mul_u64(x414, 0xffffffff)
+ x428, x429 := bits.add_u64(x427, x424, u64(0x0))
+ x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429)))
+ x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431)))
+ x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433)))
+ x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435)))
+ x438 := (u64(fiat.u1(x437)) + x417)
+ _, x440 := bits.add_u64(x400, x426, u64(0x0))
+ x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440)))
+ x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442)))
+ x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444)))
+ x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446)))
+ x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448)))
+ x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450)))
+ x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413)))
+ x454, x455 := bits.sub_u64(x441, 0xffffffff, u64(0x0))
+ x456, x457 := bits.sub_u64(x443, 0xffffffff00000000, u64(fiat.u1(x455)))
+ x458, x459 := bits.sub_u64(x445, 0xfffffffffffffffe, u64(fiat.u1(x457)))
+ x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459)))
+ x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461)))
+ x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463)))
+ _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465)))
+ x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441)
+ x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443)
+ x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445)
+ x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447)
+ x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449)
+ x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451)
+ out1[0] = x468
+ out1[1] = x469
+ out1[2] = x470
+ out1[3] = x471
+ out1[4] = x472
+ out1[5] = x473
+}
+
+fe_square :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ x1 := arg1[1]
+ x2 := arg1[2]
+ x3 := arg1[3]
+ x4 := arg1[4]
+ x5 := arg1[5]
+ x6 := arg1[0]
+ x8, x7 := bits.mul_u64(x6, arg1[5])
+ x10, x9 := bits.mul_u64(x6, arg1[4])
+ x12, x11 := bits.mul_u64(x6, arg1[3])
+ x14, x13 := bits.mul_u64(x6, arg1[2])
+ x16, x15 := bits.mul_u64(x6, arg1[1])
+ x18, x17 := bits.mul_u64(x6, arg1[0])
+ x19, x20 := bits.add_u64(x18, x15, u64(0x0))
+ x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20)))
+ x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22)))
+ x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24)))
+ x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26)))
+ x29 := (u64(fiat.u1(x28)) + x8)
+ _, x30 := bits.mul_u64(x17, 0x100000001)
+ x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x39, x38 := bits.mul_u64(x30, 0xfffffffffffffffe)
+ x41, x40 := bits.mul_u64(x30, 0xffffffff00000000)
+ x43, x42 := bits.mul_u64(x30, 0xffffffff)
+ x44, x45 := bits.add_u64(x43, x40, u64(0x0))
+ x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45)))
+ x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47)))
+ x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49)))
+ x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51)))
+ x54 := (u64(fiat.u1(x53)) + x33)
+ _, x56 := bits.add_u64(x17, x42, u64(0x0))
+ x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56)))
+ x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58)))
+ x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60)))
+ x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62)))
+ x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64)))
+ x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66)))
+ x70, x69 := bits.mul_u64(x1, arg1[5])
+ x72, x71 := bits.mul_u64(x1, arg1[4])
+ x74, x73 := bits.mul_u64(x1, arg1[3])
+ x76, x75 := bits.mul_u64(x1, arg1[2])
+ x78, x77 := bits.mul_u64(x1, arg1[1])
+ x80, x79 := bits.mul_u64(x1, arg1[0])
+ x81, x82 := bits.add_u64(x80, x77, u64(0x0))
+ x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82)))
+ x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84)))
+ x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86)))
+ x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88)))
+ x91 := (u64(fiat.u1(x90)) + x70)
+ x92, x93 := bits.add_u64(x57, x79, u64(0x0))
+ x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93)))
+ x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95)))
+ x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97)))
+ x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99)))
+ x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101)))
+ x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103)))
+ _, x106 := bits.mul_u64(x92, 0x100000001)
+ x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x115, x114 := bits.mul_u64(x106, 0xfffffffffffffffe)
+ x117, x116 := bits.mul_u64(x106, 0xffffffff00000000)
+ x119, x118 := bits.mul_u64(x106, 0xffffffff)
+ x120, x121 := bits.add_u64(x119, x116, u64(0x0))
+ x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121)))
+ x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123)))
+ x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125)))
+ x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127)))
+ x130 := (u64(fiat.u1(x129)) + x109)
+ _, x132 := bits.add_u64(x92, x118, u64(0x0))
+ x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132)))
+ x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134)))
+ x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136)))
+ x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138)))
+ x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140)))
+ x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142)))
+ x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105)))
+ x147, x146 := bits.mul_u64(x2, arg1[5])
+ x149, x148 := bits.mul_u64(x2, arg1[4])
+ x151, x150 := bits.mul_u64(x2, arg1[3])
+ x153, x152 := bits.mul_u64(x2, arg1[2])
+ x155, x154 := bits.mul_u64(x2, arg1[1])
+ x157, x156 := bits.mul_u64(x2, arg1[0])
+ x158, x159 := bits.add_u64(x157, x154, u64(0x0))
+ x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159)))
+ x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161)))
+ x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163)))
+ x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165)))
+ x168 := (u64(fiat.u1(x167)) + x147)
+ x169, x170 := bits.add_u64(x133, x156, u64(0x0))
+ x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170)))
+ x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172)))
+ x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174)))
+ x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176)))
+ x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178)))
+ x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180)))
+ _, x183 := bits.mul_u64(x169, 0x100000001)
+ x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x192, x191 := bits.mul_u64(x183, 0xfffffffffffffffe)
+ x194, x193 := bits.mul_u64(x183, 0xffffffff00000000)
+ x196, x195 := bits.mul_u64(x183, 0xffffffff)
+ x197, x198 := bits.add_u64(x196, x193, u64(0x0))
+ x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198)))
+ x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200)))
+ x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202)))
+ x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204)))
+ x207 := (u64(fiat.u1(x206)) + x186)
+ _, x209 := bits.add_u64(x169, x195, u64(0x0))
+ x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209)))
+ x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211)))
+ x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213)))
+ x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215)))
+ x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217)))
+ x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219)))
+ x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182)))
+ x224, x223 := bits.mul_u64(x3, arg1[5])
+ x226, x225 := bits.mul_u64(x3, arg1[4])
+ x228, x227 := bits.mul_u64(x3, arg1[3])
+ x230, x229 := bits.mul_u64(x3, arg1[2])
+ x232, x231 := bits.mul_u64(x3, arg1[1])
+ x234, x233 := bits.mul_u64(x3, arg1[0])
+ x235, x236 := bits.add_u64(x234, x231, u64(0x0))
+ x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236)))
+ x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238)))
+ x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240)))
+ x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242)))
+ x245 := (u64(fiat.u1(x244)) + x224)
+ x246, x247 := bits.add_u64(x210, x233, u64(0x0))
+ x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247)))
+ x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249)))
+ x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251)))
+ x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253)))
+ x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255)))
+ x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257)))
+ _, x260 := bits.mul_u64(x246, 0x100000001)
+ x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x269, x268 := bits.mul_u64(x260, 0xfffffffffffffffe)
+ x271, x270 := bits.mul_u64(x260, 0xffffffff00000000)
+ x273, x272 := bits.mul_u64(x260, 0xffffffff)
+ x274, x275 := bits.add_u64(x273, x270, u64(0x0))
+ x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275)))
+ x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277)))
+ x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279)))
+ x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281)))
+ x284 := (u64(fiat.u1(x283)) + x263)
+ _, x286 := bits.add_u64(x246, x272, u64(0x0))
+ x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286)))
+ x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288)))
+ x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290)))
+ x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292)))
+ x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294)))
+ x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296)))
+ x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259)))
+ x301, x300 := bits.mul_u64(x4, arg1[5])
+ x303, x302 := bits.mul_u64(x4, arg1[4])
+ x305, x304 := bits.mul_u64(x4, arg1[3])
+ x307, x306 := bits.mul_u64(x4, arg1[2])
+ x309, x308 := bits.mul_u64(x4, arg1[1])
+ x311, x310 := bits.mul_u64(x4, arg1[0])
+ x312, x313 := bits.add_u64(x311, x308, u64(0x0))
+ x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313)))
+ x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315)))
+ x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317)))
+ x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319)))
+ x322 := (u64(fiat.u1(x321)) + x301)
+ x323, x324 := bits.add_u64(x287, x310, u64(0x0))
+ x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324)))
+ x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326)))
+ x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328)))
+ x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330)))
+ x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332)))
+ x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334)))
+ _, x337 := bits.mul_u64(x323, 0x100000001)
+ x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x346, x345 := bits.mul_u64(x337, 0xfffffffffffffffe)
+ x348, x347 := bits.mul_u64(x337, 0xffffffff00000000)
+ x350, x349 := bits.mul_u64(x337, 0xffffffff)
+ x351, x352 := bits.add_u64(x350, x347, u64(0x0))
+ x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352)))
+ x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354)))
+ x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356)))
+ x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358)))
+ x361 := (u64(fiat.u1(x360)) + x340)
+ _, x363 := bits.add_u64(x323, x349, u64(0x0))
+ x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363)))
+ x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365)))
+ x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367)))
+ x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369)))
+ x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371)))
+ x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373)))
+ x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336)))
+ x378, x377 := bits.mul_u64(x5, arg1[5])
+ x380, x379 := bits.mul_u64(x5, arg1[4])
+ x382, x381 := bits.mul_u64(x5, arg1[3])
+ x384, x383 := bits.mul_u64(x5, arg1[2])
+ x386, x385 := bits.mul_u64(x5, arg1[1])
+ x388, x387 := bits.mul_u64(x5, arg1[0])
+ x389, x390 := bits.add_u64(x388, x385, u64(0x0))
+ x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390)))
+ x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392)))
+ x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394)))
+ x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396)))
+ x399 := (u64(fiat.u1(x398)) + x378)
+ x400, x401 := bits.add_u64(x364, x387, u64(0x0))
+ x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401)))
+ x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403)))
+ x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405)))
+ x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407)))
+ x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409)))
+ x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411)))
+ _, x414 := bits.mul_u64(x400, 0x100000001)
+ x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x423, x422 := bits.mul_u64(x414, 0xfffffffffffffffe)
+ x425, x424 := bits.mul_u64(x414, 0xffffffff00000000)
+ x427, x426 := bits.mul_u64(x414, 0xffffffff)
+ x428, x429 := bits.add_u64(x427, x424, u64(0x0))
+ x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429)))
+ x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431)))
+ x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433)))
+ x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435)))
+ x438 := (u64(fiat.u1(x437)) + x417)
+ _, x440 := bits.add_u64(x400, x426, u64(0x0))
+ x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440)))
+ x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442)))
+ x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444)))
+ x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446)))
+ x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448)))
+ x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450)))
+ x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413)))
+ x454, x455 := bits.sub_u64(x441, 0xffffffff, u64(0x0))
+ x456, x457 := bits.sub_u64(x443, 0xffffffff00000000, u64(fiat.u1(x455)))
+ x458, x459 := bits.sub_u64(x445, 0xfffffffffffffffe, u64(fiat.u1(x457)))
+ x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459)))
+ x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461)))
+ x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463)))
+ _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465)))
+ x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441)
+ x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443)
+ x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445)
+ x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447)
+ x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449)
+ x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451)
+ out1[0] = x468
+ out1[1] = x469
+ out1[2] = x470
+ out1[3] = x471
+ out1[4] = x472
+ out1[5] = x473
+}
+
+fe_add :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) {
+ x1, x2 := bits.add_u64(arg1[0], arg2[0], u64(0x0))
+ x3, x4 := bits.add_u64(arg1[1], arg2[1], u64(fiat.u1(x2)))
+ x5, x6 := bits.add_u64(arg1[2], arg2[2], u64(fiat.u1(x4)))
+ x7, x8 := bits.add_u64(arg1[3], arg2[3], u64(fiat.u1(x6)))
+ x9, x10 := bits.add_u64(arg1[4], arg2[4], u64(fiat.u1(x8)))
+ x11, x12 := bits.add_u64(arg1[5], arg2[5], u64(fiat.u1(x10)))
+ x13, x14 := bits.sub_u64(x1, 0xffffffff, u64(0x0))
+ x15, x16 := bits.sub_u64(x3, 0xffffffff00000000, u64(fiat.u1(x14)))
+ x17, x18 := bits.sub_u64(x5, 0xfffffffffffffffe, u64(fiat.u1(x16)))
+ x19, x20 := bits.sub_u64(x7, 0xffffffffffffffff, u64(fiat.u1(x18)))
+ x21, x22 := bits.sub_u64(x9, 0xffffffffffffffff, u64(fiat.u1(x20)))
+ x23, x24 := bits.sub_u64(x11, 0xffffffffffffffff, u64(fiat.u1(x22)))
+ _, x26 := bits.sub_u64(u64(fiat.u1(x12)), u64(0x0), u64(fiat.u1(x24)))
+ x27 := fiat.cmovznz_u64(fiat.u1(x26), x13, x1)
+ x28 := fiat.cmovznz_u64(fiat.u1(x26), x15, x3)
+ x29 := fiat.cmovznz_u64(fiat.u1(x26), x17, x5)
+ x30 := fiat.cmovznz_u64(fiat.u1(x26), x19, x7)
+ x31 := fiat.cmovznz_u64(fiat.u1(x26), x21, x9)
+ x32 := fiat.cmovznz_u64(fiat.u1(x26), x23, x11)
+ out1[0] = x27
+ out1[1] = x28
+ out1[2] = x29
+ out1[3] = x30
+ out1[4] = x31
+ out1[5] = x32
+}
+
+fe_sub :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) {
+ x1, x2 := bits.sub_u64(arg1[0], arg2[0], u64(0x0))
+ x3, x4 := bits.sub_u64(arg1[1], arg2[1], u64(fiat.u1(x2)))
+ x5, x6 := bits.sub_u64(arg1[2], arg2[2], u64(fiat.u1(x4)))
+ x7, x8 := bits.sub_u64(arg1[3], arg2[3], u64(fiat.u1(x6)))
+ x9, x10 := bits.sub_u64(arg1[4], arg2[4], u64(fiat.u1(x8)))
+ x11, x12 := bits.sub_u64(arg1[5], arg2[5], u64(fiat.u1(x10)))
+ x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff)
+ x14, x15 := bits.add_u64(x1, (x13 & 0xffffffff), u64(0x0))
+ x16, x17 := bits.add_u64(x3, (x13 & 0xffffffff00000000), u64(fiat.u1(x15)))
+ x18, x19 := bits.add_u64(x5, (x13 & 0xfffffffffffffffe), u64(fiat.u1(x17)))
+ x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19)))
+ x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21)))
+ x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23)))
+ out1[0] = x14
+ out1[1] = x16
+ out1[2] = x18
+ out1[3] = x20
+ out1[4] = x22
+ out1[5] = x24
+}
+
+fe_opp :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ x1, x2 := bits.sub_u64(u64(0x0), arg1[0], u64(0x0))
+ x3, x4 := bits.sub_u64(u64(0x0), arg1[1], u64(fiat.u1(x2)))
+ x5, x6 := bits.sub_u64(u64(0x0), arg1[2], u64(fiat.u1(x4)))
+ x7, x8 := bits.sub_u64(u64(0x0), arg1[3], u64(fiat.u1(x6)))
+ x9, x10 := bits.sub_u64(u64(0x0), arg1[4], u64(fiat.u1(x8)))
+ x11, x12 := bits.sub_u64(u64(0x0), arg1[5], u64(fiat.u1(x10)))
+ x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff)
+ x14, x15 := bits.add_u64(x1, (x13 & 0xffffffff), u64(0x0))
+ x16, x17 := bits.add_u64(x3, (x13 & 0xffffffff00000000), u64(fiat.u1(x15)))
+ x18, x19 := bits.add_u64(x5, (x13 & 0xfffffffffffffffe), u64(fiat.u1(x17)))
+ x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19)))
+ x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21)))
+ x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23)))
+ out1[0] = x14
+ out1[1] = x16
+ out1[2] = x18
+ out1[3] = x20
+ out1[4] = x22
+ out1[5] = x24
+}
+
+fe_one :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) {
+ out1[0] = 0xffffffff00000001
+ out1[1] = 0xffffffff
+ out1[2] = 0x1
+ out1[3] = 0x0
+ out1[4] = 0x0
+ out1[5] = 0x0
+}
+
+fe_non_zero :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> u64 {
+ return (arg1[0] | (arg1[1] | (arg1[2] | (arg1[3] | (arg1[4] | arg1[5])))))
+}
+
+@(optimization_mode = "none")
+fe_cond_assign :: #force_no_inline proc "contextless" (
+ out1, arg1: ^Montgomery_Domain_Field_Element,
+ arg2: int,
+) {
+ x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0])
+ x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1])
+ x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2])
+ x4 := fiat.cmovznz_u64(fiat.u1(arg2), out1[3], arg1[3])
+ x5 := fiat.cmovznz_u64(fiat.u1(arg2), out1[4], arg1[4])
+ x6 := fiat.cmovznz_u64(fiat.u1(arg2), out1[5], arg1[5])
+ out1[0] = x1
+ out1[1] = x2
+ out1[2] = x3
+ out1[3] = x4
+ out1[4] = x5
+ out1[5] = x6
+}
+
+fe_from_montgomery :: proc "contextless" (
+ out1: ^Non_Montgomery_Domain_Field_Element,
+ arg1: ^Montgomery_Domain_Field_Element,
+) {
+ x1 := arg1[0]
+ _, x2 := bits.mul_u64(x1, 0x100000001)
+ x5, x4 := bits.mul_u64(x2, 0xffffffffffffffff)
+ x7, x6 := bits.mul_u64(x2, 0xffffffffffffffff)
+ x9, x8 := bits.mul_u64(x2, 0xffffffffffffffff)
+ x11, x10 := bits.mul_u64(x2, 0xfffffffffffffffe)
+ x13, x12 := bits.mul_u64(x2, 0xffffffff00000000)
+ x15, x14 := bits.mul_u64(x2, 0xffffffff)
+ x16, x17 := bits.add_u64(x15, x12, u64(0x0))
+ x18, x19 := bits.add_u64(x13, x10, u64(fiat.u1(x17)))
+ x20, x21 := bits.add_u64(x11, x8, u64(fiat.u1(x19)))
+ x22, x23 := bits.add_u64(x9, x6, u64(fiat.u1(x21)))
+ x24, x25 := bits.add_u64(x7, x4, u64(fiat.u1(x23)))
+ _, x27 := bits.add_u64(x1, x14, u64(0x0))
+ x28, x29 := bits.add_u64(u64(0x0), x16, u64(fiat.u1(x27)))
+ x30, x31 := bits.add_u64(u64(0x0), x18, u64(fiat.u1(x29)))
+ x32, x33 := bits.add_u64(u64(0x0), x20, u64(fiat.u1(x31)))
+ x34, x35 := bits.add_u64(u64(0x0), x22, u64(fiat.u1(x33)))
+ x36, x37 := bits.add_u64(u64(0x0), x24, u64(fiat.u1(x35)))
+ x38, x39 := bits.add_u64(u64(0x0), (u64(fiat.u1(x25)) + x5), u64(fiat.u1(x37)))
+ x40, x41 := bits.add_u64(x28, arg1[1], u64(0x0))
+ x42, x43 := bits.add_u64(x30, u64(0x0), u64(fiat.u1(x41)))
+ x44, x45 := bits.add_u64(x32, u64(0x0), u64(fiat.u1(x43)))
+ x46, x47 := bits.add_u64(x34, u64(0x0), u64(fiat.u1(x45)))
+ x48, x49 := bits.add_u64(x36, u64(0x0), u64(fiat.u1(x47)))
+ x50, x51 := bits.add_u64(x38, u64(0x0), u64(fiat.u1(x49)))
+ _, x52 := bits.mul_u64(x40, 0x100000001)
+ x55, x54 := bits.mul_u64(x52, 0xffffffffffffffff)
+ x57, x56 := bits.mul_u64(x52, 0xffffffffffffffff)
+ x59, x58 := bits.mul_u64(x52, 0xffffffffffffffff)
+ x61, x60 := bits.mul_u64(x52, 0xfffffffffffffffe)
+ x63, x62 := bits.mul_u64(x52, 0xffffffff00000000)
+ x65, x64 := bits.mul_u64(x52, 0xffffffff)
+ x66, x67 := bits.add_u64(x65, x62, u64(0x0))
+ x68, x69 := bits.add_u64(x63, x60, u64(fiat.u1(x67)))
+ x70, x71 := bits.add_u64(x61, x58, u64(fiat.u1(x69)))
+ x72, x73 := bits.add_u64(x59, x56, u64(fiat.u1(x71)))
+ x74, x75 := bits.add_u64(x57, x54, u64(fiat.u1(x73)))
+ _, x77 := bits.add_u64(x40, x64, u64(0x0))
+ x78, x79 := bits.add_u64(x42, x66, u64(fiat.u1(x77)))
+ x80, x81 := bits.add_u64(x44, x68, u64(fiat.u1(x79)))
+ x82, x83 := bits.add_u64(x46, x70, u64(fiat.u1(x81)))
+ x84, x85 := bits.add_u64(x48, x72, u64(fiat.u1(x83)))
+ x86, x87 := bits.add_u64(x50, x74, u64(fiat.u1(x85)))
+ x88, x89 := bits.add_u64((u64(fiat.u1(x51)) + u64(fiat.u1(x39))), (u64(fiat.u1(x75)) + x55), u64(fiat.u1(x87)))
+ x90, x91 := bits.add_u64(x78, arg1[2], u64(0x0))
+ x92, x93 := bits.add_u64(x80, u64(0x0), u64(fiat.u1(x91)))
+ x94, x95 := bits.add_u64(x82, u64(0x0), u64(fiat.u1(x93)))
+ x96, x97 := bits.add_u64(x84, u64(0x0), u64(fiat.u1(x95)))
+ x98, x99 := bits.add_u64(x86, u64(0x0), u64(fiat.u1(x97)))
+ x100, x101 := bits.add_u64(x88, u64(0x0), u64(fiat.u1(x99)))
+ _, x102 := bits.mul_u64(x90, 0x100000001)
+ x105, x104 := bits.mul_u64(x102, 0xffffffffffffffff)
+ x107, x106 := bits.mul_u64(x102, 0xffffffffffffffff)
+ x109, x108 := bits.mul_u64(x102, 0xffffffffffffffff)
+ x111, x110 := bits.mul_u64(x102, 0xfffffffffffffffe)
+ x113, x112 := bits.mul_u64(x102, 0xffffffff00000000)
+ x115, x114 := bits.mul_u64(x102, 0xffffffff)
+ x116, x117 := bits.add_u64(x115, x112, u64(0x0))
+ x118, x119 := bits.add_u64(x113, x110, u64(fiat.u1(x117)))
+ x120, x121 := bits.add_u64(x111, x108, u64(fiat.u1(x119)))
+ x122, x123 := bits.add_u64(x109, x106, u64(fiat.u1(x121)))
+ x124, x125 := bits.add_u64(x107, x104, u64(fiat.u1(x123)))
+ _, x127 := bits.add_u64(x90, x114, u64(0x0))
+ x128, x129 := bits.add_u64(x92, x116, u64(fiat.u1(x127)))
+ x130, x131 := bits.add_u64(x94, x118, u64(fiat.u1(x129)))
+ x132, x133 := bits.add_u64(x96, x120, u64(fiat.u1(x131)))
+ x134, x135 := bits.add_u64(x98, x122, u64(fiat.u1(x133)))
+ x136, x137 := bits.add_u64(x100, x124, u64(fiat.u1(x135)))
+ x138, x139 := bits.add_u64((u64(fiat.u1(x101)) + u64(fiat.u1(x89))), (u64(fiat.u1(x125)) + x105), u64(fiat.u1(x137)))
+ x140, x141 := bits.add_u64(x128, arg1[3], u64(0x0))
+ x142, x143 := bits.add_u64(x130, u64(0x0), u64(fiat.u1(x141)))
+ x144, x145 := bits.add_u64(x132, u64(0x0), u64(fiat.u1(x143)))
+ x146, x147 := bits.add_u64(x134, u64(0x0), u64(fiat.u1(x145)))
+ x148, x149 := bits.add_u64(x136, u64(0x0), u64(fiat.u1(x147)))
+ x150, x151 := bits.add_u64(x138, u64(0x0), u64(fiat.u1(x149)))
+ _, x152 := bits.mul_u64(x140, 0x100000001)
+ x155, x154 := bits.mul_u64(x152, 0xffffffffffffffff)
+ x157, x156 := bits.mul_u64(x152, 0xffffffffffffffff)
+ x159, x158 := bits.mul_u64(x152, 0xffffffffffffffff)
+ x161, x160 := bits.mul_u64(x152, 0xfffffffffffffffe)
+ x163, x162 := bits.mul_u64(x152, 0xffffffff00000000)
+ x165, x164 := bits.mul_u64(x152, 0xffffffff)
+ x166, x167 := bits.add_u64(x165, x162, u64(0x0))
+ x168, x169 := bits.add_u64(x163, x160, u64(fiat.u1(x167)))
+ x170, x171 := bits.add_u64(x161, x158, u64(fiat.u1(x169)))
+ x172, x173 := bits.add_u64(x159, x156, u64(fiat.u1(x171)))
+ x174, x175 := bits.add_u64(x157, x154, u64(fiat.u1(x173)))
+ _, x177 := bits.add_u64(x140, x164, u64(0x0))
+ x178, x179 := bits.add_u64(x142, x166, u64(fiat.u1(x177)))
+ x180, x181 := bits.add_u64(x144, x168, u64(fiat.u1(x179)))
+ x182, x183 := bits.add_u64(x146, x170, u64(fiat.u1(x181)))
+ x184, x185 := bits.add_u64(x148, x172, u64(fiat.u1(x183)))
+ x186, x187 := bits.add_u64(x150, x174, u64(fiat.u1(x185)))
+ x188, x189 := bits.add_u64((u64(fiat.u1(x151)) + u64(fiat.u1(x139))), (u64(fiat.u1(x175)) + x155), u64(fiat.u1(x187)))
+ x190, x191 := bits.add_u64(x178, arg1[4], u64(0x0))
+ x192, x193 := bits.add_u64(x180, u64(0x0), u64(fiat.u1(x191)))
+ x194, x195 := bits.add_u64(x182, u64(0x0), u64(fiat.u1(x193)))
+ x196, x197 := bits.add_u64(x184, u64(0x0), u64(fiat.u1(x195)))
+ x198, x199 := bits.add_u64(x186, u64(0x0), u64(fiat.u1(x197)))
+ x200, x201 := bits.add_u64(x188, u64(0x0), u64(fiat.u1(x199)))
+ _, x202 := bits.mul_u64(x190, 0x100000001)
+ x205, x204 := bits.mul_u64(x202, 0xffffffffffffffff)
+ x207, x206 := bits.mul_u64(x202, 0xffffffffffffffff)
+ x209, x208 := bits.mul_u64(x202, 0xffffffffffffffff)
+ x211, x210 := bits.mul_u64(x202, 0xfffffffffffffffe)
+ x213, x212 := bits.mul_u64(x202, 0xffffffff00000000)
+ x215, x214 := bits.mul_u64(x202, 0xffffffff)
+ x216, x217 := bits.add_u64(x215, x212, u64(0x0))
+ x218, x219 := bits.add_u64(x213, x210, u64(fiat.u1(x217)))
+ x220, x221 := bits.add_u64(x211, x208, u64(fiat.u1(x219)))
+ x222, x223 := bits.add_u64(x209, x206, u64(fiat.u1(x221)))
+ x224, x225 := bits.add_u64(x207, x204, u64(fiat.u1(x223)))
+ _, x227 := bits.add_u64(x190, x214, u64(0x0))
+ x228, x229 := bits.add_u64(x192, x216, u64(fiat.u1(x227)))
+ x230, x231 := bits.add_u64(x194, x218, u64(fiat.u1(x229)))
+ x232, x233 := bits.add_u64(x196, x220, u64(fiat.u1(x231)))
+ x234, x235 := bits.add_u64(x198, x222, u64(fiat.u1(x233)))
+ x236, x237 := bits.add_u64(x200, x224, u64(fiat.u1(x235)))
+ x238, x239 := bits.add_u64((u64(fiat.u1(x201)) + u64(fiat.u1(x189))), (u64(fiat.u1(x225)) + x205), u64(fiat.u1(x237)))
+ x240, x241 := bits.add_u64(x228, arg1[5], u64(0x0))
+ x242, x243 := bits.add_u64(x230, u64(0x0), u64(fiat.u1(x241)))
+ x244, x245 := bits.add_u64(x232, u64(0x0), u64(fiat.u1(x243)))
+ x246, x247 := bits.add_u64(x234, u64(0x0), u64(fiat.u1(x245)))
+ x248, x249 := bits.add_u64(x236, u64(0x0), u64(fiat.u1(x247)))
+ x250, x251 := bits.add_u64(x238, u64(0x0), u64(fiat.u1(x249)))
+ _, x252 := bits.mul_u64(x240, 0x100000001)
+ x255, x254 := bits.mul_u64(x252, 0xffffffffffffffff)
+ x257, x256 := bits.mul_u64(x252, 0xffffffffffffffff)
+ x259, x258 := bits.mul_u64(x252, 0xffffffffffffffff)
+ x261, x260 := bits.mul_u64(x252, 0xfffffffffffffffe)
+ x263, x262 := bits.mul_u64(x252, 0xffffffff00000000)
+ x265, x264 := bits.mul_u64(x252, 0xffffffff)
+ x266, x267 := bits.add_u64(x265, x262, u64(0x0))
+ x268, x269 := bits.add_u64(x263, x260, u64(fiat.u1(x267)))
+ x270, x271 := bits.add_u64(x261, x258, u64(fiat.u1(x269)))
+ x272, x273 := bits.add_u64(x259, x256, u64(fiat.u1(x271)))
+ x274, x275 := bits.add_u64(x257, x254, u64(fiat.u1(x273)))
+ _, x277 := bits.add_u64(x240, x264, u64(0x0))
+ x278, x279 := bits.add_u64(x242, x266, u64(fiat.u1(x277)))
+ x280, x281 := bits.add_u64(x244, x268, u64(fiat.u1(x279)))
+ x282, x283 := bits.add_u64(x246, x270, u64(fiat.u1(x281)))
+ x284, x285 := bits.add_u64(x248, x272, u64(fiat.u1(x283)))
+ x286, x287 := bits.add_u64(x250, x274, u64(fiat.u1(x285)))
+ x288, x289 := bits.add_u64((u64(fiat.u1(x251)) + u64(fiat.u1(x239))), (u64(fiat.u1(x275)) + x255), u64(fiat.u1(x287)))
+ x290, x291 := bits.sub_u64(x278, 0xffffffff, u64(0x0))
+ x292, x293 := bits.sub_u64(x280, 0xffffffff00000000, u64(fiat.u1(x291)))
+ x294, x295 := bits.sub_u64(x282, 0xfffffffffffffffe, u64(fiat.u1(x293)))
+ x296, x297 := bits.sub_u64(x284, 0xffffffffffffffff, u64(fiat.u1(x295)))
+ x298, x299 := bits.sub_u64(x286, 0xffffffffffffffff, u64(fiat.u1(x297)))
+ x300, x301 := bits.sub_u64(x288, 0xffffffffffffffff, u64(fiat.u1(x299)))
+ _, x303 := bits.sub_u64(u64(fiat.u1(x289)), u64(0x0), u64(fiat.u1(x301)))
+ x304 := fiat.cmovznz_u64(fiat.u1(x303), x290, x278)
+ x305 := fiat.cmovznz_u64(fiat.u1(x303), x292, x280)
+ x306 := fiat.cmovznz_u64(fiat.u1(x303), x294, x282)
+ x307 := fiat.cmovznz_u64(fiat.u1(x303), x296, x284)
+ x308 := fiat.cmovznz_u64(fiat.u1(x303), x298, x286)
+ x309 := fiat.cmovznz_u64(fiat.u1(x303), x300, x288)
+ out1[0] = x304
+ out1[1] = x305
+ out1[2] = x306
+ out1[3] = x307
+ out1[4] = x308
+ out1[5] = x309
+}
+
+fe_to_montgomery :: proc "contextless" (
+ out1: ^Montgomery_Domain_Field_Element,
+ arg1: ^Non_Montgomery_Domain_Field_Element,
+) {
+ x1 := arg1[1]
+ x2 := arg1[2]
+ x3 := arg1[3]
+ x4 := arg1[4]
+ x5 := arg1[5]
+ x6 := arg1[0]
+ x8, x7 := bits.mul_u64(x6, 0x200000000)
+ x10, x9 := bits.mul_u64(x6, 0xfffffffe00000000)
+ x12, x11 := bits.mul_u64(x6, 0x200000000)
+ x14, x13 := bits.mul_u64(x6, 0xfffffffe00000001)
+ x15, x16 := bits.add_u64(x14, x11, u64(0x0))
+ x17, x18 := bits.add_u64(x12, x9, u64(fiat.u1(x16)))
+ x19, x20 := bits.add_u64(x10, x7, u64(fiat.u1(x18)))
+ x21, x22 := bits.add_u64(x8, x6, u64(fiat.u1(x20)))
+ _, x23 := bits.mul_u64(x13, 0x100000001)
+ x26, x25 := bits.mul_u64(x23, 0xffffffffffffffff)
+ x28, x27 := bits.mul_u64(x23, 0xffffffffffffffff)
+ x30, x29 := bits.mul_u64(x23, 0xffffffffffffffff)
+ x32, x31 := bits.mul_u64(x23, 0xfffffffffffffffe)
+ x34, x33 := bits.mul_u64(x23, 0xffffffff00000000)
+ x36, x35 := bits.mul_u64(x23, 0xffffffff)
+ x37, x38 := bits.add_u64(x36, x33, u64(0x0))
+ x39, x40 := bits.add_u64(x34, x31, u64(fiat.u1(x38)))
+ x41, x42 := bits.add_u64(x32, x29, u64(fiat.u1(x40)))
+ x43, x44 := bits.add_u64(x30, x27, u64(fiat.u1(x42)))
+ x45, x46 := bits.add_u64(x28, x25, u64(fiat.u1(x44)))
+ _, x48 := bits.add_u64(x13, x35, u64(0x0))
+ x49, x50 := bits.add_u64(x15, x37, u64(fiat.u1(x48)))
+ x51, x52 := bits.add_u64(x17, x39, u64(fiat.u1(x50)))
+ x53, x54 := bits.add_u64(x19, x41, u64(fiat.u1(x52)))
+ x55, x56 := bits.add_u64(x21, x43, u64(fiat.u1(x54)))
+ x57, x58 := bits.add_u64(u64(fiat.u1(x22)), x45, u64(fiat.u1(x56)))
+ x59, x60 := bits.add_u64(u64(0x0), (u64(fiat.u1(x46)) + x26), u64(fiat.u1(x58)))
+ x62, x61 := bits.mul_u64(x1, 0x200000000)
+ x64, x63 := bits.mul_u64(x1, 0xfffffffe00000000)
+ x66, x65 := bits.mul_u64(x1, 0x200000000)
+ x68, x67 := bits.mul_u64(x1, 0xfffffffe00000001)
+ x69, x70 := bits.add_u64(x68, x65, u64(0x0))
+ x71, x72 := bits.add_u64(x66, x63, u64(fiat.u1(x70)))
+ x73, x74 := bits.add_u64(x64, x61, u64(fiat.u1(x72)))
+ x75, x76 := bits.add_u64(x62, x1, u64(fiat.u1(x74)))
+ x77, x78 := bits.add_u64(x49, x67, u64(0x0))
+ x79, x80 := bits.add_u64(x51, x69, u64(fiat.u1(x78)))
+ x81, x82 := bits.add_u64(x53, x71, u64(fiat.u1(x80)))
+ x83, x84 := bits.add_u64(x55, x73, u64(fiat.u1(x82)))
+ x85, x86 := bits.add_u64(x57, x75, u64(fiat.u1(x84)))
+ x87, x88 := bits.add_u64(x59, u64(fiat.u1(x76)), u64(fiat.u1(x86)))
+ _, x89 := bits.mul_u64(x77, 0x100000001)
+ x92, x91 := bits.mul_u64(x89, 0xffffffffffffffff)
+ x94, x93 := bits.mul_u64(x89, 0xffffffffffffffff)
+ x96, x95 := bits.mul_u64(x89, 0xffffffffffffffff)
+ x98, x97 := bits.mul_u64(x89, 0xfffffffffffffffe)
+ x100, x99 := bits.mul_u64(x89, 0xffffffff00000000)
+ x102, x101 := bits.mul_u64(x89, 0xffffffff)
+ x103, x104 := bits.add_u64(x102, x99, u64(0x0))
+ x105, x106 := bits.add_u64(x100, x97, u64(fiat.u1(x104)))
+ x107, x108 := bits.add_u64(x98, x95, u64(fiat.u1(x106)))
+ x109, x110 := bits.add_u64(x96, x93, u64(fiat.u1(x108)))
+ x111, x112 := bits.add_u64(x94, x91, u64(fiat.u1(x110)))
+ _, x114 := bits.add_u64(x77, x101, u64(0x0))
+ x115, x116 := bits.add_u64(x79, x103, u64(fiat.u1(x114)))
+ x117, x118 := bits.add_u64(x81, x105, u64(fiat.u1(x116)))
+ x119, x120 := bits.add_u64(x83, x107, u64(fiat.u1(x118)))
+ x121, x122 := bits.add_u64(x85, x109, u64(fiat.u1(x120)))
+ x123, x124 := bits.add_u64(x87, x111, u64(fiat.u1(x122)))
+ x125, x126 := bits.add_u64((u64(fiat.u1(x88)) + u64(fiat.u1(x60))), (u64(fiat.u1(x112)) + x92), u64(fiat.u1(x124)))
+ x128, x127 := bits.mul_u64(x2, 0x200000000)
+ x130, x129 := bits.mul_u64(x2, 0xfffffffe00000000)
+ x132, x131 := bits.mul_u64(x2, 0x200000000)
+ x134, x133 := bits.mul_u64(x2, 0xfffffffe00000001)
+ x135, x136 := bits.add_u64(x134, x131, u64(0x0))
+ x137, x138 := bits.add_u64(x132, x129, u64(fiat.u1(x136)))
+ x139, x140 := bits.add_u64(x130, x127, u64(fiat.u1(x138)))
+ x141, x142 := bits.add_u64(x128, x2, u64(fiat.u1(x140)))
+ x143, x144 := bits.add_u64(x115, x133, u64(0x0))
+ x145, x146 := bits.add_u64(x117, x135, u64(fiat.u1(x144)))
+ x147, x148 := bits.add_u64(x119, x137, u64(fiat.u1(x146)))
+ x149, x150 := bits.add_u64(x121, x139, u64(fiat.u1(x148)))
+ x151, x152 := bits.add_u64(x123, x141, u64(fiat.u1(x150)))
+ x153, x154 := bits.add_u64(x125, u64(fiat.u1(x142)), u64(fiat.u1(x152)))
+ _, x155 := bits.mul_u64(x143, 0x100000001)
+ x158, x157 := bits.mul_u64(x155, 0xffffffffffffffff)
+ x160, x159 := bits.mul_u64(x155, 0xffffffffffffffff)
+ x162, x161 := bits.mul_u64(x155, 0xffffffffffffffff)
+ x164, x163 := bits.mul_u64(x155, 0xfffffffffffffffe)
+ x166, x165 := bits.mul_u64(x155, 0xffffffff00000000)
+ x168, x167 := bits.mul_u64(x155, 0xffffffff)
+ x169, x170 := bits.add_u64(x168, x165, u64(0x0))
+ x171, x172 := bits.add_u64(x166, x163, u64(fiat.u1(x170)))
+ x173, x174 := bits.add_u64(x164, x161, u64(fiat.u1(x172)))
+ x175, x176 := bits.add_u64(x162, x159, u64(fiat.u1(x174)))
+ x177, x178 := bits.add_u64(x160, x157, u64(fiat.u1(x176)))
+ _, x180 := bits.add_u64(x143, x167, u64(0x0))
+ x181, x182 := bits.add_u64(x145, x169, u64(fiat.u1(x180)))
+ x183, x184 := bits.add_u64(x147, x171, u64(fiat.u1(x182)))
+ x185, x186 := bits.add_u64(x149, x173, u64(fiat.u1(x184)))
+ x187, x188 := bits.add_u64(x151, x175, u64(fiat.u1(x186)))
+ x189, x190 := bits.add_u64(x153, x177, u64(fiat.u1(x188)))
+ x191, x192 := bits.add_u64((u64(fiat.u1(x154)) + u64(fiat.u1(x126))), (u64(fiat.u1(x178)) + x158), u64(fiat.u1(x190)))
+ x194, x193 := bits.mul_u64(x3, 0x200000000)
+ x196, x195 := bits.mul_u64(x3, 0xfffffffe00000000)
+ x198, x197 := bits.mul_u64(x3, 0x200000000)
+ x200, x199 := bits.mul_u64(x3, 0xfffffffe00000001)
+ x201, x202 := bits.add_u64(x200, x197, u64(0x0))
+ x203, x204 := bits.add_u64(x198, x195, u64(fiat.u1(x202)))
+ x205, x206 := bits.add_u64(x196, x193, u64(fiat.u1(x204)))
+ x207, x208 := bits.add_u64(x194, x3, u64(fiat.u1(x206)))
+ x209, x210 := bits.add_u64(x181, x199, u64(0x0))
+ x211, x212 := bits.add_u64(x183, x201, u64(fiat.u1(x210)))
+ x213, x214 := bits.add_u64(x185, x203, u64(fiat.u1(x212)))
+ x215, x216 := bits.add_u64(x187, x205, u64(fiat.u1(x214)))
+ x217, x218 := bits.add_u64(x189, x207, u64(fiat.u1(x216)))
+ x219, x220 := bits.add_u64(x191, u64(fiat.u1(x208)), u64(fiat.u1(x218)))
+ _, x221 := bits.mul_u64(x209, 0x100000001)
+ x224, x223 := bits.mul_u64(x221, 0xffffffffffffffff)
+ x226, x225 := bits.mul_u64(x221, 0xffffffffffffffff)
+ x228, x227 := bits.mul_u64(x221, 0xffffffffffffffff)
+ x230, x229 := bits.mul_u64(x221, 0xfffffffffffffffe)
+ x232, x231 := bits.mul_u64(x221, 0xffffffff00000000)
+ x234, x233 := bits.mul_u64(x221, 0xffffffff)
+ x235, x236 := bits.add_u64(x234, x231, u64(0x0))
+ x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236)))
+ x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238)))
+ x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240)))
+ x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242)))
+ _, x246 := bits.add_u64(x209, x233, u64(0x0))
+ x247, x248 := bits.add_u64(x211, x235, u64(fiat.u1(x246)))
+ x249, x250 := bits.add_u64(x213, x237, u64(fiat.u1(x248)))
+ x251, x252 := bits.add_u64(x215, x239, u64(fiat.u1(x250)))
+ x253, x254 := bits.add_u64(x217, x241, u64(fiat.u1(x252)))
+ x255, x256 := bits.add_u64(x219, x243, u64(fiat.u1(x254)))
+ x257, x258 := bits.add_u64((u64(fiat.u1(x220)) + u64(fiat.u1(x192))), (u64(fiat.u1(x244)) + x224), u64(fiat.u1(x256)))
+ x260, x259 := bits.mul_u64(x4, 0x200000000)
+ x262, x261 := bits.mul_u64(x4, 0xfffffffe00000000)
+ x264, x263 := bits.mul_u64(x4, 0x200000000)
+ x266, x265 := bits.mul_u64(x4, 0xfffffffe00000001)
+ x267, x268 := bits.add_u64(x266, x263, u64(0x0))
+ x269, x270 := bits.add_u64(x264, x261, u64(fiat.u1(x268)))
+ x271, x272 := bits.add_u64(x262, x259, u64(fiat.u1(x270)))
+ x273, x274 := bits.add_u64(x260, x4, u64(fiat.u1(x272)))
+ x275, x276 := bits.add_u64(x247, x265, u64(0x0))
+ x277, x278 := bits.add_u64(x249, x267, u64(fiat.u1(x276)))
+ x279, x280 := bits.add_u64(x251, x269, u64(fiat.u1(x278)))
+ x281, x282 := bits.add_u64(x253, x271, u64(fiat.u1(x280)))
+ x283, x284 := bits.add_u64(x255, x273, u64(fiat.u1(x282)))
+ x285, x286 := bits.add_u64(x257, u64(fiat.u1(x274)), u64(fiat.u1(x284)))
+ _, x287 := bits.mul_u64(x275, 0x100000001)
+ x290, x289 := bits.mul_u64(x287, 0xffffffffffffffff)
+ x292, x291 := bits.mul_u64(x287, 0xffffffffffffffff)
+ x294, x293 := bits.mul_u64(x287, 0xffffffffffffffff)
+ x296, x295 := bits.mul_u64(x287, 0xfffffffffffffffe)
+ x298, x297 := bits.mul_u64(x287, 0xffffffff00000000)
+ x300, x299 := bits.mul_u64(x287, 0xffffffff)
+ x301, x302 := bits.add_u64(x300, x297, u64(0x0))
+ x303, x304 := bits.add_u64(x298, x295, u64(fiat.u1(x302)))
+ x305, x306 := bits.add_u64(x296, x293, u64(fiat.u1(x304)))
+ x307, x308 := bits.add_u64(x294, x291, u64(fiat.u1(x306)))
+ x309, x310 := bits.add_u64(x292, x289, u64(fiat.u1(x308)))
+ _, x312 := bits.add_u64(x275, x299, u64(0x0))
+ x313, x314 := bits.add_u64(x277, x301, u64(fiat.u1(x312)))
+ x315, x316 := bits.add_u64(x279, x303, u64(fiat.u1(x314)))
+ x317, x318 := bits.add_u64(x281, x305, u64(fiat.u1(x316)))
+ x319, x320 := bits.add_u64(x283, x307, u64(fiat.u1(x318)))
+ x321, x322 := bits.add_u64(x285, x309, u64(fiat.u1(x320)))
+ x323, x324 := bits.add_u64((u64(fiat.u1(x286)) + u64(fiat.u1(x258))), (u64(fiat.u1(x310)) + x290), u64(fiat.u1(x322)))
+ x326, x325 := bits.mul_u64(x5, 0x200000000)
+ x328, x327 := bits.mul_u64(x5, 0xfffffffe00000000)
+ x330, x329 := bits.mul_u64(x5, 0x200000000)
+ x332, x331 := bits.mul_u64(x5, 0xfffffffe00000001)
+ x333, x334 := bits.add_u64(x332, x329, u64(0x0))
+ x335, x336 := bits.add_u64(x330, x327, u64(fiat.u1(x334)))
+ x337, x338 := bits.add_u64(x328, x325, u64(fiat.u1(x336)))
+ x339, x340 := bits.add_u64(x326, x5, u64(fiat.u1(x338)))
+ x341, x342 := bits.add_u64(x313, x331, u64(0x0))
+ x343, x344 := bits.add_u64(x315, x333, u64(fiat.u1(x342)))
+ x345, x346 := bits.add_u64(x317, x335, u64(fiat.u1(x344)))
+ x347, x348 := bits.add_u64(x319, x337, u64(fiat.u1(x346)))
+ x349, x350 := bits.add_u64(x321, x339, u64(fiat.u1(x348)))
+ x351, x352 := bits.add_u64(x323, u64(fiat.u1(x340)), u64(fiat.u1(x350)))
+ _, x353 := bits.mul_u64(x341, 0x100000001)
+ x356, x355 := bits.mul_u64(x353, 0xffffffffffffffff)
+ x358, x357 := bits.mul_u64(x353, 0xffffffffffffffff)
+ x360, x359 := bits.mul_u64(x353, 0xffffffffffffffff)
+ x362, x361 := bits.mul_u64(x353, 0xfffffffffffffffe)
+ x364, x363 := bits.mul_u64(x353, 0xffffffff00000000)
+ x366, x365 := bits.mul_u64(x353, 0xffffffff)
+ x367, x368 := bits.add_u64(x366, x363, u64(0x0))
+ x369, x370 := bits.add_u64(x364, x361, u64(fiat.u1(x368)))
+ x371, x372 := bits.add_u64(x362, x359, u64(fiat.u1(x370)))
+ x373, x374 := bits.add_u64(x360, x357, u64(fiat.u1(x372)))
+ x375, x376 := bits.add_u64(x358, x355, u64(fiat.u1(x374)))
+ _, x378 := bits.add_u64(x341, x365, u64(0x0))
+ x379, x380 := bits.add_u64(x343, x367, u64(fiat.u1(x378)))
+ x381, x382 := bits.add_u64(x345, x369, u64(fiat.u1(x380)))
+ x383, x384 := bits.add_u64(x347, x371, u64(fiat.u1(x382)))
+ x385, x386 := bits.add_u64(x349, x373, u64(fiat.u1(x384)))
+ x387, x388 := bits.add_u64(x351, x375, u64(fiat.u1(x386)))
+ x389, x390 := bits.add_u64((u64(fiat.u1(x352)) + u64(fiat.u1(x324))), (u64(fiat.u1(x376)) + x356), u64(fiat.u1(x388)))
+ x391, x392 := bits.sub_u64(x379, 0xffffffff, u64(0x0))
+ x393, x394 := bits.sub_u64(x381, 0xffffffff00000000, u64(fiat.u1(x392)))
+ x395, x396 := bits.sub_u64(x383, 0xfffffffffffffffe, u64(fiat.u1(x394)))
+ x397, x398 := bits.sub_u64(x385, 0xffffffffffffffff, u64(fiat.u1(x396)))
+ x399, x400 := bits.sub_u64(x387, 0xffffffffffffffff, u64(fiat.u1(x398)))
+ x401, x402 := bits.sub_u64(x389, 0xffffffffffffffff, u64(fiat.u1(x400)))
+ _, x404 := bits.sub_u64(u64(fiat.u1(x390)), u64(0x0), u64(fiat.u1(x402)))
+ x405 := fiat.cmovznz_u64(fiat.u1(x404), x391, x379)
+ x406 := fiat.cmovznz_u64(fiat.u1(x404), x393, x381)
+ x407 := fiat.cmovznz_u64(fiat.u1(x404), x395, x383)
+ x408 := fiat.cmovznz_u64(fiat.u1(x404), x397, x385)
+ x409 := fiat.cmovznz_u64(fiat.u1(x404), x399, x387)
+ x410 := fiat.cmovznz_u64(fiat.u1(x404), x401, x389)
+ out1[0] = x405
+ out1[1] = x406
+ out1[2] = x407
+ out1[3] = x408
+ out1[4] = x409
+ out1[5] = x410
+}
diff --git a/core/crypto/_fiat/field_scalarp384r1/field.odin b/core/crypto/_fiat/field_scalarp384r1/field.odin
new file mode 100644
index 000000000..f8af5e0f5
--- /dev/null
+++ b/core/crypto/_fiat/field_scalarp384r1/field.odin
@@ -0,0 +1,239 @@
+package field_scalarp384r1
+
+import subtle "core:crypto/_subtle"
+import "core:encoding/endian"
+import "core:math/bits"
+import "core:mem"
+
+@(private, rodata)
+TWO_256 := Montgomery_Domain_Field_Element{
+ 17975668497346362272,
+ 12895982994901192340,
+ 1913828944324294218,
+ 902107514168524577,
+ 1374695839762142861,
+ 12098342389602539653,
+}
+
+fe_clear :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) {
+ mem.zero_explicit(arg1, size_of(Montgomery_Domain_Field_Element))
+}
+
+fe_clear_vec :: proc "contextless" (
+ arg1: []^Montgomery_Domain_Field_Element,
+) {
+ for fe in arg1 {
+ fe_clear(fe)
+ }
+}
+
+fe_from_bytes :: proc "contextless" (
+ out1: ^Montgomery_Domain_Field_Element,
+ arg1: []byte,
+) -> bool {
+ ensure_contextless(len(out1) <= 64, "p384r1: invalid scalar input buffer")
+
+ is_canonical := false
+ s_len := len(arg1)
+ switch {
+ case s_len < 48:
+ // No way this can be greater than the order.
+ fe_unchecked_set(out1, arg1)
+ is_canonical = true
+ case s_len == 48:
+ // There is no way for any 384-bit value to be >= 2n, so
+ // the reduction can be done by `src - n` and a conditional
+ // select based on the underflow.
+ //
+ // It is *extremely* unlikely that the reduction is actually
+ // needed.
+ tmp: Non_Montgomery_Domain_Field_Element = ---
+ fe_unchecked_set_saturated(&tmp, arg1)
+ reduced := tmp
+ defer mem.zero_explicit(&tmp, size_of(tmp))
+ defer mem.zero_explicit(&reduced, size_of(reduced))
+
+ borrow: u64
+ reduced[0], borrow = bits.sub_u64(tmp[0], ELL[0], borrow)
+ reduced[1], borrow = bits.sub_u64(tmp[1], ELL[1], borrow)
+ reduced[2], borrow = bits.sub_u64(tmp[2], ELL[2], borrow)
+ reduced[3], borrow = bits.sub_u64(tmp[3], ELL[3], borrow)
+ reduced[4], borrow = bits.sub_u64(tmp[4], ELL[4], borrow)
+ reduced[5], borrow = bits.sub_u64(tmp[5], ELL[5], borrow)
+ need_reduced := subtle.u64_is_zero(borrow)
+
+ fe_cond_select(&tmp, &tmp, &reduced, int(need_reduced))
+ fe_to_montgomery(out1, &tmp)
+
+ is_canonical = need_reduced == 0
+ case:
+ // Use Frank Denis' trick, as documented by Filippo Valsorda
+ // at https://words.filippo.io/dispatches/wide-reduction/
+ //
+ // "I represent the value as a+b*2^192+c*2^384"
+ //
+ // Since digests beyond 512-bits are unrealistic, we do
+ // "a+b*2^256"
+
+ // Zero extend to 512-bits.
+ src_512: [64]byte
+ copy(src_512[64-s_len:], arg1)
+ defer mem.zero_explicit(&src_512, size_of(src_512))
+
+ fe_unchecked_set(out1, src_512[32:]) // a
+ b: Montgomery_Domain_Field_Element
+ fe_unchecked_set(&b, src_512[:32]) // b
+
+ fe_mul(&b, &b, &TWO_256)
+ fe_add(out1, out1, &b)
+
+ fe_clear(&b)
+ }
+
+ return !is_canonical
+}
+
+@(private)
+fe_is_canonical :: proc "contextless" (arg1: []byte) -> bool {
+ _, borrow := bits.sub_u64(ELL[0] - 1, endian.unchecked_get_u64be(arg1[40:]), 0)
+ _, borrow = bits.sub_u64(ELL[1], endian.unchecked_get_u64be(arg1[32:]), borrow)
+ _, borrow = bits.sub_u64(ELL[2], endian.unchecked_get_u64be(arg1[24:]), borrow)
+ _, borrow = bits.sub_u64(ELL[3], endian.unchecked_get_u64be(arg1[16:]), borrow)
+ _, borrow = bits.sub_u64(ELL[4], endian.unchecked_get_u64be(arg1[8:]), borrow)
+ _, borrow = bits.sub_u64(ELL[5], endian.unchecked_get_u64be(arg1[0:]), borrow)
+ return borrow == 0
+}
+
+@(private="file")
+fe_unchecked_set_saturated :: proc "contextless" (out1: ^Non_Montgomery_Domain_Field_Element, arg1: []byte) {
+ out1[0] = endian.unchecked_get_u64be(arg1[40:])
+ out1[1] = endian.unchecked_get_u64be(arg1[32:])
+ out1[2] = endian.unchecked_get_u64be(arg1[24:])
+ out1[3] = endian.unchecked_get_u64be(arg1[16:])
+ out1[4] = endian.unchecked_get_u64be(arg1[8:])
+ out1[5] = endian.unchecked_get_u64be(arg1[0:])
+}
+
+@(private)
+fe_unchecked_set :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element, arg1: []byte) {
+ arg1_384: [48]byte
+ defer mem.zero_explicit(&arg1_384, size_of(arg1_384))
+ copy(arg1_384[48-len(arg1):], arg1)
+
+ tmp: Non_Montgomery_Domain_Field_Element = ---
+ fe_unchecked_set_saturated(&tmp, arg1_384[:])
+ defer mem.zero_explicit(&tmp, size_of(tmp))
+
+ fe_to_montgomery(out1, &tmp)
+}
+
+fe_to_bytes :: proc "contextless" (out1: []byte, arg1: ^Montgomery_Domain_Field_Element) {
+ ensure_contextless(len(out1) == 48, "p384r1: invalid scalar output buffer")
+
+ tmp: Non_Montgomery_Domain_Field_Element = ---
+ fe_from_montgomery(&tmp, arg1)
+
+ // Note: Likewise, output in big-endian.
+ endian.unchecked_put_u64be(out1[40:], tmp[0])
+ endian.unchecked_put_u64be(out1[32:], tmp[1])
+ endian.unchecked_put_u64be(out1[24:], tmp[2])
+ endian.unchecked_put_u64be(out1[16:], tmp[3])
+ endian.unchecked_put_u64be(out1[8:], tmp[4])
+ endian.unchecked_put_u64be(out1[0:], tmp[5])
+
+ mem.zero_explicit(&tmp, size_of(tmp))
+}
+
+fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> int {
+ tmp: Montgomery_Domain_Field_Element = ---
+ fe_sub(&tmp, arg1, arg2)
+
+ is_eq := subtle.u64_is_zero(fe_non_zero(&tmp))
+
+ fe_clear(&tmp)
+
+ return int(is_eq)
+}
+
+fe_is_odd :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> int {
+ tmp: Non_Montgomery_Domain_Field_Element = ---
+ defer mem.zero_explicit(&tmp, size_of(tmp))
+
+ fe_from_montgomery(&tmp, arg1)
+ return int(tmp[0] & 1)
+}
+
+fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) {
+ out1[0] = 0
+ out1[1] = 0
+ out1[2] = 0
+ out1[3] = 0
+ out1[4] = 0
+ out1[5] = 0
+}
+
+fe_set :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ x1 := arg1[0]
+ x2 := arg1[1]
+ x3 := arg1[2]
+ x4 := arg1[3]
+ x5 := arg1[4]
+ x6 := arg1[5]
+ out1[0] = x1
+ out1[1] = x2
+ out1[2] = x3
+ out1[3] = x4
+ out1[4] = x5
+ out1[5] = x6
+}
+
+@(optimization_mode = "none")
+fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Montgomery_Domain_Field_Element, arg1: int) {
+ mask := (u64(arg1) * 0xffffffffffffffff)
+ x := (out1[0] ~ out2[0]) & mask
+ x1, y1 := out1[0] ~ x, out2[0] ~ x
+ x = (out1[1] ~ out2[1]) & mask
+ x2, y2 := out1[1] ~ x, out2[1] ~ x
+ x = (out1[2] ~ out2[2]) & mask
+ x3, y3 := out1[2] ~ x, out2[2] ~ x
+ x = (out1[3] ~ out2[3]) & mask
+ x4, y4 := out1[3] ~ x, out2[3] ~ x
+ x = (out1[4] ~ out2[4]) & mask
+ x5, y5 := out1[4] ~ x, out2[4] ~ x
+ x = (out1[5] ~ out2[5]) & mask
+ x6, y6 := out1[5] ~ x, out2[5] ~ x
+ out1[0], out2[0] = x1, y1
+ out1[1], out2[1] = x2, y2
+ out1[2], out2[2] = x3, y3
+ out1[3], out2[3] = x4, y4
+ out1[4], out2[4] = x5, y5
+ out1[5], out2[5] = x6, y6
+}
+
+@(optimization_mode = "none")
+fe_cond_select :: #force_no_inline proc "contextless" (
+ out1, arg1, arg2: ^$T,
+ arg3: int,
+) where T == Montgomery_Domain_Field_Element || T == Non_Montgomery_Domain_Field_Element {
+ mask := (u64(arg3) * 0xffffffffffffffff)
+ x1 := ((mask & arg2[0]) | ((~mask) & arg1[0]))
+ x2 := ((mask & arg2[1]) | ((~mask) & arg1[1]))
+ x3 := ((mask & arg2[2]) | ((~mask) & arg1[2]))
+ x4 := ((mask & arg2[3]) | ((~mask) & arg1[3]))
+ x5 := ((mask & arg2[4]) | ((~mask) & arg1[4]))
+ x6 := ((mask & arg2[5]) | ((~mask) & arg1[5]))
+ out1[0] = x1
+ out1[1] = x2
+ out1[2] = x3
+ out1[3] = x4
+ out1[4] = x5
+ out1[5] = x6
+}
+
+fe_cond_negate :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element, ctrl: int) {
+ tmp1: Montgomery_Domain_Field_Element = ---
+ fe_opp(&tmp1, arg1)
+ fe_cond_select(out1, arg1, &tmp1, ctrl)
+
+ fe_clear(&tmp1)
+}
diff --git a/core/crypto/_fiat/field_scalarp384r1/field64.odin b/core/crypto/_fiat/field_scalarp384r1/field64.odin
new file mode 100644
index 000000000..ce29060e8
--- /dev/null
+++ b/core/crypto/_fiat/field_scalarp384r1/field64.odin
@@ -0,0 +1,1081 @@
+// The BSD 1-Clause License (BSD-1-Clause)
+//
+// Copyright (c) 2015-2020 the fiat-crypto authors (see the AUTHORS file)
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design,
+// Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+package field_scalarp384r1
+
+// The file provides arithmetic on the field Z/(2^384 - 1388124618062372383947042015309946732620727252194336364173)
+// using a 64-bit Montgomery form internal representation. It is derived
+// primarily from the machine generated Golang output from the fiat-crypto
+// project.
+//
+// While the base implementation is provably correct, this implementation
+// makes no such claims as the port and optimizations were done by hand.
+//
+// WARNING: While big-endian is the common representation used for this
+// curve, the fiat output uses least-significant-limb first.
+
+import fiat "core:crypto/_fiat"
+import "core:math/bits"
+
+// ELL is the saturated representation of the field order, least-significant
+// limb first.
+ELL :: [6]u64{0xecec196accc52973, 0x581a0db248b0a77a, 0xc7634d81f4372ddf, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff}
+
+Montgomery_Domain_Field_Element :: distinct [6]u64
+Non_Montgomery_Domain_Field_Element :: distinct [6]u64
+
+fe_mul :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) {
+ x1 := arg1[1]
+ x2 := arg1[2]
+ x3 := arg1[3]
+ x4 := arg1[4]
+ x5 := arg1[5]
+ x6 := arg1[0]
+ x8, x7 := bits.mul_u64(x6, arg2[5])
+ x10, x9 := bits.mul_u64(x6, arg2[4])
+ x12, x11 := bits.mul_u64(x6, arg2[3])
+ x14, x13 := bits.mul_u64(x6, arg2[2])
+ x16, x15 := bits.mul_u64(x6, arg2[1])
+ x18, x17 := bits.mul_u64(x6, arg2[0])
+ x19, x20 := bits.add_u64(x18, x15, u64(0x0))
+ x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20)))
+ x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22)))
+ x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24)))
+ x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26)))
+ x29 := (u64(fiat.u1(x28)) + x8)
+ _, x30 := bits.mul_u64(x17, 0x6ed46089e88fdc45)
+ x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x39, x38 := bits.mul_u64(x30, 0xc7634d81f4372ddf)
+ x41, x40 := bits.mul_u64(x30, 0x581a0db248b0a77a)
+ x43, x42 := bits.mul_u64(x30, 0xecec196accc52973)
+ x44, x45 := bits.add_u64(x43, x40, u64(0x0))
+ x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45)))
+ x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47)))
+ x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49)))
+ x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51)))
+ x54 := (u64(fiat.u1(x53)) + x33)
+ _, x56 := bits.add_u64(x17, x42, u64(0x0))
+ x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56)))
+ x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58)))
+ x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60)))
+ x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62)))
+ x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64)))
+ x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66)))
+ x70, x69 := bits.mul_u64(x1, arg2[5])
+ x72, x71 := bits.mul_u64(x1, arg2[4])
+ x74, x73 := bits.mul_u64(x1, arg2[3])
+ x76, x75 := bits.mul_u64(x1, arg2[2])
+ x78, x77 := bits.mul_u64(x1, arg2[1])
+ x80, x79 := bits.mul_u64(x1, arg2[0])
+ x81, x82 := bits.add_u64(x80, x77, u64(0x0))
+ x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82)))
+ x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84)))
+ x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86)))
+ x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88)))
+ x91 := (u64(fiat.u1(x90)) + x70)
+ x92, x93 := bits.add_u64(x57, x79, u64(0x0))
+ x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93)))
+ x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95)))
+ x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97)))
+ x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99)))
+ x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101)))
+ x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103)))
+ _, x106 := bits.mul_u64(x92, 0x6ed46089e88fdc45)
+ x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x115, x114 := bits.mul_u64(x106, 0xc7634d81f4372ddf)
+ x117, x116 := bits.mul_u64(x106, 0x581a0db248b0a77a)
+ x119, x118 := bits.mul_u64(x106, 0xecec196accc52973)
+ x120, x121 := bits.add_u64(x119, x116, u64(0x0))
+ x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121)))
+ x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123)))
+ x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125)))
+ x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127)))
+ x130 := (u64(fiat.u1(x129)) + x109)
+ _, x132 := bits.add_u64(x92, x118, u64(0x0))
+ x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132)))
+ x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134)))
+ x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136)))
+ x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138)))
+ x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140)))
+ x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142)))
+ x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105)))
+ x147, x146 := bits.mul_u64(x2, arg2[5])
+ x149, x148 := bits.mul_u64(x2, arg2[4])
+ x151, x150 := bits.mul_u64(x2, arg2[3])
+ x153, x152 := bits.mul_u64(x2, arg2[2])
+ x155, x154 := bits.mul_u64(x2, arg2[1])
+ x157, x156 := bits.mul_u64(x2, arg2[0])
+ x158, x159 := bits.add_u64(x157, x154, u64(0x0))
+ x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159)))
+ x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161)))
+ x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163)))
+ x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165)))
+ x168 := (u64(fiat.u1(x167)) + x147)
+ x169, x170 := bits.add_u64(x133, x156, u64(0x0))
+ x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170)))
+ x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172)))
+ x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174)))
+ x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176)))
+ x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178)))
+ x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180)))
+ _, x183 := bits.mul_u64(x169, 0x6ed46089e88fdc45)
+ x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x192, x191 := bits.mul_u64(x183, 0xc7634d81f4372ddf)
+ x194, x193 := bits.mul_u64(x183, 0x581a0db248b0a77a)
+ x196, x195 := bits.mul_u64(x183, 0xecec196accc52973)
+ x197, x198 := bits.add_u64(x196, x193, u64(0x0))
+ x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198)))
+ x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200)))
+ x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202)))
+ x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204)))
+ x207 := (u64(fiat.u1(x206)) + x186)
+ _, x209 := bits.add_u64(x169, x195, u64(0x0))
+ x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209)))
+ x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211)))
+ x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213)))
+ x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215)))
+ x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217)))
+ x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219)))
+ x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182)))
+ x224, x223 := bits.mul_u64(x3, arg2[5])
+ x226, x225 := bits.mul_u64(x3, arg2[4])
+ x228, x227 := bits.mul_u64(x3, arg2[3])
+ x230, x229 := bits.mul_u64(x3, arg2[2])
+ x232, x231 := bits.mul_u64(x3, arg2[1])
+ x234, x233 := bits.mul_u64(x3, arg2[0])
+ x235, x236 := bits.add_u64(x234, x231, u64(0x0))
+ x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236)))
+ x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238)))
+ x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240)))
+ x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242)))
+ x245 := (u64(fiat.u1(x244)) + x224)
+ x246, x247 := bits.add_u64(x210, x233, u64(0x0))
+ x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247)))
+ x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249)))
+ x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251)))
+ x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253)))
+ x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255)))
+ x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257)))
+ _, x260 := bits.mul_u64(x246, 0x6ed46089e88fdc45)
+ x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x269, x268 := bits.mul_u64(x260, 0xc7634d81f4372ddf)
+ x271, x270 := bits.mul_u64(x260, 0x581a0db248b0a77a)
+ x273, x272 := bits.mul_u64(x260, 0xecec196accc52973)
+ x274, x275 := bits.add_u64(x273, x270, u64(0x0))
+ x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275)))
+ x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277)))
+ x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279)))
+ x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281)))
+ x284 := (u64(fiat.u1(x283)) + x263)
+ _, x286 := bits.add_u64(x246, x272, u64(0x0))
+ x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286)))
+ x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288)))
+ x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290)))
+ x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292)))
+ x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294)))
+ x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296)))
+ x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259)))
+ x301, x300 := bits.mul_u64(x4, arg2[5])
+ x303, x302 := bits.mul_u64(x4, arg2[4])
+ x305, x304 := bits.mul_u64(x4, arg2[3])
+ x307, x306 := bits.mul_u64(x4, arg2[2])
+ x309, x308 := bits.mul_u64(x4, arg2[1])
+ x311, x310 := bits.mul_u64(x4, arg2[0])
+ x312, x313 := bits.add_u64(x311, x308, u64(0x0))
+ x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313)))
+ x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315)))
+ x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317)))
+ x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319)))
+ x322 := (u64(fiat.u1(x321)) + x301)
+ x323, x324 := bits.add_u64(x287, x310, u64(0x0))
+ x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324)))
+ x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326)))
+ x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328)))
+ x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330)))
+ x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332)))
+ x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334)))
+ _, x337 := bits.mul_u64(x323, 0x6ed46089e88fdc45)
+ x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x346, x345 := bits.mul_u64(x337, 0xc7634d81f4372ddf)
+ x348, x347 := bits.mul_u64(x337, 0x581a0db248b0a77a)
+ x350, x349 := bits.mul_u64(x337, 0xecec196accc52973)
+ x351, x352 := bits.add_u64(x350, x347, u64(0x0))
+ x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352)))
+ x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354)))
+ x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356)))
+ x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358)))
+ x361 := (u64(fiat.u1(x360)) + x340)
+ _, x363 := bits.add_u64(x323, x349, u64(0x0))
+ x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363)))
+ x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365)))
+ x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367)))
+ x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369)))
+ x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371)))
+ x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373)))
+ x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336)))
+ x378, x377 := bits.mul_u64(x5, arg2[5])
+ x380, x379 := bits.mul_u64(x5, arg2[4])
+ x382, x381 := bits.mul_u64(x5, arg2[3])
+ x384, x383 := bits.mul_u64(x5, arg2[2])
+ x386, x385 := bits.mul_u64(x5, arg2[1])
+ x388, x387 := bits.mul_u64(x5, arg2[0])
+ x389, x390 := bits.add_u64(x388, x385, u64(0x0))
+ x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390)))
+ x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392)))
+ x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394)))
+ x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396)))
+ x399 := (u64(fiat.u1(x398)) + x378)
+ x400, x401 := bits.add_u64(x364, x387, u64(0x0))
+ x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401)))
+ x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403)))
+ x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405)))
+ x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407)))
+ x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409)))
+ x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411)))
+ _, x414 := bits.mul_u64(x400, 0x6ed46089e88fdc45)
+ x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x423, x422 := bits.mul_u64(x414, 0xc7634d81f4372ddf)
+ x425, x424 := bits.mul_u64(x414, 0x581a0db248b0a77a)
+ x427, x426 := bits.mul_u64(x414, 0xecec196accc52973)
+ x428, x429 := bits.add_u64(x427, x424, u64(0x0))
+ x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429)))
+ x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431)))
+ x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433)))
+ x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435)))
+ x438 := (u64(fiat.u1(x437)) + x417)
+ _, x440 := bits.add_u64(x400, x426, u64(0x0))
+ x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440)))
+ x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442)))
+ x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444)))
+ x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446)))
+ x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448)))
+ x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450)))
+ x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413)))
+ x454, x455 := bits.sub_u64(x441, 0xecec196accc52973, u64(0x0))
+ x456, x457 := bits.sub_u64(x443, 0x581a0db248b0a77a, u64(fiat.u1(x455)))
+ x458, x459 := bits.sub_u64(x445, 0xc7634d81f4372ddf, u64(fiat.u1(x457)))
+ x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459)))
+ x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461)))
+ x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463)))
+ _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465)))
+ x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441)
+ x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443)
+ x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445)
+ x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447)
+ x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449)
+ x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451)
+ out1[0] = x468
+ out1[1] = x469
+ out1[2] = x470
+ out1[3] = x471
+ out1[4] = x472
+ out1[5] = x473
+}
+
+fe_square :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ x1 := arg1[1]
+ x2 := arg1[2]
+ x3 := arg1[3]
+ x4 := arg1[4]
+ x5 := arg1[5]
+ x6 := arg1[0]
+ x8, x7 := bits.mul_u64(x6, arg1[5])
+ x10, x9 := bits.mul_u64(x6, arg1[4])
+ x12, x11 := bits.mul_u64(x6, arg1[3])
+ x14, x13 := bits.mul_u64(x6, arg1[2])
+ x16, x15 := bits.mul_u64(x6, arg1[1])
+ x18, x17 := bits.mul_u64(x6, arg1[0])
+ x19, x20 := bits.add_u64(x18, x15, u64(0x0))
+ x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20)))
+ x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22)))
+ x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24)))
+ x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26)))
+ x29 := (u64(fiat.u1(x28)) + x8)
+ _, x30 := bits.mul_u64(x17, 0x6ed46089e88fdc45)
+ x33, x32 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x35, x34 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x37, x36 := bits.mul_u64(x30, 0xffffffffffffffff)
+ x39, x38 := bits.mul_u64(x30, 0xc7634d81f4372ddf)
+ x41, x40 := bits.mul_u64(x30, 0x581a0db248b0a77a)
+ x43, x42 := bits.mul_u64(x30, 0xecec196accc52973)
+ x44, x45 := bits.add_u64(x43, x40, u64(0x0))
+ x46, x47 := bits.add_u64(x41, x38, u64(fiat.u1(x45)))
+ x48, x49 := bits.add_u64(x39, x36, u64(fiat.u1(x47)))
+ x50, x51 := bits.add_u64(x37, x34, u64(fiat.u1(x49)))
+ x52, x53 := bits.add_u64(x35, x32, u64(fiat.u1(x51)))
+ x54 := (u64(fiat.u1(x53)) + x33)
+ _, x56 := bits.add_u64(x17, x42, u64(0x0))
+ x57, x58 := bits.add_u64(x19, x44, u64(fiat.u1(x56)))
+ x59, x60 := bits.add_u64(x21, x46, u64(fiat.u1(x58)))
+ x61, x62 := bits.add_u64(x23, x48, u64(fiat.u1(x60)))
+ x63, x64 := bits.add_u64(x25, x50, u64(fiat.u1(x62)))
+ x65, x66 := bits.add_u64(x27, x52, u64(fiat.u1(x64)))
+ x67, x68 := bits.add_u64(x29, x54, u64(fiat.u1(x66)))
+ x70, x69 := bits.mul_u64(x1, arg1[5])
+ x72, x71 := bits.mul_u64(x1, arg1[4])
+ x74, x73 := bits.mul_u64(x1, arg1[3])
+ x76, x75 := bits.mul_u64(x1, arg1[2])
+ x78, x77 := bits.mul_u64(x1, arg1[1])
+ x80, x79 := bits.mul_u64(x1, arg1[0])
+ x81, x82 := bits.add_u64(x80, x77, u64(0x0))
+ x83, x84 := bits.add_u64(x78, x75, u64(fiat.u1(x82)))
+ x85, x86 := bits.add_u64(x76, x73, u64(fiat.u1(x84)))
+ x87, x88 := bits.add_u64(x74, x71, u64(fiat.u1(x86)))
+ x89, x90 := bits.add_u64(x72, x69, u64(fiat.u1(x88)))
+ x91 := (u64(fiat.u1(x90)) + x70)
+ x92, x93 := bits.add_u64(x57, x79, u64(0x0))
+ x94, x95 := bits.add_u64(x59, x81, u64(fiat.u1(x93)))
+ x96, x97 := bits.add_u64(x61, x83, u64(fiat.u1(x95)))
+ x98, x99 := bits.add_u64(x63, x85, u64(fiat.u1(x97)))
+ x100, x101 := bits.add_u64(x65, x87, u64(fiat.u1(x99)))
+ x102, x103 := bits.add_u64(x67, x89, u64(fiat.u1(x101)))
+ x104, x105 := bits.add_u64(u64(fiat.u1(x68)), x91, u64(fiat.u1(x103)))
+ _, x106 := bits.mul_u64(x92, 0x6ed46089e88fdc45)
+ x109, x108 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x111, x110 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x113, x112 := bits.mul_u64(x106, 0xffffffffffffffff)
+ x115, x114 := bits.mul_u64(x106, 0xc7634d81f4372ddf)
+ x117, x116 := bits.mul_u64(x106, 0x581a0db248b0a77a)
+ x119, x118 := bits.mul_u64(x106, 0xecec196accc52973)
+ x120, x121 := bits.add_u64(x119, x116, u64(0x0))
+ x122, x123 := bits.add_u64(x117, x114, u64(fiat.u1(x121)))
+ x124, x125 := bits.add_u64(x115, x112, u64(fiat.u1(x123)))
+ x126, x127 := bits.add_u64(x113, x110, u64(fiat.u1(x125)))
+ x128, x129 := bits.add_u64(x111, x108, u64(fiat.u1(x127)))
+ x130 := (u64(fiat.u1(x129)) + x109)
+ _, x132 := bits.add_u64(x92, x118, u64(0x0))
+ x133, x134 := bits.add_u64(x94, x120, u64(fiat.u1(x132)))
+ x135, x136 := bits.add_u64(x96, x122, u64(fiat.u1(x134)))
+ x137, x138 := bits.add_u64(x98, x124, u64(fiat.u1(x136)))
+ x139, x140 := bits.add_u64(x100, x126, u64(fiat.u1(x138)))
+ x141, x142 := bits.add_u64(x102, x128, u64(fiat.u1(x140)))
+ x143, x144 := bits.add_u64(x104, x130, u64(fiat.u1(x142)))
+ x145 := (u64(fiat.u1(x144)) + u64(fiat.u1(x105)))
+ x147, x146 := bits.mul_u64(x2, arg1[5])
+ x149, x148 := bits.mul_u64(x2, arg1[4])
+ x151, x150 := bits.mul_u64(x2, arg1[3])
+ x153, x152 := bits.mul_u64(x2, arg1[2])
+ x155, x154 := bits.mul_u64(x2, arg1[1])
+ x157, x156 := bits.mul_u64(x2, arg1[0])
+ x158, x159 := bits.add_u64(x157, x154, u64(0x0))
+ x160, x161 := bits.add_u64(x155, x152, u64(fiat.u1(x159)))
+ x162, x163 := bits.add_u64(x153, x150, u64(fiat.u1(x161)))
+ x164, x165 := bits.add_u64(x151, x148, u64(fiat.u1(x163)))
+ x166, x167 := bits.add_u64(x149, x146, u64(fiat.u1(x165)))
+ x168 := (u64(fiat.u1(x167)) + x147)
+ x169, x170 := bits.add_u64(x133, x156, u64(0x0))
+ x171, x172 := bits.add_u64(x135, x158, u64(fiat.u1(x170)))
+ x173, x174 := bits.add_u64(x137, x160, u64(fiat.u1(x172)))
+ x175, x176 := bits.add_u64(x139, x162, u64(fiat.u1(x174)))
+ x177, x178 := bits.add_u64(x141, x164, u64(fiat.u1(x176)))
+ x179, x180 := bits.add_u64(x143, x166, u64(fiat.u1(x178)))
+ x181, x182 := bits.add_u64(x145, x168, u64(fiat.u1(x180)))
+ _, x183 := bits.mul_u64(x169, 0x6ed46089e88fdc45)
+ x186, x185 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x188, x187 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x190, x189 := bits.mul_u64(x183, 0xffffffffffffffff)
+ x192, x191 := bits.mul_u64(x183, 0xc7634d81f4372ddf)
+ x194, x193 := bits.mul_u64(x183, 0x581a0db248b0a77a)
+ x196, x195 := bits.mul_u64(x183, 0xecec196accc52973)
+ x197, x198 := bits.add_u64(x196, x193, u64(0x0))
+ x199, x200 := bits.add_u64(x194, x191, u64(fiat.u1(x198)))
+ x201, x202 := bits.add_u64(x192, x189, u64(fiat.u1(x200)))
+ x203, x204 := bits.add_u64(x190, x187, u64(fiat.u1(x202)))
+ x205, x206 := bits.add_u64(x188, x185, u64(fiat.u1(x204)))
+ x207 := (u64(fiat.u1(x206)) + x186)
+ _, x209 := bits.add_u64(x169, x195, u64(0x0))
+ x210, x211 := bits.add_u64(x171, x197, u64(fiat.u1(x209)))
+ x212, x213 := bits.add_u64(x173, x199, u64(fiat.u1(x211)))
+ x214, x215 := bits.add_u64(x175, x201, u64(fiat.u1(x213)))
+ x216, x217 := bits.add_u64(x177, x203, u64(fiat.u1(x215)))
+ x218, x219 := bits.add_u64(x179, x205, u64(fiat.u1(x217)))
+ x220, x221 := bits.add_u64(x181, x207, u64(fiat.u1(x219)))
+ x222 := (u64(fiat.u1(x221)) + u64(fiat.u1(x182)))
+ x224, x223 := bits.mul_u64(x3, arg1[5])
+ x226, x225 := bits.mul_u64(x3, arg1[4])
+ x228, x227 := bits.mul_u64(x3, arg1[3])
+ x230, x229 := bits.mul_u64(x3, arg1[2])
+ x232, x231 := bits.mul_u64(x3, arg1[1])
+ x234, x233 := bits.mul_u64(x3, arg1[0])
+ x235, x236 := bits.add_u64(x234, x231, u64(0x0))
+ x237, x238 := bits.add_u64(x232, x229, u64(fiat.u1(x236)))
+ x239, x240 := bits.add_u64(x230, x227, u64(fiat.u1(x238)))
+ x241, x242 := bits.add_u64(x228, x225, u64(fiat.u1(x240)))
+ x243, x244 := bits.add_u64(x226, x223, u64(fiat.u1(x242)))
+ x245 := (u64(fiat.u1(x244)) + x224)
+ x246, x247 := bits.add_u64(x210, x233, u64(0x0))
+ x248, x249 := bits.add_u64(x212, x235, u64(fiat.u1(x247)))
+ x250, x251 := bits.add_u64(x214, x237, u64(fiat.u1(x249)))
+ x252, x253 := bits.add_u64(x216, x239, u64(fiat.u1(x251)))
+ x254, x255 := bits.add_u64(x218, x241, u64(fiat.u1(x253)))
+ x256, x257 := bits.add_u64(x220, x243, u64(fiat.u1(x255)))
+ x258, x259 := bits.add_u64(x222, x245, u64(fiat.u1(x257)))
+ _, x260 := bits.mul_u64(x246, 0x6ed46089e88fdc45)
+ x263, x262 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x265, x264 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x267, x266 := bits.mul_u64(x260, 0xffffffffffffffff)
+ x269, x268 := bits.mul_u64(x260, 0xc7634d81f4372ddf)
+ x271, x270 := bits.mul_u64(x260, 0x581a0db248b0a77a)
+ x273, x272 := bits.mul_u64(x260, 0xecec196accc52973)
+ x274, x275 := bits.add_u64(x273, x270, u64(0x0))
+ x276, x277 := bits.add_u64(x271, x268, u64(fiat.u1(x275)))
+ x278, x279 := bits.add_u64(x269, x266, u64(fiat.u1(x277)))
+ x280, x281 := bits.add_u64(x267, x264, u64(fiat.u1(x279)))
+ x282, x283 := bits.add_u64(x265, x262, u64(fiat.u1(x281)))
+ x284 := (u64(fiat.u1(x283)) + x263)
+ _, x286 := bits.add_u64(x246, x272, u64(0x0))
+ x287, x288 := bits.add_u64(x248, x274, u64(fiat.u1(x286)))
+ x289, x290 := bits.add_u64(x250, x276, u64(fiat.u1(x288)))
+ x291, x292 := bits.add_u64(x252, x278, u64(fiat.u1(x290)))
+ x293, x294 := bits.add_u64(x254, x280, u64(fiat.u1(x292)))
+ x295, x296 := bits.add_u64(x256, x282, u64(fiat.u1(x294)))
+ x297, x298 := bits.add_u64(x258, x284, u64(fiat.u1(x296)))
+ x299 := (u64(fiat.u1(x298)) + u64(fiat.u1(x259)))
+ x301, x300 := bits.mul_u64(x4, arg1[5])
+ x303, x302 := bits.mul_u64(x4, arg1[4])
+ x305, x304 := bits.mul_u64(x4, arg1[3])
+ x307, x306 := bits.mul_u64(x4, arg1[2])
+ x309, x308 := bits.mul_u64(x4, arg1[1])
+ x311, x310 := bits.mul_u64(x4, arg1[0])
+ x312, x313 := bits.add_u64(x311, x308, u64(0x0))
+ x314, x315 := bits.add_u64(x309, x306, u64(fiat.u1(x313)))
+ x316, x317 := bits.add_u64(x307, x304, u64(fiat.u1(x315)))
+ x318, x319 := bits.add_u64(x305, x302, u64(fiat.u1(x317)))
+ x320, x321 := bits.add_u64(x303, x300, u64(fiat.u1(x319)))
+ x322 := (u64(fiat.u1(x321)) + x301)
+ x323, x324 := bits.add_u64(x287, x310, u64(0x0))
+ x325, x326 := bits.add_u64(x289, x312, u64(fiat.u1(x324)))
+ x327, x328 := bits.add_u64(x291, x314, u64(fiat.u1(x326)))
+ x329, x330 := bits.add_u64(x293, x316, u64(fiat.u1(x328)))
+ x331, x332 := bits.add_u64(x295, x318, u64(fiat.u1(x330)))
+ x333, x334 := bits.add_u64(x297, x320, u64(fiat.u1(x332)))
+ x335, x336 := bits.add_u64(x299, x322, u64(fiat.u1(x334)))
+ _, x337 := bits.mul_u64(x323, 0x6ed46089e88fdc45)
+ x340, x339 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x342, x341 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x344, x343 := bits.mul_u64(x337, 0xffffffffffffffff)
+ x346, x345 := bits.mul_u64(x337, 0xc7634d81f4372ddf)
+ x348, x347 := bits.mul_u64(x337, 0x581a0db248b0a77a)
+ x350, x349 := bits.mul_u64(x337, 0xecec196accc52973)
+ x351, x352 := bits.add_u64(x350, x347, u64(0x0))
+ x353, x354 := bits.add_u64(x348, x345, u64(fiat.u1(x352)))
+ x355, x356 := bits.add_u64(x346, x343, u64(fiat.u1(x354)))
+ x357, x358 := bits.add_u64(x344, x341, u64(fiat.u1(x356)))
+ x359, x360 := bits.add_u64(x342, x339, u64(fiat.u1(x358)))
+ x361 := (u64(fiat.u1(x360)) + x340)
+ _, x363 := bits.add_u64(x323, x349, u64(0x0))
+ x364, x365 := bits.add_u64(x325, x351, u64(fiat.u1(x363)))
+ x366, x367 := bits.add_u64(x327, x353, u64(fiat.u1(x365)))
+ x368, x369 := bits.add_u64(x329, x355, u64(fiat.u1(x367)))
+ x370, x371 := bits.add_u64(x331, x357, u64(fiat.u1(x369)))
+ x372, x373 := bits.add_u64(x333, x359, u64(fiat.u1(x371)))
+ x374, x375 := bits.add_u64(x335, x361, u64(fiat.u1(x373)))
+ x376 := (u64(fiat.u1(x375)) + u64(fiat.u1(x336)))
+ x378, x377 := bits.mul_u64(x5, arg1[5])
+ x380, x379 := bits.mul_u64(x5, arg1[4])
+ x382, x381 := bits.mul_u64(x5, arg1[3])
+ x384, x383 := bits.mul_u64(x5, arg1[2])
+ x386, x385 := bits.mul_u64(x5, arg1[1])
+ x388, x387 := bits.mul_u64(x5, arg1[0])
+ x389, x390 := bits.add_u64(x388, x385, u64(0x0))
+ x391, x392 := bits.add_u64(x386, x383, u64(fiat.u1(x390)))
+ x393, x394 := bits.add_u64(x384, x381, u64(fiat.u1(x392)))
+ x395, x396 := bits.add_u64(x382, x379, u64(fiat.u1(x394)))
+ x397, x398 := bits.add_u64(x380, x377, u64(fiat.u1(x396)))
+ x399 := (u64(fiat.u1(x398)) + x378)
+ x400, x401 := bits.add_u64(x364, x387, u64(0x0))
+ x402, x403 := bits.add_u64(x366, x389, u64(fiat.u1(x401)))
+ x404, x405 := bits.add_u64(x368, x391, u64(fiat.u1(x403)))
+ x406, x407 := bits.add_u64(x370, x393, u64(fiat.u1(x405)))
+ x408, x409 := bits.add_u64(x372, x395, u64(fiat.u1(x407)))
+ x410, x411 := bits.add_u64(x374, x397, u64(fiat.u1(x409)))
+ x412, x413 := bits.add_u64(x376, x399, u64(fiat.u1(x411)))
+ _, x414 := bits.mul_u64(x400, 0x6ed46089e88fdc45)
+ x417, x416 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x419, x418 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x421, x420 := bits.mul_u64(x414, 0xffffffffffffffff)
+ x423, x422 := bits.mul_u64(x414, 0xc7634d81f4372ddf)
+ x425, x424 := bits.mul_u64(x414, 0x581a0db248b0a77a)
+ x427, x426 := bits.mul_u64(x414, 0xecec196accc52973)
+ x428, x429 := bits.add_u64(x427, x424, u64(0x0))
+ x430, x431 := bits.add_u64(x425, x422, u64(fiat.u1(x429)))
+ x432, x433 := bits.add_u64(x423, x420, u64(fiat.u1(x431)))
+ x434, x435 := bits.add_u64(x421, x418, u64(fiat.u1(x433)))
+ x436, x437 := bits.add_u64(x419, x416, u64(fiat.u1(x435)))
+ x438 := (u64(fiat.u1(x437)) + x417)
+ _, x440 := bits.add_u64(x400, x426, u64(0x0))
+ x441, x442 := bits.add_u64(x402, x428, u64(fiat.u1(x440)))
+ x443, x444 := bits.add_u64(x404, x430, u64(fiat.u1(x442)))
+ x445, x446 := bits.add_u64(x406, x432, u64(fiat.u1(x444)))
+ x447, x448 := bits.add_u64(x408, x434, u64(fiat.u1(x446)))
+ x449, x450 := bits.add_u64(x410, x436, u64(fiat.u1(x448)))
+ x451, x452 := bits.add_u64(x412, x438, u64(fiat.u1(x450)))
+ x453 := (u64(fiat.u1(x452)) + u64(fiat.u1(x413)))
+ x454, x455 := bits.sub_u64(x441, 0xecec196accc52973, u64(0x0))
+ x456, x457 := bits.sub_u64(x443, 0x581a0db248b0a77a, u64(fiat.u1(x455)))
+ x458, x459 := bits.sub_u64(x445, 0xc7634d81f4372ddf, u64(fiat.u1(x457)))
+ x460, x461 := bits.sub_u64(x447, 0xffffffffffffffff, u64(fiat.u1(x459)))
+ x462, x463 := bits.sub_u64(x449, 0xffffffffffffffff, u64(fiat.u1(x461)))
+ x464, x465 := bits.sub_u64(x451, 0xffffffffffffffff, u64(fiat.u1(x463)))
+ _, x467 := bits.sub_u64(x453, u64(0x0), u64(fiat.u1(x465)))
+ x468 := fiat.cmovznz_u64(fiat.u1(x467), x454, x441)
+ x469 := fiat.cmovznz_u64(fiat.u1(x467), x456, x443)
+ x470 := fiat.cmovznz_u64(fiat.u1(x467), x458, x445)
+ x471 := fiat.cmovznz_u64(fiat.u1(x467), x460, x447)
+ x472 := fiat.cmovznz_u64(fiat.u1(x467), x462, x449)
+ x473 := fiat.cmovznz_u64(fiat.u1(x467), x464, x451)
+ out1[0] = x468
+ out1[1] = x469
+ out1[2] = x470
+ out1[3] = x471
+ out1[4] = x472
+ out1[5] = x473
+}
+
+fe_add :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) {
+ x1, x2 := bits.add_u64(arg1[0], arg2[0], u64(0x0))
+ x3, x4 := bits.add_u64(arg1[1], arg2[1], u64(fiat.u1(x2)))
+ x5, x6 := bits.add_u64(arg1[2], arg2[2], u64(fiat.u1(x4)))
+ x7, x8 := bits.add_u64(arg1[3], arg2[3], u64(fiat.u1(x6)))
+ x9, x10 := bits.add_u64(arg1[4], arg2[4], u64(fiat.u1(x8)))
+ x11, x12 := bits.add_u64(arg1[5], arg2[5], u64(fiat.u1(x10)))
+ x13, x14 := bits.sub_u64(x1, 0xecec196accc52973, u64(0x0))
+ x15, x16 := bits.sub_u64(x3, 0x581a0db248b0a77a, u64(fiat.u1(x14)))
+ x17, x18 := bits.sub_u64(x5, 0xc7634d81f4372ddf, u64(fiat.u1(x16)))
+ x19, x20 := bits.sub_u64(x7, 0xffffffffffffffff, u64(fiat.u1(x18)))
+ x21, x22 := bits.sub_u64(x9, 0xffffffffffffffff, u64(fiat.u1(x20)))
+ x23, x24 := bits.sub_u64(x11, 0xffffffffffffffff, u64(fiat.u1(x22)))
+ _, x26 := bits.sub_u64(u64(fiat.u1(x12)), u64(0x0), u64(fiat.u1(x24)))
+ x27 := fiat.cmovznz_u64(fiat.u1(x26), x13, x1)
+ x28 := fiat.cmovznz_u64(fiat.u1(x26), x15, x3)
+ x29 := fiat.cmovznz_u64(fiat.u1(x26), x17, x5)
+ x30 := fiat.cmovznz_u64(fiat.u1(x26), x19, x7)
+ x31 := fiat.cmovznz_u64(fiat.u1(x26), x21, x9)
+ x32 := fiat.cmovznz_u64(fiat.u1(x26), x23, x11)
+ out1[0] = x27
+ out1[1] = x28
+ out1[2] = x29
+ out1[3] = x30
+ out1[4] = x31
+ out1[5] = x32
+}
+
+fe_sub :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) {
+ x1, x2 := bits.sub_u64(arg1[0], arg2[0], u64(0x0))
+ x3, x4 := bits.sub_u64(arg1[1], arg2[1], u64(fiat.u1(x2)))
+ x5, x6 := bits.sub_u64(arg1[2], arg2[2], u64(fiat.u1(x4)))
+ x7, x8 := bits.sub_u64(arg1[3], arg2[3], u64(fiat.u1(x6)))
+ x9, x10 := bits.sub_u64(arg1[4], arg2[4], u64(fiat.u1(x8)))
+ x11, x12 := bits.sub_u64(arg1[5], arg2[5], u64(fiat.u1(x10)))
+ x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff)
+ x14, x15 := bits.add_u64(x1, (x13 & 0xecec196accc52973), u64(0x0))
+ x16, x17 := bits.add_u64(x3, (x13 & 0x581a0db248b0a77a), u64(fiat.u1(x15)))
+ x18, x19 := bits.add_u64(x5, (x13 & 0xc7634d81f4372ddf), u64(fiat.u1(x17)))
+ x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19)))
+ x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21)))
+ x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23)))
+ out1[0] = x14
+ out1[1] = x16
+ out1[2] = x18
+ out1[3] = x20
+ out1[4] = x22
+ out1[5] = x24
+}
+
+fe_opp :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) {
+ x1, x2 := bits.sub_u64(u64(0x0), arg1[0], u64(0x0))
+ x3, x4 := bits.sub_u64(u64(0x0), arg1[1], u64(fiat.u1(x2)))
+ x5, x6 := bits.sub_u64(u64(0x0), arg1[2], u64(fiat.u1(x4)))
+ x7, x8 := bits.sub_u64(u64(0x0), arg1[3], u64(fiat.u1(x6)))
+ x9, x10 := bits.sub_u64(u64(0x0), arg1[4], u64(fiat.u1(x8)))
+ x11, x12 := bits.sub_u64(u64(0x0), arg1[5], u64(fiat.u1(x10)))
+ x13 := fiat.cmovznz_u64(fiat.u1(x12), u64(0x0), 0xffffffffffffffff)
+ x14, x15 := bits.add_u64(x1, (x13 & 0xecec196accc52973), u64(0x0))
+ x16, x17 := bits.add_u64(x3, (x13 & 0x581a0db248b0a77a), u64(fiat.u1(x15)))
+ x18, x19 := bits.add_u64(x5, (x13 & 0xc7634d81f4372ddf), u64(fiat.u1(x17)))
+ x20, x21 := bits.add_u64(x7, x13, u64(fiat.u1(x19)))
+ x22, x23 := bits.add_u64(x9, x13, u64(fiat.u1(x21)))
+ x24, _ := bits.add_u64(x11, x13, u64(fiat.u1(x23)))
+ out1[0] = x14
+ out1[1] = x16
+ out1[2] = x18
+ out1[3] = x20
+ out1[4] = x22
+ out1[5] = x24
+}
+
+fe_one :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) {
+ out1[0] = 0x1313e695333ad68d
+ out1[1] = 0xa7e5f24db74f5885
+ out1[2] = 0x389cb27e0bc8d220
+ out1[3] = 0x0
+ out1[4] = 0x0
+ out1[5] = 0x0
+}
+
+fe_non_zero :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> u64 {
+ return (arg1[0] | (arg1[1] | (arg1[2] | (arg1[3] | (arg1[4] | arg1[5])))))
+}
+
+@(optimization_mode = "none")
+fe_cond_assign :: #force_no_inline proc "contextless" (
+ out1, arg1: ^Montgomery_Domain_Field_Element,
+ arg2: int,
+) {
+ x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0])
+ x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1])
+ x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2])
+ x4 := fiat.cmovznz_u64(fiat.u1(arg2), out1[3], arg1[3])
+ x5 := fiat.cmovznz_u64(fiat.u1(arg2), out1[4], arg1[4])
+ x6 := fiat.cmovznz_u64(fiat.u1(arg2), out1[5], arg1[5])
+ out1[0] = x1
+ out1[1] = x2
+ out1[2] = x3
+ out1[3] = x4
+ out1[4] = x5
+ out1[5] = x6
+}
+
+fe_from_montgomery :: proc "contextless" (
+ out1: ^Non_Montgomery_Domain_Field_Element,
+ arg1: ^Montgomery_Domain_Field_Element,
+) {
+ x1 := arg1[0]
+ _, x2 := bits.mul_u64(x1, 0x6ed46089e88fdc45)
+ x5, x4 := bits.mul_u64(x2, 0xffffffffffffffff)
+ x7, x6 := bits.mul_u64(x2, 0xffffffffffffffff)
+ x9, x8 := bits.mul_u64(x2, 0xffffffffffffffff)
+ x11, x10 := bits.mul_u64(x2, 0xc7634d81f4372ddf)
+ x13, x12 := bits.mul_u64(x2, 0x581a0db248b0a77a)
+ x15, x14 := bits.mul_u64(x2, 0xecec196accc52973)
+ x16, x17 := bits.add_u64(x15, x12, u64(0x0))
+ x18, x19 := bits.add_u64(x13, x10, u64(fiat.u1(x17)))
+ x20, x21 := bits.add_u64(x11, x8, u64(fiat.u1(x19)))
+ x22, x23 := bits.add_u64(x9, x6, u64(fiat.u1(x21)))
+ x24, x25 := bits.add_u64(x7, x4, u64(fiat.u1(x23)))
+ _, x27 := bits.add_u64(x1, x14, u64(0x0))
+ x28, x29 := bits.add_u64(u64(0x0), x16, u64(fiat.u1(x27)))
+ x30, x31 := bits.add_u64(u64(0x0), x18, u64(fiat.u1(x29)))
+ x32, x33 := bits.add_u64(u64(0x0), x20, u64(fiat.u1(x31)))
+ x34, x35 := bits.add_u64(u64(0x0), x22, u64(fiat.u1(x33)))
+ x36, x37 := bits.add_u64(u64(0x0), x24, u64(fiat.u1(x35)))
+ x38, x39 := bits.add_u64(u64(0x0), (u64(fiat.u1(x25)) + x5), u64(fiat.u1(x37)))
+ x40, x41 := bits.add_u64(x28, arg1[1], u64(0x0))
+ x42, x43 := bits.add_u64(x30, u64(0x0), u64(fiat.u1(x41)))
+ x44, x45 := bits.add_u64(x32, u64(0x0), u64(fiat.u1(x43)))
+ x46, x47 := bits.add_u64(x34, u64(0x0), u64(fiat.u1(x45)))
+ x48, x49 := bits.add_u64(x36, u64(0x0), u64(fiat.u1(x47)))
+ x50, x51 := bits.add_u64(x38, u64(0x0), u64(fiat.u1(x49)))
+ _, x52 := bits.mul_u64(x40, 0x6ed46089e88fdc45)
+ x55, x54 := bits.mul_u64(x52, 0xffffffffffffffff)
+ x57, x56 := bits.mul_u64(x52, 0xffffffffffffffff)
+ x59, x58 := bits.mul_u64(x52, 0xffffffffffffffff)
+ x61, x60 := bits.mul_u64(x52, 0xc7634d81f4372ddf)
+ x63, x62 := bits.mul_u64(x52, 0x581a0db248b0a77a)
+ x65, x64 := bits.mul_u64(x52, 0xecec196accc52973)
+ x66, x67 := bits.add_u64(x65, x62, u64(0x0))
+ x68, x69 := bits.add_u64(x63, x60, u64(fiat.u1(x67)))
+ x70, x71 := bits.add_u64(x61, x58, u64(fiat.u1(x69)))
+ x72, x73 := bits.add_u64(x59, x56, u64(fiat.u1(x71)))
+ x74, x75 := bits.add_u64(x57, x54, u64(fiat.u1(x73)))
+ _, x77 := bits.add_u64(x40, x64, u64(0x0))
+ x78, x79 := bits.add_u64(x42, x66, u64(fiat.u1(x77)))
+ x80, x81 := bits.add_u64(x44, x68, u64(fiat.u1(x79)))
+ x82, x83 := bits.add_u64(x46, x70, u64(fiat.u1(x81)))
+ x84, x85 := bits.add_u64(x48, x72, u64(fiat.u1(x83)))
+ x86, x87 := bits.add_u64(x50, x74, u64(fiat.u1(x85)))
+ x88, x89 := bits.add_u64((u64(fiat.u1(x51)) + u64(fiat.u1(x39))), (u64(fiat.u1(x75)) + x55), u64(fiat.u1(x87)))
+ x90, x91 := bits.add_u64(x78, arg1[2], u64(0x0))
+ x92, x93 := bits.add_u64(x80, u64(0x0), u64(fiat.u1(x91)))
+ x94, x95 := bits.add_u64(x82, u64(0x0), u64(fiat.u1(x93)))
+ x96, x97 := bits.add_u64(x84, u64(0x0), u64(fiat.u1(x95)))
+ x98, x99 := bits.add_u64(x86, u64(0x0), u64(fiat.u1(x97)))
+ x100, x101 := bits.add_u64(x88, u64(0x0), u64(fiat.u1(x99)))
+ _, x102 := bits.mul_u64(x90, 0x6ed46089e88fdc45)
+ x105, x104 := bits.mul_u64(x102, 0xffffffffffffffff)
+ x107, x106 := bits.mul_u64(x102, 0xffffffffffffffff)
+ x109, x108 := bits.mul_u64(x102, 0xffffffffffffffff)
+ x111, x110 := bits.mul_u64(x102, 0xc7634d81f4372ddf)
+ x113, x112 := bits.mul_u64(x102, 0x581a0db248b0a77a)
+ x115, x114 := bits.mul_u64(x102, 0xecec196accc52973)
+ x116, x117 := bits.add_u64(x115, x112, u64(0x0))
+ x118, x119 := bits.add_u64(x113, x110, u64(fiat.u1(x117)))
+ x120, x121 := bits.add_u64(x111, x108, u64(fiat.u1(x119)))
+ x122, x123 := bits.add_u64(x109, x106, u64(fiat.u1(x121)))
+ x124, x125 := bits.add_u64(x107, x104, u64(fiat.u1(x123)))
+ _, x127 := bits.add_u64(x90, x114, u64(0x0))
+ x128, x129 := bits.add_u64(x92, x116, u64(fiat.u1(x127)))
+ x130, x131 := bits.add_u64(x94, x118, u64(fiat.u1(x129)))
+ x132, x133 := bits.add_u64(x96, x120, u64(fiat.u1(x131)))
+ x134, x135 := bits.add_u64(x98, x122, u64(fiat.u1(x133)))
+ x136, x137 := bits.add_u64(x100, x124, u64(fiat.u1(x135)))
+ x138, x139 := bits.add_u64((u64(fiat.u1(x101)) + u64(fiat.u1(x89))), (u64(fiat.u1(x125)) + x105), u64(fiat.u1(x137)))
+ x140, x141 := bits.add_u64(x128, arg1[3], u64(0x0))
+ x142, x143 := bits.add_u64(x130, u64(0x0), u64(fiat.u1(x141)))
+ x144, x145 := bits.add_u64(x132, u64(0x0), u64(fiat.u1(x143)))
+ x146, x147 := bits.add_u64(x134, u64(0x0), u64(fiat.u1(x145)))
+ x148, x149 := bits.add_u64(x136, u64(0x0), u64(fiat.u1(x147)))
+ x150, x151 := bits.add_u64(x138, u64(0x0), u64(fiat.u1(x149)))
+ _, x152 := bits.mul_u64(x140, 0x6ed46089e88fdc45)
+ x155, x154 := bits.mul_u64(x152, 0xffffffffffffffff)
+ x157, x156 := bits.mul_u64(x152, 0xffffffffffffffff)
+ x159, x158 := bits.mul_u64(x152, 0xffffffffffffffff)
+ x161, x160 := bits.mul_u64(x152, 0xc7634d81f4372ddf)
+ x163, x162 := bits.mul_u64(x152, 0x581a0db248b0a77a)
+ x165, x164 := bits.mul_u64(x152, 0xecec196accc52973)
+ x166, x167 := bits.add_u64(x165, x162, u64(0x0))
+ x168, x169 := bits.add_u64(x163, x160, u64(fiat.u1(x167)))
+ x170, x171 := bits.add_u64(x161, x158, u64(fiat.u1(x169)))
+ x172, x173 := bits.add_u64(x159, x156, u64(fiat.u1(x171)))
+ x174, x175 := bits.add_u64(x157, x154, u64(fiat.u1(x173)))
+ _, x177 := bits.add_u64(x140, x164, u64(0x0))
+ x178, x179 := bits.add_u64(x142, x166, u64(fiat.u1(x177)))
+ x180, x181 := bits.add_u64(x144, x168, u64(fiat.u1(x179)))
+ x182, x183 := bits.add_u64(x146, x170, u64(fiat.u1(x181)))
+ x184, x185 := bits.add_u64(x148, x172, u64(fiat.u1(x183)))
+ x186, x187 := bits.add_u64(x150, x174, u64(fiat.u1(x185)))
+ x188, x189 := bits.add_u64((u64(fiat.u1(x151)) + u64(fiat.u1(x139))), (u64(fiat.u1(x175)) + x155), u64(fiat.u1(x187)))
+ x190, x191 := bits.add_u64(x178, arg1[4], u64(0x0))
+ x192, x193 := bits.add_u64(x180, u64(0x0), u64(fiat.u1(x191)))
+ x194, x195 := bits.add_u64(x182, u64(0x0), u64(fiat.u1(x193)))
+ x196, x197 := bits.add_u64(x184, u64(0x0), u64(fiat.u1(x195)))
+ x198, x199 := bits.add_u64(x186, u64(0x0), u64(fiat.u1(x197)))
+ x200, x201 := bits.add_u64(x188, u64(0x0), u64(fiat.u1(x199)))
+ _, x202 := bits.mul_u64(x190, 0x6ed46089e88fdc45)
+ x205, x204 := bits.mul_u64(x202, 0xffffffffffffffff)
+ x207, x206 := bits.mul_u64(x202, 0xffffffffffffffff)
+ x209, x208 := bits.mul_u64(x202, 0xffffffffffffffff)
+ x211, x210 := bits.mul_u64(x202, 0xc7634d81f4372ddf)
+ x213, x212 := bits.mul_u64(x202, 0x581a0db248b0a77a)
+ x215, x214 := bits.mul_u64(x202, 0xecec196accc52973)
+ x216, x217 := bits.add_u64(x215, x212, u64(0x0))
+ x218, x219 := bits.add_u64(x213, x210, u64(fiat.u1(x217)))
+ x220, x221 := bits.add_u64(x211, x208, u64(fiat.u1(x219)))
+ x222, x223 := bits.add_u64(x209, x206, u64(fiat.u1(x221)))
+ x224, x225 := bits.add_u64(x207, x204, u64(fiat.u1(x223)))
+ _, x227 := bits.add_u64(x190, x214, u64(0x0))
+ x228, x229 := bits.add_u64(x192, x216, u64(fiat.u1(x227)))
+ x230, x231 := bits.add_u64(x194, x218, u64(fiat.u1(x229)))
+ x232, x233 := bits.add_u64(x196, x220, u64(fiat.u1(x231)))
+ x234, x235 := bits.add_u64(x198, x222, u64(fiat.u1(x233)))
+ x236, x237 := bits.add_u64(x200, x224, u64(fiat.u1(x235)))
+ x238, x239 := bits.add_u64((u64(fiat.u1(x201)) + u64(fiat.u1(x189))), (u64(fiat.u1(x225)) + x205), u64(fiat.u1(x237)))
+ x240, x241 := bits.add_u64(x228, arg1[5], u64(0x0))
+ x242, x243 := bits.add_u64(x230, u64(0x0), u64(fiat.u1(x241)))
+ x244, x245 := bits.add_u64(x232, u64(0x0), u64(fiat.u1(x243)))
+ x246, x247 := bits.add_u64(x234, u64(0x0), u64(fiat.u1(x245)))
+ x248, x249 := bits.add_u64(x236, u64(0x0), u64(fiat.u1(x247)))
+ x250, x251 := bits.add_u64(x238, u64(0x0), u64(fiat.u1(x249)))
+ _, x252 := bits.mul_u64(x240, 0x6ed46089e88fdc45)
+ x255, x254 := bits.mul_u64(x252, 0xffffffffffffffff)
+ x257, x256 := bits.mul_u64(x252, 0xffffffffffffffff)
+ x259, x258 := bits.mul_u64(x252, 0xffffffffffffffff)
+ x261, x260 := bits.mul_u64(x252, 0xc7634d81f4372ddf)
+ x263, x262 := bits.mul_u64(x252, 0x581a0db248b0a77a)
+ x265, x264 := bits.mul_u64(x252, 0xecec196accc52973)
+ x266, x267 := bits.add_u64(x265, x262, u64(0x0))
+ x268, x269 := bits.add_u64(x263, x260, u64(fiat.u1(x267)))
+ x270, x271 := bits.add_u64(x261, x258, u64(fiat.u1(x269)))
+ x272, x273 := bits.add_u64(x259, x256, u64(fiat.u1(x271)))
+ x274, x275 := bits.add_u64(x257, x254, u64(fiat.u1(x273)))
+ _, x277 := bits.add_u64(x240, x264, u64(0x0))
+ x278, x279 := bits.add_u64(x242, x266, u64(fiat.u1(x277)))
+ x280, x281 := bits.add_u64(x244, x268, u64(fiat.u1(x279)))
+ x282, x283 := bits.add_u64(x246, x270, u64(fiat.u1(x281)))
+ x284, x285 := bits.add_u64(x248, x272, u64(fiat.u1(x283)))
+ x286, x287 := bits.add_u64(x250, x274, u64(fiat.u1(x285)))
+ x288, x289 := bits.add_u64((u64(fiat.u1(x251)) + u64(fiat.u1(x239))), (u64(fiat.u1(x275)) + x255), u64(fiat.u1(x287)))
+ x290, x291 := bits.sub_u64(x278, 0xecec196accc52973, u64(0x0))
+ x292, x293 := bits.sub_u64(x280, 0x581a0db248b0a77a, u64(fiat.u1(x291)))
+ x294, x295 := bits.sub_u64(x282, 0xc7634d81f4372ddf, u64(fiat.u1(x293)))
+ x296, x297 := bits.sub_u64(x284, 0xffffffffffffffff, u64(fiat.u1(x295)))
+ x298, x299 := bits.sub_u64(x286, 0xffffffffffffffff, u64(fiat.u1(x297)))
+ x300, x301 := bits.sub_u64(x288, 0xffffffffffffffff, u64(fiat.u1(x299)))
+ _, x303 := bits.sub_u64(u64(fiat.u1(x289)), u64(0x0), u64(fiat.u1(x301)))
+ x304 := fiat.cmovznz_u64(fiat.u1(x303), x290, x278)
+ x305 := fiat.cmovznz_u64(fiat.u1(x303), x292, x280)
+ x306 := fiat.cmovznz_u64(fiat.u1(x303), x294, x282)
+ x307 := fiat.cmovznz_u64(fiat.u1(x303), x296, x284)
+ x308 := fiat.cmovznz_u64(fiat.u1(x303), x298, x286)
+ x309 := fiat.cmovznz_u64(fiat.u1(x303), x300, x288)
+ out1[0] = x304
+ out1[1] = x305
+ out1[2] = x306
+ out1[3] = x307
+ out1[4] = x308
+ out1[5] = x309
+}
+
+fe_to_montgomery :: proc "contextless" (
+ out1: ^Montgomery_Domain_Field_Element,
+ arg1: ^Non_Montgomery_Domain_Field_Element,
+) {
+ x1 := arg1[1]
+ x2 := arg1[2]
+ x3 := arg1[3]
+ x4 := arg1[4]
+ x5 := arg1[5]
+ x6 := arg1[0]
+ x8, x7 := bits.mul_u64(x6, 0xc84ee012b39bf21)
+ x10, x9 := bits.mul_u64(x6, 0x3fb05b7a28266895)
+ x12, x11 := bits.mul_u64(x6, 0xd40d49174aab1cc5)
+ x14, x13 := bits.mul_u64(x6, 0xbc3e483afcb82947)
+ x16, x15 := bits.mul_u64(x6, 0xff3d81e5df1aa419)
+ x18, x17 := bits.mul_u64(x6, 0x2d319b2419b409a9)
+ x19, x20 := bits.add_u64(x18, x15, u64(0x0))
+ x21, x22 := bits.add_u64(x16, x13, u64(fiat.u1(x20)))
+ x23, x24 := bits.add_u64(x14, x11, u64(fiat.u1(x22)))
+ x25, x26 := bits.add_u64(x12, x9, u64(fiat.u1(x24)))
+ x27, x28 := bits.add_u64(x10, x7, u64(fiat.u1(x26)))
+ _, x29 := bits.mul_u64(x17, 0x6ed46089e88fdc45)
+ x32, x31 := bits.mul_u64(x29, 0xffffffffffffffff)
+ x34, x33 := bits.mul_u64(x29, 0xffffffffffffffff)
+ x36, x35 := bits.mul_u64(x29, 0xffffffffffffffff)
+ x38, x37 := bits.mul_u64(x29, 0xc7634d81f4372ddf)
+ x40, x39 := bits.mul_u64(x29, 0x581a0db248b0a77a)
+ x42, x41 := bits.mul_u64(x29, 0xecec196accc52973)
+ x43, x44 := bits.add_u64(x42, x39, u64(0x0))
+ x45, x46 := bits.add_u64(x40, x37, u64(fiat.u1(x44)))
+ x47, x48 := bits.add_u64(x38, x35, u64(fiat.u1(x46)))
+ x49, x50 := bits.add_u64(x36, x33, u64(fiat.u1(x48)))
+ x51, x52 := bits.add_u64(x34, x31, u64(fiat.u1(x50)))
+ _, x54 := bits.add_u64(x17, x41, u64(0x0))
+ x55, x56 := bits.add_u64(x19, x43, u64(fiat.u1(x54)))
+ x57, x58 := bits.add_u64(x21, x45, u64(fiat.u1(x56)))
+ x59, x60 := bits.add_u64(x23, x47, u64(fiat.u1(x58)))
+ x61, x62 := bits.add_u64(x25, x49, u64(fiat.u1(x60)))
+ x63, x64 := bits.add_u64(x27, x51, u64(fiat.u1(x62)))
+ x65, x66 := bits.add_u64((u64(fiat.u1(x28)) + x8), (u64(fiat.u1(x52)) + x32), u64(fiat.u1(x64)))
+ x68, x67 := bits.mul_u64(x1, 0xc84ee012b39bf21)
+ x70, x69 := bits.mul_u64(x1, 0x3fb05b7a28266895)
+ x72, x71 := bits.mul_u64(x1, 0xd40d49174aab1cc5)
+ x74, x73 := bits.mul_u64(x1, 0xbc3e483afcb82947)
+ x76, x75 := bits.mul_u64(x1, 0xff3d81e5df1aa419)
+ x78, x77 := bits.mul_u64(x1, 0x2d319b2419b409a9)
+ x79, x80 := bits.add_u64(x78, x75, u64(0x0))
+ x81, x82 := bits.add_u64(x76, x73, u64(fiat.u1(x80)))
+ x83, x84 := bits.add_u64(x74, x71, u64(fiat.u1(x82)))
+ x85, x86 := bits.add_u64(x72, x69, u64(fiat.u1(x84)))
+ x87, x88 := bits.add_u64(x70, x67, u64(fiat.u1(x86)))
+ x89, x90 := bits.add_u64(x55, x77, u64(0x0))
+ x91, x92 := bits.add_u64(x57, x79, u64(fiat.u1(x90)))
+ x93, x94 := bits.add_u64(x59, x81, u64(fiat.u1(x92)))
+ x95, x96 := bits.add_u64(x61, x83, u64(fiat.u1(x94)))
+ x97, x98 := bits.add_u64(x63, x85, u64(fiat.u1(x96)))
+ x99, x100 := bits.add_u64(x65, x87, u64(fiat.u1(x98)))
+ _, x101 := bits.mul_u64(x89, 0x6ed46089e88fdc45)
+ x104, x103 := bits.mul_u64(x101, 0xffffffffffffffff)
+ x106, x105 := bits.mul_u64(x101, 0xffffffffffffffff)
+ x108, x107 := bits.mul_u64(x101, 0xffffffffffffffff)
+ x110, x109 := bits.mul_u64(x101, 0xc7634d81f4372ddf)
+ x112, x111 := bits.mul_u64(x101, 0x581a0db248b0a77a)
+ x114, x113 := bits.mul_u64(x101, 0xecec196accc52973)
+ x115, x116 := bits.add_u64(x114, x111, u64(0x0))
+ x117, x118 := bits.add_u64(x112, x109, u64(fiat.u1(x116)))
+ x119, x120 := bits.add_u64(x110, x107, u64(fiat.u1(x118)))
+ x121, x122 := bits.add_u64(x108, x105, u64(fiat.u1(x120)))
+ x123, x124 := bits.add_u64(x106, x103, u64(fiat.u1(x122)))
+ _, x126 := bits.add_u64(x89, x113, u64(0x0))
+ x127, x128 := bits.add_u64(x91, x115, u64(fiat.u1(x126)))
+ x129, x130 := bits.add_u64(x93, x117, u64(fiat.u1(x128)))
+ x131, x132 := bits.add_u64(x95, x119, u64(fiat.u1(x130)))
+ x133, x134 := bits.add_u64(x97, x121, u64(fiat.u1(x132)))
+ x135, x136 := bits.add_u64(x99, x123, u64(fiat.u1(x134)))
+ x137, x138 := bits.add_u64(((u64(fiat.u1(x100)) + u64(fiat.u1(x66))) + (u64(fiat.u1(x88)) + x68)), (u64(fiat.u1(x124)) + x104), u64(fiat.u1(x136)))
+ x140, x139 := bits.mul_u64(x2, 0xc84ee012b39bf21)
+ x142, x141 := bits.mul_u64(x2, 0x3fb05b7a28266895)
+ x144, x143 := bits.mul_u64(x2, 0xd40d49174aab1cc5)
+ x146, x145 := bits.mul_u64(x2, 0xbc3e483afcb82947)
+ x148, x147 := bits.mul_u64(x2, 0xff3d81e5df1aa419)
+ x150, x149 := bits.mul_u64(x2, 0x2d319b2419b409a9)
+ x151, x152 := bits.add_u64(x150, x147, u64(0x0))
+ x153, x154 := bits.add_u64(x148, x145, u64(fiat.u1(x152)))
+ x155, x156 := bits.add_u64(x146, x143, u64(fiat.u1(x154)))
+ x157, x158 := bits.add_u64(x144, x141, u64(fiat.u1(x156)))
+ x159, x160 := bits.add_u64(x142, x139, u64(fiat.u1(x158)))
+ x161, x162 := bits.add_u64(x127, x149, u64(0x0))
+ x163, x164 := bits.add_u64(x129, x151, u64(fiat.u1(x162)))
+ x165, x166 := bits.add_u64(x131, x153, u64(fiat.u1(x164)))
+ x167, x168 := bits.add_u64(x133, x155, u64(fiat.u1(x166)))
+ x169, x170 := bits.add_u64(x135, x157, u64(fiat.u1(x168)))
+ x171, x172 := bits.add_u64(x137, x159, u64(fiat.u1(x170)))
+ _, x173 := bits.mul_u64(x161, 0x6ed46089e88fdc45)
+ x176, x175 := bits.mul_u64(x173, 0xffffffffffffffff)
+ x178, x177 := bits.mul_u64(x173, 0xffffffffffffffff)
+ x180, x179 := bits.mul_u64(x173, 0xffffffffffffffff)
+ x182, x181 := bits.mul_u64(x173, 0xc7634d81f4372ddf)
+ x184, x183 := bits.mul_u64(x173, 0x581a0db248b0a77a)
+ x186, x185 := bits.mul_u64(x173, 0xecec196accc52973)
+ x187, x188 := bits.add_u64(x186, x183, u64(0x0))
+ x189, x190 := bits.add_u64(x184, x181, u64(fiat.u1(x188)))
+ x191, x192 := bits.add_u64(x182, x179, u64(fiat.u1(x190)))
+ x193, x194 := bits.add_u64(x180, x177, u64(fiat.u1(x192)))
+ x195, x196 := bits.add_u64(x178, x175, u64(fiat.u1(x194)))
+ _, x198 := bits.add_u64(x161, x185, u64(0x0))
+ x199, x200 := bits.add_u64(x163, x187, u64(fiat.u1(x198)))
+ x201, x202 := bits.add_u64(x165, x189, u64(fiat.u1(x200)))
+ x203, x204 := bits.add_u64(x167, x191, u64(fiat.u1(x202)))
+ x205, x206 := bits.add_u64(x169, x193, u64(fiat.u1(x204)))
+ x207, x208 := bits.add_u64(x171, x195, u64(fiat.u1(x206)))
+ x209, x210 := bits.add_u64(((u64(fiat.u1(x172)) + u64(fiat.u1(x138))) + (u64(fiat.u1(x160)) + x140)), (u64(fiat.u1(x196)) + x176), u64(fiat.u1(x208)))
+ x212, x211 := bits.mul_u64(x3, 0xc84ee012b39bf21)
+ x214, x213 := bits.mul_u64(x3, 0x3fb05b7a28266895)
+ x216, x215 := bits.mul_u64(x3, 0xd40d49174aab1cc5)
+ x218, x217 := bits.mul_u64(x3, 0xbc3e483afcb82947)
+ x220, x219 := bits.mul_u64(x3, 0xff3d81e5df1aa419)
+ x222, x221 := bits.mul_u64(x3, 0x2d319b2419b409a9)
+ x223, x224 := bits.add_u64(x222, x219, u64(0x0))
+ x225, x226 := bits.add_u64(x220, x217, u64(fiat.u1(x224)))
+ x227, x228 := bits.add_u64(x218, x215, u64(fiat.u1(x226)))
+ x229, x230 := bits.add_u64(x216, x213, u64(fiat.u1(x228)))
+ x231, x232 := bits.add_u64(x214, x211, u64(fiat.u1(x230)))
+ x233, x234 := bits.add_u64(x199, x221, u64(0x0))
+ x235, x236 := bits.add_u64(x201, x223, u64(fiat.u1(x234)))
+ x237, x238 := bits.add_u64(x203, x225, u64(fiat.u1(x236)))
+ x239, x240 := bits.add_u64(x205, x227, u64(fiat.u1(x238)))
+ x241, x242 := bits.add_u64(x207, x229, u64(fiat.u1(x240)))
+ x243, x244 := bits.add_u64(x209, x231, u64(fiat.u1(x242)))
+ _, x245 := bits.mul_u64(x233, 0x6ed46089e88fdc45)
+ x248, x247 := bits.mul_u64(x245, 0xffffffffffffffff)
+ x250, x249 := bits.mul_u64(x245, 0xffffffffffffffff)
+ x252, x251 := bits.mul_u64(x245, 0xffffffffffffffff)
+ x254, x253 := bits.mul_u64(x245, 0xc7634d81f4372ddf)
+ x256, x255 := bits.mul_u64(x245, 0x581a0db248b0a77a)
+ x258, x257 := bits.mul_u64(x245, 0xecec196accc52973)
+ x259, x260 := bits.add_u64(x258, x255, u64(0x0))
+ x261, x262 := bits.add_u64(x256, x253, u64(fiat.u1(x260)))
+ x263, x264 := bits.add_u64(x254, x251, u64(fiat.u1(x262)))
+ x265, x266 := bits.add_u64(x252, x249, u64(fiat.u1(x264)))
+ x267, x268 := bits.add_u64(x250, x247, u64(fiat.u1(x266)))
+ _, x270 := bits.add_u64(x233, x257, u64(0x0))
+ x271, x272 := bits.add_u64(x235, x259, u64(fiat.u1(x270)))
+ x273, x274 := bits.add_u64(x237, x261, u64(fiat.u1(x272)))
+ x275, x276 := bits.add_u64(x239, x263, u64(fiat.u1(x274)))
+ x277, x278 := bits.add_u64(x241, x265, u64(fiat.u1(x276)))
+ x279, x280 := bits.add_u64(x243, x267, u64(fiat.u1(x278)))
+ x281, x282 := bits.add_u64(((u64(fiat.u1(x244)) + u64(fiat.u1(x210))) + (u64(fiat.u1(x232)) + x212)), (u64(fiat.u1(x268)) + x248), u64(fiat.u1(x280)))
+ x284, x283 := bits.mul_u64(x4, 0xc84ee012b39bf21)
+ x286, x285 := bits.mul_u64(x4, 0x3fb05b7a28266895)
+ x288, x287 := bits.mul_u64(x4, 0xd40d49174aab1cc5)
+ x290, x289 := bits.mul_u64(x4, 0xbc3e483afcb82947)
+ x292, x291 := bits.mul_u64(x4, 0xff3d81e5df1aa419)
+ x294, x293 := bits.mul_u64(x4, 0x2d319b2419b409a9)
+ x295, x296 := bits.add_u64(x294, x291, u64(0x0))
+ x297, x298 := bits.add_u64(x292, x289, u64(fiat.u1(x296)))
+ x299, x300 := bits.add_u64(x290, x287, u64(fiat.u1(x298)))
+ x301, x302 := bits.add_u64(x288, x285, u64(fiat.u1(x300)))
+ x303, x304 := bits.add_u64(x286, x283, u64(fiat.u1(x302)))
+ x305, x306 := bits.add_u64(x271, x293, u64(0x0))
+ x307, x308 := bits.add_u64(x273, x295, u64(fiat.u1(x306)))
+ x309, x310 := bits.add_u64(x275, x297, u64(fiat.u1(x308)))
+ x311, x312 := bits.add_u64(x277, x299, u64(fiat.u1(x310)))
+ x313, x314 := bits.add_u64(x279, x301, u64(fiat.u1(x312)))
+ x315, x316 := bits.add_u64(x281, x303, u64(fiat.u1(x314)))
+ _, x317 := bits.mul_u64(x305, 0x6ed46089e88fdc45)
+ x320, x319 := bits.mul_u64(x317, 0xffffffffffffffff)
+ x322, x321 := bits.mul_u64(x317, 0xffffffffffffffff)
+ x324, x323 := bits.mul_u64(x317, 0xffffffffffffffff)
+ x326, x325 := bits.mul_u64(x317, 0xc7634d81f4372ddf)
+ x328, x327 := bits.mul_u64(x317, 0x581a0db248b0a77a)
+ x330, x329 := bits.mul_u64(x317, 0xecec196accc52973)
+ x331, x332 := bits.add_u64(x330, x327, u64(0x0))
+ x333, x334 := bits.add_u64(x328, x325, u64(fiat.u1(x332)))
+ x335, x336 := bits.add_u64(x326, x323, u64(fiat.u1(x334)))
+ x337, x338 := bits.add_u64(x324, x321, u64(fiat.u1(x336)))
+ x339, x340 := bits.add_u64(x322, x319, u64(fiat.u1(x338)))
+ _, x342 := bits.add_u64(x305, x329, u64(0x0))
+ x343, x344 := bits.add_u64(x307, x331, u64(fiat.u1(x342)))
+ x345, x346 := bits.add_u64(x309, x333, u64(fiat.u1(x344)))
+ x347, x348 := bits.add_u64(x311, x335, u64(fiat.u1(x346)))
+ x349, x350 := bits.add_u64(x313, x337, u64(fiat.u1(x348)))
+ x351, x352 := bits.add_u64(x315, x339, u64(fiat.u1(x350)))
+ x353, x354 := bits.add_u64(((u64(fiat.u1(x316)) + u64(fiat.u1(x282))) + (u64(fiat.u1(x304)) + x284)), (u64(fiat.u1(x340)) + x320), u64(fiat.u1(x352)))
+ x356, x355 := bits.mul_u64(x5, 0xc84ee012b39bf21)
+ x358, x357 := bits.mul_u64(x5, 0x3fb05b7a28266895)
+ x360, x359 := bits.mul_u64(x5, 0xd40d49174aab1cc5)
+ x362, x361 := bits.mul_u64(x5, 0xbc3e483afcb82947)
+ x364, x363 := bits.mul_u64(x5, 0xff3d81e5df1aa419)
+ x366, x365 := bits.mul_u64(x5, 0x2d319b2419b409a9)
+ x367, x368 := bits.add_u64(x366, x363, u64(0x0))
+ x369, x370 := bits.add_u64(x364, x361, u64(fiat.u1(x368)))
+ x371, x372 := bits.add_u64(x362, x359, u64(fiat.u1(x370)))
+ x373, x374 := bits.add_u64(x360, x357, u64(fiat.u1(x372)))
+ x375, x376 := bits.add_u64(x358, x355, u64(fiat.u1(x374)))
+ x377, x378 := bits.add_u64(x343, x365, u64(0x0))
+ x379, x380 := bits.add_u64(x345, x367, u64(fiat.u1(x378)))
+ x381, x382 := bits.add_u64(x347, x369, u64(fiat.u1(x380)))
+ x383, x384 := bits.add_u64(x349, x371, u64(fiat.u1(x382)))
+ x385, x386 := bits.add_u64(x351, x373, u64(fiat.u1(x384)))
+ x387, x388 := bits.add_u64(x353, x375, u64(fiat.u1(x386)))
+ _, x389 := bits.mul_u64(x377, 0x6ed46089e88fdc45)
+ x392, x391 := bits.mul_u64(x389, 0xffffffffffffffff)
+ x394, x393 := bits.mul_u64(x389, 0xffffffffffffffff)
+ x396, x395 := bits.mul_u64(x389, 0xffffffffffffffff)
+ x398, x397 := bits.mul_u64(x389, 0xc7634d81f4372ddf)
+ x400, x399 := bits.mul_u64(x389, 0x581a0db248b0a77a)
+ x402, x401 := bits.mul_u64(x389, 0xecec196accc52973)
+ x403, x404 := bits.add_u64(x402, x399, u64(0x0))
+ x405, x406 := bits.add_u64(x400, x397, u64(fiat.u1(x404)))
+ x407, x408 := bits.add_u64(x398, x395, u64(fiat.u1(x406)))
+ x409, x410 := bits.add_u64(x396, x393, u64(fiat.u1(x408)))
+ x411, x412 := bits.add_u64(x394, x391, u64(fiat.u1(x410)))
+ _, x414 := bits.add_u64(x377, x401, u64(0x0))
+ x415, x416 := bits.add_u64(x379, x403, u64(fiat.u1(x414)))
+ x417, x418 := bits.add_u64(x381, x405, u64(fiat.u1(x416)))
+ x419, x420 := bits.add_u64(x383, x407, u64(fiat.u1(x418)))
+ x421, x422 := bits.add_u64(x385, x409, u64(fiat.u1(x420)))
+ x423, x424 := bits.add_u64(x387, x411, u64(fiat.u1(x422)))
+ x425, x426 := bits.add_u64(((u64(fiat.u1(x388)) + u64(fiat.u1(x354))) + (u64(fiat.u1(x376)) + x356)), (u64(fiat.u1(x412)) + x392), u64(fiat.u1(x424)))
+ x427, x428 := bits.sub_u64(x415, 0xecec196accc52973, u64(0x0))
+ x429, x430 := bits.sub_u64(x417, 0x581a0db248b0a77a, u64(fiat.u1(x428)))
+ x431, x432 := bits.sub_u64(x419, 0xc7634d81f4372ddf, u64(fiat.u1(x430)))
+ x433, x434 := bits.sub_u64(x421, 0xffffffffffffffff, u64(fiat.u1(x432)))
+ x435, x436 := bits.sub_u64(x423, 0xffffffffffffffff, u64(fiat.u1(x434)))
+ x437, x438 := bits.sub_u64(x425, 0xffffffffffffffff, u64(fiat.u1(x436)))
+ _, x440 := bits.sub_u64(u64(fiat.u1(x426)), u64(0x0), u64(fiat.u1(x438)))
+ x441 := fiat.cmovznz_u64(fiat.u1(x440), x427, x415)
+ x442 := fiat.cmovznz_u64(fiat.u1(x440), x429, x417)
+ x443 := fiat.cmovznz_u64(fiat.u1(x440), x431, x419)
+ x444 := fiat.cmovznz_u64(fiat.u1(x440), x433, x421)
+ x445 := fiat.cmovznz_u64(fiat.u1(x440), x435, x423)
+ x446 := fiat.cmovznz_u64(fiat.u1(x440), x437, x425)
+ out1[0] = x441
+ out1[1] = x442
+ out1[2] = x443
+ out1[3] = x444
+ out1[4] = x445
+ out1[5] = x446
+}
diff --git a/core/crypto/_weierstrass/fe.odin b/core/crypto/_weierstrass/fe.odin
index 1a160a03c..8ff6fe346 100644
--- a/core/crypto/_weierstrass/fe.odin
+++ b/core/crypto/_weierstrass/fe.odin
@@ -1,97 +1,123 @@
package _weierstrass
import p256r1 "core:crypto/_fiat/field_p256r1"
-import "core:math/bits"
+import p384r1 "core:crypto/_fiat/field_p384r1"
+import subtle "core:crypto/_subtle"
Field_Element_p256r1 :: p256r1.Montgomery_Domain_Field_Element
+Field_Element_p384r1 :: p384r1.Montgomery_Domain_Field_Element
FE_SIZE_P256R1 :: 32
+FE_SIZE_P384R1 :: 48
fe_clear :: proc {
p256r1.fe_clear,
+ p384r1.fe_clear,
}
fe_clear_vec :: proc {
p256r1.fe_clear_vec,
+ p384r1.fe_clear_vec,
}
fe_set_bytes :: proc {
p256r1.fe_from_bytes,
+ p384r1.fe_from_bytes,
}
+
fe_bytes :: proc {
p256r1.fe_to_bytes,
+ p384r1.fe_to_bytes,
}
fe_set :: proc {
p256r1.fe_set,
+ p384r1.fe_set,
}
fe_zero :: proc {
p256r1.fe_zero,
+ p384r1.fe_zero,
}
fe_a :: proc {
fe_a_p256r1,
+ fe_a_p384r1,
}
fe_b :: proc {
fe_b_p256r1,
+ fe_b_p384r1,
}
fe_gen_x :: proc {
fe_gen_x_p256r1,
+ fe_gen_x_p384r1,
}
fe_gen_y :: proc {
fe_gen_y_p256r1,
+ fe_gen_y_p384r1,
}
fe_one :: proc {
p256r1.fe_one,
+ p384r1.fe_one,
}
fe_add :: proc {
p256r1.fe_add,
+ p384r1.fe_add,
}
fe_sub :: proc {
p256r1.fe_sub,
+ p384r1.fe_sub,
}
fe_negate :: proc {
p256r1.fe_opp,
+ p384r1.fe_opp,
}
fe_mul :: proc {
p256r1.fe_mul,
+ p384r1.fe_mul,
}
fe_square :: proc {
p256r1.fe_square,
+ p384r1.fe_square,
}
fe_inv :: proc {
p256r1.fe_inv,
+ p384r1.fe_inv,
}
fe_sqrt :: proc {
p256r1.fe_sqrt,
+ p384r1.fe_sqrt,
}
fe_equal :: proc {
p256r1.fe_equal,
+ p384r1.fe_equal,
}
fe_is_odd :: proc {
p256r1.fe_is_odd,
+ p384r1.fe_is_odd,
}
fe_is_zero :: proc {
fe_is_zero_p256r1,
+ fe_is_zero_p384r1,
}
fe_cond_select :: proc {
p256r1.fe_cond_select,
+ p384r1.fe_cond_select,
}
fe_a_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) {
@@ -127,9 +153,53 @@ fe_gen_y_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) {
fe[3] = 9615747158586711429
}
+fe_a_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) {
+ // a = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc
+ // = -3 mod p
+ fe[0] = 17179869180
+ fe[1] = 18446744056529682432
+ fe[2] = 18446744073709551611
+ fe[3] = 18446744073709551615
+ fe[4] = 18446744073709551615
+ fe[5] = 18446744073709551615
+}
+
+fe_b_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) {
+ // b = 0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef
+ fe[0] = 581395848458481100
+ fe[1] = 17809957346689692396
+ fe[2] = 8643006485390950958
+ fe[3] = 16372638458395724514
+ fe[4] = 13126622871277412500
+ fe[5] = 14774077593024970745
+}
+
+fe_gen_x_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) {
+ // G_x = 0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7
+ fe[0] = 4454189113653900584
+ fe[1] = 2369870743683386936
+ fe[2] = 9771750146904378734
+ fe[3] = 7229551204834152191
+ fe[4] = 9308930686126579243
+ fe[5] = 5564951339003155731
+}
+
+fe_gen_y_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) {
+ // G_y = 0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f
+ fe[0] = 2523209505731486974
+ fe[1] = 11655219901025790380
+ fe[2] = 10064955099576512592
+ fe[3] = 14322381509056856025
+ fe[4] = 15960759442596276288
+ fe[5] = 3132442392059561449
+}
+
@(require_results)
fe_is_zero_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) -> int {
- ctrl := p256r1.fe_non_zero(fe)
- _, borrow := bits.sub_u64(ctrl, 1, 0)
- return int(borrow)
+ return int(subtle.u64_is_zero(p256r1.fe_non_zero(fe)))
+}
+
+@(require_results)
+fe_is_zero_p384r1 :: proc "contextless" (fe: ^Field_Element_p384r1) -> int {
+ return int(subtle.u64_is_zero(p384r1.fe_non_zero(fe)))
}
diff --git a/core/crypto/_weierstrass/point.odin b/core/crypto/_weierstrass/point.odin
index cde82ebb2..0e6e48678 100644
--- a/core/crypto/_weierstrass/point.odin
+++ b/core/crypto/_weierstrass/point.odin
@@ -26,12 +26,22 @@ Point_p256r1 :: struct {
z: Field_Element_p256r1,
}
+Point_p384r1 :: struct {
+ x: Field_Element_p384r1,
+ y: Field_Element_p384r1,
+ z: Field_Element_p384r1,
+}
+
@(require_results)
pt_set_xy_bytes :: proc "contextless" (p: ^$T, x_raw, y_raw: []byte) -> bool {
when T == Point_p256r1 {
FE_SZ :: FE_SIZE_P256R1
x, y: Field_Element_p256r1
defer fe_clear_vec([]^Field_Element_p256r1{&x, &y})
+ } else when T == Point_p384r1 {
+ FE_SZ :: FE_SIZE_P384R1
+ x, y: Field_Element_p384r1
+ defer fe_clear_vec([]^Field_Element_p384r1{&x, &y})
} else {
#panic("weierstrass: invalid curve")
}
@@ -63,6 +73,10 @@ pt_set_x_bytes :: proc "contextless" (p: ^$T, x_raw: []byte, y_is_odd: int) -> b
FE_SZ :: FE_SIZE_P256R1
x, y, yy, y_neg: Field_Element_p256r1
defer fe_clear_vec([]^Field_Element_p256r1{&x, &y, &yy, &y_neg})
+ } else when T == Point_p384r1 {
+ FE_SZ :: FE_SIZE_P384R1
+ x, y, yy, y_neg: Field_Element_p384r1
+ defer fe_clear_vec([]^Field_Element_p384r1{&x, &y, &yy, &y_neg})
} else {
#panic("weierstrass: invalid curve")
}
@@ -94,6 +108,8 @@ pt_set_x_bytes :: proc "contextless" (p: ^$T, x_raw: []byte, y_is_odd: int) -> b
pt_bytes :: proc "contextless" (x, y: []byte, p: ^$T) -> bool {
when T == Point_p256r1 {
FE_SZ :: FE_SIZE_P256R1
+ } else when T == Point_p384r1 {
+ FE_SZ :: FE_SIZE_P384R1
} else {
#panic("weierstrass: invalid curve")
}
@@ -166,6 +182,10 @@ pt_add :: proc "contextless" (p, a, b: ^$T) {
t0, t1, t2, t3, t4, b_fe: Field_Element_p256r1
x3, y3, z3: Field_Element_p256r1
defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3})
+ } else when T == Point_p384r1 {
+ t0, t1, t2, t3, t4, b_fe: Field_Element_p384r1
+ x3, y3, z3: Field_Element_p384r1
+ defer fe_clear_vec([]^Field_Element_p384r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3})
} else {
#panic("weierstrass: invalid curve")
}
@@ -270,6 +290,10 @@ pt_add_mixed :: proc "contextless" (p, a: ^$T, x2, y2: ^$U) {
t0, t1, t2, t3, t4, b_fe: Field_Element_p256r1
x3, y3, z3: Field_Element_p256r1
defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3})
+ } else when T == Point_p384r1 {
+ t0, t1, t2, t3, t4, b_fe: Field_Element_p384r1
+ x3, y3, z3: Field_Element_p384r1
+ defer fe_clear_vec([]^Field_Element_p384r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3})
} else {
#panic("weierstrass: invalid curve")
}
@@ -357,6 +381,10 @@ pt_double :: proc "contextless" (p, a: ^$T) {
t0, t1, t2, t3, b_fe: Field_Element_p256r1
x3, y3, z3: Field_Element_p256r1
defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &x3, &y3, &z3})
+ } else when T == Point_p384r1 {
+ t0, t1, t2, t3, b_fe: Field_Element_p384r1
+ x3, y3, z3: Field_Element_p384r1
+ defer fe_clear_vec([]^Field_Element_p384r1{&t0, &t1, &t2, &t3, &x3, &y3, &z3})
} else {
#panic("weierstrass: invalid curve")
}
@@ -459,6 +487,8 @@ pt_rescale :: proc "contextless" (p, a: ^$T) {
when T == Point_p256r1 {
z_inv: Field_Element_p256r1
+ } else when T == Point_p384r1 {
+ z_inv: Field_Element_p384r1
} else {
#panic("weierstrass: invalid curve")
}
@@ -485,6 +515,8 @@ pt_cond_select :: proc "contextless" (p, a, b: ^$T, ctrl: int) {
pt_equal :: proc "contextless" (a, b: ^$T) -> int {
when T == Point_p256r1 {
x1z2, x2z1, y1z2, y2z1: Field_Element_p256r1
+ } else when T == Point_p384r1 {
+ x1z2, x2z1, y1z2, y2z1: Field_Element_p384r1
} else {
#panic("weierstrass: invalid curve")
}
diff --git a/core/crypto/_weierstrass/point_s11n_sec.odin b/core/crypto/_weierstrass/point_s11n_sec.odin
index ae009edb0..53dd4002f 100644
--- a/core/crypto/_weierstrass/point_s11n_sec.odin
+++ b/core/crypto/_weierstrass/point_s11n_sec.odin
@@ -14,6 +14,8 @@ SEC_PREFIX_UNCOMPRESSED :: 0x04
pt_set_sec_bytes :: proc "contextless" (p: ^$T, b: []byte) -> bool {
when T == Point_p256r1 {
FE_SZ :: FE_SIZE_P256R1
+ } else when T == Point_p384r1 {
+ FE_SZ :: FE_SIZE_P384R1
} else {
#panic("weierstrass: invalid curve")
}
@@ -51,6 +53,8 @@ pt_set_sec_bytes :: proc "contextless" (p: ^$T, b: []byte) -> bool {
pt_sec_bytes :: proc "contextless" (b: []byte, p: ^$T, compressed: bool) -> bool {
when T == Point_p256r1 {
FE_SZ :: FE_SIZE_P256R1
+ } else when T == Point_p384r1 {
+ FE_SZ :: FE_SIZE_P384R1
} else {
#panic("weierstrass: invalid curve")
}
diff --git a/core/crypto/_weierstrass/sc.odin b/core/crypto/_weierstrass/sc.odin
index 2ed9459bc..e119eec2e 100644
--- a/core/crypto/_weierstrass/sc.odin
+++ b/core/crypto/_weierstrass/sc.odin
@@ -1,76 +1,101 @@
package _weierstrass
import p256r1 "core:crypto/_fiat/field_scalarp256r1"
+import p384r1 "core:crypto/_fiat/field_scalarp384r1"
import subtle "core:crypto/_subtle"
Scalar_p256r1 :: p256r1.Montgomery_Domain_Field_Element
+Scalar_p384r1 :: p384r1.Montgomery_Domain_Field_Element
SC_SIZE_P256R1 :: 32
+SC_SIZE_P384R1 :: 48
sc_clear :: proc {
p256r1.fe_clear,
+ p384r1.fe_clear,
}
sc_clear_vec :: proc {
p256r1.fe_clear_vec,
+ p384r1.fe_clear_vec,
}
sc_set_bytes :: proc {
p256r1.fe_from_bytes,
+ p384r1.fe_from_bytes,
}
+
sc_bytes :: proc {
p256r1.fe_to_bytes,
+ p384r1.fe_to_bytes,
}
sc_set :: proc {
p256r1.fe_set,
+ p384r1.fe_set,
}
sc_zero :: proc {
p256r1.fe_zero,
+ p384r1.fe_zero,
}
sc_one_p256r1 :: proc {
p256r1.fe_one,
+ p384r1.fe_one,
}
sc_add :: proc {
p256r1.fe_add,
+ p384r1.fe_add,
}
sc_sub :: proc {
p256r1.fe_sub,
+ p384r1.fe_sub,
}
sc_negate :: proc {
p256r1.fe_opp,
+ p384r1.fe_opp,
}
sc_mul :: proc {
p256r1.fe_mul,
+ p384r1.fe_mul,
}
sc_square :: proc {
p256r1.fe_square,
+ p384r1.fe_square,
}
sc_cond_assign :: proc {
p256r1.fe_cond_assign,
+ p384r1.fe_cond_assign,
}
sc_equal :: proc {
p256r1.fe_equal,
+ p384r1.fe_equal,
}
sc_is_odd :: proc {
p256r1.fe_is_odd,
+ p384r1.fe_is_odd,
}
sc_is_zero :: proc {
sc_is_zero_p256r1,
+ sc_is_zero_p384r1,
}
@(require_results)
sc_is_zero_p256r1 :: proc "contextless" (fe: ^Scalar_p256r1) -> int {
return int(subtle.u64_is_zero(p256r1.fe_non_zero(fe)))
}
+
+@(require_results)
+sc_is_zero_p384r1 :: proc "contextless" (fe: ^Scalar_p384r1) -> int {
+ return int(subtle.u64_is_zero(p384r1.fe_non_zero(fe)))
+}
diff --git a/core/crypto/_weierstrass/scalar_mul.odin b/core/crypto/_weierstrass/scalar_mul.odin
index 1781ac3b6..108dc5d74 100644
--- a/core/crypto/_weierstrass/scalar_mul.odin
+++ b/core/crypto/_weierstrass/scalar_mul.odin
@@ -1,8 +1,8 @@
package _weierstrass
import "core:crypto"
-import subtle "core:crypto/_subtle"
-import "core:mem"
+@(require) import subtle "core:crypto/_subtle"
+@(require) import "core:mem"
pt_scalar_mul :: proc "contextless" (
p, a: ^$T,
@@ -11,6 +11,8 @@ pt_scalar_mul :: proc "contextless" (
) {
when T == Point_p256r1 && S == Scalar_p256r1 {
SC_SZ :: SC_SIZE_P256R1
+ } else when T == Point_p384r1 && S == Scalar_p384r1 {
+ SC_SZ :: SC_SIZE_P384R1
} else {
#panic("weierstrass: invalid curve")
}
@@ -34,6 +36,10 @@ pt_scalar_mul_bytes :: proc "contextless" (
p_tbl: Multiply_Table_p256r1 = ---
q, tmp: Point_p256r1 = ---, ---
SC_SZ :: SC_SIZE_P256R1
+ } else when T == Point_p384r1 {
+ p_tbl: Multiply_Table_p384r1 = ---
+ q, tmp: Point_p384r1 = ---, ---
+ SC_SZ :: SC_SIZE_P384R1
} else {
#panic("weierstrass: invalid curve")
}
@@ -90,6 +96,11 @@ when crypto.COMPACT_IMPLS == true {
p_tbl_lo := &Gen_Multiply_Table_p256r1_lo
tmp: Point_p256r1 = ---
SC_SZ :: SC_SIZE_P256R1
+ } else when T == Point_p384r1 && S == Scalar_p384r1 {
+ p_tbl_hi := &Gen_Multiply_Table_p384r1_hi
+ p_tbl_lo := &Gen_Multiply_Table_p384r1_lo
+ tmp: Point_p384r1 = ---
+ SC_SZ :: SC_SIZE_P384R1
} else {
#panic("weierstrass: invalid curve")
}
@@ -113,6 +124,8 @@ when crypto.COMPACT_IMPLS == true {
@(private="file")
Multiply_Table_p256r1 :: [15]Point_p256r1
+@(private="file")
+Multiply_Table_p384r1 :: [15]Point_p384r1
@(private="file")
mul_tbl_set :: proc "contextless"(
@@ -122,11 +135,13 @@ mul_tbl_set :: proc "contextless"(
) {
when T == Multiply_Table_p256r1 && U == Point_p256r1{
tmp: Point_p256r1
- pt_set(&tmp, point)
+ } else when T == Multiply_Table_p384r1 && U == Point_p384r1{
+ tmp: Point_p384r1
} else {
#panic("weierstrass: invalid curve")
}
+ pt_set(&tmp, point)
pt_set(&tbl[0], &tmp)
for i in 1 ..<15 {
pt_add(&tmp, &tmp, point)
@@ -170,6 +185,12 @@ when crypto.COMPACT_IMPLS == false {
y: Field_Element_p256r1,
}
+ @(private)
+ Affine_Point_p384r1 :: struct {
+ x: Field_Element_p384r1,
+ y: Field_Element_p384r1,
+ }
+
@(private="file")
mul_affine_tbl_lookup_add :: proc "contextless" (
point, tmp: ^$T,
diff --git a/core/crypto/_weierstrass/secp384r1_table.odin b/core/crypto/_weierstrass/secp384r1_table.odin
new file mode 100644
index 000000000..338e7b9b9
--- /dev/null
+++ b/core/crypto/_weierstrass/secp384r1_table.odin
@@ -0,0 +1,5969 @@
+package _weierstrass
+
+/*
+ ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------
+*/
+
+import "core:crypto"
+
+when crypto.COMPACT_IMPLS == false {
+ @(private,rodata)
+ Gen_Multiply_Table_p384r1_hi := [48][15]Affine_Point_p384r1 {
+ {
+ {
+ {3349844787980918824, 5700721700487043153, 1581288787708942329, 17304888540980539863, 3234495129650039747, 11694852976059594522},
+ {11454526365474276483, 17280055605583648274, 11483041770187710052, 15064860306174908787, 9425940298043390756, 7831029453110477537},
+ },
+ {
+ {10854210904801992286, 8255439613636595718, 1316348857406525596, 2282633625581246438, 14438173431932387987, 5673747503677604393},
+ {8960903665589529841, 14030078906563026478, 466971755747792240, 16909751879911376491, 8261483486653352128, 12597935804442306524},
+ },
+ {
+ {6447508696227153408, 2759028665179735381, 794515856920409590, 14869397668262921446, 10588017418631076914, 12633095840797167228},
+ {6607496461698970477, 6359006165521880122, 16663268705047656412, 18219762716186036953, 13315075775889493847, 6546871415552527515},
+ },
+ {
+ {4250815476678138550, 17073439466111852958, 3750529698426925825, 1904641224225602431, 7274009899457528107, 9209596034767199086},
+ {6863361867383511223, 4099555040981761624, 16013520265914987211, 17330863835225155437, 15236683723773407531, 9886066912739647523},
+ },
+ {
+ {6548020115141006009, 2051287398488083721, 18013217855858620214, 17512108880758082211, 9657257807517110121, 13349423389223700059},
+ {11448378503671870177, 16607356707891652776, 17986139470446831883, 2256897346286898360, 7779521166731257394, 14734261666263853530},
+ },
+ {
+ {16451156334851086799, 10433346012762661878, 1154088382826340721, 13920053107889463035, 12824812460638933002, 5771020232226448223},
+ {10182053156369870491, 9953188423679889138, 3623574174398550414, 6539131418856354537, 4739863922718165110, 13968548469751179186},
+ },
+ {
+ {5057596744164756370, 12108644536263189339, 15628783732405749711, 9182850460131890127, 7755150145219327164, 12512487145101794871},
+ {9783765255428637296, 17231411912625418137, 3031503376230558613, 3001321323125863884, 3711029936425287900, 18364899108493632271},
+ },
+ {
+ {4364170143483158168, 3837420327812895040, 11153877356291905762, 8627127623255240713, 10258093926722597263, 6966392554053872709},
+ {13838494481389844004, 12447754423026187562, 14673290292701904554, 6888547195036401202, 3349351868797716527, 6817319933710697746},
+ },
+ {
+ {18016384373848540113, 7565820187757705205, 16185660972256070888, 2502822820839506307, 3880408517672548187, 4194119666426113160},
+ {15694892319489811154, 4832422690840974597, 900725859486443418, 10265913502031862890, 1864821221915885738, 3700988259937570428},
+ },
+ {
+ {8488064655818993057, 13159008538953946469, 11028809874392449897, 11486244481861659915, 8569628704299090359, 2892252873674546430},
+ {2941671072611665985, 9930810186813308033, 10852463932839803129, 6122756170654615426, 13303416592882569572, 6113713156059966484},
+ },
+ {
+ {10029451401870245184, 17181275891609445610, 1563464611048571891, 9249056941485261951, 15488363863106956591, 17426032626929358463},
+ {3624362630716884995, 17733027703464349615, 12615837230382222165, 2899993379581625588, 10641197672343453466, 6876651786059986401},
+ },
+ {
+ {12941176093218387209, 18012784992688854716, 17630514364742901970, 7489207242388660276, 3300101790738216151, 165750267447677843},
+ {17420203378203929547, 18429168937941287247, 12685766409811315467, 17062737254687688913, 11583537930945240085, 374101281300528640},
+ },
+ {
+ {16294845494152982505, 7182435875615992692, 3318017447157242087, 6087688366366383495, 328984259793137604, 14904070120287703952},
+ {565244652741101966, 4951466181341698004, 11866318921579101416, 6194578547220221350, 15631557042652121752, 10545898140965819968},
+ },
+ {
+ {15745305462398415447, 6816971438675772065, 1075554629877262698, 8234899837982726223, 3512560196005219004, 17693290669008338152},
+ {14638482525770633011, 15865918008670368297, 11359271142073926365, 17074664191994857570, 15613938350520725613, 17352596771318223922},
+ },
+ {
+ {6627628274763979245, 6430867977390741183, 16640991507592485950, 13915161472308593069, 9005635619537074355, 17136188005588780957},
+ {6349032855227933129, 13790585653547635104, 6107878840283566203, 17101678754123509440, 4589529453987745844, 8778990861876837520},
+ },
+ },
+ {
+ {
+ {8752339740764879889, 17204670892025727113, 13948917001537480663, 6015237120129105404, 12568825630768815527, 17098885903057916524},
+ {3196947359408104404, 10557260209896054933, 15941743809901771731, 11319635393284889026, 15404036538896402776, 1823888675766330133},
+ },
+ {
+ {469276640564380241, 10942708362323945260, 5172129155405724574, 17521202989307779782, 285237824018528197, 14755519896084931015},
+ {13450199151338167480, 4987469637889591012, 11072253743028383225, 4126494248833488207, 10403393469323319433, 14468451395906602570},
+ },
+ {
+ {10409556101848104492, 2312052479304391304, 8367833927637255749, 12718782815503837000, 12586549663603169139, 10099896633356211470},
+ {7897182246145608734, 6279866437607856313, 15077509973591020067, 1920596236429885894, 8944171611482738124, 468560753431799278},
+ },
+ {
+ {14398196793687807397, 8276491336766244001, 16962771698246445022, 8043838882426521864, 3609036178188456346, 17961572587511875610},
+ {10659300691638275682, 12905326140192521229, 651286293824175704, 6550291910155090287, 10359196978363721745, 8054349679302352396},
+ },
+ {
+ {14267646986135279321, 8023233762563366251, 3277224320191152598, 2431726775717059350, 3733051418604042579, 11078740418949781682},
+ {4641466211631370887, 5972034612476576125, 11061332758238937654, 565694857032650296, 15196808723752961845, 5493285531974069465},
+ },
+ {
+ {18369275680877034088, 3644498253900435800, 5207654447363684810, 15054017021149325074, 13441959779061156291, 10801557030657187731},
+ {5488228865522937525, 10042916063344664944, 16628991126352116102, 13399733271269739520, 7919096844168308660, 12224871956968387142},
+ },
+ {
+ {9406504212815497730, 6315084170282838751, 1538052392585176449, 3287788394884246045, 11684015502339439334, 774607932742351547},
+ {13523687029812911694, 8970259436187285903, 516344689739437046, 8879385705799553570, 15472954217075584115, 17165612419994903190},
+ },
+ {
+ {6153906285028789904, 4881581827835548877, 9088581243877761387, 8673828452274153145, 3729691157199039232, 14763971970770720159},
+ {11125946843031387253, 16893034180060177406, 11028878025260215404, 13414446456552306577, 15673952559920934625, 8227747155230402213},
+ },
+ {
+ {4019194246965870655, 15651844969361453739, 14943903262285431608, 16531569415823118894, 12811244602177600058, 13239818034282515750},
+ {5449698701210370930, 10791866857788139766, 5646650868879525525, 13293667095645494023, 12241262662724597658, 13853472368070253083},
+ },
+ {
+ {4116627791673898568, 5326753363832360760, 11600148105162668652, 16022425070120634880, 12379564163937803418, 18403278989519500037},
+ {3838756056494870539, 9746510470453080454, 15196381880087604041, 1324266274153753608, 1934910704818180248, 16192237923261768598},
+ },
+ {
+ {5766511464995673783, 8244831189622490542, 8170343088439188103, 6232835306175447562, 5263728916489688559, 11717533286834875},
+ {12241226361813518908, 13563045206906982275, 6620157279318203022, 5949784687776791647, 2638510331637305823, 8202404349400972534},
+ },
+ {
+ {17137086209956005801, 204428026461370733, 3234178205969960017, 1143006718786815780, 7294365920988646447, 3430748893910901229},
+ {15644744495324135074, 6526193849034702994, 15311692696436479485, 100536624425234142, 2072137864950345134, 2838362248079960254},
+ },
+ {
+ {3864766173433820636, 1971303109201164903, 5674191275610292510, 1729560487462795155, 10192657450724834454, 13552365051012392948},
+ {6029200215919341904, 15607499798945720199, 9235384391078164863, 13115797159041968899, 11473304030559673981, 6717143313334294198},
+ },
+ {
+ {16073198989296538507, 1260522085794207919, 2484833084695527559, 16663233906141730979, 16370173418105654173, 15941588275532048355},
+ {15264482454100651294, 1530324904307833661, 5346522558909751820, 168718846601743143, 12733323453851106540, 15054596367649585566},
+ },
+ {
+ {8779244963536382258, 14774177152181331880, 4385874624061025062, 1164231020920773885, 18441595039555055892, 10628161864427821209},
+ {314776300789919008, 15953928246882392341, 11239013102079015593, 12105564780074077722, 14167815415915669462, 1359490032240618238},
+ },
+ },
+ {
+ {
+ {17495831655399754328, 5174414647671185898, 11318938235462267547, 10600238109237010238, 3808662780947456733, 9982761271652922419},
+ {9825065447185105695, 17201221608158777066, 8386702419239390647, 6669452484318451541, 9948181677775458542, 10854356442296663251},
+ },
+ {
+ {9814807791324751977, 12296930083946621987, 10307437404349332723, 9109385710605983143, 14812805821653280276, 9073050103164402930},
+ {13867323253290964163, 4560904001274587374, 8320427990736234822, 16081927245724423233, 5738004521721590874, 6293359268685952360},
+ },
+ {
+ {1102440177859885328, 6433584039832869723, 5220624537358960047, 13680706619037828486, 8111463461178477715, 8222960733395115842},
+ {17599283693164557341, 15090346558134489779, 4538679599583135375, 15042688490235051776, 13835441515025117083, 16073809881077304026},
+ },
+ {
+ {10047787296578964584, 2965381022962740423, 16294614689730458159, 9190282415235004744, 2690723303600845570, 2433913875956636400},
+ {314860987985756378, 17256734903814295206, 15934782378906162714, 430963730343504134, 11136098731840913906, 17571316264889158941},
+ },
+ {
+ {13751698910353501324, 13510591610088790493, 7296230476386677951, 15771194764882310216, 7071348632181406726, 4016223392586971068},
+ {5697427461676860171, 8233597763060359382, 11010267185618729313, 3415981542645755022, 5457294468077244468, 225392490383371832},
+ },
+ {
+ {15646693844663402255, 3326571016557891145, 11654470234122088961, 15157961803112063987, 2993882145665175656, 8636467418941461771},
+ {6779513489978476950, 5971261203840109208, 12247590628659552873, 17305918993021939273, 16119245356860371088, 1321130712911895728},
+ },
+ {
+ {11483973417069062031, 6037224851072625784, 15557951376706404252, 2470679358159540669, 12238331311548942969, 8726725576681513552},
+ {9571412658072452963, 13081411829441971381, 11182177874732199472, 4596163123987649855, 2508633440203353096, 13386883764628321276},
+ },
+ {
+ {13238425823862395570, 9364555424927625812, 13036757456625831933, 17258175170914518289, 10977661896195155237, 2108108449570745277},
+ {9531888381573748695, 871050091524626285, 5415169211299494043, 12856340691567607896, 13004810147483829082, 16238406080182275763},
+ },
+ {
+ {15371919503521995592, 1023245974044194281, 7465441369206311123, 1659176121116069520, 14352885355523706915, 12313186690485283196},
+ {16829625273347829325, 14329982894690398353, 13430769608769996200, 14433580840835616212, 1575399656250103267, 5631450320997959585},
+ },
+ {
+ {1308927832832721864, 7645300720509257753, 394821027033666361, 1405179974140973893, 9998561471841590974, 740549317055684310},
+ {9206896584584034779, 14330288277576019540, 5482705534907018177, 1134228745870193564, 14319406255178735919, 6723548280696025825},
+ },
+ {
+ {7488031393132578836, 4827301471138388705, 13879957958516433613, 8914235600795497221, 9625930790436045227, 14346277439968844011},
+ {8799754665963613196, 17445816559731029471, 1345966680255046785, 2291437085360476682, 17887362986581489890, 11089873753828852787},
+ },
+ {
+ {2786087897073892568, 3104846214576331224, 16466749382591438860, 18025871964671977774, 11073207410569350939, 15738740251530786465},
+ {13634745416070217585, 5695916567870375377, 3278890813204002656, 436738283047315052, 7668575393144640681, 4923414004094995102},
+ },
+ {
+ {14851753411270223421, 2820295503131879793, 17134510985746317750, 6635507126737913572, 2826933808807957093, 14392615754844885363},
+ {2507906658398669588, 10780876428782550273, 10380620345441284945, 7886790170905380501, 10231944265771711398, 16476655346301721654},
+ },
+ {
+ {13070800538562112677, 9974973058199179811, 17174935952981795715, 11396839698540407513, 6936502055882250851, 14166262455025754064},
+ {8364117452854843552, 6706032581969460855, 18006192088730697620, 14578422357554768654, 8987670312607011721, 12637025718236942994},
+ },
+ {
+ {3558937619125289797, 5542434901402954033, 5561316942068979218, 3053265417595846608, 17622647805733278772, 13078656474266295183},
+ {4792933921067825163, 12438312561223885381, 4069107248810180056, 14562883583229266197, 15526204878824637024, 13971448521721856329},
+ },
+ },
+ {
+ {
+ {13881233885713608853, 18310267182505878203, 9666283410481579841, 7622892083109029242, 7627364883537502737, 7711280318302167400},
+ {2653916418723521679, 2132538432068103232, 7384809380579857215, 3976377314823384782, 6302545514324279629, 4766374634552375286},
+ },
+ {
+ {14275770317741623555, 13472206961963184891, 14882629621446810331, 4745461955502981496, 13430642232042183996, 18385303470562194476},
+ {3828360326258537309, 5628323622401545900, 10617176218500988509, 3376138133187194596, 1896232731466588191, 4015792813110298739},
+ },
+ {
+ {17520011058000060892, 13282870058194119308, 2970088605549251468, 559824469192815928, 13074959133117617173, 13965335622649006598},
+ {14278086476506718074, 15679496005431490447, 7405358540117832269, 11499896947138894959, 6967445910717609773, 2473509465854660680},
+ },
+ {
+ {14218645527427232303, 16094073974715081351, 14550346839806249740, 17359042213091334869, 8243736883827664451, 19411709369106904},
+ {17360637257722902309, 13524203219993551359, 17248055348998851403, 818508604090109170, 17862494632117412800, 7597397595500206950},
+ },
+ {
+ {355637953695091928, 13365105901469090585, 11160916490622410120, 2871346391173754292, 6750400526492046394, 211127482213137910},
+ {549443043401466743, 11744212739472559234, 4600076762405256377, 12166210043154281415, 11432931513593152138, 17057353378977209047},
+ },
+ {
+ {11045556636417587304, 15797122882916606544, 9857941873608458027, 15587445337518508161, 16747134094270843369, 1942895756873835958},
+ {16926974666046519651, 17530543788685554725, 1482855329287158678, 4473134732938867843, 16205916098480860897, 14394504722885977211},
+ },
+ {
+ {11278672676047883003, 3127364840791393317, 14661695642506572763, 11327535520461364742, 16295126143649156464, 9195965710616161195},
+ {2883629345650458713, 1172057357528370502, 3611546183472157852, 13774548359392334165, 13259339647748906816, 629600286834219016},
+ },
+ {
+ {7869123316056211366, 8912948800190134731, 7048222560394935760, 5384815822636674013, 8276041929283508860, 10387125700457001021},
+ {5152418287465476363, 10375890927386960077, 17017201689085708686, 17352090541805918837, 12744013506722056115, 16512473688480987896},
+ },
+ {
+ {13274024037452373469, 13088421719716579977, 6488831580186260168, 12167840477765829729, 4048926237756853262, 10042315437016580210},
+ {16990037843046932062, 11650375436582455716, 336515426783093448, 5621387034989961497, 16227625293517574482, 1675664794019173789},
+ },
+ {
+ {8998700262199537435, 3948126232667015745, 6110307257346779364, 1830671386111562275, 17929406846170452655, 6510115356319508860},
+ {11701924621820907518, 624276597106916110, 7769841773667732717, 12604366378926560515, 8005398115052195134, 293463208231752797},
+ },
+ {
+ {3901247269240974390, 8083958895346723402, 13047079326090925018, 10022566546990307546, 16068843007491877327, 10422873494559390104},
+ {6431582432115208832, 7003752929540397423, 751812828597354449, 13448257234944313700, 17160453016917581253, 224281597487448015},
+ },
+ {
+ {15505836579778927831, 12536765066489116061, 7911004464200661773, 4589459948731631618, 1352286392773861838, 6489162408280759760},
+ {6654011263605559897, 8851080956163569570, 14795264073060462823, 14859036427142293159, 7090935575643363067, 15615386349502020600},
+ },
+ {
+ {13497550669973445610, 776655080972150030, 3491366472103751840, 16846118274841047081, 13565352443717216734, 16762453283994907024},
+ {12654927015632301198, 15345461380888405279, 4403814052111981055, 17852880245807884583, 14115340613623856930, 4860085117378061039},
+ },
+ {
+ {6433917609890801577, 10685400209354089382, 10418542423521959747, 3946310041240688418, 9635492151118952286, 9917954643840099262},
+ {15291273590135926152, 4720885519447161005, 17166594277722852696, 3334399947768089986, 17999815131740278301, 8130038528325353891},
+ },
+ {
+ {6629307447971988422, 5335548022504527311, 12146427842799104389, 8972801394900876948, 14555534637545481678, 1004424158638645771},
+ {6032457518228329693, 15568108340121417066, 8949689274415917695, 4542026629771725374, 7740306014723477514, 16661552339503449836},
+ },
+ },
+ {
+ {
+ {9224203646647229025, 12662711716512669786, 12163889523034683189, 2867493967382851716, 8230710800753936196, 207192902851491327},
+ {9006096280315984413, 10727939396825569390, 7414333640665166734, 8831661749780045475, 10577657048648935168, 7340987637726578721},
+ },
+ {
+ {16819901085357815109, 1200308257500709808, 17900351623796430109, 421922693020621282, 4799108745080418673, 2867647093297445986},
+ {4820563775913927012, 5975941317603369967, 14072742165336817571, 2287502568922658853, 9587001235227187358, 4290334145148904430},
+ },
+ {
+ {3832022561932601686, 7513971564898549429, 7265952414186567449, 5571401045684531851, 5917838096882845075, 9020054854027355230},
+ {17666670175994672478, 14849859059336890140, 16575133114891581747, 18181109587632733552, 9353137766555932790, 14224517063829047201},
+ },
+ {
+ {11379736539869871663, 14064395773240508269, 15376587550927055762, 12366734842807406024, 7399730532330594511, 16291653033248048665},
+ {17533123140589700114, 16874629705534527689, 2772413922918237986, 17100246637189895662, 12295986277440111980, 9880401782043035390},
+ },
+ {
+ {4600239529793568865, 13314440057685353765, 5513099208751614902, 10672101316916498735, 7845480375626361331, 13210044038654501689},
+ {9289518081528298195, 11080913979513349207, 17396978866245763032, 6250395789173560880, 16771707236585087336, 2590734212198297899},
+ },
+ {
+ {930462897994518978, 9217181672387315942, 17307812439812166569, 3609084933939549829, 16131501236725989478, 8757759376648884060},
+ {16339503747609931114, 17221587404154414579, 7488052216073421601, 4518526255668709375, 16947062963375159993, 18380636145787033322},
+ },
+ {
+ {3629310135461852726, 14261574859150072195, 12180309193984885578, 10259672401517896031, 6494810599317794988, 17046762876694577034},
+ {12098574628862673469, 10378154311416559487, 12750606156573867456, 8663374335352934709, 4693992916394743961, 357493171015036757},
+ },
+ {
+ {11833317211185183313, 10488624928285281625, 3077329497649896790, 8470872799795652062, 18163548998316849229, 7886285029156450668},
+ {18270578357826845759, 15548792140868659315, 193286806456843076, 16001981975120132135, 5119039709260849665, 9668247383740756817},
+ },
+ {
+ {9031752377320763641, 242818397681257852, 18241906657254956110, 13839428244885956520, 9537688327632448482, 2680760180422680034},
+ {1140834959571490287, 9218649627789651517, 5215286326434684525, 9085211375997438966, 14681078397199707995, 6543087453410959651},
+ },
+ {
+ {12771546520335765761, 8608812848025739593, 11046738517958961200, 2102753437152423641, 14544186608765681553, 17802705546689279874},
+ {16807367192212923198, 5264409545529952952, 18278421807570260973, 5724995243518092238, 1214809321092318114, 10853502413658374973},
+ },
+ {
+ {16212300912408911066, 1517529852090653420, 4886194125638679873, 1212252738684378336, 11831701727622714538, 7716816927665980895},
+ {17295498200608277293, 13425634643770440583, 15749163629045239603, 7303838501526289106, 14498496375761955339, 6454509847858940644},
+ },
+ {
+ {18202283120945286395, 2039362142522516476, 18347665142857106533, 17305114143802821185, 11943785292295778029, 2743738074951986737},
+ {4994513738578570266, 6348689099302941658, 15173738691317246698, 11558529557606048315, 4106465899018522358, 8424813643021743657},
+ },
+ {
+ {10424551593037483425, 17413812589282410500, 705854651896543614, 6898508513214864618, 145837834970548303, 2863236542933854914},
+ {12835826729643090586, 1958115997725533394, 280738023943547097, 6087206023074646703, 4265323126954195996, 8619647725472919222},
+ },
+ {
+ {5732596994419719701, 9319740642492016182, 8478607680989525873, 17406976540323360541, 14044433736883338890, 5843487408713771306},
+ {17866336923428882759, 6507956087423256715, 9144061297371615776, 3240732467142651847, 5257579294906270467, 13872281309975586392},
+ },
+ {
+ {12720761491485366396, 6776966272901501581, 11463518450782265334, 17251569553757868971, 6624504318270596406, 11185165932902536570},
+ {12227483127918029728, 6324632225240663892, 9478714313429082812, 12835053263906838560, 6450777494445586817, 5700121989629794103},
+ },
+ },
+ {
+ {
+ {15147392016261929612, 2592171191975946442, 7902428577086443761, 18094018070971638928, 17125131301575142676, 10403369618039505987},
+ {7782580376688466610, 4703006815182908293, 5606766158256046999, 9775555907755921362, 18306579346372695468, 18162177355143222738},
+ },
+ {
+ {12724835834640470632, 9147221313705790092, 7170406708748588612, 4886504410000298099, 17202448621988755776, 13271672497061292325},
+ {17599074313590505725, 3164548778567106464, 14831945487181112151, 10047709902632560980, 80312838214623996, 4488377331349129562},
+ },
+ {
+ {16935158672435590850, 3414074563213825020, 14976003461413697269, 16596700862409772375, 1410879114739726020, 1257343276542464557},
+ {12595581628483328246, 18321480388540739538, 16111335550040023466, 18371700889666820459, 5114856790954063486, 12702332139456970834},
+ },
+ {
+ {9865043235042057824, 6029147174750169487, 4293853667229843866, 9112439374197776924, 14635415243831213657, 16684692725807653987},
+ {6007944397888869536, 10548392254307770404, 7913056855243428884, 6568756587625967278, 595480320951638110, 15988239687909198680},
+ },
+ {
+ {6682713213932946292, 7716189363132191471, 6386782149539319850, 9799679847346926198, 12768758919818342081, 12149412740097346866},
+ {15963729003660447748, 9187947812534491537, 15358865564388966319, 17453292715073688659, 6185316189136789449, 12625900424403229246},
+ },
+ {
+ {1176014715697049427, 10940632468289921525, 1316897139158742923, 4659486690798028078, 6789215229361554544, 6689879531142462158},
+ {9044301377244887283, 3631078536826367378, 7428358043384314342, 1014081592875127196, 9053433738331035978, 8688971663426964781},
+ },
+ {
+ {13620164954367910528, 9966976914653058965, 4659720763711269903, 6933780758465588457, 8151676732205446269, 8752412244536117943},
+ {2214917853338768919, 12945088371494225060, 4601901579622551791, 15942583889923574471, 7281044701092345103, 17030848736008966572},
+ },
+ {
+ {7835462182282043081, 6752736874837396136, 1692977477997399163, 6932537288585414532, 14477842662688910095, 15049850015849067234},
+ {6173531860463995642, 15846342177339735029, 1597137878407950850, 5502938210031734458, 7415040766859401533, 1338338807883996623},
+ },
+ {
+ {140753466411001702, 2297914471247852879, 1028738292103309951, 17823758766646087018, 15769363817186087193, 4910055743319677712},
+ {15419773815255457739, 12240682779047476716, 18282251230655960630, 16713544303549254380, 13083613671678892706, 3210908138315425474},
+ },
+ {
+ {3793265829253063392, 417218602524327002, 4908064786314635338, 1898100452518531755, 2568510715793833230, 14120149645664052105},
+ {18146362507954308672, 2545351352320443286, 5008353042150968046, 10916578200202739329, 13715068559100727645, 17156509812140536028},
+ },
+ {
+ {9838244599212892470, 12509523685653687922, 10577600670943532011, 15106554186241242699, 12631690473512788728, 9169152683892800174},
+ {729650498691277361, 12159677075966957800, 1876936289057209821, 253712351947999722, 194325639412533985, 9244721047496417443},
+ },
+ {
+ {2482116316041585169, 2104186195194786493, 7202193418181832678, 15057368806550291031, 8766969826300985526, 14582594738267145235},
+ {16362045180297581158, 14472742906561159645, 14204095959602911743, 12991159482136232910, 5359117497638310078, 17218381012207861896},
+ },
+ {
+ {1272816448120968979, 9359442561097893921, 3623593162723332560, 8905232475783332533, 5169888391258441059, 8811080810485397684},
+ {653572848361898632, 16110636390338543963, 13671121912701413366, 4560998650645223117, 10962017893531637465, 12770222065189975065},
+ },
+ {
+ {3116586205508178734, 2050508606805777592, 675566623125517728, 5812215637185565400, 16747763503048114993, 979095159683344417},
+ {4422968182455831938, 2371155931114840425, 4264880153383139392, 2245458832441390704, 4962056465731516764, 13785630336035383669},
+ },
+ {
+ {11608620191053318010, 3148547465913113704, 4334059326127053351, 3242751952971024244, 15779619493269214681, 16028659557022656525},
+ {10258993644149710167, 6956689905416847195, 1219361474591302664, 15358800427564853076, 18412522508913131917, 11320199778311670341},
+ },
+ },
+ {
+ {
+ {1763123866941591327, 16900027656783472578, 11315458126277126494, 14678873114899664069, 16385889875309589997, 9608350753469446028},
+ {8365156417390395208, 9518773903920392233, 15517769310656023055, 15557612401839384612, 6818638793384298196, 4689490629614769647},
+ },
+ {
+ {7029169502144566380, 15357026717875887823, 10958228541568110205, 12991311448110316375, 18163413024255486907, 4423132467880086538},
+ {14329574318939096952, 15986250779104246749, 5149023581841912567, 857692231877427831, 6766579494828030413, 13297528373249043274},
+ },
+ {
+ {8833286985133922820, 1422352152750949632, 17916971651207587120, 9852959168575954132, 720074577693725724, 16992164406778833274},
+ {13658912852753184715, 15995732835663412588, 109169432375935263, 7153134127152350339, 1740708231718983481, 10096352175613178615},
+ },
+ {
+ {8898444536197899229, 7363197234870550392, 13859502656863853529, 16353929722932824154, 3563926877908575789, 7083332022656946846},
+ {1192602583272042541, 11691701210306654678, 17768977285493519026, 1325595029028298323, 6083154463528028942, 9420136318321879646},
+ },
+ {
+ {9357643633468667166, 9777626262221569724, 13091931063589755125, 7867107412773768943, 15020623651884666147, 12089257806028258277},
+ {10848050713527447877, 5954793401847436243, 11016251893792937739, 3094692726578056666, 13335998362365960105, 4456549853200134134},
+ },
+ {
+ {6615550875184532162, 17802299024252154693, 9829209431047041336, 12066910166505767332, 9658085204117106784, 628187108833105552},
+ {4704248642052554113, 6397156614024370344, 11345180222991965460, 6233845157183108927, 9777374421972523308, 5874678333002996612},
+ },
+ {
+ {7822288722540972332, 7952138195439261347, 11169290659098881849, 3042519944988229158, 5405508523428790131, 17939670977762776799},
+ {2939158258373740623, 12697341633646165676, 13062397760872702525, 17176707327834230530, 15615175546165608557, 8494997402872669401},
+ },
+ {
+ {15755839765779794871, 4360301701503507242, 18156570609668386254, 5119543763469609383, 16128603506838286124, 8332918297114938687},
+ {2581195955267651639, 4444333459878089434, 14369377281187161259, 8296332340199089840, 16659639448818898530, 18345037457345897147},
+ },
+ {
+ {4758277028832022225, 11683847788382241419, 515925726413885095, 3693914633629232851, 1334049558186740102, 9903363943316486178},
+ {6186305948183309326, 9076841023132049489, 2269793805693240470, 5838292741631995685, 15624692348115370947, 5174016497034202999},
+ },
+ {
+ {13050258405219282279, 16752510433331299519, 16577830848329560188, 14788323970814757487, 3531220681642194883, 10450279241367329525},
+ {2241246527454921768, 5961237379972381806, 17018546346619625080, 4693825024640504146, 1766972201817885924, 12382031514930570953},
+ },
+ {
+ {14186663977554217418, 15921452897246352532, 1670746882987574783, 10569214187154214751, 8735916617091829853, 4778008137059793493},
+ {12230336867909671050, 4713018484448365389, 17202143122302469643, 709747344404349977, 11975499930396914498, 17122512072780824252},
+ },
+ {
+ {18302357690866390301, 7110969485339785348, 13942032347351245328, 5693499076189202693, 12668677863581132895, 12259773033298583409},
+ {9466495933006422543, 11511978512020081294, 2926450004721272470, 13153116633565406229, 11631506386728977206, 16476012745611483528},
+ },
+ {
+ {3807014191641283110, 18120911889946646293, 6904037019088813739, 8534576748083079369, 7162583560481993923, 8819640486580967436},
+ {440118242100524191, 6463206891372223528, 547302312933082159, 16377841440620731411, 13653804506016223223, 11521845620308131867},
+ },
+ {
+ {5885835281685587260, 14732488327182469839, 9123122330185964050, 7188708702276480952, 11527895050614825468, 16851231088680010599},
+ {16816057606689618333, 11155368217836023835, 12624177727172231086, 16592926329340617105, 15223575869568336594, 7273522873166632571},
+ },
+ {
+ {5641683582398435967, 4216323241605386457, 3341345023369259125, 5445036994137252291, 5739257813022814747, 14500775521438222305},
+ {11851051397499831538, 8952633600654017343, 16150283802430207733, 14278765209911766161, 10318996485999417200, 17994297809574684578},
+ },
+ },
+ {
+ {
+ {12250833825141170631, 8405485792690252918, 12864232748520003516, 10788258468673581522, 11856270866800692413, 17612133403939424877},
+ {6699634647130975491, 3731182997054981008, 3644858741145969783, 15278087383684100287, 12254545970866866689, 15919262562293099205},
+ },
+ {
+ {8514722413728667145, 18324970319650698111, 1140876005394585162, 14935735778864688897, 13574593964511010162, 5249313883818330346},
+ {7116828599638239878, 15508924984182297327, 4202376624751087766, 17328701599850278205, 3030575546715635832, 10545614704608166749},
+ },
+ {
+ {1712884901460314968, 9844020979159339847, 6421369648072212416, 15296006715190099259, 14597799127028308590, 14859929927669149364},
+ {6921131700509172807, 2364609551036929704, 6856710389833844455, 12969257838905572572, 15852094516432192950, 18132001333910704096},
+ },
+ {
+ {17180792802575253493, 12600911473819356885, 3979738952931545371, 897682737326728136, 3061890262390512969, 15521523824750041606},
+ {332654518124076169, 10307766275571297144, 15915817537662916802, 8907165492937349795, 7857497823831313277, 691902339344201455},
+ },
+ {
+ {18398586274195528059, 15773719058798786758, 12837048689216171565, 11953182511721889201, 5401493090861388884, 18440361993747252486},
+ {5508661908202617743, 12788348494283175173, 12802197537676893221, 13389178143916130308, 538230151218415613, 16302560609031790145},
+ },
+ {
+ {8617925644825956245, 4355127854548976134, 14887476132899231451, 18298212220260618556, 373812720990200546, 18003600147222108981},
+ {9609711738554496849, 14532030487725870587, 7449281719849717093, 8469200687346562573, 10559473347725150336, 12054655914827657608},
+ },
+ {
+ {3996011418975128202, 6210410771156724227, 16016243241151657273, 17559838693774705198, 18254204752477848622, 5017013903626038628},
+ {11728280652213039591, 18003698909909675482, 5616545407832730442, 3102086566055618083, 5927895418024958106, 18268521772846570919},
+ },
+ {
+ {4353949603957647042, 9085101501655849465, 12908896052138981424, 17855767860621714692, 9492202381046329533, 6493982940855119418},
+ {920636089493927515, 7492445422033208514, 15300073048779302285, 14892838342609729650, 7806275110911940261, 18060719008911082625},
+ },
+ {
+ {11178478997628375018, 2538869944843427535, 1225616675740174641, 262785678366031569, 7237556322327894647, 9013462934359109785},
+ {13984952488792193847, 11393155007624702919, 7707447211005168284, 9473882403030139097, 3744543934645693007, 552942797664059813},
+ },
+ {
+ {8830021259611276202, 14238468777507748310, 8084636387556533453, 16267493202640556542, 11525587568835060457, 10481188297824139279},
+ {1115271124367336174, 311879893672637356, 9462111876944106068, 13040825816840411547, 2701770737309674052, 1508687001335391359},
+ },
+ {
+ {18280457447310560954, 1268638543685594562, 17105501920321557826, 8343192844895939858, 10103219901911409344, 5772380144868336032},
+ {3999072919154635477, 16332682335690661625, 17160109792742439915, 5532275933255506759, 11912464980270406151, 15340700818574378247},
+ },
+ {
+ {7968741417565336095, 4204348514802527406, 10647577904042939816, 18088419244287416759, 17463728543868140844, 8457835342186140450},
+ {8996396783317142351, 11593744928362394165, 1118739296758409498, 14422226999371433227, 12625902505025381474, 3115381790871861597},
+ },
+ {
+ {13500267717482823695, 12826999588757664414, 9339382239162750836, 8128243301916864690, 12056736855957358028, 8196723657625083381},
+ {13279394920737824036, 2958586812346659937, 17330699213847682717, 16087607133092967162, 16401864758434998681, 10039877192861155006},
+ },
+ {
+ {671802191804153328, 4139782484917432247, 2458696726707986631, 13509154007102964993, 17371423440074958223, 1797826281916833787},
+ {11733261849393823747, 4590492414496687225, 11885892654308987107, 10686151607542826668, 1505341691600550175, 14056863349008723570},
+ },
+ {
+ {15792482088894033762, 5480086515083249209, 11855064859109876087, 17787767953015637343, 12667533478417710162, 7387754975679279919},
+ {1207308571340156947, 16667444176920164891, 15975281376773688805, 12572215559198527609, 14287924549904848354, 15022984237456793014},
+ },
+ },
+ {
+ {
+ {44405927858177408, 5350377411887964085, 14455423006632940030, 5051888284479827915, 18289264027550181045, 8742179469806049698},
+ {1965293239814067675, 6296618101654059964, 3622639221300896262, 13683273513375487727, 4967193303260329462, 11081296004911608832},
+ },
+ {
+ {9099612492305855642, 13667366445618114651, 2368345502115408891, 355808025346965495, 6486699240755468623, 17662463045646732595},
+ {13873320631421175736, 5934257143872775779, 5746672378903457427, 3704713689249420299, 12753304704606405263, 3217678872185309915},
+ },
+ {
+ {16414774628626628182, 32433971592372646, 4545225813507032103, 6836784835149171090, 5605550610705879937, 5548109210523028334},
+ {15540467984433628639, 2461569588551261176, 7976753374299459545, 7581883501804398076, 4495381352011398463, 14281052217405746417},
+ },
+ {
+ {11076024185715957092, 3756765523882542942, 16665914572503891748, 14424567262466352621, 3717953767462280879, 16707839638391689758},
+ {16892433804273414193, 8340332951294898930, 16313859462232353177, 13057798224010923708, 2523399837778976306, 12671960932364471005},
+ },
+ {
+ {17680998608405488653, 16454370296773597713, 13745267107063112083, 17812400946273208067, 6537239167722644731, 18154061302206627196},
+ {14732093356815809073, 5178617476103754703, 13809803262147327548, 8824415336739118563, 17720661792494399232, 332116945344768606},
+ },
+ {
+ {5904671783816032987, 12111663325909606562, 6880618626717651658, 15875709066691863243, 11314665215817792920, 17321877266325783037},
+ {15530273438553475601, 13979895649836346625, 9161871406971555955, 8903894066085514940, 6153387203496648040, 12571794686069326995},
+ },
+ {
+ {13016093613163620702, 11300489640845417680, 12781125362901831503, 801538149314788550, 2606593691508046519, 3163799746260716745},
+ {7990809893160984636, 14408985047470077797, 347123455262478363, 13992131173035179306, 11786974102048305024, 11698441235974567349},
+ },
+ {
+ {11403599927368253583, 3279567955763272667, 7486403755075843180, 14522524358510212243, 14041846160447403772, 6435799871106467417},
+ {14030691594486470451, 7790983720309604281, 6582028046670807563, 2822694964154013291, 16463582068215434850, 15072905663834443911},
+ },
+ {
+ {3407741673335114913, 11737534300849159723, 6401636175760439089, 12664954507386771017, 9946081910621171804, 5351127802521315559},
+ {3173915260803124860, 10290055371665382209, 1714775078878069738, 10809651193197592847, 7937909731024783757, 10117809777580180877},
+ },
+ {
+ {16234864712073389023, 5314806349780370870, 4543488410858487687, 16873514203217580096, 10926710397504298767, 9299654171185615615},
+ {15666939264737647752, 631855467695092014, 12193734327123054559, 17500404761181864020, 5421672177931299996, 3181351099583887620},
+ },
+ {
+ {9865914660144246756, 679604583562241462, 12921501903321601694, 13643679714879784509, 9802439286503205145, 3566349991748818559},
+ {3712245593303086298, 13460846416004687749, 9489981526591301543, 3123337991328400667, 4486301121585605289, 8667920552833478113},
+ },
+ {
+ {11007825084924597849, 3874134660444866478, 7483283914474628520, 2947665680662261000, 18206338370303112208, 6893224180612988447},
+ {15534747185067764117, 14985089178434671491, 3753309356845273643, 15570826499824234809, 4279214973488175555, 9593222558729075908},
+ },
+ {
+ {8602395341968076463, 15871701026135700965, 3712441164876432259, 7899892413623964244, 2712639600130105811, 12974295924845123944},
+ {12399828322355686123, 18332014219357823799, 16863123510502888446, 771187562270410330, 8994686144476825705, 8686520534353888933},
+ },
+ {
+ {5941138557129179410, 16597018407758618077, 11490599640002981607, 3438708541253264112, 2003804289091704123, 16058751440908460062},
+ {12804590885840718391, 1477090995170106511, 6149788628468626331, 1665866219994921367, 674399758826895796, 3022438717214642932},
+ },
+ {
+ {12649661972779445664, 4013263712261539431, 14554669017811351896, 13226091073296320692, 15697669929212159615, 10884886018241841834},
+ {7538090638724339870, 17307058199744561660, 10160210242875571595, 18329720837322489027, 6424491245976098107, 11439659459774047524},
+ },
+ },
+ {
+ {
+ {7518960189446694562, 6993197482502760102, 3624948335487031629, 3298603013801970257, 4557303586291885385, 513965581431450258},
+ {15631936952275006776, 17646865581595831452, 356541621832294767, 13550122502020347389, 14318884666702203958, 10960356269253451077},
+ },
+ {
+ {18088774058581706331, 13144474494348168686, 7944684987556043669, 14803417489453188919, 9523674128757303753, 11078534252464233827},
+ {12388996124243602932, 7847055437820113788, 8655700446678160057, 8000087902999810104, 6845432560166828222, 12293660227730163310},
+ },
+ {
+ {4121836826461176490, 6993311364897236225, 5980001915532870045, 9191387104629167574, 610736785956912723, 16369608744481332444},
+ {8192853368245745564, 7830351299822135372, 7708271704384679284, 8692236521179851966, 4729288028381163761, 15087261038869840952},
+ },
+ {
+ {12359675760240320823, 5017343929380605284, 13074869016670236859, 15189571864632066092, 16437432446366423946, 10450373967097078613},
+ {6473521102572105839, 10479204864703445101, 9531740430353536824, 16747435491821370083, 13590492053866597783, 13972781732492559558},
+ },
+ {
+ {13526124267573528663, 8270416783887521310, 12350520572663083733, 8457342880502864923, 9576612715781561966, 15585819794980473675},
+ {12920791615644428441, 14682599939111671380, 4336061001815369200, 12825352708863745934, 13689910154205327554, 1285753843825672638},
+ },
+ {
+ {16260954862601212942, 15141701739798325327, 3469367818986501585, 12433553164601433194, 13397654412997304037, 9513462516209648688},
+ {8806424456394813714, 3283666376713533561, 12560245143465260449, 17855428090864138328, 9493604162795122493, 12112034994090758518},
+ },
+ {
+ {7529184601583900565, 11129864964563043004, 7211397676801058227, 1363637554105090981, 17895272493932277282, 3646615785541938193},
+ {5125329656455924528, 4567149614941497190, 11074336456476606030, 15476194487447194466, 7180704409380789299, 13835694922459390849},
+ },
+ {
+ {6367771991991911192, 8601334531593085019, 4312076039860441887, 3349991553201651706, 9823362064268535912, 13889910441974079325},
+ {15204812249791097149, 6041265790239125946, 12691543265160543238, 10306665514263435988, 14767325902815340861, 10379404251573981879},
+ },
+ {
+ {5287451048506707013, 4348959316051807494, 2195731310084877410, 10147908105969953285, 6603704322303743751, 945595692043651424},
+ {8176294556983740459, 3760024494015990869, 1596032494450454490, 9532812003368449590, 11266525576652515928, 17675618372058806611},
+ },
+ {
+ {13713835993913486801, 7766578236545921171, 14534805690298336184, 5666909695385346186, 8839507885361423259, 4694981751780603071},
+ {17723407317459630378, 4443283331360111884, 15519272406098385785, 17520713768065915126, 5696872215251363099, 17703348601524604831},
+ },
+ {
+ {2164215638320833038, 17121084597475879972, 953559170830523874, 9824463983667276307, 14122056531227172478, 17378911366973403187},
+ {11224042629539202120, 9891688504526640813, 17195883541507550243, 6329564008856258694, 10930601382660244797, 7336662048169067742},
+ },
+ {
+ {995921546101717569, 5828224904318233156, 8250787968679150139, 18216596344319934990, 11999487189021985197, 12415115477515701118},
+ {15186145702255030700, 2113607545324837959, 15288422804320951323, 6325938775505173826, 10420910094419414217, 1927106976056222556},
+ },
+ {
+ {168373835175327962, 5954547085671796454, 17463611069868415386, 225394552152764446, 2307768634143069290, 8042600063379354713},
+ {8117902579268801666, 10832127345976105061, 13664993000566573485, 16355061628853536029, 11258951867911128064, 13533986249738933070},
+ },
+ {
+ {2256466623088827889, 11490136642947524148, 10955178908605173832, 370819964681409304, 10493984649757869556, 5132627896758472655},
+ {6336091067505438921, 10780074837814789259, 16645850939014586085, 8079913953781307235, 4062116077218792165, 9366190569985953070},
+ },
+ {
+ {7040462669310098393, 5297122089825027264, 17836763057295674752, 8661859425168585511, 4207236964581867607, 16977003945502762190},
+ {13639729604193903699, 3075230971516641826, 12603679116623626959, 17929390171247529438, 4340045624055496198, 12958507460470817783},
+ },
+ },
+ {
+ {
+ {13603267959306598193, 8693043305222262466, 8385036129731204785, 17301749092100773230, 17293119319290412054, 7997938435970033452},
+ {17626685223448488356, 12525034788314564340, 14661668164222586257, 3322104272345643135, 1609592810955141849, 2549513802617457284},
+ },
+ {
+ {8798435167269930640, 13070514712052083568, 4736461614042760363, 14206975230185412328, 133298083050190689, 3881702371340834770},
+ {9708307132029784886, 1190148038752103456, 6413103290824094803, 13481632314215227255, 13825269422873963023, 10412305108920689107},
+ },
+ {
+ {15788775674106557193, 2647031410423879993, 11824234196304518021, 16508012954631132049, 2851858215553102032, 9031676847819265350},
+ {17056269066330629533, 16578781453141932588, 12149327146251727097, 5603735625820741662, 6198349307184960758, 15317416179414320750},
+ },
+ {
+ {12101899190913284916, 9608769495503265584, 15201140684891239564, 6542484635045229965, 2916993459978592676, 4802334108209352673},
+ {1973336680768349386, 12679196129410828967, 13463385388413200455, 9654153036115837558, 16342609945030294957, 13480152702062555703},
+ },
+ {
+ {2899711161363462805, 13301605990446182752, 13405176039316030122, 12694240906495353636, 6028874869507943666, 17436011221762298446},
+ {3799912876591532513, 3287947124836704136, 5920239729516121972, 4658851572162401105, 16206677545960268727, 11754748256988512736},
+ },
+ {
+ {14829746466477852272, 8785495584277675921, 6423194551544767939, 692454830006456519, 231353646984097766, 10478691929706490052},
+ {13187510740839857109, 6329453754316993892, 16082691749983710504, 9140500440454110398, 1359919744529707405, 5867635887532143880},
+ },
+ {
+ {8283409025155305021, 8326153006408425638, 8192125950875031557, 12491925510388767602, 15318184472466947145, 17174845401039236071},
+ {4024628118229282985, 15541859898701908579, 14997151867577432677, 2742910007129941237, 11281936698759777841, 4053513648766184443},
+ },
+ {
+ {17504540629335028708, 10934158903032446529, 10440102841886099171, 14945242719790343095, 9216441307898357664, 9638980805394197765},
+ {17980359344968817157, 7448102317851383292, 6074361339806645900, 13629660188149307441, 13004652602731784581, 11547813582289855464},
+ },
+ {
+ {5835495230485007597, 14350772393378726062, 8747233229858209651, 3317935002292804215, 1073070181947964939, 7460355407911594663},
+ {13395345232316724375, 10346078775799124075, 13798478435639795560, 1629058324627559163, 14747763100431935680, 15299073526901740916},
+ },
+ {
+ {15651423385292143727, 4846110050285526280, 8366261324209130800, 18348748562705004572, 1191482937147378439, 14318163684990419654},
+ {5828426112534678889, 15752453922521080195, 788797916869961805, 1050155050965406592, 16245505178409635417, 4624404334332384586},
+ },
+ {
+ {9519649412281579636, 15518026566172043316, 8230071711608174064, 15501328228846578396, 15538051064956598926, 8638696845481203911},
+ {6545591773917305375, 5939294308617001483, 5916517198820221821, 2183353220433638210, 6608710467805325002, 6375674496051123629},
+ },
+ {
+ {14599741493080584733, 265043095998502009, 15590157843765788733, 16283462652920133690, 127450980034769700, 8101994233918053876},
+ {4354404904705327864, 10527772165440476297, 3472213175562207788, 14083669454947716927, 13275423539077686885, 5338095862941712423},
+ },
+ {
+ {1235012355674231855, 2090134554838509585, 11863415298782072711, 18023496095060787824, 8410498900143253177, 10594109983238360693},
+ {17550081202781797913, 2173651076708559007, 1186671825722566228, 15233030551314777921, 9888771203060958359, 15468843840302879988},
+ },
+ {
+ {11461190636282409817, 14308116091595492374, 15509337886967718014, 3305520874657987597, 7626903910031076977, 3082923764612175270},
+ {14811303431165168732, 8838542203092895295, 16984937260064502824, 11714999386942378861, 4897363879848520603, 1001099817032265897},
+ },
+ {
+ {3637674483014131572, 3117885916559390287, 13017322864107767485, 11567467141438885182, 4996993546175421383, 1767669170792783157},
+ {6426400534208188423, 18081501770343787332, 6628088911946069490, 15549150917856099952, 14206743374618728130, 14181348296669151521},
+ },
+ },
+ {
+ {
+ {7989198143366045630, 7010829800355578048, 8546053455940578601, 6881887443026808498, 15042102422681491309, 5420645403520488369},
+ {10849333199099746435, 12113569487191320877, 3246658105605143184, 6336537385102402345, 4597429228667676601, 5272271520244435977},
+ },
+ {
+ {14306638724632781511, 5757106316922152519, 17125373792178988648, 1583100757864258958, 17360083944987639843, 3920600288799646538},
+ {3331960036348075865, 16584227479356001542, 17306396376373940447, 14759099067984370905, 5812518892646247762, 15782678322655568927},
+ },
+ {
+ {5413193268301814099, 10713883248352187164, 13410675108716405078, 3585734128190446197, 2777085511140743921, 1755162931158100151},
+ {14101275991297185856, 1707557804525078570, 1967729659696736336, 4823950423327664451, 862801022254850239, 12435639820717247064},
+ },
+ {
+ {306679465712635984, 12152848986799385191, 6883719236152567513, 12305822533289967588, 18402162608409722972, 11108631399674712772},
+ {2571321336657345725, 5282906424085283199, 14072199601206037589, 6326969628422378510, 7257345697465293614, 15327414546710657910},
+ },
+ {
+ {12201144960808694291, 2266284960898988252, 8424553153700131642, 9167059607375209949, 7355136040026239658, 2541478780035614622},
+ {16506463005253913043, 6582690723164939915, 6599951765449856592, 2404559737777750863, 8780347760287852096, 17846128204113467575},
+ },
+ {
+ {14860969561074928871, 4809849983665237968, 12242711789150271258, 13843481869678455226, 14175051524655250463, 14334810640036579932},
+ {11575444057028938068, 1682341910648266103, 10938858063273491391, 4341242396287801217, 7613196676950010801, 2500752005513253600},
+ },
+ {
+ {12440061027889587972, 13927371198268500445, 16154935051556123915, 18096961537601388555, 8424464497516729675, 2313786208528450307},
+ {6509771027110309267, 3390162382665127855, 14587068644788920599, 1328169351793106371, 10509868205576387317, 2765759870517196435},
+ },
+ {
+ {2900406544253496059, 7303698760912649984, 8691265875763036027, 9197553224083694706, 18352617242438717063, 14750961326114925844},
+ {2499601025675361076, 8368427257901887897, 18132146080106643208, 1110936544903604055, 16261680704811161606, 15090938849013897133},
+ },
+ {
+ {5870727586880606917, 3817524309119245910, 10695436097727319065, 16784573325267031769, 168386867463964139, 18415971011491165889},
+ {13492479568749674699, 15834291406704295009, 15705574100744201096, 2398014061321015822, 12468258805517123137, 13991053711847966585},
+ },
+ {
+ {4169557306961711707, 4015219248181969243, 12214392270444620774, 16050078587473704262, 2784750252993704422, 17395896913298686268},
+ {12843958296305025565, 369831555843170916, 11677678398942896027, 6641755134933316997, 9109097098896451407, 4781721487698386903},
+ },
+ {
+ {1392099397992149225, 6653317869794434155, 8261302057061700743, 17076785984088590530, 12214500026419464516, 8183114113550743923},
+ {7219173278975390146, 13854678885102808519, 52819572796104662, 14959508682837821268, 4666245422256363222, 526398188884660107},
+ },
+ {
+ {146377064121748072, 11117625842528721265, 16508297934345517505, 13963807611317318780, 15513104757270430459, 9486443679271300608},
+ {8499000076286979115, 6314693643347125094, 15660966474005923460, 4849442041573028425, 4417660487771261375, 13534789771025100765},
+ },
+ {
+ {14165452728554216170, 13694105377023575661, 12112553140758207627, 13499340770701043478, 10416006904191195926, 3543462727896098709},
+ {4066244216336615064, 6569278217794074558, 387967286518318157, 270108989062251217, 16349063922035707389, 12438514695154831396},
+ },
+ {
+ {587040577811041823, 6936770533105343364, 16776134995012734224, 10277362302644779257, 14649614714574251627, 15051066325824432588},
+ {8291129711414316681, 9551002213274431576, 6676196382269508743, 6874374105452669031, 14751197759974741889, 9029571467065764667},
+ },
+ {
+ {14428258617344372219, 9908056332586719435, 3405976719581642508, 11387547871499772614, 2994350212903836640, 16490884790412572450},
+ {11355150127282843741, 753093375853717498, 3493937923504423687, 8754398622695613018, 10230143170990690589, 8594587862090207256},
+ },
+ },
+ {
+ {
+ {12025065147930696764, 16395321909258498666, 17254275975074883492, 8698446818264119462, 13921708813901601023, 11317527677055938762},
+ {8372735897264020153, 3995509821790542114, 17844440857746011127, 7150508535332996970, 7856356095447891107, 18425881274930431587},
+ },
+ {
+ {3868179882159761840, 2264438469296879600, 14040732472308090308, 6176899669975159097, 7687708097392128226, 15700212396478219258},
+ {14432188665158358139, 14093430104632320380, 6658435239629637912, 16817255952598430533, 4042186219830704930, 5581603010754890001},
+ },
+ {
+ {4194420838030196541, 1333911740513429952, 18216514596089176140, 5522562721578975413, 14019454638832409935, 16180950399634304052},
+ {7874407470843020638, 16700170713448853543, 13238545221113708433, 17341343942946679971, 2492905945545894244, 6150964092835885281},
+ },
+ {
+ {9160207688035903546, 10421934692844981887, 12973343349121023222, 4588457373452478724, 8930230292368920615, 8764471311578947963},
+ {2287273259416958217, 7105649602824330442, 18442962768087545765, 6705276737238885061, 577380682084602753, 596787676998246106},
+ },
+ {
+ {663478452777260243, 16283602145029174982, 11124685403360893629, 4781563535459832423, 9323851769832103844, 18097969442952761286},
+ {7837190984970827968, 6643489635464035580, 17874774866954327612, 16430201046158097201, 12045640219457858446, 6223326808284158866},
+ },
+ {
+ {1657492744835373106, 14305521459309102400, 3869067393311496051, 10037235265268002078, 795960391565742762, 15570341341842321230},
+ {1416215615272420305, 3844160609182024535, 5420451137511849586, 1949162974936638642, 8451435764323596076, 8788000062158561339},
+ },
+ {
+ {13928009376574601896, 7291171400028186761, 16473025605005992076, 16638477947212814985, 12047811767976047467, 6878298473296735831},
+ {14902080744924353595, 11030229314796494659, 12098457778174714596, 9424760405850702049, 1497914805837158259, 3249894799792534256},
+ },
+ {
+ {3590247938838498240, 8806692635119047359, 1698761057036684647, 6343574101558802001, 3746591523512207350, 16046850941587493893},
+ {9375703075091035250, 11484732524515574701, 10605373578002057385, 1718556460448813872, 228246291976542303, 10311368155034743860},
+ },
+ {
+ {13497031464860502366, 9397761439599875485, 1318541732049664766, 15374121346380046672, 17717429548790284664, 5159388673283835821},
+ {13355298244502234884, 9645381144552778188, 15577838213165745473, 17224721347234155862, 440552977874015809, 3485586753351733297},
+ },
+ {
+ {3516261141390918044, 4335927420212454420, 9153235025059865419, 17728981115683781993, 5407851417900531604, 15034043952911725703},
+ {8360898999522732095, 14154807375320553311, 12720119837506596047, 17979696399481662488, 1503715168515766653, 5169207090054716326},
+ },
+ {
+ {12162980084934091895, 4233957881103578519, 17170356997174783866, 4243094926092018555, 16613894431916307329, 6606193115702532471},
+ {11789634164556738593, 996991792386448418, 6962245779712200787, 4974442952401074444, 10897550856395547118, 10995646432875528213},
+ },
+ {
+ {17102632525353385033, 4726908628368929907, 4247885372815903947, 1788394963141125417, 15102348628480678182, 15128367306207476457},
+ {3972599649912410141, 3921603030106002483, 161288956218192081, 7338348096295758314, 7143236202635983396, 8624888890090620099},
+ },
+ {
+ {6331943491044463866, 14228029352154794719, 2947037856011623469, 11772679753184455432, 7465692292318631028, 14289953244793202905},
+ {5134250825128073664, 17656488618598423937, 16854119307556681012, 2421796355445999202, 15424387029136720472, 7987182987578392406},
+ },
+ {
+ {2608951835161989111, 14588356830133736122, 787581713316032185, 9896238476586952494, 4431066364605451791, 2903280281635265356},
+ {8247495622914418748, 11683109383984515972, 11561088616384052872, 1149723125258168883, 14529556212737756877, 8912094569277399627},
+ },
+ {
+ {12789135954360228010, 6780075827365568571, 8810224435698828502, 13446476233477343302, 7214376817335187762, 14458570598448093615},
+ {15615130062596991276, 17246585199766548683, 6890348740309790991, 2462037107533762815, 14348419451565630896, 5342642686877329738},
+ },
+ },
+ {
+ {
+ {2905464083126352106, 15382523776645615659, 4208326436876253066, 18269526693635159971, 5790854390728730522, 10746880826459375258},
+ {8662248081050622522, 13826611872785505390, 16436929138283976510, 6326154269244482967, 2880171501306902421, 6678386436918333169},
+ },
+ {
+ {4081558640315641247, 1910870639571469881, 6877171221443835842, 14157529767685404063, 7740037116920621887, 14764919955763458331},
+ {10267569861886921827, 2529844482184019983, 3259055836051436011, 12721359948163822535, 9659485045930382444, 2682511237837334805},
+ },
+ {
+ {6257278162168451228, 14804471928370352903, 17266243102614466221, 1834384770768531640, 1291836003048662370, 6034253395610136614},
+ {8743066898222911631, 10312528166509794599, 15491664890314077124, 9459311605542100872, 18188244670802339459, 11837284714306023066},
+ },
+ {
+ {7384073074546884058, 13342536901934035362, 1796642291707654196, 14924003300567702780, 17696513874113839739, 2170126944979395945},
+ {15655425421070558346, 9046927642313144782, 2539141704545898189, 2313651783662755544, 10988582385563170062, 10708895281446879013},
+ },
+ {
+ {8049823402121284107, 1015261354744953141, 11001601026371351857, 5188408555842360927, 238307893716713840, 9306355674483778871},
+ {4882696385991861541, 10855316230146219920, 7297309210275934874, 2129929538911047623, 6105877736586220144, 16540174430975243109},
+ },
+ {
+ {3846553462991609521, 18287444857448547300, 4860654016674888150, 12102465094571524845, 9665319422122056880, 7341976002114379270},
+ {11450690261526312033, 14359620265055539834, 2129613678351742251, 4154310935547659871, 17819794191738178105, 12470777076380361738},
+ },
+ {
+ {1820231603330482333, 8197912473886688932, 17564410961062418802, 5547060850511847496, 14784446920715373986, 6744079834192692285},
+ {8045763461421446101, 10946745933502697155, 3334195578263537309, 4155813158460651681, 16304254047867190720, 9129755894729457353},
+ },
+ {
+ {5858270368901180686, 5650671310031369526, 17358036986724164367, 12272486751450316321, 8118942123504245440, 7605341247988122771},
+ {6460053483168551327, 13974980628946427300, 15265461046774765196, 1434115779622874584, 18256968071394468929, 162814016140883808},
+ },
+ {
+ {2332162608871511375, 1868148336815015635, 10688622518437469162, 4535570520634779462, 5558414024910369005, 12846608910105978921},
+ {10182583164281883737, 10225962215828780864, 6647302228613027609, 13926246345815428275, 16444874778110264906, 12426728125906820495},
+ },
+ {
+ {7319356743643981758, 17290801891240533282, 13680538635395325509, 9431898857998460284, 9654052594732493588, 11216128628361019165},
+ {5480652586120031716, 12264251589473554648, 629460023613249876, 13888625092415164277, 5982727213326537179, 4575309381338208673},
+ },
+ {
+ {9318690217895942273, 3885888063527830607, 9646742812304452818, 18262479706556902502, 3620133047155459299, 18388160719790129736},
+ {1914761448944519470, 9758008627466255788, 18418420068679038400, 12896122466120836747, 10890035278343231294, 3646620616965601722},
+ },
+ {
+ {7320055252736060853, 1303381685630079106, 1389396534790493913, 2784451395900022634, 12504771187503822515, 4227927385881340861},
+ {12071605771892533802, 2754948426319968897, 11085204177816817620, 182697453064193454, 9227505917134720328, 10621984715679088732},
+ },
+ {
+ {6220826937720121878, 13229947210201087101, 16420906931171635230, 4228069687275537145, 10649909068460962812, 14974797380841429985},
+ {2099387861104913886, 17576472277696906704, 11384913496578412357, 6794363617398915145, 4335808821084623592, 9733284623560895058},
+ },
+ {
+ {1755145516295475548, 15247893042361836531, 5738179788894433569, 11279068420917658317, 4290389521159722087, 14365410757465934654},
+ {7291605289247002500, 11812770986542211322, 48289046067440439, 1233419001099601995, 13182799439408327769, 3066909062077171440},
+ },
+ {
+ {9251396949650789431, 10964669964980210420, 18441875565843264347, 10766527953487419221, 2053504370587058697, 1120548999764652480},
+ {13156388621520434359, 9488348829267331096, 471226560476910099, 16729073468825516463, 6843824047113762587, 932518740561235009},
+ },
+ },
+ {
+ {
+ {8005022716490156292, 172470276668278570, 12027061491585017361, 12668206184074529368, 2383566891938055597, 15146733507906754355},
+ {7778895097740687136, 14251829674046124789, 12738613561581015447, 12051618485845136097, 9897878846738638320, 7907234926402663579},
+ },
+ {
+ {10065252555514097915, 6386861198439688962, 2775722427207394938, 17952746237366567827, 16390357373389037601, 13972513434252720715},
+ {14700210881752165375, 15185652113659869954, 1923970725644198719, 12211789976130827254, 2585886428464543151, 5288489885799434816},
+ },
+ {
+ {10567691911424697649, 16971243382477786521, 10251841113143443125, 1687737920922643646, 3746145726913279586, 4786791138611857452},
+ {8476041976560261273, 15570593593290952605, 17648077308436960175, 5839063770228102907, 9706501119134890748, 6475897123160711932},
+ },
+ {
+ {16272681470773409672, 18157143820860266346, 6874350001337166182, 13501252460259511743, 17259688624947069488, 17317925810681384843},
+ {17458673210103455399, 8293651101654188440, 4287591827563518608, 17477963865483680843, 927677871568183454, 4257762449075391782},
+ },
+ {
+ {8076033399227106890, 16533143032280607906, 13521927650080284497, 11510742235496409044, 773074617642472847, 5480268378661415914},
+ {10560774877949781007, 1551950937282276704, 699681785268341449, 139399977164437031, 6186795762861491620, 10490971431428917955},
+ },
+ {
+ {9190090661907342314, 10353817139393866538, 13722719350565763089, 8086989101739556304, 11831125735426804282, 6527360398769008658},
+ {15661687200097987699, 17883372000534567314, 18228449294037686953, 16276062303086046777, 11067473153184484205, 5270793026007762758},
+ },
+ {
+ {4644322026860926003, 13840860549436432899, 773219189435319969, 4214545261061108721, 7349178605060789384, 14108663996709041985},
+ {15086368808776131018, 5873313287260733157, 10958955294835479142, 1029190239709350397, 16575148148212140239, 548824197340738121},
+ },
+ {
+ {10538023507650655080, 6405097420742099168, 3772328850901597675, 13431850381701237922, 17301482879787833065, 10960182504575418989},
+ {3458141607490423836, 15983729892825441020, 6674827306666597406, 6998631059837206710, 10452310379665360233, 12442577005422810090},
+ },
+ {
+ {6357449289782518654, 5562676255948928403, 4267773668505879348, 17042466998439942315, 15445173922414204273, 5045693191253100284},
+ {10888452729312376066, 7286005702779769520, 6310396517254538489, 17973884204765258948, 8552375160420880806, 9676186921102873385},
+ },
+ {
+ {5132936755125381856, 13632397944410194731, 1195217251618711717, 14192521157173466766, 7136777102122506464, 4992685048206006386},
+ {12758444670751645174, 14211008273195363585, 15176937626622599827, 17548458272828201751, 5057260891126473883, 9952036262648196850},
+ },
+ {
+ {16078498188091009803, 1162033447512069931, 10059309132406299500, 8829937177340388978, 14448159399458657941, 374069359661101813},
+ {13367213118297441109, 5274140197674632268, 16907854435294080281, 10813040207319437761, 17981016036466195869, 7390729432234187734},
+ },
+ {
+ {927041625307275433, 8960709029455529859, 10831922670190955819, 18290821865497267571, 15356340336167722251, 1277117312667074566},
+ {11345332917031878869, 14333153309564749909, 4757616462511080414, 15371264136186622670, 16048790410218032652, 6253972033361590906},
+ },
+ {
+ {13515732918257273776, 13723630809424897822, 1256040724895856748, 741241381320040022, 4179658714379202158, 7700440732059923700},
+ {12620782566472061643, 8647092247759141584, 14556418162370042196, 10398569400923172183, 2942763850561441253, 13510474539740910285},
+ },
+ {
+ {9284152513908444951, 13364815009916075834, 4919960874500389956, 11846737451875562809, 6206281447342218811, 16898214858205632546},
+ {4777300224767696450, 16738332457351222374, 2425414676554916356, 10738169294712527458, 8592315599382595498, 779347662452931693},
+ },
+ {
+ {12657704884116037495, 16629278614392996531, 16644595643705514648, 13083603858484073418, 5531378660228117371, 1072715305930583874},
+ {16281698922290258814, 17101495949789370442, 697325071236988515, 6834733894203542328, 16874883980138472052, 13765652846823513818},
+ },
+ },
+ {
+ {
+ {1443983809817335050, 5159436179287288748, 8718823893455992642, 13859422481759839054, 16821370532543822004, 11312232963165366867},
+ {16799784256686916142, 11063086467296440173, 5409640362054745615, 1744861157419261406, 9159074957446964246, 14640106507936810200},
+ },
+ {
+ {2855230597739850155, 13620723665924576268, 15633539828476547165, 12790587404740345825, 14929382470136573230, 11024875668098768390},
+ {9757666174600838731, 2232369412498935956, 5843374372613155338, 15919240107279516647, 16925041227711211671, 10150031711225457751},
+ },
+ {
+ {167838721727610261, 7541800216831159956, 18111323457358615697, 1375214001809563574, 12793193868391341616, 18288999141676090200},
+ {13741005234449322878, 11213622750935649716, 1522802528596667168, 15269019072730025083, 10719991413129377137, 15521380803604598551},
+ },
+ {
+ {718529776434363422, 12683359777452057212, 2804554777590895595, 13664120639095226495, 13598640112814221798, 15241444675921322490},
+ {8810840946828957504, 7811396362330849266, 9645885245397761208, 679907887946404609, 13039332546165252336, 8209508558765517234},
+ },
+ {
+ {4626158970998280523, 17779366207669178780, 14066716967377837836, 5541345249351270224, 71760835438433145, 1781108686838293059},
+ {11015261109851457791, 16129646178084531488, 10669691012640045245, 18184224459278962224, 668895765928111620, 18347537117071351865},
+ },
+ {
+ {5383950189451203046, 10844133140951324068, 2374979840933487414, 18242105404652163653, 2153887761192573295, 3314974606006034191},
+ {13575532204571281217, 2247071187256305144, 448195274692108969, 2053979169079271594, 13812860435287696334, 1732389448089431296},
+ },
+ {
+ {4284546519240384782, 18250416328676695864, 6075393821764526355, 6803234443690359332, 2308015705795216965, 14282768041402275649},
+ {14692234199015945763, 10982825331872323691, 16257836708673068915, 9290937795903983017, 13215156669957704998, 13581066011281717289},
+ },
+ {
+ {726662160657361021, 12794593883926219472, 7861799432245846591, 14620923059626590643, 13564033114045541206, 12056825063290520144},
+ {9319654440973526666, 13306574040007137554, 12383704628262510604, 16837061611201648320, 5148924680488916382, 757589831530246899},
+ },
+ {
+ {11260142852359901856, 2910994799586619654, 8190175402543023708, 10282746214391918351, 6197128196041568622, 12103744805432714925},
+ {2754925794608765953, 7213719752583096226, 12149382823057292581, 6622803011412572659, 1043029140538289242, 2160363121257772533},
+ },
+ {
+ {3959688648190130918, 8473581564018232725, 8102575542433283254, 17478136759519300612, 10782499745742339984, 15960018897339834420},
+ {16254514834142148732, 7808901449511931787, 18330166307905077063, 10432644456391460073, 12246398526421152951, 16631198455707802675},
+ },
+ {
+ {3447922898029507114, 16051230154621670189, 16072905312851388355, 15031563884401549512, 14706198388315798396, 7847298879472932181},
+ {14334929624882962482, 4207755459965567091, 2727607546440637589, 11028268195413273994, 65681139350480862, 10388523824998445409},
+ },
+ {
+ {13621028160954218188, 9189281248079816548, 6559689192872320191, 12511220059980672697, 15021931978161570527, 14942251476194345708},
+ {8032030039336040011, 15968186657808771957, 9377328317206799246, 11373269023340235305, 14864609151221526904, 12259184676083236409},
+ },
+ {
+ {4993001240436128010, 14622033823485440043, 1269131542761241152, 3340746980531933825, 7474601841448992000, 6720228020507007935},
+ {7637406401737657019, 7627450969186809480, 16514017994864839608, 4814188734303098279, 2484761716517021839, 8799093000399717716},
+ },
+ {
+ {12269127574265060145, 9724465093155898416, 15873065313448764429, 8761869776521026054, 13485847957822391857, 2439524426319009706},
+ {2196722629873916930, 16606975023104026874, 14395842146577003711, 8980633514374222856, 14337391476390507239, 3245539094489483683},
+ },
+ {
+ {4586284023246783172, 2578135446952921534, 16829066520710412866, 703408518185354273, 1484970151848468921, 4187259876483048418},
+ {16026918465565392877, 12845800470973132882, 3563015620264375279, 16242852718263860671, 13711297870624837478, 10327260052313469500},
+ },
+ },
+ {
+ {
+ {11907264597133981686, 5345484317343243432, 3526298189589605651, 14941494503371346641, 4390348405627321537, 3075441678856402034},
+ {9143920156043167932, 1663991502233570797, 11411151526779617123, 6295062208334296723, 11167953874910400669, 2847239470361941655},
+ },
+ {
+ {12048307220520866404, 10548739433510366959, 5828937682586289028, 8259138483713638196, 1664521593180101667, 15076565371876670808},
+ {9031856040208856894, 7347877633160823775, 2684001693679752997, 1187394758632407893, 2023471202170921576, 11368770613720851227},
+ },
+ {
+ {17683555864724676435, 13968533138851757949, 1943437173787895091, 15827749049763045012, 6987423277000309812, 4926724831615296075},
+ {17103731276906243966, 10968826448844601259, 16352070254497671124, 16551824619482611318, 10381849412124093967, 9436665416229949512},
+ },
+ {
+ {7048379827497088065, 7443977613807482377, 15322620479477551149, 5013135385875340566, 5747364795223736553, 7862606879963470164},
+ {12609816404493593258, 88582923555110046, 9264042141620870961, 12622483743145618453, 36832241874005927, 11846454950663675962},
+ },
+ {
+ {10498869048482452833, 10139776276152664444, 15056732056726485889, 15099480040493702355, 5399073333783908255, 18182172735172720788},
+ {13323470181256898728, 7293540973022589120, 1981283917056275351, 1683846209255518469, 10681059793003383268, 16940960671858675128},
+ },
+ {
+ {11079616827562091047, 6298929519625833683, 467167558554168186, 4358762903022032877, 3416306995690695388, 14393771751405339556},
+ {8542268838893846242, 13985040364793095543, 15595485032978442778, 13710848327370489861, 12647895656520219232, 18141386123053510590},
+ },
+ {
+ {7421011150990207232, 11463423897464684083, 11777398400930295903, 12887147976139911049, 13452389883052007052, 4276539450334756600},
+ {17003232901404646154, 5648172435840152002, 9060551298958599769, 9865768386391095478, 2380928329972073322, 16806909077051674163},
+ },
+ {
+ {6879794746887651427, 15191659499793488108, 15434300527081888859, 7856295689590209271, 6774603981548851786, 14620245528126721402},
+ {17675423419823628072, 5010454868432987998, 9315026554545892356, 15171741100035630176, 13503881861133354654, 13836586572609238772},
+ },
+ {
+ {2081093758072482234, 2160302331720847475, 1771001500045437109, 524929417164114132, 948139338327583506, 13116239640907621525},
+ {2067558540785058447, 16015346840737264408, 8998465241460291405, 3205597488226039915, 13132850068494171809, 12550638131827261524},
+ },
+ {
+ {11487678613186732166, 12226538283374456197, 386046383678908710, 261136384486182248, 6073820936063889754, 338089910147739013},
+ {2204520790471760666, 13225443348522804886, 5533826822105659739, 8067241596100405272, 17056747808692642524, 7928554988750665570},
+ },
+ {
+ {6926667811451225445, 11361726998764751598, 11858255027279547942, 12874828932074051770, 13844212609147206062, 9229674123496154728},
+ {2157148641194346791, 7533189974437599411, 3818533723919763688, 17102113454166535674, 11957918589822377676, 199286897588186765},
+ },
+ {
+ {18098297521262853561, 2549150080497419905, 1920476418432176737, 12406241507983538977, 9994324328270480744, 6865216726931218199},
+ {10882517499218691272, 3878271624739672851, 2651991057058067418, 8041121093439073066, 2863398953389074916, 14090287437597767123},
+ },
+ {
+ {15691539065269187690, 15926915037487623140, 10414347487737173015, 4830265708288246683, 11328595530368816451, 4903535768556567628},
+ {12008565653438033332, 1571218720864129835, 1840887482550755461, 6912046034772469524, 3644063824758321256, 2126322707583833546},
+ },
+ {
+ {12169143892540109486, 6002799381834121764, 9166177939527749537, 2717071050858554, 14132387690398409212, 9461668085670424152},
+ {4615175463679096657, 2777593348175259115, 1086524210167200873, 3727975968832889444, 259602294277541227, 3220284105548094890},
+ },
+ {
+ {7567574313834290099, 8145437034220375349, 10888802157352801074, 15444274935766241808, 7033566652389697721, 15084515844524348642},
+ {15010111241306351000, 14537704976709260010, 13901878997182787975, 11697236875339079364, 16516786017890903855, 1661580686211855443},
+ },
+ },
+ {
+ {
+ {15463648276913935878, 4382144021532630330, 5071136388542935899, 898357497003506891, 6306262877201485580, 7503267895380498351},
+ {12209894407081504812, 13537298049306094654, 684729356387257364, 7075405619352396484, 15714299178550944331, 15696888615882072580},
+ },
+ {
+ {7477407170849995021, 13555863987096416386, 8646006234528633039, 10219427423139282479, 16098841852404237961, 8497637134921782372},
+ {5309688570092265610, 3976413109977205320, 14825158186275338256, 18330027746161861298, 8379597551709481692, 7776375825952465168},
+ },
+ {
+ {17368205043853313911, 11366480305058719483, 3986491568217663545, 17776307296855398379, 18166640678790561016, 12400054106979718042},
+ {14701884885297130131, 11997630432923609339, 2316884967752005589, 899451448914269587, 12320093108807155483, 13224130717820204708},
+ },
+ {
+ {2301120181151250930, 7134427926629173419, 13652391877351066163, 14358476347223217001, 7720954555948039363, 16079187223864015439},
+ {16130714394389204488, 15060521357793404892, 6157723303371622460, 388433905262539304, 6397942210441116350, 15870010555361278310},
+ },
+ {
+ {8386588512253237744, 12398600073071431889, 15704645810442703641, 13918516392916317159, 4048204874387041555, 14789502552726712590},
+ {10953546364075891631, 307391290824075890, 4085950680975341402, 8528936851895154413, 16191803140891684852, 694681636582541066},
+ },
+ {
+ {4052072016637665509, 10815871552988988571, 8015406219413895615, 1996664536108251392, 15055672969658133547, 11345388978032390658},
+ {3833741327008156172, 8078127745144700769, 18219007769895676040, 12373542083253387973, 10749960526614124693, 5297937097120834946},
+ },
+ {
+ {6473608164798697997, 1704324113009551078, 313510886399003784, 7482485442761088384, 3630467062499177474, 17889206319568130728},
+ {17813422549220613506, 13365489546100356563, 3642293795923051505, 13366391632389811062, 9309608098424960759, 15583860066261322393},
+ },
+ {
+ {3920285757492003115, 969197763731201452, 16178147428848039825, 6611676964264587135, 4670040846705473526, 9965087165592606467},
+ {9385067634888736531, 17301457722800757500, 6213258855206728473, 8445301014191943446, 8142518927165972910, 16360532488199989251},
+ },
+ {
+ {5265906353635046495, 4989115549924370545, 7716029377102384472, 581999053178428771, 1927216309428257662, 16726029285829946215},
+ {13608385105784378405, 16390741907364333262, 2050639151388485496, 11880595111878011177, 11418095767233061977, 6193391483702304675},
+ },
+ {
+ {983944277502152387, 17618013366706679742, 13527856424316363938, 17809004578576556920, 16807595463159644124, 12659014490378234561},
+ {16660215596018323668, 1845548200977670934, 14981347628825634975, 3292665052105349975, 1255560706381478700, 16841318968187590600},
+ },
+ {
+ {2665344548535488753, 10749679950323224770, 14480048826753464948, 8103744201764603054, 4292621633536097205, 17368247036505307539},
+ {8629653144199349731, 15713695068648974367, 1391688109689860259, 17209900783908384199, 16396814162862442509, 5977962909365766241},
+ },
+ {
+ {1765723133486333001, 13553591410290383834, 17120307789275811780, 5867585200918539797, 10340378507202539704, 10417992971032525897},
+ {5521483192544399925, 13339071700237022049, 619482636797119427, 3159013689121603910, 5024096637477394285, 398928734167456668},
+ },
+ {
+ {13703486582158429978, 4835870969542931590, 13849753374989811859, 1366566739320000236, 17404228716488772409, 5130516311326930222},
+ {6137130478942191139, 17716584582497907230, 16134870936885120581, 12112071202840308227, 7545387975022640244, 13816774847829473152},
+ },
+ {
+ {971030984593369643, 3220347373596070794, 13959149202405537534, 15516864884375555266, 12029622495808712626, 6647055389116471320},
+ {11132585267709726879, 9838206173776721087, 1787590871969783091, 4539972049341594577, 6034675663835419496, 17293055497219064814},
+ },
+ {
+ {17570642940564731459, 8213552062444081653, 15593226808110603739, 3879030828893359677, 13433601001024396878, 4211122738890174635},
+ {17934189169765241763, 10790041884906581465, 4207951857220635543, 12628418922625498827, 3341984002885074575, 6259488712494116991},
+ },
+ },
+ {
+ {
+ {13403761680618042221, 16536343759299396957, 17972613761828085938, 13333143634871897494, 8217080844173300090, 8327319758336938056},
+ {11266549251857186424, 5632462193213183426, 12437134888406006072, 18063700593397823279, 18150635335174302985, 8092211028476756137},
+ },
+ {
+ {1207108350681107077, 6429062998832911556, 8673250477723521447, 18170583393512312328, 3550801055781941700, 11719672827257672268},
+ {9655111182266878395, 3132327691752397108, 14419687084811747991, 13073348421646940420, 5049344006922558667, 14000517852372127517},
+ },
+ {
+ {9716991597801328457, 9345079756027796093, 11200045987212678732, 8772280601358427821, 8639259441726405566, 12571033841874242820},
+ {17715089933168590527, 11095491120411888771, 13347464584416454324, 485046159821099087, 571976757247075453, 10200902628607063580},
+ },
+ {
+ {8660499117188074779, 14226599538335222514, 8340352780522593400, 1946310520997776236, 6787355814568168885, 5153689776891688054},
+ {5667308841323258461, 11049803545816366962, 5483549481076210859, 2650281183298359631, 10767231237699743035, 9742809143935952370},
+ },
+ {
+ {9986140370114486237, 7466209585105907907, 1754679179647126464, 17945009041507108637, 12527902125314539776, 6140813986326054524},
+ {16393207997039569607, 17870467338953320569, 11842665547915567264, 13006120953816441470, 3548078985168965983, 16007487616892315454},
+ },
+ {
+ {988676199292814316, 13795038563960075881, 16898044307644951136, 1804989563201918949, 2415690271309649768, 1403951095677177318},
+ {6559788013277581301, 4206972693543414726, 18371258651929788196, 16216427380122603337, 17635684431775122262, 9400941069599463959},
+ },
+ {
+ {34276850896178184, 9065645945697227102, 13317573345776592985, 601525926235193053, 9217981927592209636, 12309969749608407478},
+ {10546130936371370328, 8868787171248972574, 10889253363563606858, 6066708084552745229, 7944441856950188066, 5353076020090917453},
+ },
+ {
+ {14598544504315957518, 7432571723098985759, 10858597307591799424, 10923605445845404997, 13436652897726474200, 13271716260984755076},
+ {11746484360997594567, 18260883576159652569, 16536705360207159365, 11555128771579375669, 12265809109975236207, 8710014081931635373},
+ },
+ {
+ {9533947271063157362, 3972341891231849936, 9209964459552097719, 7267309578223077779, 13770805495144557607, 14101871822520603545},
+ {12718640989104832837, 8947514731845143756, 14070551777157757491, 536892280925814178, 15747030266203480092, 18200278268968621690},
+ },
+ {
+ {7077130438749295216, 6779238826822620474, 10474903966971522019, 6820278386136128934, 7255072249237041, 12514067474090301555},
+ {7241461786197226059, 6467732564131199867, 3747183394163351948, 16770929168264693834, 17085066469289276480, 9143407880258729982},
+ },
+ {
+ {290347547239938735, 15468258237582113955, 660408138412436868, 1302684185031722990, 16641837582246495972, 13735740180315027614},
+ {6557401589512433778, 17846464164436659617, 9246161196630668218, 6890950256970483725, 6402204265992443022, 10338073060862145258},
+ },
+ {
+ {15430861178767026114, 6156963833198612703, 18365332210313898228, 3325534901104799446, 10271591932915681474, 18275367409906466678},
+ {2067293804126060977, 15233366967537526098, 5396097640022364444, 1000014498192944822, 2327452880062984343, 12841411739269464963},
+ },
+ {
+ {3385350950958430684, 606441855443472767, 13033776423762098262, 2439357857147383084, 18252952076577877678, 16120810045031173460},
+ {15157581942921822634, 4215996528362266156, 6476897491406537975, 5275043577903261598, 17454296124704487863, 17027978976524912289},
+ },
+ {
+ {8644752755484142871, 7520506767179250566, 9386137872506045147, 9782131010687153158, 4578495700127020092, 4136883695294906150},
+ {11998149667575356581, 11059056827970704042, 12270233192667197003, 2455222920699340298, 9618999184986094275, 6116998915343032425},
+ },
+ {
+ {3193697934884363730, 10140335243666665118, 4870491066049398271, 637453714006877933, 14709075847235147331, 13193262757253144996},
+ {17938884861655126589, 15835455202328116116, 16378047501426682850, 13063459063154887816, 8093827040207265175, 14470652935631573504},
+ },
+ },
+ {
+ {
+ {16034112998441587883, 63845002635443002, 4593001182702153658, 8670578084218703882, 15774651180914872398, 13011991283112025000},
+ {15423226930432745692, 4127345328586917270, 1602656434526331459, 3487999218598710668, 1255208198000959867, 10109403147260388638},
+ },
+ {
+ {10562160444642241972, 4693105869372484085, 17703834603739267248, 9021680918874890901, 15481929100325334120, 6845602054990892604},
+ {16898382896248806202, 5343640296806331476, 6915303502069874700, 12691955589654230714, 13119484603892573302, 444753398747923872},
+ },
+ {
+ {17283295680731918382, 10382975592516681859, 10060598265400044655, 1313342669690321024, 15676629915621228473, 14015433292309842706},
+ {3722541864418588142, 14316642109988396582, 9534209643602653706, 13980670620545874771, 7954420611695152174, 9814225047068930652},
+ },
+ {
+ {248374788036866218, 17964913720605794071, 16982718660501411011, 16539334441772479951, 5999220954131990982, 4565255831754507469},
+ {15763389274228509815, 6793638010832842884, 17795140448628569794, 4610627011608977927, 13484317218426525831, 2384269128785251439},
+ },
+ {
+ {2064700530864965515, 10923886096271221890, 3965781226482780927, 1349539335778141934, 12283277140753198011, 14288291926557028409},
+ {4755291516376942338, 14961944343518391105, 14986331171481011377, 2502562775678124281, 16690683782834868128, 18249446433878083968},
+ },
+ {
+ {10500343217363396563, 14604642486751688903, 14821582350585533209, 4360682754333123179, 17373258282956363535, 6560652026876217517},
+ {5925790258489013411, 12382625725858582375, 8191985561612267659, 8311548657817207535, 3006895680396725527, 3424975657919705430},
+ },
+ {
+ {786181852668121822, 3801037947411321795, 2585057011854260354, 12788225394892184473, 12121545804172165809, 11694085950174284847},
+ {1454296081340454152, 12662133117530554350, 15386954396026382518, 12188364006311053755, 14067469636462237943, 6286019250473603394},
+ },
+ {
+ {4641661046536668968, 15004063183056394436, 15294276007335774446, 8657963759909427419, 8639015101221632772, 17792395880030705551},
+ {11362725454724497258, 14875854967673364453, 16443994946864117237, 16738074345499328534, 11771999957157378351, 14373743150670458553},
+ },
+ {
+ {7451471218366369279, 684245731125347196, 15398340817834830921, 11295766022223517867, 13796419334827571161, 2612443196993735753},
+ {7266302045333075703, 17867476614955463252, 5444704239473117280, 357656867535988264, 15166074865462198557, 3395143793729939538},
+ },
+ {
+ {9509682271313714077, 9145094498501491985, 13014758147649818691, 4392894942493592724, 11373886379849938565, 16136200415791294662},
+ {15645599976658644512, 14840712622512041213, 3362514637218698312, 15450726990483884945, 3596435004543257072, 4415992810307073795},
+ },
+ {
+ {436726982121698239, 13056502432887055088, 15945046688454709231, 6523495243194823485, 9810653958526702955, 9848069844181259583},
+ {16826626473951948582, 231037515307333908, 16194400318485741693, 3341139243875410050, 7198330632933430971, 7499173440340466946},
+ },
+ {
+ {7368601478194798007, 12230035070325836486, 3516680325632927852, 3369692206924057126, 3839719055081332823, 12595556495411997471},
+ {8654493585319068452, 12397958396131600158, 6963511070567779898, 12454283910184705082, 15562030337854730099, 15142592400258359045},
+ },
+ {
+ {8837809708004032486, 13277037412298218780, 16996196458911291717, 15020576394594692202, 7172043530412198673, 8471665740380245865},
+ {11048001909658695452, 1722104415157885624, 16816688571596127304, 326278451259665665, 16226792594575388803, 11568977043541034616},
+ },
+ {
+ {8456421891774413106, 16587861652105824697, 14920803257030657404, 12140658454692956011, 2890921724026031732, 12248872106995059646},
+ {592841531535126012, 9580494709626759695, 6803986786165840954, 3665682418447597915, 8504060701005800264, 12144369197475287665},
+ },
+ {
+ {5922269777496758330, 14836479545831353112, 8253590747960613367, 7431627931206560621, 7537389025408568437, 6545197178800609703},
+ {4783858952421044028, 8590095805578721626, 1536842665057149294, 8541415499733223192, 314926954266960247, 2029622086554107518},
+ },
+ },
+ {
+ {
+ {4552857008992046677, 7742982176237677764, 12614777762761021709, 17623070834843911177, 7352134649339042116, 6424241685372912961},
+ {18284550672507410602, 4854060557681920993, 10258397549646077684, 3584018295573283683, 17668477552040944899, 13192004216363332229},
+ },
+ {
+ {17395497660961887899, 16009800729326461553, 3265273913749573846, 9525956475609557354, 8008893070464926044, 3999458899476097125},
+ {5718380022945515412, 17235833906403176472, 13454747352995042112, 7452239822974730986, 4102392695939993093, 2803000540861803936},
+ },
+ {
+ {16618737600557794728, 2033973305346022392, 13031336632325068307, 7832039322814057742, 12529462370460373850, 15738577000088471938},
+ {277987228557519899, 2457326519366423538, 4962659838606449004, 6462045821947637749, 14278115896296845634, 5493465508681078002},
+ },
+ {
+ {11771918065257941348, 15959999845581824982, 8970191473775898411, 11027278633783758541, 9400158449323034551, 947901598666525928},
+ {16512757415387632108, 12706593809124338887, 6988242886781123197, 16531083476591412578, 12943906174817632915, 7656648959205801931},
+ },
+ {
+ {9950095340907991327, 18323483036824977356, 8826742511566055218, 17289678119472024221, 16533507249962244789, 15598631885516380765},
+ {11278387603777833774, 15536595680256820784, 15785905710436386503, 906326985858832835, 17435036139151677190, 6061369501778984272},
+ },
+ {
+ {9936222309360295519, 612751096165259792, 6985140021370817962, 1577482019780095971, 18261512140175647300, 2268925111829825997},
+ {8997280151950305277, 15099942588201541647, 11975082702124791135, 10350894913803197836, 3939026946439666522, 15071423278799975648},
+ },
+ {
+ {11100833451065161224, 6687431061458662316, 13938739712482703228, 9097524113006971645, 11310108789698970481, 7263803389930912069},
+ {7579732541402969223, 4427494314869998923, 17444201060244136886, 16922365472232600409, 4405012916660752532, 12070687041452080974},
+ },
+ {
+ {15647519617270108164, 117991711471445854, 6393176877020591891, 12580017776760024469, 5697272146318734492, 6061004989930742460},
+ {2473756929649050129, 6642185257675347189, 11657278544254761788, 7595244572280804026, 16987026974396265658, 7603680608840671838},
+ },
+ {
+ {4641817200788130074, 11411582570279978213, 14271172827338073307, 983033021155616654, 8960364147838313835, 1083015732588609826},
+ {1497200903677486726, 10353458850981831261, 2374066392391409216, 14420375504998989822, 2686838733391603031, 8314093359533890676},
+ },
+ {
+ {17496508456763250145, 3725851402903874990, 5215356232054038476, 8626178798561231122, 7346081438096983294, 5668902882044010550},
+ {12691479253178408400, 11602632369474788625, 15888416067375784848, 5084998651123071836, 17687638434614023978, 4748093935259778032},
+ },
+ {
+ {7012591365105857634, 2874880375540929348, 3220174710965004795, 3059517961108662801, 782775158531417858, 5458085543118651718},
+ {1041626186007335450, 1540954764582416518, 9157012689553456216, 6955405647089997424, 5200809672173570153, 11421235046137546582},
+ },
+ {
+ {4523124602653947973, 5836966919029851883, 15986368381641127657, 15621634437004074460, 10729890475855047355, 15294257247680785512},
+ {11285439807747745101, 11111809578467323610, 14892047086560953694, 11048499802178473817, 2516056791328163076, 16852268565013832233},
+ },
+ {
+ {16471199282876861755, 13210632438290224271, 7489191141275166803, 1018062459034819295, 10390278673880097194, 8531679383922148028},
+ {10429530876679392022, 16263107527863893420, 16501163786286139551, 13280134735187206873, 1020285771945898492, 9886235265786298880},
+ },
+ {
+ {3953361034531375110, 7386122381239091719, 14255034285668453820, 15785522167361485422, 515961023718038653, 15929890586479205538},
+ {6439493683049357704, 8056685472536938535, 15913828424728076669, 7849931732449815279, 8828673947015448236, 17381185117791234015},
+ },
+ {
+ {6935262837758552669, 7238290685472994963, 12638530517079483671, 1598710569731665524, 980245562699768920, 877454677177454227},
+ {13771635882215066620, 16040753974649338826, 7896323269797579290, 788789760541962817, 1510803060770395652, 1869615403943907757},
+ },
+ },
+ {
+ {
+ {5531580499851611686, 13083938152796080580, 8093925535259937316, 17200389625360018863, 14842037215178251796, 11988119859109137475},
+ {12263909710787132014, 13130916007869632497, 10441881769690738090, 16476642241864490775, 13984242664609457262, 14845292102137925557},
+ },
+ {
+ {12517076146320333530, 10291406855889954894, 12064707867419687573, 1502641198165310419, 5109759070771650866, 10320287993169153654},
+ {8399783621045104794, 4798114569651528165, 13755067856098540412, 16302764698541317278, 1003238627835525562, 12928911232568933328},
+ },
+ {
+ {16493640364904216538, 16952576493628188735, 8338786068864117560, 8893685516440999887, 11383847562341498629, 5266455800998421009},
+ {11752729420077323639, 3693269312053900188, 2099384749139572854, 18271582031918815784, 4429897358715577578, 3927504374421523062},
+ },
+ {
+ {8698070787678755125, 15703050641810248638, 18420332370057065886, 6522943156759230092, 8207665535041398772, 18112327861657685869},
+ {2673396578153201579, 4785641887391457008, 3201343168686834345, 10594426270740968521, 6137975018005068614, 8967572499474389126},
+ },
+ {
+ {16980781357310728815, 9400368845185156373, 10978677447297186946, 9679748460996475145, 12732154117709762699, 11885892661392904979},
+ {13639001668971925003, 8287641087844004413, 9636673197644968413, 11135961857199331499, 1593345137419156162, 6112607232727638903},
+ },
+ {
+ {1618121961524149483, 7125019653217610280, 4135046824878421576, 5280859186376679590, 5657048372118791602, 2933466611636648975},
+ {5805664612181580903, 1205209836997769509, 6806945599172222398, 15385614052211122330, 5146598126955318559, 8075018016062999662},
+ },
+ {
+ {7764055997887316625, 3096247021063747628, 3855058303686011896, 8368825559451644110, 8834573136185883032, 11962274012645814108},
+ {3892254476562240873, 17250665319194659862, 8912259066218683223, 165112253005842692, 7958059294996660528, 2841248137703216850},
+ },
+ {
+ {3680472053937419225, 15818262971662536925, 13906534632021415373, 10388162304643816807, 15630768198665438636, 15299740983304379113},
+ {15444479968420088661, 4725578511733068322, 6592797451123590955, 12644252808393788891, 3368737811520598812, 2557827868369225502},
+ },
+ {
+ {8738552487289663521, 12798020703054253540, 16285176121985392361, 8515295685945774862, 13775150004805130289, 5480066442593566352},
+ {1832062561221016724, 11474440365914311748, 12840477284251180526, 9418012590905495131, 10980357385153192796, 11175435945147283367},
+ },
+ {
+ {12031563579597435632, 9205196637096882542, 11184135606984465931, 1401305294056001956, 4011048655023979025, 6048353554978805897},
+ {9981078758998137503, 2677269315040497841, 8661895209193888174, 2176295311480160014, 1399949325842755013, 1287167020178538381},
+ },
+ {
+ {14989416317733195928, 5215645857684328926, 7743823977182561807, 16035950733196346339, 17265966818360956995, 8141738386272537518},
+ {15308740448260040102, 4819506016918069818, 10426746682594017119, 792592082078639440, 9734028579320469106, 4168164141775623240},
+ },
+ {
+ {15110332316914443547, 2454995031938088056, 8681564356238928114, 8347098831687234549, 7523258191196591151, 3959358611912316605},
+ {9351830676079593795, 7428833308286598266, 1416453949629038883, 13547349981311301086, 10428277550264282650, 3606337116602082651},
+ },
+ {
+ {5899820503488869883, 11958490906970962079, 16075475723156804884, 9886958163106570293, 2336860573252008348, 13927573664175717710},
+ {16197429394630719701, 3637410335075415017, 11999182092087635021, 1303728926256486256, 11862646426072718672, 12350194941729076911},
+ },
+ {
+ {11908703473110352895, 2298157340739520546, 12948782415344060130, 3891804988944198780, 11457024627994711505, 9170264692053088570},
+ {13049916205169787428, 1232888971483236977, 408187673144451089, 9362353849122321485, 2376369338115959747, 14275353516415817459},
+ },
+ {
+ {13799005322110561814, 3601529694367639643, 11106772392590283339, 14056629906511810342, 13572576527799392856, 3487092026537252918},
+ {8004945340194339537, 12604327154304882576, 9170501006502176061, 7882459238319530612, 10231971368325328570, 12291029816500597144},
+ },
+ },
+ {
+ {
+ {12016493313669998017, 12933290028169404494, 7574629307155081194, 11064769132776585661, 14341813749429263738, 15283735852995564728},
+ {5619619958275981377, 4050556776362198952, 3177576231622277940, 8943006541554009372, 7305626035911810624, 2218764583069172594},
+ },
+ {
+ {9566598936438275016, 1524065942898634278, 6538402437371981825, 7619146568983786789, 4056320053847575406, 12732024686662415782},
+ {17127152314608074825, 15674977896298098134, 17387546565573344457, 5579093677326322780, 12742505204554944005, 9270656236439021505},
+ },
+ {
+ {9662754095902029984, 11052177687755266491, 6564855675021815294, 3737820401397024623, 9158763078587705755, 18065064980820239052},
+ {1653796274043149373, 8013850902639245573, 10214534956928427486, 9886536041863638379, 436480483045091770, 11299718318113762234},
+ },
+ {
+ {967339059085129682, 13104166305190785688, 4270323337549419783, 5748057697199097523, 8577924642091241283, 3581915858994574733},
+ {16286952775270696590, 10080909121150901764, 14969905990810770951, 16982777697014839521, 10781115824630384652, 10066879780630943259},
+ },
+ {
+ {92896671827781235, 2887243649264806545, 15833385588487728320, 123691791239786979, 11763384358781563166, 2158831843887588802},
+ {8596741012506330566, 13826523457635717537, 6540594903680582753, 13793962889582160991, 5269794365508943505, 12066409262788357582},
+ },
+ {
+ {14160395515480751096, 4804393992065108318, 5865339760971292592, 16944867750437583884, 12346156586123862268, 13893983071198461568},
+ {8669655392775136330, 16391668238375635128, 15081288913073483485, 14651450622111663417, 10940438561578281261, 1459769045883260702},
+ },
+ {
+ {4763396496514922336, 11162734181090584219, 6254038965156999258, 7654502220362726613, 2599074756235434712, 4175520862838218020},
+ {5532712110222397779, 6663653809301337170, 11279470997460625805, 18326970986868768181, 9974042098100537539, 13917964898357259770},
+ },
+ {
+ {15546191471293518390, 2963849438433690733, 1598685141972719458, 8898856010516215467, 8627198789811864809, 18213029019475870781},
+ {14333200464642291702, 11308787646021527497, 18050331911988613311, 6162173240162706538, 5132865581846192726, 12525247456279358053},
+ },
+ {
+ {11888520648547343281, 494917248976844922, 18138185753471197483, 12035073496965460264, 1674990322514407384, 5436485227695752804},
+ {5110912561716495333, 3540271208711945312, 16423892434973715102, 12964671785499501176, 9148547701868918153, 8452102921910430935},
+ },
+ {
+ {10550849065095437067, 10753053363341312814, 1074211954227515445, 10020702799800602789, 12864406763293784387, 2698115192684535328},
+ {2660806710140858085, 6972138123836745017, 15756537040022601667, 3441297371570217231, 15992662632802735446, 14962954137941778116},
+ },
+ {
+ {4348443051639929958, 635118108731535045, 2015655861614690138, 7353522871311274501, 7204918312248323903, 16297291314051374567},
+ {819730982198770845, 12608785952359657870, 8576080532289806827, 3009710480834492730, 16107946955600658269, 6618414758853382272},
+ },
+ {
+ {3553937582483580592, 748557765063505988, 13881146308285141838, 1352625613370615861, 9547466942139744787, 2062114793498335002},
+ {14124993439348982791, 16102858923929790336, 11804652514462156585, 5732609751578720530, 714375047010554356, 6431147290667166077},
+ },
+ {
+ {16907430455802407338, 651092243779400541, 5558490953571514703, 421524543072162879, 9495583213289666453, 13989694091243449064},
+ {12986952796935468504, 16698463546003412945, 8012703590208385816, 7886765190319975434, 10751493468002030133, 6515081698151754556},
+ },
+ {
+ {6087474257130132004, 4181631832640612201, 6923834817653851052, 13172825904549355364, 11686731712296308893, 8288122396407189675},
+ {12024088251429940990, 3651003894223587872, 1019304847301994100, 9991022902762889112, 16582922336964107294, 16110644774675481098},
+ },
+ {
+ {5498126896868064142, 4836747456186980397, 14439451922445606120, 2540627828887613339, 14545261008261773051, 11467969799607449102},
+ {6475133878892579834, 11091521615198288188, 2782411639442406711, 5318254024968417786, 5859257904336594124, 2341590642428951702},
+ },
+ },
+ {
+ {
+ {14518481408695687669, 2095771038881695915, 15826157616849474498, 7631060871632259188, 7943802148536381101, 9960658929149574973},
+ {14220929306479180052, 6691269956130908121, 11961714924677727754, 9368323637302814513, 7291095832678254036, 1472432228204364122},
+ },
+ {
+ {296235288120767705, 15980896506163657127, 9062593919771909466, 16125661299672370182, 9635461578488266018, 1155136620315591386},
+ {15542837136824990624, 12143968280527693151, 11763598774950389381, 6763568060848908383, 9078265856423831300, 11111306292226892543},
+ },
+ {
+ {3439881221278078059, 14900693561020779474, 5254088415616219888, 6252474065701086141, 9557647970998076314, 16557080478909731651},
+ {17984691969139760073, 6920275699694311708, 11586093772939554855, 10567368687255256163, 5080233168822419117, 4328516116216989313},
+ },
+ {
+ {4596402599231671431, 18270370190796421118, 2306869450531067189, 14899242618385405087, 5573077655838651504, 14786962047597110553},
+ {8824292366761823595, 4280831893742429953, 15856753721134043278, 6520053395038611912, 18021729931870278099, 6369767037287702722},
+ },
+ {
+ {2092756234911620351, 12191998366985012384, 7450107522245627844, 13887131358456374402, 8075627236568549243, 2080029865308854734},
+ {14564437191532160823, 1248159409055904140, 11241915899684752873, 374881929831255064, 13433377109261039811, 4864742963124465747},
+ },
+ {
+ {16241148550837149451, 7822351548402593379, 8309026501457287155, 5103819580434410766, 9108794158669260903, 16488989256917731421},
+ {654044319854628751, 4653846517548435917, 17199712750191435016, 4845695359451199828, 8117219445563926224, 12507860620472651305},
+ },
+ {
+ {7653070797102301348, 5941550290626705984, 17158569969337658821, 9643823508741141673, 1522997131282064389, 14961110431686131034},
+ {11802659136406721500, 12306955104612554951, 9514149419806882461, 14375242488313250733, 5052075298187092512, 7410174133191576572},
+ },
+ {
+ {4358758092801908863, 7341423105081917858, 10291109018391718430, 16808750129865208976, 8165688726053843552, 6688211068991597475},
+ {17960382836450267765, 4303165753492267405, 7660091042153170442, 3855051391425497455, 10928187542174197484, 13179854521947504240},
+ },
+ {
+ {11914960295850256028, 736894971573607460, 12038994816721001602, 15765970801138452754, 4004778617735408471, 13131827739122379797},
+ {17423943862970446994, 11783909998933696219, 8224961911959792292, 16132329169568881376, 2487867689899583885, 15018657522918867674},
+ },
+ {
+ {8657571447411467172, 14465724378300467677, 7456925156021131657, 10099394822944333635, 1108995305500533003, 14670621046876829893},
+ {13859265344673965228, 12642756285805199588, 10618371399223472359, 10368789075142392456, 17024775460445275303, 4836741220623357252},
+ },
+ {
+ {13978074604430806636, 18407681732775924476, 8539556435113599518, 12436983718097546564, 12305195225429220776, 14562179379065953930},
+ {6423549542556077018, 5040755781466160241, 17482453842942123143, 16447448498858010488, 11479552475069053178, 1277752221540085617},
+ },
+ {
+ {920233764095776718, 3319139992705676642, 10862716399636326975, 9064714243076616640, 14300958971895109720, 9740515883782303421},
+ {6704838650099908790, 13781706302104941529, 2159164314515365763, 2657942042243527314, 8728543051894613622, 2325932806770059428},
+ },
+ {
+ {1967422502593875213, 7041760415173107577, 9050221304247474093, 6387184238732181908, 5042857585504795697, 8540152121523996010},
+ {12903368152967462170, 12590063752208819611, 1933648838835739903, 14309714702251501120, 3968656691162699954, 7006655092536063292},
+ },
+ {
+ {4234961586345538709, 4555151906871493852, 3232985920750903052, 4244526539796687845, 9377328776465632031, 7060246266590210233},
+ {2853784874472922126, 12423531525688330431, 5274221307163072241, 8471968438469831965, 5168569868577424241, 13738202276372145637},
+ },
+ {
+ {11027740333858210397, 14805109795564990231, 18001404758531034531, 8113634300017707290, 7136773249584072726, 6460937237419466983},
+ {11113010926555478983, 8211408909041649548, 12479292053761376428, 4353008690987758386, 8859777315867880266, 15451653478486520306},
+ },
+ },
+ {
+ {
+ {13818182961147912906, 16111231902964497105, 5753266394530009372, 17616272516546069710, 7303352128999517861, 5933646202109354624},
+ {5921806076173096907, 13896009253778745778, 11309023928924737855, 4469463255182812436, 11037920326247304138, 1421676035563246889},
+ },
+ {
+ {9963872303672903223, 10215244336266366950, 15328675269518615753, 122600537279116424, 7616143723151064557, 10569183306278169313},
+ {7031003844724741558, 14407986305911385591, 11788159030526689129, 3609241791309434129, 13905596487394238209, 17665966721516237541},
+ },
+ {
+ {2594699758954057096, 11341478545067279123, 17990597733287642429, 15246802590252455327, 8353870017669333748, 12614437615817297240},
+ {6394781505133818163, 7425571888170698179, 10395654478962895608, 28575799984957524, 2682124171246326926, 3197867099218106953},
+ },
+ {
+ {11244734218150742610, 10723159354785424855, 7484860387130692692, 2467563150354920554, 17551980904639200483, 18441274508899025558},
+ {3676988885705600635, 1865990625010728131, 10102149234595216040, 1252552252382716358, 684792256577566866, 6943047702176820428},
+ },
+ {
+ {12653542557867698652, 1142433072335098633, 3314552015716235100, 12422430364987401619, 15277043111900184721, 15734019630472200325},
+ {15919711988870913647, 10725565601222767370, 11290906213530487192, 4662157581039009933, 11015350972696669275, 8208086286380460938},
+ },
+ {
+ {8149565212922680035, 9567944225255802618, 12487131892260634436, 7443172048029929426, 4305538689986215677, 4430546250909191430},
+ {10741221950240759364, 16545153560365439267, 6755029137094727228, 81110724808247078, 5717471797282522877, 1486218088878517808},
+ },
+ {
+ {9544854622790528047, 10769761497113177908, 1502686769356489564, 11081322603706834961, 13364711539216168883, 5094854373914013146},
+ {16200855071998899478, 11725976297239923532, 3061711654331076059, 2493583541459486142, 16389197377130664032, 1243320213701794262},
+ },
+ {
+ {8357050367418458359, 5525355159387149167, 17747090324964588952, 15694673113104643586, 7307621991317580676, 1289366645950419281},
+ {528742783924328467, 12856892207404403478, 7148581103958210921, 1069895320583652302, 8428983332864385655, 12605554700259997922},
+ },
+ {
+ {2487016972575222431, 707675339208452706, 13435953217565346444, 10759388806374516776, 11194720901200530938, 7026549091209652010},
+ {9613174021959686236, 4467223759668079541, 1818968857637375440, 13722755860101057871, 7447888855543394914, 11546251567136013168},
+ },
+ {
+ {2457098738888001184, 13436425175767521555, 2765094396909275573, 13944016834209830039, 11092919542763411502, 1754742216756443900},
+ {3000476756681394440, 9364034762555019549, 6876992788712194394, 3585709061747683458, 14106253519316541506, 5279212076903345269},
+ },
+ {
+ {10813235272482429086, 731216775886127646, 15234319760355729449, 9466303362664776229, 13159285075818128580, 5734182119311122400},
+ {5552097949831952705, 8072700375309437721, 16694077426905656662, 6836436096351296392, 11231592576240564431, 18047071890971042931},
+ },
+ {
+ {1022254770374886277, 9469459507582571128, 2689087779341478977, 10040558278837523393, 83202215085697759, 11389135963216852624},
+ {43806665444650760, 10286022177325133470, 12773072940237016578, 10992425690329167747, 4947183945666379415, 13675981203969163591},
+ },
+ {
+ {13477598317485536079, 10040066752150433290, 7405123541490280851, 9274383932346246150, 14309192723531202554, 2524700381746668787},
+ {3616389453203314756, 13581678150808337225, 14540726193639627397, 3234008850825878308, 15341468248221057383, 3830563877031748372},
+ },
+ {
+ {10853619680499782048, 17362724233771660267, 10116273108750733202, 8385992189881504730, 17855585710140315498, 8470682662587365724},
+ {8287837611861659551, 10994242426397343384, 7964721658577081933, 4070529224299771220, 9413822451565658120, 12865616140969909319},
+ },
+ {
+ {4909175585319342946, 10921727442298570876, 10167667568640009770, 6338375152080033018, 3059470611612240919, 5445884441031512847},
+ {2080017510988083324, 994134584813785821, 11859009130969323612, 4838588735676167501, 7193860141357257635, 14012081064531795045},
+ },
+ },
+ {
+ {
+ {18027264009080180273, 2475688335442217172, 11495630589568554783, 2044610447313340819, 16211574958831636691, 18082923260238685029},
+ {15706469362280984389, 10175042474371958564, 1978937508224725826, 8517309419909857419, 14117179981307010083, 16117021543255946075},
+ },
+ {
+ {1511347881429709117, 14331553269818546726, 3174494305719383998, 11632902270807950107, 173546718771105251, 8459530881951500056},
+ {9768245664684322698, 16561286001450401034, 8971518231697912000, 10976747460480974856, 5720643303151017754, 10819571526556570257},
+ },
+ {
+ {9576152676005768185, 10006989422531598194, 16187127654089665852, 10942929199410456340, 12406093935974963980, 9789646989960898506},
+ {1787070800558790010, 15321395745534743079, 10957766159164936872, 8270293817925324519, 6611548955360388519, 811894490473141865},
+ },
+ {
+ {1177812967446514471, 1517957963298502615, 11830891177576473426, 13778978023558357649, 5108224327305754122, 14001515739949397207},
+ {8456370711154495527, 9224707985240991577, 11975300863666543456, 11628484027954011676, 4106175737255204293, 141089986476922703},
+ },
+ {
+ {9131678980253850574, 4479975833350928208, 10129015129452566706, 14596103361459462005, 6870275426489406730, 9740372621433972730},
+ {14372377876881420680, 5948925994235262952, 14844830411071630096, 5061939034624460495, 13713851364090957723, 15171884222064254954},
+ },
+ {
+ {11883295856694360955, 10292514093729377837, 1018241106247366045, 5734998220934568611, 604293790623280200, 6610275829270273887},
+ {12366129529412267868, 18331188876567635410, 5216829119638902498, 8912427667935396786, 9501870605862624528, 12344298042089151792},
+ },
+ {
+ {8163932230030769123, 9636016199609023759, 9161423603597683840, 6654511074475296823, 17793619545653824539, 4124609248372213291},
+ {11230396913985033299, 16604770927162297627, 15127151935380606658, 17824607882620004762, 10373865240573715539, 16654854491247214292},
+ },
+ {
+ {14818683899450679836, 14357841858587947614, 5205003223993289617, 9070636802111036582, 5470773669151086737, 16750045699953367638},
+ {14277479053033448070, 16287996706847536112, 15752386157739826785, 17892417758463210493, 15541841791609187377, 4029170486772069449},
+ },
+ {
+ {590558285614616488, 10384571122104306912, 5382287961959199743, 1207676815187815333, 13011773384862224953, 532436966815548636},
+ {3019650690602626765, 7314252074457497416, 1838949562628498144, 10537471043392597480, 3070353104978729913, 15624376645604971077},
+ },
+ {
+ {17115127186232346178, 10621035233663393896, 18371958430819337089, 1193295512905013155, 16614017806526374903, 10388183900788590144},
+ {12609314943764198670, 11179941239127206128, 12182679129557646733, 8965475646212860502, 13633585572850681632, 3426380476575326349},
+ },
+ {
+ {8276623546443212404, 9482903315384710760, 15538896085254227434, 15790143076571948507, 13143573532148067747, 3184541945442546624},
+ {4972549455963732427, 18394646794778833511, 9055568163078599201, 11111002929065765438, 17363710725009368186, 15039897105379313802},
+ },
+ {
+ {1298806571453657723, 1042114212262366662, 5680532184394488579, 8926718412388834594, 17803123059561224046, 8663230263216788351},
+ {1629533050023872010, 16027578301664521945, 10229699200823727147, 7773663415615911623, 14047718958480228325, 9551563011362116236},
+ },
+ {
+ {5989309147210387183, 17849299546447616600, 13296929709722338577, 12659773706196250035, 9857145876253632711, 11836080982965367426},
+ {13554494825619368750, 17266926296470690286, 18031413991494048783, 16082997100696095698, 7954101307530025972, 17805255183453764631},
+ },
+ {
+ {11764175621326135951, 1791939567018465213, 13029241477144523291, 10840557939557580560, 8381031918646881664, 15423611692748071864},
+ {867816783445809673, 6030296688691172286, 5561502310603617073, 15534923164629599800, 1208665840373127315, 12554641657645359528},
+ },
+ {
+ {3209670898909179942, 3098303062665745356, 14606274486451097890, 5959844521554290710, 2464075942028132860, 4072466165408271129},
+ {4803469398150112461, 13680850164034057508, 11856265931978933824, 13240671495015013351, 15372029486600936548, 16702375458830177711},
+ },
+ },
+ {
+ {
+ {18354847664660713402, 9400129736098519180, 1693064830516242847, 8562602303494815916, 13461534639537583386, 12859295804198471696},
+ {17914958195244970799, 14970948874889495984, 16335291403269479707, 10631004823344361203, 17176847807154743365, 7714732495833925335},
+ },
+ {
+ {14957716628768963046, 17714101461064775895, 14988284950839047625, 16071167094351699344, 13890128763447277457, 4634560608180312269},
+ {15209983968927413233, 13604763079237964821, 10947506257796639042, 16898823699351743161, 13294221703899555280, 15072745049022926507},
+ },
+ {
+ {3852056161889022327, 2473180673803482388, 3734174223964831443, 18372076238287597117, 12199161160370991577, 5666481007872478146},
+ {14306064415346698520, 10330919921159881314, 8823577501055193872, 1854546884403147535, 8350718724062793691, 6987169359640195828},
+ },
+ {
+ {6350728622830713728, 5701874018092832478, 1307420847228487387, 12162151629784986353, 9986023597556720981, 7652258640582743122},
+ {2186001021201828888, 3639063210548593758, 17939576646917089186, 7727612437620888084, 7790541002958463900, 16125720901743858869},
+ },
+ {
+ {7987758804483759886, 15261177063236862551, 14141837944496855895, 12436175571389993349, 8274042047049891014, 17152451709054820788},
+ {8637518459734046525, 14044145421979578672, 7087188747750571441, 6313728565256547988, 11986656046293683375, 4860648976415357838},
+ },
+ {
+ {9009539789648791006, 17968770175863968085, 7552239675047114070, 2857176040809917182, 17447219567921940196, 7265407823518294105},
+ {17146273377976250579, 6793545786177262831, 14702522055640190270, 4115098237661381737, 2503118300874563585, 1557013629291304762},
+ },
+ {
+ {11378438312695848589, 6538246237007438137, 17401630259167972224, 3718158584776484875, 4653786582172050367, 8204345231064757942},
+ {14333075355191893658, 17490753073467497501, 882454733741447284, 13137676416912827511, 12367922995099391170, 11659416979788208350},
+ },
+ {
+ {6506114746421938896, 15057654379054626074, 15301323392829790768, 4198974549026211659, 17765210741443108016, 7132509492152477030},
+ {13814681355173788286, 18227429366563277742, 5706529263838269680, 3305860129954779061, 6258038612413033234, 5553019991310521590},
+ },
+ {
+ {2740541731000766119, 8596175174200043370, 15268406586850192141, 4422842783758936070, 16124815896970518429, 16832763608196271685},
+ {15434766743141189819, 7524954445211264826, 10235492655871568031, 8982274848184708554, 61280556653488570, 2365856772460075321},
+ },
+ {
+ {13157569055430348176, 15120480921106359700, 8907221703681745856, 9744220876937878792, 12735259395540542647, 9934004250126983654},
+ {16718615067756416460, 410404144349530529, 6127062667806307811, 13658502470838162746, 14801118008320529094, 16148996127797465924},
+ },
+ {
+ {15802530345131809115, 17755831194964343760, 17769515049688374693, 7857718956073628784, 210191518703714850, 1746393941813293182},
+ {9588189846482137991, 16335835178827943095, 13379307055600165683, 13189771146869278015, 15165452058189091322, 16119082358562095187},
+ },
+ {
+ {14291300888450540580, 12179403608989848787, 1574081386467411267, 17634301459964659121, 8878112303286796059, 17677799131162737575},
+ {15596184219007084082, 6187497693225343219, 3798717948418717856, 4726638163830739524, 5752064164618039868, 12151699975292370996},
+ },
+ {
+ {2566281592983211586, 7556513094797110610, 2450166108042699822, 5117635899811819452, 9378838926483608725, 6536766093196310265},
+ {7844966478885204208, 17742733133746826278, 14738531168438873782, 12821429720867364479, 17548355350637387437, 10379676596614787905},
+ },
+ {
+ {9312968557225948243, 12012357331777111837, 15378903016229100083, 12000905387706281859, 17061047818694588137, 9595998526695275691},
+ {11468745480135275611, 15336669098149774847, 1341152435528764937, 15838536921908481248, 11418408147933255250, 5931142050180490224},
+ },
+ {
+ {4126355864148604636, 13615307424696038095, 610122995599041643, 7310843591875371159, 9562945189555198546, 5139192984197086614},
+ {16434764370823678107, 8879626425844710867, 10870500519197212704, 10351639341497698657, 2684669702506554173, 12776278319330754082},
+ },
+ },
+ {
+ {
+ {2976080374040978112, 15463477607266400944, 18021857121116180535, 12769842468896246932, 3127871016491855528, 16064631537662018368},
+ {14779669176601385973, 3776668856093058683, 14901222703045028630, 3232341387704264788, 11524644522032323784, 2840977857469413331},
+ },
+ {
+ {5288000162182207268, 6882039810247587375, 8670725030786145343, 5145183205378561959, 5837273482862705559, 12796134768505888809},
+ {4538314407891574892, 9060622484855928248, 10762409677748173572, 3978391277049014537, 17437084673881602774, 9597445123068848506},
+ },
+ {
+ {9647243303471030171, 14403945224496984264, 13886934807685357620, 17412670052512822239, 5167671672373181761, 11309623208884894891},
+ {16223393003006029431, 1419420326439656825, 2369169453814801856, 13061716774043471194, 14634525798681795534, 4751674434384485255},
+ },
+ {
+ {4551832817507521552, 2313908657037532903, 5993995178973949921, 12447883782437853955, 2555223230220912865, 15167076377045730267},
+ {2005335384595372774, 8714558357337187482, 14553513576888660757, 9344637821077197511, 11470542328000845120, 8444785364767260640},
+ },
+ {
+ {4138889373221767098, 12141056423117115293, 14874649331180645388, 1705049756225833969, 7848874201060248948, 5156845906941397672},
+ {4861831505262375336, 4347196895421922491, 13681671418165655661, 10985831839263041306, 12731646375130791986, 13097670606652769270},
+ },
+ {
+ {13662345490304024129, 2974839373795112820, 12056507699680569779, 11760177245091509243, 1304067584530226034, 5993077591223164847},
+ {2387375708577719238, 9626459487654222268, 1955587799597889262, 13097747078399605477, 17202959331606801221, 2329556196948809962},
+ },
+ {
+ {17812987452373376709, 93922986227836615, 6326230905711504623, 16126249753219785660, 2455759288569847701, 5953549367496130585},
+ {330019371493755212, 3787738706597361027, 6252621554557272655, 725518130284881658, 976894057381550612, 3762034607037675717},
+ },
+ {
+ {15030213828999353996, 7537307216693595568, 10906817211901741334, 12978201161486570836, 13688879460912198344, 16875104360403708899},
+ {2236812266517027774, 8283440131031015303, 2503310362171705003, 14140140152955857646, 9324835099807979519, 14222655865872085142},
+ },
+ {
+ {3744645064193324992, 11767671095853168147, 1146189435518138409, 5628986181810339417, 918940426876816812, 15936037265796453016},
+ {6613161822954084270, 11628888581784661943, 10812400261220740733, 18166624472577344261, 5876006248392439801, 16310306694834328246},
+ },
+ {
+ {14125633931334589394, 14751339378917740218, 5150510528739010610, 14276625313476908582, 428670252922191956, 2631125662043419149},
+ {1617981761951911336, 11583305636829657910, 5101252848640834978, 16667317030245715710, 15236201878077258476, 10871787548070323489},
+ },
+ {
+ {7447893961295274471, 232689431551823296, 13869806697620401084, 5330160866804784025, 14865575443350752261, 1679832461395111529},
+ {13432840916023326626, 5655812378144376418, 17569608518110186458, 12501129428357124126, 12870492098064776642, 2977413908822477380},
+ },
+ {
+ {16051075988752124526, 387294815279188176, 3113985811668805632, 1973998868188061597, 3007935075189940834, 1096206135454331889},
+ {5718521169091374159, 14981024399127745789, 12740192428843246945, 16002483798782724245, 646320423819307823, 3798677800777828461},
+ },
+ {
+ {3175319352668641931, 16660628462131386552, 6009313219444175330, 7678412375003613097, 9306411708347736279, 9935327299823143180},
+ {11559141188091897348, 16810520437389758501, 17490645749839025712, 17259327961568124278, 15274735373631914960, 8983416743854404564},
+ },
+ {
+ {11963348162499020986, 5141506614889163229, 17433303046800477704, 8199586499645960554, 11047244048987602943, 6043499675044562520},
+ {3566164965696214407, 7496224733250850598, 18368140720280229179, 1567369354656910484, 5448980629729479630, 7863641419129732206},
+ },
+ {
+ {2725337558589481703, 2497570082780513054, 8145569365382441623, 16909216290827518100, 2055218062540628228, 2415304909498436767},
+ {9493217182909039176, 16224541192418752121, 7654146956830687353, 15910281318968056771, 7566577530597601060, 392195615790859862},
+ },
+ },
+ {
+ {
+ {16389181503826270360, 12110241482308603158, 18288412366208628916, 6215500050936591061, 6014488852457703712, 15271085167906108065},
+ {14292078858945118972, 14481422217835125511, 7781324865065249448, 1680769593324888263, 10152646427558791174, 11660961480686650731},
+ },
+ {
+ {12596615897631832150, 8821755551627965643, 9377179163931081776, 39054669779258365, 16376149550862611797, 14563278930531491140},
+ {16172472663040388770, 5190287148139844803, 9110064025691300865, 15647288432646291523, 11591045834006760644, 844689883380316992},
+ },
+ {
+ {13548776749212678702, 17662168188358040525, 12032615038574171326, 6080133567086225201, 16938431180779549179, 3443895457286094158},
+ {6436317213424755334, 9475881081120747064, 8925950328230980837, 1431876965977827621, 2014835158760914736, 12987015014298314305},
+ },
+ {
+ {6414994335254419743, 13126391477045983044, 7334301732865328995, 17814900833709399507, 4626754175182728225, 15638724462213933799},
+ {4525732141028097375, 8291242304314061980, 7906228613924545091, 15172916208217647131, 12973611124608613858, 14415032784796747468},
+ },
+ {
+ {2941763674782308367, 8542334074892503502, 6518009639926774875, 8175768187727642229, 6810163642801138717, 13000888070357934506},
+ {6742587576626772316, 6185408768536176876, 6199936764943605186, 14449234849358571084, 15099106384716206744, 424689763956421079},
+ },
+ {
+ {11352046731905647368, 13199556803131515747, 5716134925316732088, 5648788594959551026, 3705999902843684565, 560536953153999361},
+ {11871652593424132117, 9835410362049088550, 1151003289591121644, 6319035178000560268, 14320824175339506736, 9395144506212799342},
+ },
+ {
+ {15455730684964191688, 10234835525295487673, 13182207266101117103, 6524185547415883508, 3326725631592873861, 15008535546194382452},
+ {14902727792883529480, 15934241170433009830, 9499368143445027089, 7932650776206057878, 7397463728482754856, 15064673712954012572},
+ },
+ {
+ {10466244619397673266, 15399629207270328335, 17269983148989232532, 11915757566815614941, 10527914924508876394, 14191866475212875708},
+ {1195709843044148654, 13844920180243298721, 1913057717019589478, 2076654993296600487, 5771535096432721647, 5276006344600556560},
+ },
+ {
+ {11597571737530846199, 15087369689361537037, 1943002093062010773, 14166422307764789509, 9566693410200051474, 5715847907279017779},
+ {10365566668051221446, 15849087890611260377, 17862304002596752565, 13346541298411131391, 17741431867034125269, 5459305016755278252},
+ },
+ {
+ {11716528930963372212, 5531007692335820969, 16480109661368747208, 4989131671065416736, 1321744169687329693, 14777911526361771830},
+ {16382233147918448360, 8261406114108376025, 14558557421269437229, 14834971601402563213, 15317501415447267445, 6664947553397092024},
+ },
+ {
+ {5785339725163835826, 6971210823493195704, 16124144681939339987, 3475104212436227942, 6049658499241715622, 16458315540661701699},
+ {13323859344989042773, 6912561797063467249, 16800874344261680852, 8282162771440569212, 16369106286531876819, 1170526359132776853},
+ },
+ {
+ {9782081741251904701, 157951607661604103, 16926146768919338915, 7973413355284153573, 8362125879537081326, 9862990051212466177},
+ {5184297884162915665, 10244746657009000097, 17343337497982107750, 10499903102065327375, 4012731889022182801, 7003219507037376215},
+ },
+ {
+ {12814653486444031879, 695131493401594940, 5677983402953066279, 12084690974215027335, 10420441289745630608, 14692497896969958685},
+ {10769477264375836410, 17164147105428372995, 2619906011157181849, 1415661898003451303, 9866791318849538593, 11584829697149423292},
+ },
+ {
+ {14473501522542709727, 10749304489595316230, 2934355198146439368, 11017927560935119595, 5915324032076206144, 6354575443760924114},
+ {8112720200285039304, 3582240290765355039, 4273023256712648103, 18427552816472655644, 12422787084653101783, 1105225281604355429},
+ },
+ {
+ {17128222588782702290, 13487368180342466954, 18017424846076363710, 8988322008818510817, 4708906557988367239, 7838727005553267159},
+ {9398500148632613444, 2222389518787551320, 9441001728156177075, 11730541176540093429, 2854531586000055239, 9731840308469777308},
+ },
+ },
+ {
+ {
+ {12818200022021032544, 18304962199648570900, 13782454312217074924, 15136749185545329918, 6562515245419546737, 15005045681562431971},
+ {698694633971573994, 4013566334015448244, 14911595848732456117, 18305955879156015222, 6117212666624617460, 18143980466289027383},
+ },
+ {
+ {3502426890414957587, 12060773399876551675, 9782583782804195660, 2856421043271709331, 9172760811796379412, 287598491992287381},
+ {3574882806715667454, 1471467928527282465, 18213296168373130112, 14471573043027880442, 9733220931679498558, 18238876809557846346},
+ },
+ {
+ {1186541863308497492, 9046950340101487212, 2745706024936898790, 4989009340224862161, 12823642979701239217, 17942139398687727132},
+ {285479679301825536, 15862959466038586171, 9521459034208492274, 5591094499772746735, 11556872820220759870, 859478641511045607},
+ },
+ {
+ {15238342970318237289, 12057224731033370287, 3456414471220945721, 10398678431367169082, 16329262524936091613, 9810430130271885572},
+ {507823287632145607, 13852199732643342659, 6599758124440658421, 6281020241660422787, 7196547321920663751, 10793248012346291609},
+ },
+ {
+ {16383444525677044377, 2278315169443859734, 10660119552937534602, 11864735405260308934, 8495438467432993830, 17346877704286895877},
+ {3849319409996272322, 15807271853256513609, 1281702280418940250, 2373472013096372228, 13886255586271670807, 9001471337887209400},
+ },
+ {
+ {126909537204579598, 9749804666000980109, 16255800152061704810, 16609135318627234518, 17961723534307687333, 11140782709978313514},
+ {4136643585846766549, 13601295896682468661, 13257346841610635045, 13497111085366129373, 4536183896151771989, 2489943574182543991},
+ },
+ {
+ {17280995436445609182, 7102456830521880903, 11461813376456526486, 9119286224190937602, 1677507200155630395, 6530478943017087729},
+ {14611227007048719177, 251469378654353230, 4648274799629731126, 18315451912783545607, 16748007467838496641, 8627030552960679348},
+ },
+ {
+ {3196164040344762946, 13715698755805511585, 12458229346805024551, 3656509940452321691, 14877033093641476326, 11337317622750049895},
+ {13942131585783347058, 18149827011545790191, 14895656048349000943, 16669534928350175969, 12531447672595399983, 13192103245474624236},
+ },
+ {
+ {14145917324940179268, 1801646073880966091, 15389460022241189228, 12374720625988164902, 12743858920585304074, 17607177891983515301},
+ {15207272938242753632, 10413323271560975478, 12343096097117660807, 8269383012599149690, 15406849301603489917, 5134788699979908779},
+ },
+ {
+ {15888200229957314506, 14831411534621040361, 17970009204612188323, 2343767984014726431, 17841302528539551395, 17397648858980735628},
+ {5368978612132943636, 4213367444878083717, 2033768727106228984, 14322131493744692794, 1236700335920101663, 9898949435294220253},
+ },
+ {
+ {24758834352404155, 5091013253272577242, 2028941475205281304, 15518967929666839380, 18004005068930730609, 1086684650652446553},
+ {3503524165121762927, 16631444510755073447, 11468393061269997145, 11182831309911774750, 14403549322101529071, 13276637040909393512},
+ },
+ {
+ {16631857123721916775, 12096833102612622585, 17555483922966042784, 6723532965693736694, 5206953889265807064, 5257296707684647125},
+ {9873856732725887735, 2019034753037317738, 12416543296251547862, 11111904680478030156, 7089558964960452193, 18166289056279109058},
+ },
+ {
+ {10481925795166053003, 6733183822951411784, 2336616077761967501, 16214291345655367389, 1553615587408951311, 17704541651779617310},
+ {15809632617388566423, 7040680416264460118, 13227773672965345020, 5249395959455852855, 3700955432488167579, 5695246660982315902},
+ },
+ {
+ {1322177735500321843, 9036238380817454036, 7985514519046855063, 12745778131660207555, 7517032570151312640, 9543215009508727185},
+ {15511746435670372720, 1582199859560802198, 16232964063663491032, 18413513284071022892, 878561573889774723, 17999994568313632469},
+ },
+ {
+ {51610547936916636, 449080743773055520, 11895942441668539651, 11528163466753867928, 5327778117936222113, 8054693531038673087},
+ {2883116022051785418, 10880071210182937273, 16424612420341096868, 12563975202447499768, 17898191392637488032, 4341166004500306028},
+ },
+ },
+ {
+ {
+ {13532417727291518966, 15621487234118278211, 11434135490251796442, 12174621814582402377, 11920309846702883069, 2376809786088257319},
+ {13790218081512629675, 11886070728329073138, 14026033143551470492, 1787100914236464953, 304006454051884466, 2756779920933373985},
+ },
+ {
+ {14557765107140528328, 12355977617261039918, 4747772470536185104, 18066963986056971247, 2652951795222371597, 10786073208769016103},
+ {11296024438266601030, 10656113304080611004, 8026365448356501999, 2223277656070704256, 11257682407574091370, 7238909102714165030},
+ },
+ {
+ {2791395962931366632, 1203894038483281930, 15578449492227701100, 2119859552714176601, 5772832886191005383, 2752141942254219689},
+ {10053647313488524348, 5086479179724027856, 17277990771954143064, 15685827892771379266, 7735502714666745260, 9034852030753288603},
+ },
+ {
+ {9516343685613462106, 5255139143590615572, 12557738960870331208, 6702052925707924899, 9793008294868108308, 1711520204119625593},
+ {13236841202015067107, 11129785963068370784, 1317992927785313925, 17479451244447802402, 13036816126933313535, 12502011338757112622},
+ },
+ {
+ {5480168288956527943, 11042549818448342343, 5915412500172865058, 12999251329017129768, 5808021534739634680, 15104939226808360257},
+ {16234634328969043664, 3758395717098249756, 1015491288991804400, 5068251056783778816, 16324558660491861300, 1738698513676655878},
+ },
+ {
+ {15946881038575547502, 11116762950959791543, 1297081076272427975, 18245256277091707800, 15100977783223461884, 6017885634508292069},
+ {16886823282698854680, 2072463130596047656, 6569088142237167338, 1681498520362575025, 5901004614588673498, 17871763470160973506},
+ },
+ {
+ {5104558086478114328, 8971286270876655577, 16470947836284805745, 9037729831080471007, 1965555872583588977, 15433240281955214704},
+ {15775227419098203047, 9665258145206729468, 6253192577851256595, 14270940816171443030, 16612589103033695708, 15637879580008007829},
+ },
+ {
+ {17904034783907348399, 2626038317331972399, 1873258435072511230, 10005975240297222027, 7533652174638142552, 8419273188570922972},
+ {1990391844410141613, 7373216149717011445, 12388874252879150470, 16614842721902772761, 2061105669992609107, 9570836984475646549},
+ },
+ {
+ {8491665721135698298, 1799890999791860692, 2389734471340627870, 6270039658247138318, 2463312350149470933, 2217609086834055191},
+ {2540364179975154870, 13284898623265362260, 15339373729732261072, 4514279700129226946, 9114575154956391114, 2305724692490304627},
+ },
+ {
+ {16530141398463115553, 14748291394528377795, 12303798781899702708, 12438876515281985755, 3858890397627964933, 13323517596969431732},
+ {9818536194104432590, 16122491291064677498, 484427543635671756, 14180970696306090632, 9883282120273913918, 1968662552094340067},
+ },
+ {
+ {10479341768131470504, 2190791104965238551, 2211152119507925575, 2517772887931981229, 4163883984830586116, 7101754214377757388},
+ {1318955625560086134, 10530268190194110, 15248667065937080538, 7939869955605316809, 14313273335008385545, 13762768542953544187},
+ },
+ {
+ {690011461657587646, 10912073132311140135, 3674573373985417129, 1597723780107325694, 3549368082234927465, 5785289767244769610},
+ {10814725183340498172, 1844706750982331307, 3626691260264165038, 5983040194600768762, 14282060651990538968, 3649897431950147558},
+ },
+ {
+ {2301048926250107017, 14317366235953485757, 11632712123230515281, 15595916662388747577, 15711429699151908381, 1305749118231488029},
+ {10723669266169674926, 5797826425608678920, 17405218711301982393, 21871232298874801, 15013562554137035037, 9701498342635018022},
+ },
+ {
+ {8248839050962163686, 188360563145520954, 16729953975463785867, 3169981816175024043, 7187517706576344210, 9124675384823574083},
+ {10262932309387547064, 2404363551953852313, 13372721599356368606, 2531242226775172773, 14257983105055729397, 2642170875421515959},
+ },
+ {
+ {13319873663433996292, 13089646428714940315, 10556137876882685421, 11656950941183630010, 12276319669931009991, 9463441716524353939},
+ {3370727689367607500, 16018376472071193381, 3301478033055661161, 13190011310690675390, 3229558123256164376, 1583255490085522802},
+ },
+ },
+ {
+ {
+ {11928390292426988518, 12638952790538679939, 2608009033823001125, 1242834957664439029, 17797992506731473096, 10340201033905982118},
+ {10278753530600088172, 14116327152473508099, 5415842384660027374, 8566401179276240818, 4672386168367646978, 7541801451638385534},
+ },
+ {
+ {8566538196049418515, 3197654215985957962, 6355192582145549922, 2489061264757130927, 10197194261710918732, 3715293456694744633},
+ {1991945499394841082, 3380660455057193206, 9083458464137174418, 3254176369798763840, 9684490403170591220, 10473571146597457026},
+ },
+ {
+ {6457826063520179285, 16268949646546946980, 3097451422505225454, 16453171385247691361, 17481519375542182315, 8112355562842761847},
+ {18025352535213545210, 3750835203252893359, 10768297909412467901, 17629461198543052222, 10843179524144693103, 5226721924620138404},
+ },
+ {
+ {11631805870497408523, 18340134794831315912, 13311913312275168872, 2845528461275777300, 13173530356238926504, 14929218971024971026},
+ {2411139026399661115, 17215217074808016346, 18228531498431262439, 6710245408258710904, 10307545091592698852, 15144971226257950491},
+ },
+ {
+ {11109750770824264074, 1088007372340209252, 10263956230079210784, 13896899727089451859, 4559138529870539846, 7777534303712666029},
+ {15041017330059266135, 14622601734133247399, 7108706896655204385, 7934590922797237644, 7575713521896250968, 3332437975700014380},
+ },
+ {
+ {13801266825487496316, 15263809516575468264, 15419536487874300835, 9072780772100611698, 5969380434932396755, 11198543363610134500},
+ {4171408162113015715, 10202388527823988708, 4311928890627114703, 11816249602018388228, 16313146221834083742, 16629955175557153355},
+ },
+ {
+ {11660286662603189685, 1207956299008625786, 11363359882526736892, 12477550434520668425, 17179867938403281938, 5655901105940295926},
+ {136910678421418920, 2416064355587887290, 4502724777522615718, 17912124462718346700, 1361328791937120561, 12111897685488154046},
+ },
+ {
+ {8096344270340363443, 2517756701774451654, 9304005451085866903, 5715847369594509871, 9745892404944266254, 6051292773703160279},
+ {15884195349114695334, 9517199133306271549, 1066058705882005165, 8365496980814928779, 7686746440596632791, 13176504626066527022},
+ },
+ {
+ {5447100387998907411, 15776278570078464376, 15224157255965180681, 16441839948680600381, 8813248177057271462, 10796641304027905046},
+ {15358728422211379791, 6653135625270840458, 18255855576461478753, 9625920573335344034, 6295553526678577130, 12814858875321523185},
+ },
+ {
+ {17422403916567477760, 6238259464169695174, 11407009829093777631, 14718862258997290816, 14501697263370095522, 18221436165995139407},
+ {6055444735226512775, 6768775017420314875, 7196971579967975624, 16790550980878240131, 16309548149795408433, 13384461631727488380},
+ },
+ {
+ {14079161021446380314, 7955905127227850069, 6465999511395878315, 7788108352019910331, 6222197449376487017, 4871252710770322572},
+ {16673373722646856051, 13544022498694656238, 7378084945975549635, 6707761833586330039, 12377553912462035692, 17347971251371560420},
+ },
+ {
+ {14395815921984889730, 16242663560670555551, 10933265444645517596, 5914394225264036695, 16421696853010989602, 5685552142879689368},
+ {12020206507361369768, 11602855627342652015, 5200080540337794980, 15877202861979761300, 16623062677785575198, 4399280632997370270},
+ },
+ {
+ {1019528443634077636, 6201939062294227465, 2193674349270074093, 17838059521213356953, 17494214752031608293, 1870623058299198966},
+ {11485380789709140498, 6901145761334773250, 9249667932906723287, 9945518497873500003, 2287783742604500536, 15642905768346824183},
+ },
+ {
+ {6482332546440863608, 7760091220023803488, 3238194504321395476, 11017818554400598448, 15989612191997623737, 17176177776749389800},
+ {9233800304624853063, 15940633772893955963, 1055365280899111788, 17832351193102257533, 3728875607894595859, 11458906737664282937},
+ },
+ {
+ {8155436981174747409, 4245212880996209373, 7397768860981266872, 12376011921970823763, 6727814153288120097, 4925255243200109984},
+ {12956382084478097801, 7578047214327095169, 14028361267843039054, 12893429039763352989, 15016902170609700113, 3952485452273593863},
+ },
+ },
+ {
+ {
+ {10212113970351356092, 7523429041914331341, 7486406457607204412, 3324890123572559980, 3609678540132843360, 2779647883674003080},
+ {10785490009290216694, 5512178091962365081, 15405389773555373879, 17119053545814414444, 4550915783680335364, 5243325139730264225},
+ },
+ {
+ {15514067016142951342, 6798704670058921365, 15788722941232068928, 11593726264526847078, 2286988197169413876, 14828646074338136439},
+ {2215588591344044651, 11994073923064762522, 3627301481345142037, 17167985271749886895, 14022445437114653662, 7923678237890136587},
+ },
+ {
+ {6611156704115509785, 18035620512627347750, 12381083171658118986, 270239073191874966, 1473931467604861674, 16752630206679926972},
+ {13564215097326132206, 4074525343054815713, 177585984812302656, 10624670211816340622, 10109313618255604651, 14687069652115498251},
+ },
+ {
+ {16146132531590710538, 12624070149355925261, 3371340830834921143, 3637666900208692421, 12578993021430103850, 8399914141968916590},
+ {701294690134606357, 18348654154222046066, 16080787544185533713, 13729499035821774112, 101002779873624994, 6415359183199533087},
+ },
+ {
+ {893065980645567055, 9780512522735000137, 14013587606638438320, 2042146894211661930, 4926876227730145005, 17705997753590203223},
+ {403180381605128100, 2168255912491056834, 2400870712237917082, 7361183795795049574, 9566809726615509364, 6303637469757763886},
+ },
+ {
+ {17460362964014562908, 15586968786742110252, 8494757460457574325, 15624700433298528101, 17318575918908746254, 12652072085873395255},
+ {9835587478950302112, 15548301433729187970, 4835168265500394400, 4967939877357046781, 12172794064315424711, 13503969662963117963},
+ },
+ {
+ {10829288067385404126, 18368582702063329154, 7495898914356102398, 6638691277000448994, 12421305448095328104, 12913821326734578178},
+ {8084574956986873667, 5701547954903136324, 9827732902307175096, 9844605815961285215, 12681790933515557867, 11120448073083314536},
+ },
+ {
+ {16068344822778820192, 8689936877594040165, 8315547524451662260, 3879243152723994807, 4538257327824274009, 14758576181122195171},
+ {8434922169634574674, 5728614983829345478, 1650023042553620956, 11308715920844572662, 12984057269003477315, 3325170259493507497},
+ },
+ {
+ {2598915533513585113, 14183744977018914294, 181474781586722719, 14637209114370560238, 18213257975009888133, 16601151640440493077},
+ {11667415477497099667, 14085199965267867494, 16721473494118951513, 14499309470908758904, 12850701150110062639, 2986900412652523759},
+ },
+ {
+ {3221589256444770394, 11214409482440895328, 2728454368684972041, 11241800590680666601, 4667060631816223587, 4054750084181257934},
+ {16826694011900430102, 11268855356189298229, 17144797540779468702, 8125742309270210655, 3796632567822982708, 8322624158258003342},
+ },
+ {
+ {17852794608451085917, 15586644236280880670, 2638796224141730299, 6571369537216725099, 17238484134695994919, 6584002309074770367},
+ {332176389297000027, 13368981597643817994, 9475905376702633, 887026676346074182, 2659944342595076192, 9716495411301164463},
+ },
+ {
+ {8760436800248748645, 16559589424441408742, 17728067511446087541, 15979039360791931099, 1186131304518732359, 544669493272271576},
+ {11512458030364033194, 4234660342823911330, 13269362908985131848, 6620254276755952341, 2472637252854054812, 2804760878774068057},
+ },
+ {
+ {15928091392978072069, 1045418146814199706, 7425379098630386963, 16455708007612906306, 5515953762090790798, 4146738699702553135},
+ {5126640753769911542, 15649236295646849030, 8100061362821164710, 5931546784464607243, 10980236595948879217, 6825063281664784010},
+ },
+ {
+ {8543951044930873896, 6542715458284226112, 2761529550697027755, 10608334059217377785, 5013963483795824785, 12907134297467450098},
+ {980382309389436255, 7808952507916033869, 15275563855873621709, 5310054094388396360, 8349155105071860026, 11043771142323384823},
+ },
+ {
+ {10152873500779880984, 8921920392860909449, 14073008766417442634, 7574006587459435649, 8742698680973393947, 3634151658166442700},
+ {16215510897853847342, 6313231586526240160, 15374028344552157486, 16025015223144590637, 4962437968942642052, 2389997079243177935},
+ },
+ },
+ {
+ {
+ {14281041519735018975, 12922311381137007214, 10232502343768314657, 1134871332686858449, 2406027671397524741, 8211135280367851709},
+ {17686015482034995045, 13964987788145667419, 7719837707443653733, 11241849337066564058, 6107424228088781549, 6557866097251668304},
+ },
+ {
+ {44745771075211169, 12978700281287734965, 12341083357048397205, 1797820217645587144, 16645470871308398952, 5574272877734914713},
+ {17391736056610728361, 16032339083920183657, 3446991150741449782, 10033643099742979783, 14851902199569135753, 1830235897561763723},
+ },
+ {
+ {8645411699894411605, 1426585791906124213, 3579550076805920171, 9083173147160007694, 11631776499533913846, 8510913582608227570},
+ {1541698565399230466, 17192733751495667997, 1610633544366852348, 14882834591025699164, 3805773893383467941, 18227555101610282617},
+ },
+ {
+ {7654469169679738716, 17884541881059058957, 1658182501566786879, 2647862499567454261, 3575230054065121063, 5196577140526681418},
+ {12604411569045121957, 13620316591036967083, 18197402841216136733, 16577144861751835196, 1856064252812727669, 18261694871001689672},
+ },
+ {
+ {4917344388382226976, 6330884756405843776, 17908872738552769229, 5244919991308831166, 8697595492991011433, 4947226470683672404},
+ {8425523832699364501, 7754795213298783206, 8063207615592653394, 3563540304379150938, 15696361418241150720, 6209953025795422024},
+ },
+ {
+ {10542961880027073714, 14819776903900712189, 10788823732453390406, 3505823457495732649, 7370161041256253297, 7602319824210592069},
+ {15683925906988243629, 4273670365516442517, 3693480665904390884, 16506632164939082014, 15344251801076915117, 9664860330838560631},
+ },
+ {
+ {13453231080122146905, 6512465127883837379, 7629388504183246683, 4217401442467660418, 13133301451058498685, 10166079809976017824},
+ {7398318211270177803, 8363389463704327290, 10324465568426256419, 4965710503345352609, 2089060017802990689, 13427246861509147536},
+ },
+ {
+ {3328996401163396997, 14795923992923049777, 2850129498190588037, 2818567789790091571, 2452485851215886435, 10898789027092665189},
+ {14647661412525870291, 3599306402736479964, 3756515659636605976, 12815169094441383661, 15786213320252390618, 6231903730571064302},
+ },
+ {
+ {10711642105210749960, 3964832036350312570, 2594869633154010768, 7504273439683990593, 6171834057422616095, 12806635729425016087},
+ {6242042828168471440, 11746641890873718074, 16615154546579032279, 95454097875132020, 6393615725707696241, 7618061211687978664},
+ },
+ {
+ {9930957720367733639, 1077368814711136367, 2417053219800485985, 10848530230418354055, 7260326287853856173, 14141227535390115151},
+ {7830749040726146784, 9016206039825747868, 11290344305602325972, 14750454853595294291, 14714683920601490123, 1432121990527736048},
+ },
+ {
+ {17441977106390458994, 8730805915901635226, 5819567079469848168, 6321912429222256985, 837082610639548473, 15410302798534400718},
+ {16852273756502231397, 8917666851023000894, 14301029351076598242, 15350040486231497808, 1621413004527249197, 13889481477114808738},
+ },
+ {
+ {8916394881822438043, 1646293865051273262, 16633458954488857984, 1971089263341201042, 14055873993496913092, 13954758750729316517},
+ {12992583064239709509, 1952701756447682135, 5933085826608622333, 3590325588620993260, 18107021064040771922, 5262440036415899013},
+ },
+ {
+ {8672666323143994986, 3432698976158862459, 7932092920769909604, 9350507304052696520, 9950195840741471235, 3384863162662803302},
+ {11269793069739340493, 6207863446301189912, 12329276380474262269, 10965144619249951761, 97704029241884757, 10457642244982072945},
+ },
+ {
+ {12371754360290866894, 1591074855650384155, 8325409655366518323, 11442314427085611305, 10875405650221560131, 7491900189345980515},
+ {17244250783259713081, 9507080483851292003, 9417267023896977595, 4243988893984453349, 11064476576986125131, 17158304321030000154},
+ },
+ {
+ {5517940657612757396, 4123868648127756780, 943948557181189068, 6078511197957700447, 13220388742767098964, 3184112381859294304},
+ {12392153938824408522, 3168610752876052364, 350018255493345977, 2813965382812065687, 11093319528930675311, 6598131031733576701},
+ },
+ },
+ {
+ {
+ {17846260309109160862, 1306797101136445625, 11647460062050134126, 4280254741069645613, 13550506007057592994, 18283679445420746708},
+ {14822459580299409390, 16348337099471471523, 14343139876287082865, 16111294748648165111, 6270862100768665567, 5789912213367358682},
+ },
+ {
+ {200047379930668220, 3107506412723209866, 12635605344473049868, 6454603385777743125, 3634997813341433192, 7438775972421422847},
+ {13638641130311201683, 11030479200470016288, 4711568272785668705, 3373744634232082099, 12735396517885935812, 1666767200715548592},
+ },
+ {
+ {1661699022230626915, 7732150026917057818, 6874108361236320794, 1159587009959479866, 7007379701174607195, 9952444100833302939},
+ {5965322983127194050, 4366859071433931272, 3231323670368819730, 18362879607830583246, 5646154626466164812, 16999943723339328275},
+ },
+ {
+ {18089243736135451887, 15837467602480156595, 4979955351269012725, 12695524654989516016, 15309527870169710145, 9923199650873375699},
+ {477633266795650405, 6218407297793375468, 13972928132308654086, 6804584457444043116, 11304504344726657230, 16511473903383869711},
+ },
+ {
+ {18035621934283433559, 17683775718600141872, 1200977174684534015, 5313684562476274913, 16332322452774063686, 2145323195208686943},
+ {1572586157017613665, 6541397378767315724, 4667619245659807579, 6374201727420350952, 18032000221066592915, 2059105043707958084},
+ },
+ {
+ {12166351370380034203, 7102163135877977227, 13332299513090850017, 16122777051352557935, 1102940088487877845, 5212887364114727166},
+ {6687171729958891220, 1664933694283032903, 14897359728576714580, 5549891844111603232, 4137590082941305255, 10264069531127198424},
+ },
+ {
+ {272620083016298055, 17189778207291663400, 15639379971966818574, 3447379160890980726, 10696794611439970864, 16890999064760725295},
+ {9003356812390325490, 166360430953008789, 6721503120622592701, 16752071907266696152, 10459887288559544412, 16460372927471671270},
+ },
+ {
+ {15720666782902086695, 2243636647767906075, 14348999864993654614, 16530847832477493511, 13572226349455897926, 10485166353342867630},
+ {1701375111884628062, 2188828106789127558, 12645689658478144853, 8016727425888546008, 12431997919751623083, 7136689765653286632},
+ },
+ {
+ {3054654888507663517, 3901732615579060999, 11618712726777764967, 10400033150633623763, 11673620844004038101, 5065261890057318586},
+ {14496601939391821092, 11531645523028139605, 14474922880926708005, 7706650634046982502, 6570274599504352046, 7642596377689896565},
+ },
+ {
+ {7699868198387215867, 13465612880023018168, 6802825825452629152, 17947085319706590740, 399098071367693766, 2227253631387109201},
+ {7913744672279207864, 5711722633374904101, 16654422138819448366, 1591238867781947932, 13785062295639206639, 5681650681074277757},
+ },
+ {
+ {14302942159889415158, 2510726813191413600, 13501150440879192520, 14000061751928804479, 6039954540724187037, 7505529269867033702},
+ {18250665573771576073, 5127325503233443708, 14065731457493758594, 11160674673771208971, 15693171419798520829, 17233795126257791284},
+ },
+ {
+ {15622130931527103601, 16901855276484525272, 18102024747919573302, 7726517490109845107, 14147913176577212424, 12842015409583521397},
+ {8781643538636513691, 12123988514306098157, 16318265076922410388, 17085813739519115894, 11427890478685706148, 13711950220864410601},
+ },
+ {
+ {6680912247635161790, 17580838069043296523, 16777963020027530302, 5469775206057287185, 16990549936692332421, 16432218618617031088},
+ {16382011306148463125, 16249390935258095721, 789229423855427321, 5584503286135036603, 14761218594144073940, 14540866621986964431},
+ },
+ {
+ {9496858985145256777, 6425875918734527060, 12207380394759736422, 7438079918113743538, 696640929848616795, 4155405326832419357},
+ {10690817436861400384, 1479037799171245484, 13853435209996737946, 772955156615502406, 16556804502651134724, 13405497439711762710},
+ },
+ {
+ {12180390271623191338, 2554198210777409989, 15828648806466804950, 13386302369804389308, 17877328148870959009, 17063001337418714450},
+ {14566511491060416421, 5205063642854029012, 15266492670006985909, 10920630473589926436, 6854610609610056970, 4823212255031433832},
+ },
+ },
+ {
+ {
+ {11555239510565564423, 102493428844323960, 11265440475505070062, 6954957201906837447, 11578828270036850246, 5363571767815413948},
+ {10687688618938071305, 17560569863417444168, 1763490681657096693, 10285148253700502778, 228169834671249043, 3817223026964299801},
+ },
+ {
+ {11869614854023374983, 12616170826516189176, 1249571328192797152, 1152755290640443365, 17679907775602849695, 11345355428207169384},
+ {92124442948271692, 15136392605896368971, 7174298541623418149, 3977850961259601135, 15260799075573749863, 419190360224954337},
+ },
+ {
+ {12941138664806365009, 78537568941164918, 4499564597238696841, 9259817189360690299, 3875404300171494106, 18031393974005709390},
+ {14230220635083072083, 8633088687256087821, 9439675871539484936, 10592074684996303446, 5207584782270069594, 16579180203133498559},
+ },
+ {
+ {15911051168603653765, 12912915675404184524, 16445705037168890851, 16740563878098656388, 5961314645410792024, 7476305351043019972},
+ {11904755216174892471, 4508187020781349730, 1122261304753504973, 6085882050766589531, 8389757320097382309, 13048473480684052162},
+ },
+ {
+ {17680809686224888166, 2880007448785334434, 17671705111659901281, 5357941687184787676, 6416428659886206805, 2539295694241036705},
+ {15493556906347117063, 15184359621150444926, 15623522089297218213, 11422112823115234443, 10761632026600704373, 10659378440527931495},
+ },
+ {
+ {3820135739709169880, 7261377824800497120, 7489769782834815216, 13165627835187312122, 13110045944249714025, 1304982596015592431},
+ {10409327089880860262, 8119523470638259517, 3634401951306540946, 1979100535727127060, 7288813164350284510, 8247925357758448450},
+ },
+ {
+ {12278090077201324890, 16864061172993697783, 5587071207462858732, 14536122420710742668, 13859058519726422179, 10645667192932212843},
+ {15670105262718068703, 15430134228548786966, 1251089591865195285, 2149683357007094264, 1836398382617121265, 16062290149085488761},
+ },
+ {
+ {6401472755905860665, 18251568613645282796, 4758943616732471246, 6655672671851225203, 102549765979647744, 6901551898032346073},
+ {10154259747808913943, 13030720662056447919, 2754179948730913899, 214967400224523605, 9208467612937514595, 16909326990814546062},
+ },
+ {
+ {6054271246698272853, 14544060829566630707, 8136820029398201235, 953136503654279040, 84568208454785546, 14305961879546400571},
+ {1732011551860061479, 11399625830128770326, 10400513758237997842, 3165162339732221581, 9416667999137637971, 17092345029934304618},
+ },
+ {
+ {9400098298185420887, 5556041148968335564, 6912036430365340369, 2944702321639771461, 13167226429156120766, 18187144612223747373},
+ {7959639088001081413, 4236408582243967575, 14543785681099574184, 11098877575745565163, 14302577285379639548, 10484088530600671912},
+ },
+ {
+ {9373483053259607268, 3543313042332813439, 17074705243236711793, 7450654168557338084, 16833050907477987107, 16070783762419210385},
+ {540551482092433485, 896422619371514104, 138542949191418634, 18265302404419375371, 16792245401695248275, 12353390887345526565},
+ },
+ {
+ {3539472665850408941, 9973857813280052924, 12971804241703503646, 7407990072499301360, 9559955945280406647, 14424568234166047002},
+ {11096806861225971603, 6816003284380469282, 1147913720130733539, 13720120058704725060, 1399756058361164073, 983212633898190589},
+ },
+ {
+ {10664997543956449171, 454517167775805631, 15856261682659737800, 4154393874169146738, 12268872310704088235, 11262767255104080967},
+ {1686376439172079011, 12012369940855624242, 6114883187951156869, 778196593644747678, 2384399524034132671, 15059515630710187014},
+ },
+ {
+ {16693905404142293085, 4325377301783117143, 2580347499530969883, 1407527347166788600, 17454091049478095854, 17446410903937548513},
+ {12048478360023053515, 756323182854419638, 18183393958679661690, 2276830709283047969, 15484089378884863933, 11532985185158241406},
+ },
+ {
+ {962670163839534853, 8108389445709454545, 10885345009931744728, 1709075883125195127, 12639892596513679369, 7994345234505196064},
+ {3957358292438775986, 15177501453635460453, 5749874344089288877, 13980629880591955685, 11290207695256566671, 6266738518930986595},
+ },
+ },
+ {
+ {
+ {2112471176772812653, 5992610445858141042, 3359824065683384802, 14910744199028914975, 3540279332055051816, 7481318687562895300},
+ {3778660497841133917, 7665160960416784403, 18344176739282807989, 6652353946044311969, 10335050395834175287, 829161198718552289},
+ },
+ {
+ {987187890721916756, 1180893057043299417, 7997694989088471290, 13943477209509617880, 5789135275803442933, 15003053876978578152},
+ {11491981179365890542, 9783628750553484845, 78941951872642943, 413130106196007898, 5965786292528401894, 962843809509488765},
+ },
+ {
+ {8077344451961036015, 12071091132773222174, 3465673301214104928, 16928369631937685883, 5355222520769513898, 13361191077839573619},
+ {10372078388188800788, 16137701973564428727, 16378364657125535444, 14147781750402923873, 16760187636270495320, 7550201579272756957},
+ },
+ {
+ {14084923669266627263, 7553568273380849735, 15691370880642541716, 1999581770825966126, 4575194939013031822, 12495949140700950136},
+ {7538580687408334777, 17053011349491117810, 1716759308796398676, 16611187257146498231, 8469759805465235212, 12974300428352030494},
+ },
+ {
+ {859955691188282569, 13352606119576189973, 3180693414073792430, 5959867301005659300, 13835947303818547540, 162851927886880075},
+ {16769940376654738256, 9939117735531953429, 13149699086290415664, 3305357061162836785, 9009939707511121271, 13981210403713247609},
+ },
+ {
+ {15280492422823355766, 15236897741281284068, 16375251899685919662, 2375999612321238009, 6002020302005330277, 4867913810970375080},
+ {11372869170822493237, 14166186567360268594, 4761141133604528346, 10183261926525426109, 9349125973207534361, 8199961450165628412},
+ },
+ {
+ {11291117276267195299, 14973998728699422778, 16425655270225982283, 15329324944689574083, 7979576976920559153, 14994530807417641960},
+ {16703738914238983421, 2834957708878859809, 10020001258433278091, 3066018529077593047, 7903800555273951661, 13033393171964190854},
+ },
+ {
+ {1653789232981578275, 952371650849832179, 10927445400776044968, 12157933816885775189, 9290507541884583865, 12826421106361126902},
+ {551558165798937217, 1729101615745031644, 4791663141996814522, 16904640700879459114, 12874781959897756061, 3513760684524485070},
+ },
+ {
+ {8207357056686195321, 11137222442007015668, 15645132451218915478, 3105709674939731826, 10607257435983024941, 16912916807528355764},
+ {6323399773421218599, 2748551999608353527, 8626149829332963214, 3316199943098194703, 6716681752170794378, 2936787212120932946},
+ },
+ {
+ {15440834838198080689, 931869522652835594, 7592851540253747298, 5478596926880972349, 6652810167530776258, 4577181343372966932},
+ {13801964408907248297, 13739037151947376992, 8697064982745685286, 12401883107738713638, 2448777686813372733, 4016677910779410184},
+ },
+ {
+ {930435436459751529, 7291335211208166106, 8662147097774800941, 1754832412907874485, 11716049188393912454, 6088054938180223267},
+ {14767636360685531193, 16761369108402789416, 3774240452651006015, 8812730740575156268, 2441588704916651547, 6532572576667981720},
+ },
+ {
+ {14520642821078702231, 9152978367661523282, 6377069713671652085, 12296007202473970904, 17767917081512566521, 9137555524675129570},
+ {339729066832634027, 13577486648345315707, 8784435346186982538, 11788746341130221385, 17389275735918464762, 1499091028328348784},
+ },
+ {
+ {6895056287740805821, 15551414767986485684, 18245567068949911079, 11780461279934853858, 17514165768801962395, 4604945067503181622},
+ {17970049594076464754, 5131328972180637912, 14013492191391630748, 13860986326135334440, 17262237096531626622, 15447317764876697344},
+ },
+ {
+ {9241932972904406753, 10136261935647290984, 2240671992235812692, 17354651007012787836, 3225243242586300908, 3556466132564431774},
+ {15035753318658290895, 17220643029876180698, 5318335111039228183, 4424502322878902841, 2675895669690622325, 1884586557676234029},
+ },
+ {
+ {5250110106303814488, 1975207799636297674, 13532036578394208591, 3969043079520697544, 5728723625100363223, 7158702673653973988},
+ {16195684125677252996, 4149751094169622529, 11846551373222263809, 13787057146822598191, 16962390587607642862, 7670754904406853980},
+ },
+ },
+ {
+ {
+ {158721254439694626, 14016472328785146057, 3215742685919437659, 4283116501421190228, 14416945229571419453, 3260361759779720928},
+ {11569905182149055942, 13365945824267994176, 9560316005976549600, 8014152880174667326, 8983248355930398915, 6003107822914970018},
+ },
+ {
+ {11769244887375954354, 16734798255146218250, 7450660885486578621, 13241415025693890385, 7585701487764431710, 7068349087572048763},
+ {11673574025706412973, 12054573315442038381, 3465595090934871151, 14116150045410515995, 16747453732925727391, 2053788472539252039},
+ },
+ {
+ {8254128435175778191, 17961721281775180333, 3465171206067904370, 17786859311178538748, 5750765123994852536, 5373889982583891369},
+ {5947994461711601875, 4264969794290341217, 5733140740964071824, 566813084550213227, 3008438020483790267, 9393523034553376074},
+ },
+ {
+ {3488992165971683960, 5408858964234561845, 3943860838659448298, 10606370049279338924, 1497444843416374478, 5655792335049791924},
+ {991809778400186594, 15331432498205269189, 14409135173658903226, 4844024566576229783, 8437358490135848140, 15238255612948837438},
+ },
+ {
+ {3981945260589053255, 5238428271891653292, 17666609270668276737, 5136761226420502964, 8998438003563725182, 2026122825528004680},
+ {14800276493572942057, 12172612348684122426, 8309771000688236057, 1565694914599287285, 14726316506042877882, 9150853180590412510},
+ },
+ {
+ {17340721586269964714, 217529583853973911, 8591243800256753437, 13887006532271166813, 16938831598502428118, 5372377227102637491},
+ {451250041397357076, 4989306166373412675, 13630414847684491708, 3996969106514180362, 2275313485002180685, 2301296218808044149},
+ },
+ {
+ {4291242465719312676, 10844339224270608311, 2121832093979610215, 16773046612047697523, 10995952484439012381, 12237539089984856911},
+ {11585863874855568916, 13849634900022210805, 12285224492680055214, 5525310790718599719, 4273270766854007820, 14699310461571394996},
+ },
+ {
+ {13339800343403240396, 7709432974418657015, 5301385839232292107, 2969538953397180786, 3800860603349698317, 2508772359731689564},
+ {14378517458066378354, 8882708296441449226, 8558667663066577082, 17076224488360060086, 16842404219922924015, 17095860696531681717},
+ },
+ {
+ {6709186302039351677, 8451434297354584619, 4758927276311396271, 12322849161987713036, 3702550498120081225, 16306272953980522166},
+ {1037682183893893480, 14663627147661191968, 11571949542375472706, 5714568058845181963, 15981901038671696988, 11976708367028629004},
+ },
+ {
+ {11207839561296012338, 4875894249269467127, 5107711364762712689, 8192718242078932005, 5352423725257079410, 3571810293108102994},
+ {5515509758059991725, 7457615682786317799, 4860181546702428200, 8930731253012747041, 5659928076906420302, 7496101079865843064},
+ },
+ {
+ {12022229726853822462, 14706436872065443302, 3389725333074082852, 1604903701561777472, 8950817588405763739, 13190244158376540107},
+ {14016236309633488294, 8475371081917274175, 9944826967483171109, 18053549564499967546, 7930723406558155263, 4626913441465521473},
+ },
+ {
+ {2715165459263721907, 9674001561320555387, 12396221282651500645, 3973238506618524626, 7278954243806937758, 9176131567068265043},
+ {2372457887719386534, 5022496686095517029, 16913411979107538659, 11089957791594060315, 3232871551299762533, 10181928965032453240},
+ },
+ {
+ {13077103522673276166, 13953006147353067459, 13937321564029460312, 11775289180731898757, 9005718366158380378, 13645760323002406046},
+ {10332481686150199318, 5314709245555453273, 14740068464959386027, 39846363329861329, 6936258174745205094, 15346255345000921785},
+ },
+ {
+ {11902235556304614325, 9716523013532558935, 6408642420452662970, 10910145013733353424, 10487750635963941672, 3263923993556113887},
+ {3979263897601764948, 11489365827974628507, 5295637109315505928, 6972999611880974771, 1108442977000346725, 669149380592427324},
+ },
+ {
+ {1157132430713125844, 9939423443740928614, 7186655438202963643, 14372268141018236868, 12646427359638789024, 7392025192496396479},
+ {11172990535174193001, 1182082134585836558, 2511299207918210769, 2172910944443379020, 9484470871043901670, 1230325285277248870},
+ },
+ },
+ {
+ {
+ {9665579348258363865, 2087918080557695122, 135537599087992531, 15215723868160805464, 278908927488187941, 17503720082240216915},
+ {5744927809331053213, 13798298316314029615, 9696283778270547989, 4870358740201919966, 3439882118475813321, 4143783440792496951},
+ },
+ {
+ {7769489242957847290, 16684864626270304081, 2879249682816493383, 6265076094334458119, 6886499504502814482, 14195770023097875547},
+ {2631387143433279288, 16031347118135873637, 2311344129842860939, 12572114332759228948, 7732595900970909006, 14311355333002206999},
+ },
+ {
+ {11228237540890978828, 1079293124827979304, 7487220471408651681, 13548174215752533194, 13320332840506137434, 14014587572505105518},
+ {10308451336179922295, 1971803029831470018, 3369232812295268792, 4471651358093175556, 12478347644279240383, 16248645353907765158},
+ },
+ {
+ {881896658963638416, 2026615415208131225, 1975014851600144074, 6268313587596276173, 15189049743474081851, 14141869123482614039},
+ {4695467916519996154, 12465708679157180870, 11422608049605393187, 16598608052494558909, 3756011221236491774, 8063000249101262382},
+ },
+ {
+ {5494197245461486331, 15364625217797987691, 1134233848906038918, 7726911346031918100, 15503554540833122104, 9953446955839429175},
+ {719175439330210354, 11993546280891538825, 12098356945782186267, 14761662828882868605, 4054521887535828822, 568836477239613961},
+ },
+ {
+ {4895604554173507232, 12377758172579626987, 15401866685509290286, 9150363264406780287, 6123727635885171426, 2013086363637951538},
+ {1499537875756117851, 10260341551071830418, 15012297749974575104, 11295782034836939405, 14699384490428880947, 4058564242175274162},
+ },
+ {
+ {5697099271842625185, 11897498065292086007, 165253007275908673, 8683995743377403005, 12085865296553972670, 5953667974147175744},
+ {824129719356249097, 17390674672020315024, 14600835594781296921, 14157907740151210460, 14620516163389564217, 6402637035301660148},
+ },
+ {
+ {6814805391879506821, 13733360575773203028, 14964423068624665929, 2845857522246553444, 4737277078061891938, 14974979150537406091},
+ {10199845472834911755, 12457032282300718325, 12509382395143476419, 12723831063072297351, 9804751755261218393, 9738618498716380065},
+ },
+ {
+ {12971320806846916743, 6373340119401674163, 14940450957165318789, 6054294310918381610, 16262716106286726308, 11738163287805791020},
+ {6651936162381007336, 272251828638977954, 16782812253935098255, 157477203834421822, 9758166039167226447, 3757098019902685001},
+ },
+ {
+ {2797914620292272718, 6824445594276636543, 7612944636508242479, 12310914090409404192, 5900414063625470828, 1578574444575760813},
+ {1746963247281383230, 8358183515669196030, 114807234762833252, 3434169954702426697, 10754906727586255973, 13248437026834498974},
+ },
+ {
+ {10367883878888843605, 13209011820972196415, 4546179109832588353, 10048885285637082041, 13740390940277885181, 3897350217203120410},
+ {4420913340021562814, 4575173797445180389, 9128196763097374162, 1507217548372129726, 11871635706539357657, 731457449257913541},
+ },
+ {
+ {12327596966828336878, 12044047960030865903, 12590450765463213560, 10493254635328920048, 8651077485178084369, 6371936575607168909},
+ {5090312744055455793, 17685482889085467956, 9393295431338315435, 15080146787113774018, 8385657726957576620, 3383348226554775383},
+ },
+ {
+ {14588590004163196212, 18274572275841358391, 7651897004994035620, 7427055507937608536, 7778320234184341217, 16916348689537901989},
+ {2419944192928809758, 8857445667038434995, 11459028014322971295, 8519876766524924471, 8951414995530421895, 11510037251020037555},
+ },
+ {
+ {15790971709064914690, 17551616639212949181, 17685426066530430956, 8470300602731078412, 7440168085597529492, 7627174044502506272},
+ {1710862283221741969, 13964871482694027643, 617332758617265162, 3711135961102404485, 4655924078995340065, 2113569679148694735},
+ },
+ {
+ {2154983266339619301, 11861362304971063147, 4258182409238841621, 6253453232321750157, 15909672604786711366, 1482606699963487564},
+ {10258975978079697240, 4952492506950453020, 5749995703462780308, 9651071132904525497, 14977376759992362124, 14011541847161628118},
+ },
+ },
+ {
+ {
+ {11998317121553500299, 2582325766599936510, 10226444194055732720, 6578918458494290458, 16856344663543484552, 8023206593552703223},
+ {10896969734623517030, 8965286626042649860, 15869898932136510986, 188758287853374907, 3043553330642597875, 4825743274601412340},
+ },
+ {
+ {14811264716270138923, 9172209925012047033, 16222958531492700587, 11130963356286229429, 12646613143129669873, 15325043128670486670},
+ {11347507763721459405, 12900058314528881450, 5171017319841793302, 4651322121729076016, 10307557446743606869, 6055886709749279778},
+ },
+ {
+ {8183782069332642864, 4400608719297868437, 9887680839598123793, 16997602958862657609, 6307175890874383417, 14450424872255242386},
+ {6872546037892456974, 8399143418250687787, 9134623456632335969, 13760709404346799708, 12989741448870036879, 2909960824443156805},
+ },
+ {
+ {5430907109181030283, 16527229751480129461, 4626559521361924187, 9923786072582407723, 3599523730508604347, 7403949125284615057},
+ {4562148631066323166, 5805336986933520185, 8257255431523708381, 4507203543461357226, 5619824380968497684, 11986819821861980903},
+ },
+ {
+ {5319261111797206279, 4857131879138244426, 10148248807556188825, 11267161186123495115, 1870130028222872285, 2706665384656124928},
+ {17899120971855949667, 3796430035357845496, 12931652797283355998, 8202504218162242839, 4247443200870022359, 11773865795553695256},
+ },
+ {
+ {6197233327569567984, 11863568501944321119, 10309410692812279373, 18064151364176098605, 651644022956656301, 10015612095276572238},
+ {3712079372837513925, 12629021524719225747, 14243639867450874095, 17310848059794411658, 5934269651842912614, 7281399930842709350},
+ },
+ {
+ {2511581009523899341, 15219471439294737719, 7319331989694981973, 5501409405436918279, 16976076438864148161, 6162909726068177573},
+ {16008540889386100268, 4274652746244818627, 12394070200068488667, 263293445411113815, 16742410837666591362, 13337130885835734358},
+ },
+ {
+ {3564999479898740369, 187214543496040556, 5760327611422130945, 15928347702080842921, 5118946570680674960, 13188149096923612709},
+ {18076374160986186344, 1142074025295083811, 300437958095382782, 16478562199461788278, 15937231598514871133, 6966938597435454129},
+ },
+ {
+ {13530583958756622194, 16230919531879218650, 7960208013515434222, 8928487179767185338, 4297154246225352437, 18083693613832338785},
+ {9858555096056225549, 10553430097471230871, 12398865197153772201, 2169073753193400460, 15971418942371450367, 1091129085077207635},
+ },
+ {
+ {9681282287508526911, 4228346943866017698, 10211475224895899114, 1698892461040930260, 17803383979093774988, 10310416508095123236},
+ {14111993390309359036, 2601950955716363720, 6730639879397050736, 916578826304680783, 3894845782969558019, 14122184451458658420},
+ },
+ {
+ {311655445282733128, 2366794277731754693, 8447159453573507161, 12862724207019311852, 10879028081424972165, 3930832077575481179},
+ {14584836693230155370, 3726981236135324025, 817259866591722463, 134655665446114637, 16268648157415006878, 355268316254117109},
+ },
+ {
+ {4860532288606162276, 11004314106081710488, 13906897172384614977, 17082455640344885157, 9775380650399905532, 4859705013148787294},
+ {4027669077440695384, 4484628209953599288, 13138896518548468962, 18071971245715712413, 11010957284943999098, 3796309351538330539},
+ },
+ {
+ {13949338558872623983, 13999822274187176958, 4733168546809278902, 1627926466897635936, 17007149557493659471, 13788534126928728612},
+ {6675844921694720089, 9637011121617213286, 15573984252403764668, 2898513089190539810, 10606052222462092213, 18300597426015463926},
+ },
+ {
+ {9020738854941186688, 1697516889381119272, 10894637951430404070, 15457129124942948177, 16383433189144661467, 18047431570429355124},
+ {6107850723361208829, 17243425140244995421, 13395554308381924491, 1364807545420052892, 16213716354723238556, 17690236310907832398},
+ },
+ {
+ {2522091960819005086, 3742779915092319093, 16499486839317582864, 12740630314665543268, 1980734899856062565, 12849686842043469074},
+ {12935833425771077826, 83225990269841200, 15699446177561037505, 11225486016581978415, 2649847060493723129, 911854890207243944},
+ },
+ },
+ {
+ {
+ {12424795815234096738, 11929854285805518958, 1614907582435615152, 3243608722624509713, 11618089050999655243, 16450991037761706190},
+ {14791827265740380694, 16253295635917069809, 12967661044055669288, 8950779205008902591, 8504639429942410457, 17167078365929060886},
+ },
+ {
+ {1313046233449071650, 12998265777408570719, 4977133893460974672, 2561165906571264315, 2564935401972071022, 10644027015828213948},
+ {10686048288050006911, 9039002669587247392, 7778186232262317846, 15418338195770720773, 12395635872224741505, 11648627441950590376},
+ },
+ {
+ {14681037105441419090, 11154412906553738939, 16558423151175496356, 6285030627926492227, 10290832285247957235, 16522750161805300815},
+ {4436228920200714418, 2409858423294994518, 617155725363325676, 14011524653303053004, 5177797359236803245, 8290899194960599185},
+ },
+ {
+ {12435263296022000489, 14513062589041133148, 3001590359688622693, 1093106399238867375, 8390630854825882223, 5298071266967498440},
+ {9716703994510762833, 139163142171401861, 10954439330188883947, 3997722728391005309, 15245271690519046411, 2686187644733347867},
+ },
+ {
+ {11528745980014882011, 6182430424023761381, 3475082923360625607, 3076073459063455076, 10378442361972777951, 1928653322025847242},
+ {11275859159200702717, 17732962924665430019, 18439987823449214394, 7064944630179873720, 3304719418024411692, 2153772832250412099},
+ },
+ {
+ {243789443148875657, 14348824346423476228, 9830514620004209466, 15033617551094748322, 13287145353793822594, 5879970292069402674},
+ {12214538079058326601, 16847679853452995547, 18169365757890727021, 16879879400199284117, 7800932071917017135, 12460054258572695815},
+ },
+ {
+ {10090114058748492201, 7363290374561050715, 7843838338279350344, 7920870311130336096, 10170914017871367100, 9865561470166537637},
+ {9334256772527683640, 8581897812539458667, 8599471352803027994, 8796183458658268985, 12659201731590700622, 4970311472744086260},
+ },
+ {
+ {11601996913454808056, 2966774980339442523, 8806491719792949791, 10028525763203412255, 17850477211982122081, 13173986239201796652},
+ {4294659508144450490, 274180317020745003, 4247201611788433227, 5939975532167416714, 7655114550003254785, 18074517862019706540},
+ },
+ {
+ {11681890644329677881, 2335615570183618708, 12700694827537854982, 6177201878022338797, 10745204280522885060, 5447698501831385650},
+ {13944548355133223332, 13427954271655744372, 1758846050835724655, 4081176162908411954, 143138826110337136, 1333853703322284874},
+ },
+ {
+ {2393802334236414897, 13598149804179976864, 3558363201881498809, 10555101826553612932, 4227704841951906537, 100142050362332829},
+ {12474424570957807697, 1991825797392445989, 17078870348149694209, 1571893036435136749, 11842302574300496814, 17791109433102614838},
+ },
+ {
+ {8550811044062711868, 13733211819722662864, 17711131098892634177, 1540706468250987542, 3800475869236690840, 16871019571035580709},
+ {6156757348293294843, 16929121828562583242, 18390632985111796241, 11618787844989532555, 10141372211456532826, 10522160836096579564},
+ },
+ {
+ {8165081209334278958, 4318582065069784775, 8081574069194739336, 8837613972613683181, 8266196792698516362, 3864857654878740737},
+ {6803499104632318962, 10355487208936010141, 8739779104813710437, 12797187628326760113, 12836259478886858533, 7668861972296903573},
+ },
+ {
+ {8680747440971223366, 9209090258749385791, 982535240747476893, 4968038987235564059, 16403151423719561525, 11948841256741010288},
+ {12550112619626029423, 12104110998874624802, 7496321954500925035, 17315621249735120555, 15846515502273544800, 12285193498005904194},
+ },
+ {
+ {4458184136234141447, 13912288647211446586, 7117356884920961264, 5467268310638154588, 15245220777673729712, 1674280713480622742},
+ {11266978702654960956, 8634408824232294194, 14563437357018599132, 12842855704844405513, 1838111782288095759, 6169326332823577777},
+ },
+ {
+ {15630121427809305107, 1264840490697624404, 701327106091044566, 4687859862481244801, 4265389202393581678, 5961642557976590205},
+ {6203324135029419236, 7455513180678088141, 6200001572379546985, 13701878844691679107, 177549874223488145, 685737752624899694},
+ },
+ },
+ {
+ {
+ {17917652049280870568, 15058137289936578634, 13285085763522663208, 9845541049437644680, 11548676527161727192, 1593118089521595216},
+ {10864003938379607147, 6682934333876753207, 8053350681795059753, 551995444074003321, 3834039616241196288, 13845962738460690774},
+ },
+ {
+ {17541102291453342324, 16435134367897898459, 3939250297619897100, 12831289266484462644, 2672302121940744249, 7983602741649631751},
+ {9523831687169710855, 17856472103343426230, 10843947846323217757, 14788689810244029330, 16504581624723904320, 11424882804767220488},
+ },
+ {
+ {2900014861634585510, 11023132652887767105, 2781680546817585197, 2476750077618814416, 319701938011681702, 16893912712850804803},
+ {17902073833702688977, 7222956556801351179, 17573562467147835250, 12198424156050387872, 7580627929306217147, 13998202371779366768},
+ },
+ {
+ {1943983450904780125, 7408346268399740105, 575213954926041679, 1462915584543848271, 2793007152100116392, 14469842559338475936},
+ {3871734769136634846, 6700443490968311306, 6647535974540130541, 16864861301170855711, 10601116194391087412, 3578030254148841428},
+ },
+ {
+ {17076168913451726474, 12485001555750504145, 14937987845634560457, 16395528327395759722, 5249566901251131187, 14663685647372164951},
+ {10098944853248455296, 13972698641100795994, 1737447218715933176, 2714092024085619006, 11856165348735870270, 6799485136302256186},
+ },
+ {
+ {5871871142109447713, 3293520181912634558, 7939325551904631466, 10798118573813278311, 13730791012248413123, 10321504720930821065},
+ {17809680245543286190, 6650716579366069822, 10928266693125200322, 1399611361785322991, 5452474480776063976, 11884595003144475719},
+ },
+ {
+ {1276101160526991692, 1768819204291469464, 6678258399213622671, 10371513950625536782, 13597732847202290270, 16825083293383279230},
+ {14168055895026590584, 2774764008800741021, 2309957760746875777, 6610907305570878050, 9706314202777059385, 16449252911102591674},
+ },
+ {
+ {14813060919741573474, 7098612088410986625, 966349190955014421, 5030549973018435870, 16698536462268084234, 604473235996320648},
+ {10311165654586245785, 6873675636522594928, 14584273072844681489, 14316320659212458696, 1005079606220503069, 15954821355200367890},
+ },
+ {
+ {11183652692239073486, 8884116362394548598, 16492077002226140882, 16441016482531564528, 7470807081036429707, 9739141751658800808},
+ {10370008242233770052, 680077688048593942, 7591564246708190689, 3645206790017203395, 2343053669027771998, 12572086616810161300},
+ },
+ {
+ {7519219331676774985, 3636740765491217067, 5116697285820822168, 13451090039382057704, 1896663396212964754, 5095592986735787153},
+ {8207963783074146802, 6043379100202585906, 7652091558617243287, 7757654959377578673, 6081998859385971492, 2348786168616402284},
+ },
+ {
+ {7133122685181885176, 18155906669418812507, 8358116164721036434, 1130164626051647366, 2252530757558141869, 53649050676747504},
+ {6768458751052378608, 10192709252783071229, 12663625005887863612, 9834336599446253001, 2038072719748979950, 13671585969003086743},
+ },
+ {
+ {4173851761541023368, 11613248765669161044, 12438237453144940177, 14553457703654741901, 12124876439154757010, 12300911432501569717},
+ {9801691717672785463, 15951088982856589802, 13753872259817625075, 8949450803632947356, 12300776088138489008, 840080730448769108},
+ },
+ {
+ {5858476980082527952, 3415994521904095408, 16728629317865207261, 7095110407248715536, 9601602711454432831, 13502772203209999571},
+ {8615007365984796321, 6504095591339955518, 5137600816385143072, 13062434456967887391, 4631991737746920809, 14058443721136417450},
+ },
+ {
+ {1656883461929285686, 17999602600826473063, 1799632323068877945, 7732508045647761265, 10873882997372651873, 3506525810685866503},
+ {15989411289191292639, 16479471154067566511, 2001393974257662209, 843909327062680514, 3242569658964181728, 8478074943121574788},
+ },
+ {
+ {8836486505210648494, 10426577898344062793, 15007011756836364324, 313253543022452733, 11238239898276565663, 9629338715516113114},
+ {993560883855492779, 15607551791478573230, 15193357750834803730, 13987812869592549277, 8887672059344069418, 5889521823488896936},
+ },
+ },
+ {
+ {
+ {3145983761589624622, 17611056211316241576, 7512834765800752414, 18184573603751780835, 242382926403786594, 4397520716964975958},
+ {4247119304022133294, 8685419354613982051, 9278503793637334290, 16772431670903233717, 16405977360280723789, 18340424413449720973},
+ },
+ {
+ {7278488351594086657, 13741799650370721053, 7077234897085578231, 18054749312950890784, 18263305810183755751, 17993843681498715672},
+ {931117702416785030, 5163042803543400584, 7302612788872058407, 3506972565756252769, 13474801549451642960, 12996402258486911171},
+ },
+ {
+ {12722582186246792962, 8320877050791714570, 8335877567392598374, 13905858286751392828, 9736409409986876840, 11481277047355207753},
+ {10562168749192737373, 14796357906073824644, 5143880557235132223, 1571641856571928949, 2271316785876440591, 3660167720441454348},
+ },
+ {
+ {18049602908503252792, 11214422395908641790, 11430824735860140075, 2019476279635404969, 6289777936286416617, 13753051460215424762},
+ {11815459366199608802, 12257585796234971843, 8445139535123038318, 18054472803182783544, 7741484337923311202, 8173824012406015686},
+ },
+ {
+ {12256197267402510387, 13981324545434438090, 8854870249521577116, 1322567737371616078, 206839117288725323, 7997975760757403170},
+ {10936017633135714664, 7366988068807007130, 8063896872358704385, 2137626719657327928, 3857424773492212377, 2719356304578840102},
+ },
+ {
+ {301934102174571642, 17806324394288773834, 16260123717658024207, 2047056936294915604, 7772436465589087916, 10948745767775306521},
+ {9748882939263142737, 15303318171412953528, 951366600399039153, 11773285376383557606, 973693395285409021, 17741704800677625463},
+ },
+ {
+ {17924453454819492958, 11063986742596412626, 3141255180896459304, 6613007634173851965, 8230425337359415489, 9592328879812768331},
+ {2074105989750243852, 8292968072994968539, 1989007282115330477, 9773026020534605403, 575143206156426338, 15794135741551054909},
+ },
+ {
+ {8693419915948057531, 1857557492170437980, 3828328131632721806, 16028252623001538746, 18359326643571678076, 6797739150028305116},
+ {5767011240779324391, 1596344978223521735, 17443341853132737437, 10141092192444507922, 2880787045172334942, 2732830950861490359},
+ },
+ {
+ {3720564070329831762, 1116290302908559499, 8937540830788665972, 9131941124777117589, 17948366512937030527, 14685135061941669573},
+ {18087232427084058704, 16817803762356804259, 1008977742792474413, 9381957960616185727, 11019890287218060046, 3802083666870379154},
+ },
+ {
+ {4862605723300674513, 9575672576917996640, 7558492797250409763, 105451604303370500, 16038157294412882498, 8761291945534568660},
+ {3569807536094118073, 12152660506168626366, 15524077973685866450, 12984443099952829222, 14525324946986225232, 846797246005295625},
+ },
+ {
+ {16118471591100195500, 15075676621793721135, 16827468519303942764, 15179554880581807399, 17607860075908872130, 4006056291125828527},
+ {13532541668080502449, 6554388530128575875, 11492311210085820804, 17407862345050568276, 3079559812598152049, 1961041605272859295},
+ },
+ {
+ {11643823884368608148, 13692078871457260347, 12760667246660146798, 14632954658001918449, 8493526038677331601, 11799308386431974644},
+ {14675672791238509138, 1711971116872200846, 14683263505637045451, 9945937059533842597, 2533449755114148002, 182889653926968389},
+ },
+ {
+ {12117719403043995995, 2911986408429249777, 1810092692597231347, 18376367531841849458, 6595121441567685408, 12086792012295038031},
+ {18169524376531427837, 7290300957931658086, 1193279940028308124, 133756179824057793, 3153937764794889756, 949814549860399421},
+ },
+ {
+ {484820520924399903, 4326328160527123330, 960211674708882727, 8917024768858500619, 6654526459358471452, 13449950526572072120},
+ {9962763721058274024, 15699755065403197794, 16510141891401774591, 4621297269285137763, 9994000521116731271, 18052048126792112397},
+ },
+ {
+ {13533215919022444391, 9410324278985615744, 9852634656100194208, 1155971444710515203, 2911320463483837737, 231084108675667411},
+ {5261097282088390531, 14003855699351521178, 17744595804999607148, 12877326770237543851, 2381016402869931196, 9246060959671779703},
+ },
+ },
+ {
+ {
+ {1480509573599822036, 5087695994006556261, 17552775024242623509, 4908461990210297503, 7162610856648884601, 4093820247209466993},
+ {2797950306474546244, 5001803039722689495, 6874955169311742070, 16748306778408052918, 4663084007893308007, 14696281298177607450},
+ },
+ {
+ {11992083281415385424, 15003924313644360188, 16060749513147241488, 15017414158265602339, 592682985276747063, 10327384700468822392},
+ {12963019048030648384, 9853215583316433375, 5853002447766629843, 3573502149365840495, 7038518580360953609, 6673767391281747746},
+ },
+ {
+ {9298643174512728477, 13990767093997540279, 4393323960646334288, 4483648226430512282, 8076224304421767616, 6102759767515536930},
+ {3652706241006741637, 3186805786206752554, 13272394214313265857, 8224305150459867349, 741190616027468712, 63238693198034713},
+ },
+ {
+ {2449597540862217259, 12351778639332774926, 262991594157788783, 2680188811965411501, 615952274938618918, 11101057916879795178},
+ {15843704445146482504, 15768003479919439006, 16910795055422658817, 8210619241519359236, 13238407118245991998, 16212017713818083131},
+ },
+ {
+ {14806494457242751533, 3449804849483160156, 16962452567092059192, 9141394773020099337, 8870354660703521024, 3891566159386999852},
+ {6146187894824960028, 11953410583785840196, 4404488807426703410, 6773066909874546524, 13716047320419439079, 4345501551123937401},
+ },
+ {
+ {11770160881016297977, 912473005790610286, 2745675273862880545, 15571792568792967285, 10677789776282348899, 295569599270057816},
+ {6996654843946379963, 3996640705568842675, 12385530671849869858, 7412246026156424081, 8603296241680544804, 642377289008783440},
+ },
+ {
+ {11971881963673402517, 5439855382586921512, 16727103775229765963, 919596519199508651, 17937823088055377422, 17176167766106996798},
+ {3663817202726401586, 5233288534404927566, 12262379145132434982, 12524678428958655570, 15158879251407581617, 18113402803324294467},
+ },
+ {
+ {5911831825147712996, 11728153653307965512, 9638203731413711221, 7948268717672672186, 7633819740372611413, 7035796435141898619},
+ {6174193923587781027, 5408370123448680957, 4626366961562317252, 2309742647852990490, 16455916524028211003, 4504573468719265476},
+ },
+ {
+ {9058031745280178311, 690568667783443719, 5828783220548918226, 16050974080522553564, 13601922218850425804, 8808996512886455105},
+ {5092307204676037523, 2947766400331304188, 7168571072799599807, 18029292030846640494, 15149715177238445188, 7857041415140644235},
+ },
+ {
+ {11743616397824348491, 11497771481919230308, 7158569983910845263, 13603604323915554008, 3337542887194115557, 14157633378937758586},
+ {370281458279622519, 17762634864406198956, 11337855845757706931, 2929878283715844237, 13865396000587203957, 7059037007931834351},
+ },
+ {
+ {6973772658311339209, 791613060143613947, 207740421140774752, 15112398720810035573, 9603899779905889177, 5467205843920466750},
+ {14380982275701503993, 12490114314596206995, 6782837922057127896, 8380489751197838412, 8510299632595261617, 4701772950345167165},
+ },
+ {
+ {17694086330481919631, 11636328947060876015, 1995706737774084856, 1925297315118813321, 3075862652270344957, 6399044835008845126},
+ {3179065217616615921, 1550261549062697917, 6277396572721355536, 17738387466266963038, 8634038426968132537, 10728928687683354197},
+ },
+ {
+ {13587993255682028939, 3093746275081235678, 18152806066111947732, 14870862873010104695, 6947641398927171301, 6167792530140134466},
+ {15651443704630473260, 6642812576181662272, 17064834710938919444, 7375543199807976966, 14845457653197598647, 11635197020740053176},
+ },
+ {
+ {4049527531120095178, 4601134559076758743, 9749942598880804868, 3990727773964515788, 7976713942185951445, 3046031092694896893},
+ {15903097778987665452, 9044411259806049413, 1100762861888218692, 9340935249673778045, 13483058690067148645, 1545265903606923858},
+ },
+ {
+ {2035047113284776118, 14270860440293482779, 8925762303886288983, 14305197949489621718, 10202635115093639414, 10612436012257691297},
+ {4441413877178186113, 5982857664255490920, 2491752418622962596, 9740828623410492538, 16822026648654939159, 13367270937584463190},
+ },
+ },
+ {
+ {
+ {753467293193578188, 14319628483702379607, 9902332266754012588, 10961250711959848420, 14561592831116999990, 5289034957582773903},
+ {16878255390347501753, 6614600699964682579, 15224133068199077460, 8845898800353928686, 13501508557386903079, 12790515894544276936},
+ },
+ {
+ {11011452278678065531, 11497839782101232733, 7285443384376562651, 3269734604421310040, 13431092833461803889, 3947360924216217744},
+ {3251034893487035800, 12202372175578593549, 1928365734042402305, 13907315815562159932, 4942146767537177575, 9208365212678422011},
+ },
+ {
+ {12195725836685438469, 858993920875325442, 13838230858435487279, 3353504415316812969, 7929957941866392419, 14225218649971283983},
+ {18163292212490608521, 5208475779203961411, 18277468513758427896, 5137327622216988361, 14819617095799940577, 16354307604702819275},
+ },
+ {
+ {16781294408245827650, 10125764934688471810, 17386045350799928761, 7875599535676923213, 11646654052414081972, 13301057675984901743},
+ {12871815118558604397, 730917248827024292, 9514315608146867033, 513190696593073824, 15098974280120040377, 16196294686650511719},
+ },
+ {
+ {16909596444779110671, 10723968674526571591, 10996553782910854129, 16341969708695486761, 8635318916065362596, 6184764740785536711},
+ {4510923062913139004, 2099379644008359301, 12406019366618763142, 11660159720716101851, 9002817464305502564, 15689479522617312827},
+ },
+ {
+ {9012015558077211452, 12527300838564203164, 5537302239069624297, 4367370042010266898, 15289441745247695580, 4593879093246181819},
+ {7147970286091237416, 7287559954909509597, 4624960348890895434, 4403301422292173682, 7585442950983589875, 7325469891518486313},
+ },
+ {
+ {11624314814028789299, 4829320234443117094, 10699140943317911265, 14108042008131265164, 14865288068464758045, 10370004463666457157},
+ {5805719613941872131, 5896198105631611038, 1844096097102433842, 1338882622497873479, 2882306796959123998, 15679394935542538300},
+ },
+ {
+ {11839803958974077427, 12283042318798607896, 14631718929239598705, 3167303738550719650, 8387688327413311466, 16263982689936295493},
+ {4641171021165489505, 15063549369667052490, 4114993861532264470, 17514729201584918440, 11567986488283330737, 11751214862996904663},
+ },
+ {
+ {7533651708740465644, 3241255842488644864, 6743080020393835585, 9662587303565932915, 14065041846648071011, 12865213763613806318},
+ {3077902115599738788, 3561402121178551657, 14611443992052777610, 8057658460840092305, 3326179385599463412, 10159717164443540788},
+ },
+ {
+ {700570683660150445, 16431145398710913934, 14168612051358907826, 13260960614387819370, 12988684119093007748, 1867024934246155048},
+ {6311188673107170040, 3547825519151270185, 7128858853100723527, 4250551126633259556, 32233820825017096, 544635653753539727},
+ },
+ {
+ {8186226847711890094, 120861651635567506, 15214391831057401822, 9554237535615944181, 10075996254396042981, 14008290848782906398},
+ {16525833259001997344, 10952578407797544068, 9567631957420742761, 4694819969357735839, 7767798136118541848, 18127622189992993176},
+ },
+ {
+ {7372375356062107488, 14109154833185040894, 4602775210887940742, 13468454637087016746, 5719482738764538175, 4919648522641500969},
+ {14001774924525738221, 1330372407151555180, 3428768277669749657, 2816692670087351763, 9277450502900005529, 13715847643179616093},
+ },
+ {
+ {6794725365200966305, 9338913627946190988, 6477518264556505079, 5413655651412570539, 3966748832123982834, 17431753968516942256},
+ {2369756878476639122, 3529105775992784064, 8846093841954577079, 16453616771411600591, 4485347503114816232, 6730810021701621332},
+ },
+ {
+ {1450226730593401111, 2904272681147253326, 11091003663793942841, 12036368148456428561, 11936601964184969530, 16312603396316459043},
+ {4136271589497610048, 14294570804106047765, 15555359403853426727, 10264827714357589573, 9810665706497301464, 1311018743132753054},
+ },
+ {
+ {18271820402515351558, 8762537564155822450, 6068223146661937849, 5461403608011964107, 4988573958931158097, 10363771067980560783},
+ {1663617762306194365, 15095271556849436192, 3047795323021630415, 15887201493595197850, 7868923572436975277, 14683359131088610248},
+ },
+ },
+ {
+ {
+ {3584219355111975656, 16371250505380188607, 1783498323461654093, 994193781588257676, 9344084148092131914, 15250514640734155003},
+ {5059260913356645611, 15865386190442670448, 17548757651739284710, 8085895309926420946, 4682964998668660167, 5020215203959826643},
+ },
+ {
+ {14253762630740826994, 3822111194856117434, 9311588183436895562, 14738024658650371287, 10441316960341346644, 14194770708525922705},
+ {10501198799087781964, 6776195770649012397, 2069471581290353759, 16296715215024806431, 4534980656861543696, 6047881007434832794},
+ },
+ {
+ {2576612335437377594, 1899682712651141430, 11887300270792449021, 11804472993069758206, 10830999119719313280, 1741753179884488861},
+ {16286699122731099873, 3643516247376722163, 3682273255591068565, 6392728837720629214, 11901348706175159921, 16143485051395996208},
+ },
+ {
+ {16501275346405437273, 14761564517561445391, 4638515002973003639, 17077550066034272812, 3698823236196638906, 124739081757270004},
+ {15651979540537047037, 4985552038876265035, 13897675410836153797, 6701001687129639509, 16001679255576062512, 15935676633572097252},
+ },
+ {
+ {6152665130156855097, 9705469503204567708, 13951924545067113356, 2434138635056070528, 16591230788773292318, 4426260001178290949},
+ {6390121195308333473, 8700572060668754242, 4812036275221797020, 13956720073248299438, 1902555843966298265, 5202141163826482301},
+ },
+ {
+ {2205395724283622824, 14105060019721358203, 15333631923716583964, 15403277868996709611, 16053651221022177038, 4784915253302323097},
+ {971368063439244399, 827094312859966805, 1289222939864657176, 6606646522754926560, 17884747739152229998, 2668818780560918135},
+ },
+ {
+ {8525645166886970196, 3134143460247871741, 15116115167560752933, 3078800960701409856, 13059504075862532550, 9108153517754978547},
+ {8250610785324912755, 9363672325956190127, 1495074847941437905, 10404043508726832050, 3904454763323616406, 12813791572599100929},
+ },
+ {
+ {16231508947971999600, 13363198726931461200, 5108997208952476742, 313182511761731319, 13219320773345255384, 17738895122530321495},
+ {13811613026355251284, 8104379475524665186, 11192626091005940452, 12269372147510686296, 14390816163307043004, 12548485382177679293},
+ },
+ {
+ {8324780214689809449, 12924270761990727384, 15667753985117360698, 2943366707006427041, 10732039278085105434, 187369508428043393},
+ {13244759855456178980, 13648213682810990274, 2660837912365849198, 11976770768362504658, 9693934687975961239, 13497908482787476774},
+ },
+ {
+ {14274386677405027725, 5124210746189478907, 13406608799629323494, 6405757996539000551, 14833312365952984384, 17785392529319073280},
+ {7012330673098190805, 4918207845691492471, 14569574826272718621, 14168881522510616264, 14543438332068119070, 4326878510849999806},
+ },
+ {
+ {3341517100128815958, 2243420303688401610, 7153321666640309374, 10525543547452580816, 15776339624494341946, 7695076598671462598},
+ {17732536140683547636, 3592810100391824473, 8413963613597435501, 6287395742336969309, 17465824153452860115, 6235174426722257030},
+ },
+ {
+ {5115445260875459050, 16200730294025276633, 6547940770886449207, 14513875339087588525, 2198135911102420364, 5169696006198573197},
+ {11212158904251814892, 12437547968034770636, 11358243474088174481, 15452137528587726940, 4669136461455404974, 16320538143089060251},
+ },
+ {
+ {535242441654234443, 17036092933883802967, 11600759291125000719, 8050420965161709260, 17428526452419188659, 16458791281477337579},
+ {6849931777343444339, 8512792140518036559, 7343733992893241199, 600235943839786928, 12840987592523793156, 9723169304965060621},
+ },
+ {
+ {16910417058622635394, 13917679375324377616, 17959562963138340920, 13359247597962361445, 636821169073744083, 11256621821635909669},
+ {7096901051607551014, 2253054364079345329, 10215298864674526475, 8119225351234426800, 6541463265042612592, 12031138687814031665},
+ },
+ {
+ {5533765953345363299, 3666831701473191637, 14428123488067625678, 10208783684904868326, 4235254303243099550, 1152270923153823119},
+ {7789988973198825144, 6281293996379084253, 11378132145663703106, 3044105183226657672, 15306186828154649523, 15118610766364934343},
+ },
+ },
+ {
+ {
+ {16935319226801225402, 17479248115784925404, 11638874181787898404, 10204689344548103047, 5117503946912602321, 12798676317624404688},
+ {9505799912502843544, 8138377038334669868, 12720954262725413506, 15335292261188744188, 15038060543229285980, 8787225712640151227},
+ },
+ {
+ {15287318513745980942, 15744943637312052287, 7712210611206194812, 2217808902952441036, 2880866790953980192, 7667233076242231085},
+ {13340980843800511721, 1457443910895561494, 5659029865434015148, 9961325920271003974, 15801510722608035636, 12796727676398023612},
+ },
+ {
+ {15122689851130277466, 2795800145719527903, 13568032512724822791, 11462146579021072831, 4492622156197866593, 2389375563422758140},
+ {12865430000561425758, 6876703980342191229, 6462758017056646394, 8138171318212409116, 4936990990444974691, 5220248005727829595},
+ },
+ {
+ {8222368087744136131, 12347516717036849679, 11297745347969103984, 8698144848560622671, 15235738417459308488, 11458307232141527973},
+ {3156981165764697119, 3057909217286827485, 12707579681957851551, 14845444651771540740, 80043930456510931, 1427289826580350896},
+ },
+ {
+ {7271145335703081483, 8550379746366065405, 13222245170616935372, 1540183103607345547, 2206602728696862159, 2058073362893523092},
+ {5459388607478785206, 13539611642074024292, 14402323904633266753, 11367015657725980988, 17537636140146252991, 14350125041234662967},
+ },
+ {
+ {15616429048255216098, 9646593367959435050, 10000076172445964456, 6887507833360734784, 9214691284865468772, 13407989755707318537},
+ {23319057005728778, 5445755128474749921, 13782721823710291190, 4306629918002434911, 15715349716986824199, 6251943698106742954},
+ },
+ {
+ {198559125451872098, 8385427235747237692, 4233027135118542510, 12503554726860108589, 11105115177544924331, 10775185446004113820},
+ {18212911447748408345, 13178565926755254085, 11114640510577499, 13843735599818615925, 18381258674287597192, 4756672869046810150},
+ },
+ {
+ {17538496477622964185, 1433183888673756786, 9984974491682898090, 4517808169349623741, 11986465564270089848, 8951472393424828879},
+ {18196670723256299192, 535472157380722178, 693981884244746078, 15216522065428143733, 17726679260273203578, 9642969849409448024},
+ },
+ {
+ {5160114191168942061, 16463297770925271772, 10584792713261988719, 171850540846180989, 11579918515133959672, 10396694913224588816},
+ {1922695067497914227, 3714397082557422085, 14915689713324864917, 3021901216294169148, 8451082446819513089, 2760044106111795702},
+ },
+ {
+ {2097173236089378814, 1814647054859784608, 10170299954366323333, 15955393059406664485, 4430370743633462938, 14617134597845327698},
+ {6936197719765052068, 2035967928833128806, 10470936468275213989, 4552370931749195957, 7631626755294792165, 6995299789974072943},
+ },
+ {
+ {12192685447194213477, 16243788027426389138, 3307221830229366704, 4572373691827105584, 1147991015406820584, 7590972120066359889},
+ {734169818930149130, 13046977851131733697, 18326449449602619156, 6629039284529698715, 7271937928914886253, 6619823517983792967},
+ },
+ {
+ {3491881131560177144, 7135322509001495847, 7718439954155088601, 939390052225540969, 10510098057025374009, 1036897112091468594},
+ {16801210479572678348, 15364620159660153125, 9689801136876260321, 8466379544537007598, 4580285922100315708, 14754066353072462775},
+ },
+ {
+ {14236937969687093384, 11875131250768543855, 9199326778448473576, 17010296519672747261, 1432191715295448820, 7240396672478525409},
+ {9282856696818793150, 8929298554101654038, 11691758527810395698, 13529214720842330904, 11364130274429289404, 16330417304431446315},
+ },
+ {
+ {15048936394544601723, 9976495942367902744, 5091911528724055948, 11917276080086885230, 18264141168509742890, 8988005100166523392},
+ {13433041019916296924, 81537940451447058, 7905632599843138323, 7403634956612254316, 9471327080643618410, 14680725036927871901},
+ },
+ {
+ {2480592968060069230, 10676679272536823217, 15243200241275199686, 4240286848559333728, 12603956967014393016, 7473015364599570554},
+ {2693765916823593525, 17572693658548274653, 13118888526718862906, 7144820876393735119, 17370196132870621301, 15051190136387242039},
+ },
+ },
+ {
+ {
+ {15739670027855719825, 11036910205333787352, 4021544392863474986, 3565553387347367423, 3964961332364428282, 11603690097938709153},
+ {11178322814781082150, 16935748921430175757, 10468742523886846223, 12912873445700591944, 5891559088297154919, 7322207037498008851},
+ },
+ {
+ {12503447801634120868, 970610322114574805, 1771807998727008733, 13441366741769313415, 4222236502986444720, 6760646999389453689},
+ {1245452496533201083, 11777722003914828797, 8588751099069529352, 5461466601148872630, 8337331853046009840, 14200040474835462559},
+ },
+ {
+ {4381862158218819279, 3257946724717759531, 5715153718741221113, 4670267951691935548, 7126319499291794377, 7414184252515644416},
+ {4409132192672707346, 5008109015870660081, 6646364227378002309, 2739818052318307018, 5254205492507002412, 2818763676677612931},
+ },
+ {
+ {17099575116390052440, 10771651599651215927, 16162078968288139277, 11747949268467955645, 18198632468383550806, 5718826843079118428},
+ {12831818154622136923, 1139908981801729025, 18325634788038344414, 7897003381227512409, 4530946171065941992, 9839081555707087441},
+ },
+ {
+ {1822027882663919965, 2586692059104727545, 5262003340562216457, 15937894742226805212, 2377491755233029350, 2199279221179036230},
+ {54627843603070570, 11018477725217416055, 13581326215347987485, 2599428256427468431, 13357876536889150180, 5983800947159377657},
+ },
+ {
+ {15875913836362316711, 10364504788586479828, 17159094454348286198, 2800760017120758514, 14648701318118632258, 10084646760313097110},
+ {7413441597539522638, 5800112976104553529, 9603144930153129200, 18001343598967203147, 14907060105560621240, 12851016504514458788},
+ },
+ {
+ {3323767885881860783, 945816439403988314, 3122694203407892777, 18097120801908111115, 9507940132379519570, 13017216324377796046},
+ {12112635426215062124, 1632305052635647076, 4503287615961131543, 5133655488959366792, 13376146870575309121, 17882590448286769229},
+ },
+ {
+ {16466564999101809423, 1103282883706681354, 13897339472612964740, 17515405571613479317, 231560140111353554, 11990302689318760970},
+ {7461824051127758032, 2488635053784032130, 6738969321229436836, 12690895278364961387, 2762939532146449635, 2566430231249792091},
+ },
+ {
+ {7209658814720595696, 6910205524542965175, 16895432611633764341, 1110904616599822555, 768894652460082360, 5179276470661463666},
+ {15046305975780485616, 12488826026249142249, 8883750914202815334, 7813886526674522093, 17626611286752587237, 14173740877250861014},
+ },
+ {
+ {9184078983275066527, 171829382296912269, 1767211109057348846, 3838810139883956938, 2892177352325525577, 587540104068323612},
+ {16438018710111896232, 13071494062615911086, 9382254240153787479, 17837390153984245022, 9337352294335969384, 18306549772652293379},
+ },
+ {
+ {14206472070300656666, 15149876885322007535, 3058976565256742606, 7554155984973508676, 848860206737153803, 17384966138802851783},
+ {6071585659381516479, 14599727484496636530, 14181631841630691241, 13597791031715947870, 787248750081521448, 8147947928967221166},
+ },
+ {
+ {7004817083098459682, 16726689782184453232, 3213280543725383668, 14046342544758604883, 16080740219683260927, 6076899979239474997},
+ {14309002016238865418, 10488447184497156801, 10347316099979186191, 11941243369619909359, 11458632538231428835, 16102685462015086321},
+ },
+ {
+ {5487055055828671823, 4943171312842343470, 2928579838198416229, 11795723672039180426, 15618595864800120544, 11464055884874039484},
+ {13454571326567663312, 12358687232096370990, 7938409714147002954, 8608381810067054636, 372913087078823561, 864501330934225576},
+ },
+ {
+ {635797081607123489, 1104369599182677226, 12483036179234706450, 17056128228042647500, 10009312675611681732, 12059669643105161762},
+ {11477626132980303816, 5618063553013787498, 166943516871328425, 14701206874730673486, 9058640949987144681, 14563869860860339278},
+ },
+ {
+ {5395965497092106349, 3612539035634205771, 17681237127506582399, 3439193647142441652, 13780614753565633276, 235023041725887347},
+ {3033179449351627440, 2044311760483059251, 2065568607574809846, 17974731450209330886, 14177489327434055447, 3961147821444060613},
+ },
+ },
+ }
+
+ @(private,rodata)
+ Gen_Multiply_Table_p384r1_lo := [48][15]Affine_Point_p384r1 {
+ {
+ {
+ {16703670340392818579, 1286760518886852636, 11248394403413918835, 4151901610420793306, 7970266049123896154, 17445779790134370107},
+ {4329645970348976719, 16042142634338562513, 4537215703931505808, 6697447871083152280, 5793772036565999466, 5422118019001268159},
+ },
+ {
+ {14433915249620809430, 14971215887698628099, 14827104772163660010, 11634958463871186927, 828474226872480842, 5684743366783276110},
+ {1331356080952535699, 5841511589364898644, 16990208903097464526, 13569226881169318218, 14248664498875166094, 17077506676755919754},
+ },
+ {
+ {5595676609776115867, 14618789080398559922, 2201134414120099102, 470895016097834742, 4102274241195483625, 2844568561456831518},
+ {9494102924637200590, 7204580187252836546, 7742575358791209801, 5793245187166312694, 7454323588778133219, 7806095107071672157},
+ },
+ {
+ {18441227226710925557, 4630553211990364563, 3567153708366150805, 3858385788220258018, 2078907395053339838, 13453284031779612583},
+ {16169419783227686582, 17856966316888004876, 9896590068038479498, 14513417153433374062, 5670844902446917335, 9309033883650068756},
+ },
+ {
+ {8174394611136832104, 13491946505368383532, 12716018224795668623, 15943834453938385647, 3311092385060995418, 10887239960276233526},
+ {15318725704412058702, 13116557402644158788, 14528201448082359539, 9228826301082322952, 17581754887086264468, 4047041475027063331},
+ },
+ {
+ {18438599215442843313, 4015537097131987576, 1561321091994153296, 9662659929380603540, 5578281112816876342, 3480911564464745823},
+ {858348351556501620, 17689640268312640141, 6959330516163154977, 6424518012595766799, 9187284181582831648, 6293794091600054382},
+ },
+ {
+ {13045229387657188208, 13690085938659083295, 9600974199166858024, 526884655886879619, 9290237641803195661, 7044646765166233376},
+ {16602070129307025076, 15849288967186609035, 9092091796131291387, 10381155581334810487, 4911799803962481643, 914336345096302600},
+ },
+ {
+ {13490991706206957717, 8927032385078017633, 7775090801253487746, 17974570142754513596, 464854089971106110, 13646019468240342346},
+ {13801477758808282478, 13267721605400745615, 8832595569781960770, 9823421671556846000, 11348861522513112089, 6704673626616438154},
+ },
+ {
+ {8798162395637210450, 2683284686000899615, 4296198105208970139, 7947505075124182900, 13030877569967081055, 7202635434125543310},
+ {13802611418940267507, 17744356624256633959, 8515974827567262278, 16069780865789899366, 10235134369297564617, 15382730249140051729},
+ },
+ {
+ {10693928681786088231, 1868325427202955038, 2891972363284809610, 6677373020746038340, 14105047344690585066, 17441979056936361876},
+ {2686563440401097160, 8335702271416969845, 3158278451667439105, 5195564280130047356, 13312870524821286691, 15037483265391344728},
+ },
+ {
+ {3961559481920028500, 898644078007715818, 14752617534552494351, 10654851227350209338, 6258212134755923496, 17327451745924835018},
+ {5507497779295982340, 843987163524714857, 14881898850445300947, 16441634412065732426, 11312619178008978797, 3479463508901782856},
+ },
+ {
+ {17561502496821949095, 17726839616498802252, 13796139019518438084, 17300206272420033420, 10454206928587256948, 15885557324996538691},
+ {16041928347765771195, 2239441821804334412, 6135738566013018613, 4043665170586576566, 10115109045930619727, 6594457533842211310},
+ },
+ {
+ {14756924596072248000, 4565075227644918341, 9793935188935462586, 9388712027596954480, 8006957541468583297, 8242831277630235578},
+ {15798273981155867752, 6668583424992018829, 16434344268720351774, 3606110602406722084, 15561842144076827952, 2349656254358783019},
+ },
+ {
+ {3253443540806261442, 12555698908805436602, 6007490220897601617, 5307008481266272767, 13393830130502009899, 8899654776078387782},
+ {4245028374464324749, 15297078807106399119, 16491046288077512347, 4048243407351607495, 13370129289324274804, 9876476920885673812},
+ },
+ {
+ {5390721684048918729, 16937659987125372309, 7680342595364868670, 12142253496635306986, 14233066834308424598, 671988498495879468},
+ {2704194713182753691, 8912885238785332267, 15078054313953845804, 4795992794995133067, 11649755685481317418, 11930012365952944103},
+ },
+ },
+ {
+ {
+ {8103759701478546490, 6028420157132162257, 3067900158853996905, 11583772150650265, 13094984669461418774, 6924985893407600465},
+ {54958071128185219, 5021622351003191237, 11654157968548247126, 16247401174679100696, 16385802195540251172, 1031107974518303989},
+ },
+ {
+ {6428454722497658491, 10574271313549116822, 6743635881957160769, 16913635330376244749, 9681507818909145851, 4876529861171491293},
+ {1814394652136903734, 4968086053144023329, 8920542953983370742, 210240699625540355, 8955586987380900266, 2164268895419701767},
+ },
+ {
+ {5608034336248364138, 5067877992472687888, 1933286244725713046, 13242405536880737213, 17263293185510756261, 1983344179233384988},
+ {4237886563426459300, 9362799971325551733, 6786753397135169332, 5328115443562703638, 13654670013742588183, 3496580653988254115},
+ },
+ {
+ {16071914267185072355, 1315031918944783309, 16012293156990256785, 873056734499530638, 182560274640457158, 7405766622048342074},
+ {16511661555914077662, 16795211140914816975, 1916902833101131312, 1130623122713241497, 3989275369171052712, 8501563225308840504},
+ },
+ {
+ {13149817102019880631, 10613889292284716178, 14010209428095701112, 1069882031932704860, 2775529095131230131, 9347998569909840066},
+ {4409541671614199253, 17197365123077983458, 15652322139676023536, 7678148401641840335, 6034482384901310542, 9413989696720117446},
+ },
+ {
+ {11107110071047359159, 16288145590887699966, 2478598181863120847, 15571111403485190543, 10919164510183037186, 14098221725957317118},
+ {3061511168275528853, 11371457453448805883, 8189313039485832750, 6940285322230600293, 14956213158219260245, 10799498050375169041},
+ },
+ {
+ {5031907698608444539, 18023991803445814565, 8556321431341137752, 8726888316311726846, 15478462387049033552, 10223636290028566398},
+ {1905780687053743980, 6821165281886008665, 7646114077486165623, 3026148831014052877, 5536359622022292613, 18100746543211803131},
+ },
+ {
+ {11288497443759020267, 4363091778301392226, 8219453406085589946, 10369445991132585411, 5649747494026709400, 18114667371941410725},
+ {5194421950530684100, 4023001639787678110, 13257830134828579022, 11041975949961923389, 15908375997592753284, 6836247357428864861},
+ },
+ {
+ {8547337202213930412, 6990159258245634878, 17883445208299166982, 4330231136088960102, 6472431629071074290, 8131668855043775727},
+ {1615633974804093366, 17702421785830517013, 9040817873428455213, 7253431082049880663, 2580856565062595255, 957305604392189103},
+ },
+ {
+ {12550147352209098659, 16706353701874781568, 700985739649075400, 4991698549871850585, 14639605956467764796, 3990548737524847695},
+ {2159031565346056390, 14297287012776021245, 4068789221096394891, 11837860404566828450, 1306127140860623184, 8582603028558393539},
+ },
+ {
+ {8572221175486824716, 7382610452565148879, 3798240777531515882, 7720424940498032163, 7955672733623916913, 10400992857478606514},
+ {12536704118238452711, 1197472667002221920, 7958112946414946287, 7516882332626933011, 6786534214144691859, 10528818884598336300},
+ },
+ {
+ {4533011924393772581, 16478214876471299994, 2870575348476289509, 8319688882646555414, 7938557478377595810, 17061203640304685056},
+ {6044136899841184844, 17176981934203875292, 14440091607628557291, 9556569541816694726, 12283955757179373500, 1728837458486823533},
+ },
+ {
+ {5856710237476933835, 18180055770541353170, 13666756016638015302, 9964122442248888293, 10568196656880286198, 10795529097021501365},
+ {10291893071934944227, 1707329095509852784, 10774246437350578760, 8243808578767563702, 9842723530450682815, 10188532762574071159},
+ },
+ {
+ {12927366458992235142, 12160026958988547745, 16049652135447450561, 11154205822470049879, 2553582547365345640, 1479077593723189613},
+ {6276822011775852642, 1807019718136820449, 5338003307650859330, 13548512004292529114, 274283195318475252, 4262254754558484551},
+ },
+ {
+ {2472529054687466938, 17137589090954053016, 13215293749622035568, 14627962367947576303, 10928297195163569905, 7813265877078949706},
+ {13456308939723513800, 13108147281933977161, 5072676724153339749, 13630316084050530379, 10412807778936469738, 15061325193703102493},
+ },
+ },
+ {
+ {
+ {14062262138187338878, 14826409911427014159, 3147169237468764230, 5040482455529903325, 15961102847332276086, 13076348733721508834},
+ {15710048825425827881, 4711284320020833684, 5495111936001513123, 3975264090403135121, 18277552338555821101, 4982873089438865894},
+ },
+ {
+ {5881757900577935727, 3082203099603789340, 10587626589676775022, 9790887005834760478, 9753637089164583050, 17530540992010733452},
+ {5906674355300253726, 14153899797650168477, 3203393482568874434, 7159946211415711208, 7770493192583170243, 6644035929201092924},
+ },
+ {
+ {7565543376250635378, 4894026024316289281, 1064629363627018549, 2229266393711567405, 13431836127556156122, 12345166870816475249},
+ {5683094813130145113, 14460568816529669593, 16208596146346015783, 2251060002020925256, 6312100574995421868, 14142863082990548960},
+ },
+ {
+ {1701333505386754372, 18113825521491950532, 15971836848310645636, 10666804696553863930, 13339073901359549963, 9016082484725164613},
+ {524595420371030344, 15193894147408008715, 11249116561046537456, 1416362693818654170, 8646200124849404878, 14789125286420214299},
+ },
+ {
+ {4448219040529062825, 16518108651741681163, 3867577730929059843, 12855944907169975887, 16383070643186103984, 3819970029429236068},
+ {12270348593365308353, 3228624969622433424, 17746128033189004516, 15514466691444838563, 16922017859272304090, 10873928830553796343},
+ },
+ {
+ {6961979079470599534, 16442399973939705101, 5377070573932785756, 17366295333623521118, 1494760113702996405, 429566900985508037},
+ {14596353036230607150, 18306968147291386069, 1956159373957339528, 13362661793127394768, 11047915751588023609, 15562772745602654490},
+ },
+ {
+ {12121783799905148744, 3210361347813891304, 15601117831098401384, 11374300947166969030, 14495343294857431451, 16887049363902653749},
+ {2806824323484143617, 5891762208520246921, 10519788632722533851, 12406881532231465105, 12476596345610166775, 2929326634009750346},
+ },
+ {
+ {11619033824779825453, 6336011282085668010, 66441947656791796, 12634397924162340700, 16056962418493926156, 11181515142520561407},
+ {228191213136585541, 10830330953744400264, 2487877016763970308, 943175580952184167, 46830635233029711, 6767691008612241467},
+ },
+ {
+ {10533215390069074161, 4240175145555423422, 927926585809726275, 5478507036975461437, 7372848586643865635, 9188187990850719132},
+ {8456896957742765, 13507092707706845733, 4249106212594536568, 9711299350266342220, 13631286176123080117, 4243238077447546989},
+ },
+ {
+ {18238242856411579816, 7012871932937161633, 5224050476172253536, 12408721251948601788, 10429115795365006677, 3477371341824366834},
+ {15692232122888670788, 7069484297055312625, 1511660220915668033, 13645274720004713009, 11371041276648404641, 3227460690876065865},
+ },
+ {
+ {9499451334789564187, 9807725712319466421, 17195273970347031491, 6512007407498606377, 825966736514514068, 7114432455006537628},
+ {10929611578313393309, 3516227960140039809, 12431877805751955166, 4016269285378947058, 8308345904367589503, 479384259777781962},
+ },
+ {
+ {14823174488388431791, 10564122197066740052, 6359884666645689361, 3305490714663935161, 6956926106723106036, 1757044025346810681},
+ {9218490684456903330, 17894538754746428292, 3686852509050441380, 11911436761000976094, 11281044983406290132, 4794870267149123419},
+ },
+ {
+ {6169315169310965043, 5050462902740654046, 4420119860349968507, 5900509286663583281, 6291948542666637974, 3502179279509591327},
+ {13414573911064604645, 8561174987712176835, 15147203171479718083, 8916929729860280634, 465692852423696059, 3241796192189938737},
+ },
+ {
+ {4805037083483896463, 15749560291366181979, 3006668833558996338, 12746633991383561533, 2093748724448476449, 9143995667421057397},
+ {862280791886494713, 158031676650943923, 9973152260325767561, 5540147634920097817, 18166813436129848595, 8728770860976175253},
+ },
+ {
+ {4780823618183778549, 14061468507515826456, 7924000550603741539, 16510436260807392542, 17111673152849580261, 1234594638075874309},
+ {16418687934646105232, 3635175728906499987, 17864341637460241578, 49761007765188774, 5595562975249122128, 5917189370132161288},
+ },
+ },
+ {
+ {
+ {2891150813386726224, 13575952774970790164, 16329951209698470872, 18208247565458407151, 795211506291706468, 3446245218498235605},
+ {14887832502310695652, 7581320984927408991, 15304466638902159963, 12725650577835381689, 2109861799774686052, 14818469767057813718},
+ },
+ {
+ {8520307348850101682, 7147166939641194797, 7109795853315555561, 442556286123685640, 16703274587824683126, 11297170023439632439},
+ {10777125051934595230, 8742602774458406457, 4568334189916483142, 9580614388736516768, 2144947800046381092, 11233838117038064428},
+ },
+ {
+ {14724535093102438262, 1097342397055114606, 9684252469138587855, 10770495648038995593, 4782115196813486405, 13108894563021474936},
+ {6186407145212796523, 13044986185014550590, 14287812581901877630, 2228056593434999714, 2377539634072584064, 11484070981184438199},
+ },
+ {
+ {2372261882030647536, 17006732445240006818, 102465582613597482, 2306438222867094987, 7030387201499219717, 5620507683182655462},
+ {7426675944447602092, 17517494666366669692, 1813907813072832665, 1664846168154029277, 8169354358603845783, 1009146886505697517},
+ },
+ {
+ {5359889361557595171, 18332881320680903217, 12992372967564983467, 3235336283246928496, 1918122366598530872, 9672910778717714037},
+ {10998109349782570051, 13802180944593323119, 9243457800738211841, 14095366958484090980, 16875322389911718389, 11796767024296942452},
+ },
+ {
+ {4154159147515201722, 1273058311504047038, 14930295376923149691, 3541538910606543693, 14677828445112984159, 5652606725362693691},
+ {12587781688969918075, 5762437720521018878, 8791631222951065564, 18036051705319852103, 6505939774259762064, 7898749725936014100},
+ },
+ {
+ {6073232427180312380, 2682532781858699359, 12899347092203445153, 3460025242522313749, 4187053964557337310, 14007867821755778993},
+ {18308269875959593333, 17332777355331823582, 7827095597708416078, 17863450250717363140, 18143218844291088501, 10900355318411639865},
+ },
+ {
+ {15193822661262360443, 5913328606143520006, 4932960895618406335, 15675963329264670252, 786659723967404702, 15232212664900441010},
+ {15668180363894430003, 10607216776267006109, 5301637052223037456, 6083790571087095778, 10053342033687645838, 11423643886760792179},
+ },
+ {
+ {13508339220661185864, 7911953729259324588, 18173014631200309538, 270516748480480779, 674907878659291397, 3314126255600287460},
+ {11240909876624153823, 14246305828355338213, 16826984562886383731, 13091972868382905056, 16310998494569268055, 13182051848225269981},
+ },
+ {
+ {14790615268961369640, 10646825950331407644, 10001662541750174959, 4485562084633894157, 4694132461615297692, 12672440127863843193},
+ {14852450733356045921, 12752269371731614662, 1290625671287973161, 2039070529850743039, 8986721707197477570, 7630558459824216971},
+ },
+ {
+ {3913192058752964309, 374802346376725418, 7620720531723602129, 7342095966104858310, 10538685091773236584, 16209362234668385483},
+ {12484799568540253613, 12923921033391389174, 5685298310721897238, 8993584320789077055, 6359972113055748935, 3898751772482394271},
+ },
+ {
+ {1075126414131149860, 16702551730100501572, 16055620698555862254, 12278885216348953795, 3548642758697723931, 15071720148450568818},
+ {12280024271646974211, 4447996993562488799, 14555333424853785642, 1510116618615803509, 3964481213568291913, 4155814256055970508},
+ },
+ {
+ {10647300335660095520, 18204591302040110305, 16964359131090101117, 11243541948462109820, 8583754773070458282, 5855117432513754745},
+ {12473603800066854136, 10368688750745799978, 6023393792530123639, 12684166823166670856, 5507715439369687446, 1938961554823093885},
+ },
+ {
+ {13853144112993896041, 13666138769156330420, 3081504300584253886, 10998940258778477483, 2715364081362496022, 5105801355297802600},
+ {10251345083070754091, 5637878810016321791, 2328631003481310687, 8881649909555714117, 16947069603315339244, 7416533920645212782},
+ },
+ {
+ {8283704072516909927, 12371773270912112344, 3092081269786213287, 16680017677990020370, 689642403329869517, 1983474266047873258},
+ {3309976929403283249, 12532343087642554741, 13903549971839166752, 10358144884777122985, 5685607956768455269, 15212858975393784996},
+ },
+ },
+ {
+ {
+ {1974541103187663850, 14419503307385213572, 1910357063271577544, 9405849388295731825, 8846714195441265126, 1825348137739350109},
+ {8946791593625047664, 7707902765438605609, 16743886742959612839, 10498180759536919434, 17561637045610857774, 6591991118449510560},
+ },
+ {
+ {5396387893935102068, 9492930398296567082, 13435301371127725418, 15386190233236435468, 7248487611273180305, 10016334808351425905},
+ {11988208056926197509, 10137338921708783421, 2716545254572709847, 14606914623397840325, 2555748042271077974, 4613981232528869724},
+ },
+ {
+ {1157528445712671795, 7268820473896949348, 1310099106886122503, 4262348507724938662, 8917553728509651151, 17005257183552454953},
+ {10059173412034340597, 577994398230440258, 7002708654309095293, 10286301441424331105, 16384815498995719862, 112791320905797865},
+ },
+ {
+ {12313672925235387459, 625188478309360787, 3630661012849554290, 6134464256048521087, 17936871466010965416, 17564699109077082040},
+ {6761309657688544628, 17284240846518446876, 3570047841144108922, 15668537842491950089, 17083391336599335387, 9282566732138308423},
+ },
+ {
+ {14888961160828833873, 1864596543262469754, 17784154409948684103, 3052077954154793867, 7607056789868369456, 3894203281376040408},
+ {17710090260347574598, 2210004113826562961, 5671161332907863757, 6625158587348516953, 577771095520713590, 16394908675016020276},
+ },
+ {
+ {6603729010820482722, 310501835036252193, 13954871388003056741, 14251448811909808675, 5233636024407453469, 12245878228209898903},
+ {11486231149562966694, 2835585577048418114, 6551484302395633982, 1147669539433231355, 16475838258018071696, 12247646139693000214},
+ },
+ {
+ {8095718986263574912, 10516714254110691975, 10870802407417590732, 12874599804285329736, 16364633263585191132, 8865300776110950252},
+ {3563236263281283648, 6644962740435178657, 13092866580083075501, 16578846863092146456, 10069414745327895789, 9434194139304387489},
+ },
+ {
+ {3556391957256886772, 2045016845106055936, 16226354733380887667, 17466044866167164875, 5174514841894426254, 1878394346602870901},
+ {6716526457444196714, 7250663133803025807, 6718545916437832659, 13969599547915135008, 9325220973174112271, 1581163301870356679},
+ },
+ {
+ {17874459379059293830, 17502662865497015769, 1413180880150211940, 15088446747480281041, 8470145037392166085, 15096281883892228601},
+ {16563437908222832225, 440803266862528997, 17031080291135092609, 11406614303171495232, 3723108198050621166, 4347405779711045020},
+ },
+ {
+ {14923234998584905456, 10067479898750534001, 16939842266743060751, 17700070519960195683, 5683478503944407120, 11025361952743521652},
+ {4209605377271021882, 1469922120365400988, 11514012988142017467, 7856087734177419136, 4097954809069446909, 12489390616599495992},
+ },
+ {
+ {17122478311949624172, 2606406176820258447, 10067594371237100910, 15451154690481864146, 12038146827921735864, 15614369208187755152},
+ {6824524079696297568, 2015807129229573570, 8194028607199100376, 6009223747668470820, 7772398281249621704, 762894964403298890},
+ },
+ {
+ {7815360071000367774, 17901565192138878313, 10434394026011307506, 17374730254587070753, 520674668586498531, 9514841979847171014},
+ {8950553127025783937, 14895127801975478381, 12425287594242504013, 4645132844100203397, 5976766478892526023, 7370660544571859011},
+ },
+ {
+ {17533325387355455402, 12119607747199535982, 9073368446213478432, 2599055833895753629, 2355979442709556838, 16659690147892928501},
+ {6238157733277724851, 1384135036242951943, 2192811311355019409, 10465103238457430542, 13159060180143520417, 10257462144135243277},
+ },
+ {
+ {15864053898474748885, 3221238804944627, 6003608638035281159, 13653735634664806453, 8230891808319557046, 6613649981851363837},
+ {5893628415615729604, 9710922278586234190, 10395125337377360528, 3931451882481143085, 15979557321922502583, 16029662329812025753},
+ },
+ {
+ {2992392235075872590, 6059858128867517556, 15617366226623071384, 4111806970940100258, 2815759757037139466, 11575444833660170455},
+ {12346698926973835666, 7263128764813325306, 15235588485234058492, 7572978345825547287, 4333826640601921394, 1322529269991380909},
+ },
+ },
+ {
+ {
+ {9784032244755280441, 10040637167065316270, 13599824657669619733, 10375431024260591386, 11026488569773701752, 148008158803836909},
+ {14567290934774912661, 16110515707287744352, 7491732171320356409, 940936830894493669, 14287255966622464286, 5426456074085300916},
+ },
+ {
+ {14969046289595378522, 2961608585839402462, 8313047147741327249, 15157159053809069603, 7193489948575262630, 14433197008239894898},
+ {14199648694191979725, 3269958096730932465, 7497592897262475128, 2728526358559655944, 4744743661876038842, 2743084008632367240},
+ },
+ {
+ {12708234784965893093, 3307842163098541971, 17303873939057534192, 13260319540233926124, 9019484163029605371, 9900024564598332822},
+ {9160913700210863226, 14428342536017851587, 603459719728403776, 18236218541634735507, 4474730692000472054, 13244873297017787236},
+ },
+ {
+ {1470084386249125812, 13287518884856486050, 2962960042040907088, 2151437856455287500, 2905195302281113959, 16356195231949614105},
+ {10979007359054784823, 17866133863009475011, 4170501321215960549, 4594340427813823261, 16023065223081480373, 12495390124432989208},
+ },
+ {
+ {3972369974785239897, 2263460443502958971, 271463035813818108, 4070768510424378794, 18183758750525376366, 9693239897287717465},
+ {1475136609401905372, 5379591160737925092, 8153537820525801184, 1865515692994364877, 11166184186139353884, 7175559837327764278},
+ },
+ {
+ {15851820172704931949, 12655143336395232851, 14730294842561239904, 12459362250042251879, 8382688064372334901, 5889068791548184842},
+ {8985568054046695170, 3001288673081076633, 749616385212969715, 2646834045811835619, 4782194008578140982, 10854034154938442923},
+ },
+ {
+ {3566983516939841616, 16390187007609797937, 8741971305711964717, 10988398606335852160, 7867588372988852672, 14538400485602331946},
+ {8104114227557982732, 14039413126798418158, 5102330106089863488, 5619388808486733299, 2378045731360365970, 7775897872465058879},
+ },
+ {
+ {8285639907960685452, 6907081304694029245, 3932091882248482870, 7739498675000172490, 10103249503689721665, 15185105419572705287},
+ {6218795015578490321, 6781880938546434941, 5905078566070212755, 299457794212684954, 2165089807353723840, 8480540247598037310},
+ },
+ {
+ {14784673784599919989, 2082260535205922993, 8168045341288037020, 11903543474273736259, 11981001928254322331, 9522037239934847936},
+ {14472653912826320219, 11309503817936052299, 13738425228648904701, 8042010790362339419, 14117271511958285496, 790309299276090992},
+ },
+ {
+ {1732476059839006505, 17018699420444452651, 12153180531366356108, 11316536740921479323, 10078354046704171747, 10800231856927927233},
+ {9504117955400644407, 12280517700591263912, 1062093141564177828, 7578015021890571031, 11569246388902651024, 17406496106428159878},
+ },
+ {
+ {2347276268330916160, 3811437762946151257, 13719307347921295013, 3930073025002065810, 6454531622431144143, 7482466867004373254},
+ {4716770925419565679, 5110702795209658366, 15071426966139561730, 12738769369895983368, 9464508449545437568, 14677026754609888388},
+ },
+ {
+ {15527739528861052501, 8795354980099030148, 17061268663297745190, 13090961285447854468, 15698285934641221614, 12271672067594065876},
+ {12952447277463416183, 17845959850709540103, 15366734867247877735, 13405705559578435369, 13317381544359441361, 9727437258673830028},
+ },
+ {
+ {11430653818134040708, 13972160408058655396, 7084064239516383189, 5779466131231952465, 13956916356587340454, 15097328365167500151},
+ {11851587197086244848, 5814948700376813477, 12470797735177958521, 289525451793692048, 15282352302269881904, 15273112883324865707},
+ },
+ {
+ {2162599553469592657, 4663793700503951742, 16049802300031157625, 14926606091765253431, 8356290077455847249, 4143079345240852597},
+ {13247139040866943853, 14022573155642926251, 207855347034742811, 4720924427150657828, 15071740430405402718, 6051774750243840661},
+ },
+ {
+ {7719115525766766580, 15211733959779219234, 9890856375298480641, 2106523170188804656, 11116661084796200293, 7362312025325548799},
+ {3717785929351377088, 13315020865788643418, 18113403510273317893, 14815931788618774540, 14634966516940592950, 2034948857717155805},
+ },
+ },
+ {
+ {
+ {14244174369224556546, 5342392209233508928, 7438713248457968580, 10614297495547921248, 9202135001584851596, 3342234996026879127},
+ {13691335804923598208, 15140348432227922719, 8428540434060562744, 12043754816218808261, 10858831840083451813, 4598155351159579828},
+ },
+ {
+ {4498695262421386143, 9265193209482259657, 17498675555682479110, 24163428822819825, 16737629178311549749, 11187404778246278772},
+ {10767729479345778777, 17391117902918412174, 6880253873200674120, 15284410651868444657, 12792198194450228219, 2395904758303124696},
+ },
+ {
+ {8158446918957702678, 7546107368870022629, 11717312886106537153, 6923216345857736395, 11003539876942772744, 1153070042831623474},
+ {633963820936975157, 11353131760056430258, 7976658868901878513, 8020939041587681581, 8591633705762983526, 1696346219311964099},
+ },
+ {
+ {16508671692567979884, 7478096400789445774, 14273613261641667275, 16142155569890490590, 17190642547002219793, 1935098112081588531},
+ {4595462997311059955, 15750249483900207872, 5924388750545229489, 5293390377249847029, 4749762219313386172, 13693994083245523550},
+ },
+ {
+ {16380431445715687892, 106230990604580903, 18014344013591313889, 1033379254497495760, 12516742637402838545, 13779274142940005848},
+ {9785610002952463038, 9797590851340545635, 2035999898130400225, 7132629806216558751, 9169445448696845522, 12182932187779129821},
+ },
+ {
+ {501907073775093791, 17308901417650437752, 14252322144012009433, 14212853038379844496, 9157666821207522685, 14098967321770430754},
+ {693358881197934327, 14629222976781047974, 2813134959990207271, 11343356266664072637, 6987651623587825922, 10281965377549280543},
+ },
+ {
+ {2764452604422336440, 300997096301046019, 14094398322842717733, 8058134187047147246, 15215625261188908838, 4382907902287523761},
+ {8492851920809087726, 5937579395094221111, 7477845800356457342, 10689515189034436722, 12617667903878138436, 3774778193535313798},
+ },
+ {
+ {9960007214821980729, 4069548394854294195, 8627747251011093233, 8210112892681901809, 7088798910112129600, 2053428079297196270},
+ {3702967442659062216, 2310906403335544760, 7567753294056516949, 1948580970688562476, 13536454877958536205, 6639944374963599628},
+ },
+ {
+ {15295696372734148976, 3579596265901281843, 9574081162895456810, 4923374886486176154, 3219363399904390571, 5015637093415491888},
+ {4593899936599160002, 3908598443341109958, 957285171332479030, 15321912334716832124, 7810866701395908986, 1221281858922781688},
+ },
+ {
+ {13874958592881679723, 6638033067173937719, 12963324999336699337, 14597466910971525853, 5238085686240872501, 18280593805011112769},
+ {1903676504579977735, 6574951020929533498, 13950840705690778416, 1696682485827935789, 8423274085423453740, 14078931046981905240},
+ },
+ {
+ {3517518319454019911, 10814049823525725669, 18276808946264820784, 13619936204927961226, 229197000889315492, 16087612506648744856},
+ {13359110821899203348, 18273672153546569067, 15448342392556280774, 12827254463788206440, 16731815387033480424, 14776988595871001826},
+ },
+ {
+ {15270415391437565596, 2028683490070884787, 11702183509282950225, 8688196922408363831, 9849893844753628582, 9968552033497457092},
+ {8940282168698946885, 11937029660413868974, 11118271464781804264, 11568483938414775956, 5728644286601384752, 3703969168279877107},
+ },
+ {
+ {11652044326376748259, 17908439335707899388, 17421220331644622730, 9490161168331495839, 12156528627204515202, 7912628748081518108},
+ {12398934214500264906, 15275646021381992403, 4419692862258023354, 16421180417058441595, 2454832921933908163, 17393752904451977236},
+ },
+ {
+ {17844918621715720543, 3502040829859328267, 12871353770728226564, 3472339707328644724, 12451097532318425848, 71861369639778964},
+ {17295347875481859563, 3690461964037187899, 18360181465850037021, 3712583869172705797, 12197237321535716543, 4729929162220746067},
+ },
+ {
+ {8731053926361454382, 7287398925224999230, 18086826009699036346, 8335574098738039638, 7591410546978300407, 8794647666674147762},
+ {3125018303771223725, 4278864892990223517, 16568066644140435565, 4494257938435512782, 12764272586590492568, 15409898743615904621},
+ },
+ },
+ {
+ {
+ {13983598851114853863, 529849755045537891, 1350161153312991881, 5942999622371373086, 13586823003297946505, 12570856107373756476},
+ {11045595872248151877, 13409716803560067967, 7556599145425958335, 12242191131006857685, 13579932482365250112, 18381666009358571885},
+ },
+ {
+ {17762884470933745605, 13091628412956520, 11848002318246680260, 11007732397942638623, 6536960302098188074, 815221834698284970},
+ {9236334332791328041, 1308454297106192382, 13073132817539534118, 10187597698470053764, 1224340772341594193, 17492375944897582958},
+ },
+ {
+ {8342214479854782437, 12753724076994494301, 15158115729208345118, 10675749973467471208, 13779951729398402660, 9124105394386876597},
+ {16701027235021659665, 17012019762848269150, 9335333600380004220, 4905542903515934494, 4679911467761810541, 18087992689526637879},
+ },
+ {
+ {15671008364960232950, 7860658171410702100, 14227259085597804568, 5601891579416133188, 13347153814200955463, 16322888887317605171},
+ {6781550399618311953, 3002152930532217896, 16651539803074113759, 12688880914945537327, 8458859171342351565, 6912445599896725323},
+ },
+ {
+ {5223854540563296107, 6918357952454360661, 9207094772512963084, 14426924911853158195, 5755518699259636294, 9387283789461380977},
+ {3503930759476121643, 9159964934165741367, 15206356441822401499, 1480953354201474586, 16143427034936870480, 14366839330630373342},
+ },
+ {
+ {15025229139882835362, 6569314276317895034, 2647355676900663405, 15940408348923221874, 9319872831842193999, 2441065085739546990},
+ {10915383241419292088, 9125679006919517116, 16537773929817775472, 16520361616767483661, 177268947296049279, 5845623806684850619},
+ },
+ {
+ {1715144640521397840, 9713182207991148222, 9099904704212771890, 18362082653791274277, 5942292809119944225, 9769586133554284694},
+ {11519768289953656760, 11743868714787315094, 6721165095180661980, 10279267157246395337, 15375558993376490987, 14492867532550448130},
+ },
+ {
+ {12103512047683613691, 4278073385410902126, 14292291658628531517, 9854045601464761923, 16032579696315420438, 7195268416745968767},
+ {612006809983855445, 11060333399844039545, 10009253468204157639, 12689475911984215777, 4543371362129747434, 16168227213690204032},
+ },
+ {
+ {11770921065158854893, 107067300718291927, 6216709271265794600, 6933524040251286410, 1452606278006972167, 6352326468906969436},
+ {14670895904694727522, 3137275022800628766, 14281654070417022408, 17577495604202186311, 16841827195439601162, 422964381244324663},
+ },
+ {
+ {2173637395644840283, 9666438537552030781, 2621516439523045149, 16194421987699911464, 1151524228457474221, 2401703450418989544},
+ {17462142435831844356, 15163851247483784831, 1841486106108653340, 7822858850019771468, 4249485329140599845, 1821072017377180323},
+ },
+ {
+ {15298268041084334151, 1531237843026640514, 15841013071716322151, 9410793877088000637, 5108136920376770765, 14198994672804406233},
+ {12867076639631558569, 17777512969934768577, 4278122367966949505, 1107145346780540130, 15722269527707226912, 966176458294482319},
+ },
+ {
+ {3539257888383275199, 17944547213827679412, 9759251359067155556, 7261158630405432972, 15290149052332111161, 4170309286957220483},
+ {7708910151755850904, 3634500268466769566, 5837736360460882054, 18200381407287071659, 3169144765352868301, 203115232477137729},
+ },
+ {
+ {6840468866856259700, 7758204996514135607, 17976257971060442776, 14304394653760424496, 8378305391704268529, 15501414806030165669},
+ {11373547512176927055, 7169306605754795400, 4819206690827867025, 938930549801608666, 15550126629632404977, 16998450850862106862},
+ },
+ {
+ {15700328879061755831, 3194744149035659602, 12913379952862607162, 10843238782556582006, 10727228193111430396, 1268507586473183326},
+ {13242157096784103517, 9764148610613513484, 13432136698405924597, 17207758635006490092, 5669195169308257419, 9700784012686509553},
+ },
+ {
+ {13323401950222069126, 7143389192525342566, 2753977793903748710, 14752970139128156351, 11560905576527598704, 7772265590772671469},
+ {15339277736310777779, 11892168454138922804, 17815983037800870820, 15149987747549949858, 11149095484837869946, 3146330589620022603},
+ },
+ },
+ {
+ {
+ {2176496575786881341, 11137175552988470328, 18165371128924571066, 14493665018797210129, 9027832134416315155, 17831122727374654343},
+ {13941117776210453432, 3262628315315934865, 6955607093154218866, 9315601893566251415, 5081138766383608342, 9449507684235557713},
+ },
+ {
+ {3015183280845351853, 8567302742230480780, 12270847108839625213, 11246873507912728870, 1058839101090450289, 15063533146116054837},
+ {15816951661145602122, 17835613250576961263, 377336345548517249, 16952055578532303378, 10643126612569896087, 15589909904400117121},
+ },
+ {
+ {5917530861159333215, 16376811621868701260, 12468667157041084287, 6060910297573454847, 5999643954660792761, 10374199955429433218},
+ {15354447643953389125, 17866869079904367209, 8929885267107625215, 9764565262519350782, 12345751593966204455, 9590062130519338399},
+ },
+ {
+ {5932736646654537524, 11111625974290371458, 15669816313412657243, 18348488897895796471, 17719589740702908170, 13074575404328778262},
+ {13337220567014765893, 3183217332202609863, 13737875422290924678, 5053183954635209364, 7253181521673343044, 16432970095551512913},
+ },
+ {
+ {14090926673589572542, 17530443530454432055, 12384368526139233597, 13369819312395505251, 7198182961160804423, 794076975275841051},
+ {2760884514203992257, 14661425019208431637, 13933494052308237687, 13461782301434087101, 15552200892959134758, 17074320298955503096},
+ },
+ {
+ {6895102306183172231, 17913949034057542002, 8793858421550093100, 16831072178043970751, 13776552101358985318, 1188816091752039796},
+ {17433095774009548776, 1361051895268056816, 1584454468837935219, 9000587494960507617, 9150046460469003449, 6677236369751497162},
+ },
+ {
+ {10073416357027898043, 11049353932450326412, 5686074628312392124, 8667039569779248174, 7027692055059522005, 7268282275319392236},
+ {8629306706584271868, 4544414308773698323, 15825173458798511659, 3783245463927499985, 3277602994961352368, 16594668318001131253},
+ },
+ {
+ {17194222042243013514, 9755907999220542865, 15203045510993220352, 16670494240308716815, 5468356552637101934, 2209927657220556130},
+ {4080551261822064698, 9410102261896788927, 1729749535853106305, 12865714430736655885, 16788188297672046823, 4739114570896754270},
+ },
+ {
+ {14031233216260426655, 13894451532350910002, 14721305842339563831, 2571399673735228739, 17136925918547685412, 12486318545760378351},
+ {14945904247785918924, 4332191017784273191, 3577416897748122497, 10770672964471969794, 13859172261775533936, 1323080729872112496},
+ },
+ {
+ {4806132367170729030, 3012780210920457375, 3465902493839868696, 8367717133643917430, 7541627860300058604, 15166837387405701033},
+ {8755188577678123832, 15440550960246952705, 6821177912455354424, 13580899156034649200, 13889507678691571539, 8622094254907884271},
+ },
+ {
+ {8944073100303306076, 6542151642656830118, 4104527697818383341, 956456087501600204, 1355338812157776915, 1576264571133590433},
+ {14576384464935893161, 12976993851388633360, 8882463173850021133, 6146594088987122341, 4213885861865358420, 5730501125228024803},
+ },
+ {
+ {7734895557992270496, 13773292779533050725, 11791360189416713892, 3844762521853578365, 1284645752772663495, 9812572158308316394},
+ {7423486593749131086, 9063179868650496218, 15664453574296549152, 12189904173100887627, 15565268483602424319, 3276085766266736963},
+ },
+ {
+ {13663977661665765595, 12869596706690969469, 11622894659269832036, 8626701230474747130, 10051999084490524702, 1254507355148706860},
+ {3738417688632628979, 10128963025153309524, 10379579774762834621, 16085982828578912188, 999630916899084620, 5890496890318826833},
+ },
+ {
+ {5464691878810358086, 16779490499259550831, 16167618561212471093, 1500388924177938877, 12758820778786031069, 8726936634855616738},
+ {17023037108698278190, 3926165730727012559, 2857709494954513428, 3375996756516865105, 7319015008396427730, 5981183379963579669},
+ },
+ {
+ {9453101235061934254, 8471689648697407064, 6756160836097095590, 4538217394377244150, 3501535205004454648, 11902347949869551885},
+ {698830528006196076, 8321354741552964610, 2475663594321703580, 13966220326496163916, 1495087475066029926, 9248489243263297804},
+ },
+ },
+ {
+ {
+ {340762250586370878, 15885853259854490950, 14170016703992127752, 13413185133968590757, 9132295233250564044, 9955913638095083109},
+ {11442204168742219584, 18030844452885851851, 4172771706246866818, 8415318956258968622, 10025498907972372942, 9168803391366195663},
+ },
+ {
+ {8511258912015600714, 16401285336019435955, 11567231709606604746, 10909146042530314890, 5175867930620067690, 1758264796269950390},
+ {1311893356838490889, 2075003657340819455, 4150679767398135680, 9944985572047220304, 11726442185374948983, 9515564709417907692},
+ },
+ {
+ {947814274602777664, 16977093960389365711, 17182772961477092323, 7950550504137754878, 12164286910738269376, 2396865457216588451},
+ {7712672988612544289, 2256404627520187318, 8042169559407463337, 4322215616044918854, 7896874306873269018, 8861341680456564805},
+ },
+ {
+ {1573021064477563490, 12385142738510496803, 5846352022563838737, 7179392922412551607, 16770926861117259109, 4748524474277694353},
+ {627992288971210988, 5079973027627716026, 12148275790420566931, 2974507608681532690, 4977283032988448426, 12122543170457868729},
+ },
+ {
+ {14982315046876125397, 10694656698025592471, 69978513957895432, 10720522802782817933, 674072974690397016, 18202488981264823240},
+ {2763268093414423208, 16627509676996448791, 7905391784431874217, 15969282761758331738, 4087266599186541195, 6705534661083402155},
+ },
+ {
+ {4260928749573083864, 14414653187745491590, 17669562882664725861, 5539725367798503840, 9892464532031311709, 8646224288734922726},
+ {14636838328767388157, 272416839100440696, 9027818199363669781, 13152959597440376914, 9885545384154705441, 4531971612013043371},
+ },
+ {
+ {3054144515900924393, 12231678983485064511, 5344887254723067065, 16260784250181309348, 13554495123766829763, 16541428532159722510},
+ {16971418268239157688, 6561565182987963636, 11849488276654035036, 5626075694176069835, 5950685614385695889, 659455020499241038},
+ },
+ {
+ {4016750444584361935, 10934103594664060658, 1610640179181480423, 2687152927501620139, 4356423113034416292, 1508042570353658648},
+ {12444493154493623021, 7858990549536828280, 2620376282128316119, 3094221996681006634, 2197436117225946497, 13627448762660605994},
+ },
+ {
+ {11319267592865004792, 5771783128259971891, 18183444021717726622, 14584551296093059489, 8197314068068346944, 1496665335270628278},
+ {7533930075545786161, 17913476997028566696, 10110826559280511221, 12595790705256942207, 8383527098300125989, 10468103262027643123},
+ },
+ {
+ {1297397412658178639, 17891290189040928260, 11494441724074567854, 4008680981284786655, 3752678751199473490, 2327749996539228182},
+ {14427514318988472029, 3553111765024203036, 9339018535932944476, 5033337384514825308, 4461712737595757481, 1042763231946705190},
+ },
+ {
+ {5282595958571557801, 213593101601136936, 5851288338443284810, 7230384975686448098, 5076726665241242579, 15657565414881533309},
+ {2806053347798036217, 13325810292191155888, 11207865985035518040, 16753610899485159157, 11780444340160414775, 117213508700926531},
+ },
+ {
+ {12301002695840234190, 5825957247323734322, 7540088495914446527, 16042651929295067210, 10094620945045619814, 10110065362760208923},
+ {13445281647852023130, 14273322378142608479, 3078794690211711993, 3432436226120118989, 5328806020363596991, 6994513974763316732},
+ },
+ {
+ {12003038273625258094, 10383425068383640359, 15520194992621832802, 377777956418164695, 14943016921304093418, 11013649826256127439},
+ {7230967483902155369, 10825313619847326325, 7037825115392195402, 8972357023328446193, 1253857384837096935, 6266649133505623519},
+ },
+ {
+ {10589482155172539950, 12297389734324327538, 4069221173445026474, 16016744041800779341, 18417752858659154550, 5634264208757126073},
+ {15473968400152854338, 2809792092226097652, 7273042078361794560, 2614557813052600661, 11360021509152649943, 16733025469392257248},
+ },
+ {
+ {14029153203244842151, 8283401980696181560, 11095661564207243200, 17088874757598325946, 17546567502506221871, 5640913915552816107},
+ {7075972272517500150, 2257279655826038849, 5696746906369339622, 2316175253051029175, 17712158778401896374, 364112814656520215},
+ },
+ },
+ {
+ {
+ {14679924527974280886, 15947635289512277104, 15351404070450195459, 4727979236151915703, 16350474002987521743, 3821044743014808256},
+ {9479595861519884974, 8516666617350278746, 11503226012034686940, 3623032435206572941, 13809630545510991358, 15014347175818555977},
+ },
+ {
+ {11057592299455225148, 11418500207601195379, 10015659838321279434, 3277591360102749557, 13870089373464432053, 11899764543560815680},
+ {10598708899627490235, 5204860756179583225, 5704026074815499757, 3961740021052616841, 8083325146143482469, 9703502648801234299},
+ },
+ {
+ {5296723995152596286, 12702366508473375573, 3560342141598167052, 1229852828708405148, 987112422309132678, 9050289325451932333},
+ {8377778558476358877, 18299004077752380767, 8205821641610714688, 415872980483417712, 9637058392436615799, 16488239169772178994},
+ },
+ {
+ {14131815066626142041, 11540556304194578314, 17720164231008490194, 8647469527673297080, 13717080072986283066, 16364407850305375121},
+ {9812923705693309894, 15252855277120316678, 4251079378183712824, 16287850228852183968, 16981432229628540775, 7288137070535318945},
+ },
+ {
+ {8134759848840978213, 133995483652992421, 12594363638483218087, 9394943745697767530, 3292684192987421047, 5641109531274744017},
+ {18340625042234832363, 11659678257409646710, 7834895451987153240, 15013848757483954741, 6923004623931848431, 10731117231772923396},
+ },
+ {
+ {710182862970832652, 7186938586352280975, 843940566536207033, 18222882275783810673, 9033108566167385693, 5062146455700166349},
+ {8983560327851192528, 9593314042056721839, 13080593353438570596, 8499297145526220981, 12018300556898041742, 5590813964218970674},
+ },
+ {
+ {560148900890697500, 3872724270688497231, 12155226431747164567, 12069399862495208716, 7800323474020451504, 17842129873781067995},
+ {10386941694229256988, 12627593178570682056, 13595572751629997365, 8796981607722448553, 16749808188347360672, 7845278385143284636},
+ },
+ {
+ {5771329137650242669, 14398580224071912888, 2684433028961805130, 5472793673559551896, 4139791942141311772, 10242427010920223149},
+ {3435557043383543647, 16439074182964580066, 1897097733009851383, 7790954287877138337, 4094797857151328545, 17636387648829877391},
+ },
+ {
+ {11084338203592089978, 7046536437278056828, 15270162581532936685, 14872594521711089230, 1065044340676136516, 12215363914120183972},
+ {8807558094930205455, 6192530442586873261, 7580836915562456588, 14608662449758709959, 15699254439480728117, 7514868894683313347},
+ },
+ {
+ {6725908589474685098, 17990909432805680896, 10064707122671181170, 16351089498679067398, 6987057004328973058, 1476297822394021518},
+ {16905817105678067782, 15956790087223100464, 11919441400720484520, 6472307250416206582, 8105558973519980497, 6060069727850515408},
+ },
+ {
+ {4394995949664289457, 6428291279342645254, 14868971543072031986, 7469984888154793685, 4535882282594416153, 14087727563932343498},
+ {13764853652994987377, 3726460811537607063, 9231152303364152091, 7795121740553029976, 3567427738439652965, 828395371245164136},
+ },
+ {
+ {3588112622259521330, 14318995036651536017, 15152996261895537910, 13117193981606719833, 10869520400973032500, 1535537291014629366},
+ {3953371315021198156, 386530500873665491, 3508849322379756897, 4055089442250030357, 12628113724743989767, 4186397566457919545},
+ },
+ {
+ {3443066389826097469, 5916450488257370663, 14335878619740602917, 10811180552560485498, 10078378655405541627, 10331041864412397191},
+ {7918530238023081306, 10187646187565606947, 10643817701072622350, 14671988813510778565, 17264570610690688746, 5035607629406476407},
+ },
+ {
+ {3532200476336731719, 5678111310353191224, 11922638866398303913, 7540915859698370345, 7422783730002635298, 12884745215638918079},
+ {11258694614182796345, 589030835645795838, 2262193094720294286, 13773904298325886739, 13573020426752625101, 1682880838844955766},
+ },
+ {
+ {3667751664279524715, 11424246261326489986, 11184700745029985834, 6642084736925658394, 16833380705883602850, 7641656710490994742},
+ {3519566587420847235, 12380249650455369211, 14234084881378137812, 11403307110698732867, 10605766497849541425, 10861452779244197005},
+ },
+ },
+ {
+ {
+ {508120474314030324, 2355066544885544183, 2781810294408129833, 15987954833749728730, 11640488433383588320, 273718689405132586},
+ {2640929119024127447, 6627781401094026707, 8341197168509731890, 3918225740211580144, 12693567636985320532, 12010813241293331917},
+ },
+ {
+ {1067643586933482569, 15789537218210505592, 11772390798352937810, 8551678486344942630, 18134749517345567483, 8018480309623112915},
+ {13721763421328053376, 3248048408533182382, 14403298468089883307, 18344377936005924503, 8145236551628572080, 18246715613208739706},
+ },
+ {
+ {7517918011338920649, 10924417706771677823, 17726681281676783216, 18231267965570514089, 9942149863736880790, 2495324098584754616},
+ {7703134802415701672, 6763631388551517046, 4129117670208724623, 15972974109259347702, 7281041685266079849, 4033286739838961760},
+ },
+ {
+ {18167431682574255272, 16875991970663412008, 17295095002088005373, 8493357273501291495, 15937618870319643038, 11833224465563102215},
+ {5034304464808785416, 4940901108264101769, 4572127150938139448, 4375798149940068108, 15502449895994354606, 11063825957880913338},
+ },
+ {
+ {12106998444454782089, 478129254096369622, 3583445821883510974, 3783525850583222929, 12700800678744232856, 8398918095020677450},
+ {10572000908134195556, 2591572375203033135, 7440424324108251337, 5098405712381411786, 16645670879854917662, 1340903336183382664},
+ },
+ {
+ {7662402429691938227, 12301560877341388372, 854014491934252472, 13252962285002044539, 14950007384282365768, 9322453517274020995},
+ {3037202449373284699, 10134277839370356135, 7874405825451119639, 6074763175687974962, 12425801537362983169, 18441996758138525244},
+ },
+ {
+ {6377198952519496340, 10452019513637841848, 17999702029925940943, 7474985002644580736, 16710285089220886173, 8795286825426459720},
+ {9274877579709547055, 11658383846072744560, 15190956902413353547, 5248750851994650598, 2300395682072506542, 2755645297874985482},
+ },
+ {
+ {17741788053056918633, 14066143977624056531, 9188940017443802353, 8808532662781054683, 3364478519071964886, 3169335378890645771},
+ {17112675492175952719, 14236192466751475311, 5603662455233963823, 12286659362580784043, 491873052068930659, 15049849551374735889},
+ },
+ {
+ {2576424316119212598, 12775551962911576966, 15259699755977921424, 11651942542046543115, 1402783857204478837, 18324652864132536670},
+ {1707338149370542188, 3298420157097588817, 7521797060095862577, 11460596774399479099, 2575910799608490644, 12312525139228130635},
+ },
+ {
+ {392896831764612871, 17176033439239962097, 4721807216245185554, 16182155038868684552, 5761252087564225471, 15052621263295120129},
+ {12346920066003727294, 6129012491021115289, 9977552588222578097, 6652331187558815009, 14909718540327055008, 968144566139233934},
+ },
+ {
+ {13293883802715635807, 2653176068873560866, 709377591048241427, 8121623725564414915, 16119489273759831559, 17342448566209464262},
+ {1211174416757974427, 14015417764234041664, 14462722521216925477, 14082661984659007681, 1695477692957516417, 10365750554717767074},
+ },
+ {
+ {4884022083833567724, 7559598399602191657, 198426261319140977, 12353123114206461318, 7871074382107198052, 15544439452501146366},
+ {10764302824973303475, 18236640700905160595, 4118397287860275206, 8469775327273188212, 6943100138927210185, 7678646557360620170},
+ },
+ {
+ {9047129816186912754, 686205745533008290, 17091874804035707852, 13829610192011685605, 8445841882472685584, 12683587236818333381},
+ {15248187852218806490, 9143067576807462149, 13130422498538192412, 1987394184930393469, 17234091013976042376, 5309021133366567407},
+ },
+ {
+ {11153014502206421469, 15119688811090307722, 11900512007334729116, 12033534775335022157, 14206136005718288725, 11758356920610289524},
+ {1170674544739813802, 1735805534869368410, 14265461327530260009, 454122264224446315, 1196955246858854577, 13496891451537487585},
+ },
+ {
+ {1963635747876520766, 8037994677047475948, 9778925841589003509, 18373179051584417655, 17774160058627740027, 11457632676580645202},
+ {10746767866979893471, 6679657251517714598, 11924693891957720076, 15059776164765359320, 17106029443182107067, 2977050945907214605},
+ },
+ },
+ {
+ {
+ {11428714276400700816, 9684363906879720073, 2326880593732199571, 8761076367298171397, 896913682478838017, 17538745710015774502},
+ {16011943008419601378, 5975733755904344526, 18015284849904033774, 12671514003052240271, 17740261525233420473, 8887483872226550753},
+ },
+ {
+ {4149943974880712918, 10350790058854190497, 8196369947058715735, 4949794127529191723, 14693007776575755250, 799869184787085670},
+ {13583602297228816985, 9731922590252326563, 11783888221311533059, 11272596661461028723, 10650424498639591856, 6814307635900293619},
+ },
+ {
+ {5187662544727433604, 6610818388649597184, 13217214483925463411, 11225358343307261041, 3979262110455362044, 17023319482473508776},
+ {13540734409372034129, 10873366545113221391, 6574497676007990697, 16695089176775352098, 1800106753424785549, 10409365476253724591},
+ },
+ {
+ {7201953056257784053, 7550552970976446148, 6715285792546737720, 1597813460246962944, 5934044807465023074, 5362427500790106824},
+ {10951441180547054651, 18111344793262344961, 11925095468088301604, 9885237597177799430, 17378911605611802956, 6344832877661407429},
+ },
+ {
+ {2193141511878184296, 8475396127202322472, 3917381969650598296, 16265248388470690809, 6186852221346093846, 11846013739636446977},
+ {5487357187469375202, 13711750528133438663, 1849109594291933227, 15949224025529501096, 15221000652947043364, 2391723465441720967},
+ },
+ {
+ {7536562994359807923, 8905565631504805860, 16506171098935768123, 4130408208541979441, 9322288628868118772, 3079300424148444967},
+ {16936259574260547615, 18438783821712938661, 10324525933994673862, 8397550184634189831, 17434676747885185144, 13637497700498785239},
+ },
+ {
+ {8483145192795413196, 3847913378476383052, 4337984637797992463, 7010629707438332975, 11953181174909111039, 12014680632165513786},
+ {12276869096120751141, 12577833746497947189, 11723523233456261682, 14093651901317012131, 12375742220834231759, 12908141375852234811},
+ },
+ {
+ {3461865703771860361, 797298537903379949, 1718621620291046004, 9179319574938112016, 15506643513481237125, 17129849380198117652},
+ {7110323273563692976, 2203663670190111617, 9853530541246034651, 12592752863363999293, 5433719754579498668, 224022543784731840},
+ },
+ {
+ {326532432663732788, 4070991663847076038, 1470607885232799605, 6211408722804468886, 15716355503743027945, 5590361253785299677},
+ {7812181315317979243, 11828059863468531398, 12778009786378056601, 7800732687373876279, 4224156601900994011, 16057020107391082099},
+ },
+ {
+ {7782487925572685932, 1724391588041133300, 17972041778362775708, 11333825676811621865, 4537746153362835585, 4171052629714822431},
+ {12770750867191330688, 634694503287104037, 10540092664171311636, 1350757360469465298, 16229194085829187695, 11033889142205249636},
+ },
+ {
+ {1500626805655044948, 1474262357314620997, 11484027637627776587, 8585564162226987518, 4361776374583212023, 14496468422187250418},
+ {17741545623455229310, 12747090277885336885, 18323745182075670270, 2038556268554236114, 7015814683852162475, 2248939812176116415},
+ },
+ {
+ {4335040403419509309, 4616570637565163389, 17011251234033239541, 879860923453038495, 6819883123403800219, 1722220926773986334},
+ {4709656270455345524, 16636162851412473237, 7348864482366322076, 14270025125795014424, 6328218483059680686, 13214052880713025067},
+ },
+ {
+ {11977022734060949713, 5628060629783977587, 103670064741031623, 8484869049261498542, 4939759321638626982, 16432117890868549963},
+ {7629267303968775517, 16619962589721111422, 17463764779224102539, 10685322297759502900, 8807902043402042351, 17462711850802416480},
+ },
+ {
+ {15295264908526444823, 13335307760080513805, 4604414283483994449, 5316311055438475989, 9106484611277661419, 13606509782370139031},
+ {4442177947438604155, 5803819775434638136, 4655697769853187972, 9432210737074556266, 1181431965380933231, 17230321351582564170},
+ },
+ {
+ {16450007145062463968, 4085694834533625610, 10068111071916006395, 7262607959861442044, 16002455059452793805, 14195715414553647245},
+ {11695905535525197488, 17972632274451872946, 1579756808173779650, 9867832289808138729, 7742524395848721653, 2581276165337478448},
+ },
+ },
+ {
+ {
+ {12418897939030198809, 15206661827925660880, 3670234668273509673, 629739459084205561, 12432881678413324698, 14794818295399912598},
+ {8304013048279127199, 8979239574719663301, 7898287937622516136, 18064217129523036783, 15422375485556825691, 3491105078158712969},
+ },
+ {
+ {12712561841049401285, 13926510503703002969, 2612279756031831730, 9493430901786542794, 13291879522996024106, 5809241029170276658},
+ {13691694507969220766, 18143668557798275313, 9138492995891623951, 688189100127541854, 15640560704872541163, 715816703484468594},
+ },
+ {
+ {9922254315993542377, 3698353835142433482, 2152397153019100388, 12317485668320147862, 7630803741744990206, 14043844136716370060},
+ {8779442871712769558, 9907756658115628584, 14458334256944611273, 16860549487530785456, 6324109159626157948, 4731255892134100106},
+ },
+ {
+ {8002922251516613060, 978443873609457407, 3195553158279317543, 5854976976295928246, 10958159112329303460, 3970083282599810189},
+ {5557639662225343558, 15971994949723322072, 11989908821085930999, 8821364574039081706, 16665145761534571014, 4658625544288657356},
+ },
+ {
+ {6340510664543185199, 17018415579031156332, 5848132202484941289, 1936333141268823482, 12812324366507433640, 6731572340563570418},
+ {16857078034411292476, 15068277976532276123, 11722116475437972189, 1964509865396978581, 18238872631873981400, 7991345170212629670},
+ },
+ {
+ {4399729739127562657, 11272928375680253530, 11946741552547688174, 14049301799414882766, 15181782087994325146, 10089988859449254233},
+ {6518268185564876927, 6536487350448659481, 9828361032623653320, 1339336992832075931, 500012115828942236, 14824212847841613777},
+ },
+ {
+ {171920790242842166, 5492071276632784703, 7283720254645560138, 5078044100187809965, 10385647514177990351, 4643536432707194364},
+ {14989909821879706494, 8756233713883588748, 12449984475333613170, 12585959722117915734, 1005739684596759274, 11155909844346489416},
+ },
+ {
+ {11688324725241825062, 15138461392078796204, 12325266391227455113, 1340485671902994619, 282500164578345499, 7467882813685092227},
+ {74331176722111354, 8867394635845954934, 10408699117489665536, 15725442571211452985, 2590111940561580876, 122458286127547889},
+ },
+ {
+ {15892645628302923294, 5856468311490081970, 6874561504197875933, 18019303355409739795, 6082937058931523996, 215426188952156771},
+ {1268422509930086836, 14213194550854690836, 11126293425133380142, 9865185168089540488, 11632286407552253140, 15174468604920668601},
+ },
+ {
+ {10936413110689795487, 15010995742767473191, 4568817801913429420, 4205444133627513879, 6395122355763512349, 8918743386740702009},
+ {16692774758406989332, 17955372475145034386, 15048470334846953021, 3736761708891032300, 2111259224340263959, 15614397697732925529},
+ },
+ {
+ {8738432084134066654, 3426263179552640084, 719712812862575782, 10981970426674636690, 9230912351159198043, 10854126184000364805},
+ {1961455377595115519, 11451312678111642174, 7688356239558056833, 5143561757570891633, 9215608498872789998, 7917478891815725904},
+ },
+ {
+ {13905441237538948064, 12480816058500448930, 9351950531208974987, 17868240518152709336, 16456831118221743401, 14827343335622163069},
+ {5502543494126784481, 389131188595713234, 13066540568193379266, 13328625471332746991, 5244571811269709341, 6606962250802166084},
+ },
+ {
+ {8488561190820155258, 5704568936155861609, 14891109450025140507, 14985917965027582458, 8150697647605526155, 13242121807143276147},
+ {3762467964945321810, 6385131138942825064, 11791602379712639353, 8213332910240399371, 995112454035913025, 8530416099523440086},
+ },
+ {
+ {13640325735363574879, 9838259707028418406, 13090326969619576773, 13639005985461657607, 2136356356058124836, 13990780887246135133},
+ {5609755522352639162, 17659567235866466759, 16259320408797139425, 5409555833771708415, 9408620568269064004, 6504340943038131334},
+ },
+ {
+ {5831978049482033791, 13004433680416851426, 13573449569471990176, 7730273069509750576, 11703396887458680397, 13713882189606773514},
+ {15136688631097887611, 6655871600738369661, 10582530699775137958, 2242461969176695317, 607007649724149634, 12963349946916344106},
+ },
+ },
+ {
+ {
+ {1245849788995478406, 15927065038482738007, 14167031681717622750, 6558184416262903003, 12026552713606964001, 13141157765235910782},
+ {13953548913050124814, 10512136906136752951, 17603704039609623324, 145717304147461215, 325471403460036622, 13128236733581623507},
+ },
+ {
+ {16674741188506215062, 9760284329368026164, 6227912018538320358, 6062313431245706681, 11530767050864043247, 4050743335749600291},
+ {5438096629683113243, 4619575833741800840, 3125333116803012851, 3488990215372938922, 10001296793595923533, 10533821010269665140},
+ },
+ {
+ {16525932200239811820, 11277725255119639967, 13380457983594150580, 11345091161981432621, 16404711622698975165, 2413157060343610687},
+ {6861888264192898716, 4349048715057257879, 17588098592479288977, 17308040295861018844, 10945075256382032297, 6591571232106737441},
+ },
+ {
+ {3312100944805375360, 17751669833244855959, 11421167323527761031, 2790564601954208965, 2677089945270728547, 14912524259578856947},
+ {5283996146017069939, 10959370318137784011, 9095576254518931495, 1311273597919359627, 14918615616693191386, 926115797902848153},
+ },
+ {
+ {13690563848743893725, 12308308054894561959, 15395087439588112783, 2472586724818805576, 8533710141094669405, 7942802424878184185},
+ {5420945215657024810, 16122859608174405004, 3053741733492700862, 12221133467396472029, 15851472746153652052, 1947565546705152863},
+ },
+ {
+ {15897054605211154249, 15279739731289823093, 2336561653796295997, 12705889529297020171, 5961825895197974169, 2720481772301941412},
+ {18443277954611435845, 594427728188203259, 12303839396678154633, 5358688406862385350, 13000467893527182939, 14952128333381655033},
+ },
+ {
+ {6619004200098886597, 3521645713977761698, 12344376102408265251, 12402516760501056887, 16667318326769571309, 12874140072685141335},
+ {9621314969493341823, 5207967593480486550, 2826521035705699793, 16265445537996266956, 5066340697704330848, 14633460704255879322},
+ },
+ {
+ {4697083591690261853, 16801765456421135763, 18151421584540787936, 16835495532227054337, 7795860894099083043, 1328764521238600097},
+ {8297620491750460337, 11793447721298138387, 10295382270817397671, 12786024121368826653, 7279518368534718792, 318434652860893917},
+ },
+ {
+ {17026077028448645577, 565529336479994071, 9535502575346171761, 6007100762400155323, 5678897757750626782, 9959925017754425050},
+ {16242528163060496516, 4576911095161823236, 4403607854299656167, 12912517930864843821, 4739470393271194311, 1151478280656415262},
+ },
+ {
+ {16048476540489898494, 6783117499823714007, 6415336927764029960, 15673195924318961740, 6247136051556578121, 13084657697232162709},
+ {13162992357344402018, 16464326350960129807, 839616770160173579, 4740726662754602535, 3152479265198829295, 6404513982945014328},
+ },
+ {
+ {3092232113376296196, 15331813846360575326, 18290474234869335723, 8231838642205234980, 7400082193016179605, 8410763375241570875},
+ {9128762227989687509, 3794598237625234172, 4286873165056892559, 15334567321376368149, 14794216692099838599, 6895373348463126576},
+ },
+ {
+ {2724979383179813062, 14777475620842655294, 8495183486057249617, 13049191530970000171, 1463143549362168712, 7716595605180919892},
+ {4514675039144392038, 3975933817505069894, 12970184659307405583, 4177319338659410908, 6165857585915235970, 17620162379352558438},
+ },
+ {
+ {1745353185162679063, 3792943368267263896, 5392169106673425858, 12818767881496565683, 12092569230529535449, 2578847804476911357},
+ {2780126809449397009, 5405540052572325879, 15285827524500880746, 2941675021271411795, 9447355824276841918, 4559807377485007719},
+ },
+ {
+ {7610007746883416737, 10147509530120995196, 10888385397255137878, 14772040059195211280, 10560108669991599276, 2620459706274870386},
+ {4887132538582860164, 2596493858310366442, 13580111877897930049, 13035579030058060026, 10732634358057493593, 13596263836781091773},
+ },
+ {
+ {16502308326832314698, 6813655593085792854, 865540522694200977, 18406777409114169497, 70237201416715116, 5540630135583650201},
+ {11043265419464844764, 75803127346564744, 3544127781510566665, 8608672751361961179, 5292089330226488152, 1998221520759237189},
+ },
+ },
+ {
+ {
+ {15843747259285912280, 11051757736519314133, 15850618202671354967, 11414438518663550807, 8901822655665788460, 4938308746649520510},
+ {777341510519627412, 11562816405392154916, 767515422569196951, 16316638273329970696, 8108021482044013490, 11530472289475307950},
+ },
+ {
+ {17325850825538431065, 37125221006850315, 9538255856396155842, 1677341822293077462, 8890165136267025298, 15244650613952369517},
+ {4845598674027029924, 276084057002262337, 16096273565408425115, 5476011667390370895, 13774404766368645238, 1693789135306442102},
+ },
+ {
+ {14853893681504474636, 7246777094738611755, 14348468490599768069, 1584676862820702751, 4055902816558872583, 14691624686566000273},
+ {8463792358840766097, 3916260300604218254, 7138823842751636444, 12063405069309472256, 9666094494441286118, 227223526050825967},
+ },
+ {
+ {11439448267446980509, 10876971879546473859, 12463594188698329361, 4867143769403125573, 12497774131673245064, 3293027647115301082},
+ {17269845420219875716, 7999343694417279981, 11042866033136034598, 15364989427615166682, 10865140228718307051, 15023792553833632785},
+ },
+ {
+ {3313587089867634043, 12345206552722066323, 2085484537482749047, 8672528099921546193, 13019543378492473719, 16014000899261448682},
+ {8688247996955695393, 13880086369349074733, 13685898059232129585, 9745238149905695566, 12860398562206147371, 17318310740773319426},
+ },
+ {
+ {4831067862161961952, 1700016751300913085, 120879261664102718, 10126392277187226937, 12334968545166906646, 2424236269343093373},
+ {5064451542294364369, 18179376425888307033, 18011599774285802620, 5403509623689485964, 6314622790688034216, 11605915467730303384},
+ },
+ {
+ {2247133619710642624, 14577616964025781087, 2368018907158808843, 16498726243986409168, 1407790037339558890, 1268560497020660735},
+ {9801656500494901417, 2349861632952537447, 9517882931966374505, 17010759715257218806, 15435798766523589684, 17726795183758368944},
+ },
+ {
+ {18311374045587866554, 14447020620922821410, 11083360170030115832, 9113415708727437834, 14541956290558262142, 13961285592123282152},
+ {828114605405992045, 12150002910767606346, 7206389356124187542, 17860503209876058312, 11798129788760460490, 17127855426259911149},
+ },
+ {
+ {6199176795763629395, 7044922086316649293, 13997864205295119697, 276986585995515541, 18048058974579713616, 16490720274644998299},
+ {8536596227155890833, 3914547013952713733, 16510694033833622662, 3939667794619888075, 3178595810875111442, 12482691560580240458},
+ },
+ {
+ {6817856411751563437, 5442319161374364825, 2600227314552885688, 885644663444831557, 11700451742910873418, 12995396601628275569},
+ {12803389344446349365, 17830292246277698677, 9309532553762179652, 6680640295615786576, 16662072345574199545, 5503555633912973406},
+ },
+ {
+ {9023109435328558547, 15291865436110219430, 13383262037362169985, 17595017389171456916, 9112975926620102374, 6959372004949197556},
+ {5079998641977253062, 6532421761731762580, 3807095942977659963, 8160554533119900022, 6829392063047646882, 9484387938580835773},
+ },
+ {
+ {10226973915924968410, 8694011647938489632, 4300203054946897035, 12117316368104547695, 13852935341469006648, 16325279905079591603},
+ {3279907632975731352, 17658867899191622273, 6430488073563164502, 11102370118583390470, 1351653460592165074, 1155328654798844033},
+ },
+ {
+ {17696616168038539128, 14705634818800389635, 13086381626647796878, 8160829291664474794, 12380871402708163904, 86292804711961768},
+ {18387045944833009681, 366768093235351805, 6342784007092933055, 10213820317755221687, 2637460351332260222, 14273547543620959978},
+ },
+ {
+ {17055410858120919085, 5117864209362229433, 7752728474235998778, 5718238531312883549, 11379901830549393718, 6167331998180922513},
+ {2139807429787460156, 15318820080504273410, 4676863271077360086, 11038500994511396240, 10091980097419465773, 14332586624137472063},
+ },
+ {
+ {10283737372978878771, 12574954996091932368, 15672686541053306208, 12565297310940420187, 16116977738821195704, 13549410483910339391},
+ {7927005432441035757, 13175590081759395358, 1211258742602602684, 15884670892710680064, 3650720270567732720, 12671425442920594205},
+ },
+ },
+ {
+ {
+ {16945326091077782209, 16464694010613758543, 15031894690983835272, 4230984078465338834, 15876751555985865416, 13853851790773712608},
+ {10629669182284449427, 7123507341691517943, 1604779450978617269, 12335442368004615918, 15831231179039969998, 5721219491336463048},
+ },
+ {
+ {8779923605369004874, 11015027029723172570, 13053683587822215278, 14371924836322803667, 6175910444240484015, 7444596092153062599},
+ {16538104473324970868, 17940085998297689696, 8904671253507597276, 10735167732778346892, 10719411100540081001, 11825864791636217846},
+ },
+ {
+ {10513874959070541808, 141726534094196367, 8961670049397339577, 17110620828714912466, 9276156314861939407, 5283989756429336401},
+ {10830576007717201253, 10019682216548180288, 14732709404946097825, 11154000097553876933, 7279438743640661651, 11741828296965158287},
+ },
+ {
+ {13710602247235634585, 5794283881286256131, 7189333897035442825, 11474888458737436516, 9536387759009059378, 37447282054824480},
+ {13831688592995763204, 15514310505960816464, 5617377358519582781, 5382874924721720664, 12826347177360954774, 16487830138240466133},
+ },
+ {
+ {10136021926566126263, 11928523244042660673, 620080950963362813, 8625626899007622861, 13450521127313958418, 12173913767817931256},
+ {12782398870117899816, 18284930545209739688, 8340732005841122414, 7667253783573485052, 1170918830797979709, 2726644985398233748},
+ },
+ {
+ {5868319710548462775, 4614538984539777268, 3606513902357509689, 5842687629722217460, 655661300379058806, 5750034184391579904},
+ {6706948898263875391, 1861998499115841763, 17416124038131320471, 3088573942691514912, 10862822225918958565, 10723788336215927712},
+ },
+ {
+ {3469954697000879474, 9886078825125536983, 16639512902206423417, 949458984263591079, 4713065388685405969, 6485681870763151394},
+ {17550597369256616144, 8492358132474734258, 1973243959933916082, 11845479291839734419, 10373742178422412864, 12917185093797127077},
+ },
+ {
+ {10148520876393042933, 17008996819208361065, 11244838413238054187, 7578025140351179165, 11819693939772377780, 11922206691683897452},
+ {5193678850892441703, 11269576636085412111, 14586018532679524926, 2160103807216749946, 2883270595579022419, 8933957426785365011},
+ },
+ {
+ {7701278840381406043, 813864330332921165, 15346578798485581339, 4630804650809464614, 16185031359787444003, 17826776112141610425},
+ {8401323936341934197, 9592171776430509912, 7758005530392712135, 14454554148729439336, 7956273653179990376, 7839320390573561917},
+ },
+ {
+ {9250363391170832193, 11006035015261134401, 14458550514807354785, 9325016894298710330, 4144596754841442017, 15054746156170374381},
+ {11456640279410058145, 16275606744085683852, 17831878718437221277, 1528529578606146868, 10275813860685205403, 15479223083860040951},
+ },
+ {
+ {14596302840734253179, 14900690077811267578, 16140097010885461623, 12772352415462534488, 8614394783748304718, 6766902863888446020},
+ {3301138793577892410, 172863568565472035, 5251004015700101269, 3165424378709792613, 4958340403792084944, 12619148531858668210},
+ },
+ {
+ {3284553122109620274, 5270759104970263988, 8347616712857016748, 10393685591838506061, 7030247929091757107, 11570651577508724004},
+ {303593432212184598, 10870347165523269046, 5858810139852537379, 1529168183268214217, 15332143584615473398, 15102908354736105773},
+ },
+ {
+ {9574340152153043928, 1662915623607662881, 1811398080012362182, 14878205415613515919, 13936394534036516069, 2337960597242570130},
+ {4877776368265943702, 405103566243555934, 14225276821637443863, 15556532615883469807, 13552306515137288805, 13115529663394516774},
+ },
+ {
+ {8161989794903954412, 11660052284711833602, 181947658370696753, 12989304799327482750, 4066413204451462606, 1942221685308503206},
+ {12484888137941485851, 4649383641303460090, 8371451456723263654, 18441597518505156777, 2352723388962482606, 13975888702704352920},
+ },
+ {
+ {3847700141255053024, 16406472982872848520, 12468984591385771739, 14942334423186830995, 9933763195617481489, 1409101159701707313},
+ {3573772803237348824, 11730844867315771254, 7243658460515938367, 2166169203511142802, 6248287935705475203, 8265081108739245827},
+ },
+ },
+ {
+ {
+ {13853753564171363451, 13820378722717422408, 3590234094500056381, 6866298275188000567, 9895869565406539361, 14927210698587219451},
+ {18236367046121661763, 4730509858602802480, 16337561945026136271, 14109799857833288312, 11587799424253933816, 18285301586729898647},
+ },
+ {
+ {5697628194755082385, 10473326214136017445, 14513883747346413480, 15341298111275585222, 17117376470859521237, 11176286297628034124},
+ {13634599286238815170, 17382552533170299294, 9094266669583253997, 239734418257835070, 3591794414849763173, 3133034763403569336},
+ },
+ {
+ {479206554903518820, 14658665690734737994, 17152906210790105810, 5958667172720220276, 18361725589118886101, 6185981515380453548},
+ {3944672359066359091, 13732151285655721173, 13939827029587789643, 4302296200033682886, 10240802189705837857, 17865142655928189798},
+ },
+ {
+ {8306168305072060501, 14751131852602843064, 8096080752206544475, 4680206077732390021, 4419645889416275973, 1519820218356079506},
+ {5861554578628119723, 17661801171279693964, 13496831092349512650, 3841281188034367706, 9158790543647317313, 10612203699190989969},
+ },
+ {
+ {17037898389052207682, 17860849396131636095, 4349951673886175152, 16094377250964498544, 8476986837295463150, 13680887785001025305},
+ {9336507099265066829, 5947089043768571535, 16585602400938566700, 12581267016799867259, 5245484406207830441, 15258801158753041634},
+ },
+ {
+ {17548721630682880044, 2012629971546646455, 800602602193080743, 17396222438338198463, 15386698858603827900, 4460480856545157616},
+ {8525314085294734845, 6802480695964082562, 3816316223911984005, 2464494579218714722, 16070919992014947059, 12434854377052757812},
+ },
+ {
+ {10772836789272530628, 17088691547289098969, 6718631187086570471, 420298886229605471, 14226789851958972081, 17291643744773087097},
+ {12356365831670845340, 13630822714405907791, 16223114371865091666, 15934941425414639409, 17030594846596638635, 8894066301960174157},
+ },
+ {
+ {4310605480085901679, 5471288425725661823, 6576140643955467936, 3714340113776184365, 15078838872712774233, 18067422699917639715},
+ {12245168645156565325, 15389216374359086860, 18243910314816324743, 13468377185671333723, 11841166299472831071, 11909676588719569514},
+ },
+ {
+ {3039346662401409366, 11575031947853028231, 14291487837746157982, 282111250317099825, 4887181073166372566, 14047452768090024474},
+ {2283232607704977993, 4156222868336602759, 2441521584735661714, 13573229353517305526, 9684005436985156440, 16922485212222584386},
+ },
+ {
+ {1553039617197624241, 16514547904183858426, 17367571479943820700, 6825408557936662849, 2149227651964819356, 12858662242348855034},
+ {16445523343296776096, 15421752631325482241, 9264183421788584112, 10262669298529989004, 3891304426791575665, 7854962043530510807},
+ },
+ {
+ {7161328094115041425, 14768718294470741983, 1078847568267874018, 6322480815278149199, 18188544274188331587, 16963805236223110899},
+ {6569325721741554692, 3602100460502266263, 6206643867130260259, 3995469255074245935, 4504503583988431466, 13467328567518375341},
+ },
+ {
+ {63226333202683911, 14671906635501883344, 4335660486805420293, 11275217723178135465, 6969760830613945548, 5475843160816775058},
+ {5191859885839573328, 11668101171119622286, 9518940388019884438, 14714241947617194877, 632307311715190469, 10690578858328770477},
+ },
+ {
+ {14884997433355015941, 156621939301515107, 2445891763674288403, 6687931105529654257, 8038932454300528136, 17697513852216155615},
+ {10697408303393919012, 1270195498851099805, 8775588255042571995, 1242116603145454630, 9905730533240215250, 11108714318383369270},
+ },
+ {
+ {11500726014983094694, 4893160514903146014, 6828604209587544129, 6694479643978756339, 10165551838331433795, 8922014005219839474},
+ {3229903124718463251, 14809704320533033299, 16708685770407035451, 5156200782696113140, 8700282174866114406, 7662703141074882120},
+ },
+ {
+ {5701014331899997770, 4977516111362250117, 10386130146580034690, 5907362069264702911, 5301877636154186197, 397392370575027293},
+ {1263487057932284919, 11711479762453857997, 16042267091696606042, 15652910858049110642, 10197526967041956937, 9889216320967166622},
+ },
+ },
+ {
+ {
+ {2278932254609762845, 3068437509226158452, 15744868666981586003, 8677007854964299754, 14625754507006402628, 7482852446653641224},
+ {15206963697756253732, 7484355521899064206, 6303098706947551318, 2787820459819783710, 10505036182664953766, 16812578278348872057},
+ },
+ {
+ {5328402213024840932, 2831229329708260259, 9906671250991291328, 7195378896450113384, 8137962574541487106, 15483420743942942895},
+ {10185763153215621718, 14520317539607894634, 16021622969265412233, 249210915963234415, 17409430098951304156, 3459897863682731842},
+ },
+ {
+ {4578309973503497569, 5447834563002642123, 15020655062803172906, 9784029918330815189, 2259183585428823851, 16276654784273178554},
+ {16974315692938443293, 10322189489795986428, 18095043949242233690, 15529824169672291114, 1043280182503641486, 14396190389419318386},
+ },
+ {
+ {13791916129725914380, 13541507063515942618, 9276345046434203244, 6943275844315018043, 16854690413809965818, 2726487241024832361},
+ {3900450032896335120, 5969156219373170750, 17268291021193518751, 11250600592358444059, 7565688406177070545, 15380048155812318403},
+ },
+ {
+ {2159715218114046205, 301696308536518990, 11911287610460594499, 11610729258797804364, 1589214470697930255, 1570320627315083551},
+ {9260920251773296769, 7918633900008866828, 7386692371354490728, 7126854243096368735, 15222007907649556112, 11290458721857786222},
+ },
+ {
+ {17312369275830596578, 5182973081822417591, 5758577204554952034, 295579627010058982, 2247918074145955246, 8367663961370585320},
+ {3503412556908913188, 5007246298285139323, 8914116616437113026, 1817837618482256490, 3888281808755203703, 3596198455140072332},
+ },
+ {
+ {4204733050884801398, 1015148026108767645, 4474014702901614014, 7893591904251967078, 4629334549496872963, 15544715130284192268},
+ {11515169364144564012, 11336358832640243779, 10261616753173485797, 10330995131826947610, 12790048324162427726, 3954964425838098297},
+ },
+ {
+ {15466718315096778468, 8207059140145815039, 10673629467808554944, 886708118721286191, 10960160354467637448, 9642682828370620599},
+ {17438921783439498819, 14206610474459128199, 11283947246870324451, 12050660127565107275, 13394619346776634282, 17491132232695062376},
+ },
+ {
+ {10457517951627566681, 7814805982659785572, 4650803108692583382, 4440130354090651090, 7336812384548660642, 13822285076682517424},
+ {11611474337378208231, 10509443664430110860, 10916114862115943164, 12170669850354153477, 1352553062166066021, 11347589626152349860},
+ },
+ {
+ {7366949076040585274, 9972276751640303927, 16423512277534811183, 7530907908504052262, 14015798648185098200, 8802667423497257421},
+ {228792414850368243, 10508703706507014037, 15514995919049710800, 9118562110950567762, 10221889965935090890, 16185466175233862997},
+ },
+ {
+ {16803723690699933675, 8487548998297552291, 5803011050307689648, 8460712827018550942, 16456152075823939447, 156300814418469424},
+ {17276908626721299576, 10528203526298520812, 16491173177262003297, 11906011972808274164, 6723396315092456133, 15740670211031988239},
+ },
+ {
+ {15373669199500708772, 1418986186617967125, 14646929309039869466, 10499548009936132679, 5225957845760868950, 4939303423191000552},
+ {2490287739273437898, 16292383701614685255, 1045010937850952943, 12708627850998017142, 10150876621237058060, 3374704772596624527},
+ },
+ {
+ {6486481503809124917, 11162331521576557500, 10016688945665150046, 10440833383589084422, 14434962491136116288, 13795058186240622619},
+ {7202909919242169987, 7084906191002088475, 2670999100224514475, 11205165509896785683, 9153315609780748370, 5520519463950164065},
+ },
+ {
+ {351071170739877570, 13322560781273060052, 1701785565365847432, 9955777089526659386, 7009753490594385600, 829657910123534028},
+ {9606276748652074643, 4015732708367370031, 11721876633733031363, 1595979662340466299, 3599656218219669185, 6412814251963052600},
+ },
+ {
+ {322868295872168097, 10779671223207907160, 17146021042584030369, 7744919563204743978, 18009926370684955932, 44255721611034122},
+ {7075518626826263580, 12948066299893087092, 7907043165345290748, 13326944701483639264, 4900286334119935957, 4216867816480695349},
+ },
+ },
+ {
+ {
+ {11422675888913080491, 5395798484379963549, 17893801226572621158, 3834831668463767880, 18370393837527875887, 17800133101197187390},
+ {7029247643873698097, 17334943497121462468, 2660202885167189413, 329065954663218375, 6698129215665562567, 13717605916501910272},
+ },
+ {
+ {8639178386474167317, 866299449001193597, 3615027842912577064, 3248451241352944854, 15229370169242039655, 14022996697023959990},
+ {18261603954599110401, 277984183194636545, 7122474136492127151, 17268552229454245560, 8360275028065354990, 12658058275321946659},
+ },
+ {
+ {7568749213445711158, 11322886283898751316, 1514838974790282409, 16480451187055352472, 3521826310939475982, 13331538149045598985},
+ {16615732436977239999, 2388796933096443142, 12226612954948297380, 10822339804892299866, 11505338527635209905, 13965903403607753974},
+ },
+ {
+ {17992684961837313681, 6896408298290524868, 8544072807657571566, 6748791036415412590, 14025071172791740982, 9009141746159193034},
+ {13586218153614538887, 7799628080484457452, 10266486360990114058, 10957603090701342492, 17913488373740611379, 3678764260563976289},
+ },
+ {
+ {7850028067287088329, 12999005266298055869, 177742117066576348, 4187563636181037744, 18227464305249346823, 3944943827343100145},
+ {693604820039552598, 11582121744559616851, 8219537047451291189, 12011868187157813437, 4720619866818053644, 4330189064262098264},
+ },
+ {
+ {5651722935351245741, 16211924818358123384, 11885056608369234243, 4201983212017634359, 544526908348909642, 18119044215050860139},
+ {1629340396439724022, 4959173500186337859, 4507705775156637972, 8833696014848286450, 779478998504818906, 7902380186120673057},
+ },
+ {
+ {18293852260825634987, 11802124232706822019, 1644849027510672867, 2812476574328933804, 15557250672802932860, 16508981297686648154},
+ {3465734358950613242, 526649456539607490, 1919417099895547055, 17331494709758577824, 5162227762764949865, 6242065099954684976},
+ },
+ {
+ {14405288903984360898, 3180009282630369461, 7764333772077120386, 14416489610146878273, 6877362386602494384, 8785041971848387380},
+ {16205552197332611855, 1946014005873611974, 7425906351428289382, 14466564319882318102, 17948246265185418576, 2220383241683179866},
+ },
+ {
+ {14872241004765885673, 3636107144878936670, 11410176190546783355, 12181463760260857326, 10438330742190191570, 8102662675316985666},
+ {6176126135590814635, 15938212979141106430, 6930351408968184663, 8991851982195757076, 5444235666245388183, 9160086367185317170},
+ },
+ {
+ {15340964667452830754, 14317488092981700975, 510238063968897076, 6837249889367286466, 525386960344698653, 13363589982130767126},
+ {17072735759253073196, 3498833952641874877, 18362568207671943201, 8995020072357799227, 7719631523143820724, 1085622312019426779},
+ },
+ {
+ {13037971076711969658, 7591102587937139905, 16112103964232511295, 6658071900440103886, 3506958499519852800, 11206278262730072649},
+ {874512935619455066, 14023431168230615564, 7818120766602709739, 8832031439666609419, 5585964366092107082, 11504555017740100069},
+ },
+ {
+ {15350102097560218059, 17960930933998802379, 5819537312713605133, 16574725790066529972, 5613973488460835436, 1634532828922318920},
+ {6054735558644874316, 6779535286618214798, 12125632371272029575, 14822061593509407829, 9915577628769350648, 3262340591497022728},
+ },
+ {
+ {8571949731132956833, 17851489671172976600, 16122671592171467294, 17953595451749771955, 7101774572418004893, 444927268485192911},
+ {12898124468306022144, 4543591108002290851, 16651517581025086108, 16702288951395475761, 9009172261902505944, 17794186523942672480},
+ },
+ {
+ {15874281727524415422, 6572132168538751333, 2488717046038925837, 7528462563702651155, 15177291123321120421, 14276075288284279593},
+ {7287442030153170731, 8621411913466239822, 2230532822823360290, 17882655262254713908, 10820729357094734590, 17116812739217748569},
+ },
+ {
+ {3521891825683807648, 1428294732738224966, 4467541612632144795, 10743380230531306175, 11596549629085266496, 12996854075027646298},
+ {7286872326554604613, 4747621740227512796, 5892707014992033323, 4322214473714022904, 15745271974603396672, 7332629562375692095},
+ },
+ },
+ {
+ {
+ {11178967054056195663, 5059057946657071041, 15846370838494899705, 4058997021862163911, 2593984691649122230, 6254605580411388786},
+ {4176062086390468245, 16189011794825339160, 3064989397845883132, 13286588576296135872, 535125068036700463, 10408854172492123217},
+ },
+ {
+ {13415824456928728537, 9031989784978508164, 17964218247364329886, 10744745034242750397, 11043008786756317850, 7568533431395324401},
+ {7507011205371347198, 2388282443864154121, 13696995679089020165, 12583409078815059304, 13898075392069488590, 3664734608506976906},
+ },
+ {
+ {16544958402351236901, 14337484652764170641, 9770866337239118974, 17810777202725060237, 2097808205286057289, 10362289157561627722},
+ {2685761484429320421, 2462399891877992298, 6512262486201450596, 10981880327208688077, 6617301996979402163, 2835239075992528291},
+ },
+ {
+ {7991173582500478757, 8893625338111976660, 14169111919230117155, 12356393203568432042, 6624804336968870156, 4373502195159979453},
+ {5525831087690451674, 11667968375332638977, 11672899591207027148, 16453647862989440606, 11804399513913845371, 7628460269199181450},
+ },
+ {
+ {14630566089474246013, 12500213971114656059, 830106031407073402, 6911967831791350423, 5540576114989833332, 5622942981234358149},
+ {9345206395676904366, 629433153585557678, 12592664746177863352, 7117895689488311014, 6126264353083621009, 8672251668710377501},
+ },
+ {
+ {15343270797031359599, 11669913580639087574, 5479735138674518875, 8134395341091815991, 3472212905841111046, 1943386847444310169},
+ {4802323257275851562, 13041393404614837895, 300696023871229709, 8124939534882080453, 7037259695740405607, 15666477288369374120},
+ },
+ {
+ {16929655147930952127, 8700678224807582342, 6899508338063907541, 14124820011808216974, 6685131911353931949, 11392136278714910024},
+ {16320977876025241931, 1873285772151321892, 3864985292509805330, 9209816330063069102, 14360660501914452161, 13765026774665638630},
+ },
+ {
+ {892554047301358165, 8208545275404753447, 8552497586050955747, 5886745868526813090, 11422451069439740114, 14454702771432318255},
+ {13473748178404916790, 15675215165690108087, 5664345539094868232, 987897124768858568, 15329698597492189645, 13301936956751718708},
+ },
+ {
+ {11819868530282842855, 6710224194746120191, 748201410135027328, 11307022666945855023, 17212649811821554251, 13423110040809399786},
+ {9934050328022487645, 12074357593722511625, 6630946082142899698, 17056161405408381398, 8571006633367538659, 3796784189746526746},
+ },
+ {
+ {2305785560014348207, 9531795736757421484, 9618934670188570881, 14780074586441306089, 6200104801707088881, 5386351446699164262},
+ {3002942961830406638, 148274483233190080, 12735679168321756134, 14693507680316309726, 14232858087052761737, 13985992269476016693},
+ },
+ {
+ {13842387890174377681, 15419080605999723375, 16681571383346636493, 9653218004391250805, 1748476375644147649, 16081919636049288692},
+ {16200057164189696404, 16659975838973439415, 16148363345960831424, 1128253701358674568, 11627719509137069576, 4062100673790478823},
+ },
+ {
+ {9445528033084918138, 3236780574278685899, 9682773997054520194, 3980365165990825614, 10958694477307693178, 10839810148743664524},
+ {6650282121724231548, 7894922159420004756, 5624389477223934865, 18151956206730252126, 3735677846659494424, 7111781989342355242},
+ },
+ {
+ {10926693111959793122, 3929513560799028061, 13083700370081498912, 7606788298622011804, 1499929199041655117, 2537708677997890346},
+ {16163615921094614869, 12490168710448316035, 4173408469387936546, 9680453490885130745, 6897387665823483412, 1803882466154055696},
+ },
+ {
+ {12928382421675599167, 8246098434142042032, 7828289919035992593, 12704490623615851803, 11049427248294980078, 13839977807550225944},
+ {8790158444480790055, 14691519147850982325, 3571740556626361440, 2025494493460599521, 3901915857099204524, 9232848549491285301},
+ },
+ {
+ {17205250580750313739, 15838972152830244406, 5212027996849957464, 16696646218907655391, 13718292263491425643, 17806855155656742837},
+ {11988041571551593283, 12853752025657189673, 13524920127388710455, 10671352188986408025, 17279385799981015698, 4758202966923836309},
+ },
+ },
+ {
+ {
+ {3974313353418109687, 5720345224825286858, 6801835843798312295, 6372634484952764872, 3310006789326513240, 2726055308497026029},
+ {3843770043613727251, 7900599654720541372, 632972795419277904, 5983319127366592262, 3077785537568329842, 11218370678822489750},
+ },
+ {
+ {8928421106978139244, 16345148895360341144, 13492011400134727288, 1731289337634521374, 12525842512649542947, 4207120388067304407},
+ {2345046098001310699, 330997644936357897, 13635040363459393506, 15230878178212376507, 13652277951430850918, 7237296141945425478},
+ },
+ {
+ {4557723407539085034, 14471756909246230823, 12448850285779367089, 7851797223627122363, 5151430975338428030, 2954895927776921398},
+ {5279712016090746131, 10809813162354586237, 9242053890074456174, 9668653512111950665, 10135306740731568651, 3351464240228973156},
+ },
+ {
+ {1627053608069570695, 11376938021692164730, 9622466798286684763, 5827728193917331600, 975693545877321955, 17470494739932363034},
+ {2436171715026125366, 7848361070155121218, 14061221750869732481, 4888283785453330436, 5036741489113467755, 18084794423259936778},
+ },
+ {
+ {3552955380513038861, 6493678664778873794, 649357577150179579, 10545862185632419419, 16350124503975893898, 17724367842084936677},
+ {8896453178391269512, 4710703558251776246, 8492419126400496150, 12768468520236451572, 9192761450614257478, 7438647446930613021},
+ },
+ {
+ {12369531841339403158, 12996664064774054476, 16155473999921375261, 6644207479370307599, 15208474964382806744, 633958492471874768},
+ {15790482482394397377, 11673958026072739923, 2075775971265990014, 1102830502989644674, 14328138387706433231, 13602359449553119289},
+ },
+ {
+ {12143092119248055873, 14188915263690936719, 7408425876028150433, 3779414505485695820, 1780029671596030155, 12865710926564478965},
+ {11680590440944425259, 6090714137241796515, 17343249885314900203, 16644769067866316590, 7256952446206185353, 12961945084971064727},
+ },
+ {
+ {11134447122165152593, 12122722588466177555, 13031738851579131777, 775360620960643964, 14535630049172421527, 15517365877497081698},
+ {6749416834835986329, 111798195283805063, 9427922671178152846, 5583634039175768131, 18026394909638384188, 9381210933213377107},
+ },
+ {
+ {10334265748604755240, 14313974363914896934, 906523409788490776, 18014259526343590726, 2489497295341492694, 15497769074229220560},
+ {16667753502962144886, 13343473574324449479, 10922772232061902038, 17638948975896960836, 6206546855196209053, 701379544767660020},
+ },
+ {
+ {7323167804561066698, 11606373977379537829, 7740797211952786009, 6774632772002662447, 4137066669379889537, 16448062068535134384},
+ {2263388950950990004, 13986419062957738814, 12736780551361126087, 2151837813422636155, 1478109418633068180, 13196418687650255350},
+ },
+ {
+ {4763801360917190189, 8413965106647468101, 4459652012857109043, 9905026392952537025, 7732441075598956516, 5321607056947218327},
+ {18121980170092748441, 3481588764335216251, 10446782825632997719, 7693360199940913038, 17104571571510845330, 9855412900039516293},
+ },
+ {
+ {9385835129240491860, 4824589714590984336, 2196446888524873714, 14983326779959559720, 3813990482140930799, 7930070026494865435},
+ {10845320348409053590, 11702362686639252435, 15805206625312010834, 8614879420112692657, 9694429543708544128, 10989853026030014509},
+ },
+ {
+ {4594816827257062041, 2562345560258457605, 15050193570974712932, 17246403151526033694, 16146699389908107161, 3086841042515638998},
+ {1177843674463060692, 12536747725401551571, 13206715304133223188, 8671490102358535635, 12212794350549092683, 20556749311088582},
+ },
+ {
+ {10565304604241425748, 5627103307724972881, 2705248188066943448, 11105071139145988281, 16803969759084451954, 14319542282813740942},
+ {9198217579227787191, 10953486347952736044, 4560368619486330585, 757042920267352831, 9594548960853813804, 16693022163678979226},
+ },
+ {
+ {16489742344230153188, 6539412415140498039, 5165832543217723569, 13003478072329918265, 10047084890632029191, 4694331753623574371},
+ {10703728784580237099, 15556245530594099306, 17588951018132280983, 3935002524499547861, 17702492742125323184, 8520257892664878061},
+ },
+ },
+ {
+ {
+ {6560439988460907757, 5477297489685795935, 8263272205317190744, 2155221279069076320, 11867925124460267529, 8571196738200600952},
+ {6380793266523402469, 15145030817477249320, 17647327914659401104, 13319573822063298508, 5205094261198279328, 9191043393335719432},
+ },
+ {
+ {12034745616655220445, 1806587157936901864, 7601847606478345239, 4533004298191165610, 3124085236761665559, 17389156053407331651},
+ {2864989624008200953, 5136009810031599899, 10582433036693217288, 14931735150274274801, 10439401220326631886, 12677134576293396474},
+ },
+ {
+ {14650755191841474854, 16300166795758970811, 10649037273588294054, 7104270209860104788, 7967261075606297822, 7279561497784730946},
+ {11697616288471532112, 1052366164901768766, 2912238129374155198, 9701834771332452417, 5442175782826775844, 2299045115469613839},
+ },
+ {
+ {1287332463662400432, 3513212364154390112, 15346209202263562543, 10855689071781783808, 1452088722357536954, 18071443086358423492},
+ {868440689883949449, 1816852863222370485, 5199615657293991859, 9449935448458274470, 177207136542962287, 18245562675978917823},
+ },
+ {
+ {17651410429892341588, 2994246517539724152, 17728394019247321391, 15386586165465459648, 3241419904742758835, 8030267348237056794},
+ {8435074151094093690, 524712275897055450, 6804195566995782773, 7679712373149113143, 7995287808064276131, 8927279975652841496},
+ },
+ {
+ {10778050409776497212, 9536627676531662024, 7658414011223352564, 12327599912454605669, 10735492819935528307, 2807151273987894916},
+ {16239030609792653613, 10332717478474239620, 17257364018983708944, 3381279635307716914, 6577585621142376520, 13802487288606991045},
+ },
+ {
+ {17954497611593459666, 3664315036641118415, 16509024076253684643, 17283250569741859362, 14982375386085505669, 7689080851173975344},
+ {6539602342283003922, 14623322619256010467, 2886392582253254823, 11318353402632029623, 1048960849463114154, 6823726223520193527},
+ },
+ {
+ {4530098428200707620, 12839096969967251554, 6198816293838808699, 14497410916805455082, 5464738801928006246, 2590420136286143409},
+ {11539859348742386287, 6448283683032046535, 5190841120404297714, 12682630274691496068, 3502978196473226835, 12528396777891929349},
+ },
+ {
+ {3746596285568179795, 4244746780559722754, 14192133631604917518, 7971972442736154200, 12850431088842970183, 12924848893782277960},
+ {6210043026683817121, 16093936346760077654, 12896762480304091787, 37796835925086671, 3297320202618582783, 16993735692589610973},
+ },
+ {
+ {16449417965222475184, 7693932127514324007, 365506606826317804, 11357852591741708092, 13089599889026601450, 16903400737548641302},
+ {16984170724371326225, 10391779522684702015, 3067870164038615636, 14252841648119381798, 16218707853229586386, 7836241961586971830},
+ },
+ {
+ {15192483994066769425, 4516676767104334066, 3298548929696008355, 14149842818379505147, 7754159985358226567, 18074898548922930513},
+ {6787600702315314002, 17427509000681768725, 454039934719798915, 6687725764533626315, 650049015881932447, 8174481017589685550},
+ },
+ {
+ {1190766049258248701, 16712766508257076609, 16011267443004798709, 4304976661940244179, 17401735122754430323, 17805491770899188624},
+ {12819712409221279306, 6012470734633531883, 13202842728516275075, 6714649673431658519, 14766728086190011567, 12025005326013128366},
+ },
+ {
+ {2550442130803597746, 4388182498378820973, 11877916159578114240, 2491232568553766269, 3061633366263606868, 8930196601588700949},
+ {8351158090909235917, 17643196865264803997, 15136059012100053669, 10435163437422615040, 14669662828147957267, 1927075496220718405},
+ },
+ {
+ {8522264882073051051, 1620578049778200332, 8273686191210510914, 15161466784984992681, 8880636972606501019, 5137083413106892985},
+ {7453074636338505180, 12738938384123169905, 14134926144460829976, 13289026532736437285, 9961457855205231232, 16868281080316857896},
+ },
+ {
+ {7869220388851879053, 9243594331185701304, 4578820859414588545, 6726500389404417900, 17828060266225175185, 2805995484906762914},
+ {8127865232957840490, 1119209698667346666, 1543121112626802223, 11635665147697604228, 8700384215304758069, 15110956032330707009},
+ },
+ },
+ {
+ {
+ {3999765870898298471, 14172770317997608516, 15838808511345459441, 17483331932540195875, 11537545446428919358, 18161106008778308362},
+ {10832208579815022485, 11144226171709861172, 17832358814667390783, 8104027490956075374, 7738001035752373711, 9976303985994712521},
+ },
+ {
+ {3053316092196908301, 14599294197004415859, 11376968891216184065, 2166021074759834008, 15176324388121041813, 1177183645238737592},
+ {8872756236922047177, 12695199395087628448, 43719476960233138, 9968538827589652609, 18292294231863534866, 15247938318298852535},
+ },
+ {
+ {12542532240058205361, 7268582068935965299, 13539169522639613195, 6415306438194106780, 752732255800848126, 6467156824109874302},
+ {8919765688158995394, 10376805730213749427, 3560797874989249371, 13765505640431451465, 5413502209131873679, 5479930898819906026},
+ },
+ {
+ {1620953412301746638, 1834494332682380488, 1221287231603861044, 7143200653970910387, 2142887614724373742, 515369627860172237},
+ {668312192947122200, 14495573370059274601, 19053408511875346, 11573007294798838371, 5996919291690021344, 10963600343891369281},
+ },
+ {
+ {3772056564995867704, 8936213084537725440, 14741295503761475310, 10169482512429303117, 7395158688725827440, 10625709550842394718},
+ {14145698620161177178, 2138174424797012712, 6382911437211835009, 9621628449746421183, 15318114188233644891, 9127092351657370481},
+ },
+ {
+ {7569439361788924386, 5358743744068588919, 2472617216924555430, 14446025836401453832, 15206339952764265454, 7985026553542652918},
+ {2885368393308729366, 7662239829932173449, 16902869606779080248, 173909372728520956, 4745825384290840252, 18238389235634593837},
+ },
+ {
+ {17278763089415978011, 14648999284612290464, 14549644405624342751, 5242220935080712551, 1281695041546515602, 15620247700383069753},
+ {6061717613096359788, 16094895295267398297, 10954605165474093325, 17036094738837097294, 17315827424817840310, 4006783343088127765},
+ },
+ {
+ {3347760495316022590, 18353910874341978035, 6043778301036432970, 13355724919784404041, 13015796096139756391, 12036177583658955420},
+ {6518471179080804014, 17158842633921763658, 14405522311746951243, 6973400651137011042, 4746890325642485958, 6736547103097705136},
+ },
+ {
+ {10669366973839367672, 2385569531879845310, 5688157778456360570, 5432194657022107321, 12671178471488614588, 7761060866335594839},
+ {8978451158519567422, 8492352982229672202, 16643425269116819050, 14671179713658552694, 4363789067899164540, 9370620302779212621},
+ },
+ {
+ {13310909055019013380, 9596076897475568893, 6086247547890141325, 6615089564251394108, 7111916614455620574, 11675908774987320387},
+ {15925711704010954904, 1550153309190557596, 18423416479089687440, 2237807451710845475, 18354395799746145454, 5438928742395904784},
+ },
+ {
+ {4608572069409268399, 15073585230746724421, 5850493471469990136, 17178910933214514567, 9197442918599759710, 1507943865355025659},
+ {10368207473957700231, 2360337372791198513, 5963074125901124077, 4250878605574616141, 16077767359709901643, 4855088307376525666},
+ },
+ {
+ {2203675397636717516, 10128211604548624427, 4835587188573085370, 7287969591049025649, 18068255218779265239, 17327995020974268765},
+ {5719882824311508910, 6709568563671378548, 5291703009398100222, 10788191138630994747, 10408053012947876069, 17443305409665545835},
+ },
+ {
+ {3342016462643355321, 16679489257601825281, 12043384844586211843, 2115834496701139743, 7212063995634259653, 9441913556375417406},
+ {7879272060659630672, 1322154690117373473, 1520558149537399921, 10259915503278516179, 3368650106971654575, 4144693617269779944},
+ },
+ {
+ {123661428923518452, 17329242377861899194, 2113549760254636588, 847106394960135909, 9954070461361301937, 15563438708607816744},
+ {1040702637047883211, 10189161753028718742, 4009789976573376701, 1936488692781097326, 8873733742849194027, 12009079112311092681},
+ },
+ {
+ {17741068926415815996, 2460265563474934139, 1072480528377351648, 11885568366174373122, 275536108394716793, 4505994571681041972},
+ {4997815718062610307, 7966342590073259297, 12194728418927987790, 7653673951695752977, 14783821829300070265, 12992716489185017892},
+ },
+ },
+ {
+ {
+ {11640101960998639313, 15953805101075159736, 3493841973394909037, 12961869929990749200, 13933610253398336212, 12682152790147939130},
+ {11399471237860797020, 9683858492545796215, 1548460573545589546, 7173998343795107028, 11677696610449743857, 8398835533776273489},
+ },
+ {
+ {18347627398589476579, 10477209504919905991, 11985004040168566638, 14212280469459055980, 17155809208164808508, 232842756626748023},
+ {17663176896634111834, 11266862009271054832, 2801433370426448852, 5656158823188135309, 12410354059238919535, 2244879375847000921},
+ },
+ {
+ {3190520016779022051, 13246407962418081856, 6668351451725762413, 7768576717338627844, 2262028295584292801, 14381567562481981200},
+ {15520621358714576108, 15362331656590194956, 13091576850573016550, 5790621552805149408, 11085966456081752022, 7995145398979072602},
+ },
+ {
+ {13623592007492989552, 5695669685400021686, 11103834195452561281, 3924874736262277070, 14749945062025337942, 4117578579179786869},
+ {4942010861531575831, 1697597687729901180, 8378286745350822869, 1042755497644966445, 4609634700670610222, 1595371322671204226},
+ },
+ {
+ {7356907816961926000, 1600282058170066082, 10425052022355846482, 13802483414078059083, 6527010123231557260, 17014236698247006256},
+ {18079966107052649494, 18199473573195697305, 12045755339859992655, 9377227322475274712, 4707316309742615490, 9453719605925386277},
+ },
+ {
+ {18077338856333540591, 10940855750925578638, 14676427357499773843, 7077022433649111811, 16481763083992802494, 7834705448306735746},
+ {10145419701640226394, 16562141330625721365, 16626213781430570449, 17015973614586109901, 12442022173385031947, 9087600251713065715},
+ },
+ {
+ {14206474989889371590, 15241997516043179936, 10046960511573015546, 4012668500672179053, 6302607210097986007, 14073285009414845523},
+ {10393845740118669710, 9303896053454113349, 318938169015454180, 16356683611313694376, 4951073049233679376, 8961912152048041842},
+ },
+ {
+ {8028335957857989427, 10757251699849982309, 4827184158706600421, 1972803202369040744, 10894855692237667943, 4915699847075993000},
+ {2764904044867252832, 3759515232559764976, 16791991319742688688, 15982469402311953688, 4451160053970330710, 10836878114068503963},
+ },
+ {
+ {1898218734300846462, 1890052160621754096, 17802491502548108823, 6190373917215274157, 803001649590263174, 3115437408056727221},
+ {17784493560265139286, 4722713594994619444, 7211558284311348923, 12566601502228621014, 13213147693274689277, 6593798376447442065},
+ },
+ {
+ {14162633535901746112, 13888434174969429930, 3406707891053136625, 14343716935895842484, 624836619325620495, 16396608622030250358},
+ {11243183545197281900, 13435578064685298093, 8553550930687221160, 11901710173536269070, 11201351899495201574, 6707939517125993234},
+ },
+ {
+ {9276193773801045700, 5450558417706905067, 9450904291105895205, 9833917887246857818, 7285500844025425965, 14754203014686269594},
+ {810778446780024575, 2913316233752324212, 5099291060376680008, 5738827727953191083, 9464181523940859483, 5936468513591129863},
+ },
+ {
+ {4878961831520826954, 14509215665191898446, 6708977457709037859, 12634291587039233323, 14051107097299387218, 1257131711299495146},
+ {2944921399309621693, 930008782908430501, 1144887774944683814, 12070375620973983173, 8562905952672576547, 6655131226711101957},
+ },
+ {
+ {2899574573379169897, 1484714325759426788, 13026584324463930570, 7354422735718365143, 15271320868736293087, 16264371063992305811},
+ {16407322345111310891, 8408499977463544416, 15290440212843619800, 17056597194115740595, 1666861996182883636, 13197583661824364865},
+ },
+ {
+ {6358774672677922630, 821442820597003176, 3813988636387892061, 6549290188660731594, 3924164508423783399, 10897312938877431610},
+ {10853174774402828944, 11140723571860242940, 13060695462912345962, 14956978874467708930, 3205778154938349955, 4857627122623530951},
+ },
+ {
+ {11135246107897067582, 12930931433283727075, 16046715789896369411, 15407716337362202421, 13785191090068112, 14267330907406142872},
+ {9630464474491738918, 15849686165796549334, 6769531647489555179, 14133844287397398953, 14941312803089108859, 2539509877677478606},
+ },
+ },
+ {
+ {
+ {4519426578252664019, 12498635300136211504, 6321021405218202857, 726318959046945666, 13882007167200891438, 2395319726326567532},
+ {14574068852065085528, 10190204462571587840, 3147469108386280925, 10820985172387594951, 6286320751972150388, 11262911446209261547},
+ },
+ {
+ {14681940503030753559, 845444804754325384, 17738750192032703554, 16488507045196756482, 11910847346995920258, 8626355026937911802},
+ {18017945832199185475, 11050392025640445707, 10242360224530664755, 1617332161128003926, 14748788017604482554, 10938197837639769317},
+ },
+ {
+ {16523024021068053599, 14153734702399414874, 8975814599494295874, 13479798347939192877, 11858323547050135962, 16835135870848796279},
+ {18442770255404680133, 6432227429946434052, 14626833122688941937, 15380321854072410541, 8513682513482878540, 17341688292014129030},
+ },
+ {
+ {9982750773031032188, 8982169985591678537, 5249265836220267338, 745482432716420646, 15780419841302462097, 15584095070673766359},
+ {7735573468252400802, 3795411598689442193, 10306326103347347341, 14546148414040805838, 12297870683806673875, 10180646444691724781},
+ },
+ {
+ {12710315976002578004, 18013486904999737909, 15071959480643480686, 11232436041458243738, 11242505152758575624, 8836015187488468465},
+ {7163797004587484021, 6976175793895240071, 17645939623644273967, 15778152496214427324, 11329126604565270312, 13110466004937401027},
+ },
+ {
+ {7062286409431630812, 2728146973991795543, 9706360251287090173, 17163823676653858159, 10108371106182915478, 15145658691257940197},
+ {10397214263743326838, 16577575568682665639, 12639970963217473417, 17440990594269730118, 14950277950848187668, 17431952877316305268},
+ },
+ {
+ {6480066766050317343, 3568668077668658088, 13783844110647363350, 3962057444946379264, 10510088723077169182, 7170700020292960967},
+ {18344863488775695783, 8824084188613580257, 6513472792662119798, 8283498389636157255, 2472052284746094828, 4520476222306731358},
+ },
+ {
+ {4812653469852902630, 7740257893595917350, 933590915187574091, 5367604661371230699, 11524926856934229507, 1547803982974742036},
+ {7173249707714144699, 3782455439068354757, 3436775349109564743, 2186512130420632639, 13544740200729805403, 16975429410143506788},
+ },
+ {
+ {15877732835883777356, 5756653960126645671, 2937501458743429054, 3189115871611189466, 1436979939858552352, 14064609826654033973},
+ {6211184029252028368, 14949803431947181926, 13070266838064658248, 12061247352423941993, 10971542374730440659, 3480209766469344160},
+ },
+ {
+ {14525709786341885047, 8039674455841380225, 12237612161305828783, 3099183041004087991, 6867967360204688651, 4823608220141329719},
+ {2084876862441787600, 12090014665548950766, 3746144123408878153, 3923168966734460049, 9736629444481310223, 2220438547349139262},
+ },
+ {
+ {12036615988734629195, 16475002855996060653, 4484972141187264922, 5765002039288394851, 17063350421202862246, 13141299915467681366},
+ {18175008310626520279, 16161757370162131471, 10768451552383046438, 17776643199179949221, 10598298165332627044, 15321920779815178261},
+ },
+ {
+ {11362509937560115945, 10576153459965418079, 1262608791982484244, 8810089598173523841, 12316042044260285948, 2268907115684739741},
+ {11678522433578723279, 13370587091821540471, 9764685266488488043, 16120963353852178901, 6374843544537806852, 9069656632944802220},
+ },
+ {
+ {2566151116175682705, 18419852245029475374, 8482627328365732076, 85390825415125292, 15919801360472688229, 5270660089582520119},
+ {9546653662379271343, 15939549011572950268, 14048762686232196880, 16243975286260758268, 11298686963723559385, 16417368127514338489},
+ },
+ {
+ {17555499161685523827, 4589562335151500279, 4172801013578954247, 4538649193559819086, 14507716041867679317, 15478474910313981001},
+ {6017839036160861908, 4246101108460983771, 13629753094704860997, 5513007954781513788, 3904348220984245516, 9061778934720872085},
+ },
+ {
+ {15748938882069408756, 14277135008861981773, 18217921952747007161, 13344713176347262386, 17886228199837380528, 1540401873780123937},
+ {3324086529084340824, 16272343370371044813, 742477341260013957, 3350915636385358992, 6792514656381585078, 8878152636708404891},
+ },
+ },
+ {
+ {
+ {606092015174216516, 5918356105766628823, 3171854402026042629, 5083410488709721579, 3403581311288428367, 17676510467286289614},
+ {2967008223055154986, 4440513410884574177, 16523045544893119274, 3217655037837401371, 13054487720522321142, 10034418456224208190},
+ },
+ {
+ {7347573045686808521, 8524339315025279874, 16314398830774990578, 7148576901562720613, 17397796952544351613, 12574968465368627587},
+ {17127750532495035623, 7031729130299604572, 8389747942949500517, 6996080963912626814, 13495784988274569257, 1168514218006331799},
+ },
+ {
+ {3096433627791070893, 1860156442548924013, 15384249936468274478, 6818491582204214579, 16342638307737468887, 4369943414960054850},
+ {17533478036417612037, 15025947594061943030, 18236676236976149572, 7039406316466350694, 15869565193009626370, 3852675700088288543},
+ },
+ {
+ {18309824205914080602, 6894088905116897314, 10591623158526430812, 2528539630082230699, 12042495883122935729, 5844044239001656400},
+ {17005697103726708846, 7925252746001041067, 10999152033548088863, 9154176622465162277, 15084949920970423534, 5578598380515797128},
+ },
+ {
+ {6917179209198910574, 3886697537844862434, 18150496386873591051, 4972646778348909437, 4969661664166180669, 2872836128490559084},
+ {2704398887171405709, 13639654495080115785, 11425684371658593338, 232369335821630324, 218748759902514707, 6158205593118649580},
+ },
+ {
+ {16496178860935794046, 15119575313167393886, 15571136778187380808, 15718174980588554218, 8407222631419874046, 3994751679816363176},
+ {16137943000116730838, 649686844284716838, 8196756005862490544, 6988085908898901263, 8051931904212610802, 996284375053598207},
+ },
+ {
+ {11202012828915629624, 16434906580972492259, 5073784107975608951, 4555011077667954368, 15056393774484220435, 7153650342547995309},
+ {17034230510077633808, 9529331632480295071, 17805365034946979115, 1306070794871122132, 11283252790245181700, 14195024093610616158},
+ },
+ {
+ {17062804313340314021, 12487559988166578822, 15223533012653521266, 4215428489484541930, 16150265079986093045, 5813481978377140106},
+ {16065565784667247990, 11555499440070100600, 12227692665725509655, 174038838204068309, 6944904892485822829, 8209387774354117162},
+ },
+ {
+ {7097764295443365680, 7845963410214653920, 5797125233317311504, 17926005715153747711, 4229684472586339799, 17705398018071993192},
+ {11024978540019744970, 7926106855153668317, 3165689713040846858, 1324462571872837789, 4092065205041218276, 4114073167420719940},
+ },
+ {
+ {14832234719124735027, 17720736763724642037, 7569347324614805545, 2422203898133075744, 8407080162538697312, 4638392288322278865},
+ {14250957996942719144, 1268388636046597839, 5742106579831765479, 7403762642777718888, 10608168393433486378, 5148201736835738471},
+ },
+ {
+ {12017738182708598078, 15496109165938912856, 16276087896775269508, 14348251368567035394, 15495719802443424398, 2886769213483924492},
+ {13088574881807814182, 6175259348987407998, 10240343649650858024, 2445547966947917305, 4412093101877027279, 11575806026599033878},
+ },
+ {
+ {1978949153914018361, 9333756199061121765, 2483677446328516905, 4947844288118935595, 8796341380385369544, 13376588153739423951},
+ {15189671345805877067, 7857386656423263866, 12087267128677715980, 3124246805898824272, 8155860863800786429, 10855265042165217616},
+ },
+ {
+ {10968540393441817286, 4229948088947631485, 8845677625419290462, 3176865215857370108, 7460329129753473479, 16979518947567294508},
+ {2509227000662036147, 6062006495041137172, 10067170914885555116, 17887270821175830326, 11296565130650766701, 7373311159946922401},
+ },
+ {
+ {8850120526955796736, 11314469582193677783, 1068054995241090552, 7318394094178466418, 7619360585150493559, 1453572552029566577},
+ {17996868603041808639, 17518159987665308986, 12081491143590269787, 16972562088952683938, 9389093909820463685, 4548563124413215604},
+ },
+ {
+ {17046249548250582064, 7914728399210345507, 4240928990714296695, 14486835470503581294, 372290144157579880, 16839406978927405392},
+ {1016866348257954267, 15113309936348826018, 6432209476523479319, 10269747907106890252, 941691948152294603, 14287414307327182997},
+ },
+ },
+ {
+ {
+ {1272546058761547252, 13578575248362383071, 7500958990496300674, 3099202960982751824, 6362531162831059087, 2019233083206809658},
+ {2754115770602762476, 17265393813973046355, 1460109499264827148, 8566701200794847730, 7001275408840316981, 8133565635966870191},
+ },
+ {
+ {4530800567522751634, 172100420111867893, 10423105592359647894, 5854403877381514842, 8749270627115121145, 3573817859696661904},
+ {10641876612315799701, 13310097519809820175, 2575058335739178127, 1763270043880050, 13175676291469077040, 16171136871688122050},
+ },
+ {
+ {18354147526894604667, 13484255054412392853, 2800700506464137914, 11110366580313920102, 5646064147441879882, 2795616433118016579},
+ {2129899893763421818, 4807666508003926776, 16472812490021449281, 7681490117554722919, 3438671827454179974, 13557284264475208066},
+ },
+ {
+ {5975319400755341093, 1124738826642685970, 16753728698306033686, 16494353205423996145, 18061430851006650946, 12807029835851374145},
+ {14925084576890361984, 2612771955533652816, 8242017343741157450, 7403436780273402474, 14211525852367133182, 18439046101355433515},
+ },
+ {
+ {12522140250931309228, 2650365165363684707, 17266707117780681001, 17646854366183132476, 8242359948852550575, 4320679156333325465},
+ {15229476123325427164, 422299931396282295, 12793864739684453285, 14299923645240128941, 9978405170065329096, 832960934203122298},
+ },
+ {
+ {518871060412814841, 15562218878203565824, 8980911201550345823, 11524613147177454714, 8894386144833336880, 8282385053468266803},
+ {11036310375799843604, 11631323855952279243, 9204542676358250227, 9017637584223443028, 3369721496038149573, 15595900417339550003},
+ },
+ {
+ {4591440636846949512, 6036488867281859201, 16533349215338691556, 3133742230803728901, 2571899330106231363, 1631909183838142939},
+ {8989734436763331330, 5978410296483257172, 2006955146568177692, 7522769147634649601, 10220842932346919807, 15597809501020248076},
+ },
+ {
+ {13439894621213745503, 9146006640549707854, 5648702331867490349, 11405536749919113563, 12230345710914827865, 10071652654740622079},
+ {12555953518900584840, 14800100043573333557, 9904134836732167291, 7181207832363950334, 12514588099534090508, 15307927244603231548},
+ },
+ {
+ {13605621509983689364, 10781859117898335879, 13538880269705946725, 8371044748813843478, 3462400909078782886, 890871523695605067},
+ {16499951906767373988, 10661436183202627477, 10666398637960730939, 12471664467090838807, 1750972772377056241, 7518131157858325250},
+ },
+ {
+ {10247949599901648714, 14190196306159090329, 11216722499720804306, 3590282982469992444, 4633227070625809035, 9190116695797697665},
+ {15939242820763354667, 16077413183961690083, 6355653157022204783, 8580010924979501748, 7153725479094108372, 1357680516578643501},
+ },
+ {
+ {66627260421700178, 981976094061062611, 14088629719356601159, 18087879346236428983, 2519331146402108878, 14689662575392662258},
+ {12195986880010891308, 68431921015150749, 3127083875017010141, 3161714979740429833, 12839293036406001550, 7341433216159877049},
+ },
+ {
+ {1065953584516863039, 15096288182389718648, 4172454286491200670, 18026295242507833531, 5078063585310882257, 7268157657978060289},
+ {7875776889204835546, 10627478238674063372, 8099037147030128002, 3027823377924903270, 14915487051934001991, 15228458635498084487},
+ },
+ {
+ {18435525997497788188, 2784122541135616216, 9899619044143187449, 10187065183348144288, 14659596985883743461, 15442370538955392962},
+ {17895314255123528958, 5201907198851189607, 3321003244006213256, 12358309570578006578, 16348924419530434982, 11908899161823776291},
+ },
+ {
+ {2996337363285490304, 5920778534715228229, 6118912118872553172, 15730295041050666050, 4957216697404822003, 5536648704019369663},
+ {17046266803691791611, 2824215581505967575, 8261255744418562057, 9146405379237138408, 14347950681302095310, 16755353354313831572},
+ },
+ {
+ {2023775850404636364, 10364798591267796992, 16581829103891111877, 4554451792573593634, 725404179839321971, 11768827269800328280},
+ {3438461944423664753, 5207909560991353292, 4151502141621601136, 9129240992387993021, 10289852383205392490, 4419823091950629536},
+ },
+ },
+ {
+ {
+ {12192276596816111129, 11439584366963014783, 2713946508948792470, 12156092371372338197, 5082916671545533837, 9910663863905945351},
+ {2895173316336063022, 8340424674337499647, 11728516556339912814, 7593958655663885127, 14349406256224440438, 10167298094102276396},
+ },
+ {
+ {9604776696424199962, 3890505023889250408, 17042346157821590641, 9813252657656690957, 3258804089827867072, 9204267042383472101},
+ {7747649746653076093, 14320851129876639286, 3963186726043119688, 8387428722722708424, 10944959183156131923, 12376934458606855405},
+ },
+ {
+ {6374660930662569399, 12346634963964714147, 9701085914647913938, 10287390907227015944, 13392157278046428293, 12147807827670963406},
+ {7192397644093650214, 11565761799483254133, 8650181311221997306, 17210098121268283770, 13830241999240110878, 5113645900809384231},
+ },
+ {
+ {15158945955863226945, 8229963785033500122, 807836554855297163, 1605387028888366737, 7953194974476541404, 9367206363171169167},
+ {189311819502508835, 8213700212546178990, 6170317059714889580, 2177468661830227636, 15110619070491538357, 5283152492368065731},
+ },
+ {
+ {16607045468719296517, 2927802433169566022, 8424681719366218084, 17419326047422606150, 5999905625970770911, 6190744183228192436},
+ {12634495609470650905, 7990399520412760153, 351497963881822847, 9308418808757913317, 15411526673945299267, 12287423269457077297},
+ },
+ {
+ {13180158784974106865, 9942520119447471544, 5134405864152878608, 4720032172529013059, 15879568571954680415, 12977824023383269741},
+ {13377925830416234380, 6393639184729793137, 5830766798694674856, 18039280938728751023, 12060628440735138632, 7991124073272328857},
+ },
+ {
+ {2644049280934582490, 10000276111558865661, 304722485028140043, 11735908257972102216, 2166515612050129815, 13377192353750901582},
+ {14726585142314469382, 16602322022612937022, 4257344852211444460, 18080317473257477535, 2135517644863233373, 17513835768414110554},
+ },
+ {
+ {8724634927100459054, 8808563927836495504, 7987949369395724856, 16530109834509215943, 3846892622369353218, 5202324697033273279},
+ {6850156471545519811, 15616657543406258924, 5319309874170900032, 16821994765034133697, 11207249294481864848, 9072369915476840210},
+ },
+ {
+ {4789875659742294869, 2967870937886378114, 5039716748733970466, 13024655282622758546, 13532935784717493836, 9347203783138386205},
+ {8437277641527033147, 7455819464204777750, 3981495148880689532, 17282508695124259106, 13046846599571196113, 911227421359412761},
+ },
+ {
+ {14260224171888129031, 18038330451640326075, 15187295489695980501, 6762914031777041371, 6164418084043959767, 2811459417788208737},
+ {17735002493861412727, 14516376847997846647, 9469431640063725785, 13958475411167704800, 14313946757521744683, 820863393193999746},
+ },
+ {
+ {4594187992219349224, 10516014328076789329, 9634144629372521799, 12811929681753256189, 1612050195000098012, 10578937287722203100},
+ {10753937463348294286, 3603138206444261394, 9977000596369528886, 12918098041632842426, 7822977537561576313, 9364821144993035825},
+ },
+ {
+ {18090855139103467087, 5666769360330456887, 11220391310171813836, 5925748024381680440, 4640306010653470273, 18420049688662192498},
+ {1059075524163100205, 9669195064815845119, 15313725541560391108, 5852840239013352895, 13002771717222269682, 4779511585836627626},
+ },
+ {
+ {241470604732582689, 8576671504524153099, 225652023678227074, 12435872718858072551, 13214352155330021296, 13114666440706969044},
+ {16229486748212187548, 17546920563101641584, 2680822621869368005, 9315236640170012245, 14213661658286924384, 16853567802071195844},
+ },
+ {
+ {9323859950832044295, 15243140817228794442, 16338128914658363502, 12809819155289324786, 11997169044878679089, 9354840640666247977},
+ {8822752410054480907, 1693710795906789185, 3728007655785421863, 5709205642332505842, 12656439228195873274, 12902472130882922605},
+ },
+ {
+ {14607278468875625959, 7672085385893969446, 11489053104399436980, 9874730896233758251, 8525538217421482215, 13557027426716988643},
+ {11011646714046465719, 5278340269600204139, 1189175061902172835, 15246577042271755274, 5610476507823471218, 643296281309723962},
+ },
+ },
+ {
+ {
+ {6162274162111650349, 9370977122090552413, 4694677321413743677, 15950549144746715137, 9635784431169384220, 6961808095841628377},
+ {2163304554817059286, 8135281500465815472, 15429903319242318055, 11931312695286905498, 8894858811936530766, 995355997076750921},
+ },
+ {
+ {12678890939214435529, 17417003843916143348, 13742839322904008361, 10152726179915321290, 734923888530823747, 1110609374259636082},
+ {13691542854487986519, 14664730400527454719, 8718834560598843193, 7133813452251675747, 16781599914305742325, 8788103601345715167},
+ },
+ {
+ {17797423961269151165, 15688097913738577129, 7587009064470741374, 9652300434517855281, 10128814085960764645, 13054349291137249827},
+ {13667863971566990101, 10673432944181115990, 5827094206620143396, 6099167371319575207, 14812954584184361536, 9860618325640310042},
+ },
+ {
+ {589591245000469796, 8979433141915604381, 9021800314668643791, 3750105644114233003, 15670991254808140563, 9806671408565926028},
+ {2465691143012527725, 4510267491638521072, 7232653231694705753, 14855984652990117558, 12634578316903510172, 1228039410348310529},
+ },
+ {
+ {9068020286559576826, 12618713895631873814, 11722393205397692351, 1086070536693193852, 17324321200170762004, 611028187223175838},
+ {11651577700459617322, 11901409630642456359, 2085390425394188987, 490403321567849835, 14654293622476130790, 1298964209197946604},
+ },
+ {
+ {11322550018095596102, 3527572794553440421, 6339011792028948225, 5151642471735201045, 2959990528935484190, 9272589623358955444},
+ {1016320821529073770, 16888052482282045242, 17688112620024597894, 3719928857894020285, 10396159054756858238, 3233119903385274118},
+ },
+ {
+ {15749902098907230753, 17763545669244090771, 9755900373517498480, 4320948179558902844, 10566924725356292516, 6116336473010794202},
+ {15545737137436862310, 17240371706149670924, 11955643308605230982, 5932841340555536241, 15279500761826801442, 4179996491012197595},
+ },
+ {
+ {1552613943182547753, 10840747323421940067, 17328467336775183521, 6802521766845552195, 8626607143686909840, 540795511127208201},
+ {15256703109378673438, 5812944466862532241, 6124501523506740441, 513175402986879460, 17434632082742815254, 16069187481501759225},
+ },
+ {
+ {8244487053073823419, 3868641351473260462, 2153712666785000554, 6957836165836180397, 500618765615109373, 1238832243704171799},
+ {9603490361093858122, 246830756783484378, 2787086006655910133, 3907320948968255488, 14281263422468298103, 939723834433893649},
+ },
+ {
+ {6284765599251061063, 16534676857694838737, 3061690289969396130, 9626162384711348108, 1365881874432943624, 14727198041537453743},
+ {8889264123676562961, 9777083175236297205, 13215028356698003407, 6986347484245421817, 11678122634649892302, 2435055587926500790},
+ },
+ {
+ {10396608653122814276, 17008484250005639146, 6318409447149262851, 7802099541170520164, 5574615603329953919, 16385780123891961969},
+ {11134920568042011673, 12640687912091679512, 1146490453403655245, 3102249330058753539, 4095988337115400384, 17335158718433609549},
+ },
+ {
+ {12864499821393802475, 11788119049228790088, 977799416909835541, 15499421488379367188, 163390536177699522, 6804786504683418696},
+ {3095872826752058595, 7223570057465222827, 1387121623948247335, 15122489364022134171, 10885423363329551545, 6434450333953245952},
+ },
+ {
+ {6653769292986613967, 9168736013794357965, 2104630911670700434, 8244457909216763431, 13703714178493743166, 8218306853052367309},
+ {7189028979195471657, 5692750993768367394, 6844269123871604359, 17538650433906843042, 2579405218304322009, 2297663885759252861},
+ },
+ {
+ {12692054479125812992, 4320705081611888724, 14008964009638233826, 5334393314224233638, 2696459947028270454, 8328775412419649518},
+ {5889525878366957250, 11336536538831724301, 12024875252935715642, 3494686190602179160, 9253138142565030267, 3528435954014636439},
+ },
+ {
+ {12648684265556130294, 2074783917548245950, 8308495191421783004, 15790318216073206594, 387051048726917672, 10990928722025444053},
+ {15969688555016198304, 13762652978883154272, 12850841387412245400, 4825302074606748639, 2432583894467418376, 9326934178392716656},
+ },
+ },
+ {
+ {
+ {18031089708973353209, 2245200960251079511, 480259352579296652, 5296730028561240923, 13672097544022918942, 12074013283516969918},
+ {695570325720907777, 12417118176840300328, 11125216762475259777, 7694756262905475485, 6389856663806076935, 2023651462558938155},
+ },
+ {
+ {3716913865293623832, 9519939044782302522, 1190311626040433621, 4122386088785812252, 9998628051763276281, 6762269968937642429},
+ {9861199249890354064, 1243120329240608977, 12074892082479307233, 11448174216179350137, 16878357486848010894, 14263124486707469927},
+ },
+ {
+ {4032144724607143660, 17323710612966320098, 4113668299203613008, 17685219225377287708, 13802533048264874636, 2291580023602316722},
+ {5991918412653581128, 9413531453038680232, 12039010584036849554, 12779724028748234268, 9334132880061582927, 854018423284649885},
+ },
+ {
+ {4279036817315949205, 10908936013777057682, 5459140224800461056, 5336329855941119274, 13817174543987505002, 5803329503585048266},
+ {3098013773573646382, 794466548882446711, 10937734087173941890, 10649767122328016589, 672512432710857443, 4439506334562330966},
+ },
+ {
+ {6150189972540442038, 17499024099306121191, 973920649937779980, 10819201450198182582, 14435306386254208142, 15898445937302462823},
+ {17016479119212840445, 1987134867235671218, 3749994341137487979, 15521454315121012289, 12198185585065236535, 11161746347726704041},
+ },
+ {
+ {4108277248035082323, 4763145889189955538, 4083190563033592079, 13055163363599987027, 5746298306966204683, 895046093136418450},
+ {4049236010637090060, 13099192881343834296, 8562023198967118756, 13994928855290033576, 12876191625337022672, 15993047528545202523},
+ },
+ {
+ {9330745605186235732, 4222579288142143178, 15252637539981899624, 7567380934463081549, 12741264148440889833, 15828019440897091920},
+ {12723327006361657486, 4018078838231227180, 2560766106207278510, 13929068044020554063, 4759749660422617144, 1918410964088436476},
+ },
+ {
+ {1401229371513852474, 3725211280317699620, 15262967864528722679, 8998318469575212442, 14884830350906617811, 1500695608507126549},
+ {629292347007891015, 4795086203008477332, 14482270326941440934, 17180742059572498031, 14991047340345822048, 7320414524005582285},
+ },
+ {
+ {3761423041074020566, 9183947159053999516, 17327960252130032123, 17936746435648093112, 4957874135698491906, 18381419405600408140},
+ {2021552462092061162, 18293561973713757720, 807095291604235614, 10694367035762253443, 12210621028072312159, 14157551998029009312},
+ },
+ {
+ {8253770234288769934, 1748567047436239326, 15113806840556405352, 9849305728745472726, 9352106351313265444, 12676746928135649012},
+ {15910355313240486455, 18316120463051771221, 15406553262270712153, 14120304384949032181, 10235649054584170863, 9663403668634321464},
+ },
+ {
+ {17566890036357409279, 8153035355283482148, 13497394635071743235, 9324980713264281675, 1855752933438317130, 17353271655839803714},
+ {16210618120406652642, 1994646251130732955, 5626798068584404507, 5598549692563786678, 13865783001414878683, 14643387061407936303},
+ },
+ {
+ {6501357512501439891, 12176708815869008686, 11994352389570659317, 16086293893515238232, 6781571500932791296, 7749985836495590529},
+ {7267769773480576098, 10519122498445425561, 12426530300337493483, 16904464207183051533, 9655317422890141240, 9006359300493534956},
+ },
+ {
+ {2379896081555791674, 7529087855981939465, 17515505484370387645, 11992060160533269066, 9874426908749159085, 9612679919749306188},
+ {8727002423244992491, 11651910302226593854, 14317531382092040616, 7148921073820945054, 11509981879876620492, 241425876025527115},
+ },
+ {
+ {3957931629992459039, 14626193761179440029, 8968065435170182499, 18306857838363825356, 15388760608247994094, 7556220454574081940},
+ {2830354800601290284, 6007093254955226710, 5776847166084925815, 17411399255750975735, 12948871637122999099, 10619688187202777033},
+ },
+ {
+ {18019620613881262245, 8668018235864297559, 5360445581416845868, 541567173296101055, 17792105755090691444, 11386151880811930327},
+ {14234180784132089596, 11582267640018556498, 13014702559444465145, 3629111073015327967, 14739462952187775393, 10310644470035819364},
+ },
+ },
+ {
+ {
+ {17403833916326762122, 9740094979480827357, 14548670989847645635, 15707508983563938391, 17654070414772907819, 7410646283891180823},
+ {12088151802847404486, 13751887120986972745, 7133572866312957805, 6984144881486426141, 11478362218013196569, 397100930473218000},
+ },
+ {
+ {3572843614659695767, 13917566193783723224, 10106991008395751890, 14776064316406512486, 3973284575540205963, 1393548331195253411},
+ {17728418700244338613, 3569943135321046585, 15310934114440659327, 7534966422523126315, 6695235484066733707, 10654160843179249647},
+ },
+ {
+ {3916524477947621683, 11443354393618774115, 11759119305556384367, 5213174624675660124, 7949463549546931828, 12092151641941435863},
+ {62263562580411942, 12003780754220372116, 17593048334196024065, 1486928429974104945, 2382231722092886579, 2435498065565847060},
+ },
+ {
+ {12823154059116108213, 7988070353263431872, 5238951896699939370, 8132043978344570215, 9775088878106588256, 1118856390259997431},
+ {18065172735230934036, 16325872707906562424, 13000039721574339202, 4312637592102231069, 4902470028754124204, 4272784360331042739},
+ },
+ {
+ {6433126302697049134, 14546898608004289942, 5143458349243895500, 2287546739351655153, 15996486027454642710, 8035174736863426329},
+ {18381568106804023303, 503934132851985517, 5955511571426124170, 11588909349656865672, 2539783010592793715, 2517368635804605002},
+ },
+ {
+ {9688220347159635445, 3779168584047736134, 3386170765747188013, 10056695776861610791, 4230378171552673912, 13380959223891516403},
+ {6821607274732022337, 8369692960524296435, 17556137452703259897, 9913246146396765840, 18385056826905781741, 595789229862790596},
+ },
+ {
+ {3376198520685928255, 11401697177155390480, 3837907196036866447, 7783605697094735953, 6911185458281008352, 16661582556490022446},
+ {8898449499666876128, 12720029146151254358, 9180900453839682688, 16904557421585200609, 3231736335575648393, 13582984509377915948},
+ },
+ {
+ {6335991962752687896, 13799946527490837369, 12932853903574384992, 15301891419692833364, 7117580415677557079, 1638243357400401907},
+ {12691541233696549250, 13069535028987414972, 1561175855442316177, 15953947983175737946, 17433282081462277288, 17805588449174971002},
+ },
+ {
+ {14830787803333713689, 11568262452331360318, 15414418121287856547, 291893575140657361, 8537715289723658891, 895041535012667546},
+ {8735575073330490257, 7904711333758081192, 7705478766063086839, 14966128571780877610, 510498342305674002, 5375842717792934507},
+ },
+ {
+ {14017553865950425970, 3203585385790093320, 5960504993013900991, 14499792127339543400, 1042520134310564369, 9007730864681746336},
+ {8155955287049316865, 1168268403444813838, 8223462980864298646, 7046058388874344827, 3806799754540117714, 14310126916845550569},
+ },
+ {
+ {18101015319769141333, 10981175585883985115, 11076843211911188635, 1865376526114106685, 7691555534771124483, 12825758162850881889},
+ {12705759021631065468, 13425295730593551151, 2454066834990145158, 7398456861539482216, 17965437387228755239, 4549246519638273011},
+ },
+ {
+ {3564216727206350471, 11502367821276581491, 10888792934596534614, 3218935969765398418, 12592775041500777408, 11647588572015935744},
+ {2922640897322707689, 8613211193560218045, 2230968453901036138, 14376635144218060540, 16773708514752577950, 17553690068355938998},
+ },
+ {
+ {12898296153065645455, 16720692735856066113, 327172655540413761, 13227218237345565511, 8519416956666328535, 9006180558080542517},
+ {1264713729050345984, 9103896317460059276, 10413898570640954633, 3676401446977680326, 2935706012419574846, 9423939538748482172},
+ },
+ {
+ {2350781039643192469, 1693506343823609927, 11077706501162430667, 16417164483905858926, 13333764386693653370, 12097153330368571478},
+ {10940849199388401790, 10597622934633620124, 4717517384091986088, 2104650762579463668, 9840374844871408095, 3483317510992532499},
+ },
+ {
+ {4767861261398259198, 15300499894768898507, 8688456959068450491, 16604170046623753993, 38066602101631568, 8293371963850926780},
+ {17963446985501477796, 18444654321008564037, 11760177315245860872, 1435879756649854235, 12050871655191687758, 17344630493039043282},
+ },
+ },
+ {
+ {
+ {3096485884016777148, 12376984002139145052, 5480443619638874966, 10095208486451434692, 3492940022953765146, 15299835252568625902},
+ {6007593829256808804, 9692621867284256874, 13254638193058937432, 11707277530365540634, 16923342671634580125, 10732664863951753047},
+ },
+ {
+ {13872582197972895881, 17193014938795396512, 15971767134700759136, 131681455406226309, 15729877667343662624, 15250608391374424092},
+ {6602138623471383700, 7643740135412054049, 17664951607321499035, 14599694205978771523, 8340737952520919285, 10584728957567182276},
+ },
+ {
+ {4029925504600209836, 9230486924650579139, 12709630435517017856, 16752856913747515048, 16091176512252055807, 5654615991864890349},
+ {16213912518103095615, 17398694063688948608, 6470301373189861265, 12049558432878948403, 15731102283993311220, 1974808235304593120},
+ },
+ {
+ {4216082854210318654, 13783625863031842952, 14228148352427104722, 798223135284158372, 17371302655925227458, 3868945640945033607},
+ {14496156719528803963, 835017877332649412, 15738356549194558199, 11268806386543436865, 1609600006680937174, 15189642421218057250},
+ },
+ {
+ {2100911419510810891, 11709730967811792326, 11070968852465741080, 15167667469791505342, 6990446430502772064, 2979739266982579384},
+ {9729924531656485522, 14538459181363709770, 8953107760739874488, 15399265283602391297, 2640851218253403446, 397493120169971392},
+ },
+ {
+ {15302726863134446614, 13492823216891695902, 1527459733416593466, 3780183339959616960, 646805679119326182, 3572065085993834296},
+ {2086050242579936958, 16097128196674610398, 11110917184928300297, 15215051174675736281, 8638996858467536364, 17498051884481561986},
+ },
+ {
+ {7442054194398722761, 5899037616301380264, 3602141627092495462, 12455087214158437405, 3316146807961356474, 1301937084617765443},
+ {10089073892535620144, 14190065028184329721, 1808236899842351791, 4533062878686621914, 9993862131126637828, 2297009856133766352},
+ },
+ {
+ {16801618217516611581, 12059439895460656350, 8598727314831164546, 9586649536512297470, 10941296402181826520, 18191582771052788270},
+ {500755738669776861, 12757213489859603192, 5140871938904556861, 9617812594256568652, 14076395917678039824, 9994140370794675736},
+ },
+ {
+ {5850038450443732235, 6375066279442420119, 15818683872880571739, 723472722199022174, 9333015052679795537, 16719493839402031559},
+ {10024247267249865137, 5868800923297915890, 8041157937570474814, 7928686841256858707, 3370105934450681139, 17883122805284898817},
+ },
+ {
+ {5382144947237128088, 1043006451545558226, 1681467077957939654, 9517495454378300520, 7036177533948513894, 13161967355521737889},
+ {12219093509482945494, 7442193295382785217, 277712888488640722, 13947546222291113300, 12611485840092686485, 9710833655025677113},
+ },
+ {
+ {12502549552167234190, 8232125533311903390, 839854118279680892, 9485775732822833984, 17663390734822952749, 9394764657882708830},
+ {9000572432647298775, 6908017511163909222, 6513180860770299323, 1139498172110369417, 14568474154258358741, 5050171222169492187},
+ },
+ {
+ {3993332219625203427, 16865359864205374644, 18194512585980505134, 9613014347311695262, 16860790576951889934, 15221161996871384983},
+ {15637827171909035878, 12174768900796615919, 10654832940369855667, 2582700277462133737, 6776356767890276075, 15022166989559684534},
+ },
+ {
+ {10674226674222713381, 6640126227278302401, 5685415511245921812, 18111307322717025760, 17086035813631913574, 15847356748945327676},
+ {15174476977121907079, 17856987969624827110, 16167616169413150302, 1944283930257068430, 2453038170129818707, 1469204933482392249},
+ },
+ {
+ {18275102898719666599, 12983079761412852970, 8388106129782060896, 10209355387576245223, 14538158393256278017, 7560687135426084382},
+ {10553905131472339745, 11398173317153206213, 13617408055623208259, 11532011743299529667, 11538247191420015587, 5623160693645531170},
+ },
+ {
+ {8940662681574827513, 18164959107927468123, 18046552638532109884, 14155453048592004567, 5584625548584318353, 4723581324777545689},
+ {11184722677308218083, 3999406699031629777, 4988145712425592916, 12203913929517294737, 9784288473101397226, 128198380995960707},
+ },
+ },
+ {
+ {
+ {3863173275874957588, 7607368433346418538, 3446917342117543093, 3102805528911016504, 5796298790620582886, 4845029410873700374},
+ {3364570708230969314, 4211843997911050357, 955735840518088540, 4382952718350579495, 11151776336025623039, 3248067064518007812},
+ },
+ {
+ {10979154959051140455, 17057489977844809380, 4636877136932368853, 13173423356700842378, 6427295314745268682, 16166484199425823600},
+ {13947498680098198587, 9565058221523432140, 6724059640029046123, 2606510272316346451, 14817173045790080526, 17921662463284944192},
+ },
+ {
+ {8834547168849238776, 12415387183251468175, 1535769784386765604, 1355498814697642747, 11825072756645717040, 10331067826681906891},
+ {8890584623925299707, 550918406340532812, 7338316217644779781, 17543638401057055929, 4365113997542215090, 2411169740153090294},
+ },
+ {
+ {10112129279069371496, 11405549101446425766, 12461696963021780427, 1134289511017689360, 9417819820453596293, 7597522379563535727},
+ {2074398209324320962, 961715655667925180, 5962000230359126827, 8547804373478236252, 13432658671807283680, 9718385789307084154},
+ },
+ {
+ {16080785183875764467, 4017135721666879597, 8974124072605099690, 6665445735103434589, 14756638402029436542, 4331542523722303717},
+ {1702503223444440164, 14189603650236390274, 971810312712682183, 8049986845378060800, 7330150922533173899, 16296166314284869572},
+ },
+ {
+ {9526769721404560092, 11775998161420767448, 16356632323651128085, 8008696501724706815, 6341629823262057063, 8523528728189280635},
+ {18166074208498206728, 2229400479403638901, 5403004557542136690, 8487804674759640484, 3159160659687043477, 5700251865341103945},
+ },
+ {
+ {16822522037639219170, 3266418131057286997, 16472577174486956897, 15819423733871391528, 17594326634646650876, 4931927040440301796},
+ {999336285551238701, 3401843156036868997, 11496979962939320412, 15550337525570953734, 15845745790852081340, 3342897350949791243},
+ },
+ {
+ {5808162251213383712, 18156856773531164983, 1937517322940695286, 11625411969327328360, 9824825636580723903, 12658592751635829899},
+ {10492457110340784150, 15080267389153378243, 2728353556631119200, 14320292562386508753, 13490107143925758180, 6274827431709058227},
+ },
+ {
+ {14860895913867154489, 10080650032026459432, 12807414385133112117, 847324989654678215, 13613905648479118356, 12400016944146011293},
+ {8776013302541032016, 9925887754260000908, 10894174981766535805, 15297900474855663929, 7442689517452234839, 171834335047382038},
+ },
+ {
+ {9117588627465418641, 11168331531349603535, 6924358652074850811, 10618700262994212668, 4103627941911888613, 15694811739383802290},
+ {9844066545684783246, 18166608448724723735, 15930623463970128522, 16725459693529035690, 2783599048829322892, 441632469097465516},
+ },
+ {
+ {499123733301815599, 16274441320546608446, 8669188578438459973, 14214738178860124031, 12485272536092776327, 6746102886227516887},
+ {3968023548712012438, 9154853401879925537, 13974983377028591333, 10516947431089663290, 933442150807932151, 1500788281533481018},
+ },
+ {
+ {4586047615512747332, 2505846476262500922, 3826876063100299053, 15762019359435942125, 11799323381173767446, 3568265576213353380},
+ {12738065238480311575, 4804303397040398585, 6942032723664133680, 14301007503455957988, 184861059208060790, 2126913780868224063},
+ },
+ {
+ {1985910238562893230, 14542760065878644523, 16833470122497892859, 6947656477689970299, 16592512648364063018, 6357361689814456051},
+ {13200391207691971905, 2310116023035377028, 5508896705935951006, 10187259410896817897, 3059013399060322780, 5209073312162680293},
+ },
+ {
+ {2550642766496181772, 11278535109027313473, 3879516477095166631, 5651059749761693924, 6360530625026542850, 8678055154702639383},
+ {9895197927639380575, 10283962157020530930, 15939637088764924497, 8554801996782490495, 7371475446643610469, 3583344374097517208},
+ },
+ {
+ {17371412619585132655, 4718601666750293258, 15975408209741840969, 7108377055663708997, 17338928230506045982, 14627100588346057122},
+ {13528723931279394499, 12515391311856549312, 14781282577544396450, 7264023353215685261, 3375932768360087636, 13881393850792083407},
+ },
+ },
+ {
+ {
+ {1721448973177947457, 17542277325179447353, 17937558459976980552, 11205040461324106686, 51740205411633326, 17489989809778293662},
+ {15829483165674242202, 2621026715167601087, 12151982072969161717, 14118259735069082779, 16359059099859035748, 2645875010407964904},
+ },
+ {
+ {13044315376543176345, 3791987176391770853, 7257315148468660254, 7615181808332653921, 34885173241256032, 13076418563936506107},
+ {2024041865836120065, 343217496537691538, 6758070881563975561, 12527712552092021226, 9130227670558521871, 15869156873791479522},
+ },
+ {
+ {16624820076559004073, 3290961180687832086, 1505111348777534793, 15451932960818385994, 4885700112405367154, 502473235663078197},
+ {9023344755595914819, 1119495374695090045, 13125353132125365621, 4582328460786968359, 13153243053399805058, 7243196921351431637},
+ },
+ {
+ {16660609005075089706, 11456541224374281812, 13813535856291553219, 14877518040804369021, 15861475260704681751, 3089740386917625556},
+ {5892458763715639755, 15267181778302530854, 3988849050539397794, 10518710330883699493, 17431760984824214042, 12598607198625858948},
+ },
+ {
+ {7886366245642682083, 10962884476823348220, 6709711326774074595, 4572918043062220701, 12755952895112236674, 4061495514143300363},
+ {7306556391215449886, 9599795224615892204, 459890930081394149, 13715832153540946078, 14440301411429777271, 16495857007705672763},
+ },
+ {
+ {265852797146271341, 11386341344328950606, 2823304281998980676, 3128543525090347743, 9711211560804927151, 11699179803002767366},
+ {913811348561539832, 4079387039854771378, 5786553996132212662, 4783085098376699354, 11850032584026193104, 2507234732008509693},
+ },
+ {
+ {1681054977850769931, 14671156085086914970, 16232677545813708023, 10037013912612964578, 12655886518994362601, 17930493853619313277},
+ {4261930640340402336, 16291971428751843912, 14124714297167598319, 7116061430830749554, 5140259185669271312, 9521500824814628533},
+ },
+ {
+ {2133204265371102168, 7738424860559779443, 9132973083464203079, 3624293757540177213, 16855385106148764582, 2981904660819867362},
+ {2221031423918751149, 12840489442672309770, 12668245131095936710, 2439831201753391314, 19103421409345804, 5682831538477921588},
+ },
+ {
+ {2740210992007145962, 10621702461750253547, 10508827636006320761, 8248704461968714321, 6168928611394207164, 14048196011297482761},
+ {11562029679319191839, 10199382699007278950, 3360092486992146320, 1463128897560010163, 6976632107921480266, 2129873557666907110},
+ },
+ {
+ {1100325675403567262, 673625074442631877, 8514591637299607269, 2345202943752109744, 7167639158345336267, 17342690971659777406},
+ {4862595967217912581, 156590070960043410, 1115171684358334313, 6101500075575877531, 4062560666972498140, 5927929705820198011},
+ },
+ {
+ {364176692174332883, 7738711573998977497, 3727117924922648734, 17488404453005608305, 8507877372628529188, 7821485339424482447},
+ {3407079555113142839, 2821844621824294453, 7117735201903766861, 2746395978318799182, 16096929564195692367, 443983083263483317},
+ },
+ {
+ {9618959095759532752, 5009109919584887941, 13273663751866897132, 10020142088235002186, 8463814795688208512, 5854890718933975039},
+ {549447413377699602, 13361664826453471360, 4381643613995465702, 11048937580044016933, 356464625333949552, 10426821157046820998},
+ },
+ {
+ {18186037674911124153, 9266904366881705693, 1746212978216662911, 16297025199546965112, 12372897714118201342, 8586503557066603618},
+ {10659723169179230020, 8331742669536916843, 17458121139259655844, 3918785045029490546, 10947551116738566182, 9999088208920405141},
+ },
+ {
+ {8354650412119672244, 17175305374472306433, 2829972105586097490, 10426050169628830453, 17159563166759848715, 58591768570097984},
+ {18406299714417692335, 12546352398212878156, 2495694500244923448, 12073608360379166377, 6610894508561660367, 11682997196017168294},
+ },
+ {
+ {3210207744299112648, 13875413666800710915, 11640078075030694173, 10454397255148356013, 17880871075693128223, 7359039635726487892},
+ {4853115095464004720, 7976333879782734047, 7694722857965415540, 6036769361724001263, 14076311434771587877, 7283323370969754879},
+ },
+ },
+ {
+ {
+ {2614353155557682937, 14058591604861440576, 8309144349698829255, 10106897547146685772, 183429285024450792, 7660674933291714098},
+ {17722010084076500734, 2099112471522046187, 3527281458003781480, 14209273751181102104, 17230024122478409574, 10483334506136982748},
+ },
+ {
+ {6047132184189720819, 4426654828692160218, 4329633098905519796, 14236543825083707690, 14077477151979085718, 1291177900283865316},
+ {12977722282683448473, 17497194838527230928, 5763750732808676924, 9844068727688186332, 650882686296875205, 16353023628194028517},
+ },
+ {
+ {3571331741751811067, 18233407145253967397, 2182689380490249825, 9862956875499357585, 4101378667203447553, 2434938326871008100},
+ {4975383754309760613, 3934729624717234976, 18322513804399478400, 4995364561535811634, 4754224073033422626, 18130942841051642409},
+ },
+ {
+ {13897652105647445247, 15549865991927044469, 17587166399757083359, 645157568514571702, 756205085560500677, 14733833165754071077},
+ {913239358738001609, 2071269782500914614, 17073597609159000389, 944355324501816969, 4767516640133819639, 7180502768526971577},
+ },
+ {
+ {11871454882320947778, 4076335602405372571, 4747500308730376335, 18397169244778911221, 7987453080975894942, 6950688158372586713},
+ {17368720469534992117, 11740301568583332137, 15177273953729130117, 18421847781159349697, 505562344182069757, 3704550989049269178},
+ },
+ {
+ {11672240582589566888, 1108540908548515402, 3338717371374145046, 10460877846984614452, 9211584971186313940, 11952076760337213457},
+ {7672641505116403277, 13764930264603220483, 3744578737514393421, 15724456999421097869, 13506821640767565708, 13538891648668593334},
+ },
+ {
+ {1050281222231361612, 8994982763868301024, 12355411974171252835, 11306931529620801092, 5865750322856587361, 15613850005955819172},
+ {14398943333497272142, 15112832726445460775, 9983052759258731406, 16935356055040242837, 14203640081769534446, 9130644307291338833},
+ },
+ {
+ {4953908352693126534, 5062976277743240918, 16505639315575105155, 14534500310766348303, 17944736498552318640, 4792459954642443738},
+ {18252334781095086320, 13063263503472794652, 13198172387261578292, 1616650596611064703, 15181924039569157445, 5150232158682339336},
+ },
+ {
+ {5624679813550782251, 2451770210293674414, 13240746159856752674, 903265396767255440, 11078214582152861563, 7261508578820008638},
+ {9752563467317727618, 7386516386070528758, 14793037822648488271, 5090452706673272192, 15308894744012067286, 8130767753744452857},
+ },
+ {
+ {6918549675326654825, 8356548187098615599, 18110842889094676823, 3963339850475613373, 6987554242330845710, 2982471659740542895},
+ {12669841747723635164, 12626688679931160789, 9018528450701894905, 9726597985776847011, 11318736602457760788, 14025138192598645150},
+ },
+ {
+ {17505324765173267460, 7096407019104498095, 15924951709972151945, 16257204011042132345, 4971672139719859625, 2321621670487320814},
+ {17594404375116307560, 4647612677109579503, 3901300263702871151, 16326292626815115333, 6831256398102532757, 627750677080250535},
+ },
+ {
+ {18076088553817290385, 17349449293663683793, 11642446393364288036, 10122513438385611555, 16537537641493131433, 14156371894700831240},
+ {10743408581678488725, 8483948758453680699, 12243160245743380209, 1500764398487579885, 13614004849488464930, 5994785415308094372},
+ },
+ {
+ {6122565183919808230, 1008209506550806598, 15249625726527344206, 5096898832984665512, 10958457055229538950, 14428643543814058899},
+ {17024506398778167044, 1989641393139458938, 3538068469415906392, 7351031458262333307, 18232141335489091166, 101299571031811981},
+ },
+ {
+ {12540548462618170712, 208754347981855850, 5755714353878203428, 13810850252670464562, 2144696743162115760, 15602160948740024567},
+ {18186995987441524090, 17284490982574717647, 6768470157308652643, 9315159601737265015, 15486248506383436092, 4135862452814063276},
+ },
+ {
+ {7062558030802288283, 4151046583133123194, 17296845417413488570, 2939642080257680057, 10681059010204949305, 5154176607283576645},
+ {4961584994822815984, 6524971500046141586, 9968235534650293072, 14236553626523573525, 11581675440714217403, 10779043421926068031},
+ },
+ },
+ {
+ {
+ {5704148093399535513, 1982201820910068915, 2015300701102890863, 4938678016782651685, 4225735698935095441, 380627551509963002},
+ {12290756922107972790, 14689334170111259003, 17081591129898655804, 12725711463684644427, 14355859294197921899, 4833292303349912353},
+ },
+ {
+ {1199430367393420777, 7844876978855113240, 8362429417006246806, 18405301817567609597, 2010437614964189103, 15790163337826190044},
+ {13172944002680008407, 7545247538771827356, 8799495964430321755, 1636508240176095806, 3688223623562214043, 5001180399862075810},
+ },
+ {
+ {9236682024243624347, 1097419180975135931, 16930071776861614326, 9425037863420681425, 1897777030645415141, 14923573308348753100},
+ {9048832771935393542, 16495423457575818894, 14651297528469675829, 14681410364817210043, 6270262408162655998, 3202527036040014714},
+ },
+ {
+ {12148128553462546338, 14272886082678845161, 1998189262058231244, 3290638835546848685, 10974691513020291898, 11300741189288469923},
+ {12102666221723151731, 15168969616238080084, 7571411875816772674, 6708095321534436923, 13842254475238776074, 11645310689961969980},
+ },
+ {
+ {15206355933923800488, 1526822957768928677, 18444342976893277734, 18290836660807940588, 14597401039689350006, 2191517853826363150},
+ {6631276040465224272, 9608830307927194622, 13173894809175192722, 3447459865798044953, 7473450899969070648, 17538173612935114726},
+ },
+ {
+ {2545753328201935179, 1541411216554356934, 12430899315303981226, 16873953755863768968, 16122659417628515478, 11719197339014743998},
+ {15840812009819945279, 5620933673682798071, 11726809338101868835, 10020394952939578101, 6417033277605415646, 1193962146484927818},
+ },
+ {
+ {12699385012539356648, 1074729856826138284, 11360834127412011973, 11614291784573969284, 4629063743007127923, 6826004983002907114},
+ {5533842397602974776, 5380622214800401295, 8077909061924689270, 9153034190848608609, 6198536077171060590, 10840145921066532009},
+ },
+ {
+ {16250603474235152690, 753654051241256788, 2265085864511952533, 7827038858733068367, 4327850715387046187, 11399515242612634708},
+ {10497059724291403883, 4688252136426618327, 18024770225850104963, 15437873549837467773, 8363336228498661948, 7727493073571533637},
+ },
+ {
+ {12358979317647022406, 2405166324543341567, 1131516171615394739, 5450907798304034460, 6666818116269349649, 5855256214551082397},
+ {10663129043987590669, 4887396919880469663, 2298289197437656441, 5676069638451158212, 11906248580355770142, 9562940725527931031},
+ },
+ {
+ {14844739915543480162, 13246961953132764518, 15443922107017863339, 17591911221252177558, 14809121152752475646, 14938006221572424065},
+ {18293125953571441775, 3365272595752907779, 17552372285854513998, 17235054008682833997, 8690722712832570147, 13050282119073535772},
+ },
+ {
+ {15776540266747032014, 14852977882697304855, 12442551787887075800, 16222199462276877546, 1348770173344153190, 18330160582494566789},
+ {4685257266073614758, 17629760902250811736, 1099686978395867610, 5720148750089389598, 8752939799218942652, 12653117413452417188},
+ },
+ {
+ {1928524914772854786, 8132034417591551586, 7951059682269625334, 2812108933072612507, 1596610641421367938, 3496321797212562056},
+ {9864359450003079695, 13827098275898780935, 7851275574239236550, 148489084772098078, 14414610826237061088, 6221005392878728474},
+ },
+ {
+ {10231841021413400882, 6416526412762119350, 428961125681723016, 5443671154306564465, 6515481304725718135, 7472109697629360236},
+ {4053824519380499109, 9856627631912166862, 8808287978132340097, 3494734447997642012, 13122490218403354627, 1586718502175528539},
+ },
+ {
+ {6260407175309061893, 14850337727743664854, 15585408845772003227, 7077264422349275731, 8392418541009408758, 443622451095627013},
+ {11824794477049100598, 12322457178558060770, 7174368023614892223, 18169994008863893305, 1353822949072228703, 10638226122523854578},
+ },
+ {
+ {4765938320248439052, 8363686885434148155, 11304264598901869535, 14452099896297485497, 14813989444275511579, 11997113422384802221},
+ {6448271325447843219, 636006309719920128, 9686816723717740028, 9631232081121088634, 8102244673875044160, 3189426959171768223},
+ },
+ },
+ {
+ {
+ {2463818565041698203, 8022820688029070207, 4888356879458026368, 11629790905165524278, 16555714206595898330, 13627886481857856688},
+ {16335710071193906987, 6321854959216334024, 13113326664056241925, 11554351464078489040, 794805091959363175, 12545188758454015719},
+ },
+ {
+ {156113733862257116, 12812294601068672576, 3563267346091688314, 3001452181277921772, 15607483360571672694, 17299258115284201469},
+ {981410215374975479, 10842895849914354733, 4019626280262303535, 3964525883133678208, 11449335357635141837, 7447803780571143247},
+ },
+ {
+ {3449274165036362414, 4918853138124055081, 1547983020534099669, 8313761980678241388, 12236549001847065606, 8919544181940646346},
+ {7959615711717924349, 1998441664630865730, 15662251542753222396, 878616613737147225, 10921558209848383451, 14643587960617282503},
+ },
+ {
+ {10030195466513813736, 7264007409425871486, 13572379319575545436, 5989173427119562900, 9714898089014614002, 16719526588489259967},
+ {14134732214629887880, 12965589590960717029, 12056814709100630613, 13827802528787563910, 2927559054475015091, 12475732844535894680},
+ },
+ {
+ {14808325747134274433, 8057826914079617564, 5525954727355605916, 5290214223388727378, 1085748056393626543, 12252253028550111114},
+ {5922977969674250041, 2448526450681685329, 2926522479362225384, 13034339434060413522, 14285788618705740240, 14224616444852968120},
+ },
+ {
+ {14468289541178842512, 12201944999920129159, 12698876919717580942, 6936204399773360929, 8336457280891506998, 14054191262205054108},
+ {7985103068695070111, 11634744794544986495, 3492551865016082791, 12866518520735982455, 12992402881058061256, 5203085761453373334},
+ },
+ {
+ {2744232347627720169, 13383652591074198984, 11038998560267305871, 13459807200627641401, 4723235801697844775, 6052210961441690931},
+ {8015232138170246714, 12079252961549472414, 13192819517464270060, 14584389580251977550, 17833236661373150481, 3761490117360962633},
+ },
+ {
+ {10639242284018919836, 15769134811853365977, 2764713995390457156, 2939983068560561484, 7744415034623844491, 9862924824634167441},
+ {5812124348561302205, 16914325820321413839, 4446235265737737774, 5136338484784530512, 467458589733891477, 2630304324972701607},
+ },
+ {
+ {6832719395023449163, 2033508612951663629, 3511592613860178255, 981472589675863291, 12626082291731102761, 966591436305020179},
+ {13733382109710953302, 1434291421752039220, 17971214388752092375, 7561304859414785821, 17294534194238094519, 6834714320288858574},
+ },
+ {
+ {2420226340788279821, 12053022832331502898, 15086319486305540754, 14384436305396163060, 7162949585624069622, 2339283057144054658},
+ {16555809395586932014, 16575909670975005732, 12006449181862665382, 10896691971361895576, 3873458976101713782, 4179351799128456450},
+ },
+ {
+ {4772589731323745937, 17591537228186096278, 7733169684400774683, 7943142157971243776, 2600580496982037708, 12240688438179106242},
+ {1682995002150080423, 8105112813163255258, 14679869015350748762, 10615354182892733709, 1101044368915518409, 5335546289827620815},
+ },
+ {
+ {2820596099556415173, 2594358308517525622, 3833328115443141899, 1838617013547370473, 10703662474010707679, 6132526521387027976},
+ {2504146752328209083, 10365161708998346132, 18378027908391206958, 5944023165464852345, 17106626712229962048, 8325422024401372832},
+ },
+ {
+ {11789842430665850017, 6421202279499314143, 11573596254910462066, 4537895385523862063, 4377931158374724860, 12552031527611086863},
+ {15504318552571625652, 3707368681645487345, 15001785752614913702, 11705782900778611709, 11949053603484681481, 18195922704834165941},
+ },
+ {
+ {15421742936087622130, 10159987354101918308, 5370406297439414101, 18048469588184356347, 15077974257262174351, 4171587624627671421},
+ {14084050992809485269, 6539059918771085671, 1374789379818515594, 3838078018577862594, 17679614135822761449, 15474878493731691411},
+ },
+ {
+ {12693451959622797980, 13290565128275588854, 7361758586005248557, 16075093967835316398, 7087112768596951545, 11543822053453504948},
+ {5902482308820286139, 7353185101342606440, 4571190498315407690, 7730145317036018296, 3643250411451134315, 10481041494035321174},
+ },
+ },
+ {
+ {
+ {11379922315523310195, 6620262071143097557, 10733110307157784360, 2455420994718286142, 4941160012966559203, 12036389373766931776},
+ {2004451758092625142, 4014199760272071819, 15292911034143935666, 17687179513796035433, 1569516718335592017, 12444236748783362218},
+ },
+ {
+ {1200397030012372876, 6457491138111915023, 11531993623745349026, 17899861472742612738, 14124733664835562044, 10645792077218180283},
+ {13099261645024141037, 10440696952297433984, 1918236772154249849, 9506923430535157418, 17499444799293611002, 1509670397443280998},
+ },
+ {
+ {4465757364835631722, 10965936787556583155, 14540946401148103030, 4584421538084028348, 13594362137297692686, 8844279558284617491},
+ {5111359204171112465, 12790060720198863411, 4014742787506192452, 6614930013636115085, 11730197034873324635, 8776100629808369100},
+ },
+ {
+ {3790258798970833100, 15996801276739271696, 3464398440425134039, 15326814870706418920, 14448492169636125498, 3231159483392005876},
+ {3705423779579747953, 11372348237300277088, 8069222225331107027, 2700528497189769719, 13555552327194442702, 410730686168183967},
+ },
+ {
+ {6826832086550914049, 17351671830508265713, 10661972945889099645, 12894337943034505815, 9813078142757356629, 782908000516993322},
+ {12769245099971286736, 4882620828121265763, 9488137564983431475, 12539028776281802034, 14846786398874564444, 9073776363026222135},
+ },
+ {
+ {11362886301924370650, 6443575479653887522, 351000858570459150, 915347620832419895, 12517886863027987115, 12886465789602176705},
+ {13102667374276139057, 6893636638757694468, 4158135635197259073, 17014006099419646155, 2886247550772729453, 14342905125501493077},
+ },
+ {
+ {3750785743865695174, 16184496891679274640, 4508484768462328620, 12569830003082072446, 4338678566828661049, 15769546354414324906},
+ {3809488443136531987, 3433818606509958865, 2864343169319087118, 3035827594190654155, 4283767959137064887, 1597329211670760111},
+ },
+ {
+ {6735976130349257678, 16303412525749538849, 16400428130291037330, 3771855351047356253, 8461011934077951901, 9862709568546362072},
+ {6948691434839126085, 15094238067058818238, 11970945255041716883, 8357516122660935053, 11312726144884161679, 13888868066934144152},
+ },
+ {
+ {8552971979382238094, 14893844762756755755, 15247853217772454969, 7990879378400788049, 1337495408598927433, 4927592820371154426},
+ {11318355400818989979, 14034508604918932131, 850449205422148972, 8707631597140933770, 9005290700503315458, 11206135773816655778},
+ },
+ {
+ {11717560420962665146, 16036488489927426530, 1073385780093662141, 5605091585524991500, 11567805488139392367, 6960929895827554242},
+ {3185029102977538829, 2880896879639691851, 3758583862703327606, 2607528607094689740, 6140415866307855875, 12833322601936456641},
+ },
+ {
+ {2487173712779352607, 4163293746622453413, 15225064953453124837, 4745691426593935280, 15916414889134198240, 1934042257062059048},
+ {6574682739913942887, 13440408571236322143, 18076013925783648472, 6693474681185919321, 6987178681680099301, 8824321410010451056},
+ },
+ {
+ {663297042995494661, 14801753841371941556, 8727539546491979133, 232708169718659428, 1190547424093432076, 10001731533557757135},
+ {10564965587834524294, 10882077754824824235, 18044231443793420173, 16047844267187742404, 15237359807179541598, 12335098732141186268},
+ },
+ {
+ {4522044229514984187, 12692311112090809521, 5174544620399081630, 15624956610993361290, 17499804740829372070, 14159780115181988400},
+ {6980473429664507297, 16919669078262269987, 2419328464610134620, 7279187746594254030, 12270975978407595756, 12652404087215952443},
+ },
+ {
+ {3097250801852684058, 7529383389734329429, 8943150468940937789, 8684872219957364714, 1510282680805138697, 1736664582387906156},
+ {8559488977052206069, 5218002957160199868, 16129363866527754916, 3419381639187625321, 7406388656339306496, 733912006552345760},
+ },
+ {
+ {5051832488018112348, 2845773093799720531, 4269756063941307164, 11932175332287301151, 15864531947553285757, 6880993309378786007},
+ {17221326993540037993, 7339003944245759506, 1709954257215636952, 3058564762936670215, 1381289108584710274, 10818101921467782182},
+ },
+ },
+ {
+ {
+ {11909603028098105071, 1433304974993906210, 8596793362628962403, 17840341647275356595, 17335910880809706217, 14496938254816120063},
+ {9718444168237729680, 97136308719864699, 385208539784578137, 3982687391919868715, 16704940770194925306, 549720452261507487},
+ },
+ {
+ {2694843761758977903, 18124804948268586954, 3810124062407334761, 815390255307793990, 14032033031902943311, 4699208123402406172},
+ {12100023268807134280, 12092656330344745210, 13856900984407365162, 10791000625265461807, 10537408988523295901, 1213148431505044944},
+ },
+ {
+ {5564129609030186650, 661399315027471445, 6227812982018710887, 12211259814675657270, 12640363533246661095, 4250662369482871640},
+ {13995602364293455479, 12559572490607005689, 4555992709769317618, 10656755099067169486, 5466266601354190684, 18303706146826818496},
+ },
+ {
+ {15368142834518355591, 387732588739217687, 17906815839192787578, 2458368923948318521, 1213186515140052771, 18119735955342268000},
+ {1464255699774805313, 15706302797823747047, 11515240128938376809, 3345743489851301863, 4182988989553146063, 5822101833208111449},
+ },
+ {
+ {16987042022725647034, 319232815210787283, 4458381292742179195, 17988503646508966180, 11158143875082860346, 11504863432259964894},
+ {1973834314893704871, 17030914264131630067, 4911299812763134293, 5430690367398180217, 2557726880455581905, 12434521041073812213},
+ },
+ {
+ {545462916220339990, 3584698686781184519, 5328421879230100723, 366775970831948805, 4024338021516994343, 1533516434617926006},
+ {15759296396039088968, 1165424695035321437, 4856582709870659258, 12896943835426779442, 14754955776815298193, 410556923033083573},
+ },
+ {
+ {4186087526910663586, 6165136419336713660, 12136818299454961122, 3405693470185967536, 3648773103438697505, 6515981208652058927},
+ {3752988438485155801, 16815658448321902855, 2796662867929732032, 5824574038203643621, 9332750850995495618, 14417469253846871647},
+ },
+ {
+ {5370314366938532279, 9877969370138171231, 13966511470431609240, 15877758322148217369, 773982613756465354, 2790333076733361805},
+ {15260338585394597865, 6297024182872652719, 12048909513493364581, 12444492358042311467, 4022686688297847278, 17410241858326791474},
+ },
+ {
+ {3482292231700676468, 8908690623157180028, 16288460904525269506, 5959395600638297217, 360588989624002344, 4420646335976102398},
+ {15326491091968545497, 9102573345895719113, 11981331366781021439, 11438298421566869030, 11986315544156148772, 9586987921414184090},
+ },
+ {
+ {12658775917959337138, 7321726641436322889, 8904085691599899669, 6181173455344381785, 16990799257112339793, 6589370949402051563},
+ {152076730697639797, 6292489939246750855, 2631558763335345129, 2400788177969090289, 3082489011322585694, 5460755211051411481},
+ },
+ {
+ {16026468164120587616, 3890624441511373656, 13608676030619425331, 10074131329717815957, 10336173319596529425, 15010101088827254127},
+ {16066548767291218138, 346765727064293714, 3034008750782532770, 10634970483280908770, 11696186401772501910, 992070167768548909},
+ },
+ {
+ {16700357690267037996, 2280486417700678036, 12292705505251502979, 17433319339816222360, 3180311752818744080, 12556842763675232270},
+ {7431081179990995973, 11626745676061745617, 925792030195302151, 7573296302591880847, 7111534405851948348, 7418370979279348359},
+ },
+ {
+ {16126038235581718523, 4590472232521394945, 15667737325175661395, 3234185470951996453, 6433453928669282028, 15899702540931522631},
+ {4961512606010997533, 7075023696164954837, 1926349877304076748, 15847449820251106944, 12103289522218620655, 11755646081940303532},
+ },
+ {
+ {2815793807577222685, 3974873120030374430, 14070231706868366483, 14914212937861260775, 11217571411566683403, 13488284407258074738},
+ {2447044301855977709, 1991486381221843561, 10306272153518153979, 13012982641746076783, 7500759912363127296, 9368569895638129462},
+ },
+ {
+ {16633917127904484128, 766128895880122918, 12296015683476921956, 12780904198992336027, 1747119835730230715, 11648694124739687510},
+ {6931300612490207931, 11673373686239852450, 18176687859595005370, 16590940298368519075, 10350216104129322491, 4313019598947936772},
+ },
+ },
+ {
+ {
+ {18436559208253217538, 10052692439679361295, 13914661242043605922, 5303216763167780904, 10320619132458662262, 764916138455538204},
+ {9742933872987685981, 10626539639975944361, 8938199719602528282, 3118400879731019025, 17486614403295685962, 8194019942137487488},
+ },
+ {
+ {16848715567479381646, 3965484758491433728, 17553116401134175918, 266130778949555493, 15612913147808127901, 2452271039599659592},
+ {12112647027603191858, 9836632132933298138, 7150220004740389636, 6080952109208447401, 12794151692277391601, 11339774216918951773},
+ },
+ {
+ {15370271492241639789, 13865842581349159076, 14645993961035890521, 8096824553138062253, 17815019169532343171, 12197261930135611113},
+ {13843017114364404011, 5010421400581829489, 17814230270064460774, 687861654752340118, 17009006702144007774, 10314843449915140883},
+ },
+ {
+ {2744318910620647716, 5603184151316605771, 11257624090959454283, 13185449267405233716, 13751271304022947910, 357227629545275976},
+ {6629711137100856610, 2708216448052728946, 13226058796854087226, 1788986271084080906, 9168817775042008469, 11922427675226424552},
+ },
+ {
+ {14454843566511544351, 12858454059009483825, 6952579439068010126, 7733931976949613017, 2531905974818570751, 2340234299628817285},
+ {4064406969820346920, 11776091497743820272, 8329625521872996607, 17793038299121088064, 8268289814329664881, 6179727598715947755},
+ },
+ {
+ {13248035145811273019, 7752115389537037710, 3783507151237115160, 7998022990884122769, 16933952266389620556, 9525578126304597588},
+ {17660710021706978693, 7887275263336665238, 1823257268190340929, 16929028893372651088, 5606633925842000055, 17725594627635071001},
+ },
+ {
+ {10717942541841401668, 5062492223707666521, 2874099965260778327, 2111658619166071126, 11668640869427564697, 129797271043653095},
+ {9692221446048485432, 1712242857382255473, 4838248139231811400, 4970058966083233108, 16360347161442205136, 3339445137046433520},
+ },
+ {
+ {11766141551615199913, 8685320933099257575, 12025130600585049936, 11062435310323182587, 10065203967214956664, 17179026247686360724},
+ {973705476571001605, 12336450041607754348, 874536885921370264, 3620964755713794319, 3600247557571996978, 3539695373337548386},
+ },
+ {
+ {6671466056512719629, 16184392602500878537, 13956944166874842510, 3115630032774258951, 1843095648852176408, 8229461234479287588},
+ {9459156799383170558, 575562900712226104, 1461784124210182226, 9743344326188849649, 8264467109834156287, 14855166366987863706},
+ },
+ {
+ {14443662408692449290, 7664862287740722890, 17649339370312940977, 2156776012545551339, 15768456150480100232, 14346672920916515716},
+ {8113778989714113681, 15635297215600657635, 3026622243462570848, 9983527114455639519, 495493109210132335, 1825135321586189570},
+ },
+ {
+ {3948205964039691358, 9147407127214526584, 7561468478346924639, 10897363606469824992, 703934561704031911, 11244219452628483166},
+ {9517458047229537628, 17195327556556691064, 15691063270835772767, 9438705527839014294, 9695368154409603795, 3649704513354366568},
+ },
+ {
+ {8298214822826346584, 16160788589831391317, 17819994725843440833, 1024306577659159521, 1852010738280183503, 16583513376689890736},
+ {3373755007779392878, 15683692594403040997, 13166508057783939533, 11523709082285599828, 5437988652322971796, 18109256413139496795},
+ },
+ {
+ {12923777389997376805, 9977718769355025596, 13018161749708349740, 14360291996204235159, 9575337711644144758, 9974219793575670651},
+ {10424562739975667006, 3563632038522075692, 3672552713411869989, 13884443527418224724, 6155373509257036382, 3207888628018922232},
+ },
+ {
+ {11930174348010923271, 1348949055337526798, 726415247102229584, 5055400198081198789, 11015209320490555612, 9833582750989675305},
+ {9700597556714543589, 2992217892752165914, 13783701793319444227, 11374474240057387342, 10199414602968931098, 17127353744132587534},
+ },
+ {
+ {9563065141641954290, 14665066342222635705, 9884992491626869089, 5974715562776845322, 573036282426832215, 11499375779477883827},
+ {3206285674430939161, 12354004793799927731, 5478655966737394286, 7263281183196607046, 8288729282303345591, 18029234498520921275},
+ },
+ },
+ {
+ {
+ {2992157424964359003, 10438615318402196118, 255815347996375468, 4465802505310361450, 1438013292054608859, 2462444921683526793},
+ {6885574398590377060, 1301114469257389079, 2687344453450416312, 14090513069242834662, 17764663004285116999, 8889109452874431564},
+ },
+ {
+ {3947928161712886286, 6283937438203374232, 1924037281168554481, 16154924465225066172, 1172742291383405274, 4266561696255722724},
+ {7000612604942850536, 7659188878730526073, 17637356804126820843, 16975720578569227612, 4896458553166174167, 2686308470754372836},
+ },
+ {
+ {9432182594949608034, 7182179915820505304, 7710800442508848674, 13288492478214648407, 12461818323948657464, 5572387091938177662},
+ {277315655080978560, 8486149812061624297, 17273407137514060442, 15942854874670749371, 11686164309797544370, 5909985884404360345},
+ },
+ {
+ {16367186110059925561, 346226761199691539, 11243569651429838414, 15633495530019237469, 16343973985917329298, 10134611081598971563},
+ {15093301170509003037, 1008194724710082237, 3218608412640277159, 7159496834485052730, 10712235151472906025, 4198145441405858657},
+ },
+ {
+ {5131609251652718207, 86776758092331267, 11360734888319180911, 3469913385423048534, 18100684383471212679, 325475210458359248},
+ {3689757001346201628, 1730954327037278569, 3788507424874318707, 10512008196941777061, 11932764492105480931, 8036637367681551485},
+ },
+ {
+ {16591185232690243721, 6455242289394723746, 6695217017042848759, 4941824958829892109, 10112600357660465319, 18308711553066796539},
+ {8438656634392593423, 4958573399768303703, 11140056576272524422, 1895853887747460679, 7283324369187624339, 16195252249773926894},
+ },
+ {
+ {823375075601828122, 17327350242456001950, 1349893857168950396, 8412958507213802615, 948019923217166776, 7456308766971274642},
+ {17370437399496312157, 8520389823586348238, 15411367408205754799, 13174837180834440525, 9274060964565734577, 14571182742247634669},
+ },
+ {
+ {1082395577808637743, 8147865335545732038, 1404461702912200930, 4993236329065838796, 17484910947541357459, 6852232223602019945},
+ {8965634425630211893, 4255349305144782529, 5448760775922504263, 708413774782466570, 11280134104493101923, 6100170211777061175},
+ },
+ {
+ {625515264652475732, 3039989026588849470, 417945613321369841, 17093374707175198551, 13237189962567875668, 2311750606403861433},
+ {8005856008273673581, 6479389764331986131, 14555228340786648758, 7247893743936400741, 1374541774474051599, 11227441366009495338},
+ },
+ {
+ {4181002734489236543, 470999966911862785, 15476804201865281857, 9087684620614573993, 18304567027803637491, 15731747090499402793},
+ {2010012731370719240, 2998664217104214076, 1961508652389190300, 6950362691421142338, 15681741907839112240, 17447712985298987779},
+ },
+ {
+ {11768357416958608825, 7645918167071842001, 16228882427244007654, 1745696721312212486, 11721695430734972091, 7273899982161219731},
+ {8266026594340198219, 15717218685429720821, 14112476118090358572, 17888013578946462203, 13290175546249368751, 17734414485500127553},
+ },
+ {
+ {5326868799317243470, 16458483939729073751, 14887970960607081992, 5039987544340497966, 14821797247198942090, 3950630707728288537},
+ {17597412384190391301, 5520789045820740828, 8226360244407437775, 16657311355689665307, 5224094771449505848, 16756747441122548551},
+ },
+ {
+ {598869525170933512, 6677154916771020677, 12401580674393252457, 9920987208485925499, 13800670572914405529, 9707555292166940171},
+ {3223483868032463832, 3631710847850758369, 11358667894316546298, 3754511562356210854, 1701568866431315786, 5919933616663414779},
+ },
+ {
+ {11490856134015076232, 5025125213251421660, 17087480468251353943, 3675626333374651640, 15669324372624095816, 5288578761594490376},
+ {13849647572526881715, 390378562422129603, 5286372605531545224, 634678992498468192, 16814060184007219837, 16839035721991946110},
+ },
+ {
+ {5403383155926395805, 125221686724158846, 16200173587003585891, 1190332142773424609, 15217396669374393068, 2578745759049575066},
+ {13475383798014306998, 6424876294380300114, 14191098580567931628, 5890095616593589345, 2936173359172605332, 17487060099266163274},
+ },
+ },
+ {
+ {
+ {12719214741013613290, 5114617959251923035, 10751915446782581763, 2484828566956964312, 14343803650946049216, 14801299356022205455},
+ {3016813884715770290, 17891349667893557724, 15777676062783188811, 1712819799097224132, 12168613974393954998, 13986990585905126288},
+ },
+ {
+ {8023010081509653349, 5335670617918622683, 1846902627262622829, 11994486113849390341, 6538926236372175318, 4814731736716894207},
+ {16304448710578682702, 9349072176363267816, 9186691613158664419, 17103823355609391752, 3916770392270698134, 9012943127536839823},
+ },
+ {
+ {5275622406326687551, 6112584237967786501, 265405289314185926, 1412958831727264346, 7651126186628822932, 5834995389479500713},
+ {13122792515707256985, 2550947875326289463, 7066444771311187962, 4421293422025492021, 10767771791627962866, 14226728638256751184},
+ },
+ {
+ {11448691464520706664, 15675985285202273608, 3655079521218996928, 15936388576359819252, 13208918369662918590, 9516984219307854927},
+ {11597611792829772123, 7713221738127008948, 7961786708858212519, 16353817233799898756, 14783345852732475068, 10250761950603958774},
+ },
+ {
+ {2625594970679028763, 2169078556432423136, 13021097165593667190, 10791106227007710714, 2690189788129576822, 5484825642511489488},
+ {16273557857984121953, 12145090445512587769, 16101739928864380638, 2643908061410998004, 12729107251027632439, 7695556167491532786},
+ },
+ {
+ {11157440928684545360, 3046840632242460591, 11426877095892198900, 8918480588279063509, 8787952932779849223, 9027816580501160769},
+ {9128814207932650961, 7203341616721124638, 8182325905700299211, 13427506527593902897, 18140725933956453022, 5063665298842103866},
+ },
+ {
+ {13658301013561762689, 2849842635737133681, 9794505509330850697, 4574981021203185846, 8209746334820554465, 5056236831081348743},
+ {16624206083233762319, 2806783205419280334, 4722899220782250386, 6951333432373876775, 16586996273337609315, 4087561966128175843},
+ },
+ {
+ {3878852889783645167, 5400481924475044908, 13648745681887805278, 16385969341835471642, 8474668593315413480, 17072114360268111657},
+ {15909524935314055264, 12962656664337915873, 16045825205726727428, 17668445836324789204, 9582515111403822925, 8311229418367164498},
+ },
+ {
+ {16750713536855692337, 12158883093332386860, 869753891367085490, 15605303972493341694, 12313210121941258747, 13916691409490803616},
+ {11444860648717627512, 2835105424184438282, 10913132759099776850, 1412948777401255586, 769776732776506316, 1165176872145242057},
+ },
+ {
+ {3136155720816959363, 176782515877232633, 15898658221137319414, 5945945464575269676, 9144428244947354059, 15406556014273518710},
+ {9716246750324542500, 1672303908580126879, 11063634686713475813, 5077145573933036029, 9745467858439955753, 6968865545502175550},
+ },
+ {
+ {2495713660630230645, 1185980555358051965, 14406641941666869071, 13418195026575315332, 5357639127530659925, 1493186117020140399},
+ {15828121188984359229, 8349485267934650396, 7613912943850760152, 18030871967540857146, 8018837622665199635, 15135626352960024679},
+ },
+ {
+ {17168709744073976774, 17815617756406029920, 7562176203824291435, 12623565445431123456, 18154939934834134345, 7536657795057385488},
+ {1403539525163296919, 18383425392072061037, 3301314769729806667, 6468401011400515937, 17613786701601511597, 14867910979962040781},
+ },
+ {
+ {5676915880842387064, 10055846762720957031, 11806698128040651823, 5264306477430907541, 8384892015115220698, 78358395066300931},
+ {1150314427301408206, 5063901896663115767, 638613414256407118, 8689364962315350092, 16590905670553712162, 18128165591184340257},
+ },
+ {
+ {7752905958520447175, 14603722115727539325, 9781506285327318406, 13087529078766636510, 14023569057475503528, 6019746498716519160},
+ {1031759345651315039, 13964338843948005473, 6689558506286989216, 14220086196735492654, 8688284060108936168, 11830821814034764828},
+ },
+ {
+ {13480780456478148129, 17091116390541906595, 5942938816814828424, 476503073112423896, 17958436423709724523, 12898659138199048553},
+ {2131038254379659612, 12525642025600402532, 3081067260990044234, 2822022238840761302, 7062264661943515613, 5905091641833394361},
+ },
+ },
+ {
+ {
+ {13440622283766006421, 9484751676577363406, 9905947788244365184, 9616606862630155221, 9253691280381130230, 310805699197692105},
+ {15857119177216089006, 10322980288919041083, 18373416554700920525, 6657775287925290320, 3666256939083168698, 439429372311506210},
+ },
+ {
+ {1597897383029505429, 10525228828887910120, 4933923276776716663, 10152243689983019623, 15301370315971850890, 4214213542732825860},
+ {897349283246619198, 5660938796941340389, 3717921090959741165, 5280841632073610594, 17979019565907796206, 11519275321457511404},
+ },
+ {
+ {3291527771490538711, 12694342940653469057, 13203683462309390985, 1193899784465090270, 659621542292721066, 1071462121865719293},
+ {9590655863442234173, 337930243762610616, 6432199645357122456, 10260314756660590323, 14326008875664555298, 3522995246882448014},
+ },
+ {
+ {4644598969538718139, 12193860868892577984, 12250306904140467019, 5407962404963080644, 4485091644169226191, 16089382217006835007},
+ {920589308924763406, 7142202226709964624, 11524080200370440713, 8450954286780755403, 4635718750704941162, 1486085287263603581},
+ },
+ {
+ {14187921230404535350, 11346105716295753707, 18142765952006405051, 4300086759963317261, 1825347314279603037, 4246997353784727565},
+ {10550338330776677777, 11915257613511762166, 465865811699731787, 14525465801670139106, 4190035864475007181, 15697268699718129928},
+ },
+ {
+ {16520532307875617691, 6478110846501161864, 12009144890567102539, 6639996996037161221, 10346745057146969014, 545026149668689158},
+ {12347224953633676077, 13721884389953920858, 16613557823182647213, 8719051450883594518, 1657296232801227258, 9195723469582730377},
+ },
+ {
+ {10672379303837372508, 1178915066578644658, 7318232521602719432, 4586807728983065460, 9645130800550409989, 10469349993209561384},
+ {6164577485020507700, 14774782349604625747, 1175325949885081731, 7503981034527378970, 6665905526100319746, 14115807008378187235},
+ },
+ {
+ {10537591092984195751, 14902777188358201211, 1609682826674157693, 1415112203205414973, 2121292735488271251, 9730644628099641048},
+ {1561907835543757283, 17295199465882003505, 6244864773422006269, 14104758566372328508, 5172569374976915040, 10911149041876998445},
+ },
+ {
+ {4142743472397546820, 3389473658987681872, 10678200230732012359, 11202709549973179279, 9306523242271834336, 12282962716364438596},
+ {9003120795952620535, 14330038165744890298, 10145599770735328847, 16631175899061725823, 6362275304129962702, 314787489785924267},
+ },
+ {
+ {11721097912057176600, 465843171488534090, 3822319191955558577, 15208224590212643113, 11095623855521247100, 6466436977520978591},
+ {10032477427078550098, 14389677632018329866, 7463855252587484514, 9538679795516955542, 2432362658144624282, 3283104727441149351},
+ },
+ {
+ {12785913170846555661, 16504696481298824206, 18387430512449781784, 11501522553203007302, 17453226662032435648, 72841124322579339},
+ {10340092917595603421, 18425536899827803529, 3390279596984649469, 104139025934621284, 14389540744379448736, 13185495434887927728},
+ },
+ {
+ {13047319551312062583, 13069113474868968778, 14400534570791996729, 2940176026787857058, 3476131159454733686, 4052732675176402643},
+ {3639915650884140037, 3373696894468266675, 5954677702497869028, 12219029297141994717, 14767012055233408577, 4804879819244591749},
+ },
+ {
+ {5743319169894187724, 3403171851694334648, 4433580132084214877, 13890862639937427160, 10419362266230633172, 2859349082979398226},
+ {8742566305870816529, 13813314196081988405, 13904410987635691727, 16614452833957126689, 13707357634780610178, 1642839273094370920},
+ },
+ {
+ {14027248214112167925, 1719835930921678207, 18418332983139545900, 3720933284960441366, 602535342330473807, 561868717519919310},
+ {12719483106586196278, 10935152826803494465, 1856788292694114055, 11401362997997198554, 16655766755327767076, 16749664986736295564},
+ },
+ {
+ {4746163886620296056, 16195921656868907520, 8331686623103669412, 560576196003183117, 12094183225971951844, 16935771085543970093},
+ {9464520802091612215, 10072288040788029476, 13937774116306076245, 4650247287489763753, 7901567587026209939, 5944125224832984247},
+ },
+ },
+ {
+ {
+ {9018413310491937545, 7479211580165592007, 4723343534675309263, 13895454120971208439, 13937115985645404601, 11554040025799661497},
+ {5480952972697767947, 2914963179369015982, 10162636262303291625, 11296982831055708826, 17035403260442020132, 11311386309034106855},
+ },
+ {
+ {10287403934820058638, 140061018296065973, 4609836502448609974, 12833794578281306273, 7013376274017941064, 3171002103636180619},
+ {17411865245980625367, 17830137832122912415, 9926615308142487378, 10170594699632265376, 9289903336520035955, 295986264357752633},
+ },
+ {
+ {2353717779065485542, 7849736054356737745, 16353139566092721807, 12477191479637934527, 611225681162111976, 2348028862004420825},
+ {9785747690717484735, 17418090343401958851, 12038755953887168101, 16958893033340106984, 13647755196440313762, 12405018904475572776},
+ },
+ {
+ {5298494778929819598, 3924508621232171971, 8749972845037533540, 1931716910689763937, 11971817937790329025, 8597404460835479112},
+ {14699754936537593409, 3124307020702767627, 15973366477384098168, 12480586491719897520, 7671564839409689125, 13926805082785871387},
+ },
+ {
+ {15204999194234914607, 8349634193664955592, 6009098602331648241, 6924706367035510132, 11252627761006599356, 18041169172716666620},
+ {17789359299204781079, 5727817029324871017, 8859671792757355400, 522069605866675301, 11189207261261388877, 11232767462102509610},
+ },
+ {
+ {16139497738710238126, 4157146187414349131, 5487114022641721563, 1063383115530797038, 2906599717299719710, 5276015474524600486},
+ {9269825514681515477, 16775312150546041513, 14582957882487299154, 15170954478995084883, 2499812420501884408, 10945713424572036595},
+ },
+ {
+ {5089807051541807662, 7157200325468149470, 2937849588731584444, 9354845172055266578, 5631696405995964524, 2214323534299283665},
+ {9722628493150662989, 17918792662316048829, 3417043373414897775, 17679083211095336242, 16808346554886232447, 13289844996223351707},
+ },
+ {
+ {11269874526592562906, 16500978216603335212, 10118738127249413871, 3659452648579232998, 5141018253691260035, 16117724868471222014},
+ {11347815034616287201, 7709514744105498479, 14118984237650181458, 12026134955404838277, 9335436582353087685, 369430838816330654},
+ },
+ {
+ {1585139051234805814, 404691396436142113, 11444293817557480245, 5830770104023383537, 12277306276048209251, 10642326551634509497},
+ {13792665542662432081, 6208000577113784638, 15717378408394080413, 7820469524198781038, 14389089922028942421, 8582404818280480446},
+ },
+ {
+ {70981166460121239, 5563408652468244620, 614683176526977757, 2781152952815547101, 12029155884278293318, 17760250353211832620},
+ {3187755494407378069, 17888395113661363276, 13412285944510495080, 11584741820870126887, 15965393589757423852, 18040989847530826793},
+ },
+ {
+ {5405473909442890818, 14666994240588619109, 12458304673324386647, 11008174367296119903, 14582036957337795851, 17282661739787817063},
+ {14222078674054535548, 11008919174943325660, 11819167351245959209, 18134905895138035484, 13162976610859867356, 7513570547713034700},
+ },
+ {
+ {14503898932310678540, 10872534209513960811, 10769539085938900258, 950968100788102293, 2593957957211394429, 9325054429337127538},
+ {8794306083750832982, 1021791833181379560, 9826075936615091843, 3550496685357100718, 10181274077023686988, 1708403758287646690},
+ },
+ {
+ {2114324794753920008, 9126128083829835556, 16280212870402563277, 13283686190256525376, 3251349600931694719, 14483424206972436627},
+ {10572754008401154275, 8633764455629405737, 6588424944597437957, 1571954989152470825, 8516883611989669014, 11640306975729561230},
+ },
+ {
+ {4109007533450828692, 2356386509806748446, 9041152461761446992, 16218546554098405589, 14154709222330366952, 9392453621407519648},
+ {17770577554690365656, 10932372374411174377, 12600690631485435764, 7948622706571305677, 8660221260057720358, 4747684946643246411},
+ },
+ {
+ {8540558873947276350, 3622540825228765451, 16650849354810540513, 11226397583292742086, 4705379347219803579, 12325233166887290731},
+ {15619140333232072725, 8608337299420394261, 2163342765639233276, 15744964703433685214, 5280747802181153134, 17233894809548258880},
+ },
+ },
+ {
+ {
+ {13115213709675436794, 10299123692547567131, 9429245948262081969, 13047795122467758935, 13812575189117105527, 2948332115489926339},
+ {2744672569127744094, 4815622797427999112, 859178603639156086, 11576446289001159839, 9958253466657519480, 16703064241036892748},
+ },
+ {
+ {9659930467403989932, 17321718087937017122, 3615409075768522018, 6398728174042229488, 8382474392298007936, 16868018560156882295},
+ {15394153985344325633, 18233056749369336201, 2786261003208561400, 14117307321540249886, 9686181390715937042, 8956691786907318249},
+ },
+ {
+ {12469663383430832235, 13312156986621640537, 11912360761178303017, 11804219970133303678, 18138791436343161493, 2154714404896772973},
+ {8464860256859883443, 14324425897255227015, 11075246616197014103, 11084846688464899884, 14026644252332359919, 6402389694082745611},
+ },
+ {
+ {1664247920632234678, 10050469124529404545, 13550912777105883578, 5684389909240961711, 18262622312373628010, 5992040147885225610},
+ {3886052343944693110, 7794548519566311969, 5328743476861022198, 3557155954099235264, 3684795529791949842, 17691405542438413688},
+ },
+ {
+ {9667044915797468497, 5187341894386544411, 9007932748072503962, 8968805127439822005, 4693907985120651307, 1280923431871955632},
+ {6721231714391543602, 12198545097663757759, 4397005010009650381, 1422329781944115833, 125099025124551420, 12942840780107155582},
+ },
+ {
+ {9559600762660458657, 2654878193132084429, 6142683421157333426, 8600628541895281085, 2720194395607941256, 11800628992463553487},
+ {4425191657353376240, 6088099402960722641, 115029919295524541, 12646988404583673832, 13384863624367861501, 18364682859012250550},
+ },
+ {
+ {4532078693830769620, 718394906501818236, 3877201007259789143, 760257150764070663, 16650468445415199734, 14938394407466859533},
+ {13647198668172065265, 8150502240122876834, 14693081828320862132, 7303871211541846858, 9083743247615337146, 14627695013907233453},
+ },
+ {
+ {15736758467123642408, 9706701086221383807, 2559832927730153795, 7692171838583389170, 10835849209926253466, 2290935724211630501},
+ {7110948153091501836, 12491488884744421116, 17194507769433100343, 12871741772449719665, 13293932181017940663, 15615371283128275924},
+ },
+ {
+ {10561525560550219871, 8873205184226519024, 7699063686607517061, 13635014797737384505, 14667176363819822811, 3925937510121565786},
+ {10228456892890207582, 14846438160606646653, 5315480697106497650, 5122456725957472423, 6204140834106767339, 673047575978292150},
+ },
+ {
+ {13827793037997042902, 2372112433190900987, 4942678787760432958, 17946455618542608613, 15396054321262292130, 11511518053778317681},
+ {11160017347470886464, 13664803594602056362, 8669936965482088617, 17765994223101087455, 14455539200673473573, 7079780915049059206},
+ },
+ {
+ {8033984515178450060, 16378670770570801979, 1548095437408110789, 11401360828210390234, 8750170757194679057, 4561487363432466918},
+ {9995552829545286346, 4476962116767664929, 5764765679815373569, 15487395691041270870, 2323841776203994300, 2856618876814473844},
+ },
+ {
+ {11531868239432263786, 5277805717080096397, 11682853637330501925, 5733978770749385591, 17364192273085890197, 7500286843970580511},
+ {86794299821863973, 4596156132784169023, 4785356555999800565, 10872734824615120105, 3047769721102166199, 10829425068529251522},
+ },
+ {
+ {16664987869819734811, 12973908345922045971, 4703076108718901177, 14075270048770461650, 104815219486926864, 892782843371503265},
+ {10458459649338308428, 10668999312407153052, 13704561636334771166, 4635417240676718572, 5106553366947462575, 3703456388087747221},
+ },
+ {
+ {2751721731474885326, 16084898094744997319, 12429196417254737907, 6088459822127419367, 6900842023460552142, 12211266007254795824},
+ {7744071277950462535, 2084549072065931478, 9120649345176753774, 4812104275201077076, 657496594162312754, 3182353075430185403},
+ },
+ {
+ {8755422501308001479, 10142307435936727265, 11064770721673029308, 18425843187034865157, 13347285302222173760, 3708437028689637787},
+ {14876728210989151093, 7705511398925586068, 14248821016296346136, 17806364092565886021, 5124212170718863197, 16198455889993493512},
+ },
+ },
+ {
+ {
+ {11131309769818983841, 14973020341004185634, 8446856854308327009, 89059453523509986, 9172267203688134801, 11760494578717306152},
+ {5073673248942080292, 1012148470051943223, 11336947344365930468, 9256490203060408704, 15345366488712852356, 4777703526474964085},
+ },
+ {
+ {6785992801663327967, 18012758086365480538, 11715768358595862309, 15278468386670997865, 7557494802091764967, 3226512940013553265},
+ {10651059331535692113, 11605693566797492518, 7683257465728908366, 1028223626866438466, 16313431221531990341, 6758261315736790700},
+ },
+ {
+ {11449545682029299204, 6596199629139963480, 963551988680601724, 698978766831128675, 17425132333529601498, 13413146748170623416},
+ {1714656874981820009, 4296884965902036208, 2990962557113972989, 10577651126385226151, 14576461165238503913, 6650017187571610816},
+ },
+ {
+ {6245777462138705770, 602174165006002688, 9651995753732157494, 6180859913470161771, 12820839311740267213, 10236566947582409415},
+ {11884174684151318817, 15241119462662846032, 6907037784685500586, 8001533132847243248, 3670287336361099984, 3392433665095714529},
+ },
+ {
+ {13912308898779395548, 3788232904773170505, 13510110594291767173, 8520990689262136399, 5635271140287576080, 7032476081565599191},
+ {3050147342057890882, 5226316271430966932, 11412499390577871486, 11913706106456146646, 4829447444602840419, 14235552292854028654},
+ },
+ {
+ {17312195306081130163, 12680842068822272296, 11528293990644984223, 14726421452780975383, 11447257867816650567, 762807127447733227},
+ {11172211697797188525, 8517884001168098535, 18342273006866963779, 17586041278289316668, 4779448404822225420, 9813346493235742371},
+ },
+ {
+ {9286929404285814938, 8816346852883562511, 7466996584964541958, 5933279471984750642, 1644469041072153982, 11834454051429614839},
+ {11689018037377144292, 9302324005187580531, 5409758949060136366, 4109111569593553253, 16829865226968878273, 6434426298631595957},
+ },
+ {
+ {16596404332021807148, 11395037243930999642, 6230660960102828038, 14208272099018002212, 8705581668959309002, 7133705014266607355},
+ {14252633600291674542, 17382067068187300207, 18138192466898743511, 6530204006214324897, 18284169711456293177, 4900989821334366705},
+ },
+ {
+ {5965502925766151340, 3801830478050084251, 6152884788276000974, 10584299273681935132, 2524731521663531672, 15776417203522871638},
+ {6285082299497166915, 15290822150488384424, 5578747051433926469, 5845296506012538407, 4823217512374723890, 7213090796321328136},
+ },
+ {
+ {1838054042722947491, 18012783215465657741, 1258715365050436512, 7913577973454740911, 7384511648712781941, 4158912753329944154},
+ {14299503727251690236, 8238664371507527991, 5075150254794639881, 11556112057563955850, 9196908777829742547, 1421651284198415569},
+ },
+ {
+ {7653294651845234281, 297639109833143896, 4336984993054011825, 16447737956972905656, 1714050270655945931, 15452230596345454363},
+ {15076547011376710685, 7524806307535928719, 7795256374139730227, 10089448010239318836, 7023465550055784134, 6968423688937605957},
+ },
+ {
+ {13092365251897461865, 18278882827386367428, 14555338542207092484, 6910907828139278038, 4543230946116571027, 5044543664197618202},
+ {6650151637454194021, 6834808965400326944, 16365723935359292167, 14827804062568090126, 13707520293209424632, 6325303435642990801},
+ },
+ {
+ {343357558658755796, 6940253811840342433, 12914150358606642695, 17231336963809853008, 11079943205463705734, 12473223889867436019},
+ {15215091930162368566, 11521732813165590119, 4432843582148093137, 2750024527657999932, 9405241261008362249, 10288224084277755975},
+ },
+ {
+ {10358507458667546506, 4836195114970556281, 4009596827146315911, 11256224974885245252, 5176303767964952564, 111134394063583597},
+ {6393513946378868409, 17037805604945819779, 10171688558016965768, 7858522891516850377, 1914205856134346186, 16973629294504183772},
+ },
+ {
+ {10256813334907479264, 17555541259591449755, 10506400127843286281, 3802242808788493442, 16997535067306771110, 8902379766095587425},
+ {1036044043924340639, 17424237503082033211, 12387965860513794582, 2930816639468217614, 10629728210657646483, 15009855708899356359},
+ },
+ },
+ {
+ {
+ {4454189113653900584, 2369870743683386936, 9771750146904378734, 7229551204834152191, 9308930686126579243, 5564951339003155731},
+ {2523209505731486974, 11655219901025790380, 10064955099576512592, 14322381509056856025, 15960759442596276288, 3132442392059561449},
+ },
+ {
+ {14421263046720478865, 10262735078638179312, 3820432306672060577, 15745169881456738128, 11281698473866736902, 15822191634431631555},
+ {4821811912616493018, 16782915424867765464, 1577651352486052440, 716633372221422297, 508136038908094084, 16377700646398062786},
+ },
+ {
+ {424706049021067379, 14217487990368728988, 7719227939353578736, 4199843265846733886, 16388456301404529776, 15169247696432251820},
+ {9090595157644861783, 10581077201944372077, 1379900013445280838, 7494321123029536948, 17787926264007537465, 5067787616258265775},
+ },
+ {
+ {769698236917518124, 3483900225503109603, 3336909192235363398, 541374049706836141, 18104741290431601017, 14983166848044339752},
+ {6121492399965995954, 16666617093809949054, 10249737155929975505, 1473067211573216915, 16575421339110736253, 5806380672117240601},
+ },
+ {
+ {13499925512737386719, 13944763802764915814, 9159954083757191227, 6979221481184822758, 14300821660040225990, 16265637021317828603},
+ {3128114568639019553, 2504404013570803046, 9274630379913042841, 5414311569178493969, 16628860202352780141, 5598477736550720675},
+ },
+ {
+ {9130425033956973272, 14637917817606979898, 17028834835152328690, 3041045091819937813, 5696889246846210875, 14160128160963955776},
+ {4567408060924985859, 8330188839918063054, 10075889358467904432, 10649295639077482245, 6371906135676507546, 14525834287139954362},
+ },
+ {
+ {16074395804418777643, 5541188270073279665, 8295310521928755861, 6864072771162821613, 17911901316631945045, 10605026599429014107},
+ {690935445353571870, 1392537891789610105, 7325904616956299332, 1149398686564874112, 17689896955892401926, 15639337629880458046},
+ },
+ {
+ {2591269655907388346, 11399575915049212026, 2043559396265943823, 2133276679198333751, 2052339475550725155, 6752287291455887793},
+ {949413463927904836, 9470431435117911687, 8077017638133728996, 16830570160974576546, 8072941217145343758, 4326954112402321249},
+ },
+ {
+ {3412919337711024431, 16383399630678254841, 2740801234954712157, 15867621577894919999, 2797972073741634922, 6677462884297174122},
+ {17474301298337562800, 3996912168590289455, 2877907669270439874, 12028178698733277400, 9048903683242829652, 16676938495979746758},
+ },
+ {
+ {9535591367797480450, 3032516458384811911, 16858722241492443043, 6099583463893158590, 14048493063580960236, 12185142455189643566},
+ {13517307410699214798, 262669939477440604, 6425159725529082877, 9337681168995712285, 4468475772573169834, 7978572861495407848},
+ },
+ {
+ {14371139353492294781, 4986055967754386106, 994283350302316111, 124059366184412674, 17931249617405877625, 11248278814950278199},
+ {8524946062048541221, 6940016701900868483, 4388778906010249088, 3316636379456104494, 4720367297793042554, 11143646688813775128},
+ },
+ {
+ {4447383188862483936, 15286779289485640736, 264847228943597281, 17761832039421017475, 5925682522537768028, 7096337516750811757},
+ {18071896252632882904, 9283619734214567194, 10122267390711497388, 4667499764407784879, 227971306242715406, 895727107492327229},
+ },
+ {
+ {11203525951412289019, 12852755217270479509, 9978444356559295662, 15803698066139233622, 15160649502708391831, 13050401346945170580},
+ {17641607277129335085, 15629899850899448002, 8690304923168739299, 13258223666573053280, 9366850728951877315, 5050696512039385569},
+ },
+ {
+ {6369749042849981516, 14997591469096472735, 14585781473609538602, 4957906834847789414, 9248310387962593481, 5103185051386294714},
+ {13712135472859015397, 6056087516321847761, 2219295526440778687, 8233797578211440273, 7240984299223714420, 4911601582698376693},
+ },
+ {
+ {4929990821929415849, 3130583257788034008, 9497231337826843444, 6435653863924772981, 1134942105434085779, 18114272026645693035},
+ {2524774042677381563, 7016780555346498950, 5414403864902656268, 15986697199444096112, 9742407776110139287, 6514675658717406998},
+ },
+ },
+ }
+}
diff --git a/core/crypto/_weierstrass/tools/ecc_gen_tables.odin b/core/crypto/_weierstrass/tools/ecc_gen_tables.odin
index e69927a90..609c19cd0 100644
--- a/core/crypto/_weierstrass/tools/ecc_gen_tables.odin
+++ b/core/crypto/_weierstrass/tools/ecc_gen_tables.odin
@@ -13,41 +13,62 @@ GENERATED :: `/*
*/`
main :: proc() {
- gen_p256r1_tables()
+ gen_tables("p256r1")
+ gen_tables("p384r1")
}
-gen_p256r1_tables :: proc() {
- Affine_Point_p256r1 :: struct {
- x: secec.Field_Element_p256r1,
- y: secec.Field_Element_p256r1,
+gen_tables :: proc($CURVE: string) {
+ when CURVE == "p256r1" {
+ Affine_Point_p256r1 :: struct {
+ x: secec.Field_Element_p256r1,
+ y: secec.Field_Element_p256r1,
+ }
+
+ Multiply_Table_hi: [32][15]Affine_Point_p256r1
+ Multiply_Table_lo: [32][15]Affine_Point_p256r1
+
+ SC_LEN :: 32
+
+ g, p: secec.Point_p256r1
+ } else when CURVE == "p384r1" {
+ Affine_Point_p384r1 :: struct {
+ x: secec.Field_Element_p384r1,
+ y: secec.Field_Element_p384r1,
+ }
+ Multiply_Table_hi: [48][15]Affine_Point_p384r1
+ Multiply_Table_lo: [48][15]Affine_Point_p384r1
+
+ SC_LEN :: 48
+
+ g, p: secec.Point_p384r1
+ } else {
+ #panic("weistrass/tools: invalid curve")
}
- Multiply_Table_p256r1_hi: [32][15]Affine_Point_p256r1
- Multiply_Table_p256r1_lo: [32][15]Affine_Point_p256r1
- g, p: secec.Point_p256r1
secec.pt_generator(&g)
// Precompute ([1,15] << n) * G multiples of G, MSB->LSB
- for i in 0..<32 {
- b: [32]byte
+ for i in 0..<SC_LEN {
+ b: [SC_LEN]byte
for j in 1..<16 {
b[i] = u8(j) << 4
secec.pt_scalar_mul_bytes(&p, &g, b[:], true)
secec.pt_rescale(&p, &p)
- secec.fe_set(&Multiply_Table_p256r1_hi[i][j-1].x, &p.x)
- secec.fe_set(&Multiply_Table_p256r1_hi[i][j-1].y, &p.y)
+ secec.fe_set(&Multiply_Table_hi[i][j-1].x, &p.x)
+ secec.fe_set(&Multiply_Table_hi[i][j-1].y, &p.y)
b[i] = u8(j)
secec.pt_scalar_mul_bytes(&p, &g, b[:], true)
secec.pt_rescale(&p, &p)
- secec.fe_set(&Multiply_Table_p256r1_lo[i][j-1].x, &p.x)
- secec.fe_set(&Multiply_Table_p256r1_lo[i][j-1].y, &p.y)
+ secec.fe_set(&Multiply_Table_lo[i][j-1].x, &p.x)
+ secec.fe_set(&Multiply_Table_lo[i][j-1].y, &p.y)
b[i] = 0
}
}
- fn := path.join({ODIN_ROOT, "core", "crypto", "_weierstrass", "secp256r1_table.odin"})
+ fn_ := "sec" + CURVE + "_table.odin"
+ fn := path.join({ODIN_ROOT, "core", "crypto", "_weierstrass", fn_})
bld: strings.Builder
w := strings.to_writer(&bld)
@@ -60,15 +81,20 @@ gen_p256r1_tables :: proc() {
fmt.wprintln(w, "when crypto.COMPACT_IMPLS == false {")
fmt.wprintln(w, "\t@(private,rodata)")
- fmt.wprintln(w, "\tGen_Multiply_Table_p256r1_hi := [32][15]Affine_Point_p256r1 {")
- for &v, i in Multiply_Table_p256r1_hi {
+ fmt.wprintf(w, "\tGen_Multiply_Table_%s_hi := [%d][15]Affine_Point_%s {{\n", CURVE, SC_LEN, CURVE)
+ for &v, i in Multiply_Table_hi {
fmt.wprintln(w, "\t\t{")
for &ap, j in v {
fmt.wprintln(w, "\t\t\t{")
x, y := &ap.x, &ap.y
- fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", x[0], x[1], x[2], x[3])
- fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", y[0], y[1], y[2], y[3])
+ when CURVE == "p256r1" {
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", x[0], x[1], x[2], x[3])
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", y[0], y[1], y[2], y[3])
+ } else when CURVE == "p384r1" {
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d, %d},\n", x[0], x[1], x[2], x[3], x[4], x[5])
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d, %d},\n", y[0], y[1], y[2], y[3], y[4], y[5])
+ }
fmt.wprintln(w, "\t\t\t},")
}
@@ -77,15 +103,20 @@ gen_p256r1_tables :: proc() {
fmt.wprintln(w, "\t}\n")
fmt.wprintln(w, "\t@(private,rodata)")
- fmt.wprintln(w, "\tGen_Multiply_Table_p256r1_lo := [32][15]Affine_Point_p256r1 {")
- for &v, i in Multiply_Table_p256r1_lo {
+ fmt.wprintf(w, "\tGen_Multiply_Table_%s_lo := [%d][15]Affine_Point_%s {{\n", CURVE, SC_LEN, CURVE)
+ for &v, i in Multiply_Table_lo {
fmt.wprintln(w, "\t\t{")
for &ap, j in v {
fmt.wprintln(w, "\t\t\t{")
x, y := &ap.x, &ap.y
- fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", x[0], x[1], x[2], x[3])
- fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", y[0], y[1], y[2], y[3])
+ when CURVE == "p256r1" {
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", x[0], x[1], x[2], x[3])
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", y[0], y[1], y[2], y[3])
+ } else when CURVE == "p384r1" {
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d, %d},\n", x[0], x[1], x[2], x[3], x[4], x[5])
+ fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d, %d},\n", y[0], y[1], y[2], y[3], y[4], y[5])
+ }
fmt.wprintln(w, "\t\t\t},")
}
diff --git a/tests/core/crypto/test_core_crypto_weierstrass.odin b/tests/core/crypto/test_core_crypto_weierstrass.odin
index 206e98bd7..ac5acac21 100644
--- a/tests/core/crypto/test_core_crypto_weierstrass.odin
+++ b/tests/core/crypto/test_core_crypto_weierstrass.odin
@@ -6,13 +6,17 @@ import "core:math/big"
import "core:testing"
@(private="file")
-P256_G_X :: "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
+P256_G_X : string : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"
@(private="file")
-P256_G_Y :: "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
-
+P256_G_Y : string : "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
@(private="file")
P256_G_UNCOMPRESSED :: "04" + P256_G_X + P256_G_Y
+@(private="file")
+P384_G_X : string : "aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7"
+@(private="file")
+P384_G_Y : string : "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f"
+
@(test)
test_p256_a :: proc(t: ^testing.T) {
a_str := "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc"
@@ -28,10 +32,32 @@ test_p256_a :: proc(t: ^testing.T) {
testing.expect(t, s == a_str)
+ b_, _ := hex.decode(transmute([]byte)(a_str), context.temp_allocator)
+ ec.fe_zero(&fe)
+ ec.fe_set_bytes(&fe, b_)
+
+ testing.expectf(t, ec.fe_equal(&fe, &a_fe) == 1, "%v", &fe)
+}
+
+@(test)
+test_p384_a :: proc(t: ^testing.T) {
+ a_str := "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc"
+ fe, a_fe: ec.Field_Element_p384r1
+ ec.fe_a(&fe)
+ ec.fe_a(&a_fe)
+
+ b: [48]byte
+ ec.fe_bytes(b[:], &fe)
+
+ s := (string)(hex.encode(b[:], context.temp_allocator))
+
+ testing.expect(t, s == a_str)
+
+ b_, _ := hex.decode(transmute([]byte)(a_str), context.temp_allocator)
ec.fe_zero(&fe)
- ec.fe_set_bytes(&fe, b[:])
+ ec.fe_set_bytes(&fe, b_)
- testing.expect(t, ec.fe_equal(&fe, &a_fe) == 1)
+ testing.expectf(t, ec.fe_equal(&fe, &a_fe) == 1, "%v", &fe)
}
@(test)
@@ -49,10 +75,32 @@ test_p256_b :: proc(t: ^testing.T) {
testing.expect(t, s == b_str)
+ b_, _ := hex.decode(transmute([]byte)(b_str), context.temp_allocator)
+ ec.fe_zero(&fe)
+ ec.fe_set_bytes(&fe, b_)
+
+ testing.expectf(t, ec.fe_equal(&fe, &b_fe) == 1, "%v", &fe)
+}
+
+@(test)
+test_p384_b :: proc(t: ^testing.T) {
+ b_str := "b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef"
+ fe, b_fe: ec.Field_Element_p384r1
+ ec.fe_b(&fe)
+ ec.fe_b(&b_fe)
+
+ b: [48]byte
+ ec.fe_bytes(b[:], &fe)
+
+ s := (string)(hex.encode(b[:], context.temp_allocator))
+
+ testing.expect(t, s == b_str)
+
+ b_, _ := hex.decode(transmute([]byte)(b_str), context.temp_allocator)
ec.fe_zero(&fe)
- ec.fe_set_bytes(&fe, b[:])
+ ec.fe_set_bytes(&fe, b_)
- testing.expect(t, ec.fe_equal(&fe, &b_fe) == 1)
+ testing.expectf(t, ec.fe_equal(&fe, &b_fe) == 1, "%v", &fe)
}
@(test)
@@ -67,10 +115,30 @@ test_p256_g_x :: proc(t: ^testing.T) {
s := (string)(hex.encode(b[:], context.temp_allocator))
testing.expect(t, s == P256_G_X)
+ b_, _ := hex.decode(transmute([]byte)(P256_G_X), context.temp_allocator)
ec.fe_zero(&fe)
- ec.fe_set_bytes(&fe, b[:])
+ ec.fe_set_bytes(&fe, b_)
- testing.expect(t, ec.fe_equal(&fe, &x_fe) == 1)
+ testing.expectf(t, ec.fe_equal(&fe, &x_fe) == 1, "%v", &fe)
+}
+
+@(test)
+test_p384_g_x :: proc(t: ^testing.T) {
+ fe, x_fe: ec.Field_Element_p384r1
+ ec.fe_gen_x(&fe)
+ ec.fe_gen_x(&x_fe)
+
+ b: [48]byte
+ ec.fe_bytes(b[:], &fe)
+
+ s := (string)(hex.encode(b[:], context.temp_allocator))
+ testing.expect(t, s == P384_G_X)
+
+ b_, _ := hex.decode(transmute([]byte)(P384_G_X), context.temp_allocator)
+ ec.fe_zero(&fe)
+ ec.fe_set_bytes(&fe, b_)
+
+ testing.expectf(t, ec.fe_equal(&fe, &x_fe) == 1, "%v", &fe)
}
@(test)
@@ -85,10 +153,30 @@ test_p256_g_y :: proc(t: ^testing.T) {
s := (string)(hex.encode(b[:], context.temp_allocator))
testing.expect(t, s == P256_G_Y)
+ b_, _ := hex.decode(transmute([]byte)(P256_G_Y), context.temp_allocator)
+ ec.fe_zero(&fe)
+ ec.fe_set_bytes(&fe, b_)
+
+ testing.expectf(t, ec.fe_equal(&fe, &y_fe) == 1, "%v", &fe)
+}
+
+@(test)
+test_p384_g_y :: proc(t: ^testing.T) {
+ fe, y_fe: ec.Field_Element_p384r1
+ ec.fe_gen_y(&fe)
+ ec.fe_gen_y(&y_fe)
+
+ b: [48]byte
+ ec.fe_bytes(b[:], &fe)
+
+ s := (string)(hex.encode(b[:], context.temp_allocator))
+ testing.expect(t, s == P384_G_Y)
+
+ b_, _ := hex.decode(transmute([]byte)(P384_G_Y), context.temp_allocator)
ec.fe_zero(&fe)
- ec.fe_set_bytes(&fe, b[:])
+ ec.fe_set_bytes(&fe, b_)
- testing.expect(t, ec.fe_equal(&fe, &y_fe) == 1)
+ testing.expectf(t, ec.fe_equal(&fe, &y_fe) == 1, "%v", &fe)
}
@(test)
@@ -139,6 +227,48 @@ test_p256_scalar_reduce :: proc(t: ^testing.T) {
}
@(test)
+test_p384_scalar_reduce :: proc(t: ^testing.T) {
+ test_vectors := []struct {
+ raw: string,
+ reduced: string,
+ } {
+ // n
+ {
+ "ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973",
+ "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ },
+ // n + 1
+ {
+ "ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974",
+ "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001",
+ },
+ // SHA384 odin-linux-amd64-dev-2026-01.tar.gz
+ {
+ "87622f79b4b0e76001f9c99b0337b61a0bcd2b5a8e9a3937176825ad75ef0fe8742a348a251dd2682d711f76b33df3e6",
+ "87622f79b4b0e76001f9c99b0337b61a0bcd2b5a8e9a3937176825ad75ef0fe8742a348a251dd2682d711f76b33df3e6",
+ },
+ // SHA512 odin-linux-amd64-dev-2026-01.tar.gz (Sage)
+ {
+ "6f85507cec3a35fdb3d4f40d23583681144561e77bc4ea88ab0ea219d5c17b7c9178f5f5a6296a2d18eddd4bdf19e61830fc85d7de23fd4fbde31c4cf6694719",
+ "144561e77bc4ea88c3b80eb3d044daa78b2dd5878dca766578e9c1aad3dba0d211ec862c36d2a7412917b70237c92226",
+ },
+ }
+
+ for v, _ in test_vectors {
+ raw_bytes, _ := hex.decode(transmute([]byte)(v.raw), context.temp_allocator)
+
+ sc: ec.Scalar_p384r1
+ _ = ec.sc_set_bytes(&sc, raw_bytes)
+
+ b: [ec.SC_SIZE_P384R1]byte
+ ec.sc_bytes(b[:], &sc)
+ s := (string)(hex.encode(b[:], context.temp_allocator))
+
+ testing.expectf(t, v.reduced == s, "sc: raw %s reduced: %s (%v), expected: %s", v.raw, s, &sc, v.reduced)
+ }
+}
+
+@(test)
test_p256_scalar_mul :: proc(t: ^testing.T) {
test_vectors := []struct {
scalar: string, // NOTE: Base 10
@@ -448,6 +578,309 @@ test_p256_scalar_mul :: proc(t: ^testing.T) {
}
@(test)
+test_p384_scalar_mul :: proc(t: ^testing.T) {
+ test_vectors := []struct {
+ scalar: string, // NOTE: Base 10
+ x, y: string,
+ } {
+ // Test vectors from http://point-at-infinity.org/ecc/nisttv
+ {
+ "1",
+ "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7",
+ "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F",
+ },
+ {
+ "2",
+ "08D999057BA3D2D969260045C55B97F089025959A6F434D651D207D19FB96E9E4FE0E86EBE0E64F85B96A9C75295DF61",
+ "8E80F1FA5B1B3CEDB7BFE8DFFD6DBA74B275D875BC6CC43E904E505F256AB4255FFD43E94D39E22D61501E700A940E80",
+ },
+ {
+ "3",
+ "077A41D4606FFA1464793C7E5FDC7D98CB9D3910202DCD06BEA4F240D3566DA6B408BBAE5026580D02D7E5C70500C831",
+ "C995F7CA0B0C42837D0BBE9602A9FC998520B41C85115AA5F7684C0EDC111EACC24ABD6BE4B5D298B65F28600A2F1DF1",
+ },
+ {
+ "4",
+ "138251CD52AC9298C1C8AAD977321DEB97E709BD0B4CA0ACA55DC8AD51DCFC9D1589A1597E3A5120E1EFD631C63E1835",
+ "CACAE29869A62E1631E8A28181AB56616DC45D918ABC09F3AB0E63CF792AA4DCED7387BE37BBA569549F1C02B270ED67",
+ },
+ {
+ "5",
+ "11DE24A2C251C777573CAC5EA025E467F208E51DBFF98FC54F6661CBE56583B037882F4A1CA297E60ABCDBC3836D84BC",
+ "8FA696C77440F92D0F5837E90A00E7C5284B447754D5DEE88C986533B6901AEB3177686D0AE8FB33184414ABE6C1713A",
+ },
+ {
+ "6",
+ "627BE1ACD064D2B2226FE0D26F2D15D3C33EBCBB7F0F5DA51CBD41F26257383021317D7202FF30E50937F0854E35C5DF",
+ "09766A4CB3F8B1C21BE6DDA6C14F1575B2C95352644F774C99864F613715441604C45B8D84E165311733A408D3F0F934",
+ },
+ {
+ "7",
+ "283C1D7365CE4788F29F8EBF234EDFFEAD6FE997FBEA5FFA2D58CC9DFA7B1C508B05526F55B9EBB2040F05B48FB6D0E1",
+ "9475C99061E41B88BA52EFDB8C1690471A61D867ED799729D9C92CD01DBD225630D84EDE32A78F9E64664CDAC512EF8C",
+ },
+ {
+ "8",
+ "1692778EA596E0BE75114297A6FA383445BF227FBE58190A900C3C73256F11FB5A3258D6F403D5ECE6E9B269D822C87D",
+ "DCD2365700D4106A835388BA3DB8FD0E22554ADC6D521CD4BD1C30C2EC0EEC196BADE1E9CDD1708D6F6ABFA4022B0AD2",
+ },
+ {
+ "9",
+ "8F0A39A4049BCB3EF1BF29B8B025B78F2216F7291E6FD3BAC6CB1EE285FB6E21C388528BFEE2B9535C55E4461079118B",
+ "62C77E1438B601D6452C4A5322C3A9799A9B3D7CA3C400C6B7678854AED9B3029E743EFEDFD51B68262DA4F9AC664AF8",
+ },
+ {
+ "10",
+ "A669C5563BD67EEC678D29D6EF4FDE864F372D90B79B9E88931D5C29291238CCED8E85AB507BF91AA9CB2D13186658FB",
+ "A988B72AE7C1279F22D9083DB5F0ECDDF70119550C183C31C502DF78C3B705A8296D8195248288D997784F6AB73A21DD",
+ },
+ {
+ "11",
+ "099056E27DA7B998DA1EEEC2904816C57FE935ED5837C37456C9FD14892D3F8C4749B66E3AFB81D626356F3B55B4DDD8",
+ "2E4C0C234E30AB96688505544AC5E0396FC4EED8DFC363FD43FF93F41B52A3255466D51263AAFF357D5DBA8138C5E0BB",
+ },
+ {
+ "12",
+ "952A7A349BD49289AB3AC421DCF683D08C2ED5E41F6D0E21648AF2691A481406DA4A5E22DA817CB466DA2EA77D2A7022",
+ "A0320FAF84B5BC0563052DEAE6F66F2E09FB8036CE18A0EBB9028B096196B50D031AA64589743E229EF6BACCE21BD16E",
+ },
+ {
+ "13",
+ "A567BA97B67AEA5BAFDAF5002FFCC6AB9632BFF9F01F873F6267BCD1F0F11C139EE5F441ABD99F1BAAF1CA1E3B5CBCE7",
+ "DE1B38B3989F3318644E4147AF164ECC5185595046932EC086329BE057857D66776BCB8272218A7D6423A12736F429CC",
+ },
+ {
+ "14",
+ "E8C8F94D44FBC2396BBEAC481B89D2B0877B1DFFD23E7DC95DE541EB651CCA2C41ABA24DBC02DE6637209ACCF0F59EA0",
+ "891AE44356FC8AE0932BCBF6DE52C8A933B86191E7728D79C8319413A09D0F48FC468BA05509DE22D7EE5C9E1B67B888",
+ },
+ {
+ "15",
+ "B3D13FC8B32B01058CC15C11D813525522A94156FFF01C205B21F9F7DA7C4E9CA849557A10B6383B4B88701A9606860B",
+ "152919E7DF9162A61B049B2536164B1BEEBAC4A11D749AF484D1114373DFBFD9838D24F8B284AF50985D588D33F7BD62",
+ },
+ {
+ "16",
+ "D5D89C3B5282369C5FBD88E2B231511A6B80DFF0E5152CF6A464FA9428A8583BAC8EBC773D157811A462B892401DAFCF",
+ "D815229DE12906D241816D5E9A9448F1D41D4FC40E2A3BDB9CABA57E440A7ABAD1210CB8F49BF2236822B755EBAB3673",
+ },
+ {
+ "17",
+ "4099952208B4889600A5EBBCB13E1A32692BEFB0733B41E6DCC614E42E5805F817012A991AF1F486CAF3A9ADD9FFCC03",
+ "5ECF94777833059839474594AF603598163AD3F8008AD0CD9B797D277F2388B304DA4D2FAA9680ECFA650EF5E23B09A0",
+ },
+ {
+ "18",
+ "DFB1FE3A40F7AC9B64C41D39360A7423828B97CB088A4903315E402A7089FA0F8B6C2355169CC9C99DFB44692A9B93DD",
+ "453ACA1243B5EC6B423A68A25587E1613A634C1C42D2EE7E6C57F449A1C91DC89168B7036EC0A7F37A366185233EC522",
+ },
+ {
+ "19",
+ "8D481DAB912BC8AB16858A211D750B77E07DBECCA86CD9B012390B430467AABF59C8651060801C0E9599E68713F5D41B",
+ "A1592FF0121460857BE99F2A60669050B2291B68A1039AA0594B32FD7ADC0E8C11FFBA5608004E646995B07E75E52245",
+ },
+ {
+ "20",
+ "605508EC02C534BCEEE9484C86086D2139849E2B11C1A9CA1E2808DEC2EAF161AC8A105D70D4F85C50599BE5800A623F",
+ "5158EE87962AC6B81F00A103B8543A07381B7639A3A65F1353AEF11B733106DDE92E99B78DE367B48E238C38DAD8EEDD",
+ },
+ {
+ "112233445566778899",
+ "A499EFE48839BC3ABCD1C5CEDBDD51904F9514DB44F4686DB918983B0C9DC3AEE05A88B72433E9515F91A329F5F4FA60",
+ "3B7CA28EF31F809C2F1BA24AAED847D0F8B406A4B8968542DE139DB5828CA410E615D1182E25B91B1131E230B727D36A",
+ },
+ {
+ "112233445566778899112233445566778899",
+ "90A0B1CAC601676B083F21E07BC7090A3390FE1B9C7F61D842D27FA315FB38D83667A11A71438773E483F2A114836B24",
+ "3197D3C6123F0D6CD65D5F0DE106FEF36656CB16DC7CD1A6817EB1D51510135A8F492F72665CFD1053F75ED03A7D04C9",
+ },
+ {
+ "10158184112867540819754776755819761756724522948540419979637868435924061464745859402573149498125806098880003248619520",
+ "F2A066BD332DC59BBC3D01DA1B124C687D8BB44611186422DE94C1DA4ECF150E664D353CCDB5CB2652685F8EB4D2CD49",
+ "D6ED0BF75FDD8E53D87765FA746835B673881D6D1907163A2C43990D75B454294F942EC571AD5AAE1806CAF2BB8E9A4A",
+ },
+ {
+ "9850501551105991028245052605056992139810094908912799254115847683881357749738726091734403950439157209401153690566655",
+ "5C7F9845D1C4AA44747F9137B6F9C39B36B26B8A62E8AF97290434D5F3B214F5A0131550ADB19058DC4C8780C4165C4A",
+ "712F7FCCC86F647E70DB8798228CB16344AF3D00B139B6F8502939C2A965AF0EB4E39E2E16AB8F597B8D5630A50C9D85",
+ },
+ {
+ "9850502723405747097317271194763310482462751455185699630571661657946308788426092983270628740691202018691293898608608",
+ "DD5838F7EC3B8ACF1BECFD746F8B668C577107E93548ED93ED0D254C112E76B10F053109EF8428BFCD50D38C4C030C57",
+ "33244F479CDAC34F160D9E4CE2D19D2FF0E3305B5BF0EEF29E91E9DE6E28F678C61B773AA7E3C03740E1A49D1AA2493C",
+ },
+ {
+ "1146189371817832990947611400450889406070215735255370280811736587845016396640969656447803207438173695115264",
+ "CB8ED893530BFBA04B4CA655923AAAD109A62BC8411D5925316C32D33602459C33057A1FBCB5F70AEB295D90F9165FBC",
+ "426AEE3E91B08420F9B357B66D5AFCBCF3956590BF5564DBF9086042EB880493D19DA39AAA6436C6B5FC66CE5596B43F",
+ },
+ {
+ "9619341438217097641865390297189708858938017986426152622639500179774624579127744608993294698873437325090751520764",
+ "67F714012B6B070182122DDD435CC1C2262A1AB88939BC6A2906CB2B4137C5E82B4582160F6403CAB887ACDF5786A268",
+ "90E31CF398CE2F8C5897C7380BF541075D1B4D3CB70547262B7095731252F181AC0597C66AF8311C7780DB39DEC0BD32",
+ },
+ {
+ "1231307996623833742387400352380172566077927415136813282735641918395585376659282194317590461518639141730493780722175",
+ "55A79DF7B53A99D31462C7E1A5ED5623970715BB1021098CB973A7520CBD6365E613E4B2467486FB37E86E01CEE09B8F",
+ "B95AEB71693189911661B709A886A1867F056A0EFE401EE11C06030E46F7A87731DA4575863178012208707DD666727C",
+ },
+ {
+ "587118838854683800942906722504810343086699021451906946003274128973058942197377013128840514404789143516741631",
+ "9539A968CF819A0E52E10EEA3BACA1B6480D7E4DF69BC07002C568569047110EE4FE72FCA423FDD5179D6E0E19C44844",
+ "A7728F37A0AE0DF2716061900D83A4DA149144129F89A214A8260464BAB609BB322E4E67DE5E4C4C6CB8D25983EC19B0",
+ },
+ {
+ "153914077530671739663795070876894766451466019374644150541452557147890542143280855693795882295846834387672681660416",
+ "933FC13276672AB360D909161CD02D830B1628935DF0D800C6ED602C59D575A86A8A97E3A2D697E3ED06BE741C0097D6",
+ "F35296BD7A6B4C6C025ED6D84338CCCC7522A45C5D4FBDB1442556CAEFB598128FA188793ADA510EB5F44E90A4E4BEF1",
+ },
+ {
+ "75148784606135150476268171850082176256856776750560539466196504390587921789283134009866871754361028131485122560",
+ "0CE31E1C4A937071E6EBACA026A93D783848BCC0C1585DAF639518125FCD1F1629D63041ABFB11FFC8F03FA8B6FCF6BF",
+ "A69EA55BE4BEAB2D5224050FEBFFBDFCFD614624C3B4F228909EB80012F003756D1C377E52F04FA539237F24DD080E2E",
+ },
+ {
+ "19691383761310193665095292424754807745686799029814707849273381514021788371252213000473497648851202400395528761229312",
+ "6842CFE3589AC268818291F31D44177A9168DCBC19F321ED66D81ECF59E31B54CCA0DDFD4C4136780171748D69A91C54",
+ "E3A5ECD5AC725F13DBC631F358C6E817EDCF3A613B83832741A9DB591A0BAE767FC714F70C2E7EA891E4312047DECCC0",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942623",
+ "605508EC02C534BCEEE9484C86086D2139849E2B11C1A9CA1E2808DEC2EAF161AC8A105D70D4F85C50599BE5800A623F",
+ "AEA7117869D53947E0FF5EFC47ABC5F8C7E489C65C59A0ECAC510EE48CCEF92116D16647721C984B71DC73C825271122",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942624",
+ "8D481DAB912BC8AB16858A211D750B77E07DBECCA86CD9B012390B430467AABF59C8651060801C0E9599E68713F5D41B",
+ "5EA6D00FEDEB9F7A841660D59F996FAF4DD6E4975EFC655FA6B4CD028523F172EE0045A8F7FFB19B966A4F828A1ADDBA",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942625",
+ "DFB1FE3A40F7AC9B64C41D39360A7423828B97CB088A4903315E402A7089FA0F8B6C2355169CC9C99DFB44692A9B93DD",
+ "BAC535EDBC4A1394BDC5975DAA781E9EC59CB3E3BD2D118193A80BB65E36E2366E9748FB913F580C85C99E7BDCC13ADD",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942626",
+ "4099952208B4889600A5EBBCB13E1A32692BEFB0733B41E6DCC614E42E5805F817012A991AF1F486CAF3A9ADD9FFCC03",
+ "A1306B8887CCFA67C6B8BA6B509FCA67E9C52C07FF752F32648682D880DC774BFB25B2CF55697F13059AF10B1DC4F65F",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942627",
+ "D5D89C3B5282369C5FBD88E2B231511A6B80DFF0E5152CF6A464FA9428A8583BAC8EBC773D157811A462B892401DAFCF",
+ "27EADD621ED6F92DBE7E92A1656BB70E2BE2B03BF1D5C42463545A81BBF585442EDEF3460B640DDC97DD48AB1454C98C",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942628",
+ "B3D13FC8B32B01058CC15C11D813525522A94156FFF01C205B21F9F7DA7C4E9CA849557A10B6383B4B88701A9606860B",
+ "EAD6E618206E9D59E4FB64DAC9E9B4E411453B5EE28B650B7B2EEEBC8C2040257C72DB064D7B50AF67A2A773CC08429D",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942629",
+ "E8C8F94D44FBC2396BBEAC481B89D2B0877B1DFFD23E7DC95DE541EB651CCA2C41ABA24DBC02DE6637209ACCF0F59EA0",
+ "76E51BBCA903751F6CD4340921AD3756CC479E6E188D728637CE6BEC5F62F0B603B9745EAAF621DD2811A362E4984777",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942630",
+ "A567BA97B67AEA5BAFDAF5002FFCC6AB9632BFF9F01F873F6267BCD1F0F11C139EE5F441ABD99F1BAAF1CA1E3B5CBCE7",
+ "21E4C74C6760CCE79BB1BEB850E9B133AE7AA6AFB96CD13F79CD641FA87A82988894347C8DDE75829BDC5ED9C90BD633",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942631",
+ "952A7A349BD49289AB3AC421DCF683D08C2ED5E41F6D0E21648AF2691A481406DA4A5E22DA817CB466DA2EA77D2A7022",
+ "5FCDF0507B4A43FA9CFAD215190990D1F6047FC931E75F1446FD74F69E694AF1FCE559B9768BC1DD610945341DE42E91",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942632",
+ "099056E27DA7B998DA1EEEC2904816C57FE935ED5837C37456C9FD14892D3F8C4749B66E3AFB81D626356F3B55B4DDD8",
+ "D1B3F3DCB1CF5469977AFAABB53A1FC6903B1127203C9C02BC006C0BE4AD5CD9AB992AEC9C5500CA82A2457FC73A1F44",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942633",
+ "A669C5563BD67EEC678D29D6EF4FDE864F372D90B79B9E88931D5C29291238CCED8E85AB507BF91AA9CB2D13186658FB",
+ "567748D5183ED860DD26F7C24A0F132208FEE6AAF3E7C3CE3AFD20873C48FA56D6927E69DB7D77266887B09648C5DE22",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942634",
+ "8F0A39A4049BCB3EF1BF29B8B025B78F2216F7291E6FD3BAC6CB1EE285FB6E21C388528BFEE2B9535C55E4461079118B",
+ "9D3881EBC749FE29BAD3B5ACDD3C56866564C2835C3BFF39489877AB51264CFC618BC100202AE497D9D25B075399B507",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942635",
+ "1692778EA596E0BE75114297A6FA383445BF227FBE58190A900C3C73256F11FB5A3258D6F403D5ECE6E9B269D822C87D",
+ "232DC9A8FF2BEF957CAC7745C24702F1DDAAB52392ADE32B42E3CF3D13F113E594521E15322E8F729095405CFDD4F52D",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942636",
+ "283C1D7365CE4788F29F8EBF234EDFFEAD6FE997FBEA5FFA2D58CC9DFA7B1C508B05526F55B9EBB2040F05B48FB6D0E1",
+ "6B8A366F9E1BE47745AD102473E96FB8E59E2798128668D62636D32FE242DDA8CF27B120CD5870619B99B3263AED1073",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942637",
+ "627BE1ACD064D2B2226FE0D26F2D15D3C33EBCBB7F0F5DA51CBD41F26257383021317D7202FF30E50937F0854E35C5DF",
+ "F68995B34C074E3DE41922593EB0EA8A4D36ACAD9BB088B36679B09EC8EABBE8FB3BA4717B1E9ACEE8CC5BF82C0F06CB",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942638",
+ "11DE24A2C251C777573CAC5EA025E467F208E51DBFF98FC54F6661CBE56583B037882F4A1CA297E60ABCDBC3836D84BC",
+ "705969388BBF06D2F0A7C816F5FF183AD7B4BB88AB2A211773679ACC496FE513CE889791F51704CCE7BBEB55193E8EC5",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942639",
+ "138251CD52AC9298C1C8AAD977321DEB97E709BD0B4CA0ACA55DC8AD51DCFC9D1589A1597E3A5120E1EFD631C63E1835",
+ "35351D679659D1E9CE175D7E7E54A99E923BA26E7543F60C54F19C3086D55B22128C7840C8445A96AB60E3FE4D8F1298",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942640",
+ "077A41D4606FFA1464793C7E5FDC7D98CB9D3910202DCD06BEA4F240D3566DA6B408BBAE5026580D02D7E5C70500C831",
+ "366A0835F4F3BD7C82F44169FD5603667ADF4BE37AEEA55A0897B3F123EEE1523DB542931B4A2D6749A0D7A0F5D0E20E",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942641",
+ "08D999057BA3D2D969260045C55B97F089025959A6F434D651D207D19FB96E9E4FE0E86EBE0E64F85B96A9C75295DF61",
+ "717F0E05A4E4C312484017200292458B4D8A278A43933BC16FB1AFA0DA954BD9A002BC15B2C61DD29EAFE190F56BF17F",
+ },
+ {
+ "39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942642",
+ "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7",
+ "C9E821B569D9D390A26167406D6D23D6070BE242D765EB831625CEEC4A0F473EF59F4E30E2817E6285BCE2846F15F1A0",
+ },
+ }
+
+ for v, _ in test_vectors {
+ x_bytes, _ := hex.decode(transmute([]byte)(v.x), context.temp_allocator)
+ y_bytes, _ := hex.decode(transmute([]byte)(v.y), context.temp_allocator)
+
+ k_big: big.Int
+ err := big.set(&k_big, v.scalar, 10, context.temp_allocator)
+ testing.expectf(t, err == nil, "failed to parse k", err)
+
+ k_sz: int
+ k_sz, err = big.int_to_bytes_size(&k_big, allocator = context.temp_allocator)
+ testing.expect(t, err == nil)
+
+ k_bytes := make([]byte, k_sz, context.temp_allocator)
+ err = big.int_to_bytes_big(&k_big, k_bytes, allocator = context.temp_allocator)
+
+ p, q, expected, g: ec.Point_p384r1
+ sc: ec.Scalar_p384r1
+
+ _ = ec.sc_set_bytes(&sc, k_bytes)
+
+ ec.pt_generator(&g)
+ ok := ec.pt_set_xy_bytes(&expected, x_bytes, y_bytes)
+ testing.expectf(t, ok, "failed to set point; %s, %s", v.x, v.y)
+
+ ec.pt_scalar_mul(&p, &g, &sc)
+ ec.pt_scalar_mul_generator(&q, &sc)
+ ec.pt_rescale(&p, &p)
+ ec.pt_rescale(&q, &q)
+
+ testing.expect(t, ec.pt_equal(&p, &q) == 1)
+ testing.expectf(t, ec.pt_equal(&p, &expected) == 1, "sc: %s actual: %v expected: %v", v.scalar, &p, &expected)
+ }
+}
+
+@(test)
test_p256_s11n_sec_identity ::proc(t: ^testing.T) {
p: ec.Point_p256r1