Merge changes I6e788488,If2cb0616,I0e325837,I08031cd0,I5220a10b
* changes:
CI: Add riscv64gc-unknown-linux-gnu support to mk/.
bigint: Provide a fallback implementation for `bn_mul_mont`.
Manually apply prefixed symbols from build.rs
Manually update Android.bp after ugprade to ring 0.17.0-alpha.11
Upgrade ring to 0.17.0-alpha.11
diff --git a/Android.bp b/Android.bp
index d181f1b..eb06e78 100644
--- a/Android.bp
+++ b/Android.bp
@@ -36,10 +36,11 @@
rust_library {
name: "libring",
+ // has rustc warnings
host_supported: true,
crate_name: "ring",
cargo_env_compat: true,
- cargo_pkg_version: "0.16.20",
+ cargo_pkg_version: "0.17.0-alpha.11",
srcs: ["src/lib.rs"],
edition: "2018",
features: [
@@ -68,10 +69,11 @@
rust_test {
name: "ring_test_src_lib",
+ // has rustc warnings
host_supported: true,
crate_name: "ring",
cargo_env_compat: true,
- cargo_pkg_version: "0.16.20",
+ cargo_pkg_version: "0.17.0-alpha.11",
srcs: ["src/lib.rs"],
test_suites: ["general-tests"],
auto_gen_config: true,
@@ -102,7 +104,7 @@
name: "ring_test_defaults",
crate_name: "ring",
cargo_env_compat: true,
- cargo_pkg_version: "0.16.20",
+ cargo_pkg_version: "0.17.0-alpha.11",
test_suites: ["general-tests"],
auto_gen_config: true,
edition: "2018",
@@ -125,6 +127,7 @@
rust_test {
name: "ring_test_tests_aead_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/aead_tests.rs"],
test_options: {
@@ -135,6 +138,7 @@
rust_test {
name: "ring_test_tests_agreement_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/agreement_tests.rs"],
test_options: {
@@ -145,6 +149,7 @@
rust_test {
name: "ring_test_tests_constant_time_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/constant_time_tests.rs"],
test_options: {
@@ -155,6 +160,7 @@
rust_test {
name: "ring_test_tests_digest_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/digest_tests.rs"],
test_options: {
@@ -165,6 +171,7 @@
rust_test {
name: "ring_test_tests_ecdsa_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/ecdsa_tests.rs"],
test_options: {
@@ -175,6 +182,7 @@
rust_test {
name: "ring_test_tests_ed25519_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/ed25519_tests.rs"],
test_options: {
@@ -185,6 +193,7 @@
rust_test {
name: "ring_test_tests_hkdf_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/hkdf_tests.rs"],
test_options: {
@@ -195,6 +204,7 @@
rust_test {
name: "ring_test_tests_hmac_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/hmac_tests.rs"],
test_options: {
@@ -205,6 +215,7 @@
rust_test {
name: "ring_test_tests_pbkdf2_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/pbkdf2_tests.rs"],
test_options: {
@@ -215,6 +226,7 @@
rust_test {
name: "ring_test_tests_quic_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/quic_tests.rs"],
test_options: {
@@ -225,6 +237,7 @@
rust_test {
name: "ring_test_tests_rand_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/rand_tests.rs"],
test_options: {
@@ -235,6 +248,7 @@
rust_test {
name: "ring_test_tests_rsa_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/rsa_tests.rs"],
test_options: {
@@ -245,6 +259,7 @@
rust_test {
name: "ring_test_tests_signature_tests",
defaults: ["ring_test_defaults"],
+ // has rustc warnings
host_supported: true,
srcs: ["tests/signature_tests.rs"],
test_options: {
@@ -254,7 +269,6 @@
cc_library_static {
name: "libring-core",
- defaults: ["rust_static_cc_lib_defaults"],
host_supported: true,
srcs: [
"crypto/cpu-intel.c",
@@ -264,9 +278,10 @@
"crypto/poly1305/poly1305_vec.c",
"crypto/curve25519/curve25519.c",
"crypto/fipsmodule/ec/ecp_nistz.c",
- "crypto/fipsmodule/ec/ecp_nistz256.c",
"crypto/fipsmodule/ec/gfp_p256.c",
"crypto/fipsmodule/ec/gfp_p384.c",
+ "crypto/fipsmodule/ec/p256.c",
+ "crypto/fipsmodule/rsa/padding.c",
"crypto/limbs/limbs.c",
"crypto/mem.c",
"crypto/fipsmodule/bn/montgomery.c",
@@ -282,7 +297,6 @@
"crypto/curve25519/asm/x25519-asm-arm.S",
"pregenerated/sha256-armv4-linux32.S",
"pregenerated/sha512-armv4-linux32.S",
- "pregenerated/ecp_nistz256-armv4-linux32.S",
"pregenerated/aesv8-armx-linux32.S",
"pregenerated/bsaes-armv7-linux32.S",
"pregenerated/ghashv8-armx-linux32.S",
@@ -296,7 +310,6 @@
"pregenerated/aesv8-armx-linux64.S",
"pregenerated/armv8-mont-linux64.S",
"pregenerated/chacha-armv8-linux64.S",
- "pregenerated/ecp_nistz256-armv8-linux64.S",
"pregenerated/ghash-neon-armv8-linux64.S",
"pregenerated/ghashv8-armx-linux64.S",
"pregenerated/sha256-armv8-linux64.S",
@@ -308,7 +321,6 @@
srcs: [
"pregenerated/aesni-x86-elf.S",
"pregenerated/chacha-x86-elf.S",
- "pregenerated/ecp_nistz256-x86-elf.S",
"pregenerated/ghash-x86-elf.S",
"pregenerated/vpaes-x86-elf.S",
"pregenerated/x86-mont-elf.S",
@@ -316,6 +328,7 @@
},
x86_64: {
srcs: [
+ "crypto/fipsmodule/ec/p256-x86_64.c",
"pregenerated/aesni-gcm-x86_64-elf.S",
"pregenerated/aesni-x86_64-elf.S",
"pregenerated/chacha-x86_64-elf.S",
@@ -329,6 +342,9 @@
"pregenerated/x86_64-mont-elf.S",
],
},
+ riscv64: {
+ cflags: ["-DOPENSSL_NO_ASM"],
+ },
},
cflags: [
@@ -353,7 +369,6 @@
cc_library_static {
name: "libring-test",
- defaults: ["rust_static_cc_lib_defaults"],
host_supported: true,
srcs: [
"crypto/constant_time_test.c",
diff --git a/Cargo.toml b/Cargo.toml
index 0c24247..cfaaa49 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,21 +3,20 @@
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
-# to registry (e.g., crates.io) dependencies
+# to registry (e.g., crates.io) dependencies.
#
-# If you believe there's an error in this file please file an
-# issue against the rust-lang/cargo repository. If you're
-# editing this file be aware that the upstream Cargo.toml
-# will likely look very different (and much more reasonable)
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
[package]
edition = "2018"
name = "ring"
-version = "0.16.20"
+version = "0.17.0-alpha.11"
authors = ["Brian Smith <brian@briansmith.org>"]
build = "build.rs"
-links = "ring-asm"
-include = ["LICENSE", "Cargo.toml", "pregenerated/*", "build.rs", "crypto/chacha/asm/chacha-armv4.pl", "crypto/chacha/asm/chacha-armv8.pl", "crypto/chacha/asm/chacha-x86.pl", "crypto/chacha/asm/chacha-x86_64.pl", "crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt", "crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt", "crypto/constant_time_test.c", "crypto/cpu-intel.c", "crypto/crypto.c", "crypto/curve25519/asm/x25519-asm-arm.S", "crypto/curve25519/curve25519.c", "crypto/curve25519/curve25519_tables.h", "crypto/curve25519/internal.h", "crypto/fipsmodule/aes/aes_nohw.c", "crypto/fipsmodule/aes/asm/aesni-x86.pl", "crypto/fipsmodule/aes/asm/aesni-x86_64.pl", "crypto/fipsmodule/aes/asm/aesv8-armx.pl", "crypto/fipsmodule/aes/asm/bsaes-armv7.pl", "crypto/fipsmodule/aes/asm/bsaes-x86_64.pl", "crypto/fipsmodule/aes/asm/vsaes-armv7.pl", "crypto/fipsmodule/aes/asm/vpaes-x86.pl", "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl", "crypto/fipsmodule/bn/asm/armv4-mont.pl", "crypto/fipsmodule/bn/asm/armv8-mont.pl", "crypto/fipsmodule/bn/asm/x86-mont.pl", "crypto/fipsmodule/bn/asm/x86_64-mont.pl", "crypto/fipsmodule/bn/asm/x86_64-mont5.pl", "crypto/fipsmodule/bn/internal.h", "crypto/fipsmodule/bn/montgomery.c", "crypto/fipsmodule/bn/montgomery_inv.c", "crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl", "crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl", "crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl", "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl", "crypto/fipsmodule/ec/ecp_nistz.c", "crypto/fipsmodule/ec/ecp_nistz.h", "crypto/fipsmodule/ec/ecp_nistz256.c", "crypto/fipsmodule/ec/ecp_nistz256.h", "crypto/fipsmodule/ec/ecp_nistz256_table.inl", "crypto/fipsmodule/ec/ecp_nistz384.h", "crypto/fipsmodule/ec/ecp_nistz384.inl", "crypto/fipsmodule/ec/gfp_p256.c", "crypto/fipsmodule/ec/gfp_p384.c", "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl", "crypto/fipsmodule/modes/asm/ghash-armv4.pl", "crypto/fipsmodule/modes/asm/ghash-x86.pl", "crypto/fipsmodule/modes/asm/ghash-x86_64.pl", "crypto/fipsmodule/modes/asm/ghashv8-armx.pl", "crypto/fipsmodule/sha/asm/sha256-armv4.pl", "crypto/fipsmodule/sha/asm/sha512-armv4.pl", "crypto/fipsmodule/sha/asm/sha512-armv8.pl", "crypto/fipsmodule/sha/asm/sha512-x86_64.pl", "crypto/internal.h", "crypto/limbs/limbs.c", "crypto/limbs/limbs.h", "crypto/limbs/limbs.inl", "crypto/mem.c", "crypto/perlasm/arm-xlate.pl", "crypto/perlasm/x86asm.pl", "crypto/perlasm/x86gas.pl", "crypto/perlasm/x86nasm.pl", "crypto/perlasm/x86_64-xlate.pl", "crypto/poly1305/internal.h", "crypto/poly1305/poly1305.c", "crypto/poly1305/poly1305_arm.c", "crypto/poly1305/poly1305_arm_asm.S", "crypto/poly1305/poly1305_vec.c", "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl", "doc/link-to-readme.md", "examples/checkdigest.rs", "include/GFp/aes.h", "include/GFp/arm_arch.h", "include/GFp/base.h", "include/GFp/check.h", "include/GFp/cpu.h", "include/GFp/mem.h", "include/GFp/poly1305.h", "include/GFp/type_check.h", "src/aead.rs", "src/aead/aes.rs", "src/aead/aes_gcm.rs", "src/aead/aes_tests.txt", "src/aead/block.rs", "src/aead/chacha.rs", "src/aead/chacha_tests.txt", "src/aead/chacha20_poly1305.rs", "src/aead/chacha20_poly1305_openssh.rs", "src/aead/counter.rs", "src/aead/gcm.rs", "src/aead/gcm/gcm_nohw.rs", "src/aead/iv.rs", "src/aead/nonce.rs", "src/aead/poly1305.rs", "src/aead/poly1305_test.txt", "src/aead/quic.rs", "src/aead/shift.rs", "src/agreement.rs", "src/arithmetic.rs", "src/arithmetic/bigint.rs", "src/arithmetic/bigint_elem_exp_consttime_tests.txt", "src/arithmetic/bigint_elem_exp_vartime_tests.txt", "src/arithmetic/bigint_elem_mul_tests.txt", "src/arithmetic/bigint_elem_reduced_once_tests.txt", "src/arithmetic/bigint_elem_reduced_tests.txt", "src/arithmetic/bigint_elem_squared_tests.txt", "src/arithmetic/constant.rs", "src/arithmetic/montgomery.rs", "src/array.rs", "src/bits.rs", "src/bssl.rs", "src/c.rs", "src/constant_time.rs", "src/cpu.rs", "src/data/alg-rsa-encryption.der", "src/debug.rs", "src/digest.rs", "src/digest/sha1.rs", "src/digest/sha2.rs", "src/ec/curve25519/ed25519/digest.rs", "src/ec/curve25519/ed25519.rs", "src/ec/curve25519/ed25519/signing.rs", "src/ec/curve25519/ed25519/verification.rs", "src/ec/curve25519/ed25519/ed25519_pkcs8_v2_template.der", "src/ec/curve25519.rs", "src/ec/curve25519/ops.rs", "src/ec/curve25519/scalar.rs", "src/ec/curve25519/x25519.rs", "src/ec.rs", "src/ec/keys.rs", "src/ec/suite_b/curve.rs", "src/ec/suite_b/ecdh.rs", "src/ec/suite_b/ecdsa/digest_scalar.rs", "src/ec/suite_b/ecdsa.rs", "src/ec/suite_b/ecdsa/signing.rs", "src/ec/suite_b/ecdsa/verification.rs", "src/ec/suite_b/ecdsa/ecdsa_digest_scalar_tests.txt", "src/ec/suite_b/ecdsa/ecPublicKey_p256_pkcs8_v1_template.der", "src/ec/suite_b/ecdsa/ecPublicKey_p384_pkcs8_v1_template.der", "src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt", "src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt", "src/ec/suite_b.rs", "src/ec/suite_b/ops/elem.rs", "src/ec/suite_b/ops.rs", "src/ec/suite_b/ops/p256.rs", "src/ec/suite_b/ops/p256_elem_mul_tests.txt", "src/ec/suite_b/ops/p256_elem_neg_tests.txt", "src/ec/suite_b/ops/p256_elem_sum_tests.txt", "src/ec/suite_b/ops/p256_point_double_tests.txt", "src/ec/suite_b/ops/p256_point_mul_base_tests.txt", "src/ec/suite_b/ops/p256_point_mul_serialized_tests.txt", "src/ec/suite_b/ops/p256_point_mul_tests.txt", "src/ec/suite_b/ops/p256_point_sum_mixed_tests.txt", "src/ec/suite_b/ops/p256_point_sum_tests.txt", "src/ec/suite_b/ops/p256_scalar_mul_tests.txt", "src/ec/suite_b/ops/p256_scalar_square_tests.txt", "src/ec/suite_b/ops/p384.rs", "src/ec/suite_b/ops/p384_elem_div_by_2_tests.txt", "src/ec/suite_b/ops/p384_elem_mul_tests.txt", "src/ec/suite_b/ops/p384_elem_neg_tests.txt", "src/ec/suite_b/ops/p384_elem_sum_tests.txt", "src/ec/suite_b/ops/p384_point_double_tests.txt", "src/ec/suite_b/ops/p384_point_mul_base_tests.txt", "src/ec/suite_b/ops/p384_point_mul_tests.txt", "src/ec/suite_b/ops/p384_point_sum_tests.txt", "src/ec/suite_b/ops/p384_scalar_mul_tests.txt", "src/ec/suite_b/private_key.rs", "src/ec/suite_b/public_key.rs", "src/ec/suite_b/suite_b_public_key_tests.txt", "src/endian.rs", "src/error.rs", "src/hkdf.rs", "src/hmac.rs", "src/hmac_generate_serializable_tests.txt", "src/io.rs", "src/io/der.rs", "src/io/der_writer.rs", "src/io/positive.rs", "src/io/writer.rs", "src/lib.rs", "src/limb.rs", "src/endian.rs", "src/pbkdf2.rs", "src/pkcs8.rs", "src/polyfill.rs", "src/polyfill/convert.rs", "src/rand.rs", "src/rsa/convert_nist_rsa_test_vectors.py", "src/rsa.rs", "src/rsa/padding.rs", "src/rsa/random.rs", "src/rsa/rsa_pss_padding_tests.txt", "src/rsa/signature_rsa_example_private_key.der", "src/rsa/signature_rsa_example_public_key.der", "src/rsa/signing.rs", "src/rsa/verification.rs", "src/signature.rs", "src/test.rs", "src/test_1_syntax_error_tests.txt", "src/test_1_tests.txt", "src/test_3_tests.txt", "tests/aead_aes_128_gcm_tests.txt", "tests/aead_aes_256_gcm_tests.txt", "tests/aead_chacha20_poly1305_tests.txt", "tests/aead_chacha20_poly1305_openssh_tests.txt", "tests/aead_tests.rs", "tests/agreement_tests.rs", "tests/agreement_tests.txt", "tests/constant_time_tests.rs", "tests/digest_tests.rs", "tests/digest_tests.txt", "tests/ecdsa_from_pkcs8_tests.txt", "tests/ecdsa_tests.rs", "tests/ecdsa_test_private_key_p256.p8", "tests/ecdsa_test_public_key_p256.der", "tests/ecdsa_test_public_key_p256_debug.txt", "tests/ecdsa_sign_asn1_tests.txt", "tests/ecdsa_sign_fixed_tests.txt", "tests/ecdsa_verify_asn1_tests.txt", "tests/ecdsa_verify_fixed_tests.txt", "tests/ed25519_from_pkcs8_tests.txt", "tests/ed25519_from_pkcs8_unchecked_tests.txt", "tests/ed25519_tests.rs", "tests/ed25519_tests.txt", "tests/ed25519_test_private_key.bin", "tests/ed25519_test_private_key.p8", "tests/ed25519_test_public_key.bin", "tests/ed25519_test_public_key.der", "tests/hkdf_tests.rs", "tests/hkdf_tests.txt", "tests/hmac_tests.rs", "tests/hmac_tests.txt", "tests/pbkdf2_tests.rs", "tests/pbkdf2_tests.txt", "tests/quic_aes_128_tests.txt", "tests/quic_aes_256_tests.txt", "tests/quic_chacha20_tests.txt", "tests/quic_tests.rs", "tests/rand_tests.rs", "tests/rsa_from_pkcs8_tests.txt", "tests/rsa_pkcs1_sign_tests.txt", "tests/rsa_pkcs1_verify_tests.txt", "tests/rsa_primitive_verify_tests.txt", "tests/rsa_pss_sign_tests.txt", "tests/rsa_pss_verify_tests.txt", "tests/rsa_tests.rs", "tests/rsa_test_private_key_2048.p8", "tests/rsa_test_public_key_2048.der", "tests/rsa_test_public_key_2048_debug.txt", "tests/signature_tests.rs", "third_party/fiat/curve25519_32.h", "third_party/fiat/curve25519_64.h", "third_party/fiat/LICENSE", "third_party/fiat/make_curve25519_tables.py", "third_party/NIST/SHAVS/SHA1LongMsg.rsp", "third_party/NIST/SHAVS/SHA1Monte.rsp", "third_party/NIST/SHAVS/SHA1ShortMsg.rsp", "third_party/NIST/SHAVS/SHA224LongMsg.rsp", "third_party/NIST/SHAVS/SHA224Monte.rsp", "third_party/NIST/SHAVS/SHA224ShortMsg.rsp", "third_party/NIST/SHAVS/SHA256LongMsg.rsp", "third_party/NIST/SHAVS/SHA256Monte.rsp", "third_party/NIST/SHAVS/SHA256ShortMsg.rsp", "third_party/NIST/SHAVS/SHA384LongMsg.rsp", "third_party/NIST/SHAVS/SHA384Monte.rsp", "third_party/NIST/SHAVS/SHA384ShortMsg.rsp", "third_party/NIST/SHAVS/SHA512LongMsg.rsp", "third_party/NIST/SHAVS/SHA512Monte.rsp", "third_party/NIST/SHAVS/SHA512ShortMsg.rsp"]
+links = "ring_core_0_17_0_alpha_11"
+include = ["LICENSE", "Cargo.toml", "pregenerated/*", "build.rs", "crypto/chacha/asm/chacha-armv4.pl", "crypto/chacha/asm/chacha-armv8.pl", "crypto/chacha/asm/chacha-x86.pl", "crypto/chacha/asm/chacha-x86_64.pl", "crypto/cipher_extra/test/aes_128_gcm_siv_tests.txt", "crypto/cipher_extra/test/aes_256_gcm_siv_tests.txt", "crypto/constant_time_test.c", "crypto/cpu-intel.c", "crypto/crypto.c", "crypto/curve25519/asm/x25519-asm-arm.S", "crypto/curve25519/curve25519.c", "crypto/curve25519/curve25519_tables.h", "crypto/curve25519/internal.h", "crypto/fipsmodule/aes/aes_nohw.c", "crypto/fipsmodule/aes/asm/aesni-x86.pl", "crypto/fipsmodule/aes/asm/aesni-x86_64.pl", "crypto/fipsmodule/aes/asm/aesv8-armx.pl", "crypto/fipsmodule/aes/asm/bsaes-armv7.pl", "crypto/fipsmodule/aes/asm/bsaes-x86_64.pl", "crypto/fipsmodule/aes/asm/vsaes-armv7.pl", "crypto/fipsmodule/aes/asm/vpaes-x86.pl", "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl", "crypto/fipsmodule/bn/asm/armv4-mont.pl", "crypto/fipsmodule/bn/asm/armv8-mont.pl", "crypto/fipsmodule/bn/asm/x86-mont.pl", "crypto/fipsmodule/bn/asm/x86_64-mont.pl", "crypto/fipsmodule/bn/asm/x86_64-mont5.pl", "crypto/fipsmodule/bn/internal.h", "crypto/fipsmodule/bn/montgomery.c", "crypto/fipsmodule/bn/montgomery_inv.c", "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl", "crypto/fipsmodule/ec/ecp_nistz.c", "crypto/fipsmodule/ec/ecp_nistz.h", "crypto/fipsmodule/ec/ecp_nistz384.h", "crypto/fipsmodule/ec/ecp_nistz384.inl", "crypto/fipsmodule/ec/gfp_p256.c", "crypto/fipsmodule/ec/gfp_p384.c", "crypto/fipsmodule/ec/p256.c", "crypto/fipsmodule/ec/p256-x86_64-table.h", "crypto/fipsmodule/ec/p256-x86_64.c", "crypto/fipsmodule/ec/p256-x86_64.h", "crypto/fipsmodule/ec/p256_shared.h", "crypto/fipsmodule/ec/p256_table.h", "crypto/fipsmodule/ec/util.h", "crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt", "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl", "crypto/fipsmodule/modes/asm/ghash-armv4.pl", "crypto/fipsmodule/modes/asm/ghash-x86.pl", "crypto/fipsmodule/modes/asm/ghash-x86_64.pl", "crypto/fipsmodule/modes/asm/ghashv8-armx.pl", "crypto/fipsmodule/rsa/padding.c", "crypto/fipsmodule/sha/asm/sha256-armv4.pl", "crypto/fipsmodule/sha/asm/sha512-armv4.pl", "crypto/fipsmodule/sha/asm/sha512-armv8.pl", "crypto/fipsmodule/sha/asm/sha512-x86_64.pl", "crypto/internal.h", "crypto/limbs/limbs.c", "crypto/limbs/limbs.h", "crypto/limbs/limbs.inl", "crypto/mem.c", "crypto/perlasm/arm-xlate.pl", "crypto/perlasm/x86asm.pl", "crypto/perlasm/x86gas.pl", "crypto/perlasm/x86nasm.pl", "crypto/perlasm/x86_64-xlate.pl", "crypto/poly1305/internal.h", "crypto/poly1305/poly1305.c", "crypto/poly1305/poly1305_arm.c", "crypto/poly1305/poly1305_arm_asm.S", "crypto/poly1305/poly1305_vec.c", "crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl", "doc/link-to-readme.md", "examples/checkdigest.rs", "include/ring-core/aes.h", "include/ring-core/arm_arch.h", "include/ring-core/base.h", "include/ring-core/check.h", "include/ring-core/cpu.h", "include/ring-core/mem.h", "include/ring-core/poly1305.h", "include/ring-core/type_check.h", "src/aead.rs", "src/aead/aes.rs", "src/aead/aes_gcm.rs", "src/aead/aes_tests.txt", "src/aead/block.rs", "src/aead/chacha.rs", "src/aead/chacha/fallback.rs", "src/aead/chacha_tests.txt", "src/aead/chacha20_poly1305.rs", "src/aead/chacha20_poly1305_openssh.rs", "src/aead/gcm.rs", "src/aead/gcm/gcm_nohw.rs", "src/aead/less_safe_key.rs", "src/aead/nonce.rs", "src/aead/opening_key.rs", "src/aead/poly1305.rs", "src/aead/poly1305_test.txt", "src/aead/quic.rs", "src/aead/sealing_key.rs", "src/aead/shift.rs", "src/aead/unbound_key.rs", "src/agreement.rs", "src/arithmetic.rs", "src/arithmetic/bigint.rs", "src/arithmetic/bigint_elem_exp_consttime_tests.txt", "src/arithmetic/bigint_elem_exp_vartime_tests.txt", "src/arithmetic/bigint_elem_mul_tests.txt", "src/arithmetic/bigint_elem_reduced_once_tests.txt", "src/arithmetic/bigint_elem_reduced_tests.txt", "src/arithmetic/bigint_elem_squared_tests.txt", "src/arithmetic/constant.rs", "src/arithmetic/montgomery.rs", "src/array.rs", "src/bits.rs", "src/bssl.rs", "src/c.rs", "src/constant_time.rs", "src/cpu.rs", "src/data/alg-rsa-encryption.der", "src/debug.rs", "src/digest.rs", "src/digest/sha1.rs", "src/digest/sha2.rs", "src/ec/curve25519/ed25519/digest.rs", "src/ec/curve25519/ed25519.rs", "src/ec/curve25519/ed25519/signing.rs", "src/ec/curve25519/ed25519/verification.rs", "src/ec/curve25519/ed25519/ed25519_pkcs8_v2_template.der", "src/ec/curve25519.rs", "src/ec/curve25519/ops.rs", "src/ec/curve25519/scalar.rs", "src/ec/curve25519/x25519.rs", "src/ec.rs", "src/ec/keys.rs", "src/ec/suite_b/curve.rs", "src/ec/suite_b/ecdh.rs", "src/ec/suite_b/ecdsa/digest_scalar.rs", "src/ec/suite_b/ecdsa.rs", "src/ec/suite_b/ecdsa/signing.rs", "src/ec/suite_b/ecdsa/verification.rs", "src/ec/suite_b/ecdsa/ecdsa_digest_scalar_tests.txt", "src/ec/suite_b/ecdsa/ecPublicKey_p256_pkcs8_v1_template.der", "src/ec/suite_b/ecdsa/ecPublicKey_p384_pkcs8_v1_template.der", "src/ec/suite_b/ecdsa/ecdsa_sign_asn1_tests.txt", "src/ec/suite_b/ecdsa/ecdsa_sign_fixed_tests.txt", "src/ec/suite_b.rs", "src/ec/suite_b/ops/elem.rs", "src/ec/suite_b/ops.rs", "src/ec/suite_b/ops/p256.rs", "src/ec/suite_b/ops/p256_elem_mul_tests.txt", "src/ec/suite_b/ops/p256_elem_neg_tests.txt", "src/ec/suite_b/ops/p256_elem_sum_tests.txt", "src/ec/suite_b/ops/p256_point_double_tests.txt", "src/ec/suite_b/ops/p256_point_mul_base_tests.txt", "src/ec/suite_b/ops/p256_point_mul_serialized_tests.txt", "src/ec/suite_b/ops/p256_point_mul_tests.txt", "src/ec/suite_b/ops/p256_point_sum_mixed_tests.txt", "src/ec/suite_b/ops/p256_point_sum_tests.txt", "src/ec/suite_b/ops/p256_scalar_mul_tests.txt", "src/ec/suite_b/ops/p256_scalar_square_tests.txt", "src/ec/suite_b/ops/p384.rs", "src/ec/suite_b/ops/p384_elem_div_by_2_tests.txt", "src/ec/suite_b/ops/p384_elem_mul_tests.txt", "src/ec/suite_b/ops/p384_elem_neg_tests.txt", "src/ec/suite_b/ops/p384_elem_sum_tests.txt", "src/ec/suite_b/ops/p384_point_double_tests.txt", "src/ec/suite_b/ops/p384_point_mul_base_tests.txt", "src/ec/suite_b/ops/p384_point_mul_tests.txt", "src/ec/suite_b/ops/p384_point_sum_tests.txt", "src/ec/suite_b/ops/p384_scalar_mul_tests.txt", "src/ec/suite_b/private_key.rs", "src/ec/suite_b/public_key.rs", "src/ec/suite_b/suite_b_public_key_tests.txt", "src/endian.rs", "src/error.rs", "src/hkdf.rs", "src/hmac.rs", "src/hmac_generate_serializable_tests.txt", "src/io.rs", "src/io/der.rs", "src/io/der_writer.rs", "src/io/positive.rs", "src/io/writer.rs", "src/lib.rs", "src/limb.rs", "src/endian.rs", "src/pbkdf2.rs", "src/pkcs8.rs", "src/polyfill.rs", "src/polyfill/array_map.rs", "src/polyfill/chunks_fixed.rs", "src/prefixed.rs", "src/rand.rs", "src/rsa/convert_nist_rsa_test_vectors.py", "src/rsa.rs", "src/rsa/bounds.rs", "src/rsa/keypair.rs", "src/rsa/keypair/asn1.rs", "src/rsa/keypair/components.rs", "src/rsa/keypair/core.rs", "src/rsa/keypair/oaep.rs", "src/rsa/keypair/signature_rsa_example_private_key.der", "src/rsa/keypair/signature_rsa_example_public_key.der", "src/rsa/keypair/signing.rs", "src/rsa/padding.rs", "src/rsa/public.rs", "src/rsa/public/components.rs", "src/rsa/public/key.rs", "src/rsa/public/oaep.rs", "src/rsa/random.rs", "src/rsa/rsa_pss_padding_tests.txt", "src/rsa/verification.rs", "src/signature.rs", "src/test.rs", "src/test_1_syntax_error_tests.txt", "src/test_1_tests.txt", "src/test_3_tests.txt", "tests/aead_aes_128_gcm_tests.txt", "tests/aead_aes_256_gcm_tests.txt", "tests/aead_chacha20_poly1305_tests.txt", "tests/aead_chacha20_poly1305_openssh_tests.txt", "tests/aead_tests.rs", "tests/agreement_tests.rs", "tests/agreement_tests.txt", "tests/constant_time_tests.rs", "tests/digest_tests.rs", "tests/digest_tests.txt", "tests/ecdsa_from_pkcs8_tests.txt", "tests/ecdsa_tests.rs", "tests/ecdsa_test_private_key_p256.p8", "tests/ecdsa_test_public_key_p256.der", "tests/ecdsa_test_public_key_p256_debug.txt", "tests/ecdsa_sign_asn1_tests.txt", "tests/ecdsa_sign_fixed_tests.txt", "tests/ecdsa_verify_asn1_tests.txt", "tests/ecdsa_verify_fixed_tests.txt", "tests/ed25519_from_pkcs8_tests.txt", "tests/ed25519_from_pkcs8_unchecked_tests.txt", "tests/ed25519_tests.rs", "tests/ed25519_tests.txt", "tests/ed25519_test_private_key.bin", "tests/ed25519_test_private_key.p8", "tests/ed25519_test_public_key.bin", "tests/ed25519_test_public_key.der", "tests/hkdf_tests.rs", "tests/hkdf_tests.txt", "tests/hmac_tests.rs", "tests/hmac_tests.txt", "tests/pbkdf2_tests.rs", "tests/pbkdf2_tests.txt", "tests/quic_aes_128_tests.txt", "tests/quic_aes_256_tests.txt", "tests/quic_chacha20_tests.txt", "tests/quic_tests.rs", "tests/rand_tests.rs", "tests/rsa_from_pkcs8_tests.txt", "tests/rsa_pkcs1_sign_tests.txt", "tests/rsa_pkcs1_verify_tests.txt", "tests/rsa_primitive_verify_tests.txt", "tests/rsa_pss_sign_tests.txt", "tests/rsa_pss_verify_tests.txt", "tests/rsa_tests.rs", "tests/rsa_test_private_key_2048.p8", "tests/rsa_test_public_key_2048.der", "tests/rsa_test_public_key_2048_debug.txt", "tests/signature_tests.rs", "third_party/fiat/curve25519_32.h", "third_party/fiat/curve25519_64.h", "third_party/fiat/p256_32.h", "third_party/fiat/p256_64.h", "third_party/fiat/LICENSE", "third_party/NIST/SHAVS/SHA1LongMsg.rsp", "third_party/NIST/SHAVS/SHA1Monte.rsp", "third_party/NIST/SHAVS/SHA1ShortMsg.rsp", "third_party/NIST/SHAVS/SHA224LongMsg.rsp", "third_party/NIST/SHAVS/SHA224Monte.rsp", "third_party/NIST/SHAVS/SHA224ShortMsg.rsp", "third_party/NIST/SHAVS/SHA256LongMsg.rsp", "third_party/NIST/SHAVS/SHA256Monte.rsp", "third_party/NIST/SHAVS/SHA256ShortMsg.rsp", "third_party/NIST/SHAVS/SHA384LongMsg.rsp", "third_party/NIST/SHAVS/SHA384Monte.rsp", "third_party/NIST/SHAVS/SHA384ShortMsg.rsp", "third_party/NIST/SHAVS/SHA512LongMsg.rsp", "third_party/NIST/SHAVS/SHA512Monte.rsp", "third_party/NIST/SHAVS/SHA512ShortMsg.rsp"]
description = "Safe, fast, small crypto using Rust."
documentation = "https://briansmith.org/rustdoc/ring/"
readme = "doc/link-to-readme.md"
@@ -48,7 +47,7 @@
[dependencies.untrusted]
version = "0.7.1"
[build-dependencies.cc]
-version = "1.0.62"
+version = "1.0.66"
default-features = false
[features]
@@ -68,7 +67,7 @@
version = "0.5.2"
default-features = false
[target."cfg(any(target_os = \"android\", target_os = \"linux\"))".dependencies.libc]
-version = "0.2.69"
+version = "0.2.84"
default-features = false
[target."cfg(any(target_os = \"android\", target_os = \"linux\"))".dependencies.once_cell]
@@ -81,7 +80,7 @@
features = ["std"]
default-features = false
[target."cfg(any(unix, windows))".dev-dependencies.libc]
-version = "0.2.80"
+version = "0.2.84"
default-features = false
[target."cfg(target_arch = \"wasm32\")".dev-dependencies.wasm-bindgen-test]
version = "0.3.18"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index c9daac8..ee4f2e0 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -10,10 +10,18 @@
name = "ring"
readme = "doc/link-to-readme.md"
repository = "https://github.com/briansmith/ring"
-version = "0.16.20"
-# Prevent multiple versions of *ring* from being linked into the same program.
-links = "ring-asm"
+# Keep in sync with `links` below.
+version = "0.17.0-alpha.11"
+
+# Keep in sync with `version` above.
+#
+# "ring_core_" + version, replacing punctuation with underscores.
+#
+# build.rs uses this to derive the prefix for FFI symbols and the file names
+# of the FFI libraries, so it must be a valid identifier prefix and a valid
+# filename prefix.
+links = "ring_core_0_17_0_alpha_11"
include = [
"LICENSE",
@@ -53,25 +61,27 @@
"crypto/fipsmodule/bn/internal.h",
"crypto/fipsmodule/bn/montgomery.c",
"crypto/fipsmodule/bn/montgomery_inv.c",
- "crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl",
- "crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl",
- "crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl",
"crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl",
"crypto/fipsmodule/ec/ecp_nistz.c",
"crypto/fipsmodule/ec/ecp_nistz.h",
- "crypto/fipsmodule/ec/ecp_nistz256.c",
- "crypto/fipsmodule/ec/ecp_nistz256.h",
- "crypto/fipsmodule/ec/ecp_nistz256_table.inl",
"crypto/fipsmodule/ec/ecp_nistz384.h",
"crypto/fipsmodule/ec/ecp_nistz384.inl",
"crypto/fipsmodule/ec/gfp_p256.c",
"crypto/fipsmodule/ec/gfp_p384.c",
+ "crypto/fipsmodule/ec/p256.c",
+ "crypto/fipsmodule/ec/p256-x86_64-table.h",
+ "crypto/fipsmodule/ec/p256-x86_64.c",
+ "crypto/fipsmodule/ec/p256-x86_64.h",
+ "crypto/fipsmodule/ec/p256_shared.h",
+ "crypto/fipsmodule/ec/p256_table.h",
+ "crypto/fipsmodule/ec/util.h",
"crypto/fipsmodule/ecdsa/ecdsa_verify_tests.txt",
"crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl",
"crypto/fipsmodule/modes/asm/ghash-armv4.pl",
"crypto/fipsmodule/modes/asm/ghash-x86.pl",
"crypto/fipsmodule/modes/asm/ghash-x86_64.pl",
"crypto/fipsmodule/modes/asm/ghashv8-armx.pl",
+ "crypto/fipsmodule/rsa/padding.c",
"crypto/fipsmodule/sha/asm/sha256-armv4.pl",
"crypto/fipsmodule/sha/asm/sha512-armv4.pl",
"crypto/fipsmodule/sha/asm/sha512-armv8.pl",
@@ -94,32 +104,35 @@
"crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl",
"doc/link-to-readme.md",
"examples/checkdigest.rs",
- "include/GFp/aes.h",
- "include/GFp/arm_arch.h",
- "include/GFp/base.h",
- "include/GFp/check.h",
- "include/GFp/cpu.h",
- "include/GFp/mem.h",
- "include/GFp/poly1305.h",
- "include/GFp/type_check.h",
+ "include/ring-core/aes.h",
+ "include/ring-core/arm_arch.h",
+ "include/ring-core/base.h",
+ "include/ring-core/check.h",
+ "include/ring-core/cpu.h",
+ "include/ring-core/mem.h",
+ "include/ring-core/poly1305.h",
+ "include/ring-core/type_check.h",
"src/aead.rs",
"src/aead/aes.rs",
"src/aead/aes_gcm.rs",
"src/aead/aes_tests.txt",
"src/aead/block.rs",
"src/aead/chacha.rs",
+ "src/aead/chacha/fallback.rs",
"src/aead/chacha_tests.txt",
"src/aead/chacha20_poly1305.rs",
"src/aead/chacha20_poly1305_openssh.rs",
- "src/aead/counter.rs",
"src/aead/gcm.rs",
"src/aead/gcm/gcm_nohw.rs",
- "src/aead/iv.rs",
+ "src/aead/less_safe_key.rs",
"src/aead/nonce.rs",
+ "src/aead/opening_key.rs",
"src/aead/poly1305.rs",
"src/aead/poly1305_test.txt",
"src/aead/quic.rs",
+ "src/aead/sealing_key.rs",
"src/aead/shift.rs",
+ "src/aead/unbound_key.rs",
"src/agreement.rs",
"src/arithmetic.rs",
"src/arithmetic/bigint.rs",
@@ -208,16 +221,28 @@
"src/pbkdf2.rs",
"src/pkcs8.rs",
"src/polyfill.rs",
- "src/polyfill/convert.rs",
+ "src/polyfill/array_map.rs",
+ "src/polyfill/chunks_fixed.rs",
+ "src/prefixed.rs",
"src/rand.rs",
"src/rsa/convert_nist_rsa_test_vectors.py",
"src/rsa.rs",
+ "src/rsa/bounds.rs",
+ "src/rsa/keypair.rs",
+ "src/rsa/keypair/asn1.rs",
+ "src/rsa/keypair/components.rs",
+ "src/rsa/keypair/core.rs",
+ "src/rsa/keypair/oaep.rs",
+ "src/rsa/keypair/signature_rsa_example_private_key.der",
+ "src/rsa/keypair/signature_rsa_example_public_key.der",
+ "src/rsa/keypair/signing.rs",
"src/rsa/padding.rs",
+ "src/rsa/public.rs",
+ "src/rsa/public/components.rs",
+ "src/rsa/public/key.rs",
+ "src/rsa/public/oaep.rs",
"src/rsa/random.rs",
"src/rsa/rsa_pss_padding_tests.txt",
- "src/rsa/signature_rsa_example_private_key.der",
- "src/rsa/signature_rsa_example_public_key.der",
- "src/rsa/signing.rs",
"src/rsa/verification.rs",
"src/signature.rs",
"src/test.rs",
@@ -275,8 +300,9 @@
"tests/signature_tests.rs",
"third_party/fiat/curve25519_32.h",
"third_party/fiat/curve25519_64.h",
+ "third_party/fiat/p256_32.h",
+ "third_party/fiat/p256_64.h",
"third_party/fiat/LICENSE",
- "third_party/fiat/make_curve25519_tables.py",
"third_party/NIST/SHAVS/SHA1LongMsg.rsp",
"third_party/NIST/SHAVS/SHA1Monte.rsp",
"third_party/NIST/SHAVS/SHA1ShortMsg.rsp",
@@ -307,7 +333,7 @@
spin = { version = "0.5.2", default-features = false }
[target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies]
-libc = { version = "0.2.69", default-features = false }
+libc = { version = "0.2.84", default-features = false }
once_cell = { version = "1.5.2", default-features = false, features=["std"], optional = true }
[target.'cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "illumos", target_os = "netbsd", target_os = "openbsd", target_os = "solaris"))'.dependencies]
@@ -323,11 +349,10 @@
wasm-bindgen-test = { version = "0.3.18", default-features = false }
[target.'cfg(any(unix, windows))'.dev-dependencies]
-libc = { version = "0.2.80", default-features = false }
+libc = { version = "0.2.84", default-features = false }
-# Keep this in sync with `[dependencies]` in pregenerate_asm/Cargo.toml.
[build-dependencies]
-cc = { version = "1.0.62", default-features = false }
+cc = { version = "1.0.66", default-features = false }
[features]
# These features are documented in the top-level module's documentation.
diff --git a/METADATA b/METADATA
index ce1b1cf..2695649 100644
--- a/METADATA
+++ b/METADATA
@@ -1,3 +1,7 @@
+# This project was upgraded with external_updater.
+# Usage: tools/external_updater/updater.sh update rust/crates/ring
+# For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md
+
name: "ring"
description: "Safe, fast, small crypto using Rust."
third_party {
@@ -7,13 +11,13 @@
}
url {
type: ARCHIVE
- value: "https://static.crates.io/crates/ring/ring-0.16.20.crate"
+ value: "https://static.crates.io/crates/ring/ring-0.17.0-alpha.11.crate"
}
- version: "0.16.20"
+ version: "0.17.0-alpha.11"
license_type: NOTICE
last_upgrade_date {
- year: 2021
- month: 6
- day: 24
+ year: 2023
+ month: 2
+ day: 3
}
}
diff --git a/build.rs b/build.rs
index a5a8e19..68e066d 100644
--- a/build.rs
+++ b/build.rs
@@ -19,14 +19,11 @@
// another for the concrete logging implementation). Instead we use `eprintln!`
// to log everything to stderr.
-// In the `pregenerate_asm_main()` case we don't want to access (Cargo)
-// environment variables at all, so avoid `use std::env` here.
-
use std::{
fs::{self, DirEntry},
+ io::Write,
path::{Path, PathBuf},
process::Command,
- time::SystemTime,
};
const X86: &str = "x86";
@@ -36,19 +33,20 @@
#[rustfmt::skip]
const RING_SRCS: &[(&[&str], &str)] = &[
+ (&[], "crypto/curve25519/curve25519.c"),
(&[], "crypto/fipsmodule/aes/aes_nohw.c"),
(&[], "crypto/fipsmodule/bn/montgomery.c"),
(&[], "crypto/fipsmodule/bn/montgomery_inv.c"),
+ (&[], "crypto/fipsmodule/rsa/padding.c"),
(&[], "crypto/limbs/limbs.c"),
(&[], "crypto/mem.c"),
(&[], "crypto/poly1305/poly1305.c"),
(&[AARCH64, ARM, X86_64, X86], "crypto/crypto.c"),
- (&[AARCH64, ARM, X86_64, X86], "crypto/curve25519/curve25519.c"),
(&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/ecp_nistz.c"),
- (&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/ecp_nistz256.c"),
(&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/gfp_p256.c"),
(&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/gfp_p384.c"),
+ (&[AARCH64, ARM, X86_64, X86], "crypto/fipsmodule/ec/p256.c"),
(&[X86_64, X86], "crypto/cpu-intel.c"),
@@ -56,14 +54,14 @@
(&[X86], "crypto/fipsmodule/aes/asm/vpaes-x86.pl"),
(&[X86], "crypto/fipsmodule/bn/asm/x86-mont.pl"),
(&[X86], "crypto/chacha/asm/chacha-x86.pl"),
- (&[X86], "crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl"),
(&[X86], "crypto/fipsmodule/modes/asm/ghash-x86.pl"),
+ (&[X86_64], "crypto/chacha/asm/chacha-x86_64.pl"),
(&[X86_64], "crypto/fipsmodule/aes/asm/aesni-x86_64.pl"),
(&[X86_64], "crypto/fipsmodule/aes/asm/vpaes-x86_64.pl"),
(&[X86_64], "crypto/fipsmodule/bn/asm/x86_64-mont.pl"),
(&[X86_64], "crypto/fipsmodule/bn/asm/x86_64-mont5.pl"),
- (&[X86_64], "crypto/chacha/asm/chacha-x86_64.pl"),
+ (&[X86_64], "crypto/fipsmodule/ec/p256-x86_64.c"),
(&[X86_64], "crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl"),
(&[X86_64], "crypto/fipsmodule/modes/asm/aesni-gcm-x86_64.pl"),
(&[X86_64], "crypto/fipsmodule/modes/asm/ghash-x86_64.pl"),
@@ -79,7 +77,6 @@
(&[ARM], "crypto/fipsmodule/bn/asm/armv4-mont.pl"),
(&[ARM], "crypto/chacha/asm/chacha-armv4.pl"),
(&[ARM], "crypto/curve25519/asm/x25519-asm-arm.S"),
- (&[ARM], "crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl"),
(&[ARM], "crypto/fipsmodule/modes/asm/ghash-armv4.pl"),
(&[ARM], "crypto/poly1305/poly1305_arm.c"),
(&[ARM], "crypto/poly1305/poly1305_arm_asm.S"),
@@ -89,7 +86,6 @@
(&[AARCH64], "crypto/fipsmodule/aes/asm/vpaes-armv8.pl"),
(&[AARCH64], "crypto/fipsmodule/bn/asm/armv8-mont.pl"),
(&[AARCH64], "crypto/chacha/asm/chacha-armv8.pl"),
- (&[AARCH64], "crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl"),
(&[AARCH64], "crypto/fipsmodule/modes/asm/ghash-neon-armv8.pl"),
(&[AARCH64], SHA512_ARMV8),
];
@@ -102,43 +98,6 @@
const RING_TEST_SRCS: &[&str] = &[("crypto/constant_time_test.c")];
-#[rustfmt::skip]
-const RING_INCLUDES: &[&str] =
- &[
- "crypto/curve25519/curve25519_tables.h",
- "crypto/curve25519/internal.h",
- "crypto/fipsmodule/bn/internal.h",
- "crypto/fipsmodule/ec/ecp_nistz256_table.inl",
- "crypto/fipsmodule/ec/ecp_nistz384.inl",
- "crypto/fipsmodule/ec/ecp_nistz.h",
- "crypto/fipsmodule/ec/ecp_nistz384.h",
- "crypto/fipsmodule/ec/ecp_nistz256.h",
- "crypto/internal.h",
- "crypto/limbs/limbs.h",
- "crypto/limbs/limbs.inl",
- "crypto/poly1305/internal.h",
- "include/GFp/aes.h",
- "include/GFp/arm_arch.h",
- "include/GFp/base.h",
- "include/GFp/check.h",
- "include/GFp/cpu.h",
- "include/GFp/mem.h",
- "include/GFp/poly1305.h",
- "include/GFp/type_check.h",
- "third_party/fiat/curve25519_32.h",
- "third_party/fiat/curve25519_64.h",
- ];
-
-#[rustfmt::skip]
-const RING_PERL_INCLUDES: &[&str] =
- &["crypto/perlasm/arm-xlate.pl",
- "crypto/perlasm/x86gas.pl",
- "crypto/perlasm/x86nasm.pl",
- "crypto/perlasm/x86asm.pl",
- "crypto/perlasm/x86_64-xlate.pl"];
-
-const RING_BUILD_FILE: &[&str] = &["build.rs"];
-
const PREGENERATED: &str = "pregenerated";
fn c_flags(target: &Target) -> &'static [&'static str] {
@@ -213,36 +172,133 @@
// None means "any OS" or "any target". The first match in sequence order is
// taken.
-const ASM_TARGETS: &[(&str, Option<&str>, Option<&str>)] = &[
- ("x86_64", Some("ios"), Some("macosx")),
- ("x86_64", Some("macos"), Some("macosx")),
- ("x86_64", Some(WINDOWS), Some("nasm")),
- ("x86_64", None, Some("elf")),
- ("aarch64", Some("ios"), Some("ios64")),
- ("aarch64", Some("macos"), Some("ios64")),
- ("aarch64", None, Some("linux64")),
- ("x86", Some(WINDOWS), Some("win32n")),
- ("x86", Some("ios"), Some("macosx")),
- ("x86", None, Some("elf")),
- ("arm", Some("ios"), Some("ios32")),
- ("arm", None, Some("linux32")),
- ("wasm32", None, None),
+const ASM_TARGETS: &[AsmTarget] = &[
+ AsmTarget {
+ oss: LINUX_ABI,
+ arch: "aarch64",
+ perlasm_format: "linux64",
+ asm_extension: "S",
+ preassemble: false,
+ },
+ AsmTarget {
+ oss: LINUX_ABI,
+ arch: "arm",
+ perlasm_format: "linux32",
+ asm_extension: "S",
+ preassemble: false,
+ },
+ AsmTarget {
+ oss: LINUX_ABI,
+ arch: "x86",
+ perlasm_format: "elf",
+ asm_extension: "S",
+ preassemble: false,
+ },
+ AsmTarget {
+ oss: LINUX_ABI,
+ arch: "x86_64",
+ perlasm_format: "elf",
+ asm_extension: "S",
+ preassemble: false,
+ },
+ AsmTarget {
+ oss: MACOS_ABI,
+ arch: "aarch64",
+ perlasm_format: "ios64",
+ asm_extension: "S",
+ preassemble: false,
+ },
+ AsmTarget {
+ oss: MACOS_ABI,
+ arch: "x86_64",
+ perlasm_format: "macosx",
+ asm_extension: "S",
+ preassemble: false,
+ },
+ AsmTarget {
+ oss: &[WINDOWS],
+ arch: "x86",
+ perlasm_format: "win32n",
+ asm_extension: "asm",
+ preassemble: true,
+ },
+ AsmTarget {
+ oss: &[WINDOWS],
+ arch: "x86_64",
+ perlasm_format: "nasm",
+ asm_extension: "asm",
+ preassemble: true,
+ },
];
+struct AsmTarget {
+ /// Operating systems.
+ oss: &'static [&'static str],
+
+ /// Architectures.
+ arch: &'static str,
+
+ /// The PerlAsm format name.
+ perlasm_format: &'static str,
+
+ /// The filename extension for assembly files.
+ asm_extension: &'static str,
+
+ /// Whether pre-assembled object files should be included in the Cargo
+ /// package instead of the asm sources. This way, the user doesn't need
+ /// to install an assembler for the target. This is particularly important
+ /// for x86/x86_64 Windows since an assembler doesn't come with the C
+ /// compiler.
+ preassemble: bool,
+}
+
+/// Operating systems that have the same ABI as Linux on every architecture
+/// mentioned in `ASM_TARGETS`.
+const LINUX_ABI: &[&str] = &[
+ "android",
+ "dragonfly",
+ "freebsd",
+ "fuchsia",
+ "illumos",
+ "netbsd",
+ "openbsd",
+ "linux",
+ "solaris",
+];
+
+/// Operating systems that have the same ABI as macOS on every architecture
+/// mentioned in `ASM_TARGETS`.
+const MACOS_ABI: &[&str] = &["ios", "macos"];
+
const WINDOWS: &str = "windows";
+
const MSVC: &str = "msvc";
const MSVC_OBJ_OPT: &str = "/Fo";
const MSVC_OBJ_EXT: &str = "obj";
+/// Read an environment variable and tell Cargo that we depend on it.
+///
+/// This needs to be used for any environment variable that isn't a standard
+/// Cargo-supplied variable.
+///
+/// The name is static since we intend to only read a static set of environment
+/// variables.
+fn read_env_var(name: &'static str) -> Result<String, std::env::VarError> {
+ println!("cargo:rerun-if-env-changed={}", name);
+ std::env::var(name)
+}
+
fn main() {
- if let Ok(package_name) = std::env::var("CARGO_PKG_NAME") {
- if package_name == "ring" {
- ring_build_rs_main();
- return;
+ const RING_PREGENERATE_ASM: &str = "RING_PREGENERATE_ASM";
+ match read_env_var(RING_PREGENERATE_ASM).as_deref() {
+ Ok("1") => {
+ pregenerate_asm_main();
+ }
+ Err(std::env::VarError::NotPresent) => ring_build_rs_main(),
+ _ => {
+ panic!("${} has an invalid value", RING_PREGENERATE_ASM);
}
}
-
- pregenerate_asm_main();
}
fn ring_build_rs_main() {
@@ -276,37 +332,41 @@
};
let pregenerated = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join(PREGENERATED);
- build_c_code(&target, pregenerated, &out_dir);
- check_all_files_tracked()
+ build_c_code(&target, pregenerated, &out_dir, &ring_core_prefix());
+ emit_rerun_if_changed()
}
fn pregenerate_asm_main() {
+ println!("cargo:rustc-cfg=pregenerate_asm_only");
+
let pregenerated = PathBuf::from(PREGENERATED);
std::fs::create_dir(&pregenerated).unwrap();
let pregenerated_tmp = pregenerated.join("tmp");
std::fs::create_dir(&pregenerated_tmp).unwrap();
- for &(target_arch, target_os, perlasm_format) in ASM_TARGETS {
+ let mut generated_prefix_headers = false;
+
+ for asm_target in ASM_TARGETS {
// For Windows, package pregenerated object files instead of
// pregenerated assembly language source files, so that the user
// doesn't need to install the assembler.
- let asm_dir = if target_os == Some(WINDOWS) {
+ let asm_dir = if asm_target.preassemble {
&pregenerated_tmp
} else {
&pregenerated
};
- if let Some(perlasm_format) = perlasm_format {
- let perlasm_src_dsts =
- perlasm_src_dsts(&asm_dir, target_arch, target_os, perlasm_format);
- perlasm(&perlasm_src_dsts, target_arch, perlasm_format, None);
+ let perlasm_src_dsts = perlasm_src_dsts(&asm_dir, asm_target);
+ perlasm(&perlasm_src_dsts, asm_target);
- if target_os == Some(WINDOWS) {
- let srcs = asm_srcs(perlasm_src_dsts);
- for src in srcs {
- let obj_path = obj_path(&pregenerated, &src, MSVC_OBJ_EXT);
- run_command(nasm(&src, target_arch, &obj_path));
- }
+ if asm_target.preassemble {
+ if !std::mem::replace(&mut generated_prefix_headers, true) {
+ generate_prefix_symbols_nasm(&pregenerated, &ring_core_prefix()).unwrap();
+ }
+ let srcs = asm_srcs(perlasm_src_dsts);
+ for src in srcs {
+ let obj_path = obj_path(&pregenerated, &src, MSVC_OBJ_EXT);
+ run_command(nasm(&src, asm_target.arch, &obj_path, &pregenerated));
}
}
}
@@ -322,7 +382,9 @@
is_debug: bool,
}
-fn build_c_code(target: &Target, pregenerated: PathBuf, out_dir: &Path) {
+fn build_c_code(target: &Target, pregenerated: PathBuf, out_dir: &Path, ring_core_prefix: &str) {
+ println!("cargo:rustc-env=RING_CORE_PREFIX={}", ring_core_prefix);
+
#[cfg(not(feature = "wasm32_c"))]
{
if &target.arch == "wasm32" {
@@ -330,32 +392,9 @@
}
}
- let includes_modified = RING_INCLUDES
- .iter()
- .chain(RING_BUILD_FILE.iter())
- .chain(RING_PERL_INCLUDES.iter())
- .map(|f| file_modified(Path::new(*f)))
- .max()
- .unwrap();
-
- fn is_none_or_equals<T>(opt: Option<T>, other: T) -> bool
- where
- T: PartialEq,
- {
- if let Some(value) = opt {
- value == other
- } else {
- true
- }
- }
-
- let (_, _, perlasm_format) = ASM_TARGETS
- .iter()
- .find(|entry| {
- let &(entry_arch, entry_os, _) = *entry;
- entry_arch == target.arch && is_none_or_equals(entry_os, &target.os)
- })
- .unwrap();
+ let asm_target = ASM_TARGETS.iter().find(|asm_target| {
+ asm_target.arch == target.arch && asm_target.oss.contains(&target.os.as_ref())
+ });
let use_pregenerated = !target.is_git;
let warnings_are_errors = target.is_git;
@@ -366,17 +405,13 @@
out_dir
};
- let asm_srcs = if let Some(perlasm_format) = perlasm_format {
- let perlasm_src_dsts =
- perlasm_src_dsts(asm_dir, &target.arch, Some(&target.os), perlasm_format);
+ generate_prefix_symbols(target, out_dir, ring_core_prefix).unwrap();
+
+ let asm_srcs = if let Some(asm_target) = asm_target {
+ let perlasm_src_dsts = perlasm_src_dsts(asm_dir, asm_target);
if !use_pregenerated {
- perlasm(
- &perlasm_src_dsts[..],
- &target.arch,
- perlasm_format,
- Some(includes_modified),
- );
+ perlasm(&perlasm_src_dsts[..], asm_target);
}
let mut asm_srcs = asm_srcs(perlasm_src_dsts);
@@ -406,23 +441,24 @@
let test_srcs = RING_TEST_SRCS.iter().map(PathBuf::from).collect::<Vec<_>>();
let libs = [
- ("ring-core", &core_srcs[..], &asm_srcs[..]),
- ("ring-test", &test_srcs[..], &[]),
+ ("", &core_srcs[..], &asm_srcs[..]),
+ ("test", &test_srcs[..], &[]),
];
// XXX: Ideally, ring-test would only be built for `cargo test`, but Cargo
// can't do that yet.
- libs.iter().for_each(|&(lib_name, srcs, additional_srcs)| {
- build_library(
- &target,
- &out_dir,
- lib_name,
- srcs,
- additional_srcs,
- warnings_are_errors,
- includes_modified,
- )
- });
+ libs.iter()
+ .for_each(|&(lib_name_suffix, srcs, additional_srcs)| {
+ let lib_name = String::from(ring_core_prefix) + lib_name_suffix;
+ build_library(
+ &target,
+ &out_dir,
+ &lib_name,
+ srcs,
+ additional_srcs,
+ warnings_are_errors,
+ )
+ });
println!(
"cargo:rustc-link-search=native={}",
@@ -437,80 +473,65 @@
srcs: &[PathBuf],
additional_srcs: &[PathBuf],
warnings_are_errors: bool,
- includes_modified: SystemTime,
) {
// Compile all the (dirty) source files into object files.
let objs = additional_srcs
.iter()
.chain(srcs.iter())
.filter(|f| &target.env != "msvc" || f.extension().unwrap().to_str().unwrap() != "S")
- .map(|f| compile(f, target, warnings_are_errors, out_dir, includes_modified))
+ .map(|f| compile(f, target, warnings_are_errors, out_dir))
.collect::<Vec<_>>();
// Rebuild the library if necessary.
let lib_path = PathBuf::from(out_dir).join(format!("lib{}.a", lib_name));
- if objs
- .iter()
- .map(Path::new)
- .any(|p| need_run(&p, &lib_path, includes_modified))
- {
- let mut c = cc::Build::new();
+ let mut c = cc::Build::new();
- for f in LD_FLAGS {
- let _ = c.flag(&f);
- }
- match target.os.as_str() {
- "macos" => {
- let _ = c.flag("-fPIC");
- let _ = c.flag("-Wl,-dead_strip");
- }
- _ => {
- let _ = c.flag("-Wl,--gc-sections");
- }
- }
- for o in objs {
- let _ = c.object(o);
- }
-
- // Handled below.
- let _ = c.cargo_metadata(false);
-
- c.compile(
- lib_path
- .file_name()
- .and_then(|f| f.to_str())
- .expect("No filename"),
- );
+ for f in LD_FLAGS {
+ let _ = c.flag(&f);
}
+ match target.os.as_str() {
+ "macos" => {
+ let _ = c.flag("-fPIC");
+ let _ = c.flag("-Wl,-dead_strip");
+ }
+ _ => {
+ let _ = c.flag("-Wl,--gc-sections");
+ }
+ }
+ for o in objs {
+ let _ = c.object(o);
+ }
+
+ // Handled below.
+ let _ = c.cargo_metadata(false);
+
+ c.compile(
+ lib_path
+ .file_name()
+ .and_then(|f| f.to_str())
+ .expect("No filename"),
+ );
// Link the library. This works even when the library doesn't need to be
// rebuilt.
println!("cargo:rustc-link-lib=static={}", lib_name);
}
-fn compile(
- p: &Path,
- target: &Target,
- warnings_are_errors: bool,
- out_dir: &Path,
- includes_modified: SystemTime,
-) -> String {
+fn compile(p: &Path, target: &Target, warnings_are_errors: bool, out_dir: &Path) -> String {
let ext = p.extension().unwrap().to_str().unwrap();
if ext == "obj" {
p.to_str().expect("Invalid path").into()
} else {
let mut out_path = out_dir.join(p.file_name().unwrap());
assert!(out_path.set_extension(target.obj_ext));
- if need_run(&p, &out_path, includes_modified) {
- let cmd = if target.os != WINDOWS || ext != "asm" {
- cc(p, ext, target, warnings_are_errors, &out_path)
- } else {
- nasm(p, &target.arch, &out_path)
- };
+ let cmd = if target.os != WINDOWS || ext != "asm" {
+ cc(p, ext, target, warnings_are_errors, &out_path, out_dir)
+ } else {
+ nasm(p, &target.arch, &out_path, out_dir)
+ };
- run_command(cmd);
- }
+ run_command(cmd);
out_path.to_str().expect("Invalid path").into()
}
}
@@ -526,12 +547,14 @@
ext: &str,
target: &Target,
warnings_are_errors: bool,
- out_dir: &Path,
+ out_path: &Path,
+ include_dir: &Path,
) -> Command {
let is_musl = target.env.starts_with("musl");
let mut c = cc::Build::new();
let _ = c.include("include");
+ let _ = c.include(include_dir);
match ext {
"c" => {
for f in c_flags(target) {
@@ -586,7 +609,7 @@
// TODO: Expand this to non-clang compilers in 0.17.0 if practical.
if compiler.is_like_clang() {
let _ = c.flag("-nostdlibinc");
- let _ = c.define("GFp_NOSTDLIBINC", "1");
+ let _ = c.define("RING_CORE_NOSTDLIBINC", "1");
}
}
}
@@ -614,24 +637,35 @@
.arg(format!(
"{}{}",
target.obj_opt,
- out_dir.to_str().expect("Invalid path")
+ out_path.to_str().expect("Invalid path")
))
.arg(file);
c
}
-fn nasm(file: &Path, arch: &str, out_file: &Path) -> Command {
+fn nasm(file: &Path, arch: &str, out_file: &Path, include_dir: &Path) -> Command {
let oformat = match arch {
"x86_64" => ("win64"),
"x86" => ("win32"),
_ => panic!("unsupported arch: {}", arch),
};
- let mut c = Command::new("./target/tools/nasm");
+
+ // Nasm requires that the path end in a path separator.
+ let mut include_dir = include_dir.as_os_str().to_os_string();
+ include_dir.push(std::ffi::OsString::from(String::from(
+ std::path::MAIN_SEPARATOR,
+ )));
+
+ let mut c = Command::new("./target/tools/windows/nasm/nasm");
let _ = c
.arg("-o")
.arg(out_file.to_str().expect("Invalid path"))
.arg("-f")
.arg(oformat)
+ .arg("-i")
+ .arg("include/")
+ .arg("-i")
+ .arg(include_dir)
.arg("-Xgnu")
.arg("-gcv8")
.arg(file);
@@ -665,17 +699,12 @@
.collect::<Vec<_>>()
}
-fn perlasm_src_dsts(
- out_dir: &Path,
- arch: &str,
- os: Option<&str>,
- perlasm_format: &str,
-) -> Vec<(PathBuf, PathBuf)> {
- let srcs = sources_for_arch(arch);
+fn perlasm_src_dsts(out_dir: &Path, asm_target: &AsmTarget) -> Vec<(PathBuf, PathBuf)> {
+ let srcs = sources_for_arch(asm_target.arch);
let mut src_dsts = srcs
.iter()
.filter(|p| is_perlasm(p))
- .map(|src| (src.clone(), asm_path(out_dir, src, os, perlasm_format)))
+ .map(|src| (src.clone(), asm_path(out_dir, src, asm_target)))
.collect::<Vec<_>>();
// Some PerlAsm source files need to be run multiple times with different
@@ -688,7 +717,7 @@
let synthesized_path = PathBuf::from(synthesized);
src_dsts.push((
concrete_path,
- asm_path(out_dir, &synthesized_path, os, perlasm_format),
+ asm_path(out_dir, &synthesized_path, asm_target),
))
}
};
@@ -710,32 +739,23 @@
path.extension().unwrap().to_str().unwrap() == "pl"
}
-fn asm_path(out_dir: &Path, src: &Path, os: Option<&str>, perlasm_format: &str) -> PathBuf {
+fn asm_path(out_dir: &Path, src: &Path, asm_target: &AsmTarget) -> PathBuf {
let src_stem = src.file_stem().expect("source file without basename");
let dst_stem = src_stem.to_str().unwrap();
- let dst_extension = if os == Some("windows") { "asm" } else { "S" };
- let dst_filename = format!("{}-{}.{}", dst_stem, perlasm_format, dst_extension);
+ let dst_filename = format!(
+ "{}-{}.{}",
+ dst_stem, asm_target.perlasm_format, asm_target.asm_extension
+ );
out_dir.join(dst_filename)
}
-fn perlasm(
- src_dst: &[(PathBuf, PathBuf)],
- arch: &str,
- perlasm_format: &str,
- includes_modified: Option<SystemTime>,
-) {
+fn perlasm(src_dst: &[(PathBuf, PathBuf)], asm_target: &AsmTarget) {
for (src, dst) in src_dst {
- if let Some(includes_modified) = includes_modified {
- if !need_run(src, dst, includes_modified) {
- continue;
- }
- }
-
let mut args = Vec::<String>::new();
args.push(src.to_string_lossy().into_owned());
- args.push(perlasm_format.to_owned());
- if arch == "x86" {
+ args.push(asm_target.perlasm_format.to_owned());
+ if asm_target.arch == "x86" {
args.push("-fPIC".into());
args.push("-DOPENSSL_IA32_SSE2".into());
}
@@ -750,57 +770,29 @@
}
}
-fn need_run(source: &Path, target: &Path, includes_modified: SystemTime) -> bool {
- let s_modified = file_modified(source);
- if let Ok(target_metadata) = std::fs::metadata(target) {
- let target_modified = target_metadata.modified().unwrap();
- s_modified >= target_modified || includes_modified >= target_modified
- } else {
- // On error fetching metadata for the target file, assume the target
- // doesn't exist.
- true
- }
+fn get_command(var: &'static str, default: &str) -> String {
+ read_env_var(var).unwrap_or_else(|_| default.into())
}
-fn file_modified(path: &Path) -> SystemTime {
- let path = Path::new(path);
- let path_as_str = format!("{:?}", path);
- std::fs::metadata(path)
- .expect(&path_as_str)
- .modified()
- .expect("nah")
-}
-
-fn get_command(var: &str, default: &str) -> String {
- std::env::var(var).unwrap_or_else(|_| default.into())
-}
-
-fn check_all_files_tracked() {
+// TODO: We should emit `cargo:rerun-if-changed-env` for the various
+// environment variables that affect the build.
+fn emit_rerun_if_changed() {
for path in &["crypto", "include", "third_party/fiat"] {
- walk_dir(&PathBuf::from(path), &is_tracked);
+ walk_dir(&PathBuf::from(path), &|entry| {
+ let path = entry.path();
+ match path.extension().and_then(|ext| ext.to_str()) {
+ Some("c") | Some("S") | Some("h") | Some("inl") | Some("pl") | None => {
+ println!("cargo:rerun-if-changed={}", path.to_str().unwrap());
+ }
+ _ => {
+ // Ignore other types of files.
+ }
+ }
+ })
}
}
-fn is_tracked(file: &DirEntry) {
- let p = file.path();
- let cmp = |f| p == PathBuf::from(f);
- let tracked = match p.extension().and_then(|p| p.to_str()) {
- Some("h") | Some("inl") => RING_INCLUDES.iter().any(cmp),
- Some("c") | Some("S") | Some("asm") => {
- RING_SRCS.iter().any(|(_, f)| cmp(f)) || RING_TEST_SRCS.iter().any(cmp)
- }
- Some("pl") => RING_SRCS.iter().any(|(_, f)| cmp(f)) || RING_PERL_INCLUDES.iter().any(cmp),
- _ => true,
- };
- if !tracked {
- panic!("{:?} is not tracked in build.rs", p);
- }
-}
-
-fn walk_dir<F>(dir: &Path, cb: &F)
-where
- F: Fn(&DirEntry),
-{
+fn walk_dir(dir: &Path, cb: &impl Fn(&DirEntry)) {
if dir.is_dir() {
for entry in fs::read_dir(dir).unwrap() {
let entry = entry.unwrap();
@@ -813,3 +805,210 @@
}
}
}
+
+fn ring_core_prefix() -> String {
+ let links = std::env::var("CARGO_MANIFEST_LINKS").unwrap();
+
+ let computed = {
+ let name = std::env::var("CARGO_PKG_NAME").unwrap();
+ let version = std::env::var("CARGO_PKG_VERSION").unwrap();
+ name + "_core_" + &version.replace(&['-', '.'][..], "_")
+ };
+
+ assert_eq!(links, computed);
+
+ links + "_"
+}
+
+/// Creates the necessary header file for symbol renaming and returns the path of the
+/// generated include directory.
+fn generate_prefix_symbols(
+ target: &Target,
+ out_dir: &Path,
+ prefix: &str,
+) -> Result<(), std::io::Error> {
+ generate_prefix_symbols_header(out_dir, "prefix_symbols.h", '#', None, prefix)?;
+
+ if target.os == "windows" {
+ let _ = generate_prefix_symbols_nasm(out_dir, prefix)?;
+ } else {
+ generate_prefix_symbols_header(
+ out_dir,
+ "prefix_symbols_asm.h",
+ '#',
+ Some("#if defined(__APPLE__)"),
+ prefix,
+ )?;
+ }
+
+ Ok(())
+}
+
+fn generate_prefix_symbols_nasm(out_dir: &Path, prefix: &str) -> Result<(), std::io::Error> {
+ generate_prefix_symbols_header(
+ out_dir,
+ "prefix_symbols_nasm.inc",
+ '%',
+ Some("%ifidn __OUTPUT_FORMAT__,win32"),
+ prefix,
+ )
+}
+
+fn generate_prefix_symbols_header(
+ out_dir: &Path,
+ filename: &str,
+ pp: char,
+ prefix_condition: Option<&str>,
+ prefix: &str,
+) -> Result<(), std::io::Error> {
+ let dir = out_dir.join("ring_core_generated");
+ std::fs::create_dir_all(&dir)?;
+
+ let path = dir.join(filename);
+ let mut file = std::fs::File::create(&path)?;
+
+ let filename_ident = filename.replace(".", "_").to_uppercase();
+ writeln!(
+ file,
+ r#"
+{pp}ifndef ring_core_generated_{filename_ident}
+{pp}define ring_core_generated_{filename_ident}
+"#,
+ pp = pp,
+ filename_ident = filename_ident
+ )?;
+
+ if let Some(prefix_condition) = prefix_condition {
+ writeln!(file, "{}", prefix_condition)?;
+ writeln!(file, "{}", prefix_all_symbols(pp, "_", prefix))?;
+ writeln!(file, "{pp}else", pp = pp)?;
+ };
+ writeln!(file, "{}", prefix_all_symbols(pp, "", prefix))?;
+ if prefix_condition.is_some() {
+ writeln!(file, "{pp}endif", pp = pp)?
+ }
+
+ writeln!(file, "{pp}endif", pp = pp)?;
+
+ Ok(())
+}
+
+fn prefix_all_symbols(pp: char, prefix_prefix: &str, prefix: &str) -> String {
+ static SYMBOLS_TO_PREFIX: &[&str] = &[
+ "CRYPTO_poly1305_finish",
+ "CRYPTO_poly1305_finish_neon",
+ "CRYPTO_poly1305_init",
+ "CRYPTO_poly1305_init_neon",
+ "CRYPTO_poly1305_update",
+ "CRYPTO_poly1305_update_neon",
+ "ChaCha20_ctr32",
+ "LIMBS_add_mod",
+ "LIMBS_are_even",
+ "LIMBS_are_zero",
+ "LIMBS_equal",
+ "LIMBS_equal_limb",
+ "LIMBS_less_than",
+ "LIMBS_less_than_limb",
+ "LIMBS_reduce_once",
+ "LIMBS_select_512_32",
+ "LIMBS_shl_mod",
+ "LIMBS_sub_mod",
+ "LIMBS_window5_split_window",
+ "LIMBS_window5_unsplit_window",
+ "LIMB_shr",
+ "OPENSSL_armcap_P",
+ "OPENSSL_cpuid_setup",
+ "OPENSSL_ia32cap_P",
+ "OPENSSL_memcmp",
+ "RSA_padding_check_oaep",
+ "aes_hw_ctr32_encrypt_blocks",
+ "aes_hw_encrypt",
+ "aes_hw_set_encrypt_key",
+ "aes_nohw_ctr32_encrypt_blocks",
+ "aes_nohw_encrypt",
+ "aes_nohw_set_encrypt_key",
+ "aesni_gcm_decrypt",
+ "aesni_gcm_encrypt",
+ "bn_from_montgomery",
+ "bn_from_montgomery_in_place",
+ "bn_gather5",
+ "bn_mul_mont",
+ "bn_mul_mont_gather5",
+ "bn_neg_inv_mod_r_u64",
+ "bn_power5",
+ "bn_scatter5",
+ "bn_sqr8x_internal",
+ "bn_sqrx8x_internal",
+ "bsaes_ctr32_encrypt_blocks",
+ "bssl_constant_time_test_main",
+ "chacha20_poly1305_open",
+ "chacha20_poly1305_seal",
+ "gcm_ghash_avx",
+ "gcm_ghash_clmul",
+ "gcm_ghash_neon",
+ "gcm_gmult_clmul",
+ "gcm_gmult_neon",
+ "gcm_init_avx",
+ "gcm_init_clmul",
+ "gcm_init_neon",
+ "limbs_mul_add_limb",
+ "little_endian_bytes_from_scalar",
+ "nistz256_neg",
+ "nistz256_select_w5",
+ "nistz256_select_w7",
+ "nistz384_point_add",
+ "nistz384_point_double",
+ "nistz384_point_mul",
+ "p256_mul_mont",
+ "p256_point_add",
+ "p256_point_add_affine",
+ "p256_point_double",
+ "p256_point_mul",
+ "p256_point_mul_base",
+ "p256_scalar_mul_mont",
+ "p256_scalar_sqr_rep_mont",
+ "p256_sqr_mont",
+ "p384_elem_div_by_2",
+ "p384_elem_mul_mont",
+ "p384_elem_neg",
+ "p384_elem_sub",
+ "p384_scalar_mul_mont",
+ "poly1305_neon2_addmulmod",
+ "poly1305_neon2_blocks",
+ "sha256_block_data_order",
+ "sha512_block_data_order",
+ "vpaes_ctr32_encrypt_blocks",
+ "vpaes_encrypt",
+ "vpaes_encrypt_key_to_bsaes",
+ "vpaes_set_encrypt_key",
+ "x25519_NEON",
+ "x25519_fe_invert",
+ "x25519_fe_isnegative",
+ "x25519_fe_mul_ttt",
+ "x25519_fe_neg",
+ "x25519_fe_tobytes",
+ "x25519_ge_double_scalarmult_vartime",
+ "x25519_ge_frombytes_vartime",
+ "x25519_ge_scalarmult_base",
+ "x25519_public_from_private_generic_masked",
+ "x25519_sc_mask",
+ "x25519_sc_muladd",
+ "x25519_sc_reduce",
+ "x25519_scalar_mult_generic_masked",
+ ];
+
+ let mut out = String::new();
+
+ for symbol in SYMBOLS_TO_PREFIX {
+ let line = format!(
+ "{pp}define {prefix_prefix}{symbol} {prefix_prefix}{prefix}{symbol}\n",
+ pp = pp,
+ prefix_prefix = prefix_prefix,
+ prefix = prefix,
+ symbol = symbol
+ );
+ out += &line;
+ }
+
+ out
+}
diff --git a/cargo2android.json b/cargo2android.json
index 7dc276f..ae417f7 100644
--- a/cargo2android.json
+++ b/cargo2android.json
@@ -8,6 +8,7 @@
"device": true,
"features": "alloc,default,dev_urandom_fallback,once_cell,std",
"min-sdk-version": "29",
+ "patch": "patches/Android.bp.patch",
"run": true,
"tests": true,
"whole-static-libs": [
diff --git a/cargo2android_cc.bp b/cargo2android_cc.bp
index 918cfbe..c1d5e67 100644
--- a/cargo2android_cc.bp
+++ b/cargo2android_cc.bp
@@ -9,9 +9,10 @@
"crypto/poly1305/poly1305_vec.c",
"crypto/curve25519/curve25519.c",
"crypto/fipsmodule/ec/ecp_nistz.c",
- "crypto/fipsmodule/ec/ecp_nistz256.c",
"crypto/fipsmodule/ec/gfp_p256.c",
"crypto/fipsmodule/ec/gfp_p384.c",
+ "crypto/fipsmodule/ec/p256.c",
+ "crypto/fipsmodule/rsa/padding.c",
"crypto/limbs/limbs.c",
"crypto/mem.c",
"crypto/fipsmodule/bn/montgomery.c",
@@ -27,7 +28,6 @@
"crypto/curve25519/asm/x25519-asm-arm.S",
"pregenerated/sha256-armv4-linux32.S",
"pregenerated/sha512-armv4-linux32.S",
- "pregenerated/ecp_nistz256-armv4-linux32.S",
"pregenerated/aesv8-armx-linux32.S",
"pregenerated/bsaes-armv7-linux32.S",
"pregenerated/ghashv8-armx-linux32.S",
@@ -41,7 +41,6 @@
"pregenerated/aesv8-armx-linux64.S",
"pregenerated/armv8-mont-linux64.S",
"pregenerated/chacha-armv8-linux64.S",
- "pregenerated/ecp_nistz256-armv8-linux64.S",
"pregenerated/ghash-neon-armv8-linux64.S",
"pregenerated/ghashv8-armx-linux64.S",
"pregenerated/sha256-armv8-linux64.S",
@@ -53,7 +52,6 @@
srcs: [
"pregenerated/aesni-x86-elf.S",
"pregenerated/chacha-x86-elf.S",
- "pregenerated/ecp_nistz256-x86-elf.S",
"pregenerated/ghash-x86-elf.S",
"pregenerated/vpaes-x86-elf.S",
"pregenerated/x86-mont-elf.S",
@@ -61,6 +59,7 @@
},
x86_64: {
srcs: [
+ "crypto/fipsmodule/ec/p256-x86_64.c",
"pregenerated/aesni-gcm-x86_64-elf.S",
"pregenerated/aesni-x86_64-elf.S",
"pregenerated/chacha-x86_64-elf.S",
@@ -74,6 +73,9 @@
"pregenerated/x86_64-mont-elf.S",
],
},
+ riscv64: {
+ cflags: ["-DOPENSSL_NO_ASM"],
+ },
},
cflags: [
@@ -108,4 +110,4 @@
"com.android.resolv",
],
min_sdk_version: "29",
-}
\ No newline at end of file
+}
diff --git a/crypto/chacha/asm/chacha-armv4.pl b/crypto/chacha/asm/chacha-armv4.pl
index 90fa2c7..bb63413 100644
--- a/crypto/chacha/asm/chacha-armv4.pl
+++ b/crypto/chacha/asm/chacha-armv4.pl
@@ -171,7 +171,7 @@
}
$code.=<<___;
-#include <GFp/arm_arch.h>
+#include <ring-core/arm_arch.h>
@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both
@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions.
@@ -197,18 +197,18 @@
.Lone:
.long 1,0,0,0
#if __ARM_MAX_ARCH__>=7
-.extern GFp_armcap_P
-.hidden GFp_armcap_P
+.extern OPENSSL_armcap_P
+.hidden OPENSSL_armcap_P
.LOPENSSL_armcap:
-.word GFp_armcap_P-.LChaCha20_ctr32
+.word OPENSSL_armcap_P-.LChaCha20_ctr32
#else
.word -1
#endif
-.globl GFp_ChaCha20_ctr32
-.type GFp_ChaCha20_ctr32,%function
+.globl ChaCha20_ctr32
+.type ChaCha20_ctr32,%function
.align 5
-GFp_ChaCha20_ctr32:
+ChaCha20_ctr32:
.LChaCha20_ctr32:
ldr r12,[sp,#0] @ pull pointer to counter and nonce
stmdb sp!,{r0-r2,r4-r11,lr}
@@ -630,7 +630,7 @@
add sp,sp,#4*(32+3)
.Lno_data:
ldmia sp!,{r4-r11,pc}
-.size GFp_ChaCha20_ctr32,.-GFp_ChaCha20_ctr32
+.size ChaCha20_ctr32,.-ChaCha20_ctr32
___
{{{
diff --git a/crypto/chacha/asm/chacha-armv8.pl b/crypto/chacha/asm/chacha-armv8.pl
index 80ec882..f40d66a 100644
--- a/crypto/chacha/asm/chacha-armv8.pl
+++ b/crypto/chacha/asm/chacha-armv8.pl
@@ -120,10 +120,10 @@
}
$code.=<<___;
-#include <GFp/arm_arch.h>
+#include <ring-core/arm_arch.h>
-.extern GFp_armcap_P
-.hidden GFp_armcap_P
+.extern OPENSSL_armcap_P
+.hidden OPENSSL_armcap_P
.section .rodata
@@ -136,20 +136,20 @@
.text
-.globl GFp_ChaCha20_ctr32
-.type GFp_ChaCha20_ctr32,%function
+.globl ChaCha20_ctr32
+.type ChaCha20_ctr32,%function
.align 5
-GFp_ChaCha20_ctr32:
+ChaCha20_ctr32:
AARCH64_VALID_CALL_TARGET
cbz $len,.Labort
#if __has_feature(hwaddress_sanitizer) && __clang_major__ >= 10
- adrp @x[0],:pg_hi21_nc:GFp_armcap_P
+ adrp @x[0],:pg_hi21_nc:OPENSSL_armcap_P
#else
- adrp @x[0],:pg_hi21:GFp_armcap_P
+ adrp @x[0],:pg_hi21:OPENSSL_armcap_P
#endif
cmp $len,#192
b.lo .Lshort
- ldr w17,[@x[0],:lo12:GFp_armcap_P]
+ ldr w17,[@x[0],:lo12:OPENSSL_armcap_P]
tst w17,#ARMV7_NEON
b.ne ChaCha20_neon
@@ -334,7 +334,7 @@
ldp x29,x30,[sp],#96
AARCH64_VALIDATE_LINK_REGISTER
ret
-.size GFp_ChaCha20_ctr32,.-GFp_ChaCha20_ctr32
+.size ChaCha20_ctr32,.-ChaCha20_ctr32
___
{{{
diff --git a/crypto/chacha/asm/chacha-x86.pl b/crypto/chacha/asm/chacha-x86.pl
index 599a38e..ffe2990 100644
--- a/crypto/chacha/asm/chacha-x86.pl
+++ b/crypto/chacha/asm/chacha-x86.pl
@@ -118,7 +118,7 @@
&static_label("ssse3_data");
&static_label("pic_point");
-&function_begin("GFp_ChaCha20_ctr32");
+&function_begin("ChaCha20_ctr32");
&xor ("eax","eax");
&cmp ("eax",&wparam(2)); # len==0?
&je (&label("no_data"));
@@ -126,7 +126,7 @@
&call (&label("pic_point"));
&set_label("pic_point");
&blindpop("eax");
- &picmeup("ebp","GFp_ia32cap_P","eax",&label("pic_point"));
+ &picmeup("ebp","OPENSSL_ia32cap_P","eax",&label("pic_point"));
&test (&DWP(0,"ebp"),1<<24); # test FXSR bit
&jz (&label("x86"));
&test (&DWP(4,"ebp"),1<<9); # test SSSE3 bit
@@ -356,7 +356,7 @@
&set_label("done");
&stack_pop(33);
&set_label("no_data");
-&function_end("GFp_ChaCha20_ctr32");
+&function_end("ChaCha20_ctr32");
if ($xmm) {
my ($xa,$xa_,$xb,$xb_,$xc,$xc_,$xd,$xd_)=map("xmm$_",(0..7));
diff --git a/crypto/chacha/asm/chacha-x86_64.pl b/crypto/chacha/asm/chacha-x86_64.pl
index c85bfa8..41eeb8e 100644
--- a/crypto/chacha/asm/chacha-x86_64.pl
+++ b/crypto/chacha/asm/chacha-x86_64.pl
@@ -76,7 +76,7 @@
$code.=<<___;
.text
-.extern GFp_ia32cap_P
+.extern OPENSSL_ia32cap_P
.align 64
.Lzero:
@@ -224,14 +224,14 @@
########################################################################
# Generic code path that handles all lengths on pre-SSSE3 processors.
$code.=<<___;
-.globl GFp_ChaCha20_ctr32
-.type GFp_ChaCha20_ctr32,\@function,5
+.globl ChaCha20_ctr32
+.type ChaCha20_ctr32,\@function,5
.align 64
-GFp_ChaCha20_ctr32:
+ChaCha20_ctr32:
.cfi_startproc
cmp \$0,$len
je .Lno_data
- mov GFp_ia32cap_P+4(%rip),%r10
+ mov OPENSSL_ia32cap_P+4(%rip),%r10
___
$code.=<<___;
test \$`1<<(41-32)`,%r10d
@@ -408,7 +408,7 @@
.Lno_data:
ret
.cfi_endproc
-.size GFp_ChaCha20_ctr32,.-GFp_ChaCha20_ctr32
+.size ChaCha20_ctr32,.-ChaCha20_ctr32
___
########################################################################
@@ -713,7 +713,7 @@
mov %r10,%r11
___
$code.=<<___ if ($avx>1);
- shr \$32,%r10 # GFp_ia32cap_P+8
+ shr \$32,%r10 # OPENSSL_ia32cap_P+8
test \$`1<<5`,%r10 # test AVX2
jnz .LChaCha20_8x
___
@@ -1982,9 +1982,9 @@
.section .pdata
.align 4
- .rva .LSEH_begin_GFp_ChaCha20_ctr32
- .rva .LSEH_end_GFp_ChaCha20_ctr32
- .rva .LSEH_info_GFp_ChaCha20_ctr32
+ .rva .LSEH_begin_ChaCha20_ctr32
+ .rva .LSEH_end_ChaCha20_ctr32
+ .rva .LSEH_info_ChaCha20_ctr32
.rva .LSEH_begin_ChaCha20_ssse3
.rva .LSEH_end_ChaCha20_ssse3
@@ -2002,7 +2002,7 @@
$code.=<<___;
.section .xdata
.align 8
-.LSEH_info_GFp_ChaCha20_ctr32:
+.LSEH_info_ChaCha20_ctr32:
.byte 9,0,0,0
.rva se_handler
diff --git a/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl b/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
index 017570b..aa42c67 100644
--- a/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
+++ b/crypto/cipher_extra/asm/chacha20_poly1305_x86_64.pl
@@ -38,7 +38,7 @@
$code.=<<___;
.text
-.extern GFp_ia32cap_P
+.extern OPENSSL_ia32cap_P
chacha20_poly1305_constants:
@@ -436,16 +436,16 @@
{
################################################################################
-# void GFp_chacha20_poly1305_open(uint8_t *out_plaintext, const uint8_t *ciphertext,
-# size_t plaintext_len, const uint8_t *ad,
-# size_t ad_len,
-# union chacha20_poly1305_open_data *aead_data)
+# void chacha20_poly1305_open(uint8_t *out_plaintext, const uint8_t *ciphertext,
+# size_t plaintext_len, const uint8_t *ad,
+# size_t ad_len,
+# union chacha20_poly1305_open_data *aead_data)
#
$code.="
-.globl GFp_chacha20_poly1305_open
-.type GFp_chacha20_poly1305_open,\@function,6
+.globl chacha20_poly1305_open
+.type chacha20_poly1305_open,\@function,6
.align 64
-GFp_chacha20_poly1305_open:
+chacha20_poly1305_open:
.cfi_startproc
push %rbp
.cfi_push %rbp
@@ -484,7 +484,7 @@
mov $adl, 0+$len_store
mov $inl, 8+$len_store\n";
$code.="
- mov GFp_ia32cap_P+8(%rip), %eax
+ mov OPENSSL_ia32cap_P+8(%rip), %eax
and \$`(1<<5) + (1<<8)`, %eax # Check both BMI2 and AVX2 are present
xor \$`(1<<5) + (1<<8)`, %eax
jz chacha20_poly1305_open_avx2\n" if ($avx>1);
@@ -855,18 +855,19 @@
movdqa $C2, $B2
movdqa $D2, $C2
jmp .Lopen_sse_128_xor_hash
-.size GFp_chacha20_poly1305_open, .-GFp_chacha20_poly1305_open
+.size chacha20_poly1305_open, .-chacha20_poly1305_open
.cfi_endproc
################################################################################
-# void GFp_chacha20_poly1305_seal(uint8_t *out_ciphertext, const uint8_t *plaintext,
-# size_t plaintext_len, const uint8_t *ad,
-# size_t ad_len,
-# union chacha20_poly1305_seal_data *data);
-.globl GFp_chacha20_poly1305_seal
-.type GFp_chacha20_poly1305_seal,\@function,6
+################################################################################
+# void chacha20_poly1305_seal(uint8_t *out_ciphertext, const uint8_t *plaintext,
+# size_t plaintext_len, const uint8_t *ad,
+# size_t ad_len,
+# union chacha20_poly1305_seal_data *data);
+.globl chacha20_poly1305_seal
+.type chacha20_poly1305_seal,\@function,6
.align 64
-GFp_chacha20_poly1305_seal:
+chacha20_poly1305_seal:
.cfi_startproc
push %rbp
.cfi_push %rbp
@@ -879,7 +880,7 @@
push %r14
.cfi_push %r14
push %r15
-.cfi_push %r15
+.cfi_push %r15
# We write the calculated authenticator back to keyp at the end, so save
# the pointer on the stack too.
push $keyp
@@ -906,7 +907,7 @@
mov $inl, 8+$len_store
mov %rdx, $inl\n";
$code.="
- mov GFp_ia32cap_P+8(%rip), %eax
+ mov OPENSSL_ia32cap_P+8(%rip), %eax
and \$`(1<<5) + (1<<8)`, %eax # Check both BMI2 and AVX2 are present
xor \$`(1<<5) + (1<<8)`, %eax
jz chacha20_poly1305_seal_avx2\n" if ($avx>1);
@@ -1366,7 +1367,7 @@
mov %r8, $itr2
call poly_hash_ad_internal
jmp .Lseal_sse_128_tail_xor
-.size GFp_chacha20_poly1305_seal, .-GFp_chacha20_poly1305_seal
+.size chacha20_poly1305_seal, .-chacha20_poly1305_seal
.cfi_endproc\n";
}
@@ -1709,7 +1710,7 @@
# Hash and decrypt 512 bytes each iteration
cmp \$16*32, $inl
jb .Lopen_avx2_main_loop_done\n";
- &prep_state_avx2(4); $code.="
+ &prep_state_avx2(4); $code.="
xor $itr1, $itr1
.Lopen_avx2_main_loop_rounds: \n";
&poly_add("0*8($inp,$itr1)");
diff --git a/crypto/cpu-intel.c b/crypto/cpu-intel.c
index adaff7a..b563ea1 100644
--- a/crypto/cpu-intel.c
+++ b/crypto/cpu-intel.c
@@ -54,7 +54,7 @@
* copied and put under another distribution licence
* [including the GNU Public Licence.] */
-#include <GFp/cpu.h>
+#include <ring-core/cpu.h>
#if !defined(OPENSSL_NO_ASM) && (defined(OPENSSL_X86) || defined(OPENSSL_X86_64))
@@ -107,7 +107,7 @@
//
// See https://software.intel.com/en-us/articles/how-to-detect-new-instruction-support-in-the-4th-generation-intel-core-processor-family
static uint64_t OPENSSL_xgetbv(uint32_t xcr) {
-#if defined(_MSC_VER) && !defined(__clang__)
+#if defined(_MSC_VER)
return (uint64_t)_xgetbv(xcr);
#else
uint32_t eax, edx;
@@ -116,7 +116,7 @@
#endif
}
-void GFp_cpuid_setup(void) {
+void OPENSSL_cpuid_setup(void) {
// Determine the vendor and maximum input value.
uint32_t eax, ebx, ecx, edx;
OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0);
@@ -194,10 +194,10 @@
extended_features[0] &= ~(1u << 19);
}
- GFp_ia32cap_P[0] = edx;
- GFp_ia32cap_P[1] = ecx;
- GFp_ia32cap_P[2] = extended_features[0];
- GFp_ia32cap_P[3] = extended_features[1];
+ OPENSSL_ia32cap_P[0] = edx;
+ OPENSSL_ia32cap_P[1] = ecx;
+ OPENSSL_ia32cap_P[2] = extended_features[0];
+ OPENSSL_ia32cap_P[3] = extended_features[1];
}
#endif // !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64)
diff --git a/crypto/crypto.c b/crypto/crypto.c
index 8a3d066..7caecc5 100644
--- a/crypto/crypto.c
+++ b/crypto/crypto.c
@@ -12,7 +12,7 @@
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-#include <GFp/cpu.h>
+#include <ring-core/cpu.h>
#include "internal.h"
// Our assembly does not use the GOT to reference symbols, which means
@@ -34,5 +34,5 @@
// archive, linking on OS X will fail to resolve common symbols. By
// initialising it to zero, it becomes a "data symbol", which isn't so
// affected.
-HIDDEN uint32_t GFp_ia32cap_P[4] = {0};
+HIDDEN uint32_t OPENSSL_ia32cap_P[4] = {0};
#endif
diff --git a/crypto/curve25519/asm/x25519-asm-arm.S b/crypto/curve25519/asm/x25519-asm-arm.S
index 5f3e921..c2f6122 100644
--- a/crypto/curve25519/asm/x25519-asm-arm.S
+++ b/crypto/curve25519/asm/x25519-asm-arm.S
@@ -25,20 +25,16 @@
#if !defined(OPENSSL_NO_ASM) && defined(__arm__) && !defined(__APPLE__)
-#if defined(BORINGSSL_PREFIX)
-#include <boringssl_prefix_symbols_asm.h>
-#endif
+#include "ring_core_generated/prefix_symbols_asm.h"
.fpu neon
.text
.align 4
-.global GFp_x25519_NEON
-
-.hidden GFp_x25519_NEON
-.type GFp_x25519_NEON, %function
-GFp_x25519_NEON:
-
+.global x25519_NEON
+.hidden x25519_NEON
+.type x25519_NEON, %function
+x25519_NEON:
vpush {q4,q5,q6,q7}
mov r12,sp
sub sp,sp,#736
diff --git a/crypto/curve25519/curve25519.c b/crypto/curve25519/curve25519.c
index 30afff0..0b8b526 100644
--- a/crypto/curve25519/curve25519.c
+++ b/crypto/curve25519/curve25519.c
@@ -19,7 +19,7 @@
//
// The field functions are shared by Ed25519 and X25519 where possible.
-#include <GFp/mem.h>
+#include <ring-core/mem.h>
#include "internal.h"
#include "../internal.h"
@@ -159,7 +159,7 @@
static void fe_frombytes(fe *h, const uint8_t s[32]) {
uint8_t s_copy[32];
- GFp_memcpy(s_copy, s, 32);
+ OPENSSL_memcpy(s_copy, s, 32);
s_copy[31] &= 0x7f;
fe_frombytes_strict(h, s_copy);
}
@@ -171,21 +171,21 @@
// h = 0
static void fe_0(fe *h) {
- GFp_memset(h, 0, sizeof(fe));
+ OPENSSL_memset(h, 0, sizeof(fe));
}
static void fe_loose_0(fe_loose *h) {
- GFp_memset(h, 0, sizeof(fe_loose));
+ OPENSSL_memset(h, 0, sizeof(fe_loose));
}
// h = 1
static void fe_1(fe *h) {
- GFp_memset(h, 0, sizeof(fe));
+ OPENSSL_memset(h, 0, sizeof(fe));
h->v[0] = 1;
}
static void fe_loose_1(fe_loose *h) {
- GFp_memset(h, 0, sizeof(fe_loose));
+ OPENSSL_memset(h, 0, sizeof(fe_loose));
h->v[0] = 1;
}
@@ -392,7 +392,7 @@
fe_tobytes(s, &tight);
static const uint8_t zero[32] = {0};
- return GFp_memcmp(s, zero, sizeof(zero)) != 0;
+ return OPENSSL_memcmp(s, zero, sizeof(zero)) != 0;
}
// return 1 if f is in {1,3,5,...,q-2}
@@ -473,7 +473,7 @@
// Group operations.
-int GFp_x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]) {
+int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t s[32]) {
fe u;
fe_loose v;
fe v3;
@@ -779,7 +779,7 @@
//
// Preconditions:
// a[31] <= 127
-void GFp_x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
+void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
signed char e[64];
signed char carry;
ge_p1p1 r;
@@ -952,7 +952,7 @@
// s[0]+256*s[1]+...+256^31*s[31] = s mod l
// where l = 2^252 + 27742317777372353535851937790883648493.
// Overwrites s in place.
-void GFp_x25519_sc_reduce(uint8_t s[64]) {
+void x25519_sc_reduce(uint8_t s[64]) {
int64_t s0 = 2097151 & load_3(s);
int64_t s1 = 2097151 & (load_4(s + 2) >> 5);
int64_t s2 = 2097151 & (load_3(s + 5) >> 2);
@@ -1775,14 +1775,14 @@
}
-void GFp_x25519_scalar_mult_generic_masked(uint8_t out[32],
+void x25519_scalar_mult_generic_masked(uint8_t out[32],
const uint8_t scalar_masked[32],
const uint8_t point[32]) {
fe x1, x2, z2, x3, z3, tmp0, tmp1;
fe_loose x2l, z2l, x3l, tmp0l, tmp1l;
uint8_t e[32];
- GFp_memcpy(e, scalar_masked, 32);
+ OPENSSL_memcpy(e, scalar_masked, 32);
// The following implementation was transcribed to Coq and proven to
// correspond to unary scalar multiplication in affine coordinates given that
// x1 != 0 is the x coordinate of some point on the curve. It was also checked
@@ -1853,13 +1853,13 @@
fe_tobytes(out, &x2);
}
-void GFp_x25519_public_from_private_generic_masked(uint8_t out_public_value[32],
+void x25519_public_from_private_generic_masked(uint8_t out_public_value[32],
const uint8_t private_key_masked[32]) {
uint8_t e[32];
- GFp_memcpy(e, private_key_masked, 32);
+ OPENSSL_memcpy(e, private_key_masked, 32);
ge_p3 A;
- GFp_x25519_ge_scalarmult_base(&A, e);
+ x25519_ge_scalarmult_base(&A, e);
// We only need the u-coordinate of the curve25519 point. The map is
// u=(y+1)/(1-y). Since y=Y/Z, this gives u=(Z+Y)/(Z-Y).
@@ -1872,40 +1872,40 @@
fe_tobytes(out_public_value, &zminusy_inv);
}
-void GFp_x25519_fe_invert(fe *out, const fe *z) {
+void x25519_fe_invert(fe *out, const fe *z) {
fe_invert(out, z);
}
-uint8_t GFp_x25519_fe_isnegative(const fe *f) {
+uint8_t x25519_fe_isnegative(const fe *f) {
return (uint8_t)fe_isnegative(f);
}
-void GFp_x25519_fe_mul_ttt(fe *h, const fe *f, const fe *g) {
+void x25519_fe_mul_ttt(fe *h, const fe *f, const fe *g) {
fe_mul_ttt(h, f, g);
}
-void GFp_x25519_fe_neg(fe *f) {
+void x25519_fe_neg(fe *f) {
fe_loose t;
fe_neg(&t, f);
fe_carry(f, &t);
}
-void GFp_x25519_fe_tobytes(uint8_t s[32], const fe *h) {
+void x25519_fe_tobytes(uint8_t s[32], const fe *h) {
fe_tobytes(s, h);
}
-void GFp_x25519_ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
+void x25519_ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
const ge_p3 *A, const uint8_t *b) {
ge_double_scalarmult_vartime(r, a, A, b);
}
-void GFp_x25519_sc_mask(uint8_t a[32]) {
+void x25519_sc_mask(uint8_t a[32]) {
a[0] &= 248;
a[31] &= 127;
a[31] |= 64;
}
-void GFp_x25519_sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b,
+void x25519_sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b,
const uint8_t *c) {
sc_muladd(s, a, b, c);
}
diff --git a/crypto/curve25519/internal.h b/crypto/curve25519/internal.h
index 60f2f61..b040d2e 100644
--- a/crypto/curve25519/internal.h
+++ b/crypto/curve25519/internal.h
@@ -15,7 +15,7 @@
#ifndef OPENSSL_HEADER_CURVE25519_INTERNAL_H
#define OPENSSL_HEADER_CURVE25519_INTERNAL_H
-#include <GFp/base.h>
+#include <ring-core/base.h>
#include "../internal.h"
@@ -24,7 +24,7 @@
#define BORINGSSL_X25519_NEON
// x25519_NEON is defined in asm/x25519-arm.S.
-void GFp_x25519_NEON(uint8_t out[32], const uint8_t scalar[32],
+void x25519_NEON(uint8_t out[32], const uint8_t scalar[32],
const uint8_t point[32]);
#endif
diff --git a/crypto/fipsmodule/aes/aes_nohw.c b/crypto/fipsmodule/aes/aes_nohw.c
index 19b019e..a6306f0 100644
--- a/crypto/fipsmodule/aes/aes_nohw.c
+++ b/crypto/fipsmodule/aes/aes_nohw.c
@@ -12,7 +12,7 @@
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-#include <GFp/aes.h>
+#include <ring-core/aes.h>
#include "../../internal.h"
@@ -346,7 +346,7 @@
static inline void aes_nohw_compact_block(aes_word_t out[AES_NOHW_BLOCK_WORDS],
const uint8_t in[16]) {
- GFp_memcpy(out, in, 16);
+ OPENSSL_memcpy(out, in, 16);
#if defined(OPENSSL_SSE2)
// No conversions needed.
#elif defined(OPENSSL_64_BIT)
@@ -374,7 +374,7 @@
static inline void aes_nohw_uncompact_block(
uint8_t out[16], const aes_word_t in[AES_NOHW_BLOCK_WORDS]) {
#if defined(OPENSSL_SSE2)
- GFp_memcpy(out, in, 16); // No conversions needed.
+ OPENSSL_memcpy(out, in, 16); // No conversions needed.
#elif defined(OPENSSL_64_BIT)
uint64_t a0 = in[0];
uint64_t a1 = in[1];
@@ -382,8 +382,8 @@
aes_nohw_uncompact_word((a0 & UINT64_C(0x00000000ffffffff)) | (a1 << 32));
uint64_t b1 =
aes_nohw_uncompact_word((a1 & UINT64_C(0xffffffff00000000)) | (a0 >> 32));
- GFp_memcpy(out, &b0, 8);
- GFp_memcpy(out + 8, &b1, 8);
+ OPENSSL_memcpy(out, &b0, 8);
+ OPENSSL_memcpy(out + 8, &b1, 8);
#else
uint32_t a0 = in[0];
uint32_t a1 = in[1];
@@ -404,10 +404,10 @@
b1 = aes_nohw_uncompact_word(b1);
b2 = aes_nohw_uncompact_word(b2);
b3 = aes_nohw_uncompact_word(b3);
- GFp_memcpy(out, &b0, 4);
- GFp_memcpy(out + 4, &b1, 4);
- GFp_memcpy(out + 8, &b2, 4);
- GFp_memcpy(out + 12, &b3, 4);
+ OPENSSL_memcpy(out, &b0, 4);
+ OPENSSL_memcpy(out + 4, &b1, 4);
+ OPENSSL_memcpy(out + 8, &b2, 4);
+ OPENSSL_memcpy(out + 12, &b3, 4);
#endif
}
@@ -475,7 +475,7 @@
static void aes_nohw_to_batch(AES_NOHW_BATCH *out, const uint8_t *in,
size_t num_blocks) {
// Don't leave unused blocks uninitialized.
- GFp_memset(out, 0, sizeof(AES_NOHW_BATCH));
+ OPENSSL_memset(out, 0, sizeof(AES_NOHW_BATCH));
debug_assert_nonsecret(num_blocks <= AES_NOHW_BATCH_SIZE);
for (size_t i = 0; i < num_blocks; i++) {
aes_word_t block[AES_NOHW_BLOCK_WORDS];
@@ -770,7 +770,7 @@
// Copy the round key into each block in the batch.
for (size_t j = 0; j < AES_NOHW_BATCH_SIZE; j++) {
aes_word_t tmp[AES_NOHW_BLOCK_WORDS];
- GFp_memcpy(tmp, key->rd_key + 4 * i, 16);
+ OPENSSL_memcpy(tmp, key->rd_key + 4 * i, 16);
aes_nohw_batch_set(&out->keys[i], tmp, j);
}
aes_nohw_transpose(&out->keys[i]);
@@ -794,7 +794,7 @@
static void aes_nohw_sub_block(aes_word_t out[AES_NOHW_BLOCK_WORDS],
const aes_word_t in[AES_NOHW_BLOCK_WORDS]) {
AES_NOHW_BATCH batch;
- GFp_memset(&batch, 0, sizeof(batch));
+ OPENSSL_memset(&batch, 0, sizeof(batch));
aes_nohw_batch_set(&batch, in, 0);
aes_nohw_transpose(&batch);
aes_nohw_sub_bytes(&batch);
@@ -807,7 +807,7 @@
aes_word_t block[AES_NOHW_BLOCK_WORDS];
aes_nohw_compact_block(block, in);
- GFp_memcpy(key->rd_key, block, 16);
+ OPENSSL_memcpy(key->rd_key, block, 16);
for (size_t i = 1; i <= 10; i++) {
aes_word_t sub[AES_NOHW_BLOCK_WORDS];
@@ -826,7 +826,7 @@
block[j] = aes_nohw_xor(block[j], aes_nohw_shift_left(v, 8));
block[j] = aes_nohw_xor(block[j], aes_nohw_shift_left(v, 12));
}
- GFp_memcpy(key->rd_key + 4 * i, block, 16);
+ OPENSSL_memcpy(key->rd_key + 4 * i, block, 16);
}
}
@@ -836,10 +836,10 @@
// Each key schedule iteration produces two round keys.
aes_word_t block1[AES_NOHW_BLOCK_WORDS], block2[AES_NOHW_BLOCK_WORDS];
aes_nohw_compact_block(block1, in);
- GFp_memcpy(key->rd_key, block1, 16);
+ OPENSSL_memcpy(key->rd_key, block1, 16);
aes_nohw_compact_block(block2, in + 16);
- GFp_memcpy(key->rd_key + 4, block2, 16);
+ OPENSSL_memcpy(key->rd_key + 4, block2, 16);
for (size_t i = 2; i <= 14; i += 2) {
aes_word_t sub[AES_NOHW_BLOCK_WORDS];
@@ -857,7 +857,7 @@
block1[j] = aes_nohw_xor(block1[j], aes_nohw_shift_left(v, 8));
block1[j] = aes_nohw_xor(block1[j], aes_nohw_shift_left(v, 12));
}
- GFp_memcpy(key->rd_key + 4 * i, block1, 16);
+ OPENSSL_memcpy(key->rd_key + 4 * i, block1, 16);
if (i == 14) {
break;
@@ -873,15 +873,15 @@
block2[j] = aes_nohw_xor(block2[j], aes_nohw_shift_left(v, 8));
block2[j] = aes_nohw_xor(block2[j], aes_nohw_shift_left(v, 12));
}
- GFp_memcpy(key->rd_key + 4 * (i + 1), block2, 16);
+ OPENSSL_memcpy(key->rd_key + 4 * (i + 1), block2, 16);
}
}
// External API.
-int GFp_aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits,
- AES_KEY *aeskey) {
+int aes_nohw_set_encrypt_key(const uint8_t *key, unsigned bits,
+ AES_KEY *aeskey) {
switch (bits) {
case 128:
aes_nohw_setup_key_128(aeskey, key);
@@ -893,7 +893,7 @@
return 1;
}
-void GFp_aes_nohw_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
+void aes_nohw_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key) {
AES_NOHW_SCHEDULE sched;
aes_nohw_expand_round_keys(&sched, key);
AES_NOHW_BATCH batch;
@@ -906,16 +906,16 @@
const uint8_t b[16]) {
for (size_t i = 0; i < 16; i += sizeof(aes_word_t)) {
aes_word_t x, y;
- GFp_memcpy(&x, a + i, sizeof(aes_word_t));
- GFp_memcpy(&y, b + i, sizeof(aes_word_t));
+ OPENSSL_memcpy(&x, a + i, sizeof(aes_word_t));
+ OPENSSL_memcpy(&y, b + i, sizeof(aes_word_t));
x = aes_nohw_xor(x, y);
- GFp_memcpy(out + i, &x, sizeof(aes_word_t));
+ OPENSSL_memcpy(out + i, &x, sizeof(aes_word_t));
}
}
-void GFp_aes_nohw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out,
- size_t blocks, const AES_KEY *key,
- const uint8_t ivec[16]) {
+void aes_nohw_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out,
+ size_t blocks, const AES_KEY *key,
+ const uint8_t ivec[16]) {
if (blocks == 0) {
return;
}
@@ -929,7 +929,7 @@
uint8_t u8[AES_NOHW_BATCH_SIZE * 16];
} ivs, enc_ivs;
for (size_t i = 0; i < AES_NOHW_BATCH_SIZE; i++) {
- GFp_memcpy(ivs.u8 + 16 * i, ivec, 16);
+ OPENSSL_memcpy(ivs.u8 + 16 * i, ivec, 16);
}
uint32_t ctr = CRYPTO_bswap4(ivs.u32[3]);
diff --git a/crypto/fipsmodule/aes/asm/aesni-x86.pl b/crypto/fipsmodule/aes/asm/aesni-x86.pl
index aee1f5f..687cda0 100644
--- a/crypto/fipsmodule/aes/asm/aesni-x86.pl
+++ b/crypto/fipsmodule/aes/asm/aesni-x86.pl
@@ -67,10 +67,10 @@
# Goldmont 3.84/1.39 1.39 1.63 1.31 1.70
# Bulldozer 5.80/0.98 1.05 1.24 0.93 1.23
-$PREFIX="GFp_aes_hw"; # if $PREFIX is set to "AES", the script
+$PREFIX="aes_hw"; # if $PREFIX is set to "AES", the script
# generates drop-in replacement for
# crypto/aes/asm/aes-586.pl:-)
-$AESNI_PREFIX="GFp_aes_hw";
+$AESNI_PREFIX="aes_hw";
$inline=1; # inline _aesni_[en|de]crypt
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
@@ -83,7 +83,7 @@
&asm_init($ARGV[0]);
-&external_label("GFp_ia32cap_P");
+&external_label("OPENSSL_ia32cap_P");
&static_label("key_const");
if ($PREFIX eq $AESNI_PREFIX) { $movekey=\&movups; }
@@ -688,7 +688,7 @@
&blindpop("ebx");
&lea ("ebx",&DWP(&label("key_const")."-".&label("pic"),"ebx"));
- &picmeup("ebp","GFp_ia32cap_P","ebx",&label("key_const"));
+ &picmeup("ebp","OPENSSL_ia32cap_P","ebx",&label("key_const"));
&movups ("xmm0",&QWP(0,"eax")); # pull first 128 bits of *userKey
&xorps ("xmm4","xmm4"); # low dword of xmm4 is assumed 0
&mov ("ebp",&DWP(4,"ebp"));
diff --git a/crypto/fipsmodule/aes/asm/aesni-x86_64.pl b/crypto/fipsmodule/aes/asm/aesni-x86_64.pl
index 7ad0a89..630d399 100644
--- a/crypto/fipsmodule/aes/asm/aesni-x86_64.pl
+++ b/crypto/fipsmodule/aes/asm/aesni-x86_64.pl
@@ -206,7 +206,7 @@
("%rdi","%rsi","%rdx","%rcx"); # Unix order
$code=".text\n";
-$code.=".extern GFp_ia32cap_P\n";
+$code.=".extern OPENSSL_ia32cap_P\n";
$rounds="%eax"; # input to and changed by aesni_[en|de]cryptN !!!
# this is natural Unix argument order for public $PREFIX_[ecb|cbc]_encrypt ...
@@ -265,10 +265,10 @@
{ my ($inp,$out,$key) = @_4args;
$code.=<<___;
-.globl GFp_${PREFIX}_encrypt
-.type GFp_${PREFIX}_encrypt,\@abi-omnipotent
+.globl ${PREFIX}_encrypt
+.type ${PREFIX}_encrypt,\@abi-omnipotent
.align 16
-GFp_${PREFIX}_encrypt:
+${PREFIX}_encrypt:
.cfi_startproc
movups ($inp),$inout0 # load input
mov 240($key),$rounds # key->rounds
@@ -281,7 +281,7 @@
pxor $inout0,$inout0
ret
.cfi_endproc
-.size GFp_${PREFIX}_encrypt,.-GFp_${PREFIX}_encrypt
+.size ${PREFIX}_encrypt,.-${PREFIX}_encrypt
___
}
@@ -577,9 +577,9 @@
if ($PREFIX eq "aes_hw") {
{
######################################################################
-# void GFp_aes_hw_ctr32_encrypt_blocks (const void *in, void *out,
-# size_t blocks, const AES_KEY *key,
-# const char *ivec);
+# void aesni_ctr32_encrypt_blocks (const void *in, void *out,
+# size_t blocks, const AES_KEY *key,
+# const char *ivec);
#
# Handles only complete blocks, operates on 32-bit counter and
# does not update *ivec! (see crypto/modes/ctr128.c for details)
@@ -594,10 +594,10 @@
my $frame_size = 0x80 + ($win64?160:0);
$code.=<<___;
-.globl GFp_${PREFIX}_ctr32_encrypt_blocks
-.type GFp_${PREFIX}_ctr32_encrypt_blocks,\@function,5
+.globl ${PREFIX}_ctr32_encrypt_blocks
+.type ${PREFIX}_ctr32_encrypt_blocks,\@function,5
.align 16
-GFp_${PREFIX}_ctr32_encrypt_blocks:
+${PREFIX}_ctr32_encrypt_blocks:
.cfi_startproc
cmp \$1,$len
jne .Lctr32_bulk
@@ -692,7 +692,7 @@
lea 7($ctr),%r9
mov %r10d,0x60+12(%rsp)
bswap %r9d
- leaq GFp_ia32cap_P(%rip),%r10
+ leaq OPENSSL_ia32cap_P(%rip),%r10
mov 4(%r10),%r10d
xor $key0,%r9d
and \$`1<<26|1<<22`,%r10d # isolate XSAVE+MOVBE
@@ -1151,7 +1151,7 @@
.Lctr32_epilogue:
ret
.cfi_endproc
-.size GFp_${PREFIX}_ctr32_encrypt_blocks,.-GFp_${PREFIX}_ctr32_encrypt_blocks
+.size ${PREFIX}_ctr32_encrypt_blocks,.-${PREFIX}_ctr32_encrypt_blocks
___
} }}
@@ -1167,8 +1167,8 @@
# Aggressively optimized in respect to aeskeygenassist's critical path
# and is contained in %xmm0-5 to meet Win64 ABI requirement.
#
-# int GFp_${PREFIX}_set_encrypt_key(const unsigned char *inp,
-# int bits, AES_KEY * const key);
+# int ${PREFIX}_set_encrypt_key(const unsigned char *inp,
+# int bits, AES_KEY * const key);
#
# input: $inp user-supplied key
# $bits $inp length in bits
@@ -1184,10 +1184,10 @@
# amount of volatile registers is smaller on Windows.
#
$code.=<<___;
-.globl GFp_${PREFIX}_set_encrypt_key
-.type GFp_${PREFIX}_set_encrypt_key,\@abi-omnipotent
+.globl ${PREFIX}_set_encrypt_key
+.type ${PREFIX}_set_encrypt_key,\@abi-omnipotent
.align 16
-GFp_${PREFIX}_set_encrypt_key:
+${PREFIX}_set_encrypt_key:
__aesni_set_encrypt_key:
.cfi_startproc
.byte 0x48,0x83,0xEC,0x08 # sub rsp,8
@@ -1200,7 +1200,7 @@
movups ($inp),%xmm0 # pull first 128 bits of *userKey
xorps %xmm4,%xmm4 # low dword of xmm4 is assumed 0
- leaq GFp_ia32cap_P(%rip),%r10
+ leaq OPENSSL_ia32cap_P(%rip),%r10
movl 4(%r10),%r10d
and \$`1<<28|1<<11`,%r10d # AVX and XOP bits
lea 16($key),%rax # %rax is used as modifiable copy of $key
@@ -1419,7 +1419,7 @@
.cfi_adjust_cfa_offset -8
ret
.cfi_endproc
-.LSEH_end_GFp_set_encrypt_key:
+.LSEH_end_set_encrypt_key:
.align 16
.Lkey_expansion_128:
@@ -1489,7 +1489,7 @@
shufps \$0b10101010,%xmm1,%xmm1 # critical path
xorps %xmm1,%xmm2
ret
-.size GFp_${PREFIX}_set_encrypt_key,.-GFp_${PREFIX}_set_encrypt_key
+.size ${PREFIX}_set_encrypt_key,.-${PREFIX}_set_encrypt_key
.size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key
___
}
@@ -1616,25 +1616,25 @@
.align 4
___
$code.=<<___ if ($PREFIX eq "aes_hw");
- .rva .LSEH_begin_GFp_${PREFIX}_ctr32_encrypt_blocks
- .rva .LSEH_end_GFp_${PREFIX}_ctr32_encrypt_blocks
- .rva .LSEH_info_GFp_ctr32
+ .rva .LSEH_begin_${PREFIX}_ctr32_encrypt_blocks
+ .rva .LSEH_end_${PREFIX}_ctr32_encrypt_blocks
+ .rva .LSEH_info_ctr32
___
$code.=<<___;
- .rva GFp_${PREFIX}_set_encrypt_key
- .rva .LSEH_end_GFp_set_encrypt_key
- .rva .LSEH_info_GFp_key
+ .rva ${PREFIX}_set_encrypt_key
+ .rva .LSEH_end_set_encrypt_key
+ .rva .LSEH_info_key
.section .xdata
.align 8
___
$code.=<<___ if ($PREFIX eq "aes_hw");
-.LSEH_info_GFp_ctr32:
+.LSEH_info_ctr32:
.byte 9,0,0,0
.rva ctr_xts_se_handler
.rva .Lctr32_body,.Lctr32_epilogue # HandlerData[]
___
$code.=<<___;
-.LSEH_info_GFp_key:
+.LSEH_info_key:
.byte 0x01,0x04,0x01,0x00
.byte 0x04,0x02,0x00,0x00 # sub rsp,8
___
diff --git a/crypto/fipsmodule/aes/asm/aesv8-armx.pl b/crypto/fipsmodule/aes/asm/aesv8-armx.pl
index 804df81..89cc6c5 100644
--- a/crypto/fipsmodule/aes/asm/aesv8-armx.pl
+++ b/crypto/fipsmodule/aes/asm/aesv8-armx.pl
@@ -53,7 +53,7 @@
$prefix="aes_hw";
$code=<<___;
-#include <GFp/arm_arch.h>
+#include <ring-core/arm_arch.h>
#if __ARM_MAX_ARCH__>=7
.text
@@ -89,10 +89,10 @@
.text
-.globl GFp_${prefix}_set_encrypt_key
-.type GFp_${prefix}_set_encrypt_key,%function
+.globl ${prefix}_set_encrypt_key
+.type ${prefix}_set_encrypt_key,%function
.align 5
-GFp_${prefix}_set_encrypt_key:
+${prefix}_set_encrypt_key:
.Lenc_key:
___
$code.=<<___ if ($flavour =~ /64/);
@@ -235,7 +235,7 @@
mov x0,$ptr // return value
`"ldr x29,[sp],#16" if ($flavour =~ /64/)`
ret
-.size GFp_${prefix}_set_encrypt_key,.-GFp_${prefix}_set_encrypt_key
+.size ${prefix}_set_encrypt_key,.-${prefix}_set_encrypt_key
___
}}}
{{{
@@ -247,10 +247,10 @@
my ($rndkey0,$rndkey1,$inout)=map("q$_",(0..3));
$code.=<<___;
-.globl GFp_${prefix}_${dir}crypt
-.type GFp_${prefix}_${dir}crypt,%function
+.globl ${prefix}_${dir}crypt
+.type ${prefix}_${dir}crypt,%function
.align 5
-GFp_${prefix}_${dir}crypt:
+${prefix}_${dir}crypt:
AARCH64_VALID_CALL_TARGET
ldr $rounds,[$key,#240]
vld1.32 {$rndkey0},[$key],#16
@@ -276,11 +276,12 @@
vst1.8 {$inout},[$out]
ret
-.size GFp_${prefix}_${dir}crypt,.-GFp_${prefix}_${dir}crypt
+.size ${prefix}_${dir}crypt,.-${prefix}_${dir}crypt
___
}
&gen_block("en");
-&gen_block("de");
+# Decryption removed in *ring*.
+# &gen_block("de");
}}}
{{{
my ($inp,$out,$len,$key,$ivp)=map("x$_",(0..4));
@@ -296,10 +297,10 @@
### q8-q15 preloaded key schedule
$code.=<<___;
-.globl GFp_${prefix}_ctr32_encrypt_blocks
-.type GFp_${prefix}_ctr32_encrypt_blocks,%function
+.globl ${prefix}_ctr32_encrypt_blocks
+.type ${prefix}_ctr32_encrypt_blocks,%function
.align 5
-GFp_${prefix}_ctr32_encrypt_blocks:
+${prefix}_ctr32_encrypt_blocks:
___
$code.=<<___ if ($flavour =~ /64/);
// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.
@@ -513,7 +514,7 @@
ret
___
$code.=<<___;
-.size GFp_${prefix}_ctr32_encrypt_blocks,.-GFp_${prefix}_ctr32_encrypt_blocks
+.size ${prefix}_ctr32_encrypt_blocks,.-${prefix}_ctr32_encrypt_blocks
___
}}}
$code.=<<___;
diff --git a/crypto/fipsmodule/aes/asm/bsaes-armv7.pl b/crypto/fipsmodule/aes/asm/bsaes-armv7.pl
index 2804d61..062f8f1 100644
--- a/crypto/fipsmodule/aes/asm/bsaes-armv7.pl
+++ b/crypto/fipsmodule/aes/asm/bsaes-armv7.pl
@@ -707,7 +707,7 @@
$code.=<<___;
#ifndef __KERNEL__
-# include <GFp/arm_arch.h>
+# include <ring-core/arm_arch.h>
# define VFP_ABI_PUSH vstmdb sp!,{d8-d15}
# define VFP_ABI_POP vldmia sp!,{d8-d15}
@@ -937,10 +937,10 @@
my $keysched = "sp";
$code.=<<___;
-.global GFp_bsaes_ctr32_encrypt_blocks
-.type GFp_bsaes_ctr32_encrypt_blocks,%function
+.global bsaes_ctr32_encrypt_blocks
+.type bsaes_ctr32_encrypt_blocks,%function
.align 5
-GFp_bsaes_ctr32_encrypt_blocks:
+bsaes_ctr32_encrypt_blocks:
@ In OpenSSL, short inputs fall back to aes_nohw_* here. We patch this
@ out to retain a constant-time implementation.
mov ip, sp
@@ -1120,7 +1120,7 @@
@ OpenSSL contains aes_nohw_* fallback code here. We patch this
@ out to retain a constant-time implementation.
-.size GFp_bsaes_ctr32_encrypt_blocks,.-GFp_bsaes_ctr32_encrypt_blocks
+.size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
___
}
$code.=<<___;
diff --git a/crypto/fipsmodule/aes/asm/vpaes-x86.pl b/crypto/fipsmodule/aes/asm/vpaes-x86.pl
index 1418869..f29e896 100644
--- a/crypto/fipsmodule/aes/asm/vpaes-x86.pl
+++ b/crypto/fipsmodule/aes/asm/vpaes-x86.pl
@@ -555,7 +555,7 @@
#
# Interface to OpenSSL
#
-&function_begin("GFp_${PREFIX}_set_encrypt_key");
+&function_begin("${PREFIX}_set_encrypt_key");
&mov ($inp,&wparam(0)); # inp
&lea ($base,&DWP(-56,"esp"));
&mov ($round,&wparam(1)); # bits
@@ -577,9 +577,9 @@
&mov ("esp",&DWP(48,"esp"));
&xor ("eax","eax");
-&function_end("GFp_${PREFIX}_set_encrypt_key");
+&function_end("${PREFIX}_set_encrypt_key");
-&function_begin("GFp_${PREFIX}_encrypt");
+&function_begin("${PREFIX}_encrypt");
&lea ($const,&DWP(&label("_vpaes_consts")."+0x30-".&label("pic_point")));
&call ("_vpaes_preheat");
&set_label("pic_point");
@@ -596,7 +596,7 @@
&movdqu (&QWP(0,$out),"xmm0");
&mov ("esp",&DWP(48,"esp"));
-&function_end("GFp_${PREFIX}_encrypt");
+&function_end("${PREFIX}_encrypt");
&asm_finish();
diff --git a/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl b/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl
index 6b93a45..33cf05e 100644
--- a/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl
+++ b/crypto/fipsmodule/aes/asm/vpaes-x86_64.pl
@@ -636,10 +636,10 @@
#
# Interface to OpenSSL
#
-.globl GFp_${PREFIX}_set_encrypt_key
-.type GFp_${PREFIX}_set_encrypt_key,\@function,3
+.globl ${PREFIX}_set_encrypt_key
+.type ${PREFIX}_set_encrypt_key,\@function,3
.align 16
-GFp_${PREFIX}_set_encrypt_key:
+${PREFIX}_set_encrypt_key:
.cfi_startproc
#ifdef BORINGSSL_DISPATCH_TEST
.extern BORINGSSL_function_hit
@@ -689,12 +689,12 @@
xor %eax,%eax
ret
.cfi_endproc
-.size GFp_${PREFIX}_set_encrypt_key,.-GFp_${PREFIX}_set_encrypt_key
+.size ${PREFIX}_set_encrypt_key,.-${PREFIX}_set_encrypt_key
-.globl GFp_${PREFIX}_encrypt
-.type GFp_${PREFIX}_encrypt,\@function,3
+.globl ${PREFIX}_encrypt
+.type ${PREFIX}_encrypt,\@function,3
.align 16
-GFp_${PREFIX}_encrypt:
+${PREFIX}_encrypt:
.cfi_startproc
___
$code.=<<___ if ($win64);
@@ -734,18 +734,18 @@
$code.=<<___;
ret
.cfi_endproc
-.size GFp_${PREFIX}_encrypt,.-GFp_${PREFIX}_encrypt
+.size ${PREFIX}_encrypt,.-${PREFIX}_encrypt
___
{
my ($inp,$out,$blocks,$key,$ivp)=("%rdi","%rsi","%rdx","%rcx","%r8");
-# void GFp_vpaes_ctr32_encrypt_blocks(const uint8_t *inp, uint8_t *out,
+# void vpaes_ctr32_encrypt_blocks(const uint8_t *inp, uint8_t *out,
# size_t blocks, const AES_KEY *key,
# const uint8_t ivp[16]);
$code.=<<___;
-.globl GFp_${PREFIX}_ctr32_encrypt_blocks
-.type GFp_${PREFIX}_ctr32_encrypt_blocks,\@function,5
+.globl ${PREFIX}_ctr32_encrypt_blocks
+.type ${PREFIX}_ctr32_encrypt_blocks,\@function,5
.align 16
-GFp_${PREFIX}_ctr32_encrypt_blocks:
+${PREFIX}_ctr32_encrypt_blocks:
.cfi_startproc
# _vpaes_encrypt_core and _vpaes_encrypt_core_2x expect the key in %rdx.
xchg $key, $blocks
@@ -838,7 +838,7 @@
.Lctr32_abort:
ret
.cfi_endproc
-.size GFp_${PREFIX}_ctr32_encrypt_blocks,.-GFp_${PREFIX}_ctr32_encrypt_blocks
+.size ${PREFIX}_ctr32_encrypt_blocks,.-${PREFIX}_ctr32_encrypt_blocks
___
}
$code.=<<___;
@@ -1029,28 +1029,28 @@
.section .pdata
.align 4
- .rva .LSEH_begin_GFp_${PREFIX}_set_encrypt_key
- .rva .LSEH_end_GFp_${PREFIX}_set_encrypt_key
- .rva .LSEH_info_GFp_${PREFIX}_set_encrypt_key
+ .rva .LSEH_begin_${PREFIX}_set_encrypt_key
+ .rva .LSEH_end_${PREFIX}_set_encrypt_key
+ .rva .LSEH_info_${PREFIX}_set_encrypt_key
- .rva .LSEH_begin_GFp_${PREFIX}_encrypt
- .rva .LSEH_end_GFp_${PREFIX}_encrypt
- .rva .LSEH_info_GFp_${PREFIX}_encrypt
- .rva .LSEH_begin_GFp_${PREFIX}_ctr32_encrypt_blocks
- .rva .LSEH_end_GFp_${PREFIX}_ctr32_encrypt_blocks
- .rva .LSEH_info_GFp_${PREFIX}_ctr32_encrypt_blocks
+ .rva .LSEH_begin_${PREFIX}_encrypt
+ .rva .LSEH_end_${PREFIX}_encrypt
+ .rva .LSEH_info_${PREFIX}_encrypt
+ .rva .LSEH_begin_${PREFIX}_ctr32_encrypt_blocks
+ .rva .LSEH_end_${PREFIX}_ctr32_encrypt_blocks
+ .rva .LSEH_info_${PREFIX}_ctr32_encrypt_blocks
.section .xdata
.align 8
-.LSEH_info_GFp_${PREFIX}_set_encrypt_key:
+.LSEH_info_${PREFIX}_set_encrypt_key:
.byte 9,0,0,0
.rva se_handler
.rva .Lenc_key_body,.Lenc_key_epilogue # HandlerData[]
-.LSEH_info_GFp_${PREFIX}_encrypt:
+.LSEH_info_${PREFIX}_encrypt:
.byte 9,0,0,0
.rva se_handler
.rva .Lenc_body,.Lenc_epilogue # HandlerData[]
-.LSEH_info_GFp_${PREFIX}_ctr32_encrypt_blocks:
+.LSEH_info_${PREFIX}_ctr32_encrypt_blocks:
.byte 9,0,0,0
.rva se_handler
.rva .Lctr32_body,.Lctr32_epilogue # HandlerData[]
diff --git a/crypto/fipsmodule/bn/asm/armv4-mont.pl b/crypto/fipsmodule/bn/asm/armv4-mont.pl
index dbc28b5..f9af795 100644
--- a/crypto/fipsmodule/bn/asm/armv4-mont.pl
+++ b/crypto/fipsmodule/bn/asm/armv4-mont.pl
@@ -97,7 +97,7 @@
$_num="$num,#15*4"; $_bpend=$_num;
$code=<<___;
-#include <GFp/arm_arch.h>
+#include <ring-core/arm_arch.h>
@ Silence ARMv8 deprecated IT instruction warnings. This file is used by both
@ ARMv7 and ARMv8 processors and does not use ARMv8 instructions.
@@ -112,18 +112,18 @@
#endif
#if __ARM_MAX_ARCH__>=7
-.extern GFp_armcap_P
-.hidden GFp_armcap_P
+.extern OPENSSL_armcap_P
+.hidden OPENSSL_armcap_P
.align 5
.LOPENSSL_armcap:
-.word GFp_armcap_P-.Lbn_mul_mont
+.word OPENSSL_armcap_P-.Lbn_mul_mont
#endif
-.global GFp_bn_mul_mont
-.type GFp_bn_mul_mont,%function
+.global bn_mul_mont
+.type bn_mul_mont,%function
.align 5
-GFp_bn_mul_mont:
+bn_mul_mont:
.Lbn_mul_mont:
ldr ip,[sp,#4] @ load num
stmdb sp!,{r0,r2} @ sp points at argument block
@@ -294,7 +294,7 @@
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
#endif
-.size GFp_bn_mul_mont,.-GFp_bn_mul_mont
+.size bn_mul_mont,.-bn_mul_mont
___
{
my ($A0,$A1,$A2,$A3)=map("d$_",(0..3));
diff --git a/crypto/fipsmodule/bn/asm/armv8-mont.pl b/crypto/fipsmodule/bn/asm/armv8-mont.pl
index 717ea68..f82c495 100644
--- a/crypto/fipsmodule/bn/asm/armv8-mont.pl
+++ b/crypto/fipsmodule/bn/asm/armv8-mont.pl
@@ -55,7 +55,7 @@
$lo1,$hi1,$nj,$m1,$nlo,$nhi,
$ovf, $i,$j,$tp,$tj) = map("x$_",6..17,19..24);
-# int GFp_bn_mul_mont(
+# int bn_mul_mont(
$rp="x0"; # BN_ULONG *rp,
$ap="x1"; # const BN_ULONG *ap,
$bp="x2"; # const BN_ULONG *bp,
@@ -64,14 +64,14 @@
$num="x5"; # size_t num);
$code.=<<___;
-#include <GFp/arm_arch.h>
+#include <ring-core/arm_arch.h>
.text
-.globl GFp_bn_mul_mont
-.type GFp_bn_mul_mont,%function
+.globl bn_mul_mont
+.type bn_mul_mont,%function
.align 5
-GFp_bn_mul_mont:
+bn_mul_mont:
AARCH64_SIGN_LINK_REGISTER
tst $num,#7
b.eq __bn_sqr8x_mont
@@ -272,7 +272,7 @@
ldr x29,[sp],#64
AARCH64_VALIDATE_LINK_REGISTER
ret
-.size GFp_bn_mul_mont,.-GFp_bn_mul_mont
+.size bn_mul_mont,.-bn_mul_mont
___
{
########################################################################
diff --git a/crypto/fipsmodule/bn/asm/x86-mont.pl b/crypto/fipsmodule/bn/asm/x86-mont.pl
index 7b1e94b..18dbfb2 100644
--- a/crypto/fipsmodule/bn/asm/x86-mont.pl
+++ b/crypto/fipsmodule/bn/asm/x86-mont.pl
@@ -45,9 +45,9 @@
$sse2=0;
for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
-&external_label("GFp_ia32cap_P") if ($sse2);
+&external_label("OPENSSL_ia32cap_P") if ($sse2);
-&function_begin("GFp_bn_mul_mont");
+&function_begin("bn_mul_mont");
$i="edx";
$j="ecx";
@@ -145,7 +145,7 @@
$temp="mm6";
$mask="mm7";
- &picmeup("eax","GFp_ia32cap_P");
+ &picmeup("eax","OPENSSL_ia32cap_P");
&bt (&DWP(0,"eax"),26);
# The non-SSE2 code was removed.
@@ -327,7 +327,7 @@
&mov ("esp",$_sp); # pull saved stack pointer
&mov ("eax",1);
-&function_end("GFp_bn_mul_mont");
+&function_end("bn_mul_mont");
&asciz("Montgomery Multiplication for x86, CRYPTOGAMS by <appro\@openssl.org>");
diff --git a/crypto/fipsmodule/bn/asm/x86_64-mont.pl b/crypto/fipsmodule/bn/asm/x86_64-mont.pl
index e0ad0b9..d6fc564 100644
--- a/crypto/fipsmodule/bn/asm/x86_64-mont.pl
+++ b/crypto/fipsmodule/bn/asm/x86_64-mont.pl
@@ -65,7 +65,7 @@
# output, so this isn't useful anyway.
$addx = 1;
-# void GFp_bn_mul_mont(
+# void bn_mul_mont(
$rp="%rdi"; # BN_ULONG *rp,
$ap="%rsi"; # const BN_ULONG *ap,
$bp="%rdx"; # const BN_ULONG *bp,
@@ -85,12 +85,12 @@
$code=<<___;
.text
-.extern GFp_ia32cap_P
+.extern OPENSSL_ia32cap_P
-.globl GFp_bn_mul_mont
-.type GFp_bn_mul_mont,\@function,6
+.globl bn_mul_mont
+.type bn_mul_mont,\@function,6
.align 16
-GFp_bn_mul_mont:
+bn_mul_mont:
.cfi_startproc
mov ${num}d,${num}d
mov %rsp,%rax
@@ -101,7 +101,7 @@
jb .Lmul_enter
___
$code.=<<___ if ($addx);
- mov GFp_ia32cap_P+8(%rip),%r11d
+ mov OPENSSL_ia32cap_P+8(%rip),%r11d
___
$code.=<<___;
cmp $ap,$bp
@@ -346,7 +346,7 @@
.Lmul_epilogue:
ret
.cfi_endproc
-.size GFp_bn_mul_mont,.-GFp_bn_mul_mont
+.size bn_mul_mont,.-bn_mul_mont
___
{{{
my @A=("%r10","%r11");
@@ -818,10 +818,10 @@
my ($a0,$a1,$ai)=("%r14","%r15","%rbx");
$code.=<<___ if ($addx);
-.extern GFp_bn_sqrx8x_internal # see x86_64-mont5 module
+.extern bn_sqrx8x_internal # see x86_64-mont5 module
___
$code.=<<___;
-.extern GFp_bn_sqr8x_internal # see x86_64-mont5 module
+.extern bn_sqr8x_internal # see x86_64-mont5 module
.type bn_sqr8x_mont,\@function,6
.align 32
@@ -906,12 +906,12 @@
movq %r10, %xmm3 # -$num
___
$code.=<<___ if ($addx);
- mov GFp_ia32cap_P+8(%rip),%eax
+ mov OPENSSL_ia32cap_P+8(%rip),%eax
and \$0x80100,%eax
cmp \$0x80100,%eax
jne .Lsqr8x_nox
- call GFp_bn_sqrx8x_internal # see x86_64-mont5 module
+ call bn_sqrx8x_internal # see x86_64-mont5 module
# %rax top-most carry
# %rbp nptr
# %rcx -8*num
@@ -927,7 +927,7 @@
.Lsqr8x_nox:
___
$code.=<<___;
- call GFp_bn_sqr8x_internal # see x86_64-mont5 module
+ call bn_sqr8x_internal # see x86_64-mont5 module
# %rax top-most carry
# %rbp nptr
# %r8 -8*num
@@ -1532,9 +1532,9 @@
.section .pdata
.align 4
- .rva .LSEH_begin_GFp_bn_mul_mont
- .rva .LSEH_end_GFp_bn_mul_mont
- .rva .LSEH_info_GFp_bn_mul_mont
+ .rva .LSEH_begin_bn_mul_mont
+ .rva .LSEH_end_bn_mul_mont
+ .rva .LSEH_info_bn_mul_mont
.rva .LSEH_begin_bn_mul4x_mont
.rva .LSEH_end_bn_mul4x_mont
@@ -1552,7 +1552,7 @@
$code.=<<___;
.section .xdata
.align 8
-.LSEH_info_GFp_bn_mul_mont:
+.LSEH_info_bn_mul_mont:
.byte 9,0,0,0
.rva mul_handler
.rva .Lmul_body,.Lmul_epilogue # HandlerData[]
diff --git a/crypto/fipsmodule/bn/asm/x86_64-mont5.pl b/crypto/fipsmodule/bn/asm/x86_64-mont5.pl
index b79b403..38e24ea 100644
--- a/crypto/fipsmodule/bn/asm/x86_64-mont5.pl
+++ b/crypto/fipsmodule/bn/asm/x86_64-mont5.pl
@@ -50,7 +50,7 @@
# output, so this isn't useful anyway.
$addx = 1;
-# int GFp_bn_mul_mont_gather5(
+# int bn_mul_mont_gather5(
$rp="%rdi"; # BN_ULONG *rp,
$ap="%rsi"; # const BN_ULONG *ap,
$bp="%rdx"; # const BN_ULONG *bp,
@@ -72,12 +72,12 @@
$code=<<___;
.text
-.extern GFp_ia32cap_P
+.extern OPENSSL_ia32cap_P
-.globl GFp_bn_mul_mont_gather5
-.type GFp_bn_mul_mont_gather5,\@function,6
+.globl bn_mul_mont_gather5
+.type bn_mul_mont_gather5,\@function,6
.align 64
-GFp_bn_mul_mont_gather5:
+bn_mul_mont_gather5:
.cfi_startproc
mov ${num}d,${num}d
mov %rsp,%rax
@@ -86,7 +86,7 @@
jnz .Lmul_enter
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip),%r11
+ leaq OPENSSL_ia32cap_P(%rip),%r11
mov 8(%r11),%r11d
___
$code.=<<___;
@@ -447,7 +447,7 @@
.Lmul_epilogue:
ret
.cfi_endproc
-.size GFp_bn_mul_mont_gather5,.-GFp_bn_mul_mont_gather5
+.size bn_mul_mont_gather5,.-bn_mul_mont_gather5
___
{{{
my @A=("%r10","%r11");
@@ -492,7 +492,7 @@
# modulo 4096, which covers ret[num], am[num] and n[num]
# (see bn_exp.c). This is done to allow memory disambiguation
# logic do its magic. [Extra [num] is allocated in order
- # to align with GFp_bn_power5's frame, which is cleansed after
+ # to align with bn_power5's frame, which is cleansed after
# completing exponentiation. Extra 256 bytes is for power mask
# calculated from 7th argument, the index.]
#
@@ -1067,7 +1067,7 @@
}}}
{{{
######################################################################
-# void GFp_bn_power5(
+# void bn_power5(
my $rptr="%rdi"; # BN_ULONG *rptr,
my $aptr="%rsi"; # const BN_ULONG *aptr,
my $bptr="%rdx"; # const void *table,
@@ -1082,16 +1082,16 @@
my ($a0,$a1,$ai)=("%r14","%r15","%rbx");
$code.=<<___;
-.globl GFp_bn_power5
-.type GFp_bn_power5,\@function,6
+.globl bn_power5
+.type bn_power5,\@function,6
.align 32
-GFp_bn_power5:
+bn_power5:
.cfi_startproc
mov %rsp,%rax
.cfi_def_cfa_register %rax
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip),%r11
+ leaq OPENSSL_ia32cap_P(%rip),%r11
mov 8(%r11),%r11d
and \$0x80108,%r11d
cmp \$0x80108,%r11d # check for AD*X+BMI2+BMI1
@@ -1220,13 +1220,13 @@
.Lpower5_epilogue:
ret
.cfi_endproc
-.size GFp_bn_power5,.-GFp_bn_power5
+.size bn_power5,.-bn_power5
-.globl GFp_bn_sqr8x_internal
-.hidden GFp_bn_sqr8x_internal
-.type GFp_bn_sqr8x_internal,\@abi-omnipotent
+.globl bn_sqr8x_internal
+.hidden bn_sqr8x_internal
+.type bn_sqr8x_internal,\@abi-omnipotent
.align 32
-GFp_bn_sqr8x_internal:
+bn_sqr8x_internal:
__bn_sqr8x_internal:
.cfi_startproc
##############################################################
@@ -2021,7 +2021,7 @@
jb .L8x_reduction_loop
ret
.cfi_endproc
-.size GFp_bn_sqr8x_internal,.-GFp_bn_sqr8x_internal
+.size bn_sqr8x_internal,.-bn_sqr8x_internal
___
}
##############################################################
@@ -2090,17 +2090,17 @@
}
{
$code.=<<___;
-.globl GFp_bn_from_montgomery
-.type GFp_bn_from_montgomery,\@abi-omnipotent
+.globl bn_from_montgomery
+.type bn_from_montgomery,\@abi-omnipotent
.align 32
-GFp_bn_from_montgomery:
+bn_from_montgomery:
.cfi_startproc
testl \$7,`($win64?"48(%rsp)":"%r9d")`
jz bn_from_mont8x
xor %eax,%eax
ret
.cfi_endproc
-.size GFp_bn_from_montgomery,.-GFp_bn_from_montgomery
+.size bn_from_montgomery,.-bn_from_montgomery
.type bn_from_mont8x,\@function,6
.align 32
@@ -2132,7 +2132,7 @@
# Ensure that stack frame doesn't alias with $rptr+3*$num
# modulo 4096, which covers ret[num], am[num] and n[num]
# (see bn_exp.c). The stack is allocated to aligned with
- # GFp_bn_power5's frame, and as GFp_bn_from_montgomery happens to be
+ # bn_power5's frame, and as bn_from_montgomery happens to be
# last operation, we use the opportunity to cleanse it.
#
lea -320(%rsp,$num,2),%r11
@@ -2218,7 +2218,7 @@
movq %r10, %xmm3 # -num
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip),%r11
+ leaq OPENSSL_ia32cap_P(%rip),%r11
mov 8(%r11),%r11d
and \$0x80108,%r11d
cmp \$0x80108,%r11d # check for AD*X+BMI2+BMI1
@@ -2313,7 +2313,7 @@
# modulo 4096, which covers ret[num], am[num] and n[num]
# (see bn_exp.c). This is done to allow memory disambiguation
# logic do its magic. [Extra [num] is allocated in order
- # to align with GFp_bn_power5's frame, which is cleansed after
+ # to align with bn_power5's frame, which is cleansed after
# completing exponentiation. Extra 256 bytes is for power mask
# calculated from 7th argument, the index.]
#
@@ -2752,7 +2752,7 @@
___
}{
######################################################################
-# void GFp_bn_power5(
+# void bn_power5(
my $rptr="%rdi"; # BN_ULONG *rptr,
my $aptr="%rsi"; # const BN_ULONG *aptr,
my $bptr="%rdx"; # const void *table,
@@ -2902,10 +2902,10 @@
.cfi_endproc
.size bn_powerx5,.-bn_powerx5
-.globl GFp_bn_sqrx8x_internal
-.type GFp_bn_sqrx8x_internal,\@abi-omnipotent
+.globl bn_sqrx8x_internal
+.type bn_sqrx8x_internal,\@abi-omnipotent
.align 32
-GFp_bn_sqrx8x_internal:
+bn_sqrx8x_internal:
__bn_sqrx8x_internal:
.cfi_startproc
##################################################################
@@ -3541,7 +3541,7 @@
jb .Lsqrx8x_reduction_loop
ret
.cfi_endproc
-.size GFp_bn_sqrx8x_internal,.-GFp_bn_sqrx8x_internal
+.size bn_sqrx8x_internal,.-bn_sqrx8x_internal
___
}
##############################################################
@@ -3614,10 +3614,10 @@
my $N=$STRIDE/4;
$code.=<<___;
-.globl GFp_bn_scatter5
-.type GFp_bn_scatter5,\@abi-omnipotent
+.globl bn_scatter5
+.type bn_scatter5,\@abi-omnipotent
.align 16
-GFp_bn_scatter5:
+bn_scatter5:
.cfi_startproc
cmp \$0, $num
jz .Lscatter_epilogue
@@ -3632,14 +3632,14 @@
.Lscatter_epilogue:
ret
.cfi_endproc
-.size GFp_bn_scatter5,.-GFp_bn_scatter5
+.size bn_scatter5,.-bn_scatter5
-.globl GFp_bn_gather5
-.type GFp_bn_gather5,\@abi-omnipotent
+.globl bn_gather5
+.type bn_gather5,\@abi-omnipotent
.align 32
-GFp_bn_gather5:
+bn_gather5:
.cfi_startproc
-.LSEH_begin_GFp_bn_gather5: # Win64 thing, but harmless in other cases
+.LSEH_begin_bn_gather5: # Win64 thing, but harmless in other cases
# I can't trust assembler to use specific encoding:-(
.byte 0x4c,0x8d,0x14,0x24 #lea (%rsp),%r10
.cfi_def_cfa_register %r10
@@ -3725,9 +3725,9 @@
lea (%r10),%rsp
.cfi_def_cfa_register %rsp
ret
-.LSEH_end_GFp_bn_gather5:
+.LSEH_end_bn_gather5:
.cfi_endproc
-.size GFp_bn_gather5,.-GFp_bn_gather5
+.size bn_gather5,.-bn_gather5
___
}
$code.=<<___;
@@ -3852,17 +3852,17 @@
.section .pdata
.align 4
- .rva .LSEH_begin_GFp_bn_mul_mont_gather5
- .rva .LSEH_end_GFp_bn_mul_mont_gather5
- .rva .LSEH_info_GFp_bn_mul_mont_gather5
+ .rva .LSEH_begin_bn_mul_mont_gather5
+ .rva .LSEH_end_bn_mul_mont_gather5
+ .rva .LSEH_info_bn_mul_mont_gather5
.rva .LSEH_begin_bn_mul4x_mont_gather5
.rva .LSEH_end_bn_mul4x_mont_gather5
.rva .LSEH_info_bn_mul4x_mont_gather5
- .rva .LSEH_begin_GFp_bn_power5
- .rva .LSEH_end_GFp_bn_power5
- .rva .LSEH_info_GFp_bn_power5
+ .rva .LSEH_begin_bn_power5
+ .rva .LSEH_end_bn_power5
+ .rva .LSEH_info_bn_power5
.rva .LSEH_begin_bn_from_mont8x
.rva .LSEH_end_bn_from_mont8x
@@ -3875,16 +3875,16 @@
.rva .LSEH_begin_bn_powerx5
.rva .LSEH_end_bn_powerx5
- .rva .LSEH_info_GFp_bn_powerx5
+ .rva .LSEH_info_bn_powerx5
___
$code.=<<___;
- .rva .LSEH_begin_GFp_bn_gather5
- .rva .LSEH_end_GFp_bn_gather5
- .rva .LSEH_info_GFp_bn_gather5
+ .rva .LSEH_begin_bn_gather5
+ .rva .LSEH_end_bn_gather5
+ .rva .LSEH_info_bn_gather5
.section .xdata
.align 8
-.LSEH_info_GFp_bn_mul_mont_gather5:
+.LSEH_info_bn_mul_mont_gather5:
.byte 9,0,0,0
.rva mul_handler
.rva .Lmul_body,.Lmul_body,.Lmul_epilogue # HandlerData[]
@@ -3894,7 +3894,7 @@
.rva mul_handler
.rva .Lmul4x_prologue,.Lmul4x_body,.Lmul4x_epilogue # HandlerData[]
.align 8
-.LSEH_info_GFp_bn_power5:
+.LSEH_info_bn_power5:
.byte 9,0,0,0
.rva mul_handler
.rva .Lpower5_prologue,.Lpower5_body,.Lpower5_epilogue # HandlerData[]
@@ -3911,14 +3911,14 @@
.rva mul_handler
.rva .Lmulx4x_prologue,.Lmulx4x_body,.Lmulx4x_epilogue # HandlerData[]
.align 8
-.LSEH_info_GFp_bn_powerx5:
+.LSEH_info_bn_powerx5:
.byte 9,0,0,0
.rva mul_handler
.rva .Lpowerx5_prologue,.Lpowerx5_body,.Lpowerx5_epilogue # HandlerData[]
___
$code.=<<___;
.align 8
-.LSEH_info_GFp_bn_gather5:
+.LSEH_info_bn_gather5:
.byte 0x01,0x0b,0x03,0x0a
.byte 0x0b,0x01,0x21,0x00 # sub rsp,0x108
.byte 0x04,0xa3,0x00,0x00 # lea r10,(rsp)
diff --git a/crypto/fipsmodule/bn/internal.h b/crypto/fipsmodule/bn/internal.h
index 044e4e8..c3ba88e 100644
--- a/crypto/fipsmodule/bn/internal.h
+++ b/crypto/fipsmodule/bn/internal.h
@@ -123,7 +123,7 @@
#ifndef OPENSSL_HEADER_BN_INTERNAL_H
#define OPENSSL_HEADER_BN_INTERNAL_H
-#include <GFp/base.h>
+#include <ring-core/base.h>
#if defined(OPENSSL_X86_64) && defined(_MSC_VER) && !defined(__clang__)
#pragma warning(push, 3)
@@ -180,8 +180,8 @@
OPENSSL_STATIC_ASSERT(sizeof(int) == sizeof(size_t) ||
(sizeof(int) == 4 && sizeof(size_t) == 8),
"int and size_t ABI mismatch");
-void GFp_bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
- const BN_ULONG *np, const BN_ULONG *n0, size_t num);
+void bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
+ const BN_ULONG *np, const BN_ULONG *n0, size_t num);
static inline void bn_umult_lohi(BN_ULONG *low_out, BN_ULONG *high_out,
BN_ULONG a, BN_ULONG b) {
diff --git a/crypto/fipsmodule/bn/montgomery.c b/crypto/fipsmodule/bn/montgomery.c
index e13379e..b1f1c69 100644
--- a/crypto/fipsmodule/bn/montgomery.c
+++ b/crypto/fipsmodule/bn/montgomery.c
@@ -118,7 +118,7 @@
sizeof(BN_ULONG) * BN_MONT_CTX_N0_LIMBS == sizeof(uint64_t),
"uint64_t is insufficient precision for n0");
-int GFp_bn_from_montgomery_in_place(BN_ULONG r[], size_t num_r, BN_ULONG a[],
+int bn_from_montgomery_in_place(BN_ULONG r[], size_t num_r, BN_ULONG a[],
size_t num_a, const BN_ULONG n[],
size_t num_n,
const BN_ULONG n0_[BN_MONT_CTX_N0_LIMBS]) {
@@ -132,7 +132,7 @@
BN_ULONG n0 = n0_[0];
BN_ULONG carry = 0;
for (size_t i = 0; i < num_n; i++) {
- BN_ULONG v = GFp_limbs_mul_add_limb(a + i, n, a[i] * n0, num_n);
+ BN_ULONG v = limbs_mul_add_limb(a + i, n, a[i] * n0, num_n);
v += carry + a[i + num_n];
carry |= (v != a[i + num_n]);
carry &= (v <= a[i + num_n]);
diff --git a/crypto/fipsmodule/bn/montgomery_inv.c b/crypto/fipsmodule/bn/montgomery_inv.c
index f32848f..421a751 100644
--- a/crypto/fipsmodule/bn/montgomery_inv.c
+++ b/crypto/fipsmodule/bn/montgomery_inv.c
@@ -46,7 +46,7 @@
// caller would have to negate the resultant |v| for the purpose of Montgomery
// multiplication. This implementation does the negation implicitly by doing
// the computations as a difference instead of a sum.
-uint64_t GFp_bn_neg_inv_mod_r_u64(uint64_t n) {
+uint64_t bn_neg_inv_mod_r_u64(uint64_t n) {
dev_assert_secret(n % 2 == 1);
// alpha == 2**(lg r - 1) == r / 2.
diff --git a/crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl b/crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl
deleted file mode 100644
index 06f3480..0000000
--- a/crypto/fipsmodule/ec/asm/ecp_nistz256-armv4.pl
+++ /dev/null
@@ -1,901 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License"). You may not use
-# this file except in compliance with the License. You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project. The module is, however, dual licensed under OpenSSL and
-# CRYPTOGAMS licenses depending on where you obtain it. For further
-# details see http://www.openssl.org/~appro/cryptogams/.
-# ====================================================================
-#
-# ECP_NISTZ256 module for ARMv4.
-#
-# October 2014.
-#
-# Original ECP_NISTZ256 submission targeting x86_64 is detailed in
-# http://eprint.iacr.org/2013/816. In the process of adaptation
-# original .c module was made 32-bit savvy in order to make this
-# implementation possible.
-#
-# with/without -DECP_NISTZ256_ASM
-# Cortex-A8 +53-170%
-# Cortex-A9 +76-205%
-# Cortex-A15 +100-316%
-# Snapdragon S4 +66-187%
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, server-side
-# operation. Keep in mind that +200% means 3x improvement.
-
-$flavour = shift;
-if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
-else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
-
-if ($flavour && $flavour ne "void") {
- $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
- ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
- ( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
- die "can't locate arm-xlate.pl";
-
- open STDOUT,"| \"$^X\" $xlate $flavour $output";
-} else {
- open STDOUT,">$output";
-}
-
-$code.=<<___;
-#include <GFp/arm_arch.h>
-
-.text
-#if defined(__thumb2__)
-.syntax unified
-.thumb
-#else
-.code 32
-#endif
-
-.asciz "ECP_NISTZ256 for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
-.align 6
-___
-
-########################################################################
-# common register layout, note that $t2 is link register, so that if
-# internal subroutine uses $t2, then it has to offload lr...
-
-($r_ptr,$a_ptr,$b_ptr,$ff,$a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$t1,$t2)=
- map("r$_",(0..12,14));
-($t0,$t3)=($ff,$a_ptr);
-
-$code.=<<___;
-.type __ecp_nistz256_mul_by_2,%function
-.align 4
-__ecp_nistz256_mul_by_2:
- ldr $a0,[$a_ptr,#0]
- ldr $a1,[$a_ptr,#4]
- ldr $a2,[$a_ptr,#8]
- adds $a0,$a0,$a0 @ a[0:7]+=a[0:7], i.e. add with itself
- ldr $a3,[$a_ptr,#12]
- adcs $a1,$a1,$a1
- ldr $a4,[$a_ptr,#16]
- adcs $a2,$a2,$a2
- ldr $a5,[$a_ptr,#20]
- adcs $a3,$a3,$a3
- ldr $a6,[$a_ptr,#24]
- adcs $a4,$a4,$a4
- ldr $a7,[$a_ptr,#28]
- adcs $a5,$a5,$a5
- adcs $a6,$a6,$a6
- mov $ff,#0
- adcs $a7,$a7,$a7
- adc $ff,$ff,#0
-
- b .Lreduce_by_sub
-.size __ecp_nistz256_mul_by_2,.-__ecp_nistz256_mul_by_2
-
-@ void GFp_nistz256_add(BN_ULONG r0[8],const BN_ULONG r1[8],
-@ const BN_ULONG r2[8]);
-.globl GFp_nistz256_add
-.type GFp_nistz256_add,%function
-.align 4
-GFp_nistz256_add:
- stmdb sp!,{r4-r12,lr}
- bl __ecp_nistz256_add
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
- ldmia sp!,{r4-r12,pc}
-#else
- ldmia sp!,{r4-r12,lr}
- bx lr @ interoperable with Thumb ISA:-)
-#endif
-.size GFp_nistz256_add,.-GFp_nistz256_add
-
-.type __ecp_nistz256_add,%function
-.align 4
-__ecp_nistz256_add:
- str lr,[sp,#-4]! @ push lr
-
- ldr $a0,[$a_ptr,#0]
- ldr $a1,[$a_ptr,#4]
- ldr $a2,[$a_ptr,#8]
- ldr $a3,[$a_ptr,#12]
- ldr $a4,[$a_ptr,#16]
- ldr $t0,[$b_ptr,#0]
- ldr $a5,[$a_ptr,#20]
- ldr $t1,[$b_ptr,#4]
- ldr $a6,[$a_ptr,#24]
- ldr $t2,[$b_ptr,#8]
- ldr $a7,[$a_ptr,#28]
- ldr $t3,[$b_ptr,#12]
- adds $a0,$a0,$t0
- ldr $t0,[$b_ptr,#16]
- adcs $a1,$a1,$t1
- ldr $t1,[$b_ptr,#20]
- adcs $a2,$a2,$t2
- ldr $t2,[$b_ptr,#24]
- adcs $a3,$a3,$t3
- ldr $t3,[$b_ptr,#28]
- adcs $a4,$a4,$t0
- adcs $a5,$a5,$t1
- adcs $a6,$a6,$t2
- mov $ff,#0
- adcs $a7,$a7,$t3
- adc $ff,$ff,#0
- ldr lr,[sp],#4 @ pop lr
-
-.Lreduce_by_sub:
-
- @ if a+b >= modulus, subtract modulus.
- @
- @ But since comparison implies subtraction, we subtract
- @ modulus and then add it back if subtraction borrowed.
-
- subs $a0,$a0,#-1
- sbcs $a1,$a1,#-1
- sbcs $a2,$a2,#-1
- sbcs $a3,$a3,#0
- sbcs $a4,$a4,#0
- sbcs $a5,$a5,#0
- sbcs $a6,$a6,#1
- sbcs $a7,$a7,#-1
- sbc $ff,$ff,#0
-
- @ Note that because mod has special form, i.e. consists of
- @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- @ using value of borrow as a whole or extracting single bit.
- @ Follow $ff register...
-
- adds $a0,$a0,$ff @ add synthesized modulus
- adcs $a1,$a1,$ff
- str $a0,[$r_ptr,#0]
- adcs $a2,$a2,$ff
- str $a1,[$r_ptr,#4]
- adcs $a3,$a3,#0
- str $a2,[$r_ptr,#8]
- adcs $a4,$a4,#0
- str $a3,[$r_ptr,#12]
- adcs $a5,$a5,#0
- str $a4,[$r_ptr,#16]
- adcs $a6,$a6,$ff,lsr#31
- str $a5,[$r_ptr,#20]
- adcs $a7,$a7,$ff
- str $a6,[$r_ptr,#24]
- str $a7,[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_add,.-__ecp_nistz256_add
-
-.type __ecp_nistz256_mul_by_3,%function
-.align 4
-__ecp_nistz256_mul_by_3:
- str lr,[sp,#-4]! @ push lr
-
- @ As multiplication by 3 is performed as 2*n+n, below are inline
- @ copies of __ecp_nistz256_mul_by_2 and __ecp_nistz256_add, see
- @ corresponding subroutines for details.
-
- ldr $a0,[$a_ptr,#0]
- ldr $a1,[$a_ptr,#4]
- ldr $a2,[$a_ptr,#8]
- adds $a0,$a0,$a0 @ a[0:7]+=a[0:7]
- ldr $a3,[$a_ptr,#12]
- adcs $a1,$a1,$a1
- ldr $a4,[$a_ptr,#16]
- adcs $a2,$a2,$a2
- ldr $a5,[$a_ptr,#20]
- adcs $a3,$a3,$a3
- ldr $a6,[$a_ptr,#24]
- adcs $a4,$a4,$a4
- ldr $a7,[$a_ptr,#28]
- adcs $a5,$a5,$a5
- adcs $a6,$a6,$a6
- mov $ff,#0
- adcs $a7,$a7,$a7
- adc $ff,$ff,#0
-
- subs $a0,$a0,#-1 @ .Lreduce_by_sub but without stores
- sbcs $a1,$a1,#-1
- sbcs $a2,$a2,#-1
- sbcs $a3,$a3,#0
- sbcs $a4,$a4,#0
- sbcs $a5,$a5,#0
- sbcs $a6,$a6,#1
- sbcs $a7,$a7,#-1
- sbc $ff,$ff,#0
-
- adds $a0,$a0,$ff @ add synthesized modulus
- adcs $a1,$a1,$ff
- adcs $a2,$a2,$ff
- adcs $a3,$a3,#0
- adcs $a4,$a4,#0
- ldr $b_ptr,[$a_ptr,#0]
- adcs $a5,$a5,#0
- ldr $t1,[$a_ptr,#4]
- adcs $a6,$a6,$ff,lsr#31
- ldr $t2,[$a_ptr,#8]
- adc $a7,$a7,$ff
-
- ldr $t0,[$a_ptr,#12]
- adds $a0,$a0,$b_ptr @ 2*a[0:7]+=a[0:7]
- ldr $b_ptr,[$a_ptr,#16]
- adcs $a1,$a1,$t1
- ldr $t1,[$a_ptr,#20]
- adcs $a2,$a2,$t2
- ldr $t2,[$a_ptr,#24]
- adcs $a3,$a3,$t0
- ldr $t3,[$a_ptr,#28]
- adcs $a4,$a4,$b_ptr
- adcs $a5,$a5,$t1
- adcs $a6,$a6,$t2
- mov $ff,#0
- adcs $a7,$a7,$t3
- adc $ff,$ff,#0
- ldr lr,[sp],#4 @ pop lr
-
- b .Lreduce_by_sub
-.size __ecp_nistz256_mul_by_3,.-__ecp_nistz256_mul_by_3
-
-.type __ecp_nistz256_div_by_2,%function
-.align 4
-__ecp_nistz256_div_by_2:
- @ ret = (a is odd ? a+mod : a) >> 1
-
- ldr $a0,[$a_ptr,#0]
- ldr $a1,[$a_ptr,#4]
- ldr $a2,[$a_ptr,#8]
- mov $ff,$a0,lsl#31 @ place least significant bit to most
- @ significant position, now arithmetic
- @ right shift by 31 will produce -1 or
- @ 0, while logical right shift 1 or 0,
- @ this is how modulus is conditionally
- @ synthesized in this case...
- ldr $a3,[$a_ptr,#12]
- adds $a0,$a0,$ff,asr#31
- ldr $a4,[$a_ptr,#16]
- adcs $a1,$a1,$ff,asr#31
- ldr $a5,[$a_ptr,#20]
- adcs $a2,$a2,$ff,asr#31
- ldr $a6,[$a_ptr,#24]
- adcs $a3,$a3,#0
- ldr $a7,[$a_ptr,#28]
- adcs $a4,$a4,#0
- mov $a0,$a0,lsr#1 @ a[0:7]>>=1, we can start early
- @ because it doesn't affect flags
- adcs $a5,$a5,#0
- orr $a0,$a0,$a1,lsl#31
- adcs $a6,$a6,$ff,lsr#31
- mov $b_ptr,#0
- adcs $a7,$a7,$ff,asr#31
- mov $a1,$a1,lsr#1
- adc $b_ptr,$b_ptr,#0 @ top-most carry bit from addition
-
- orr $a1,$a1,$a2,lsl#31
- mov $a2,$a2,lsr#1
- str $a0,[$r_ptr,#0]
- orr $a2,$a2,$a3,lsl#31
- mov $a3,$a3,lsr#1
- str $a1,[$r_ptr,#4]
- orr $a3,$a3,$a4,lsl#31
- mov $a4,$a4,lsr#1
- str $a2,[$r_ptr,#8]
- orr $a4,$a4,$a5,lsl#31
- mov $a5,$a5,lsr#1
- str $a3,[$r_ptr,#12]
- orr $a5,$a5,$a6,lsl#31
- mov $a6,$a6,lsr#1
- str $a4,[$r_ptr,#16]
- orr $a6,$a6,$a7,lsl#31
- mov $a7,$a7,lsr#1
- str $a5,[$r_ptr,#20]
- orr $a7,$a7,$b_ptr,lsl#31 @ don't forget the top-most carry bit
- str $a6,[$r_ptr,#24]
- str $a7,[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_div_by_2,.-__ecp_nistz256_div_by_2
-
-.type __ecp_nistz256_sub,%function
-.align 4
-__ecp_nistz256_sub:
- str lr,[sp,#-4]! @ push lr
-
- ldr $a0,[$a_ptr,#0]
- ldr $a1,[$a_ptr,#4]
- ldr $a2,[$a_ptr,#8]
- ldr $a3,[$a_ptr,#12]
- ldr $a4,[$a_ptr,#16]
- ldr $t0,[$b_ptr,#0]
- ldr $a5,[$a_ptr,#20]
- ldr $t1,[$b_ptr,#4]
- ldr $a6,[$a_ptr,#24]
- ldr $t2,[$b_ptr,#8]
- ldr $a7,[$a_ptr,#28]
- ldr $t3,[$b_ptr,#12]
- subs $a0,$a0,$t0
- ldr $t0,[$b_ptr,#16]
- sbcs $a1,$a1,$t1
- ldr $t1,[$b_ptr,#20]
- sbcs $a2,$a2,$t2
- ldr $t2,[$b_ptr,#24]
- sbcs $a3,$a3,$t3
- ldr $t3,[$b_ptr,#28]
- sbcs $a4,$a4,$t0
- sbcs $a5,$a5,$t1
- sbcs $a6,$a6,$t2
- sbcs $a7,$a7,$t3
- sbc $ff,$ff,$ff @ broadcast borrow bit
- ldr lr,[sp],#4 @ pop lr
-
-.Lreduce_by_add:
-
- @ if a-b borrows, add modulus.
- @
- @ Note that because mod has special form, i.e. consists of
- @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- @ broadcasting borrow bit to a register, $ff, and using it as
- @ a whole or extracting single bit.
-
- adds $a0,$a0,$ff @ add synthesized modulus
- adcs $a1,$a1,$ff
- str $a0,[$r_ptr,#0]
- adcs $a2,$a2,$ff
- str $a1,[$r_ptr,#4]
- adcs $a3,$a3,#0
- str $a2,[$r_ptr,#8]
- adcs $a4,$a4,#0
- str $a3,[$r_ptr,#12]
- adcs $a5,$a5,#0
- str $a4,[$r_ptr,#16]
- adcs $a6,$a6,$ff,lsr#31
- str $a5,[$r_ptr,#20]
- adcs $a7,$a7,$ff
- str $a6,[$r_ptr,#24]
- str $a7,[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_sub,.-__ecp_nistz256_sub
-
-@ void GFp_nistz256_neg(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl GFp_nistz256_neg
-.type GFp_nistz256_neg,%function
-.align 4
-GFp_nistz256_neg:
- stmdb sp!,{r4-r12,lr}
- bl __ecp_nistz256_neg
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
- ldmia sp!,{r4-r12,pc}
-#else
- ldmia sp!,{r4-r12,lr}
- bx lr @ interoperable with Thumb ISA:-)
-#endif
-.size GFp_nistz256_neg,.-GFp_nistz256_neg
-
-.type __ecp_nistz256_neg,%function
-.align 4
-__ecp_nistz256_neg:
- ldr $a0,[$a_ptr,#0]
- eor $ff,$ff,$ff
- ldr $a1,[$a_ptr,#4]
- ldr $a2,[$a_ptr,#8]
- subs $a0,$ff,$a0
- ldr $a3,[$a_ptr,#12]
- sbcs $a1,$ff,$a1
- ldr $a4,[$a_ptr,#16]
- sbcs $a2,$ff,$a2
- ldr $a5,[$a_ptr,#20]
- sbcs $a3,$ff,$a3
- ldr $a6,[$a_ptr,#24]
- sbcs $a4,$ff,$a4
- ldr $a7,[$a_ptr,#28]
- sbcs $a5,$ff,$a5
- sbcs $a6,$ff,$a6
- sbcs $a7,$ff,$a7
- sbc $ff,$ff,$ff
-
- b .Lreduce_by_add
-.size __ecp_nistz256_neg,.-__ecp_nistz256_neg
-___
-{
-my @acc=map("r$_",(3..11));
-my ($t0,$t1,$bj,$t2,$t3)=map("r$_",(0,1,2,12,14));
-
-$code.=<<___;
-@ void GFp_nistz256_mul_mont(BN_ULONG r0[8],const BN_ULONG r1[8],
-@ const BN_ULONG r2[8]);
-.globl GFp_nistz256_mul_mont
-.type GFp_nistz256_mul_mont,%function
-.align 4
-GFp_nistz256_mul_mont:
- stmdb sp!,{r4-r12,lr}
- bl __ecp_nistz256_mul_mont
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
- ldmia sp!,{r4-r12,pc}
-#else
- ldmia sp!,{r4-r12,lr}
- bx lr @ interoperable with Thumb ISA:-)
-#endif
-.size GFp_nistz256_mul_mont,.-GFp_nistz256_mul_mont
-
-.type __ecp_nistz256_mul_mont,%function
-.align 4
-__ecp_nistz256_mul_mont:
- stmdb sp!,{r0-r2,lr} @ make a copy of arguments too
-
- ldr $bj,[$b_ptr,#0] @ b[0]
- ldmia $a_ptr,{@acc[1]-@acc[8]}
-
- umull @acc[0],$t3,@acc[1],$bj @ r[0]=a[0]*b[0]
- stmdb sp!,{$acc[1]-@acc[8]} @ copy a[0-7] to stack, so
- @ that it can be addressed
- @ without spending register
- @ on address
- umull @acc[1],$t0,@acc[2],$bj @ r[1]=a[1]*b[0]
- umull @acc[2],$t1,@acc[3],$bj
- adds @acc[1],@acc[1],$t3 @ accumulate high part of mult
- umull @acc[3],$t2,@acc[4],$bj
- adcs @acc[2],@acc[2],$t0
- umull @acc[4],$t3,@acc[5],$bj
- adcs @acc[3],@acc[3],$t1
- umull @acc[5],$t0,@acc[6],$bj
- adcs @acc[4],@acc[4],$t2
- umull @acc[6],$t1,@acc[7],$bj
- adcs @acc[5],@acc[5],$t3
- umull @acc[7],$t2,@acc[8],$bj
- adcs @acc[6],@acc[6],$t0
- adcs @acc[7],@acc[7],$t1
- eor $t3,$t3,$t3 @ first overflow bit is zero
- adc @acc[8],$t2,#0
-___
-for(my $i=1;$i<8;$i++) {
-my $t4=@acc[0];
-
- # Reduction iteration is normally performed by accumulating
- # result of multiplication of modulus by "magic" digit [and
- # omitting least significant word, which is guaranteed to
- # be 0], but thanks to special form of modulus and "magic"
- # digit being equal to least significant word, it can be
- # performed with additions and subtractions alone. Indeed:
- #
- # ffff.0001.0000.0000.0000.ffff.ffff.ffff
- # * abcd
- # + xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
- #
- # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we
- # rewrite above as:
- #
- # xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
- # + abcd.0000.abcd.0000.0000.abcd.0000.0000.0000
- # - abcd.0000.0000.0000.0000.0000.0000.abcd
- #
- # or marking redundant operations:
- #
- # xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.----
- # + abcd.0000.abcd.0000.0000.abcd.----.----.----
- # - abcd.----.----.----.----.----.----.----
-
-$code.=<<___;
- @ multiplication-less reduction $i
- adds @acc[3],@acc[3],@acc[0] @ r[3]+=r[0]
- ldr $bj,[sp,#40] @ restore b_ptr
- adcs @acc[4],@acc[4],#0 @ r[4]+=0
- adcs @acc[5],@acc[5],#0 @ r[5]+=0
- adcs @acc[6],@acc[6],@acc[0] @ r[6]+=r[0]
- ldr $t1,[sp,#0] @ load a[0]
- adcs @acc[7],@acc[7],#0 @ r[7]+=0
- ldr $bj,[$bj,#4*$i] @ load b[i]
- adcs @acc[8],@acc[8],@acc[0] @ r[8]+=r[0]
- eor $t0,$t0,$t0
- adc $t3,$t3,#0 @ overflow bit
- subs @acc[7],@acc[7],@acc[0] @ r[7]-=r[0]
- ldr $t2,[sp,#4] @ a[1]
- sbcs @acc[8],@acc[8],#0 @ r[8]-=0
- umlal @acc[1],$t0,$t1,$bj @ "r[0]"+=a[0]*b[i]
- eor $t1,$t1,$t1
- sbc @acc[0],$t3,#0 @ overflow bit, keep in mind
- @ that netto result is
- @ addition of a value which
- @ makes underflow impossible
-
- ldr $t3,[sp,#8] @ a[2]
- umlal @acc[2],$t1,$t2,$bj @ "r[1]"+=a[1]*b[i]
- str @acc[0],[sp,#36] @ temporarily offload overflow
- eor $t2,$t2,$t2
- ldr $t4,[sp,#12] @ a[3], $t4 is alias @acc[0]
- umlal @acc[3],$t2,$t3,$bj @ "r[2]"+=a[2]*b[i]
- eor $t3,$t3,$t3
- adds @acc[2],@acc[2],$t0 @ accumulate high part of mult
- ldr $t0,[sp,#16] @ a[4]
- umlal @acc[4],$t3,$t4,$bj @ "r[3]"+=a[3]*b[i]
- eor $t4,$t4,$t4
- adcs @acc[3],@acc[3],$t1
- ldr $t1,[sp,#20] @ a[5]
- umlal @acc[5],$t4,$t0,$bj @ "r[4]"+=a[4]*b[i]
- eor $t0,$t0,$t0
- adcs @acc[4],@acc[4],$t2
- ldr $t2,[sp,#24] @ a[6]
- umlal @acc[6],$t0,$t1,$bj @ "r[5]"+=a[5]*b[i]
- eor $t1,$t1,$t1
- adcs @acc[5],@acc[5],$t3
- ldr $t3,[sp,#28] @ a[7]
- umlal @acc[7],$t1,$t2,$bj @ "r[6]"+=a[6]*b[i]
- eor $t2,$t2,$t2
- adcs @acc[6],@acc[6],$t4
- ldr @acc[0],[sp,#36] @ restore overflow bit
- umlal @acc[8],$t2,$t3,$bj @ "r[7]"+=a[7]*b[i]
- eor $t3,$t3,$t3
- adcs @acc[7],@acc[7],$t0
- adcs @acc[8],@acc[8],$t1
- adcs @acc[0],$acc[0],$t2
- adc $t3,$t3,#0 @ new overflow bit
-___
- push(@acc,shift(@acc)); # rotate registers, so that
- # "r[i]" becomes r[i]
-}
-$code.=<<___;
- @ last multiplication-less reduction
- adds @acc[3],@acc[3],@acc[0]
- ldr $r_ptr,[sp,#32] @ restore r_ptr
- adcs @acc[4],@acc[4],#0
- adcs @acc[5],@acc[5],#0
- adcs @acc[6],@acc[6],@acc[0]
- adcs @acc[7],@acc[7],#0
- adcs @acc[8],@acc[8],@acc[0]
- adc $t3,$t3,#0
- subs @acc[7],@acc[7],@acc[0]
- sbcs @acc[8],@acc[8],#0
- sbc @acc[0],$t3,#0 @ overflow bit
-
- @ Final step is "if result > mod, subtract mod", but we do it
- @ "other way around", namely subtract modulus from result
- @ and if it borrowed, add modulus back.
-
- adds @acc[1],@acc[1],#1 @ subs @acc[1],@acc[1],#-1
- adcs @acc[2],@acc[2],#0 @ sbcs @acc[2],@acc[2],#-1
- adcs @acc[3],@acc[3],#0 @ sbcs @acc[3],@acc[3],#-1
- sbcs @acc[4],@acc[4],#0
- sbcs @acc[5],@acc[5],#0
- sbcs @acc[6],@acc[6],#0
- sbcs @acc[7],@acc[7],#1
- adcs @acc[8],@acc[8],#0 @ sbcs @acc[8],@acc[8],#-1
- ldr lr,[sp,#44] @ restore lr
- sbc @acc[0],@acc[0],#0 @ broadcast borrow bit
- add sp,sp,#48
-
- @ Note that because mod has special form, i.e. consists of
- @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- @ broadcasting borrow bit to a register, @acc[0], and using it as
- @ a whole or extracting single bit.
-
- adds @acc[1],@acc[1],@acc[0] @ add modulus or zero
- adcs @acc[2],@acc[2],@acc[0]
- str @acc[1],[$r_ptr,#0]
- adcs @acc[3],@acc[3],@acc[0]
- str @acc[2],[$r_ptr,#4]
- adcs @acc[4],@acc[4],#0
- str @acc[3],[$r_ptr,#8]
- adcs @acc[5],@acc[5],#0
- str @acc[4],[$r_ptr,#12]
- adcs @acc[6],@acc[6],#0
- str @acc[5],[$r_ptr,#16]
- adcs @acc[7],@acc[7],@acc[0],lsr#31
- str @acc[6],[$r_ptr,#20]
- adc @acc[8],@acc[8],@acc[0]
- str @acc[7],[$r_ptr,#24]
- str @acc[8],[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_mul_mont,.-__ecp_nistz256_mul_mont
-___
-}
-
-{{{
-########################################################################
-# Below $aN assignment matches order in which 256-bit result appears in
-# register bank at return from __ecp_nistz256_mul_mont, so that we can
-# skip over reloading it from memory. This means that below functions
-# use custom calling sequence accepting 256-bit input in registers,
-# output pointer in r0, $r_ptr, and optional pointer in r2, $b_ptr.
-#
-# See their "normal" counterparts for insights on calculations.
-
-my ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,
- $t0,$t1,$t2,$t3)=map("r$_",(11,3..10,12,14,1));
-my $ff=$b_ptr;
-
-$code.=<<___;
-.type __ecp_nistz256_sub_from,%function
-.align 5
-__ecp_nistz256_sub_from:
- str lr,[sp,#-4]! @ push lr
-
- ldr $t0,[$b_ptr,#0]
- ldr $t1,[$b_ptr,#4]
- ldr $t2,[$b_ptr,#8]
- ldr $t3,[$b_ptr,#12]
- subs $a0,$a0,$t0
- ldr $t0,[$b_ptr,#16]
- sbcs $a1,$a1,$t1
- ldr $t1,[$b_ptr,#20]
- sbcs $a2,$a2,$t2
- ldr $t2,[$b_ptr,#24]
- sbcs $a3,$a3,$t3
- ldr $t3,[$b_ptr,#28]
- sbcs $a4,$a4,$t0
- sbcs $a5,$a5,$t1
- sbcs $a6,$a6,$t2
- sbcs $a7,$a7,$t3
- sbc $ff,$ff,$ff @ broadcast borrow bit
- ldr lr,[sp],#4 @ pop lr
-
- adds $a0,$a0,$ff @ add synthesized modulus
- adcs $a1,$a1,$ff
- str $a0,[$r_ptr,#0]
- adcs $a2,$a2,$ff
- str $a1,[$r_ptr,#4]
- adcs $a3,$a3,#0
- str $a2,[$r_ptr,#8]
- adcs $a4,$a4,#0
- str $a3,[$r_ptr,#12]
- adcs $a5,$a5,#0
- str $a4,[$r_ptr,#16]
- adcs $a6,$a6,$ff,lsr#31
- str $a5,[$r_ptr,#20]
- adcs $a7,$a7,$ff
- str $a6,[$r_ptr,#24]
- str $a7,[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_sub_from,.-__ecp_nistz256_sub_from
-
-.type __ecp_nistz256_sub_morf,%function
-.align 5
-__ecp_nistz256_sub_morf:
- str lr,[sp,#-4]! @ push lr
-
- ldr $t0,[$b_ptr,#0]
- ldr $t1,[$b_ptr,#4]
- ldr $t2,[$b_ptr,#8]
- ldr $t3,[$b_ptr,#12]
- subs $a0,$t0,$a0
- ldr $t0,[$b_ptr,#16]
- sbcs $a1,$t1,$a1
- ldr $t1,[$b_ptr,#20]
- sbcs $a2,$t2,$a2
- ldr $t2,[$b_ptr,#24]
- sbcs $a3,$t3,$a3
- ldr $t3,[$b_ptr,#28]
- sbcs $a4,$t0,$a4
- sbcs $a5,$t1,$a5
- sbcs $a6,$t2,$a6
- sbcs $a7,$t3,$a7
- sbc $ff,$ff,$ff @ broadcast borrow bit
- ldr lr,[sp],#4 @ pop lr
-
- adds $a0,$a0,$ff @ add synthesized modulus
- adcs $a1,$a1,$ff
- str $a0,[$r_ptr,#0]
- adcs $a2,$a2,$ff
- str $a1,[$r_ptr,#4]
- adcs $a3,$a3,#0
- str $a2,[$r_ptr,#8]
- adcs $a4,$a4,#0
- str $a3,[$r_ptr,#12]
- adcs $a5,$a5,#0
- str $a4,[$r_ptr,#16]
- adcs $a6,$a6,$ff,lsr#31
- str $a5,[$r_ptr,#20]
- adcs $a7,$a7,$ff
- str $a6,[$r_ptr,#24]
- str $a7,[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_sub_morf,.-__ecp_nistz256_sub_morf
-
-.type __ecp_nistz256_add_self,%function
-.align 4
-__ecp_nistz256_add_self:
- adds $a0,$a0,$a0 @ a[0:7]+=a[0:7]
- adcs $a1,$a1,$a1
- adcs $a2,$a2,$a2
- adcs $a3,$a3,$a3
- adcs $a4,$a4,$a4
- adcs $a5,$a5,$a5
- adcs $a6,$a6,$a6
- mov $ff,#0
- adcs $a7,$a7,$a7
- adc $ff,$ff,#0
-
- @ if a+b >= modulus, subtract modulus.
- @
- @ But since comparison implies subtraction, we subtract
- @ modulus and then add it back if subtraction borrowed.
-
- subs $a0,$a0,#-1
- sbcs $a1,$a1,#-1
- sbcs $a2,$a2,#-1
- sbcs $a3,$a3,#0
- sbcs $a4,$a4,#0
- sbcs $a5,$a5,#0
- sbcs $a6,$a6,#1
- sbcs $a7,$a7,#-1
- sbc $ff,$ff,#0
-
- @ Note that because mod has special form, i.e. consists of
- @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- @ using value of borrow as a whole or extracting single bit.
- @ Follow $ff register...
-
- adds $a0,$a0,$ff @ add synthesized modulus
- adcs $a1,$a1,$ff
- str $a0,[$r_ptr,#0]
- adcs $a2,$a2,$ff
- str $a1,[$r_ptr,#4]
- adcs $a3,$a3,#0
- str $a2,[$r_ptr,#8]
- adcs $a4,$a4,#0
- str $a3,[$r_ptr,#12]
- adcs $a5,$a5,#0
- str $a4,[$r_ptr,#16]
- adcs $a6,$a6,$ff,lsr#31
- str $a5,[$r_ptr,#20]
- adcs $a7,$a7,$ff
- str $a6,[$r_ptr,#24]
- str $a7,[$r_ptr,#28]
-
- mov pc,lr
-.size __ecp_nistz256_add_self,.-__ecp_nistz256_add_self
-
-___
-
-########################################################################
-# following subroutines are "literal" implementation of those found in
-# ecp_nistz256.c
-#
-########################################################################
-# void ecp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-{
-my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4));
-# above map() describes stack layout with 5 temporary
-# 256-bit vectors on top. Then note that we push
-# starting from r0, which means that we have copy of
-# input arguments just below these temporary vectors.
-
-$code.=<<___;
-.globl GFp_nistz256_point_double
-.type GFp_nistz256_point_double,%function
-.align 5
-GFp_nistz256_point_double:
- stmdb sp!,{r0-r12,lr} @ push from r0, unusual, but intentional
- sub sp,sp,#32*5
-
-.Lpoint_double_shortcut:
- add r3,sp,#$in_x
- ldmia $a_ptr!,{r4-r11} @ copy in_x
- stmia r3,{r4-r11}
-
- add $r_ptr,sp,#$S
- bl __ecp_nistz256_mul_by_2 @ p256_mul_by_2(S, in_y);
-
- add $b_ptr,$a_ptr,#32
- add $a_ptr,$a_ptr,#32
- add $r_ptr,sp,#$Zsqr
- bl __ecp_nistz256_mul_mont @ p256_sqr_mont(Zsqr, in_z);
-
- add $a_ptr,sp,#$S
- add $b_ptr,sp,#$S
- add $r_ptr,sp,#$S
- bl __ecp_nistz256_mul_mont @ p256_sqr_mont(S, S);
-
- ldr $b_ptr,[sp,#32*5+4]
- add $a_ptr,$b_ptr,#32
- add $b_ptr,$b_ptr,#64
- add $r_ptr,sp,#$tmp0
- bl __ecp_nistz256_mul_mont @ p256_mul_mont(tmp0, in_z, in_y);
-
- ldr $r_ptr,[sp,#32*5]
- add $r_ptr,$r_ptr,#64
- bl __ecp_nistz256_add_self @ p256_mul_by_2(res_z, tmp0);
-
- add $a_ptr,sp,#$in_x
- add $b_ptr,sp,#$Zsqr
- add $r_ptr,sp,#$M
- bl __ecp_nistz256_add @ p256_add(M, in_x, Zsqr);
-
- add $a_ptr,sp,#$in_x
- add $b_ptr,sp,#$Zsqr
- add $r_ptr,sp,#$Zsqr
- bl __ecp_nistz256_sub @ p256_sub(Zsqr, in_x, Zsqr);
-
- add $a_ptr,sp,#$S
- add $b_ptr,sp,#$S
- add $r_ptr,sp,#$tmp0
- bl __ecp_nistz256_mul_mont @ p256_sqr_mont(tmp0, S);
-
- add $a_ptr,sp,#$Zsqr
- add $b_ptr,sp,#$M
- add $r_ptr,sp,#$M
- bl __ecp_nistz256_mul_mont @ p256_mul_mont(M, M, Zsqr);
-
- ldr $r_ptr,[sp,#32*5]
- add $a_ptr,sp,#$tmp0
- add $r_ptr,$r_ptr,#32
- bl __ecp_nistz256_div_by_2 @ p256_div_by_2(res_y, tmp0);
-
- add $a_ptr,sp,#$M
- add $r_ptr,sp,#$M
- bl __ecp_nistz256_mul_by_3 @ p256_mul_by_3(M, M);
-
- add $a_ptr,sp,#$in_x
- add $b_ptr,sp,#$S
- add $r_ptr,sp,#$S
- bl __ecp_nistz256_mul_mont @ p256_mul_mont(S, S, in_x);
-
- add $r_ptr,sp,#$tmp0
- bl __ecp_nistz256_add_self @ p256_mul_by_2(tmp0, S);
-
- ldr $r_ptr,[sp,#32*5]
- add $a_ptr,sp,#$M
- add $b_ptr,sp,#$M
- bl __ecp_nistz256_mul_mont @ p256_sqr_mont(res_x, M);
-
- add $b_ptr,sp,#$tmp0
- bl __ecp_nistz256_sub_from @ p256_sub(res_x, res_x, tmp0);
-
- add $b_ptr,sp,#$S
- add $r_ptr,sp,#$S
- bl __ecp_nistz256_sub_morf @ p256_sub(S, S, res_x);
-
- add $a_ptr,sp,#$M
- add $b_ptr,sp,#$S
- bl __ecp_nistz256_mul_mont @ p256_mul_mont(S, S, M);
-
- ldr $r_ptr,[sp,#32*5]
- add $b_ptr,$r_ptr,#32
- add $r_ptr,$r_ptr,#32
- bl __ecp_nistz256_sub_from @ p256_sub(res_y, S, res_y);
-
- add sp,sp,#32*5+16 @ +16 means "skip even over saved r0-r3"
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
- ldmia sp!,{r4-r12,pc}
-#else
- ldmia sp!,{r4-r12,lr}
- bx lr @ interoperable with Thumb ISA:-)
-#endif
-.size GFp_nistz256_point_double,.-GFp_nistz256_point_double
-___
-}
-
-}}}
-
-foreach (split("\n",$code)) {
- s/\`([^\`]*)\`/eval $1/geo;
-
- s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo;
-
- print $_,"\n";
-}
-close STDOUT or die "error closing STDOUT";
diff --git a/crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl b/crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl
deleted file mode 100644
index 4347d7d..0000000
--- a/crypto/fipsmodule/ec/asm/ecp_nistz256-armv8.pl
+++ /dev/null
@@ -1,908 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2015-2016 The OpenSSL Project Authors. 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.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. All advertising materials mentioning features or use of this
-# software must display the following acknowledgment:
-# "This product includes software developed by the OpenSSL Project
-# for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
-#
-# 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
-# endorse or promote products derived from this software without
-# prior written permission. For written permission, please contact
-# openssl-core@openssl.org.
-#
-# 5. Products derived from this software may not be called "OpenSSL"
-# nor may "OpenSSL" appear in their names without prior written
-# permission of the OpenSSL Project.
-#
-# 6. Redistributions of any form whatsoever must retain the following
-# acknowledgment:
-# "This product includes software developed by the OpenSSL Project
-# for use in the OpenSSL Toolkit (http://www.openssl.org/)"
-#
-# THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
-# EXPRESSED 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 THE OpenSSL PROJECT OR
-# ITS CONTRIBUTORS 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.
-# ====================================================================
-#
-# This product includes cryptographic software written by Eric Young
-# (eay@cryptsoft.com). This product includes software written by Tim
-# Hudson (tjh@cryptsoft.com).
-
-
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project. The module is, however, dual licensed under OpenSSL and
-# CRYPTOGAMS licenses depending on where you obtain it. For further
-# details see http://www.openssl.org/~appro/cryptogams/.
-# ====================================================================
-#
-# ECP_NISTZ256 module for ARMv8.
-#
-# February 2015.
-#
-# Original ECP_NISTZ256 submission targeting x86_64 is detailed in
-# http://eprint.iacr.org/2013/816.
-#
-# with/without -DECP_NISTZ256_ASM
-# Apple A7 +120-360%
-# Cortex-A53 +120-400%
-# Cortex-A57 +120-350%
-# X-Gene +200-330%
-# Denver +140-400%
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, server-side
-# operation. Keep in mind that +400% means 5x improvement.
-
-$flavour = shift;
-while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {}
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../../perlasm/arm-xlate.pl" and -f $xlate) or
-die "can't locate arm-xlate.pl";
-
-open OUT,"| \"$^X\" $xlate $flavour $output";
-*STDOUT=*OUT;
-
-{
-my ($rp,$ap,$bp,$bi,$a0,$a1,$a2,$a3,$t0,$t1,$t2,$t3,$poly1,$poly3,
- $acc0,$acc1,$acc2,$acc3,$acc4,$acc5) =
- map("x$_",(0..17,19,20));
-
-my ($acc6,$acc7)=($ap,$bp); # used in __ecp_nistz256_sqr_mont
-
-$code.=<<___;
-#include <GFp/arm_arch.h>
-
-.text
-.align 5
-.Lpoly:
-.quad 0xffffffffffffffff,0x00000000ffffffff,0x0000000000000000,0xffffffff00000001
-.Lone_mont:
-.quad 0x0000000000000001,0xffffffff00000000,0xffffffffffffffff,0x00000000fffffffe
-.Lone:
-.quad 1,0,0,0
-.asciz "ECP_NISTZ256 for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
-
-// void GFp_nistz256_mul_mont(BN_ULONG x0[4],const BN_ULONG x1[4],
-// const BN_ULONG x2[4]);
-.globl GFp_nistz256_mul_mont
-.type GFp_nistz256_mul_mont,%function
-.align 4
-GFp_nistz256_mul_mont:
- stp x29,x30,[sp,#-32]!
- add x29,sp,#0
- stp x19,x20,[sp,#16]
-
- ldr $bi,[$bp] // bp[0]
- ldp $a0,$a1,[$ap]
- ldp $a2,$a3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
-
- bl __ecp_nistz256_mul_mont
-
- ldp x19,x20,[sp,#16]
- ldp x29,x30,[sp],#32
- ret
-.size GFp_nistz256_mul_mont,.-GFp_nistz256_mul_mont
-
-// void GFp_nistz256_sqr_mont(BN_ULONG x0[4],const BN_ULONG x1[4]);
-.globl GFp_nistz256_sqr_mont
-.type GFp_nistz256_sqr_mont,%function
-.align 4
-GFp_nistz256_sqr_mont:
- stp x29,x30,[sp,#-32]!
- add x29,sp,#0
- stp x19,x20,[sp,#16]
-
- ldp $a0,$a1,[$ap]
- ldp $a2,$a3,[$ap,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
-
- bl __ecp_nistz256_sqr_mont
-
- ldp x19,x20,[sp,#16]
- ldp x29,x30,[sp],#32
- ret
-.size GFp_nistz256_sqr_mont,.-GFp_nistz256_sqr_mont
-
-// void GFp_nistz256_add(BN_ULONG x0[4],const BN_ULONG x1[4],
-// const BN_ULONG x2[4]);
-.globl GFp_nistz256_add
-.type GFp_nistz256_add,%function
-.align 4
-GFp_nistz256_add:
- stp x29,x30,[sp,#-16]!
- add x29,sp,#0
-
- ldp $acc0,$acc1,[$ap]
- ldp $t0,$t1,[$bp]
- ldp $acc2,$acc3,[$ap,#16]
- ldp $t2,$t3,[$bp,#16]
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
-
- bl __ecp_nistz256_add
-
- ldp x29,x30,[sp],#16
- ret
-.size GFp_nistz256_add,.-GFp_nistz256_add
-
-// void GFp_nistz256_neg(BN_ULONG x0[4],const BN_ULONG x1[4]);
-.globl GFp_nistz256_neg
-.type GFp_nistz256_neg,%function
-.align 4
-GFp_nistz256_neg:
- stp x29,x30,[sp,#-16]!
- add x29,sp,#0
-
- mov $bp,$ap
- mov $acc0,xzr // a = 0
- mov $acc1,xzr
- mov $acc2,xzr
- mov $acc3,xzr
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
-
- bl __ecp_nistz256_sub_from
-
- ldp x29,x30,[sp],#16
- ret
-.size GFp_nistz256_neg,.-GFp_nistz256_neg
-
-// note that __ecp_nistz256_mul_mont expects a[0-3] input pre-loaded
-// to $a0-$a3 and b[0] - to $bi
-.type __ecp_nistz256_mul_mont,%function
-.align 4
-__ecp_nistz256_mul_mont:
- mul $acc0,$a0,$bi // a[0]*b[0]
- umulh $t0,$a0,$bi
-
- mul $acc1,$a1,$bi // a[1]*b[0]
- umulh $t1,$a1,$bi
-
- mul $acc2,$a2,$bi // a[2]*b[0]
- umulh $t2,$a2,$bi
-
- mul $acc3,$a3,$bi // a[3]*b[0]
- umulh $t3,$a3,$bi
- ldr $bi,[$bp,#8] // b[1]
-
- adds $acc1,$acc1,$t0 // accumulate high parts of multiplication
- lsl $t0,$acc0,#32
- adcs $acc2,$acc2,$t1
- lsr $t1,$acc0,#32
- adcs $acc3,$acc3,$t2
- adc $acc4,xzr,$t3
- mov $acc5,xzr
-___
-for($i=1;$i<4;$i++) {
- # Reduction iteration is normally performed by accumulating
- # result of multiplication of modulus by "magic" digit [and
- # omitting least significant word, which is guaranteed to
- # be 0], but thanks to special form of modulus and "magic"
- # digit being equal to least significant word, it can be
- # performed with additions and subtractions alone. Indeed:
- #
- # ffff0001.00000000.0000ffff.ffffffff
- # * abcdefgh
- # + xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.abcdefgh
- #
- # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we
- # rewrite above as:
- #
- # xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.abcdefgh
- # + abcdefgh.abcdefgh.0000abcd.efgh0000.00000000
- # - 0000abcd.efgh0000.00000000.00000000.abcdefgh
- #
- # or marking redundant operations:
- #
- # xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.--------
- # + abcdefgh.abcdefgh.0000abcd.efgh0000.--------
- # - 0000abcd.efgh0000.--------.--------.--------
-
-$code.=<<___;
- subs $t2,$acc0,$t0 // "*0xffff0001"
- sbc $t3,$acc0,$t1
- adds $acc0,$acc1,$t0 // +=acc[0]<<96 and omit acc[0]
- mul $t0,$a0,$bi // lo(a[0]*b[i])
- adcs $acc1,$acc2,$t1
- mul $t1,$a1,$bi // lo(a[1]*b[i])
- adcs $acc2,$acc3,$t2 // +=acc[0]*0xffff0001
- mul $t2,$a2,$bi // lo(a[2]*b[i])
- adcs $acc3,$acc4,$t3
- mul $t3,$a3,$bi // lo(a[3]*b[i])
- adc $acc4,$acc5,xzr
-
- adds $acc0,$acc0,$t0 // accumulate low parts of multiplication
- umulh $t0,$a0,$bi // hi(a[0]*b[i])
- adcs $acc1,$acc1,$t1
- umulh $t1,$a1,$bi // hi(a[1]*b[i])
- adcs $acc2,$acc2,$t2
- umulh $t2,$a2,$bi // hi(a[2]*b[i])
- adcs $acc3,$acc3,$t3
- umulh $t3,$a3,$bi // hi(a[3]*b[i])
- adc $acc4,$acc4,xzr
-___
-$code.=<<___ if ($i<3);
- ldr $bi,[$bp,#8*($i+1)] // b[$i+1]
-___
-$code.=<<___;
- adds $acc1,$acc1,$t0 // accumulate high parts of multiplication
- lsl $t0,$acc0,#32
- adcs $acc2,$acc2,$t1
- lsr $t1,$acc0,#32
- adcs $acc3,$acc3,$t2
- adcs $acc4,$acc4,$t3
- adc $acc5,xzr,xzr
-___
-}
-$code.=<<___;
- // last reduction
- subs $t2,$acc0,$t0 // "*0xffff0001"
- sbc $t3,$acc0,$t1
- adds $acc0,$acc1,$t0 // +=acc[0]<<96 and omit acc[0]
- adcs $acc1,$acc2,$t1
- adcs $acc2,$acc3,$t2 // +=acc[0]*0xffff0001
- adcs $acc3,$acc4,$t3
- adc $acc4,$acc5,xzr
-
- adds $t0,$acc0,#1 // subs $t0,$acc0,#-1 // tmp = ret-modulus
- sbcs $t1,$acc1,$poly1
- sbcs $t2,$acc2,xzr
- sbcs $t3,$acc3,$poly3
- sbcs xzr,$acc4,xzr // did it borrow?
-
- csel $acc0,$acc0,$t0,lo // ret = borrow ? ret : ret-modulus
- csel $acc1,$acc1,$t1,lo
- csel $acc2,$acc2,$t2,lo
- stp $acc0,$acc1,[$rp]
- csel $acc3,$acc3,$t3,lo
- stp $acc2,$acc3,[$rp,#16]
-
- ret
-.size __ecp_nistz256_mul_mont,.-__ecp_nistz256_mul_mont
-
-// note that __ecp_nistz256_sqr_mont expects a[0-3] input pre-loaded
-// to $a0-$a3
-.type __ecp_nistz256_sqr_mont,%function
-.align 4
-__ecp_nistz256_sqr_mont:
- // | | | | | |a1*a0| |
- // | | | | |a2*a0| | |
- // | |a3*a2|a3*a0| | | |
- // | | | |a2*a1| | | |
- // | | |a3*a1| | | | |
- // *| | | | | | | | 2|
- // +|a3*a3|a2*a2|a1*a1|a0*a0|
- // |--+--+--+--+--+--+--+--|
- // |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is $accx, i.e. follow $accx
- //
- // "can't overflow" below mark carrying into high part of
- // multiplication result, which can't overflow, because it
- // can never be all ones.
-
- mul $acc1,$a1,$a0 // a[1]*a[0]
- umulh $t1,$a1,$a0
- mul $acc2,$a2,$a0 // a[2]*a[0]
- umulh $t2,$a2,$a0
- mul $acc3,$a3,$a0 // a[3]*a[0]
- umulh $acc4,$a3,$a0
-
- adds $acc2,$acc2,$t1 // accumulate high parts of multiplication
- mul $t0,$a2,$a1 // a[2]*a[1]
- umulh $t1,$a2,$a1
- adcs $acc3,$acc3,$t2
- mul $t2,$a3,$a1 // a[3]*a[1]
- umulh $t3,$a3,$a1
- adc $acc4,$acc4,xzr // can't overflow
-
- mul $acc5,$a3,$a2 // a[3]*a[2]
- umulh $acc6,$a3,$a2
-
- adds $t1,$t1,$t2 // accumulate high parts of multiplication
- mul $acc0,$a0,$a0 // a[0]*a[0]
- adc $t2,$t3,xzr // can't overflow
-
- adds $acc3,$acc3,$t0 // accumulate low parts of multiplication
- umulh $a0,$a0,$a0
- adcs $acc4,$acc4,$t1
- mul $t1,$a1,$a1 // a[1]*a[1]
- adcs $acc5,$acc5,$t2
- umulh $a1,$a1,$a1
- adc $acc6,$acc6,xzr // can't overflow
-
- adds $acc1,$acc1,$acc1 // acc[1-6]*=2
- mul $t2,$a2,$a2 // a[2]*a[2]
- adcs $acc2,$acc2,$acc2
- umulh $a2,$a2,$a2
- adcs $acc3,$acc3,$acc3
- mul $t3,$a3,$a3 // a[3]*a[3]
- adcs $acc4,$acc4,$acc4
- umulh $a3,$a3,$a3
- adcs $acc5,$acc5,$acc5
- adcs $acc6,$acc6,$acc6
- adc $acc7,xzr,xzr
-
- adds $acc1,$acc1,$a0 // +a[i]*a[i]
- adcs $acc2,$acc2,$t1
- adcs $acc3,$acc3,$a1
- adcs $acc4,$acc4,$t2
- adcs $acc5,$acc5,$a2
- lsl $t0,$acc0,#32
- adcs $acc6,$acc6,$t3
- lsr $t1,$acc0,#32
- adc $acc7,$acc7,$a3
-___
-for($i=0;$i<3;$i++) { # reductions, see commentary in
- # multiplication for details
-$code.=<<___;
- subs $t2,$acc0,$t0 // "*0xffff0001"
- sbc $t3,$acc0,$t1
- adds $acc0,$acc1,$t0 // +=acc[0]<<96 and omit acc[0]
- adcs $acc1,$acc2,$t1
- lsl $t0,$acc0,#32
- adcs $acc2,$acc3,$t2 // +=acc[0]*0xffff0001
- lsr $t1,$acc0,#32
- adc $acc3,$t3,xzr // can't overflow
-___
-}
-$code.=<<___;
- subs $t2,$acc0,$t0 // "*0xffff0001"
- sbc $t3,$acc0,$t1
- adds $acc0,$acc1,$t0 // +=acc[0]<<96 and omit acc[0]
- adcs $acc1,$acc2,$t1
- adcs $acc2,$acc3,$t2 // +=acc[0]*0xffff0001
- adc $acc3,$t3,xzr // can't overflow
-
- adds $acc0,$acc0,$acc4 // accumulate upper half
- adcs $acc1,$acc1,$acc5
- adcs $acc2,$acc2,$acc6
- adcs $acc3,$acc3,$acc7
- adc $acc4,xzr,xzr
-
- adds $t0,$acc0,#1 // subs $t0,$acc0,#-1 // tmp = ret-modulus
- sbcs $t1,$acc1,$poly1
- sbcs $t2,$acc2,xzr
- sbcs $t3,$acc3,$poly3
- sbcs xzr,$acc4,xzr // did it borrow?
-
- csel $acc0,$acc0,$t0,lo // ret = borrow ? ret : ret-modulus
- csel $acc1,$acc1,$t1,lo
- csel $acc2,$acc2,$t2,lo
- stp $acc0,$acc1,[$rp]
- csel $acc3,$acc3,$t3,lo
- stp $acc2,$acc3,[$rp,#16]
-
- ret
-.size __ecp_nistz256_sqr_mont,.-__ecp_nistz256_sqr_mont
-
-// Note that __ecp_nistz256_add expects both input vectors pre-loaded to
-// $a0-$a3 and $t0-$t3. This is done because it's used in multiple
-// contexts, e.g. in multiplication by 2 and 3...
-.type __ecp_nistz256_add,%function
-.align 4
-__ecp_nistz256_add:
- adds $acc0,$acc0,$t0 // ret = a+b
- adcs $acc1,$acc1,$t1
- adcs $acc2,$acc2,$t2
- adcs $acc3,$acc3,$t3
- adc $ap,xzr,xzr // zap $ap
-
- adds $t0,$acc0,#1 // subs $t0,$a0,#-1 // tmp = ret-modulus
- sbcs $t1,$acc1,$poly1
- sbcs $t2,$acc2,xzr
- sbcs $t3,$acc3,$poly3
- sbcs xzr,$ap,xzr // did subtraction borrow?
-
- csel $acc0,$acc0,$t0,lo // ret = borrow ? ret : ret-modulus
- csel $acc1,$acc1,$t1,lo
- csel $acc2,$acc2,$t2,lo
- stp $acc0,$acc1,[$rp]
- csel $acc3,$acc3,$t3,lo
- stp $acc2,$acc3,[$rp,#16]
-
- ret
-.size __ecp_nistz256_add,.-__ecp_nistz256_add
-
-.type __ecp_nistz256_sub_from,%function
-.align 4
-__ecp_nistz256_sub_from:
- ldp $t0,$t1,[$bp]
- ldp $t2,$t3,[$bp,#16]
- subs $acc0,$acc0,$t0 // ret = a-b
- sbcs $acc1,$acc1,$t1
- sbcs $acc2,$acc2,$t2
- sbcs $acc3,$acc3,$t3
- sbc $ap,xzr,xzr // zap $ap
-
- subs $t0,$acc0,#1 // adds $t0,$a0,#-1 // tmp = ret+modulus
- adcs $t1,$acc1,$poly1
- adcs $t2,$acc2,xzr
- adc $t3,$acc3,$poly3
- cmp $ap,xzr // did subtraction borrow?
-
- csel $acc0,$acc0,$t0,eq // ret = borrow ? ret+modulus : ret
- csel $acc1,$acc1,$t1,eq
- csel $acc2,$acc2,$t2,eq
- stp $acc0,$acc1,[$rp]
- csel $acc3,$acc3,$t3,eq
- stp $acc2,$acc3,[$rp,#16]
-
- ret
-.size __ecp_nistz256_sub_from,.-__ecp_nistz256_sub_from
-
-.type __ecp_nistz256_sub_morf,%function
-.align 4
-__ecp_nistz256_sub_morf:
- ldp $t0,$t1,[$bp]
- ldp $t2,$t3,[$bp,#16]
- subs $acc0,$t0,$acc0 // ret = b-a
- sbcs $acc1,$t1,$acc1
- sbcs $acc2,$t2,$acc2
- sbcs $acc3,$t3,$acc3
- sbc $ap,xzr,xzr // zap $ap
-
- subs $t0,$acc0,#1 // adds $t0,$a0,#-1 // tmp = ret+modulus
- adcs $t1,$acc1,$poly1
- adcs $t2,$acc2,xzr
- adc $t3,$acc3,$poly3
- cmp $ap,xzr // did subtraction borrow?
-
- csel $acc0,$acc0,$t0,eq // ret = borrow ? ret+modulus : ret
- csel $acc1,$acc1,$t1,eq
- csel $acc2,$acc2,$t2,eq
- stp $acc0,$acc1,[$rp]
- csel $acc3,$acc3,$t3,eq
- stp $acc2,$acc3,[$rp,#16]
-
- ret
-.size __ecp_nistz256_sub_morf,.-__ecp_nistz256_sub_morf
-
-.type __ecp_nistz256_div_by_2,%function
-.align 4
-__ecp_nistz256_div_by_2:
- subs $t0,$acc0,#1 // adds $t0,$a0,#-1 // tmp = a+modulus
- adcs $t1,$acc1,$poly1
- adcs $t2,$acc2,xzr
- adcs $t3,$acc3,$poly3
- adc $ap,xzr,xzr // zap $ap
- tst $acc0,#1 // is a even?
-
- csel $acc0,$acc0,$t0,eq // ret = even ? a : a+modulus
- csel $acc1,$acc1,$t1,eq
- csel $acc2,$acc2,$t2,eq
- csel $acc3,$acc3,$t3,eq
- csel $ap,xzr,$ap,eq
-
- lsr $acc0,$acc0,#1 // ret >>= 1
- orr $acc0,$acc0,$acc1,lsl#63
- lsr $acc1,$acc1,#1
- orr $acc1,$acc1,$acc2,lsl#63
- lsr $acc2,$acc2,#1
- orr $acc2,$acc2,$acc3,lsl#63
- lsr $acc3,$acc3,#1
- stp $acc0,$acc1,[$rp]
- orr $acc3,$acc3,$ap,lsl#63
- stp $acc2,$acc3,[$rp,#16]
-
- ret
-.size __ecp_nistz256_div_by_2,.-__ecp_nistz256_div_by_2
-___
-########################################################################
-# following subroutines are "literal" implementation of those found in
-# ecp_nistz256.c
-#
-########################################################################
-# void GFp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-{
-my ($S,$M,$Zsqr,$tmp0)=map(32*$_,(0..3));
-# above map() describes stack layout with 4 temporary
-# 256-bit vectors on top.
-my ($rp_real,$ap_real) = map("x$_",(21,22));
-
-$code.=<<___;
-.globl GFp_nistz256_point_double
-.type GFp_nistz256_point_double,%function
-.align 5
-GFp_nistz256_point_double:
- stp x29,x30,[sp,#-80]!
- add x29,sp,#0
- stp x19,x20,[sp,#16]
- stp x21,x22,[sp,#32]
- sub sp,sp,#32*4
-
-.Ldouble_shortcut:
- ldp $acc0,$acc1,[$ap,#32]
- mov $rp_real,$rp
- ldp $acc2,$acc3,[$ap,#48]
- mov $ap_real,$ap
- ldr $poly1,.Lpoly+8
- mov $t0,$acc0
- ldr $poly3,.Lpoly+24
- mov $t1,$acc1
- ldp $a0,$a1,[$ap_real,#64] // forward load for p256_sqr_mont
- mov $t2,$acc2
- mov $t3,$acc3
- ldp $a2,$a3,[$ap_real,#64+16]
- add $rp,sp,#$S
- bl __ecp_nistz256_add // p256_mul_by_2(S, in_y);
-
- add $rp,sp,#$Zsqr
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Zsqr, in_z);
-
- ldp $t0,$t1,[$ap_real]
- ldp $t2,$t3,[$ap_real,#16]
- mov $a0,$acc0 // put Zsqr aside for p256_sub
- mov $a1,$acc1
- mov $a2,$acc2
- mov $a3,$acc3
- add $rp,sp,#$M
- bl __ecp_nistz256_add // p256_add(M, Zsqr, in_x);
-
- add $bp,$ap_real,#0
- mov $acc0,$a0 // restore Zsqr
- mov $acc1,$a1
- ldp $a0,$a1,[sp,#$S] // forward load for p256_sqr_mont
- mov $acc2,$a2
- mov $acc3,$a3
- ldp $a2,$a3,[sp,#$S+16]
- add $rp,sp,#$Zsqr
- bl __ecp_nistz256_sub_morf // p256_sub(Zsqr, in_x, Zsqr);
-
- add $rp,sp,#$S
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(S, S);
-
- ldr $bi,[$ap_real,#32]
- ldp $a0,$a1,[$ap_real,#64]
- ldp $a2,$a3,[$ap_real,#64+16]
- add $bp,$ap_real,#32
- add $rp,sp,#$tmp0
- bl __ecp_nistz256_mul_mont // p256_mul_mont(tmp0, in_z, in_y);
-
- mov $t0,$acc0
- mov $t1,$acc1
- ldp $a0,$a1,[sp,#$S] // forward load for p256_sqr_mont
- mov $t2,$acc2
- mov $t3,$acc3
- ldp $a2,$a3,[sp,#$S+16]
- add $rp,$rp_real,#64
- bl __ecp_nistz256_add // p256_mul_by_2(res_z, tmp0);
-
- add $rp,sp,#$tmp0
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(tmp0, S);
-
- ldr $bi,[sp,#$Zsqr] // forward load for p256_mul_mont
- ldp $a0,$a1,[sp,#$M]
- ldp $a2,$a3,[sp,#$M+16]
- add $rp,$rp_real,#32
- bl __ecp_nistz256_div_by_2 // p256_div_by_2(res_y, tmp0);
-
- add $bp,sp,#$Zsqr
- add $rp,sp,#$M
- bl __ecp_nistz256_mul_mont // p256_mul_mont(M, M, Zsqr);
-
- mov $t0,$acc0 // duplicate M
- mov $t1,$acc1
- mov $t2,$acc2
- mov $t3,$acc3
- mov $a0,$acc0 // put M aside
- mov $a1,$acc1
- mov $a2,$acc2
- mov $a3,$acc3
- add $rp,sp,#$M
- bl __ecp_nistz256_add
- mov $t0,$a0 // restore M
- mov $t1,$a1
- ldr $bi,[$ap_real] // forward load for p256_mul_mont
- mov $t2,$a2
- ldp $a0,$a1,[sp,#$S]
- mov $t3,$a3
- ldp $a2,$a3,[sp,#$S+16]
- bl __ecp_nistz256_add // p256_mul_by_3(M, M);
-
- add $bp,$ap_real,#0
- add $rp,sp,#$S
- bl __ecp_nistz256_mul_mont // p256_mul_mont(S, S, in_x);
-
- mov $t0,$acc0
- mov $t1,$acc1
- ldp $a0,$a1,[sp,#$M] // forward load for p256_sqr_mont
- mov $t2,$acc2
- mov $t3,$acc3
- ldp $a2,$a3,[sp,#$M+16]
- add $rp,sp,#$tmp0
- bl __ecp_nistz256_add // p256_mul_by_2(tmp0, S);
-
- add $rp,$rp_real,#0
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(res_x, M);
-
- add $bp,sp,#$tmp0
- bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, tmp0);
-
- add $bp,sp,#$S
- add $rp,sp,#$S
- bl __ecp_nistz256_sub_morf // p256_sub(S, S, res_x);
-
- ldr $bi,[sp,#$M]
- mov $a0,$acc0 // copy S
- mov $a1,$acc1
- mov $a2,$acc2
- mov $a3,$acc3
- add $bp,sp,#$M
- bl __ecp_nistz256_mul_mont // p256_mul_mont(S, S, M);
-
- add $bp,$rp_real,#32
- add $rp,$rp_real,#32
- bl __ecp_nistz256_sub_from // p256_sub(res_y, S, res_y);
-
- add sp,x29,#0 // destroy frame
- ldp x19,x20,[x29,#16]
- ldp x21,x22,[x29,#32]
- ldp x29,x30,[sp],#80
- ret
-.size GFp_nistz256_point_double,.-GFp_nistz256_point_double
-___
-}
-
-########################################################################
-# void GFp_nistz256_point_add_affine(P256_POINT *out,const P256_POINT *in1,
-# const P256_POINT_AFFINE *in2);
-{
-my ($res_x,$res_y,$res_z,
- $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(32*$_,(0..9));
-my $Z1sqr = $S2;
-# above map() describes stack layout with 10 temporary
-# 256-bit vectors on top.
-my ($rp_real,$ap_real,$bp_real,$in1infty,$in2infty,$temp)=map("x$_",(21..26));
-
-$code.=<<___;
-.globl GFp_nistz256_point_add_affine
-.type GFp_nistz256_point_add_affine,%function
-.align 5
-GFp_nistz256_point_add_affine:
- stp x29,x30,[sp,#-80]!
- add x29,sp,#0
- stp x19,x20,[sp,#16]
- stp x21,x22,[sp,#32]
- stp x23,x24,[sp,#48]
- stp x25,x26,[sp,#64]
- sub sp,sp,#32*10
-
- mov $rp_real,$rp
- mov $ap_real,$ap
- mov $bp_real,$bp
- ldr $poly1,.Lpoly+8
- ldr $poly3,.Lpoly+24
-
- ldp $a0,$a1,[$ap,#64] // in1_z
- ldp $a2,$a3,[$ap,#64+16]
- orr $t0,$a0,$a1
- orr $t2,$a2,$a3
- orr $in1infty,$t0,$t2
- cmp $in1infty,#0
- csetm $in1infty,ne // !in1infty
-
- ldp $acc0,$acc1,[$bp] // in2_x
- ldp $acc2,$acc3,[$bp,#16]
- ldp $t0,$t1,[$bp,#32] // in2_y
- ldp $t2,$t3,[$bp,#48]
- orr $acc0,$acc0,$acc1
- orr $acc2,$acc2,$acc3
- orr $t0,$t0,$t1
- orr $t2,$t2,$t3
- orr $acc0,$acc0,$acc2
- orr $t0,$t0,$t2
- orr $in2infty,$acc0,$t0
- cmp $in2infty,#0
- csetm $in2infty,ne // !in2infty
-
- add $rp,sp,#$Z1sqr
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z1sqr, in1_z);
-
- mov $a0,$acc0
- mov $a1,$acc1
- mov $a2,$acc2
- mov $a3,$acc3
- ldr $bi,[$bp_real]
- add $bp,$bp_real,#0
- add $rp,sp,#$U2
- bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, Z1sqr, in2_x);
-
- add $bp,$ap_real,#0
- ldr $bi,[$ap_real,#64] // forward load for p256_mul_mont
- ldp $a0,$a1,[sp,#$Z1sqr]
- ldp $a2,$a3,[sp,#$Z1sqr+16]
- add $rp,sp,#$H
- bl __ecp_nistz256_sub_from // p256_sub(H, U2, in1_x);
-
- add $bp,$ap_real,#64
- add $rp,sp,#$S2
- bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, Z1sqr, in1_z);
-
- ldr $bi,[$ap_real,#64]
- ldp $a0,$a1,[sp,#$H]
- ldp $a2,$a3,[sp,#$H+16]
- add $bp,$ap_real,#64
- add $rp,sp,#$res_z
- bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, H, in1_z);
-
- ldr $bi,[$bp_real,#32]
- ldp $a0,$a1,[sp,#$S2]
- ldp $a2,$a3,[sp,#$S2+16]
- add $bp,$bp_real,#32
- add $rp,sp,#$S2
- bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S2, in2_y);
-
- add $bp,$ap_real,#32
- ldp $a0,$a1,[sp,#$H] // forward load for p256_sqr_mont
- ldp $a2,$a3,[sp,#$H+16]
- add $rp,sp,#$R
- bl __ecp_nistz256_sub_from // p256_sub(R, S2, in1_y);
-
- add $rp,sp,#$Hsqr
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Hsqr, H);
-
- ldp $a0,$a1,[sp,#$R]
- ldp $a2,$a3,[sp,#$R+16]
- add $rp,sp,#$Rsqr
- bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Rsqr, R);
-
- ldr $bi,[sp,#$H]
- ldp $a0,$a1,[sp,#$Hsqr]
- ldp $a2,$a3,[sp,#$Hsqr+16]
- add $bp,sp,#$H
- add $rp,sp,#$Hcub
- bl __ecp_nistz256_mul_mont // p256_mul_mont(Hcub, Hsqr, H);
-
- ldr $bi,[$ap_real]
- ldp $a0,$a1,[sp,#$Hsqr]
- ldp $a2,$a3,[sp,#$Hsqr+16]
- add $bp,$ap_real,#0
- add $rp,sp,#$U2
- bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, in1_x, Hsqr);
-
- mov $t0,$acc0
- mov $t1,$acc1
- mov $t2,$acc2
- mov $t3,$acc3
- add $rp,sp,#$Hsqr
- bl __ecp_nistz256_add // p256_mul_by_2(Hsqr, U2);
-
- add $bp,sp,#$Rsqr
- add $rp,sp,#$res_x
- bl __ecp_nistz256_sub_morf // p256_sub(res_x, Rsqr, Hsqr);
-
- add $bp,sp,#$Hcub
- bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, Hcub);
-
- add $bp,sp,#$U2
- ldr $bi,[$ap_real,#32] // forward load for p256_mul_mont
- ldp $a0,$a1,[sp,#$Hcub]
- ldp $a2,$a3,[sp,#$Hcub+16]
- add $rp,sp,#$res_y
- bl __ecp_nistz256_sub_morf // p256_sub(res_y, U2, res_x);
-
- add $bp,$ap_real,#32
- add $rp,sp,#$S2
- bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, in1_y, Hcub);
-
- ldr $bi,[sp,#$R]
- ldp $a0,$a1,[sp,#$res_y]
- ldp $a2,$a3,[sp,#$res_y+16]
- add $bp,sp,#$R
- add $rp,sp,#$res_y
- bl __ecp_nistz256_mul_mont // p256_mul_mont(res_y, res_y, R);
-
- add $bp,sp,#$S2
- bl __ecp_nistz256_sub_from // p256_sub(res_y, res_y, S2);
-
- ldp $a0,$a1,[sp,#$res_x] // res
- ldp $a2,$a3,[sp,#$res_x+16]
- ldp $t0,$t1,[$bp_real] // in2
- ldp $t2,$t3,[$bp_real,#16]
-___
-for($i=0;$i<64;$i+=32) { # conditional moves
-$code.=<<___;
- ldp $acc0,$acc1,[$ap_real,#$i] // in1
- cmp $in1infty,#0 // !$in1intfy, remember?
- ldp $acc2,$acc3,[$ap_real,#$i+16]
- csel $t0,$a0,$t0,ne
- csel $t1,$a1,$t1,ne
- ldp $a0,$a1,[sp,#$res_x+$i+32] // res
- csel $t2,$a2,$t2,ne
- csel $t3,$a3,$t3,ne
- cmp $in2infty,#0 // !$in2intfy, remember?
- ldp $a2,$a3,[sp,#$res_x+$i+48]
- csel $acc0,$t0,$acc0,ne
- csel $acc1,$t1,$acc1,ne
- ldp $t0,$t1,[$bp_real,#$i+32] // in2
- csel $acc2,$t2,$acc2,ne
- csel $acc3,$t3,$acc3,ne
- ldp $t2,$t3,[$bp_real,#$i+48]
- stp $acc0,$acc1,[$rp_real,#$i]
- stp $acc2,$acc3,[$rp_real,#$i+16]
-___
-$code.=<<___ if ($i == 0);
- adr $bp_real,.Lone_mont-64
-___
-}
-$code.=<<___;
- ldp $acc0,$acc1,[$ap_real,#$i] // in1
- cmp $in1infty,#0 // !$in1intfy, remember?
- ldp $acc2,$acc3,[$ap_real,#$i+16]
- csel $t0,$a0,$t0,ne
- csel $t1,$a1,$t1,ne
- csel $t2,$a2,$t2,ne
- csel $t3,$a3,$t3,ne
- cmp $in2infty,#0 // !$in2intfy, remember?
- csel $acc0,$t0,$acc0,ne
- csel $acc1,$t1,$acc1,ne
- csel $acc2,$t2,$acc2,ne
- csel $acc3,$t3,$acc3,ne
- stp $acc0,$acc1,[$rp_real,#$i]
- stp $acc2,$acc3,[$rp_real,#$i+16]
-
- add sp,x29,#0 // destroy frame
- ldp x19,x20,[x29,#16]
- ldp x21,x22,[x29,#32]
- ldp x23,x24,[x29,#48]
- ldp x25,x26,[x29,#64]
- ldp x29,x30,[sp],#80
- ret
-.size GFp_nistz256_point_add_affine,.-GFp_nistz256_point_add_affine
-___
-} }
-
-foreach (split("\n",$code)) {
- s/\`([^\`]*)\`/eval $1/ge;
-
- print $_,"\n";
-}
-close STDOUT or die "error closing STDOUT";
diff --git a/crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl b/crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl
deleted file mode 100644
index 65212d0..0000000
--- a/crypto/fipsmodule/ec/asm/ecp_nistz256-x86.pl
+++ /dev/null
@@ -1,1122 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2015-2016 The OpenSSL Project Authors. 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.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. All advertising materials mentioning features or use of this
-# software must display the following acknowledgment:
-# "This product includes software developed by the OpenSSL Project
-# for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
-#
-# 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
-# endorse or promote products derived from this software without
-# prior written permission. For written permission, please contact
-# openssl-core@openssl.org.
-#
-# 5. Products derived from this software may not be called "OpenSSL"
-# nor may "OpenSSL" appear in their names without prior written
-# permission of the OpenSSL Project.
-#
-# 6. Redistributions of any form whatsoever must retain the following
-# acknowledgment:
-# "This product includes software developed by the OpenSSL Project
-# for use in the OpenSSL Toolkit (http://www.openssl.org/)"
-#
-# THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
-# EXPRESSED 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 THE OpenSSL PROJECT OR
-# ITS CONTRIBUTORS 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.
-# ====================================================================
-#
-# This product includes cryptographic software written by Eric Young
-# (eay@cryptsoft.com). This product includes software written by Tim
-# Hudson (tjh@cryptsoft.com).
-
-
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project. The module is, however, dual licensed under OpenSSL and
-# CRYPTOGAMS licenses depending on where you obtain it. For further
-# details see http://www.openssl.org/~appro/cryptogams/.
-# ====================================================================
-#
-# ECP_NISTZ256 module for x86/SSE2.
-#
-# October 2014.
-#
-# Original ECP_NISTZ256 submission targeting x86_64 is detailed in
-# http://eprint.iacr.org/2013/816. In the process of adaptation
-# original .c module was made 32-bit savvy in order to make this
-# implementation possible.
-#
-# with/without -DECP_NISTZ256_ASM
-# Pentium +66-163%
-# PIII +72-172%
-# P4 +65-132%
-# Core2 +90-215%
-# Sandy Bridge +105-265% (contemporary i[57]-* are all close to this)
-# Atom +65-155%
-# Opteron +54-110%
-# Bulldozer +99-240%
-# VIA Nano +93-290%
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, server-side
-# operation. Keep in mind that +200% means 3x improvement.
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-push(@INC,"${dir}","${dir}../../../perlasm");
-require "x86asm.pl";
-
-$output=pop;
-open STDOUT,">$output";
-
-&asm_init($ARGV[0],"ecp_nistz256-x86.pl",$ARGV[$#ARGV] eq "386");
-
-$sse2=0;
-for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
-
-&external_label("GFp_ia32cap_P") if ($sse2);
-
-
-########################################################################
-# Keep in mind that constants are stored least to most significant word
-&static_label("ONE_mont");
-&set_label("ONE_mont");
-&data_word(1,0,0,-1,-1,-1,-2,0);
-
-
-&function_begin_B("_ecp_nistz256_div_by_2");
- # tmp = a is odd ? a+mod : a
- #
- # note that because mod has special form, i.e. consists of
- # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- # assigning least significant bit of input to one register,
- # %ebp, and its negative to another, %edx.
-
- &mov ("ebp",&DWP(0,"esi"));
- &xor ("edx","edx");
- &mov ("ebx",&DWP(4,"esi"));
- &mov ("eax","ebp");
- &and ("ebp",1);
- &mov ("ecx",&DWP(8,"esi"));
- &sub ("edx","ebp");
-
- &add ("eax","edx");
- &adc ("ebx","edx");
- &mov (&DWP(0,"edi"),"eax");
- &adc ("ecx","edx");
- &mov (&DWP(4,"edi"),"ebx");
- &mov (&DWP(8,"edi"),"ecx");
-
- &mov ("eax",&DWP(12,"esi"));
- &mov ("ebx",&DWP(16,"esi"));
- &adc ("eax",0);
- &mov ("ecx",&DWP(20,"esi"));
- &adc ("ebx",0);
- &mov (&DWP(12,"edi"),"eax");
- &adc ("ecx",0);
- &mov (&DWP(16,"edi"),"ebx");
- &mov (&DWP(20,"edi"),"ecx");
-
- &mov ("eax",&DWP(24,"esi"));
- &mov ("ebx",&DWP(28,"esi"));
- &adc ("eax","ebp");
- &adc ("ebx","edx");
- &mov (&DWP(24,"edi"),"eax");
- &sbb ("esi","esi"); # broadcast carry bit
- &mov (&DWP(28,"edi"),"ebx");
-
- # ret = tmp >> 1
-
- &mov ("eax",&DWP(0,"edi"));
- &mov ("ebx",&DWP(4,"edi"));
- &mov ("ecx",&DWP(8,"edi"));
- &mov ("edx",&DWP(12,"edi"));
-
- &shr ("eax",1);
- &mov ("ebp","ebx");
- &shl ("ebx",31);
- &or ("eax","ebx");
-
- &shr ("ebp",1);
- &mov ("ebx","ecx");
- &shl ("ecx",31);
- &mov (&DWP(0,"edi"),"eax");
- &or ("ebp","ecx");
- &mov ("eax",&DWP(16,"edi"));
-
- &shr ("ebx",1);
- &mov ("ecx","edx");
- &shl ("edx",31);
- &mov (&DWP(4,"edi"),"ebp");
- &or ("ebx","edx");
- &mov ("ebp",&DWP(20,"edi"));
-
- &shr ("ecx",1);
- &mov ("edx","eax");
- &shl ("eax",31);
- &mov (&DWP(8,"edi"),"ebx");
- &or ("ecx","eax");
- &mov ("ebx",&DWP(24,"edi"));
-
- &shr ("edx",1);
- &mov ("eax","ebp");
- &shl ("ebp",31);
- &mov (&DWP(12,"edi"),"ecx");
- &or ("edx","ebp");
- &mov ("ecx",&DWP(28,"edi"));
-
- &shr ("eax",1);
- &mov ("ebp","ebx");
- &shl ("ebx",31);
- &mov (&DWP(16,"edi"),"edx");
- &or ("eax","ebx");
-
- &shr ("ebp",1);
- &mov ("ebx","ecx");
- &shl ("ecx",31);
- &mov (&DWP(20,"edi"),"eax");
- &or ("ebp","ecx");
-
- &shr ("ebx",1);
- &shl ("esi",31);
- &mov (&DWP(24,"edi"),"ebp");
- &or ("ebx","esi"); # handle top-most carry bit
- &mov (&DWP(28,"edi"),"ebx");
-
- &ret ();
-&function_end_B("_ecp_nistz256_div_by_2");
-
-########################################################################
-# void GFp_nistz256_add(BN_ULONG edi[8],const BN_ULONG esi[8],
-# const BN_ULONG ebp[8]);
-&function_begin("GFp_nistz256_add");
- &mov ("esi",&wparam(1));
- &mov ("ebp",&wparam(2));
- &mov ("edi",&wparam(0));
- &call ("_ecp_nistz256_add");
-&function_end("GFp_nistz256_add");
-
-&function_begin_B("_ecp_nistz256_add");
- &mov ("eax",&DWP(0,"esi"));
- &mov ("ebx",&DWP(4,"esi"));
- &mov ("ecx",&DWP(8,"esi"));
- &add ("eax",&DWP(0,"ebp"));
- &mov ("edx",&DWP(12,"esi"));
- &adc ("ebx",&DWP(4,"ebp"));
- &mov (&DWP(0,"edi"),"eax");
- &adc ("ecx",&DWP(8,"ebp"));
- &mov (&DWP(4,"edi"),"ebx");
- &adc ("edx",&DWP(12,"ebp"));
- &mov (&DWP(8,"edi"),"ecx");
- &mov (&DWP(12,"edi"),"edx");
-
- &mov ("eax",&DWP(16,"esi"));
- &mov ("ebx",&DWP(20,"esi"));
- &mov ("ecx",&DWP(24,"esi"));
- &adc ("eax",&DWP(16,"ebp"));
- &mov ("edx",&DWP(28,"esi"));
- &adc ("ebx",&DWP(20,"ebp"));
- &mov (&DWP(16,"edi"),"eax");
- &adc ("ecx",&DWP(24,"ebp"));
- &mov (&DWP(20,"edi"),"ebx");
- &mov ("esi",0);
- &adc ("edx",&DWP(28,"ebp"));
- &mov (&DWP(24,"edi"),"ecx");
- &adc ("esi",0);
- &mov (&DWP(28,"edi"),"edx");
-
- # if a+b >= modulus, subtract modulus.
- #
- # But since comparison implies subtraction, we subtract modulus
- # to see if it borrows, and then subtract it for real if
- # subtraction didn't borrow.
-
- &mov ("eax",&DWP(0,"edi"));
- &mov ("ebx",&DWP(4,"edi"));
- &mov ("ecx",&DWP(8,"edi"));
- &sub ("eax",-1);
- &mov ("edx",&DWP(12,"edi"));
- &sbb ("ebx",-1);
- &mov ("eax",&DWP(16,"edi"));
- &sbb ("ecx",-1);
- &mov ("ebx",&DWP(20,"edi"));
- &sbb ("edx",0);
- &mov ("ecx",&DWP(24,"edi"));
- &sbb ("eax",0);
- &mov ("edx",&DWP(28,"edi"));
- &sbb ("ebx",0);
- &sbb ("ecx",1);
- &sbb ("edx",-1);
- &sbb ("esi",0);
-
- # Note that because mod has special form, i.e. consists of
- # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- # by using borrow.
-
- ¬ ("esi");
- &mov ("eax",&DWP(0,"edi"));
- &mov ("ebp","esi");
- &mov ("ebx",&DWP(4,"edi"));
- &shr ("ebp",31);
- &mov ("ecx",&DWP(8,"edi"));
- &sub ("eax","esi");
- &mov ("edx",&DWP(12,"edi"));
- &sbb ("ebx","esi");
- &mov (&DWP(0,"edi"),"eax");
- &sbb ("ecx","esi");
- &mov (&DWP(4,"edi"),"ebx");
- &sbb ("edx",0);
- &mov (&DWP(8,"edi"),"ecx");
- &mov (&DWP(12,"edi"),"edx");
-
- &mov ("eax",&DWP(16,"edi"));
- &mov ("ebx",&DWP(20,"edi"));
- &mov ("ecx",&DWP(24,"edi"));
- &sbb ("eax",0);
- &mov ("edx",&DWP(28,"edi"));
- &sbb ("ebx",0);
- &mov (&DWP(16,"edi"),"eax");
- &sbb ("ecx","ebp");
- &mov (&DWP(20,"edi"),"ebx");
- &sbb ("edx","esi");
- &mov (&DWP(24,"edi"),"ecx");
- &mov (&DWP(28,"edi"),"edx");
-
- &ret ();
-&function_end_B("_ecp_nistz256_add");
-
-&function_begin_B("_ecp_nistz256_sub");
- &mov ("eax",&DWP(0,"esi"));
- &mov ("ebx",&DWP(4,"esi"));
- &mov ("ecx",&DWP(8,"esi"));
- &sub ("eax",&DWP(0,"ebp"));
- &mov ("edx",&DWP(12,"esi"));
- &sbb ("ebx",&DWP(4,"ebp"));
- &mov (&DWP(0,"edi"),"eax");
- &sbb ("ecx",&DWP(8,"ebp"));
- &mov (&DWP(4,"edi"),"ebx");
- &sbb ("edx",&DWP(12,"ebp"));
- &mov (&DWP(8,"edi"),"ecx");
- &mov (&DWP(12,"edi"),"edx");
-
- &mov ("eax",&DWP(16,"esi"));
- &mov ("ebx",&DWP(20,"esi"));
- &mov ("ecx",&DWP(24,"esi"));
- &sbb ("eax",&DWP(16,"ebp"));
- &mov ("edx",&DWP(28,"esi"));
- &sbb ("ebx",&DWP(20,"ebp"));
- &sbb ("ecx",&DWP(24,"ebp"));
- &mov (&DWP(16,"edi"),"eax");
- &sbb ("edx",&DWP(28,"ebp"));
- &mov (&DWP(20,"edi"),"ebx");
- &sbb ("esi","esi"); # broadcast borrow bit
- &mov (&DWP(24,"edi"),"ecx");
- &mov (&DWP(28,"edi"),"edx");
-
- # if a-b borrows, add modulus.
- #
- # Note that because mod has special form, i.e. consists of
- # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- # assigning borrow bit to one register, %ebp, and its negative
- # to another, %esi. But we started by calculating %esi...
-
- &mov ("eax",&DWP(0,"edi"));
- &mov ("ebp","esi");
- &mov ("ebx",&DWP(4,"edi"));
- &shr ("ebp",31);
- &mov ("ecx",&DWP(8,"edi"));
- &add ("eax","esi");
- &mov ("edx",&DWP(12,"edi"));
- &adc ("ebx","esi");
- &mov (&DWP(0,"edi"),"eax");
- &adc ("ecx","esi");
- &mov (&DWP(4,"edi"),"ebx");
- &adc ("edx",0);
- &mov (&DWP(8,"edi"),"ecx");
- &mov (&DWP(12,"edi"),"edx");
-
- &mov ("eax",&DWP(16,"edi"));
- &mov ("ebx",&DWP(20,"edi"));
- &mov ("ecx",&DWP(24,"edi"));
- &adc ("eax",0);
- &mov ("edx",&DWP(28,"edi"));
- &adc ("ebx",0);
- &mov (&DWP(16,"edi"),"eax");
- &adc ("ecx","ebp");
- &mov (&DWP(20,"edi"),"ebx");
- &adc ("edx","esi");
- &mov (&DWP(24,"edi"),"ecx");
- &mov (&DWP(28,"edi"),"edx");
-
- &ret ();
-&function_end_B("_ecp_nistz256_sub");
-
-########################################################################
-# void GFp_nistz256_neg(BN_ULONG edi[8],const BN_ULONG esi[8]);
-&function_begin("GFp_nistz256_neg");
- &mov ("ebp",&wparam(1));
- &mov ("edi",&wparam(0));
-
- &xor ("eax","eax");
- &stack_push(8);
- &mov (&DWP(0,"esp"),"eax");
- &mov ("esi","esp");
- &mov (&DWP(4,"esp"),"eax");
- &mov (&DWP(8,"esp"),"eax");
- &mov (&DWP(12,"esp"),"eax");
- &mov (&DWP(16,"esp"),"eax");
- &mov (&DWP(20,"esp"),"eax");
- &mov (&DWP(24,"esp"),"eax");
- &mov (&DWP(28,"esp"),"eax");
-
- &call ("_ecp_nistz256_sub");
-
- &stack_pop(8);
-&function_end("GFp_nistz256_neg");
-
-&function_begin_B("_picup_eax");
- &mov ("eax",&DWP(0,"esp"));
- &ret ();
-&function_end_B("_picup_eax");
-
-########################################################################
-# void GFp_nistz256_mul_mont(BN_ULONG edi[8],const BN_ULONG esi[8],
-# const BN_ULONG ebp[8]);
-&function_begin("GFp_nistz256_mul_mont");
- &mov ("esi",&wparam(1));
- &mov ("ebp",&wparam(2));
- if ($sse2) {
- &call ("_picup_eax");
- &set_label("pic");
- &picmeup("eax","GFp_ia32cap_P","eax",&label("pic"));
- &mov ("eax",&DWP(0,"eax")); }
- &mov ("edi",&wparam(0));
- &call ("_ecp_nistz256_mul_mont");
-&function_end("GFp_nistz256_mul_mont");
-
-&function_begin_B("_ecp_nistz256_mul_mont");
- if ($sse2) {
- # We always use SSE2
-
- ########################################
- # SSE2 code path featuring 32x16-bit
- # multiplications is ~2x faster than
- # IALU counterpart (except on Atom)...
- ########################################
- # stack layout:
- # +------------------------------------+< %esp
- # | 7 16-byte temporary XMM words, |
- # | "sliding" toward lower address |
- # . .
- # +------------------------------------+
- # | unused XMM word |
- # +------------------------------------+< +128,%ebx
- # | 8 16-byte XMM words holding copies |
- # | of a[i]<<64|a[i] |
- # . .
- # . .
- # +------------------------------------+< +256
- &mov ("edx","esp");
- &sub ("esp",0x100);
-
- &movd ("xmm7",&DWP(0,"ebp")); # b[0] -> 0000.00xy
- &lea ("ebp",&DWP(4,"ebp"));
- &pcmpeqd("xmm6","xmm6");
- &psrlq ("xmm6",48); # compose 0xffff<<64|0xffff
-
- &pshuflw("xmm7","xmm7",0b11011100); # 0000.00xy -> 0000.0x0y
- &and ("esp",-64);
- &pshufd ("xmm7","xmm7",0b11011100); # 0000.0x0y -> 000x.000y
- &lea ("ebx",&DWP(0x80,"esp"));
-
- &movd ("xmm0",&DWP(4*0,"esi")); # a[0] -> 0000.00xy
- &pshufd ("xmm0","xmm0",0b11001100); # 0000.00xy -> 00xy.00xy
- &movd ("xmm1",&DWP(4*1,"esi")); # a[1] -> ...
- &movdqa (&QWP(0x00,"ebx"),"xmm0"); # offload converted a[0]
- &pmuludq("xmm0","xmm7"); # a[0]*b[0]
-
- &movd ("xmm2",&DWP(4*2,"esi"));
- &pshufd ("xmm1","xmm1",0b11001100);
- &movdqa (&QWP(0x10,"ebx"),"xmm1");
- &pmuludq("xmm1","xmm7"); # a[1]*b[0]
-
- &movq ("xmm4","xmm0"); # clear upper 64 bits
- &pslldq("xmm4",6);
- &paddq ("xmm4","xmm0");
- &movdqa("xmm5","xmm4");
- &psrldq("xmm4",10); # upper 32 bits of a[0]*b[0]
- &pand ("xmm5","xmm6"); # lower 32 bits of a[0]*b[0]
-
- # Upper half of a[0]*b[i] is carried into next multiplication
- # iteration, while lower one "participates" in actual reduction.
- # Normally latter is done by accumulating result of multiplication
- # of modulus by "magic" digit, but thanks to special form of modulus
- # and "magic" digit it can be performed only with additions and
- # subtractions (see note in IALU section below). Note that we are
- # not bothered with carry bits, they are accumulated in "flatten"
- # phase after all multiplications and reductions.
-
- &movd ("xmm3",&DWP(4*3,"esi"));
- &pshufd ("xmm2","xmm2",0b11001100);
- &movdqa (&QWP(0x20,"ebx"),"xmm2");
- &pmuludq("xmm2","xmm7"); # a[2]*b[0]
- &paddq ("xmm1","xmm4"); # a[1]*b[0]+hw(a[0]*b[0]), carry
- &movdqa (&QWP(0x00,"esp"),"xmm1"); # t[0]
-
- &movd ("xmm0",&DWP(4*4,"esi"));
- &pshufd ("xmm3","xmm3",0b11001100);
- &movdqa (&QWP(0x30,"ebx"),"xmm3");
- &pmuludq("xmm3","xmm7"); # a[3]*b[0]
- &movdqa (&QWP(0x10,"esp"),"xmm2");
-
- &movd ("xmm1",&DWP(4*5,"esi"));
- &pshufd ("xmm0","xmm0",0b11001100);
- &movdqa (&QWP(0x40,"ebx"),"xmm0");
- &pmuludq("xmm0","xmm7"); # a[4]*b[0]
- &paddq ("xmm3","xmm5"); # a[3]*b[0]+lw(a[0]*b[0]), reduction step
- &movdqa (&QWP(0x20,"esp"),"xmm3");
-
- &movd ("xmm2",&DWP(4*6,"esi"));
- &pshufd ("xmm1","xmm1",0b11001100);
- &movdqa (&QWP(0x50,"ebx"),"xmm1");
- &pmuludq("xmm1","xmm7"); # a[5]*b[0]
- &movdqa (&QWP(0x30,"esp"),"xmm0");
- &pshufd("xmm4","xmm5",0b10110001); # xmm4 = xmm5<<32, reduction step
-
- &movd ("xmm3",&DWP(4*7,"esi"));
- &pshufd ("xmm2","xmm2",0b11001100);
- &movdqa (&QWP(0x60,"ebx"),"xmm2");
- &pmuludq("xmm2","xmm7"); # a[6]*b[0]
- &movdqa (&QWP(0x40,"esp"),"xmm1");
- &psubq ("xmm4","xmm5"); # xmm4 = xmm5*0xffffffff, reduction step
-
- &movd ("xmm0",&DWP(0,"ebp")); # b[1] -> 0000.00xy
- &pshufd ("xmm3","xmm3",0b11001100);
- &movdqa (&QWP(0x70,"ebx"),"xmm3");
- &pmuludq("xmm3","xmm7"); # a[7]*b[0]
-
- &pshuflw("xmm7","xmm0",0b11011100); # 0000.00xy -> 0000.0x0y
- &movdqa ("xmm0",&QWP(0x00,"ebx")); # pre-load converted a[0]
- &pshufd ("xmm7","xmm7",0b11011100); # 0000.0x0y -> 000x.000y
-
- &mov ("ecx",6);
- &lea ("ebp",&DWP(4,"ebp"));
- &jmp (&label("madd_sse2"));
-
-&set_label("madd_sse2",16);
- &paddq ("xmm2","xmm5"); # a[6]*b[i-1]+lw(a[0]*b[i-1]), reduction step [modulo-scheduled]
- &paddq ("xmm3","xmm4"); # a[7]*b[i-1]+lw(a[0]*b[i-1])*0xffffffff, reduction step [modulo-scheduled]
- &movdqa ("xmm1",&QWP(0x10,"ebx"));
- &pmuludq("xmm0","xmm7"); # a[0]*b[i]
- &movdqa(&QWP(0x50,"esp"),"xmm2");
-
- &movdqa ("xmm2",&QWP(0x20,"ebx"));
- &pmuludq("xmm1","xmm7"); # a[1]*b[i]
- &movdqa(&QWP(0x60,"esp"),"xmm3");
- &paddq ("xmm0",&QWP(0x00,"esp"));
-
- &movdqa ("xmm3",&QWP(0x30,"ebx"));
- &pmuludq("xmm2","xmm7"); # a[2]*b[i]
- &movq ("xmm4","xmm0"); # clear upper 64 bits
- &pslldq("xmm4",6);
- &paddq ("xmm1",&QWP(0x10,"esp"));
- &paddq ("xmm4","xmm0");
- &movdqa("xmm5","xmm4");
- &psrldq("xmm4",10); # upper 33 bits of a[0]*b[i]+t[0]
-
- &movdqa ("xmm0",&QWP(0x40,"ebx"));
- &pmuludq("xmm3","xmm7"); # a[3]*b[i]
- &paddq ("xmm1","xmm4"); # a[1]*b[i]+hw(a[0]*b[i]), carry
- &paddq ("xmm2",&QWP(0x20,"esp"));
- &movdqa (&QWP(0x00,"esp"),"xmm1");
-
- &movdqa ("xmm1",&QWP(0x50,"ebx"));
- &pmuludq("xmm0","xmm7"); # a[4]*b[i]
- &paddq ("xmm3",&QWP(0x30,"esp"));
- &movdqa (&QWP(0x10,"esp"),"xmm2");
- &pand ("xmm5","xmm6"); # lower 32 bits of a[0]*b[i]
-
- &movdqa ("xmm2",&QWP(0x60,"ebx"));
- &pmuludq("xmm1","xmm7"); # a[5]*b[i]
- &paddq ("xmm3","xmm5"); # a[3]*b[i]+lw(a[0]*b[i]), reduction step
- &paddq ("xmm0",&QWP(0x40,"esp"));
- &movdqa (&QWP(0x20,"esp"),"xmm3");
- &pshufd("xmm4","xmm5",0b10110001); # xmm4 = xmm5<<32, reduction step
-
- &movdqa ("xmm3","xmm7");
- &pmuludq("xmm2","xmm7"); # a[6]*b[i]
- &movd ("xmm7",&DWP(0,"ebp")); # b[i++] -> 0000.00xy
- &lea ("ebp",&DWP(4,"ebp"));
- &paddq ("xmm1",&QWP(0x50,"esp"));
- &psubq ("xmm4","xmm5"); # xmm4 = xmm5*0xffffffff, reduction step
- &movdqa (&QWP(0x30,"esp"),"xmm0");
- &pshuflw("xmm7","xmm7",0b11011100); # 0000.00xy -> 0000.0x0y
-
- &pmuludq("xmm3",&QWP(0x70,"ebx")); # a[7]*b[i]
- &pshufd("xmm7","xmm7",0b11011100); # 0000.0x0y -> 000x.000y
- &movdqa("xmm0",&QWP(0x00,"ebx")); # pre-load converted a[0]
- &movdqa (&QWP(0x40,"esp"),"xmm1");
- &paddq ("xmm2",&QWP(0x60,"esp"));
-
- &dec ("ecx");
- &jnz (&label("madd_sse2"));
-
- &paddq ("xmm2","xmm5"); # a[6]*b[6]+lw(a[0]*b[6]), reduction step [modulo-scheduled]
- &paddq ("xmm3","xmm4"); # a[7]*b[6]+lw(a[0]*b[6])*0xffffffff, reduction step [modulo-scheduled]
- &movdqa ("xmm1",&QWP(0x10,"ebx"));
- &pmuludq("xmm0","xmm7"); # a[0]*b[7]
- &movdqa(&QWP(0x50,"esp"),"xmm2");
-
- &movdqa ("xmm2",&QWP(0x20,"ebx"));
- &pmuludq("xmm1","xmm7"); # a[1]*b[7]
- &movdqa(&QWP(0x60,"esp"),"xmm3");
- &paddq ("xmm0",&QWP(0x00,"esp"));
-
- &movdqa ("xmm3",&QWP(0x30,"ebx"));
- &pmuludq("xmm2","xmm7"); # a[2]*b[7]
- &movq ("xmm4","xmm0"); # clear upper 64 bits
- &pslldq("xmm4",6);
- &paddq ("xmm1",&QWP(0x10,"esp"));
- &paddq ("xmm4","xmm0");
- &movdqa("xmm5","xmm4");
- &psrldq("xmm4",10); # upper 33 bits of a[0]*b[i]+t[0]
-
- &movdqa ("xmm0",&QWP(0x40,"ebx"));
- &pmuludq("xmm3","xmm7"); # a[3]*b[7]
- &paddq ("xmm1","xmm4"); # a[1]*b[7]+hw(a[0]*b[7]), carry
- &paddq ("xmm2",&QWP(0x20,"esp"));
- &movdqa (&QWP(0x00,"esp"),"xmm1");
-
- &movdqa ("xmm1",&QWP(0x50,"ebx"));
- &pmuludq("xmm0","xmm7"); # a[4]*b[7]
- &paddq ("xmm3",&QWP(0x30,"esp"));
- &movdqa (&QWP(0x10,"esp"),"xmm2");
- &pand ("xmm5","xmm6"); # lower 32 bits of a[0]*b[i]
-
- &movdqa ("xmm2",&QWP(0x60,"ebx"));
- &pmuludq("xmm1","xmm7"); # a[5]*b[7]
- &paddq ("xmm3","xmm5"); # reduction step
- &paddq ("xmm0",&QWP(0x40,"esp"));
- &movdqa (&QWP(0x20,"esp"),"xmm3");
- &pshufd("xmm4","xmm5",0b10110001); # xmm4 = xmm5<<32, reduction step
-
- &movdqa ("xmm3",&QWP(0x70,"ebx"));
- &pmuludq("xmm2","xmm7"); # a[6]*b[7]
- &paddq ("xmm1",&QWP(0x50,"esp"));
- &psubq ("xmm4","xmm5"); # xmm4 = xmm5*0xffffffff, reduction step
- &movdqa (&QWP(0x30,"esp"),"xmm0");
-
- &pmuludq("xmm3","xmm7"); # a[7]*b[7]
- &pcmpeqd("xmm7","xmm7");
- &movdqa ("xmm0",&QWP(0x00,"esp"));
- &pslldq ("xmm7",8);
- &movdqa (&QWP(0x40,"esp"),"xmm1");
- &paddq ("xmm2",&QWP(0x60,"esp"));
-
- &paddq ("xmm2","xmm5"); # a[6]*b[7]+lw(a[0]*b[7]), reduction step
- &paddq ("xmm3","xmm4"); # a[6]*b[7]+lw(a[0]*b[7])*0xffffffff, reduction step
- &movdqa(&QWP(0x50,"esp"),"xmm2");
- &movdqa(&QWP(0x60,"esp"),"xmm3");
-
- &movdqa ("xmm1",&QWP(0x10,"esp"));
- &movdqa ("xmm2",&QWP(0x20,"esp"));
- &movdqa ("xmm3",&QWP(0x30,"esp"));
-
- &movq ("xmm4","xmm0"); # "flatten"
- &pand ("xmm0","xmm7");
- &xor ("ebp","ebp");
- &pslldq ("xmm4",6);
- &movq ("xmm5","xmm1");
- &paddq ("xmm0","xmm4");
- &pand ("xmm1","xmm7");
- &psrldq ("xmm0",6);
- &movd ("eax","xmm0");
- &psrldq ("xmm0",4);
-
- &paddq ("xmm5","xmm0");
- &movdqa ("xmm0",&QWP(0x40,"esp"));
- &sub ("eax",-1); # start subtracting modulus,
- # this is used to determine
- # if result is larger/smaller
- # than modulus (see below)
- &pslldq ("xmm5",6);
- &movq ("xmm4","xmm2");
- &paddq ("xmm1","xmm5");
- &pand ("xmm2","xmm7");
- &psrldq ("xmm1",6);
- &mov (&DWP(4*0,"edi"),"eax");
- &movd ("eax","xmm1");
- &psrldq ("xmm1",4);
-
- &paddq ("xmm4","xmm1");
- &movdqa ("xmm1",&QWP(0x50,"esp"));
- &sbb ("eax",-1);
- &pslldq ("xmm4",6);
- &movq ("xmm5","xmm3");
- &paddq ("xmm2","xmm4");
- &pand ("xmm3","xmm7");
- &psrldq ("xmm2",6);
- &mov (&DWP(4*1,"edi"),"eax");
- &movd ("eax","xmm2");
- &psrldq ("xmm2",4);
-
- &paddq ("xmm5","xmm2");
- &movdqa ("xmm2",&QWP(0x60,"esp"));
- &sbb ("eax",-1);
- &pslldq ("xmm5",6);
- &movq ("xmm4","xmm0");
- &paddq ("xmm3","xmm5");
- &pand ("xmm0","xmm7");
- &psrldq ("xmm3",6);
- &mov (&DWP(4*2,"edi"),"eax");
- &movd ("eax","xmm3");
- &psrldq ("xmm3",4);
-
- &paddq ("xmm4","xmm3");
- &sbb ("eax",0);
- &pslldq ("xmm4",6);
- &movq ("xmm5","xmm1");
- &paddq ("xmm0","xmm4");
- &pand ("xmm1","xmm7");
- &psrldq ("xmm0",6);
- &mov (&DWP(4*3,"edi"),"eax");
- &movd ("eax","xmm0");
- &psrldq ("xmm0",4);
-
- &paddq ("xmm5","xmm0");
- &sbb ("eax",0);
- &pslldq ("xmm5",6);
- &movq ("xmm4","xmm2");
- &paddq ("xmm1","xmm5");
- &pand ("xmm2","xmm7");
- &psrldq ("xmm1",6);
- &movd ("ebx","xmm1");
- &psrldq ("xmm1",4);
- &mov ("esp","edx");
-
- &paddq ("xmm4","xmm1");
- &pslldq ("xmm4",6);
- &paddq ("xmm2","xmm4");
- &psrldq ("xmm2",6);
- &movd ("ecx","xmm2");
- &psrldq ("xmm2",4);
- &sbb ("ebx",0);
- &movd ("edx","xmm2");
- &pextrw ("esi","xmm2",2); # top-most overflow bit
- &sbb ("ecx",1);
- &sbb ("edx",-1);
- &sbb ("esi",0); # borrow from subtraction
-
- # Final step is "if result > mod, subtract mod", and at this point
- # we have result - mod written to output buffer, as well as borrow
- # bit from this subtraction, and if borrow bit is set, we add
- # modulus back.
- #
- # Note that because mod has special form, i.e. consists of
- # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
- # assigning borrow bit to one register, %ebp, and its negative
- # to another, %esi. But we started by calculating %esi...
-
- &sub ("ebp","esi");
- &add (&DWP(4*0,"edi"),"esi"); # add modulus or zero
- &adc (&DWP(4*1,"edi"),"esi");
- &adc (&DWP(4*2,"edi"),"esi");
- &adc (&DWP(4*3,"edi"),0);
- &adc ("eax",0);
- &adc ("ebx",0);
- &mov (&DWP(4*4,"edi"),"eax");
- &adc ("ecx","ebp");
- &mov (&DWP(4*5,"edi"),"ebx");
- &adc ("edx","esi");
- &mov (&DWP(4*6,"edi"),"ecx");
- &mov (&DWP(4*7,"edi"),"edx");
-
- &ret ();
-
-} # Non-SSE2 code removed.
-
-&function_end_B("_ecp_nistz256_mul_mont");
-
-########################################################################
-# following subroutines are "literal" implementation of those found in
-# ecp_nistz256.c
-#
-########################################################################
-# void GFp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-&static_label("point_double_shortcut");
-&function_begin("GFp_nistz256_point_double");
-{ my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4));
-
- &mov ("esi",&wparam(1));
-
- # above map() describes stack layout with 5 temporary
- # 256-bit vectors on top, then we take extra word for
- # GFp_ia32cap_P copy.
- &stack_push(8*5+1);
- if ($sse2) {
- &call ("_picup_eax");
- &set_label("pic");
- &picmeup("edx","GFp_ia32cap_P","eax",&label("pic"));
- &mov ("ebp",&DWP(0,"edx")); }
-
-&set_label("point_double_shortcut");
- &mov ("eax",&DWP(0,"esi")); # copy in_x
- &mov ("ebx",&DWP(4,"esi"));
- &mov ("ecx",&DWP(8,"esi"));
- &mov ("edx",&DWP(12,"esi"));
- &mov (&DWP($in_x+0,"esp"),"eax");
- &mov (&DWP($in_x+4,"esp"),"ebx");
- &mov (&DWP($in_x+8,"esp"),"ecx");
- &mov (&DWP($in_x+12,"esp"),"edx");
- &mov ("eax",&DWP(16,"esi"));
- &mov ("ebx",&DWP(20,"esi"));
- &mov ("ecx",&DWP(24,"esi"));
- &mov ("edx",&DWP(28,"esi"));
- &mov (&DWP($in_x+16,"esp"),"eax");
- &mov (&DWP($in_x+20,"esp"),"ebx");
- &mov (&DWP($in_x+24,"esp"),"ecx");
- &mov (&DWP($in_x+28,"esp"),"edx");
- &mov (&DWP(32*5,"esp"),"ebp"); # GFp_ia32cap_P copy
-
- &lea ("ebp",&DWP(32,"esi"));
- &lea ("esi",&DWP(32,"esi"));
- &lea ("edi",&DWP($S,"esp"));
- &call ("_ecp_nistz256_add"); # p256_mul_by_2(S, in_y);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &mov ("esi",64);
- &add ("esi",&wparam(1));
- &lea ("edi",&DWP($Zsqr,"esp"));
- &mov ("ebp","esi");
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(Zsqr, in_z);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($S,"esp"));
- &lea ("ebp",&DWP($S,"esp"));
- &lea ("edi",&DWP($S,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(S, S);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &mov ("ebp",&wparam(1));
- &lea ("esi",&DWP(32,"ebp"));
- &lea ("ebp",&DWP(64,"ebp"));
- &lea ("edi",&DWP($tmp0,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(tmp0, in_z, in_y);
-
- &lea ("esi",&DWP($in_x,"esp"));
- &lea ("ebp",&DWP($Zsqr,"esp"));
- &lea ("edi",&DWP($M,"esp"));
- &call ("_ecp_nistz256_add"); # p256_add(M, in_x, Zsqr);
-
- &mov ("edi",64);
- &lea ("esi",&DWP($tmp0,"esp"));
- &lea ("ebp",&DWP($tmp0,"esp"));
- &add ("edi",&wparam(0));
- &call ("_ecp_nistz256_add"); # p256_mul_by_2(res_z, tmp0);
-
- &lea ("esi",&DWP($in_x,"esp"));
- &lea ("ebp",&DWP($Zsqr,"esp"));
- &lea ("edi",&DWP($Zsqr,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(Zsqr, in_x, Zsqr);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($S,"esp"));
- &lea ("ebp",&DWP($S,"esp"));
- &lea ("edi",&DWP($tmp0,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(tmp0, S);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($M,"esp"));
- &lea ("ebp",&DWP($Zsqr,"esp"));
- &lea ("edi",&DWP($M,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(M, M, Zsqr);
-
- &mov ("edi",32);
- &lea ("esi",&DWP($tmp0,"esp"));
- &add ("edi",&wparam(0));
- &call ("_ecp_nistz256_div_by_2"); # p256_div_by_2(res_y, tmp0);
-
- &lea ("esi",&DWP($M,"esp"));
- &lea ("ebp",&DWP($M,"esp"));
- &lea ("edi",&DWP($tmp0,"esp"));
- &call ("_ecp_nistz256_add"); # 1/2 p256_mul_by_3(M, M);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($in_x,"esp"));
- &lea ("ebp",&DWP($S,"esp"));
- &lea ("edi",&DWP($S,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(S, S, in_x);
-
- &lea ("esi",&DWP($tmp0,"esp"));
- &lea ("ebp",&DWP($M,"esp"));
- &lea ("edi",&DWP($M,"esp"));
- &call ("_ecp_nistz256_add"); # 2/2 p256_mul_by_3(M, M);
-
- &lea ("esi",&DWP($S,"esp"));
- &lea ("ebp",&DWP($S,"esp"));
- &lea ("edi",&DWP($tmp0,"esp"));
- &call ("_ecp_nistz256_add"); # p256_mul_by_2(tmp0, S);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($M,"esp"));
- &lea ("ebp",&DWP($M,"esp"));
- &mov ("edi",&wparam(0));
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(res_x, M);
-
- &mov ("esi","edi"); # %edi is still res_x here
- &lea ("ebp",&DWP($tmp0,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(res_x, res_x, tmp0);
-
- &lea ("esi",&DWP($S,"esp"));
- &mov ("ebp","edi"); # %edi is still res_x
- &lea ("edi",&DWP($S,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(S, S, res_x);
-
- &mov ("eax",&DWP(32*5,"esp")); # GFp_ia32cap_P copy
- &mov ("esi","edi"); # %edi is still &S
- &lea ("ebp",&DWP($M,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(S, S, M);
-
- &mov ("ebp",32);
- &lea ("esi",&DWP($S,"esp"));
- &add ("ebp",&wparam(0));
- &mov ("edi","ebp");
- &call ("_ecp_nistz256_sub"); # p256_sub(res_y, S, res_y);
-
- &stack_pop(8*5+1);
-} &function_end("GFp_nistz256_point_double");
-
-########################################################################
-# void GFp_nistz256_point_add_affine(P256_POINT *out,
-# const P256_POINT *in1,
-# const P256_POINT_AFFINE *in2);
-&function_begin("GFp_nistz256_point_add_affine");
-{
- my ($res_x,$res_y,$res_z,
- $in1_x,$in1_y,$in1_z,
- $in2_x,$in2_y,
- $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(32*$_,(0..14));
- my $Z1sqr = $S2;
- my @ONE_mont=(1,0,0,-1,-1,-1,-2,0);
-
- &mov ("esi",&wparam(1));
-
- # above map() describes stack layout with 15 temporary
- # 256-bit vectors on top, then we take extra words for
- # !in1infty, !in2infty, and GFp_ia32cap_P copy.
- &stack_push(8*15+3);
- if ($sse2) {
- &call ("_picup_eax");
- &set_label("pic");
- &picmeup("edx","GFp_ia32cap_P","eax",&label("pic"));
- &mov ("ebp",&DWP(0,"edx")); }
-
- &lea ("edi",&DWP($in1_x,"esp"));
- for($i=0;$i<96;$i+=16) {
- &mov ("eax",&DWP($i+0,"esi")); # copy in1
- &mov ("ebx",&DWP($i+4,"esi"));
- &mov ("ecx",&DWP($i+8,"esi"));
- &mov ("edx",&DWP($i+12,"esi"));
- &mov (&DWP($i+0,"edi"),"eax");
- &mov (&DWP(32*15+8,"esp"),"ebp") if ($i==0);
- &mov ("ebp","eax") if ($i==64);
- &or ("ebp","eax") if ($i>64);
- &mov (&DWP($i+4,"edi"),"ebx");
- &or ("ebp","ebx") if ($i>=64);
- &mov (&DWP($i+8,"edi"),"ecx");
- &or ("ebp","ecx") if ($i>=64);
- &mov (&DWP($i+12,"edi"),"edx");
- &or ("ebp","edx") if ($i>=64);
- }
- &xor ("eax","eax");
- &mov ("esi",&wparam(2));
- &sub ("eax","ebp");
- &or ("ebp","eax");
- &sar ("ebp",31);
- &mov (&DWP(32*15+0,"esp"),"ebp"); # !in1infty
-
- &lea ("edi",&DWP($in2_x,"esp"));
- for($i=0;$i<64;$i+=16) {
- &mov ("eax",&DWP($i+0,"esi")); # copy in2
- &mov ("ebx",&DWP($i+4,"esi"));
- &mov ("ecx",&DWP($i+8,"esi"));
- &mov ("edx",&DWP($i+12,"esi"));
- &mov (&DWP($i+0,"edi"),"eax");
- &mov ("ebp","eax") if ($i==0);
- &or ("ebp","eax") if ($i!=0);
- &mov (&DWP($i+4,"edi"),"ebx");
- &or ("ebp","ebx");
- &mov (&DWP($i+8,"edi"),"ecx");
- &or ("ebp","ecx");
- &mov (&DWP($i+12,"edi"),"edx");
- &or ("ebp","edx");
- }
- &xor ("ebx","ebx");
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &sub ("ebx","ebp");
- &lea ("esi",&DWP($in1_z,"esp"));
- &or ("ebx","ebp");
- &lea ("ebp",&DWP($in1_z,"esp"));
- &sar ("ebx",31);
- &lea ("edi",&DWP($Z1sqr,"esp"));
- &mov (&DWP(32*15+4,"esp"),"ebx"); # !in2infty
-
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(Z1sqr, in1_z);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($in2_x,"esp"));
- &mov ("ebp","edi"); # %esi is stull &Z1sqr
- &lea ("edi",&DWP($U2,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(U2, Z1sqr, in2_x);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($in1_z,"esp"));
- &lea ("ebp",&DWP($Z1sqr,"esp"));
- &lea ("edi",&DWP($S2,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(S2, Z1sqr, in1_z);
-
- &lea ("esi",&DWP($U2,"esp"));
- &lea ("ebp",&DWP($in1_x,"esp"));
- &lea ("edi",&DWP($H,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(H, U2, in1_x);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($in2_y,"esp"));
- &lea ("ebp",&DWP($S2,"esp"));
- &lea ("edi",&DWP($S2,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(S2, S2, in2_y);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($in1_z,"esp"));
- &lea ("ebp",&DWP($H,"esp"));
- &lea ("edi",&DWP($res_z,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(res_z, H, in1_z);
-
- &lea ("esi",&DWP($S2,"esp"));
- &lea ("ebp",&DWP($in1_y,"esp"));
- &lea ("edi",&DWP($R,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(R, S2, in1_y);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($H,"esp"));
- &lea ("ebp",&DWP($H,"esp"));
- &lea ("edi",&DWP($Hsqr,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(Hsqr, H);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($R,"esp"));
- &lea ("ebp",&DWP($R,"esp"));
- &lea ("edi",&DWP($Rsqr,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_sqr_mont(Rsqr, R);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($in1_x,"esp"));
- &lea ("ebp",&DWP($Hsqr,"esp"));
- &lea ("edi",&DWP($U2,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(U2, in1_x, Hsqr);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($H,"esp"));
- &lea ("ebp",&DWP($Hsqr,"esp"));
- &lea ("edi",&DWP($Hcub,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(Hcub, Hsqr, H);
-
- &lea ("esi",&DWP($U2,"esp"));
- &lea ("ebp",&DWP($U2,"esp"));
- &lea ("edi",&DWP($Hsqr,"esp"));
- &call ("_ecp_nistz256_add"); # p256_mul_by_2(Hsqr, U2);
-
- &lea ("esi",&DWP($Rsqr,"esp"));
- &lea ("ebp",&DWP($Hsqr,"esp"));
- &lea ("edi",&DWP($res_x,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(res_x, Rsqr, Hsqr);
-
- &lea ("esi",&DWP($res_x,"esp"));
- &lea ("ebp",&DWP($Hcub,"esp"));
- &lea ("edi",&DWP($res_x,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(res_x, res_x, Hcub);
-
- &lea ("esi",&DWP($U2,"esp"));
- &lea ("ebp",&DWP($res_x,"esp"));
- &lea ("edi",&DWP($res_y,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(res_y, U2, res_x);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($Hcub,"esp"));
- &lea ("ebp",&DWP($in1_y,"esp"));
- &lea ("edi",&DWP($S2,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(S2, Hcub, in1_y);
-
- &mov ("eax",&DWP(32*15+8,"esp")); # GFp_ia32cap_P copy
- &lea ("esi",&DWP($R,"esp"));
- &lea ("ebp",&DWP($res_y,"esp"));
- &lea ("edi",&DWP($res_y,"esp"));
- &call ("_ecp_nistz256_mul_mont"); # p256_mul_mont(res_y, res_y, R);
-
- &lea ("esi",&DWP($res_y,"esp"));
- &lea ("ebp",&DWP($S2,"esp"));
- &lea ("edi",&DWP($res_y,"esp"));
- &call ("_ecp_nistz256_sub"); # p256_sub(res_y, res_y, S2);
-
- &mov ("ebp",&DWP(32*15+0,"esp")); # !in1infty
- &mov ("esi",&DWP(32*15+4,"esp")); # !in2infty
- &mov ("edi",&wparam(0));
- &mov ("edx","ebp");
- ¬ ("ebp");
- &and ("edx","esi");
- &and ("ebp","esi");
- ¬ ("esi");
-
- ########################################
- # conditional moves
- for($i=64;$i<96;$i+=4) {
- my $one=@ONE_mont[($i-64)/4];
-
- &mov ("eax","edx");
- &and ("eax",&DWP($res_x+$i,"esp"));
- &mov ("ebx","ebp") if ($one && $one!=-1);
- &and ("ebx",$one) if ($one && $one!=-1);
- &mov ("ecx","esi");
- &and ("ecx",&DWP($in1_x+$i,"esp"));
- &or ("eax",$one==-1?"ebp":"ebx") if ($one);
- &or ("eax","ecx");
- &mov (&DWP($i,"edi"),"eax");
- }
- for($i=0;$i<64;$i+=4) {
- &mov ("eax","edx");
- &and ("eax",&DWP($res_x+$i,"esp"));
- &mov ("ebx","ebp");
- &and ("ebx",&DWP($in2_x+$i,"esp"));
- &mov ("ecx","esi");
- &and ("ecx",&DWP($in1_x+$i,"esp"));
- &or ("eax","ebx");
- &or ("eax","ecx");
- &mov (&DWP($i,"edi"),"eax");
- }
- &stack_pop(8*15+3);
-} &function_end("GFp_nistz256_point_add_affine");
-
-&asm_finish();
-
-close STDOUT or die "error closing STDOUT";
diff --git a/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl b/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl
index f30025e..0575bfd 100644
--- a/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl
+++ b/crypto/fipsmodule/ec/asm/p256-x86_64-asm.pl
@@ -59,7 +59,7 @@
$code.=<<___;
.text
-.extern GFp_ia32cap_P
+.extern OPENSSL_ia32cap_P
# The polynomial
.align 64
@@ -90,57 +90,11 @@
$code.=<<___;
################################################################################
-# void GFp_nistz256_add(uint64_t res[4], uint64_t a[4], uint64_t b[4]);
-.globl GFp_nistz256_add
-.type GFp_nistz256_add,\@function,3
+# void nistz256_neg(uint64_t res[4], uint64_t a[4]);
+.globl nistz256_neg
+.type nistz256_neg,\@function,2
.align 32
-GFp_nistz256_add:
- push %r12
- push %r13
-
- mov 8*0($a_ptr), $a0
- xor $t4, $t4
- mov 8*1($a_ptr), $a1
- mov 8*2($a_ptr), $a2
- mov 8*3($a_ptr), $a3
- lea .Lpoly(%rip), $a_ptr
-
- add 8*0($b_ptr), $a0
- adc 8*1($b_ptr), $a1
- mov $a0, $t0
- adc 8*2($b_ptr), $a2
- adc 8*3($b_ptr), $a3
- mov $a1, $t1
- adc \$0, $t4
-
- sub 8*0($a_ptr), $a0
- mov $a2, $t2
- sbb 8*1($a_ptr), $a1
- sbb 8*2($a_ptr), $a2
- mov $a3, $t3
- sbb 8*3($a_ptr), $a3
- sbb \$0, $t4
-
- cmovc $t0, $a0
- cmovc $t1, $a1
- mov $a0, 8*0($r_ptr)
- cmovc $t2, $a2
- mov $a1, 8*1($r_ptr)
- cmovc $t3, $a3
- mov $a2, 8*2($r_ptr)
- mov $a3, 8*3($r_ptr)
-
- pop %r13
- pop %r12
- ret
-.size GFp_nistz256_add,.-GFp_nistz256_add
-
-################################################################################
-# void GFp_nistz256_neg(uint64_t res[4], uint64_t a[4]);
-.globl GFp_nistz256_neg
-.type GFp_nistz256_neg,\@function,2
-.align 32
-GFp_nistz256_neg:
+nistz256_neg:
.cfi_startproc
push %r12
.cfi_push %r12
@@ -189,7 +143,7 @@
.Lneg_epilogue:
ret
.cfi_endproc
-.size GFp_nistz256_neg,.-GFp_nistz256_neg
+.size nistz256_neg,.-nistz256_neg
___
}
{
@@ -200,19 +154,19 @@
$code.=<<___;
################################################################################
-# void GFp_p256_scalar_mul_mont(
+# void p256_scalar_mul_mont(
# uint64_t res[4],
# uint64_t a[4],
# uint64_t b[4]);
-.globl GFp_p256_scalar_mul_mont
-.type GFp_p256_scalar_mul_mont,\@function,3
+.globl p256_scalar_mul_mont
+.type p256_scalar_mul_mont,\@function,3
.align 32
-GFp_p256_scalar_mul_mont:
+p256_scalar_mul_mont:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
cmp \$0x80100, %ecx
@@ -528,22 +482,22 @@
.Lord_mul_epilogue:
ret
.cfi_endproc
-.size GFp_p256_scalar_mul_mont,.-GFp_p256_scalar_mul_mont
+.size p256_scalar_mul_mont,.-p256_scalar_mul_mont
################################################################################
-# void GFp_p256_scalar_sqr_rep_mont(
+# void p256_scalar_sqr_rep_mont(
# uint64_t res[4],
# uint64_t a[4],
# uint64_t rep);
-.globl GFp_p256_scalar_sqr_rep_mont
-.type GFp_p256_scalar_sqr_rep_mont,\@function,3
+.globl p256_scalar_sqr_rep_mont
+.type p256_scalar_sqr_rep_mont,\@function,3
.align 32
-GFp_p256_scalar_sqr_rep_mont:
+p256_scalar_sqr_rep_mont:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
cmp \$0x80100, %ecx
@@ -829,7 +783,7 @@
.Lord_sqr_epilogue:
ret
.cfi_endproc
-.size GFp_p256_scalar_sqr_rep_mont,.-GFp_p256_scalar_sqr_rep_mont
+.size p256_scalar_sqr_rep_mont,.-p256_scalar_sqr_rep_mont
___
$code.=<<___ if ($addx);
@@ -1281,19 +1235,19 @@
$code.=<<___;
################################################################################
-# void GFp_nistz256_mul_mont(
+# void p256_mul_mont(
# uint64_t res[4],
# uint64_t a[4],
# uint64_t b[4]);
-.globl GFp_nistz256_mul_mont
-.type GFp_nistz256_mul_mont,\@function,3
+.globl p256_mul_mont
+.type p256_mul_mont,\@function,3
.align 32
-GFp_nistz256_mul_mont:
+p256_mul_mont:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
___
@@ -1361,7 +1315,7 @@
.Lmul_epilogue:
ret
.cfi_endproc
-.size GFp_nistz256_mul_mont,.-GFp_nistz256_mul_mont
+.size p256_mul_mont,.-p256_mul_mont
.type __ecp_nistz256_mul_montq,\@abi-omnipotent
.align 32
@@ -1582,20 +1536,20 @@
.size __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq
################################################################################
-# void GFp_nistz256_sqr_mont(
+# void p256_sqr_mont(
# uint64_t res[4],
# uint64_t a[4]);
# we optimize the square according to S.Gueron and V.Krasnov,
# "Speeding up Big-Number Squaring"
-.globl GFp_nistz256_sqr_mont
-.type GFp_nistz256_sqr_mont,\@function,2
+.globl p256_sqr_mont
+.type p256_sqr_mont,\@function,2
.align 32
-GFp_nistz256_sqr_mont:
+p256_sqr_mont:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
___
@@ -1658,7 +1612,7 @@
.Lsqr_epilogue:
ret
.cfi_endproc
-.size GFp_nistz256_sqr_mont,.-GFp_nistz256_sqr_mont
+.size p256_sqr_mont,.-p256_sqr_mont
.type __ecp_nistz256_sqr_montq,\@abi-omnipotent
.align 32
@@ -2136,22 +2090,22 @@
$code.=<<___;
################################################################################
-# void GFp_nistz256_select_w5(uint64_t *val, uint64_t *in_t, crypto_word index);
-.globl GFp_nistz256_select_w5
-.type GFp_nistz256_select_w5,\@abi-omnipotent
+# void nistz256_select_w5(uint64_t *val, uint64_t *in_t, crypto_word index);
+.globl nistz256_select_w5
+.type nistz256_select_w5,\@abi-omnipotent
.align 32
-GFp_nistz256_select_w5:
+nistz256_select_w5:
.cfi_startproc
___
$code.=<<___ if ($avx>1);
- leaq GFp_ia32cap_P(%rip), %rax
+ leaq OPENSSL_ia32cap_P(%rip), %rax
mov 8(%rax), %rax
test \$`1<<5`, %eax
jnz .Lavx2_select_w5
___
$code.=<<___ if ($win64);
lea -0x88(%rsp), %rax
-.LSEH_begin_GFp_nistz256_select_w5:
+.LSEH_begin_nistz256_select_w5:
.byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp
.byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6, -0x20(%rax)
.byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7, -0x10(%rax)
@@ -2232,26 +2186,26 @@
$code.=<<___;
ret
.cfi_endproc
-.LSEH_end_GFp_nistz256_select_w5:
-.size GFp_nistz256_select_w5,.-GFp_nistz256_select_w5
+.LSEH_end_nistz256_select_w5:
+.size nistz256_select_w5,.-nistz256_select_w5
################################################################################
-# void GFp_nistz256_select_w7(uint64_t *val, uint64_t *in_t, crypto_word index);
-.globl GFp_nistz256_select_w7
-.type GFp_nistz256_select_w7,\@abi-omnipotent
+# void nistz256_select_w7(uint64_t *val, uint64_t *in_t, crypto_word index);
+.globl nistz256_select_w7
+.type nistz256_select_w7,\@abi-omnipotent
.align 32
-GFp_nistz256_select_w7:
+nistz256_select_w7:
.cfi_startproc
___
$code.=<<___ if ($avx>1);
- leaq GFp_ia32cap_P(%rip), %rax
+ leaq OPENSSL_ia32cap_P(%rip), %rax
mov 8(%rax), %rax
test \$`1<<5`, %eax
jnz .Lavx2_select_w7
___
$code.=<<___ if ($win64);
lea -0x88(%rsp), %rax
-.LSEH_begin_GFp_nistz256_select_w7:
+.LSEH_begin_nistz256_select_w7:
.byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp
.byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6, -0x20(%rax)
.byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7, -0x10(%rax)
@@ -2321,8 +2275,8 @@
$code.=<<___;
ret
.cfi_endproc
-.LSEH_end_GFp_nistz256_select_w7:
-.size GFp_nistz256_select_w7,.-GFp_nistz256_select_w7
+.LSEH_end_nistz256_select_w7:
+.size nistz256_select_w7,.-nistz256_select_w7
___
}
if ($avx>1) {
@@ -2333,10 +2287,10 @@
$code.=<<___;
################################################################################
-# void GFp_nistz256_avx2_select_w5(uint64_t *val, uint64_t *in_t, crypto_word index);
-.type GFp_nistz256_avx2_select_w5,\@abi-omnipotent
+# void ecp_nistz256_avx2_select_w5(uint64_t *val, uint64_t *in_t, int index);
+.type ecp_nistz256_avx2_select_w5,\@abi-omnipotent
.align 32
-GFp_nistz256_avx2_select_w5:
+ecp_nistz256_avx2_select_w5:
.cfi_startproc
.Lavx2_select_w5:
vzeroupper
@@ -2344,7 +2298,7 @@
$code.=<<___ if ($win64);
lea -0x88(%rsp), %rax
mov %rsp,%r11
-.LSEH_begin_GFp_nistz256_avx2_select_w5:
+.LSEH_begin_ecp_nistz256_avx2_select_w5:
.byte 0x48,0x8d,0x60,0xe0 # lea -0x20(%rax), %rsp
.byte 0xc5,0xf8,0x29,0x70,0xe0 # vmovaps %xmm6, -0x20(%rax)
.byte 0xc5,0xf8,0x29,0x78,0xf0 # vmovaps %xmm7, -0x10(%rax)
@@ -2426,8 +2380,8 @@
$code.=<<___;
ret
.cfi_endproc
-.LSEH_end_GFp_nistz256_avx2_select_w5:
-.size GFp_nistz256_avx2_select_w5,.-GFp_nistz256_avx2_select_w5
+.LSEH_end_ecp_nistz256_avx2_select_w5:
+.size ecp_nistz256_avx2_select_w5,.-ecp_nistz256_avx2_select_w5
___
}
if ($avx>1) {
@@ -2440,11 +2394,10 @@
$code.=<<___;
################################################################################
-# void GFp_nistz256_avx2_select_w7(uint64_t *val, uint64_t *in_t, crypto_word index);
-.globl GFp_nistz256_avx2_select_w7
-.type GFp_nistz256_avx2_select_w7,\@abi-omnipotent
+# void ecp_nistz256_avx2_select_w7(uint64_t *val, uint64_t *in_t, int index);
+.type ecp_nistz256_avx2_select_w7,\@abi-omnipotent
.align 32
-GFp_nistz256_avx2_select_w7:
+ecp_nistz256_avx2_select_w7:
.cfi_startproc
.Lavx2_select_w7:
vzeroupper
@@ -2452,7 +2405,7 @@
$code.=<<___ if ($win64);
mov %rsp,%r11
lea -0x88(%rsp), %rax
-.LSEH_begin_GFp_nistz256_avx2_select_w7:
+.LSEH_begin_ecp_nistz256_avx2_select_w7:
.byte 0x48,0x8d,0x60,0xe0 # lea -0x20(%rax), %rsp
.byte 0xc5,0xf8,0x29,0x70,0xe0 # vmovaps %xmm6, -0x20(%rax)
.byte 0xc5,0xf8,0x29,0x78,0xf0 # vmovaps %xmm7, -0x10(%rax)
@@ -2549,18 +2502,8 @@
$code.=<<___;
ret
.cfi_endproc
-.LSEH_end_GFp_nistz256_avx2_select_w7:
-.size GFp_nistz256_avx2_select_w7,.-GFp_nistz256_avx2_select_w7
-___
-} else {
-$code.=<<___;
-.globl GFp_nistz256_avx2_select_w7
-.type GFp_nistz256_avx2_select_w7,\@function,3
-.align 32
-GFp_nistz256_avx2_select_w7:
- .byte 0x0f,0x0b # ud2
- ret
-.size GFp_nistz256_avx2_select_w7,.-GFp_nistz256_avx2_select_w7
+.LSEH_end_ecp_nistz256_avx2_select_w7:
+.size ecp_nistz256_avx2_select_w7,.-ecp_nistz256_avx2_select_w7
___
}
{{{
@@ -2757,14 +2700,14 @@
$bias = 0;
$code.=<<___;
-.globl GFp_nistz256_point_double
-.type GFp_nistz256_point_double,\@function,2
+.globl p256_point_double
+.type p256_point_double,\@function,2
.align 32
-GFp_nistz256_point_double:
+p256_point_double:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
cmp \$0x80100, %ecx
@@ -2776,9 +2719,9 @@
$bias = 128;
$code.=<<___;
-.type GFp_nistz256_point_doublex,\@function,2
+.type p256_point_doublex,\@function,2
.align 32
-GFp_nistz256_point_doublex:
+p256_point_doublex:
.cfi_startproc
.Lpoint_doublex:
___
@@ -2865,7 +2808,7 @@
call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(res_y, S);
___
{
-######## GFp_nistz256_div_by_2(res_y, res_y); ##########################
+######## ecp_nistz256_div_by_2(res_y, res_y); ##########################
# operate in 4-5-6-7 "name space" that matches squaring output
#
my ($poly1,$poly3)=($a_ptr,$t1);
@@ -2988,7 +2931,7 @@
.Lpoint_double${x}_epilogue:
ret
.cfi_endproc
-.size GFp_nistz256_point_double$sfx,.-GFp_nistz256_point_double$sfx
+.size p256_point_double$sfx,.-p256_point_double$sfx
___
}
&gen_double("q");
@@ -3009,14 +2952,14 @@
$bias = 0;
$code.=<<___;
-.globl GFp_nistz256_point_add
-.type GFp_nistz256_point_add,\@function,3
+.globl p256_point_add
+.type p256_point_add,\@function,3
.align 32
-GFp_nistz256_point_add:
+p256_point_add:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
cmp \$0x80100, %ecx
@@ -3028,9 +2971,9 @@
$bias = 128;
$code.=<<___;
-.type GFp_nistz256_point_addx,\@function,3
+.type p256_point_addx,\@function,3
.align 32
-GFp_nistz256_point_addx:
+p256_point_addx:
.cfi_startproc
.Lpoint_addx:
___
@@ -3387,7 +3330,7 @@
.Lpoint_add${x}_epilogue:
ret
.cfi_endproc
-.size GFp_nistz256_point_add$sfx,.-GFp_nistz256_point_add$sfx
+.size p256_point_add$sfx,.-p256_point_add$sfx
___
}
&gen_add("q");
@@ -3407,14 +3350,14 @@
$bias = 0;
$code.=<<___;
-.globl GFp_nistz256_point_add_affine
-.type GFp_nistz256_point_add_affine,\@function,3
+.globl p256_point_add_affine
+.type p256_point_add_affine,\@function,3
.align 32
-GFp_nistz256_point_add_affine:
+p256_point_add_affine:
.cfi_startproc
___
$code.=<<___ if ($addx);
- leaq GFp_ia32cap_P(%rip), %rcx
+ leaq OPENSSL_ia32cap_P(%rip), %rcx
mov 8(%rcx), %rcx
and \$0x80100, %ecx
cmp \$0x80100, %ecx
@@ -3426,9 +3369,9 @@
$bias = 128;
$code.=<<___;
-.type GFp_nistz256_point_add_affinex,\@function,3
+.type p256_point_add_affinex,\@function,3
.align 32
-GFp_nistz256_point_add_affinex:
+p256_point_add_affinex:
.cfi_startproc
.Lpoint_add_affinex:
___
@@ -3712,7 +3655,7 @@
.Ladd_affine${x}_epilogue:
ret
.cfi_endproc
-.size GFp_nistz256_point_add_affine$sfx,.-GFp_nistz256_point_add_affine$sfx
+.size p256_point_add_affine$sfx,.-p256_point_add_affine$sfx
___
}
&gen_add_affine("q");
@@ -4013,17 +3956,17 @@
.section .pdata
.align 4
- .rva .LSEH_begin_GFp_nistz256_neg
- .rva .LSEH_end_GFp_nistz256_neg
- .rva .LSEH_info_GFp_nistz256_neg
+ .rva .LSEH_begin_nistz256_neg
+ .rva .LSEH_end_nistz256_neg
+ .rva .LSEH_info_nistz256_neg
- .rva .LSEH_begin_GFp_p256_scalar_mul_mont
- .rva .LSEH_end_GFp_p256_scalar_mul_mont
- .rva .LSEH_info_GFp_p256_scalar_mul_mont
+ .rva .LSEH_begin_p256_scalar_mul_mont
+ .rva .LSEH_end_p256_scalar_mul_mont
+ .rva .LSEH_info_p256_scalar_mul_mont
- .rva .LSEH_begin_GFp_p256_scalar_sqr_rep_mont
- .rva .LSEH_end_GFp_p256_scalar_sqr_rep_mont
- .rva .LSEH_info_GFp_p256_scalar_sqr_rep_mont
+ .rva .LSEH_begin_p256_scalar_sqr_rep_mont
+ .rva .LSEH_end_p256_scalar_sqr_rep_mont
+ .rva .LSEH_info_p256_scalar_sqr_rep_mont
___
$code.=<<___ if ($addx);
.rva .LSEH_begin_ecp_nistz256_ord_mul_montx
@@ -4035,71 +3978,71 @@
.rva .LSEH_info_ecp_nistz256_ord_sqr_montx
___
$code.=<<___;
- .rva .LSEH_begin_GFp_nistz256_mul_mont
- .rva .LSEH_end_GFp_nistz256_mul_mont
- .rva .LSEH_info_GFp_nistz256_mul_mont
+ .rva .LSEH_begin_p256_mul_mont
+ .rva .LSEH_end_p256_mul_mont
+ .rva .LSEH_info_p256_mul_mont
- .rva .LSEH_begin_GFp_nistz256_sqr_mont
- .rva .LSEH_end_GFp_nistz256_sqr_mont
- .rva .LSEH_info_GFp_nistz256_sqr_mont
+ .rva .LSEH_begin_p256_sqr_mont
+ .rva .LSEH_end_p256_sqr_mont
+ .rva .LSEH_info_p256_sqr_mont
- .rva .LSEH_begin_GFp_nistz256_select_w5
- .rva .LSEH_end_GFp_nistz256_select_w5
- .rva .LSEH_info_GFp_nistz256_select_wX
+ .rva .LSEH_begin_nistz256_select_w5
+ .rva .LSEH_end_nistz256_select_w5
+ .rva .LSEH_info_ecp_nistz256_select_wX
- .rva .LSEH_begin_GFp_nistz256_select_w7
- .rva .LSEH_end_GFp_nistz256_select_w7
- .rva .LSEH_info_GFp_nistz256_select_wX
+ .rva .LSEH_begin_nistz256_select_w7
+ .rva .LSEH_end_nistz256_select_w7
+ .rva .LSEH_info_ecp_nistz256_select_wX
___
$code.=<<___ if ($avx>1);
- .rva .LSEH_begin_GFp_nistz256_avx2_select_w5
- .rva .LSEH_end_GFp_nistz256_avx2_select_w5
- .rva .LSEH_info_GFp_nistz256_avx2_select_wX
+ .rva .LSEH_begin_ecp_nistz256_avx2_select_w5
+ .rva .LSEH_end_ecp_nistz256_avx2_select_w5
+ .rva .LSEH_info_ecp_nistz256_avx2_select_wX
- .rva .LSEH_begin_GFp_nistz256_avx2_select_w7
- .rva .LSEH_end_GFp_nistz256_avx2_select_w7
- .rva .LSEH_info_GFp_nistz256_avx2_select_wX
+ .rva .LSEH_begin_ecp_nistz256_avx2_select_w7
+ .rva .LSEH_end_ecp_nistz256_avx2_select_w7
+ .rva .LSEH_info_ecp_nistz256_avx2_select_wX
___
$code.=<<___;
- .rva .LSEH_begin_GFp_nistz256_point_double
- .rva .LSEH_end_GFp_nistz256_point_double
- .rva .LSEH_info_GFp_nistz256_point_double
+ .rva .LSEH_begin_p256_point_double
+ .rva .LSEH_end_p256_point_double
+ .rva .LSEH_info_p256_point_double
- .rva .LSEH_begin_GFp_nistz256_point_add
- .rva .LSEH_end_GFp_nistz256_point_add
- .rva .LSEH_info_GFp_nistz256_point_add
+ .rva .LSEH_begin_p256_point_add
+ .rva .LSEH_end_p256_point_add
+ .rva .LSEH_info_p256_point_add
- .rva .LSEH_begin_GFp_nistz256_point_add_affine
- .rva .LSEH_end_GFp_nistz256_point_add_affine
- .rva .LSEH_info_GFp_nistz256_point_add_affine
+ .rva .LSEH_begin_p256_point_add_affine
+ .rva .LSEH_end_p256_point_add_affine
+ .rva .LSEH_info_p256_point_add_affine
___
$code.=<<___ if ($addx);
- .rva .LSEH_begin_GFp_nistz256_point_doublex
- .rva .LSEH_end_GFp_nistz256_point_doublex
- .rva .LSEH_info_GFp_nistz256_point_doublex
+ .rva .LSEH_begin_p256_point_doublex
+ .rva .LSEH_end_p256_point_doublex
+ .rva .LSEH_info_p256_point_doublex
- .rva .LSEH_begin_GFp_nistz256_point_addx
- .rva .LSEH_end_GFp_nistz256_point_addx
- .rva .LSEH_info_GFp_nistz256_point_addx
+ .rva .LSEH_begin_p256_point_addx
+ .rva .LSEH_end_p256_point_addx
+ .rva .LSEH_info_p256_point_addx
- .rva .LSEH_begin_GFp_nistz256_point_add_affinex
- .rva .LSEH_end_GFp_nistz256_point_add_affinex
- .rva .LSEH_info_GFp_nistz256_point_add_affinex
+ .rva .LSEH_begin_p256_point_add_affinex
+ .rva .LSEH_end_p256_point_add_affinex
+ .rva .LSEH_info_p256_point_add_affinex
___
$code.=<<___;
.section .xdata
.align 8
-.LSEH_info_GFp_nistz256_neg:
+.LSEH_info_nistz256_neg:
.byte 9,0,0,0
.rva short_handler
.rva .Lneg_body,.Lneg_epilogue # HandlerData[]
-.LSEH_info_GFp_p256_scalar_mul_mont:
+.LSEH_info_p256_scalar_mul_mont:
.byte 9,0,0,0
.rva full_handler
.rva .Lord_mul_body,.Lord_mul_epilogue # HandlerData[]
.long 48,0
-.LSEH_info_GFp_p256_scalar_sqr_rep_mont:
+.LSEH_info_p256_scalar_sqr_rep_mont:
.byte 9,0,0,0
.rva full_handler
.rva .Lord_sqr_body,.Lord_sqr_epilogue # HandlerData[]
@@ -4118,17 +4061,17 @@
.long 48,0
___
$code.=<<___;
-.LSEH_info_GFp_nistz256_mul_mont:
+.LSEH_info_p256_mul_mont:
.byte 9,0,0,0
.rva full_handler
.rva .Lmul_body,.Lmul_epilogue # HandlerData[]
.long 48,0
-.LSEH_info_GFp_nistz256_sqr_mont:
+.LSEH_info_p256_sqr_mont:
.byte 9,0,0,0
.rva full_handler
.rva .Lsqr_body,.Lsqr_epilogue # HandlerData[]
.long 48,0
-.LSEH_info_GFp_nistz256_select_wX:
+.LSEH_info_ecp_nistz256_select_wX:
.byte 0x01,0x33,0x16,0x00
.byte 0x33,0xf8,0x09,0x00 #movaps 0x90(rsp),xmm15
.byte 0x2e,0xe8,0x08,0x00 #movaps 0x80(rsp),xmm14
@@ -4144,7 +4087,7 @@
.align 8
___
$code.=<<___ if ($avx>1);
-.LSEH_info_GFp_nistz256_avx2_select_wX:
+.LSEH_info_ecp_nistz256_avx2_select_wX:
.byte 0x01,0x36,0x17,0x0b
.byte 0x36,0xf8,0x09,0x00 # vmovaps 0x90(rsp),xmm15
.byte 0x31,0xe8,0x08,0x00 # vmovaps 0x80(rsp),xmm14
@@ -4161,17 +4104,17 @@
.align 8
___
$code.=<<___;
-.LSEH_info_GFp_nistz256_point_double:
+.LSEH_info_p256_point_double:
.byte 9,0,0,0
.rva full_handler
.rva .Lpoint_doubleq_body,.Lpoint_doubleq_epilogue # HandlerData[]
.long 32*5+56,0
-.LSEH_info_GFp_nistz256_point_add:
+.LSEH_info_p256_point_add:
.byte 9,0,0,0
.rva full_handler
.rva .Lpoint_addq_body,.Lpoint_addq_epilogue # HandlerData[]
.long 32*18+56,0
-.LSEH_info_GFp_nistz256_point_add_affine:
+.LSEH_info_p256_point_add_affine:
.byte 9,0,0,0
.rva full_handler
.rva .Ladd_affineq_body,.Ladd_affineq_epilogue # HandlerData[]
@@ -4179,17 +4122,17 @@
___
$code.=<<___ if ($addx);
.align 8
-.LSEH_info_GFp_nistz256_point_doublex:
+.LSEH_info_p256_point_doublex:
.byte 9,0,0,0
.rva full_handler
.rva .Lpoint_doublex_body,.Lpoint_doublex_epilogue # HandlerData[]
.long 32*5+56,0
-.LSEH_info_GFp_nistz256_point_addx:
+.LSEH_info_p256_point_addx:
.byte 9,0,0,0
.rva full_handler
.rva .Lpoint_addx_body,.Lpoint_addx_epilogue # HandlerData[]
.long 32*18+56,0
-.LSEH_info_GFp_nistz256_point_add_affinex:
+.LSEH_info_p256_point_add_affinex:
.byte 9,0,0,0
.rva full_handler
.rva .Ladd_affinex_body,.Ladd_affinex_epilogue # HandlerData[]
diff --git a/crypto/fipsmodule/ec/ecp_nistz.c b/crypto/fipsmodule/ec/ecp_nistz.c
index ebbbf33..1811e28 100644
--- a/crypto/fipsmodule/ec/ecp_nistz.c
+++ b/crypto/fipsmodule/ec/ecp_nistz.c
@@ -25,7 +25,7 @@
* the end. The extra byte is useful because the caller will be breaking |str|
* up into windows of a number of bits (5 or 7) that isn't divisible by 8, and
* so it is useful for it to be able to read an extra zero byte. */
-void gfp_little_endian_bytes_from_scalar(uint8_t str[], size_t str_len,
+void little_endian_bytes_from_scalar(uint8_t str[], size_t str_len,
const Limb scalar[],
size_t num_limbs) {
debug_assert_nonsecret(str_len == (num_limbs * sizeof(Limb)) + 1);
diff --git a/crypto/fipsmodule/ec/ecp_nistz.h b/crypto/fipsmodule/ec/ecp_nistz.h
index 2bcf4b5..1e74ce0 100644
--- a/crypto/fipsmodule/ec/ecp_nistz.h
+++ b/crypto/fipsmodule/ec/ecp_nistz.h
@@ -15,7 +15,7 @@
#ifndef OPENSSL_HEADER_EC_ECP_NISTZ_H
#define OPENSSL_HEADER_EC_ECP_NISTZ_H
-#include <GFp/base.h>
+#include <ring-core/base.h>
#include "../../limbs/limbs.h"
@@ -114,7 +114,7 @@
// is a prime that is much larger than 2^w. It also only holds when windows
// are applied from most significant to least significant, doubling between each
// window. It does not apply to more complex table strategies such as
-// |EC_GFp_nistz256_method|.
+// |EC_nistz256_method|.
//
// PROOF:
//
@@ -267,8 +267,8 @@
#pragma GCC diagnostic pop
#endif
-void gfp_little_endian_bytes_from_scalar(uint8_t str[], size_t str_len,
- const Limb scalar[],
- size_t num_limbs);
+void little_endian_bytes_from_scalar(uint8_t str[], size_t str_len,
+ const Limb scalar[],
+ size_t num_limbs);
#endif // OPENSSL_HEADER_EC_ECP_NISTZ_H
diff --git a/crypto/fipsmodule/ec/ecp_nistz256.c b/crypto/fipsmodule/ec/ecp_nistz256.c
deleted file mode 100644
index b71100c..0000000
--- a/crypto/fipsmodule/ec/ecp_nistz256.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* Copyright (c) 2014, Intel Corporation.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-/* Developers and authors:
- * Shay Gueron (1, 2), and Vlad Krasnov (1)
- * (1) Intel Corporation, Israel Development Center
- * (2) University of Haifa
- * Reference:
- * Shay Gueron and Vlad Krasnov
- * "Fast Prime Field Elliptic Curve Cryptography with 256 Bit Primes"
- * http://eprint.iacr.org/2013/816 */
-
-#include "ecp_nistz256.h"
-
-#include "ecp_nistz.h"
-#include "../bn/internal.h"
-#include "../../limbs/limbs.inl"
-
-#if defined(__GNUC__)
-#pragma GCC diagnostic ignored "-Wsign-conversion"
-#endif
-
-/* Functions implemented in assembly */
-/* Modular neg: res = -a mod P */
-void GFp_nistz256_neg(Limb res[P256_LIMBS], const Limb a[P256_LIMBS]);
-
-
-/* One converted into the Montgomery domain */
-static const Limb ONE[P256_LIMBS] = {
- TOBN(0x00000000, 0x00000001), TOBN(0xffffffff, 0x00000000),
- TOBN(0xffffffff, 0xffffffff), TOBN(0x00000000, 0xfffffffe),
-};
-
-static void copy_conditional(Limb dst[P256_LIMBS],
- const Limb src[P256_LIMBS], Limb move) {
- Limb mask1 = move;
- Limb mask2 = ~mask1;
-
- dst[0] = (src[0] & mask1) ^ (dst[0] & mask2);
- dst[1] = (src[1] & mask1) ^ (dst[1] & mask2);
- dst[2] = (src[2] & mask1) ^ (dst[2] & mask2);
- dst[3] = (src[3] & mask1) ^ (dst[3] & mask2);
- if (P256_LIMBS == 8) {
- dst[4] = (src[4] & mask1) ^ (dst[4] & mask2);
- dst[5] = (src[5] & mask1) ^ (dst[5] & mask2);
- dst[6] = (src[6] & mask1) ^ (dst[6] & mask2);
- dst[7] = (src[7] & mask1) ^ (dst[7] & mask2);
- }
-}
-
-void GFp_nistz256_point_double(P256_POINT *r, const P256_POINT *a);
-
-#if defined(GFp_USE_LARGE_TABLE)
-void GFp_nistz256_point_add_affine(P256_POINT *r, const P256_POINT *a,
- const P256_POINT_AFFINE *b);
-#endif
-
-void GFp_nistz256_point_add(P256_POINT *r, const P256_POINT *a,
- const P256_POINT *b);
-
-// |GFp_nistz256_point_add| is defined in assembly language in X86-64 only.
-#if !defined(OPENSSL_X86_64)
-
-static const BN_ULONG Q[P256_LIMBS] = {
- TOBN(0xffffffff, 0xffffffff),
- TOBN(0x00000000, 0xffffffff),
- TOBN(0x00000000, 0x00000000),
- TOBN(0xffffffff, 0x00000001),
-};
-
-static inline Limb is_equal(const Limb a[P256_LIMBS], const Limb b[P256_LIMBS]) {
- return LIMBS_equal(a, b, P256_LIMBS);
-}
-
-static inline Limb is_zero(const BN_ULONG a[P256_LIMBS]) {
- return LIMBS_are_zero(a, P256_LIMBS);
-}
-
-static inline void elem_mul_by_2(Limb r[P256_LIMBS], const Limb a[P256_LIMBS]) {
- LIMBS_shl_mod(r, a, Q, P256_LIMBS);
-}
-
-static inline void elem_mul_mont(Limb r[P256_LIMBS], const Limb a[P256_LIMBS],
- const Limb b[P256_LIMBS]) {
- GFp_nistz256_mul_mont(r, a, b);
-}
-
-static inline void elem_sqr_mont(Limb r[P256_LIMBS], const Limb a[P256_LIMBS]) {
- GFp_nistz256_sqr_mont(r, a);
-}
-
-static inline void elem_sub(Limb r[P256_LIMBS], const Limb a[P256_LIMBS],
- const Limb b[P256_LIMBS]) {
- LIMBS_sub_mod(r, a, b, Q, P256_LIMBS);
-}
-
-/* Point addition: r = a+b */
-void GFp_nistz256_point_add(P256_POINT *r, const P256_POINT *a, const P256_POINT *b) {
- BN_ULONG U2[P256_LIMBS], S2[P256_LIMBS];
- BN_ULONG U1[P256_LIMBS], S1[P256_LIMBS];
- BN_ULONG Z1sqr[P256_LIMBS];
- BN_ULONG Z2sqr[P256_LIMBS];
- BN_ULONG H[P256_LIMBS], R[P256_LIMBS];
- BN_ULONG Hsqr[P256_LIMBS];
- BN_ULONG Rsqr[P256_LIMBS];
- BN_ULONG Hcub[P256_LIMBS];
-
- BN_ULONG res_x[P256_LIMBS];
- BN_ULONG res_y[P256_LIMBS];
- BN_ULONG res_z[P256_LIMBS];
-
- const BN_ULONG *in1_x = a->X;
- const BN_ULONG *in1_y = a->Y;
- const BN_ULONG *in1_z = a->Z;
-
- const BN_ULONG *in2_x = b->X;
- const BN_ULONG *in2_y = b->Y;
- const BN_ULONG *in2_z = b->Z;
-
- BN_ULONG in1infty = is_zero(a->Z);
- BN_ULONG in2infty = is_zero(b->Z);
-
- elem_sqr_mont(Z2sqr, in2_z); /* Z2^2 */
- elem_sqr_mont(Z1sqr, in1_z); /* Z1^2 */
-
- elem_mul_mont(S1, Z2sqr, in2_z); /* S1 = Z2^3 */
- elem_mul_mont(S2, Z1sqr, in1_z); /* S2 = Z1^3 */
-
- elem_mul_mont(S1, S1, in1_y); /* S1 = Y1*Z2^3 */
- elem_mul_mont(S2, S2, in2_y); /* S2 = Y2*Z1^3 */
- elem_sub(R, S2, S1); /* R = S2 - S1 */
-
- elem_mul_mont(U1, in1_x, Z2sqr); /* U1 = X1*Z2^2 */
- elem_mul_mont(U2, in2_x, Z1sqr); /* U2 = X2*Z1^2 */
- elem_sub(H, U2, U1); /* H = U2 - U1 */
-
- BN_ULONG is_exceptional = is_equal(U1, U2) & ~in1infty & ~in2infty;
- if (is_exceptional) {
- if (is_equal(S1, S2)) {
- GFp_nistz256_point_double(r, a);
- } else {
- limbs_zero(r->X, P256_LIMBS);
- limbs_zero(r->Y, P256_LIMBS);
- limbs_zero(r->Z, P256_LIMBS);
- }
- return;
- }
-
- elem_sqr_mont(Rsqr, R); /* R^2 */
- elem_mul_mont(res_z, H, in1_z); /* Z3 = H*Z1*Z2 */
- elem_sqr_mont(Hsqr, H); /* H^2 */
- elem_mul_mont(res_z, res_z, in2_z); /* Z3 = H*Z1*Z2 */
- elem_mul_mont(Hcub, Hsqr, H); /* H^3 */
-
- elem_mul_mont(U2, U1, Hsqr); /* U1*H^2 */
- elem_mul_by_2(Hsqr, U2); /* 2*U1*H^2 */
-
- elem_sub(res_x, Rsqr, Hsqr);
- elem_sub(res_x, res_x, Hcub);
-
- elem_sub(res_y, U2, res_x);
-
- elem_mul_mont(S2, S1, Hcub);
- elem_mul_mont(res_y, R, res_y);
- elem_sub(res_y, res_y, S2);
-
- copy_conditional(res_x, in2_x, in1infty);
- copy_conditional(res_y, in2_y, in1infty);
- copy_conditional(res_z, in2_z, in1infty);
-
- copy_conditional(res_x, in1_x, in2infty);
- copy_conditional(res_y, in1_y, in2infty);
- copy_conditional(res_z, in1_z, in2infty);
-
- limbs_copy(r->X, res_x, P256_LIMBS);
- limbs_copy(r->Y, res_y, P256_LIMBS);
- limbs_copy(r->Z, res_z, P256_LIMBS);
-}
-#endif
-
-/* r = p * p_scalar */
-void GFp_nistz256_point_mul(P256_POINT *r, const Limb p_scalar[P256_LIMBS],
- const Limb p_x[P256_LIMBS],
- const Limb p_y[P256_LIMBS]) {
- static const size_t kWindowSize = 5;
- static const crypto_word kMask = (1 << (5 /* kWindowSize */ + 1)) - 1;
-
- uint8_t p_str[(P256_LIMBS * sizeof(Limb)) + 1];
- gfp_little_endian_bytes_from_scalar(p_str, sizeof(p_str) / sizeof(p_str[0]),
- p_scalar, P256_LIMBS);
-
- /* A |P256_POINT| is (3 * 32) = 96 bytes, and the 64-byte alignment should
- * add no more than 63 bytes of overhead. Thus, |table| should require
- * ~1599 ((96 * 16) + 63) bytes of stack space. */
- alignas(64) P256_POINT table[16];
-
- /* table[0] is implicitly (0,0,0) (the point at infinity), therefore it is
- * not stored. All other values are actually stored with an offset of -1 in
- * table. */
- P256_POINT *row = table;
-
- limbs_copy(row[1 - 1].X, p_x, P256_LIMBS);
- limbs_copy(row[1 - 1].Y, p_y, P256_LIMBS);
- limbs_copy(row[1 - 1].Z, ONE, P256_LIMBS);
-
- GFp_nistz256_point_double(&row[2 - 1], &row[1 - 1]);
- GFp_nistz256_point_add(&row[3 - 1], &row[2 - 1], &row[1 - 1]);
- GFp_nistz256_point_double(&row[4 - 1], &row[2 - 1]);
- GFp_nistz256_point_double(&row[6 - 1], &row[3 - 1]);
- GFp_nistz256_point_double(&row[8 - 1], &row[4 - 1]);
- GFp_nistz256_point_double(&row[12 - 1], &row[6 - 1]);
- GFp_nistz256_point_add(&row[5 - 1], &row[4 - 1], &row[1 - 1]);
- GFp_nistz256_point_add(&row[7 - 1], &row[6 - 1], &row[1 - 1]);
- GFp_nistz256_point_add(&row[9 - 1], &row[8 - 1], &row[1 - 1]);
- GFp_nistz256_point_add(&row[13 - 1], &row[12 - 1], &row[1 - 1]);
- GFp_nistz256_point_double(&row[14 - 1], &row[7 - 1]);
- GFp_nistz256_point_double(&row[10 - 1], &row[5 - 1]);
- GFp_nistz256_point_add(&row[15 - 1], &row[14 - 1], &row[1 - 1]);
- GFp_nistz256_point_add(&row[11 - 1], &row[10 - 1], &row[1 - 1]);
- GFp_nistz256_point_double(&row[16 - 1], &row[8 - 1]);
-
- Limb tmp[P256_LIMBS];
- alignas(32) P256_POINT h;
- static const size_t START_INDEX = 256 - 1;
- size_t index = START_INDEX;
-
- crypto_word raw_wvalue;
- crypto_word recoded_is_negative;
- crypto_word recoded;
-
- raw_wvalue = p_str[(index - 1) / 8];
- raw_wvalue = (raw_wvalue >> ((index - 1) % 8)) & kMask;
- booth_recode(&recoded_is_negative, &recoded, raw_wvalue, kWindowSize);
- dev_assert_secret(!recoded_is_negative);
- GFp_nistz256_select_w5(r, table, recoded);
-
- while (index >= kWindowSize) {
- if (index != START_INDEX) {
- size_t off = (index - 1) / 8;
-
- raw_wvalue = p_str[off] | p_str[off + 1] << 8;
- raw_wvalue = (raw_wvalue >> ((index - 1) % 8)) & kMask;
- booth_recode(&recoded_is_negative, &recoded, raw_wvalue, kWindowSize);
-
- GFp_nistz256_select_w5(&h, table, recoded);
- GFp_nistz256_neg(tmp, h.Y);
- copy_conditional(h.Y, tmp, recoded_is_negative);
-
- GFp_nistz256_point_add(r, r, &h);
- }
-
- index -= kWindowSize;
-
- GFp_nistz256_point_double(r, r);
- GFp_nistz256_point_double(r, r);
- GFp_nistz256_point_double(r, r);
- GFp_nistz256_point_double(r, r);
- GFp_nistz256_point_double(r, r);
- }
-
- /* Final window */
- raw_wvalue = p_str[0];
- raw_wvalue = (raw_wvalue << 1) & kMask;
-
- booth_recode(&recoded_is_negative, &recoded, raw_wvalue, kWindowSize);
- GFp_nistz256_select_w5(&h, table, recoded);
- GFp_nistz256_neg(tmp, h.Y);
- copy_conditional(h.Y, tmp, recoded_is_negative);
- GFp_nistz256_point_add(r, r, &h);
-}
-
-#if defined(GFp_USE_LARGE_TABLE)
-
-/* Precomputed tables for the default generator */
-#include "ecp_nistz256_table.inl"
-
-static const size_t kWindowSize = 7;
-
-static inline void select_precomputed(P256_POINT_AFFINE *p, size_t i,
- crypto_word raw_wvalue) {
- crypto_word recoded_is_negative;
- crypto_word recoded;
- booth_recode(&recoded_is_negative, &recoded, raw_wvalue, kWindowSize);
- GFp_nistz256_select_w7(p, GFp_nistz256_precomputed[i], recoded);
- Limb neg_y[P256_LIMBS];
- GFp_nistz256_neg(neg_y, p->Y);
- copy_conditional(p->Y, neg_y, recoded_is_negative);
-}
-
-/* This assumes that |x| and |y| have been each been reduced to their minimal
- * unique representations. */
-static Limb is_infinity(const Limb x[P256_LIMBS],
- const Limb y[P256_LIMBS]) {
- Limb acc = 0;
- for (size_t i = 0; i < P256_LIMBS; ++i) {
- acc |= x[i] | y[i];
- }
- return constant_time_is_zero_w(acc);
-}
-
-void GFp_nistz256_point_mul_base(P256_POINT *r,
- const Limb g_scalar[P256_LIMBS]) {
- static const crypto_word kMask = (1 << (7 /* kWindowSize */ + 1)) - 1;
-
- uint8_t p_str[(P256_LIMBS * sizeof(Limb)) + 1];
- gfp_little_endian_bytes_from_scalar(p_str, sizeof(p_str) / sizeof(p_str[0]),
- g_scalar, P256_LIMBS);
-
- /* First window */
- size_t index = kWindowSize;
-
- alignas(32) P256_POINT_AFFINE t;
-
- crypto_word raw_wvalue = (p_str[0] << 1) & kMask;
- select_precomputed(&t, 0, raw_wvalue);
-
- alignas(32) P256_POINT p;
- limbs_copy(p.X, t.X, P256_LIMBS);
- limbs_copy(p.Y, t.Y, P256_LIMBS);
- limbs_copy(p.Z, ONE, P256_LIMBS);
- /* If it is at the point at infinity then p.p.X will be zero. */
- copy_conditional(p.Z, p.X, is_infinity(p.X, p.Y));
-
- for (size_t i = 1; i < 37; i++) {
- size_t off = (index - 1) / 8;
- raw_wvalue = p_str[off] | p_str[off + 1] << 8;
- raw_wvalue = (raw_wvalue >> ((index - 1) % 8)) & kMask;
- index += kWindowSize;
- select_precomputed(&t, i, raw_wvalue);
- GFp_nistz256_point_add_affine(&p, &p, &t);
- }
-
- limbs_copy(r->X, p.X, P256_LIMBS);
- limbs_copy(r->Y, p.Y, P256_LIMBS);
- limbs_copy(r->Z, p.Z, P256_LIMBS);
-}
-
-#endif
diff --git a/crypto/fipsmodule/ec/ecp_nistz256.h b/crypto/fipsmodule/ec/ecp_nistz256.h
deleted file mode 100644
index 561d415..0000000
--- a/crypto/fipsmodule/ec/ecp_nistz256.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) 2014, Intel Corporation.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#ifndef OPENSSL_HEADER_EC_ECP_NISTZ256_H
-#define OPENSSL_HEADER_EC_ECP_NISTZ256_H
-
-#include "../../limbs/limbs.h"
-
-// Keep this in sync with p256.rs.
-#if defined(OPENSSL_AARCH64) || defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
-#define GFp_USE_LARGE_TABLE
-#endif
-
-#define P256_LIMBS (256u / LIMB_BITS)
-
-typedef struct {
- Limb X[P256_LIMBS];
- Limb Y[P256_LIMBS];
- Limb Z[P256_LIMBS];
-} P256_POINT;
-
-#if defined(GFp_USE_LARGE_TABLE)
-typedef struct {
- Limb X[P256_LIMBS];
- Limb Y[P256_LIMBS];
-} P256_POINT_AFFINE;
-#endif
-
-typedef Limb PRECOMP256_ROW[64 * 2 * P256_LIMBS]; // 64 (x, y) entries.
-
-void GFp_nistz256_mul_mont(Limb res[P256_LIMBS], const Limb a[P256_LIMBS],
- const Limb b[P256_LIMBS]);
-void GFp_nistz256_sqr_mont(Limb res[P256_LIMBS], const Limb a[P256_LIMBS]);
-
-/* Functions that perform constant time access to the precomputed tables */
-void GFp_nistz256_select_w5(P256_POINT *out, const P256_POINT table[16],
- crypto_word index);
-
-#if defined(GFp_USE_LARGE_TABLE)
-void GFp_nistz256_select_w7(P256_POINT_AFFINE *out, const PRECOMP256_ROW table, crypto_word index);
-#endif
-
-#endif /* OPENSSL_HEADER_EC_ECP_NISTZ256_H */
diff --git a/crypto/fipsmodule/ec/ecp_nistz256_table.inl b/crypto/fipsmodule/ec/ecp_nistz256_table.inl
deleted file mode 100644
index d4f40c5..0000000
--- a/crypto/fipsmodule/ec/ecp_nistz256_table.inl
+++ /dev/null
@@ -1,9501 +0,0 @@
-/* Copyright (c) 2015, Intel Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-// This is the precomputed constant time access table for the code in
-// GFp_nistz256.c, for the default generator. The table consists of 37
-// subtables, each subtable contains 64 affine points. The affine points are
-// encoded as eight uint64's, four for the x coordinate and four for the y.
-// Both values are in little-endian order. There are 37 tables because a
-// signed, 6-bit recoding of the scalar is used and ceil(256/(6 + 1)) = 37.
-// Within each table there are 64 values because the 6-bit recoding can take
-// 64 values, ignoring the sign bit, which is implemented by performing a
-// negation of the affine point when required. We would like to align it to 2MB
-// in order to increase the chances of using a large page but that appears to
-// lead to invalid ELF files being produced.
-
-// This file is generated by make_p256-x86_64-table.go.
-
-static const alignas(4096) PRECOMP256_ROW GFp_nistz256_precomputed[37] = {
- {TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
- TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6),
- TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
- TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85),
- TOBN(0x850046d4, 0x10ddd64d), TOBN(0xaa6ae3c1, 0xa433827d),
- TOBN(0x73220503, 0x8d1490d9), TOBN(0xf6bb32e4, 0x3dcf3a3b),
- TOBN(0x2f3648d3, 0x61bee1a5), TOBN(0x152cd7cb, 0xeb236ff8),
- TOBN(0x19a8fb0e, 0x92042dbe), TOBN(0x78c57751, 0x0a5b8a3b),
- TOBN(0xffac3f90, 0x4eebc127), TOBN(0xb027f84a, 0x087d81fb),
- TOBN(0x66ad77dd, 0x87cbbc98), TOBN(0x26936a3f, 0xb6ff747e),
- TOBN(0xb04c5c1f, 0xc983a7eb), TOBN(0x583e47ad, 0x0861fe1a),
- TOBN(0x78820831, 0x1a2ee98e), TOBN(0xd5f06a29, 0xe587cc07),
- TOBN(0x74b0b50d, 0x46918dcc), TOBN(0x4650a6ed, 0xc623c173),
- TOBN(0x0cdaacac, 0xe8100af2), TOBN(0x577362f5, 0x41b0176b),
- TOBN(0x2d96f24c, 0xe4cbaba6), TOBN(0x17628471, 0xfad6f447),
- TOBN(0x6b6c36de, 0xe5ddd22e), TOBN(0x84b14c39, 0x4c5ab863),
- TOBN(0xbe1b8aae, 0xc45c61f5), TOBN(0x90ec649a, 0x94b9537d),
- TOBN(0x941cb5aa, 0xd076c20c), TOBN(0xc9079605, 0x890523c8),
- TOBN(0xeb309b4a, 0xe7ba4f10), TOBN(0x73c568ef, 0xe5eb882b),
- TOBN(0x3540a987, 0x7e7a1f68), TOBN(0x73a076bb, 0x2dd1e916),
- TOBN(0x40394737, 0x3e77664a), TOBN(0x55ae744f, 0x346cee3e),
- TOBN(0xd50a961a, 0x5b17a3ad), TOBN(0x13074b59, 0x54213673),
- TOBN(0x93d36220, 0xd377e44b), TOBN(0x299c2b53, 0xadff14b5),
- TOBN(0xf424d44c, 0xef639f11), TOBN(0xa4c9916d, 0x4a07f75f),
- TOBN(0x0746354e, 0xa0173b4f), TOBN(0x2bd20213, 0xd23c00f7),
- TOBN(0xf43eaab5, 0x0c23bb08), TOBN(0x13ba5119, 0xc3123e03),
- TOBN(0x2847d030, 0x3f5b9d4d), TOBN(0x6742f2f2, 0x5da67bdd),
- TOBN(0xef933bdc, 0x77c94195), TOBN(0xeaedd915, 0x6e240867),
- TOBN(0x27f14cd1, 0x9499a78f), TOBN(0x462ab5c5, 0x6f9b3455),
- TOBN(0x8f90f02a, 0xf02cfc6b), TOBN(0xb763891e, 0xb265230d),
- TOBN(0xf59da3a9, 0x532d4977), TOBN(0x21e3327d, 0xcf9eba15),
- TOBN(0x123c7b84, 0xbe60bbf0), TOBN(0x56ec12f2, 0x7706df76),
- TOBN(0x75c96e8f, 0x264e20e8), TOBN(0xabe6bfed, 0x59a7a841),
- TOBN(0x2cc09c04, 0x44c8eb00), TOBN(0xe05b3080, 0xf0c4e16b),
- TOBN(0x1eb7777a, 0xa45f3314), TOBN(0x56af7bed, 0xce5d45e3),
- TOBN(0x2b6e019a, 0x88b12f1a), TOBN(0x086659cd, 0xfd835f9b),
- TOBN(0x2c18dbd1, 0x9dc21ec8), TOBN(0x98f9868a, 0x0fcf8139),
- TOBN(0x737d2cd6, 0x48250b49), TOBN(0xcc61c947, 0x24b3428f),
- TOBN(0x0c2b4078, 0x80dd9e76), TOBN(0xc43a8991, 0x383fbe08),
- TOBN(0x5f7d2d65, 0x779be5d2), TOBN(0x78719a54, 0xeb3b4ab5),
- TOBN(0xea7d260a, 0x6245e404), TOBN(0x9de40795, 0x6e7fdfe0),
- TOBN(0x1ff3a415, 0x8dac1ab5), TOBN(0x3e7090f1, 0x649c9073),
- TOBN(0x1a768561, 0x2b944e88), TOBN(0x250f939e, 0xe57f61c8),
- TOBN(0x0c0daa89, 0x1ead643d), TOBN(0x68930023, 0xe125b88e),
- TOBN(0x04b71aa7, 0xd2697768), TOBN(0xabdedef5, 0xca345a33),
- TOBN(0x2409d29d, 0xee37385e), TOBN(0x4ee1df77, 0xcb83e156),
- TOBN(0x0cac12d9, 0x1cbb5b43), TOBN(0x170ed2f6, 0xca895637),
- TOBN(0x28228cfa, 0x8ade6d66), TOBN(0x7ff57c95, 0x53238aca),
- TOBN(0xccc42563, 0x4b2ed709), TOBN(0x0e356769, 0x856fd30d),
- TOBN(0xbcbcd43f, 0x559e9811), TOBN(0x738477ac, 0x5395b759),
- TOBN(0x35752b90, 0xc00ee17f), TOBN(0x68748390, 0x742ed2e3),
- TOBN(0x7cd06422, 0xbd1f5bc1), TOBN(0xfbc08769, 0xc9e7b797),
- TOBN(0xa242a35b, 0xb0cf664a), TOBN(0x126e48f7, 0x7f9707e3),
- TOBN(0x1717bf54, 0xc6832660), TOBN(0xfaae7332, 0xfd12c72e),
- TOBN(0x27b52db7, 0x995d586b), TOBN(0xbe29569e, 0x832237c2),
- TOBN(0xe8e4193e, 0x2a65e7db), TOBN(0x152706dc, 0x2eaa1bbb),
- TOBN(0x72bcd8b7, 0xbc60055b), TOBN(0x03cc23ee, 0x56e27e4b),
- TOBN(0xee337424, 0xe4819370), TOBN(0xe2aa0e43, 0x0ad3da09),
- TOBN(0x40b8524f, 0x6383c45d), TOBN(0xd7663554, 0x42a41b25),
- TOBN(0x64efa6de, 0x778a4797), TOBN(0x2042170a, 0x7079adf4),
- TOBN(0x808b0b65, 0x0bc6fb80), TOBN(0x5882e075, 0x3ffe2e6b),
- TOBN(0xd5ef2f7c, 0x2c83f549), TOBN(0x54d63c80, 0x9103b723),
- TOBN(0xf2f11bd6, 0x52a23f9b), TOBN(0x3670c319, 0x4b0b6587),
- TOBN(0x55c4623b, 0xb1580e9e), TOBN(0x64edf7b2, 0x01efe220),
- TOBN(0x97091dcb, 0xd53c5c9d), TOBN(0xf17624b6, 0xac0a177b),
- TOBN(0xb0f13975, 0x2cfe2dff), TOBN(0xc1a35c0a, 0x6c7a574e),
- TOBN(0x227d3146, 0x93e79987), TOBN(0x0575bf30, 0xe89cb80e),
- TOBN(0x2f4e247f, 0x0d1883bb), TOBN(0xebd51226, 0x3274c3d0),
- TOBN(0x5f3e51c8, 0x56ada97a), TOBN(0x4afc964d, 0x8f8b403e),
- TOBN(0xa6f247ab, 0x412e2979), TOBN(0x675abd1b, 0x6f80ebda),
- TOBN(0x66a2bd72, 0x5e485a1d), TOBN(0x4b2a5caf, 0x8f4f0b3c),
- TOBN(0x2626927f, 0x1b847bba), TOBN(0x6c6fc7d9, 0x0502394d),
- TOBN(0xfea912ba, 0xa5659ae8), TOBN(0x68363aba, 0x25e1a16e),
- TOBN(0xb8842277, 0x752c41ac), TOBN(0xfe545c28, 0x2897c3fc),
- TOBN(0x2d36e9e7, 0xdc4c696b), TOBN(0x5806244a, 0xfba977c5),
- TOBN(0x85665e9b, 0xe39508c1), TOBN(0xf720ee25, 0x6d12597b),
- TOBN(0x8a979129, 0xd2337a31), TOBN(0x5916868f, 0x0f862bdc),
- TOBN(0x048099d9, 0x5dd283ba), TOBN(0xe2d1eeb6, 0xfe5bfb4e),
- TOBN(0x82ef1c41, 0x7884005d), TOBN(0xa2d4ec17, 0xffffcbae),
- TOBN(0x9161c53f, 0x8aa95e66), TOBN(0x5ee104e1, 0xc5fee0d0),
- TOBN(0x562e4cec, 0xc135b208), TOBN(0x74e1b265, 0x4783f47d),
- TOBN(0x6d2a506c, 0x5a3f3b30), TOBN(0xecead9f4, 0xc16762fc),
- TOBN(0xf29dd4b2, 0xe286e5b9), TOBN(0x1b0fadc0, 0x83bb3c61),
- TOBN(0x7a75023e, 0x7fac29a4), TOBN(0xc086d5f1, 0xc9477fa3),
- TOBN(0x0fc61135, 0x2f6f3076), TOBN(0xc99ffa23, 0xe3912a9a),
- TOBN(0x6a0b0685, 0xd2f8ba3d), TOBN(0xfdc777e8, 0xe93358a4),
- TOBN(0x94a787bb, 0x35415f04), TOBN(0x640c2d6a, 0x4d23fea4),
- TOBN(0x9de917da, 0x153a35b5), TOBN(0x793e8d07, 0x5d5cd074),
- TOBN(0xf4f87653, 0x2de45068), TOBN(0x37c7a7e8, 0x9e2e1f6e),
- TOBN(0xd0825fa2, 0xa3584069), TOBN(0xaf2cea7c, 0x1727bf42),
- TOBN(0x0360a4fb, 0x9e4785a9), TOBN(0xe5fda49c, 0x27299f4a),
- TOBN(0x48068e13, 0x71ac2f71), TOBN(0x83d0687b, 0x9077666f),
- TOBN(0x6d3883b2, 0x15d02819), TOBN(0x6d0d7550, 0x40dd9a35),
- TOBN(0x61d7cbf9, 0x1d2b469f), TOBN(0xf97b232f, 0x2efc3115),
- TOBN(0xa551d750, 0xb24bcbc7), TOBN(0x11ea4949, 0x88a1e356),
- TOBN(0x7669f031, 0x93cb7501), TOBN(0x595dc55e, 0xca737b8a),
- TOBN(0xa4a319ac, 0xd837879f), TOBN(0x6fc1b49e, 0xed6b67b0),
- TOBN(0xe3959933, 0x32f1f3af), TOBN(0x966742eb, 0x65432a2e),
- TOBN(0x4b8dc9fe, 0xb4966228), TOBN(0x96cc6312, 0x43f43950),
- TOBN(0x12068859, 0xc9b731ee), TOBN(0x7b948dc3, 0x56f79968),
- TOBN(0x61e4ad32, 0xed1f8008), TOBN(0xe6c9267a, 0xd8b17538),
- TOBN(0x1ac7c5eb, 0x857ff6fb), TOBN(0x994baaa8, 0x55f2fb10),
- TOBN(0x84cf14e1, 0x1d248018), TOBN(0x5a39898b, 0x628ac508),
- TOBN(0x14fde97b, 0x5fa944f5), TOBN(0xed178030, 0xd12e5ac7),
- TOBN(0x042c2af4, 0x97e2feb4), TOBN(0xd36a42d7, 0xaebf7313),
- TOBN(0x49d2c9eb, 0x084ffdd7), TOBN(0x9f8aa54b, 0x2ef7c76a),
- TOBN(0x9200b7ba, 0x09895e70), TOBN(0x3bd0c66f, 0xddb7fb58),
- TOBN(0x2d97d108, 0x78eb4cbb), TOBN(0x2d431068, 0xd84bde31),
- TOBN(0x4b523eb7, 0x172ccd1f), TOBN(0x7323cb28, 0x30a6a892),
- TOBN(0x97082ec0, 0xcfe153eb), TOBN(0xe97f6b6a, 0xf2aadb97),
- TOBN(0x1d3d393e, 0xd1a83da1), TOBN(0xa6a7f9c7, 0x804b2a68),
- TOBN(0x4a688b48, 0x2d0cb71e), TOBN(0xa9b4cc5f, 0x40585278),
- TOBN(0x5e5db46a, 0xcb66e132), TOBN(0xf1be963a, 0x0d925880),
- TOBN(0x944a7027, 0x0317b9e2), TOBN(0xe266f959, 0x48603d48),
- TOBN(0x98db6673, 0x5c208899), TOBN(0x90472447, 0xa2fb18a3),
- TOBN(0x8a966939, 0x777c619f), TOBN(0x3798142a, 0x2a3be21b),
- TOBN(0xb4241cb1, 0x3298b343), TOBN(0xa3a14e49, 0xb44f65a1),
- TOBN(0xc5f4d6cd, 0x3ac77acd), TOBN(0xd0288cb5, 0x52b6fc3c),
- TOBN(0xd5cc8c2f, 0x1c040abc), TOBN(0xb675511e, 0x06bf9b4a),
- TOBN(0xd667da37, 0x9b3aa441), TOBN(0x460d45ce, 0x51601f72),
- TOBN(0xe2f73c69, 0x6755ff89), TOBN(0xdd3cf7e7, 0x473017e6),
- TOBN(0x8ef5689d, 0x3cf7600d), TOBN(0x948dc4f8, 0xb1fc87b4),
- TOBN(0xd9e9fe81, 0x4ea53299), TOBN(0x2d921ca2, 0x98eb6028),
- TOBN(0xfaecedfd, 0x0c9803fc), TOBN(0xf38ae891, 0x4d7b4745),
- TOBN(0xd8c5fccf, 0xc5e3a3d8), TOBN(0xbefd904c, 0x4079dfbf),
- TOBN(0xbc6d6a58, 0xfead0197), TOBN(0x39227077, 0x695532a4),
- TOBN(0x09e23e6d, 0xdbef42f5), TOBN(0x7e449b64, 0x480a9908),
- TOBN(0x7b969c1a, 0xad9a2e40), TOBN(0x6231d792, 0x9591c2a4),
- TOBN(0x87151456, 0x0f664534), TOBN(0x85ceae7c, 0x4b68f103),
- TOBN(0xac09c4ae, 0x65578ab9), TOBN(0x33ec6868, 0xf044b10c),
- TOBN(0x6ac4832b, 0x3a8ec1f1), TOBN(0x5509d128, 0x5847d5ef),
- TOBN(0xf909604f, 0x763f1574), TOBN(0xb16c4303, 0xc32f63c4),
- TOBN(0xb6ab2014, 0x7ca23cd3), TOBN(0xcaa7a5c6, 0xa391849d),
- TOBN(0x5b0673a3, 0x75678d94), TOBN(0xc982ddd4, 0xdd303e64),
- TOBN(0xfd7b000b, 0x5db6f971), TOBN(0xbba2cb1f, 0x6f876f92),
- TOBN(0xc77332a3, 0x3c569426), TOBN(0xa159100c, 0x570d74f8),
- TOBN(0xfd16847f, 0xdec67ef5), TOBN(0x742ee464, 0x233e76b7),
- TOBN(0x0b8e4134, 0xefc2b4c8), TOBN(0xca640b86, 0x42a3e521),
- TOBN(0x653a0190, 0x8ceb6aa9), TOBN(0x313c300c, 0x547852d5),
- TOBN(0x24e4ab12, 0x6b237af7), TOBN(0x2ba90162, 0x8bb47af8),
- TOBN(0x3d5e58d6, 0xa8219bb7), TOBN(0xc691d0bd, 0x1b06c57f),
- TOBN(0x0ae4cb10, 0xd257576e), TOBN(0x3569656c, 0xd54a3dc3),
- TOBN(0xe5ebaebd, 0x94cda03a), TOBN(0x934e82d3, 0x162bfe13),
- TOBN(0x450ac0ba, 0xe251a0c6), TOBN(0x480b9e11, 0xdd6da526),
- TOBN(0x00467bc5, 0x8cce08b5), TOBN(0xb636458c, 0x7f178d55),
- TOBN(0xc5748bae, 0xa677d806), TOBN(0x2763a387, 0xdfa394eb),
- TOBN(0xa12b448a, 0x7d3cebb6), TOBN(0xe7adda3e, 0x6f20d850),
- TOBN(0xf63ebce5, 0x1558462c), TOBN(0x58b36143, 0x620088a8),
- TOBN(0x8a2cc3ca, 0x4d63c0ee), TOBN(0x51233117, 0x0fe948ce),
- TOBN(0x7463fd85, 0x222ef33b), TOBN(0xadf0c7dc, 0x7c603d6c),
- TOBN(0x0ec32d3b, 0xfe7765e5), TOBN(0xccaab359, 0xbf380409),
- TOBN(0xbdaa84d6, 0x8e59319c), TOBN(0xd9a4c280, 0x9c80c34d),
- TOBN(0xa9d89488, 0xa059c142), TOBN(0x6f5ae714, 0xff0b9346),
- TOBN(0x068f237d, 0x16fb3664), TOBN(0x5853e4c4, 0x363186ac),
- TOBN(0xe2d87d23, 0x63c52f98), TOBN(0x2ec4a766, 0x81828876),
- TOBN(0x47b864fa, 0xe14e7b1c), TOBN(0x0c0bc0e5, 0x69192408),
- TOBN(0xe4d7681d, 0xb82e9f3e), TOBN(0x83200f0b, 0xdf25e13c),
- TOBN(0x8909984c, 0x66f27280), TOBN(0x462d7b00, 0x75f73227),
- TOBN(0xd90ba188, 0xf2651798), TOBN(0x74c6e18c, 0x36ab1c34),
- TOBN(0xab256ea3, 0x5ef54359), TOBN(0x03466612, 0xd1aa702f),
- TOBN(0x624d6049, 0x2ed22e91), TOBN(0x6fdfe0b5, 0x6f072822),
- TOBN(0xeeca1115, 0x39ce2271), TOBN(0x98100a4f, 0xdb01614f),
- TOBN(0xb6b0daa2, 0xa35c628f), TOBN(0xb6f94d2e, 0xc87e9a47),
- TOBN(0xc6773259, 0x1d57d9ce), TOBN(0xf70bfeec, 0x03884a7b),
- TOBN(0x5fb35ccf, 0xed2bad01), TOBN(0xa155cbe3, 0x1da6a5c7),
- TOBN(0xc2e2594c, 0x30a92f8f), TOBN(0x649c89ce, 0x5bfafe43),
- TOBN(0xd158667d, 0xe9ff257a), TOBN(0x9b359611, 0xf32c50ae),
- TOBN(0x4b00b20b, 0x906014cf), TOBN(0xf3a8cfe3, 0x89bc7d3d),
- TOBN(0x4ff23ffd, 0x248a7d06), TOBN(0x80c5bfb4, 0x878873fa),
- TOBN(0xb7d9ad90, 0x05745981), TOBN(0x179c85db, 0x3db01994),
- TOBN(0xba41b062, 0x61a6966c), TOBN(0x4d82d052, 0xeadce5a8),
- TOBN(0x9e91cd3b, 0xa5e6a318), TOBN(0x47795f4f, 0x95b2dda0),
- TOBN(0xecfd7c1f, 0xd55a897c), TOBN(0x009194ab, 0xb29110fb),
- TOBN(0x5f0e2046, 0xe381d3b0), TOBN(0x5f3425f6, 0xa98dd291),
- TOBN(0xbfa06687, 0x730d50da), TOBN(0x0423446c, 0x4b083b7f),
- TOBN(0x397a247d, 0xd69d3417), TOBN(0xeb629f90, 0x387ba42a),
- TOBN(0x1ee426cc, 0xd5cd79bf), TOBN(0x0032940b, 0x946c6e18),
- TOBN(0x1b1e8ae0, 0x57477f58), TOBN(0xe94f7d34, 0x6d823278),
- TOBN(0xc747cb96, 0x782ba21a), TOBN(0xc5254469, 0xf72b33a5),
- TOBN(0x772ef6de, 0xc7f80c81), TOBN(0xd73acbfe, 0x2cd9e6b5),
- TOBN(0x4075b5b1, 0x49ee90d9), TOBN(0x785c339a, 0xa06e9eba),
- TOBN(0xa1030d5b, 0xabf825e0), TOBN(0xcec684c3, 0xa42931dc),
- TOBN(0x42ab62c9, 0xc1586e63), TOBN(0x45431d66, 0x5ab43f2b),
- TOBN(0x57c8b2c0, 0x55f7835d), TOBN(0x033da338, 0xc1b7f865),
- TOBN(0x283c7513, 0xcaa76097), TOBN(0x0a624fa9, 0x36c83906),
- TOBN(0x6b20afec, 0x715af2c7), TOBN(0x4b969974, 0xeba78bfd),
- TOBN(0x220755cc, 0xd921d60e), TOBN(0x9b944e10, 0x7baeca13),
- TOBN(0x04819d51, 0x5ded93d4), TOBN(0x9bbff86e, 0x6dddfd27),
- TOBN(0x6b344130, 0x77adc612), TOBN(0xa7496529, 0xbbd803a0),
- TOBN(0x1a1baaa7, 0x6d8805bd), TOBN(0xc8403902, 0x470343ad),
- TOBN(0x39f59f66, 0x175adff1), TOBN(0x0b26d7fb, 0xb7d8c5b7),
- TOBN(0xa875f5ce, 0x529d75e3), TOBN(0x85efc7e9, 0x41325cc2),
- TOBN(0x21950b42, 0x1ff6acd3), TOBN(0xffe70484, 0x53dc6909),
- TOBN(0xff4cd0b2, 0x28766127), TOBN(0xabdbe608, 0x4fb7db2b),
- TOBN(0x837c9228, 0x5e1109e8), TOBN(0x26147d27, 0xf4645b5a),
- TOBN(0x4d78f592, 0xf7818ed8), TOBN(0xd394077e, 0xf247fa36),
- TOBN(0x0fb9c2d0, 0x488c171a), TOBN(0xa78bfbaa, 0x13685278),
- TOBN(0xedfbe268, 0xd5b1fa6a), TOBN(0x0dceb8db, 0x2b7eaba7),
- TOBN(0xbf9e8089, 0x9ae2b710), TOBN(0xefde7ae6, 0xa4449c96),
- TOBN(0x43b7716b, 0xcc143a46), TOBN(0xd7d34194, 0xc3628c13),
- TOBN(0x508cec1c, 0x3b3f64c9), TOBN(0xe20bc0ba, 0x1e5edf3f),
- TOBN(0xda1deb85, 0x2f4318d4), TOBN(0xd20ebe0d, 0x5c3fa443),
- TOBN(0x370b4ea7, 0x73241ea3), TOBN(0x61f1511c, 0x5e1a5f65),
- TOBN(0x99a5e23d, 0x82681c62), TOBN(0xd731e383, 0xa2f54c2d),
- TOBN(0x2692f36e, 0x83445904), TOBN(0x2e0ec469, 0xaf45f9c0),
- TOBN(0x905a3201, 0xc67528b7), TOBN(0x88f77f34, 0xd0e5e542),
- TOBN(0xf67a8d29, 0x5864687c), TOBN(0x23b92eae, 0x22df3562),
- TOBN(0x5c27014b, 0x9bbec39e), TOBN(0x7ef2f226, 0x9c0f0f8d),
- TOBN(0x97359638, 0x546c4d8d), TOBN(0x5f9c3fc4, 0x92f24679),
- TOBN(0x912e8bed, 0xa8c8acd9), TOBN(0xec3a318d, 0x306634b0),
- TOBN(0x80167f41, 0xc31cb264), TOBN(0x3db82f6f, 0x522113f2),
- TOBN(0xb155bcd2, 0xdcafe197), TOBN(0xfba1da59, 0x43465283),
- TOBN(0xa0425b8e, 0xb212cf53), TOBN(0x4f2e512e, 0xf8557c5f),
- TOBN(0xc1286ff9, 0x25c4d56c), TOBN(0xbb8a0fea, 0xee26c851),
- TOBN(0xc28f70d2, 0xe7d6107e), TOBN(0x7ee0c444, 0xe76265aa),
- TOBN(0x3df277a4, 0x1d1936b1), TOBN(0x1a556e3f, 0xea9595eb),
- TOBN(0x258bbbf9, 0xe7305683), TOBN(0x31eea5bf, 0x07ef5be6),
- TOBN(0x0deb0e4a, 0x46c814c1), TOBN(0x5cee8449, 0xa7b730dd),
- TOBN(0xeab495c5, 0xa0182bde), TOBN(0xee759f87, 0x9e27a6b4),
- TOBN(0xc2cf6a68, 0x80e518ca), TOBN(0x25e8013f, 0xf14cf3f4),
- TOBN(0x8fc44140, 0x7e8d7a14), TOBN(0xbb1ff3ca, 0x9556f36a),
- TOBN(0x6a844385, 0x14600044), TOBN(0xba3f0c4a, 0x7451ae63),
- TOBN(0xdfcac25b, 0x1f9af32a), TOBN(0x01e0db86, 0xb1f2214b),
- TOBN(0x4e9a5bc2, 0xa4b596ac), TOBN(0x83927681, 0x026c2c08),
- TOBN(0x3ec832e7, 0x7acaca28), TOBN(0x1bfeea57, 0xc7385b29),
- TOBN(0x068212e3, 0xfd1eaf38), TOBN(0xc1329830, 0x6acf8ccc),
- TOBN(0xb909f2db, 0x2aac9e59), TOBN(0x5748060d, 0xb661782a),
- TOBN(0xc5ab2632, 0xc79b7a01), TOBN(0xda44c6c6, 0x00017626),
- TOBN(0xf26c00e8, 0xa7ea82f0), TOBN(0x99cac80d, 0xe4299aaf),
- TOBN(0xd66fe3b6, 0x7ed78be1), TOBN(0x305f725f, 0x648d02cd),
- TOBN(0x33ed1bc4, 0x623fb21b), TOBN(0xfa70533e, 0x7a6319ad),
- TOBN(0x17ab562d, 0xbe5ffb3e), TOBN(0x06374994, 0x56674741),
- TOBN(0x69d44ed6, 0x5c46aa8e), TOBN(0x2100d5d3, 0xa8d063d1),
- TOBN(0xcb9727ea, 0xa2d17c36), TOBN(0x4c2bab1b, 0x8add53b7),
- TOBN(0xa084e90c, 0x15426704), TOBN(0x778afcd3, 0xa837ebea),
- TOBN(0x6651f701, 0x7ce477f8), TOBN(0xa0624998, 0x46fb7a8b),
- TOBN(0xdc1e6828, 0xed8a6e19), TOBN(0x33fc2336, 0x4189d9c7),
- TOBN(0x026f8fe2, 0x671c39bc), TOBN(0xd40c4ccd, 0xbc6f9915),
- TOBN(0xafa135bb, 0xf80e75ca), TOBN(0x12c651a0, 0x22adff2c),
- TOBN(0xc40a04bd, 0x4f51ad96), TOBN(0x04820109, 0xbbe4e832),
- TOBN(0x3667eb1a, 0x7f4c04cc), TOBN(0x59556621, 0xa9404f84),
- TOBN(0x71cdf653, 0x7eceb50a), TOBN(0x994a44a6, 0x9b8335fa),
- TOBN(0xd7faf819, 0xdbeb9b69), TOBN(0x473c5680, 0xeed4350d),
- TOBN(0xb6658466, 0xda44bba2), TOBN(0x0d1bc780, 0x872bdbf3),
- TOBN(0xe535f175, 0xa1962f91), TOBN(0x6ed7e061, 0xed58f5a7),
- TOBN(0x177aa4c0, 0x2089a233), TOBN(0x0dbcb03a, 0xe539b413),
- TOBN(0xe3dc424e, 0xbb32e38e), TOBN(0x6472e5ef, 0x6806701e),
- TOBN(0xdd47ff98, 0x814be9ee), TOBN(0x6b60cfff, 0x35ace009),
- TOBN(0xb8d3d931, 0x9ff91fe5), TOBN(0x039c4800, 0xf0518eed),
- TOBN(0x95c37632, 0x9182cb26), TOBN(0x0763a434, 0x82fc568d),
- TOBN(0x707c04d5, 0x383e76ba), TOBN(0xac98b930, 0x824e8197),
- TOBN(0x92bf7c8f, 0x91230de0), TOBN(0x90876a01, 0x40959b70),
- TOBN(0xdb6d96f3, 0x05968b80), TOBN(0x380a0913, 0x089f73b9),
- TOBN(0x7da70b83, 0xc2c61e01), TOBN(0x95fb8394, 0x569b38c7),
- TOBN(0x9a3c6512, 0x80edfe2f), TOBN(0x8f726bb9, 0x8faeaf82),
- TOBN(0x8010a4a0, 0x78424bf8), TOBN(0x29672044, 0x0e844970)},
- {TOBN(0x63c5cb81, 0x7a2ad62a), TOBN(0x7ef2b6b9, 0xac62ff54),
- TOBN(0x3749bba4, 0xb3ad9db5), TOBN(0xad311f2c, 0x46d5a617),
- TOBN(0xb77a8087, 0xc2ff3b6d), TOBN(0xb46feaf3, 0x367834ff),
- TOBN(0xf8aa266d, 0x75d6b138), TOBN(0xfa38d320, 0xec008188),
- TOBN(0x486d8ffa, 0x696946fc), TOBN(0x50fbc6d8, 0xb9cba56d),
- TOBN(0x7e3d423e, 0x90f35a15), TOBN(0x7c3da195, 0xc0dd962c),
- TOBN(0xe673fdb0, 0x3cfd5d8b), TOBN(0x0704b7c2, 0x889dfca5),
- TOBN(0xf6ce581f, 0xf52305aa), TOBN(0x399d49eb, 0x914d5e53),
- TOBN(0x380a496d, 0x6ec293cd), TOBN(0x733dbda7, 0x8e7051f5),
- TOBN(0x037e388d, 0xb849140a), TOBN(0xee4b32b0, 0x5946dbf6),
- TOBN(0xb1c4fda9, 0xcae368d1), TOBN(0x5001a7b0, 0xfdb0b2f3),
- TOBN(0x6df59374, 0x2e3ac46e), TOBN(0x4af675f2, 0x39b3e656),
- TOBN(0x44e38110, 0x39949296), TOBN(0x5b63827b, 0x361db1b5),
- TOBN(0x3e5323ed, 0x206eaff5), TOBN(0x942370d2, 0xc21f4290),
- TOBN(0xf2caaf2e, 0xe0d985a1), TOBN(0x192cc64b, 0x7239846d),
- TOBN(0x7c0b8f47, 0xae6312f8), TOBN(0x7dc61f91, 0x96620108),
- TOBN(0xb830fb5b, 0xc2da7de9), TOBN(0xd0e643df, 0x0ff8d3be),
- TOBN(0x31ee77ba, 0x188a9641), TOBN(0x4e8aa3aa, 0xbcf6d502),
- TOBN(0xf9fb6532, 0x9a49110f), TOBN(0xd18317f6, 0x2dd6b220),
- TOBN(0x7e3ced41, 0x52c3ea5a), TOBN(0x0d296a14, 0x7d579c4a),
- TOBN(0x35d6a53e, 0xed4c3717), TOBN(0x9f8240cf, 0x3d0ed2a3),
- TOBN(0x8c0d4d05, 0xe5543aa5), TOBN(0x45d5bbfb, 0xdd33b4b4),
- TOBN(0xfa04cc73, 0x137fd28e), TOBN(0x862ac6ef, 0xc73b3ffd),
- TOBN(0x403ff9f5, 0x31f51ef2), TOBN(0x34d5e0fc, 0xbc73f5a2),
- TOBN(0xf2526820, 0x08913f4f), TOBN(0xea20ed61, 0xeac93d95),
- TOBN(0x51ed38b4, 0x6ca6b26c), TOBN(0x8662dcbc, 0xea4327b0),
- TOBN(0x6daf295c, 0x725d2aaa), TOBN(0xbad2752f, 0x8e52dcda),
- TOBN(0x2210e721, 0x0b17dacc), TOBN(0xa37f7912, 0xd51e8232),
- TOBN(0x4f7081e1, 0x44cc3add), TOBN(0xd5ffa1d6, 0x87be82cf),
- TOBN(0x89890b6c, 0x0edd6472), TOBN(0xada26e1a, 0x3ed17863),
- TOBN(0x276f2715, 0x63483caa), TOBN(0xe6924cd9, 0x2f6077fd),
- TOBN(0x05a7fe98, 0x0a466e3c), TOBN(0xf1c794b0, 0xb1902d1f),
- TOBN(0xe5213688, 0x82a8042c), TOBN(0xd931cfaf, 0xcd278298),
- TOBN(0x069a0ae0, 0xf597a740), TOBN(0x0adbb3f3, 0xeb59107c),
- TOBN(0x983e951e, 0x5eaa8eb8), TOBN(0xe663a8b5, 0x11b48e78),
- TOBN(0x1631cc0d, 0x8a03f2c5), TOBN(0x7577c11e, 0x11e271e2),
- TOBN(0x33b2385c, 0x08369a90), TOBN(0x2990c59b, 0x190eb4f8),
- TOBN(0x819a6145, 0xc68eac80), TOBN(0x7a786d62, 0x2ec4a014),
- TOBN(0x33faadbe, 0x20ac3a8d), TOBN(0x31a21781, 0x5aba2d30),
- TOBN(0x209d2742, 0xdba4f565), TOBN(0xdb2ce9e3, 0x55aa0fbb),
- TOBN(0x8cef334b, 0x168984df), TOBN(0xe81dce17, 0x33879638),
- TOBN(0xf6e6949c, 0x263720f0), TOBN(0x5c56feaf, 0xf593cbec),
- TOBN(0x8bff5601, 0xfde58c84), TOBN(0x74e24117, 0x2eccb314),
- TOBN(0xbcf01b61, 0x4c9a8a78), TOBN(0xa233e35e, 0x544c9868),
- TOBN(0xb3156bf3, 0x8bd7aff1), TOBN(0x1b5ee4cb, 0x1d81b146),
- TOBN(0x7ba1ac41, 0xd628a915), TOBN(0x8f3a8f9c, 0xfd89699e),
- TOBN(0x7329b9c9, 0xa0748be7), TOBN(0x1d391c95, 0xa92e621f),
- TOBN(0xe51e6b21, 0x4d10a837), TOBN(0xd255f53a, 0x4947b435),
- TOBN(0x07669e04, 0xf1788ee3), TOBN(0xc14f27af, 0xa86938a2),
- TOBN(0x8b47a334, 0xe93a01c0), TOBN(0xff627438, 0xd9366808),
- TOBN(0x7a0985d8, 0xca2a5965), TOBN(0x3d9a5542, 0xd6e9b9b3),
- TOBN(0xc23eb80b, 0x4cf972e8), TOBN(0x5c1c33bb, 0x4fdf72fd),
- TOBN(0x0c4a58d4, 0x74a86108), TOBN(0xf8048a8f, 0xee4c5d90),
- TOBN(0xe3c7c924, 0xe86d4c80), TOBN(0x28c889de, 0x056a1e60),
- TOBN(0x57e2662e, 0xb214a040), TOBN(0xe8c48e98, 0x37e10347),
- TOBN(0x87742862, 0x80ac748a), TOBN(0xf1c24022, 0x186b06f2),
- TOBN(0xac2dd4c3, 0x5f74040a), TOBN(0x409aeb71, 0xfceac957),
- TOBN(0x4fbad782, 0x55c4ec23), TOBN(0xb359ed61, 0x8a7b76ec),
- TOBN(0x12744926, 0xed6f4a60), TOBN(0xe21e8d7f, 0x4b912de3),
- TOBN(0xe2575a59, 0xfc705a59), TOBN(0x72f1d4de, 0xed2dbc0e),
- TOBN(0x3d2b24b9, 0xeb7926b8), TOBN(0xbff88cb3, 0xcdbe5509),
- TOBN(0xd0f399af, 0xe4dd640b), TOBN(0x3c5fe130, 0x2f76ed45),
- TOBN(0x6f3562f4, 0x3764fb3d), TOBN(0x7b5af318, 0x3151b62d),
- TOBN(0xd5bd0bc7, 0xd79ce5f3), TOBN(0xfdaf6b20, 0xec66890f),
- TOBN(0x735c67ec, 0x6063540c), TOBN(0x50b259c2, 0xe5f9cb8f),
- TOBN(0xb8734f9a, 0x3f99c6ab), TOBN(0xf8cc13d5, 0xa3a7bc85),
- TOBN(0x80c1b305, 0xc5217659), TOBN(0xfe5364d4, 0x4ec12a54),
- TOBN(0xbd87045e, 0x681345fe), TOBN(0x7f8efeb1, 0x582f897f),
- TOBN(0xe8cbf1e5, 0xd5923359), TOBN(0xdb0cea9d, 0x539b9fb0),
- TOBN(0x0c5b34cf, 0x49859b98), TOBN(0x5e583c56, 0xa4403cc6),
- TOBN(0x11fc1a2d, 0xd48185b7), TOBN(0xc93fbc7e, 0x6e521787),
- TOBN(0x47e7a058, 0x05105b8b), TOBN(0x7b4d4d58, 0xdb8260c8),
- TOBN(0xe33930b0, 0x46eb842a), TOBN(0x8e844a9a, 0x7bdae56d),
- TOBN(0x34ef3a9e, 0x13f7fdfc), TOBN(0xb3768f82, 0x636ca176),
- TOBN(0x2821f4e0, 0x4e09e61c), TOBN(0x414dc3a1, 0xa0c7cddc),
- TOBN(0xd5379437, 0x54945fcd), TOBN(0x151b6eef, 0xb3555ff1),
- TOBN(0xb31bd613, 0x6339c083), TOBN(0x39ff8155, 0xdfb64701),
- TOBN(0x7c3388d2, 0xe29604ab), TOBN(0x1e19084b, 0xa6b10442),
- TOBN(0x17cf54c0, 0xeccd47ef), TOBN(0x89693385, 0x4a5dfb30),
- TOBN(0x69d023fb, 0x47daf9f6), TOBN(0x9222840b, 0x7d91d959),
- TOBN(0x439108f5, 0x803bac62), TOBN(0x0b7dd91d, 0x379bd45f),
- TOBN(0xd651e827, 0xca63c581), TOBN(0x5c5d75f6, 0x509c104f),
- TOBN(0x7d5fc738, 0x1f2dc308), TOBN(0x20faa7bf, 0xd98454be),
- TOBN(0x95374bee, 0xa517b031), TOBN(0xf036b9b1, 0x642692ac),
- TOBN(0xc5106109, 0x39842194), TOBN(0xb7e2353e, 0x49d05295),
- TOBN(0xfc8c1d5c, 0xefb42ee0), TOBN(0xe04884eb, 0x08ce811c),
- TOBN(0xf1f75d81, 0x7419f40e), TOBN(0x5b0ac162, 0xa995c241),
- TOBN(0x120921bb, 0xc4c55646), TOBN(0x713520c2, 0x8d33cf97),
- TOBN(0xb4a65a5c, 0xe98c5100), TOBN(0x6cec871d, 0x2ddd0f5a),
- TOBN(0x251f0b7f, 0x9ba2e78b), TOBN(0x224a8434, 0xce3a2a5f),
- TOBN(0x26827f61, 0x25f5c46f), TOBN(0x6a22bedc, 0x48545ec0),
- TOBN(0x25ae5fa0, 0xb1bb5cdc), TOBN(0xd693682f, 0xfcb9b98f),
- TOBN(0x32027fe8, 0x91e5d7d3), TOBN(0xf14b7d17, 0x73a07678),
- TOBN(0xf88497b3, 0xc0dfdd61), TOBN(0xf7c2eec0, 0x2a8c4f48),
- TOBN(0xaa5573f4, 0x3756e621), TOBN(0xc013a240, 0x1825b948),
- TOBN(0x1c03b345, 0x63878572), TOBN(0xa0472bea, 0x653a4184),
- TOBN(0xf4222e27, 0x0ac69a80), TOBN(0x34096d25, 0xf51e54f6),
- TOBN(0x00a648cb, 0x8fffa591), TOBN(0x4e87acdc, 0x69b6527f),
- TOBN(0x0575e037, 0xe285ccb4), TOBN(0x188089e4, 0x50ddcf52),
- TOBN(0xaa96c9a8, 0x870ff719), TOBN(0x74a56cd8, 0x1fc7e369),
- TOBN(0x41d04ee2, 0x1726931a), TOBN(0x0bbbb2c8, 0x3660ecfd),
- TOBN(0xa6ef6de5, 0x24818e18), TOBN(0xe421cc51, 0xe7d57887),
- TOBN(0xf127d208, 0xbea87be6), TOBN(0x16a475d3, 0xb1cdd682),
- TOBN(0x9db1b684, 0x439b63f7), TOBN(0x5359b3db, 0xf0f113b6),
- TOBN(0xdfccf1de, 0x8bf06e31), TOBN(0x1fdf8f44, 0xdd383901),
- TOBN(0x10775cad, 0x5017e7d2), TOBN(0xdfc3a597, 0x58d11eef),
- TOBN(0x6ec9c8a0, 0xb1ecff10), TOBN(0xee6ed6cc, 0x28400549),
- TOBN(0xb5ad7bae, 0x1b4f8d73), TOBN(0x61b4f11d, 0xe00aaab9),
- TOBN(0x7b32d69b, 0xd4eff2d7), TOBN(0x88ae6771, 0x4288b60f),
- TOBN(0x159461b4, 0x37a1e723), TOBN(0x1f3d4789, 0x570aae8c),
- TOBN(0x869118c0, 0x7f9871da), TOBN(0x35fbda78, 0xf635e278),
- TOBN(0x738f3641, 0xe1541dac), TOBN(0x6794b13a, 0xc0dae45f),
- TOBN(0x065064ac, 0x09cc0917), TOBN(0x27c53729, 0xc68540fd),
- TOBN(0x0d2d4c8e, 0xef227671), TOBN(0xd23a9f80, 0xa1785a04),
- TOBN(0x98c59528, 0x52650359), TOBN(0xfa09ad01, 0x74a1acad),
- TOBN(0x082d5a29, 0x0b55bf5c), TOBN(0xa40f1c67, 0x419b8084),
- TOBN(0x3a5c752e, 0xdcc18770), TOBN(0x4baf1f2f, 0x8825c3a5),
- TOBN(0xebd63f74, 0x21b153ed), TOBN(0xa2383e47, 0xb2f64723),
- TOBN(0xe7bf620a, 0x2646d19a), TOBN(0x56cb44ec, 0x03c83ffd),
- TOBN(0xaf7267c9, 0x4f6be9f1), TOBN(0x8b2dfd7b, 0xc06bb5e9),
- TOBN(0xb87072f2, 0xa672c5c7), TOBN(0xeacb11c8, 0x0d53c5e2),
- TOBN(0x22dac29d, 0xff435932), TOBN(0x37bdb99d, 0x4408693c),
- TOBN(0xf6e62fb6, 0x2899c20f), TOBN(0x3535d512, 0x447ece24),
- TOBN(0xfbdc6b88, 0xff577ce3), TOBN(0x726693bd, 0x190575f2),
- TOBN(0x6772b0e5, 0xab4b35a2), TOBN(0x1d8b6001, 0xf5eeaacf),
- TOBN(0x728f7ce4, 0x795b9580), TOBN(0x4a20ed2a, 0x41fb81da),
- TOBN(0x9f685cd4, 0x4fec01e6), TOBN(0x3ed7ddcc, 0xa7ff50ad),
- TOBN(0x460fd264, 0x0c2d97fd), TOBN(0x3a241426, 0xeb82f4f9),
- TOBN(0x17d1df2c, 0x6a8ea820), TOBN(0xb2b50d3b, 0xf22cc254),
- TOBN(0x03856cba, 0xb7291426), TOBN(0x87fd26ae, 0x04f5ee39),
- TOBN(0x9cb696cc, 0x02bee4ba), TOBN(0x53121804, 0x06820fd6),
- TOBN(0xa5dfc269, 0x0212e985), TOBN(0x666f7ffa, 0x160f9a09),
- TOBN(0xc503cd33, 0xbccd9617), TOBN(0x365dede4, 0xba7730a3),
- TOBN(0x798c6355, 0x5ddb0786), TOBN(0xa6c3200e, 0xfc9cd3bc),
- TOBN(0x060ffb2c, 0xe5e35efd), TOBN(0x99a4e25b, 0x5555a1c1),
- TOBN(0x11d95375, 0xf70b3751), TOBN(0x0a57354a, 0x160e1bf6),
- TOBN(0xecb3ae4b, 0xf8e4b065), TOBN(0x07a834c4, 0x2e53022b),
- TOBN(0x1cd300b3, 0x8692ed96), TOBN(0x16a6f792, 0x61ee14ec),
- TOBN(0x8f1063c6, 0x6a8649ed), TOBN(0xfbcdfcfe, 0x869f3e14),
- TOBN(0x2cfb97c1, 0x00a7b3ec), TOBN(0xcea49b3c, 0x7130c2f1),
- TOBN(0x462d044f, 0xe9d96488), TOBN(0x4b53d52e, 0x8182a0c1),
- TOBN(0x84b6ddd3, 0x0391e9e9), TOBN(0x80ab7b48, 0xb1741a09),
- TOBN(0xec0e15d4, 0x27d3317f), TOBN(0x8dfc1ddb, 0x1a64671e),
- TOBN(0x93cc5d5f, 0xd49c5b92), TOBN(0xc995d53d, 0x3674a331),
- TOBN(0x302e41ec, 0x090090ae), TOBN(0x2278a0cc, 0xedb06830),
- TOBN(0x1d025932, 0xfbc99690), TOBN(0x0c32fbd2, 0xb80d68da),
- TOBN(0xd79146da, 0xf341a6c1), TOBN(0xae0ba139, 0x1bef68a0),
- TOBN(0xc6b8a563, 0x8d774b3a), TOBN(0x1cf307bd, 0x880ba4d7),
- TOBN(0xc033bdc7, 0x19803511), TOBN(0xa9f97b3b, 0x8888c3be),
- TOBN(0x3d68aebc, 0x85c6d05e), TOBN(0xc3b88a9d, 0x193919eb),
- TOBN(0x2d300748, 0xc48b0ee3), TOBN(0x7506bc7c, 0x07a746c1),
- TOBN(0xfc48437c, 0x6e6d57f3), TOBN(0x5bd71587, 0xcfeaa91a),
- TOBN(0xa4ed0408, 0xc1bc5225), TOBN(0xd0b946db, 0x2719226d),
- TOBN(0x109ecd62, 0x758d2d43), TOBN(0x75c8485a, 0x2751759b),
- TOBN(0xb0b75f49, 0x9ce4177a), TOBN(0x4fa61a1e, 0x79c10c3d),
- TOBN(0xc062d300, 0xa167fcd7), TOBN(0x4df3874c, 0x750f0fa8),
- TOBN(0x29ae2cf9, 0x83dfedc9), TOBN(0xf8437134, 0x8d87631a),
- TOBN(0xaf571711, 0x7429c8d2), TOBN(0x18d15867, 0x146d9272),
- TOBN(0x83053ecf, 0x69769bb7), TOBN(0xc55eb856, 0xc479ab82),
- TOBN(0x5ef7791c, 0x21b0f4b2), TOBN(0xaa5956ba, 0x3d491525),
- TOBN(0x407a96c2, 0x9fe20eba), TOBN(0xf27168bb, 0xe52a5ad3),
- TOBN(0x43b60ab3, 0xbf1d9d89), TOBN(0xe45c51ef, 0x710e727a),
- TOBN(0xdfca5276, 0x099b4221), TOBN(0x8dc6407c, 0x2557a159),
- TOBN(0x0ead8335, 0x91035895), TOBN(0x0a9db957, 0x9c55dc32),
- TOBN(0xe40736d3, 0xdf61bc76), TOBN(0x13a619c0, 0x3f778cdb),
- TOBN(0x6dd921a4, 0xc56ea28f), TOBN(0x76a52433, 0x2fa647b4),
- TOBN(0x23591891, 0xac5bdc5d), TOBN(0xff4a1a72, 0xbac7dc01),
- TOBN(0x9905e261, 0x62df8453), TOBN(0x3ac045df, 0xe63b265f),
- TOBN(0x8a3f341b, 0xad53dba7), TOBN(0x8ec269cc, 0x837b625a),
- TOBN(0xd71a2782, 0x3ae31189), TOBN(0x8fb4f9a3, 0x55e96120),
- TOBN(0x804af823, 0xff9875cf), TOBN(0x23224f57, 0x5d442a9b),
- TOBN(0x1c4d3b9e, 0xecc62679), TOBN(0x91da22fb, 0xa0e7ddb1),
- TOBN(0xa370324d, 0x6c04a661), TOBN(0x9710d3b6, 0x5e376d17),
- TOBN(0xed8c98f0, 0x3044e357), TOBN(0xc364ebbe, 0x6422701c),
- TOBN(0x347f5d51, 0x7733d61c), TOBN(0xd55644b9, 0xcea826c3),
- TOBN(0x80c6e0ad, 0x55a25548), TOBN(0x0aa7641d, 0x844220a7),
- TOBN(0x1438ec81, 0x31810660), TOBN(0x9dfa6507, 0xde4b4043),
- TOBN(0x10b515d8, 0xcc3e0273), TOBN(0x1b6066dd, 0x28d8cfb2),
- TOBN(0xd3b04591, 0x9c9efebd), TOBN(0x425d4bdf, 0xa21c1ff4),
- TOBN(0x5fe5af19, 0xd57607d3), TOBN(0xbbf773f7, 0x54481084),
- TOBN(0x8435bd69, 0x94b03ed1), TOBN(0xd9ad1de3, 0x634cc546),
- TOBN(0x2cf423fc, 0x00e420ca), TOBN(0xeed26d80, 0xa03096dd),
- TOBN(0xd7f60be7, 0xa4db09d2), TOBN(0xf47f569d, 0x960622f7),
- TOBN(0xe5925fd7, 0x7296c729), TOBN(0xeff2db26, 0x26ca2715),
- TOBN(0xa6fcd014, 0xb913e759), TOBN(0x53da4786, 0x8ff4de93),
- TOBN(0x14616d79, 0xc32068e1), TOBN(0xb187d664, 0xccdf352e),
- TOBN(0xf7afb650, 0x1dc90b59), TOBN(0x8170e943, 0x7daa1b26),
- TOBN(0xc8e3bdd8, 0x700c0a84), TOBN(0x6e8d345f, 0x6482bdfa),
- TOBN(0x84cfbfa1, 0xc5c5ea50), TOBN(0xd3baf14c, 0x67960681),
- TOBN(0x26398403, 0x0dd50942), TOBN(0xe4b7839c, 0x4716a663),
- TOBN(0xd5f1f794, 0xe7de6dc0), TOBN(0x5cd0f4d4, 0x622aa7ce),
- TOBN(0x5295f3f1, 0x59acfeec), TOBN(0x8d933552, 0x953e0607),
- TOBN(0xc7db8ec5, 0x776c5722), TOBN(0xdc467e62, 0x2b5f290c),
- TOBN(0xd4297e70, 0x4ff425a9), TOBN(0x4be924c1, 0x0cf7bb72),
- TOBN(0x0d5dc5ae, 0xa1892131), TOBN(0x8bf8a8e3, 0xa705c992),
- TOBN(0x73a0b064, 0x7a305ac5), TOBN(0x00c9ca4e, 0x9a8c77a8),
- TOBN(0x5dfee80f, 0x83774bdd), TOBN(0x63131602, 0x85734485),
- TOBN(0xa1b524ae, 0x914a69a9), TOBN(0xebc2ffaf, 0xd4e300d7),
- TOBN(0x52c93db7, 0x7cfa46a5), TOBN(0x71e6161f, 0x21653b50),
- TOBN(0x3574fc57, 0xa4bc580a), TOBN(0xc09015dd, 0xe1bc1253),
- TOBN(0x4b7b47b2, 0xd174d7aa), TOBN(0x4072d8e8, 0xf3a15d04),
- TOBN(0xeeb7d47f, 0xd6fa07ed), TOBN(0x6f2b9ff9, 0xedbdafb1),
- TOBN(0x18c51615, 0x3760fe8a), TOBN(0x7a96e6bf, 0xf06c6c13),
- TOBN(0x4d7a0410, 0x0ea2d071), TOBN(0xa1914e9b, 0x0be2a5ce),
- TOBN(0x5726e357, 0xd8a3c5cf), TOBN(0x1197ecc3, 0x2abb2b13),
- TOBN(0x6c0d7f7f, 0x31ae88dd), TOBN(0x15b20d1a, 0xfdbb3efe),
- TOBN(0xcd06aa26, 0x70584039), TOBN(0x2277c969, 0xa7dc9747),
- TOBN(0xbca69587, 0x7855d815), TOBN(0x899ea238, 0x5188b32a),
- TOBN(0x37d9228b, 0x760c1c9d), TOBN(0xc7efbb11, 0x9b5c18da),
- TOBN(0x7f0d1bc8, 0x19f6dbc5), TOBN(0x4875384b, 0x07e6905b),
- TOBN(0xc7c50baa, 0x3ba8cd86), TOBN(0xb0ce40fb, 0xc2905de0),
- TOBN(0x70840673, 0x7a231952), TOBN(0xa912a262, 0xcf43de26),
- TOBN(0x9c38ddcc, 0xeb5b76c1), TOBN(0x746f5285, 0x26fc0ab4),
- TOBN(0x52a63a50, 0xd62c269f), TOBN(0x60049c55, 0x99458621),
- TOBN(0xe7f48f82, 0x3c2f7c9e), TOBN(0x6bd99043, 0x917d5cf3),
- TOBN(0xeb1317a8, 0x8701f469), TOBN(0xbd3fe2ed, 0x9a449fe0),
- TOBN(0x421e79ca, 0x12ef3d36), TOBN(0x9ee3c36c, 0x3e7ea5de),
- TOBN(0xe48198b5, 0xcdff36f7), TOBN(0xaff4f967, 0xc6b82228),
- TOBN(0x15e19dd0, 0xc47adb7e), TOBN(0x45699b23, 0x032e7dfa),
- TOBN(0x40680c8b, 0x1fae026a), TOBN(0x5a347a48, 0x550dbf4d),
- TOBN(0xe652533b, 0x3cef0d7d), TOBN(0xd94f7b18, 0x2bbb4381),
- TOBN(0x838752be, 0x0e80f500), TOBN(0x8e6e2488, 0x9e9c9bfb),
- TOBN(0xc9751697, 0x16caca6a), TOBN(0x866c49d8, 0x38531ad9),
- TOBN(0xc917e239, 0x7151ade1), TOBN(0x2d016ec1, 0x6037c407),
- TOBN(0xa407ccc9, 0x00eac3f9), TOBN(0x835f6280, 0xe2ed4748),
- TOBN(0xcc54c347, 0x1cc98e0d), TOBN(0x0e969937, 0xdcb572eb),
- TOBN(0x1b16c8e8, 0x8f30c9cb), TOBN(0xa606ae75, 0x373c4661),
- TOBN(0x47aa689b, 0x35502cab), TOBN(0xf89014ae, 0x4d9bb64f),
- TOBN(0x202f6a9c, 0x31c71f7b), TOBN(0x01f95aa3, 0x296ffe5c),
- TOBN(0x5fc06014, 0x53cec3a3), TOBN(0xeb991237, 0x5f498a45),
- TOBN(0xae9a935e, 0x5d91ba87), TOBN(0xc6ac6281, 0x0b564a19),
- TOBN(0x8a8fe81c, 0x3bd44e69), TOBN(0x7c8b467f, 0x9dd11d45),
- TOBN(0xf772251f, 0xea5b8e69), TOBN(0xaeecb3bd, 0xc5b75fbc),
- TOBN(0x1aca3331, 0x887ff0e5), TOBN(0xbe5d49ff, 0x19f0a131),
- TOBN(0x582c13aa, 0xe5c8646f), TOBN(0xdbaa12e8, 0x20e19980),
- TOBN(0x8f40f31a, 0xf7abbd94), TOBN(0x1f13f5a8, 0x1dfc7663),
- TOBN(0x5d81f1ee, 0xaceb4fc0), TOBN(0x36256002, 0x5e6f0f42),
- TOBN(0x4b67d6d7, 0x751370c8), TOBN(0x2608b698, 0x03e80589),
- TOBN(0xcfc0d2fc, 0x05268301), TOBN(0xa6943d39, 0x40309212),
- TOBN(0x192a90c2, 0x1fd0e1c2), TOBN(0xb209f113, 0x37f1dc76),
- TOBN(0xefcc5e06, 0x97bf1298), TOBN(0xcbdb6730, 0x219d639e),
- TOBN(0xd009c116, 0xb81e8c6f), TOBN(0xa3ffdde3, 0x1a7ce2e5),
- TOBN(0xc53fbaaa, 0xa914d3ba), TOBN(0x836d500f, 0x88df85ee),
- TOBN(0xd98dc71b, 0x66ee0751), TOBN(0x5a3d7005, 0x714516fd),
- TOBN(0x21d3634d, 0x39eedbba), TOBN(0x35cd2e68, 0x0455a46d),
- TOBN(0xc8cafe65, 0xf9d7eb0c), TOBN(0xbda3ce9e, 0x00cefb3e),
- TOBN(0xddc17a60, 0x2c9cf7a4), TOBN(0x01572ee4, 0x7bcb8773),
- TOBN(0xa92b2b01, 0x8c7548df), TOBN(0x732fd309, 0xa84600e3),
- TOBN(0xe22109c7, 0x16543a40), TOBN(0x9acafd36, 0xfede3c6c),
- TOBN(0xfb206852, 0x6824e614), TOBN(0x2a4544a9, 0xda25dca0),
- TOBN(0x25985262, 0x91d60b06), TOBN(0x281b7be9, 0x28753545),
- TOBN(0xec667b1a, 0x90f13b27), TOBN(0x33a83aff, 0x940e2eb4),
- TOBN(0x80009862, 0xd5d721d5), TOBN(0x0c3357a3, 0x5bd3a182),
- TOBN(0x27f3a83b, 0x7aa2cda4), TOBN(0xb58ae74e, 0xf6f83085),
- TOBN(0x2a911a81, 0x2e6dad6b), TOBN(0xde286051, 0xf43d6c5b),
- TOBN(0x4bdccc41, 0xf996c4d8), TOBN(0xe7312ec0, 0x0ae1e24e)},
- {TOBN(0xf8d112e7, 0x6e6485b3), TOBN(0x4d3e24db, 0x771c52f8),
- TOBN(0x48e3ee41, 0x684a2f6d), TOBN(0x7161957d, 0x21d95551),
- TOBN(0x19631283, 0xcdb12a6c), TOBN(0xbf3fa882, 0x2e50e164),
- TOBN(0xf6254b63, 0x3166cc73), TOBN(0x3aefa7ae, 0xaee8cc38),
- TOBN(0x79b0fe62, 0x3b36f9fd), TOBN(0x26543b23, 0xfde19fc0),
- TOBN(0x136e64a0, 0x958482ef), TOBN(0x23f63771, 0x9b095825),
- TOBN(0x14cfd596, 0xb6a1142e), TOBN(0x5ea6aac6, 0x335aac0b),
- TOBN(0x86a0e8bd, 0xf3081dd5), TOBN(0x5fb89d79, 0x003dc12a),
- TOBN(0xf615c33a, 0xf72e34d4), TOBN(0x0bd9ea40, 0x110eec35),
- TOBN(0x1c12bc5b, 0xc1dea34e), TOBN(0x686584c9, 0x49ae4699),
- TOBN(0x13ad95d3, 0x8c97b942), TOBN(0x4609561a, 0x4e5c7562),
- TOBN(0x9e94a4ae, 0xf2737f89), TOBN(0xf57594c6, 0x371c78b6),
- TOBN(0x0f0165fc, 0xe3779ee3), TOBN(0xe00e7f9d, 0xbd495d9e),
- TOBN(0x1fa4efa2, 0x20284e7a), TOBN(0x4564bade, 0x47ac6219),
- TOBN(0x90e6312a, 0xc4708e8e), TOBN(0x4f5725fb, 0xa71e9adf),
- TOBN(0xe95f55ae, 0x3d684b9f), TOBN(0x47f7ccb1, 0x1e94b415),
- TOBN(0x7322851b, 0x8d946581), TOBN(0xf0d13133, 0xbdf4a012),
- TOBN(0xa3510f69, 0x6584dae0), TOBN(0x03a7c171, 0x3c9f6c6d),
- TOBN(0x5be97f38, 0xe475381a), TOBN(0xca1ba422, 0x85823334),
- TOBN(0xf83cc5c7, 0x0be17dda), TOBN(0x158b1494, 0x0b918c0f),
- TOBN(0xda3a77e5, 0x522e6b69), TOBN(0x69c908c3, 0xbbcd6c18),
- TOBN(0x1f1b9e48, 0xd924fd56), TOBN(0x37c64e36, 0xaa4bb3f7),
- TOBN(0x5a4fdbdf, 0xee478d7d), TOBN(0xba75c8bc, 0x0193f7a0),
- TOBN(0x84bc1e84, 0x56cd16df), TOBN(0x1fb08f08, 0x46fad151),
- TOBN(0x8a7cabf9, 0x842e9f30), TOBN(0xa331d4bf, 0x5eab83af),
- TOBN(0xd272cfba, 0x017f2a6a), TOBN(0x27560abc, 0x83aba0e3),
- TOBN(0x94b83387, 0x0e3a6b75), TOBN(0x25c6aea2, 0x6b9f50f5),
- TOBN(0x803d691d, 0xb5fdf6d0), TOBN(0x03b77509, 0xe6333514),
- TOBN(0x36178903, 0x61a341c1), TOBN(0x3604dc60, 0x0cfd6142),
- TOBN(0x022295eb, 0x8533316c), TOBN(0x3dbde4ac, 0x44af2922),
- TOBN(0x898afc5d, 0x1c7eef69), TOBN(0x58896805, 0xd14f4fa1),
- TOBN(0x05002160, 0x203c21ca), TOBN(0x6f0d1f30, 0x40ef730b),
- TOBN(0x8e8c44d4, 0x196224f8), TOBN(0x75a4ab95, 0x374d079d),
- TOBN(0x79085ecc, 0x7d48f123), TOBN(0x56f04d31, 0x1bf65ad8),
- TOBN(0xe220bf1c, 0xbda602b2), TOBN(0x73ee1742, 0xf9612c69),
- TOBN(0x76008fc8, 0x084fd06b), TOBN(0x4000ef9f, 0xf11380d1),
- TOBN(0x48201b4b, 0x12cfe297), TOBN(0x3eee129c, 0x292f74e5),
- TOBN(0xe1fe114e, 0xc9e874e8), TOBN(0x899b055c, 0x92c5fc41),
- TOBN(0x4e477a64, 0x3a39c8cf), TOBN(0x82f09efe, 0x78963cc9),
- TOBN(0x6fd3fd8f, 0xd333f863), TOBN(0x85132b2a, 0xdc949c63),
- TOBN(0x7e06a3ab, 0x516eb17b), TOBN(0x73bec06f, 0xd2c7372b),
- TOBN(0xe4f74f55, 0xba896da6), TOBN(0xbb4afef8, 0x8e9eb40f),
- TOBN(0x2d75bec8, 0xe61d66b0), TOBN(0x02bda4b4, 0xef29300b),
- TOBN(0x8bbaa8de, 0x026baa5a), TOBN(0xff54befd, 0xa07f4440),
- TOBN(0xbd9b8b1d, 0xbe7a2af3), TOBN(0xec51caa9, 0x4fb74a72),
- TOBN(0xb9937a4b, 0x63879697), TOBN(0x7c9a9d20, 0xec2687d5),
- TOBN(0x1773e44f, 0x6ef5f014), TOBN(0x8abcf412, 0xe90c6900),
- TOBN(0x387bd022, 0x8142161e), TOBN(0x50393755, 0xfcb6ff2a),
- TOBN(0x9813fd56, 0xed6def63), TOBN(0x53cf6482, 0x7d53106c),
- TOBN(0x991a35bd, 0x431f7ac1), TOBN(0xf1e274dd, 0x63e65faf),
- TOBN(0xf63ffa3c, 0x44cc7880), TOBN(0x411a426b, 0x7c256981),
- TOBN(0xb698b9fd, 0x93a420e0), TOBN(0x89fdddc0, 0xae53f8fe),
- TOBN(0x766e0722, 0x32398baa), TOBN(0x205fee42, 0x5cfca031),
- TOBN(0xa49f5341, 0x7a029cf2), TOBN(0xa88c68b8, 0x4023890d),
- TOBN(0xbc275041, 0x7337aaa8), TOBN(0x9ed364ad, 0x0eb384f4),
- TOBN(0xe0816f85, 0x29aba92f), TOBN(0x2e9e1941, 0x04e38a88),
- TOBN(0x57eef44a, 0x3dafd2d5), TOBN(0x35d1fae5, 0x97ed98d8),
- TOBN(0x50628c09, 0x2307f9b1), TOBN(0x09d84aae, 0xd6cba5c6),
- TOBN(0x67071bc7, 0x88aaa691), TOBN(0x2dea57a9, 0xafe6cb03),
- TOBN(0xdfe11bb4, 0x3d78ac01), TOBN(0x7286418c, 0x7fd7aa51),
- TOBN(0xfabf7709, 0x77f7195a), TOBN(0x8ec86167, 0xadeb838f),
- TOBN(0xea1285a8, 0xbb4f012d), TOBN(0xd6883503, 0x9a3eab3f),
- TOBN(0xee5d24f8, 0x309004c2), TOBN(0xa96e4b76, 0x13ffe95e),
- TOBN(0x0cdffe12, 0xbd223ea4), TOBN(0x8f5c2ee5, 0xb6739a53),
- TOBN(0x5cb4aaa5, 0xdd968198), TOBN(0xfa131c52, 0x72413a6c),
- TOBN(0x53d46a90, 0x9536d903), TOBN(0xb270f0d3, 0x48606d8e),
- TOBN(0x518c7564, 0xa053a3bc), TOBN(0x088254b7, 0x1a86caef),
- TOBN(0xb3ba8cb4, 0x0ab5efd0), TOBN(0x5c59900e, 0x4605945d),
- TOBN(0xecace1dd, 0xa1887395), TOBN(0x40960f36, 0x932a65de),
- TOBN(0x9611ff5c, 0x3aa95529), TOBN(0xc58215b0, 0x7c1e5a36),
- TOBN(0xd48c9b58, 0xf0e1a524), TOBN(0xb406856b, 0xf590dfb8),
- TOBN(0xc7605e04, 0x9cd95662), TOBN(0x0dd036ee, 0xa33ecf82),
- TOBN(0xa50171ac, 0xc33156b3), TOBN(0xf09d24ea, 0x4a80172e),
- TOBN(0x4e1f72c6, 0x76dc8eef), TOBN(0xe60caadc, 0x5e3d44ee),
- TOBN(0x006ef8a6, 0x979b1d8f), TOBN(0x60908a1c, 0x97788d26),
- TOBN(0x6e08f95b, 0x266feec0), TOBN(0x618427c2, 0x22e8c94e),
- TOBN(0x3d613339, 0x59145a65), TOBN(0xcd9bc368, 0xfa406337),
- TOBN(0x82d11be3, 0x2d8a52a0), TOBN(0xf6877b27, 0x97a1c590),
- TOBN(0x837a819b, 0xf5cbdb25), TOBN(0x2a4fd1d8, 0xde090249),
- TOBN(0x622a7de7, 0x74990e5f), TOBN(0x840fa5a0, 0x7945511b),
- TOBN(0x30b974be, 0x6558842d), TOBN(0x70df8c64, 0x17f3d0a6),
- TOBN(0x7c803520, 0x7542e46d), TOBN(0x7251fe7f, 0xe4ecc823),
- TOBN(0xe59134cb, 0x5e9aac9a), TOBN(0x11bb0934, 0xf0045d71),
- TOBN(0x53e5d9b5, 0xdbcb1d4e), TOBN(0x8d97a905, 0x92defc91),
- TOBN(0xfe289327, 0x7946d3f9), TOBN(0xe132bd24, 0x07472273),
- TOBN(0xeeeb510c, 0x1eb6ae86), TOBN(0x777708c5, 0xf0595067),
- TOBN(0x18e2c8cd, 0x1297029e), TOBN(0x2c61095c, 0xbbf9305e),
- TOBN(0xe466c258, 0x6b85d6d9), TOBN(0x8ac06c36, 0xda1ea530),
- TOBN(0xa365dc39, 0xa1304668), TOBN(0xe4a9c885, 0x07f89606),
- TOBN(0x65a4898f, 0xacc7228d), TOBN(0x3e2347ff, 0x84ca8303),
- TOBN(0xa5f6fb77, 0xea7d23a3), TOBN(0x2fac257d, 0x672a71cd),
- TOBN(0x6908bef8, 0x7e6a44d3), TOBN(0x8ff87566, 0x891d3d7a),
- TOBN(0xe58e90b3, 0x6b0cf82e), TOBN(0x6438d246, 0x2615b5e7),
- TOBN(0x07b1f8fc, 0x669c145a), TOBN(0xb0d8b2da, 0x36f1e1cb),
- TOBN(0x54d5dadb, 0xd9184c4d), TOBN(0x3dbb18d5, 0xf93d9976),
- TOBN(0x0a3e0f56, 0xd1147d47), TOBN(0x2afa8c8d, 0xa0a48609),
- TOBN(0x275353e8, 0xbc36742c), TOBN(0x898f427e, 0xeea0ed90),
- TOBN(0x26f4947e, 0x3e477b00), TOBN(0x8ad8848a, 0x308741e3),
- TOBN(0x6c703c38, 0xd74a2a46), TOBN(0x5e3e05a9, 0x9ba17ba2),
- TOBN(0xc1fa6f66, 0x4ab9a9e4), TOBN(0x474a2d9a, 0x3841d6ec),
- TOBN(0x871239ad, 0x653ae326), TOBN(0x14bcf72a, 0xa74cbb43),
- TOBN(0x8737650e, 0x20d4c083), TOBN(0x3df86536, 0x110ed4af),
- TOBN(0xd2d86fe7, 0xb53ca555), TOBN(0x688cb00d, 0xabd5d538),
- TOBN(0xcf81bda3, 0x1ad38468), TOBN(0x7ccfe3cc, 0xf01167b6),
- TOBN(0xcf4f47e0, 0x6c4c1fe6), TOBN(0x557e1f1a, 0x298bbb79),
- TOBN(0xf93b974f, 0x30d45a14), TOBN(0x174a1d2d, 0x0baf97c4),
- TOBN(0x7a003b30, 0xc51fbf53), TOBN(0xd8940991, 0xee68b225),
- TOBN(0x5b0aa7b7, 0x1c0f4173), TOBN(0x975797c9, 0xa20a7153),
- TOBN(0x26e08c07, 0xe3533d77), TOBN(0xd7222e6a, 0x2e341c99),
- TOBN(0x9d60ec3d, 0x8d2dc4ed), TOBN(0xbdfe0d8f, 0x7c476cf8),
- TOBN(0x1fe59ab6, 0x1d056605), TOBN(0xa9ea9df6, 0x86a8551f),
- TOBN(0x8489941e, 0x47fb8d8c), TOBN(0xfeb874eb, 0x4a7f1b10),
- TOBN(0xfe5fea86, 0x7ee0d98f), TOBN(0x201ad34b, 0xdbf61864),
- TOBN(0x45d8fe47, 0x37c031d4), TOBN(0xd5f49fae, 0x795f0822),
- TOBN(0xdb0fb291, 0xc7f4a40c), TOBN(0x2e69d9c1, 0x730ddd92),
- TOBN(0x754e1054, 0x49d76987), TOBN(0x8a24911d, 0x7662db87),
- TOBN(0x61fc1810, 0x60a71676), TOBN(0xe852d1a8, 0xf66a8ad1),
- TOBN(0x172bbd65, 0x6417231e), TOBN(0x0d6de7bd, 0x3babb11f),
- TOBN(0x6fde6f88, 0xc8e347f8), TOBN(0x1c587547, 0x9bd99cc3),
- TOBN(0x78e54ed0, 0x34076950), TOBN(0x97f0f334, 0x796e83ba),
- TOBN(0xe4dbe1ce, 0x4924867a), TOBN(0xbd5f51b0, 0x60b84917),
- TOBN(0x37530040, 0x3cb09a79), TOBN(0xdb3fe0f8, 0xff1743d8),
- TOBN(0xed7894d8, 0x556fa9db), TOBN(0xfa262169, 0x23412fbf),
- TOBN(0x563be0db, 0xba7b9291), TOBN(0x6ca8b8c0, 0x0c9fb234),
- TOBN(0xed406aa9, 0xbd763802), TOBN(0xc21486a0, 0x65303da1),
- TOBN(0x61ae291e, 0xc7e62ec4), TOBN(0x622a0492, 0xdf99333e),
- TOBN(0x7fd80c9d, 0xbb7a8ee0), TOBN(0xdc2ed3bc, 0x6c01aedb),
- TOBN(0x35c35a12, 0x08be74ec), TOBN(0xd540cb1a, 0x469f671f),
- TOBN(0xd16ced4e, 0xcf84f6c7), TOBN(0x8561fb9c, 0x2d090f43),
- TOBN(0x7e693d79, 0x6f239db4), TOBN(0xa736f928, 0x77bd0d94),
- TOBN(0x07b4d929, 0x2c1950ee), TOBN(0xda177543, 0x56dc11b3),
- TOBN(0xa5dfbbaa, 0x7a6a878e), TOBN(0x1c70cb29, 0x4decb08a),
- TOBN(0xfba28c8b, 0x6f0f7c50), TOBN(0xa8eba2b8, 0x854dcc6d),
- TOBN(0x5ff8e89a, 0x36b78642), TOBN(0x070c1c8e, 0xf6873adf),
- TOBN(0xbbd3c371, 0x6484d2e4), TOBN(0xfb78318f, 0x0d414129),
- TOBN(0x2621a39c, 0x6ad93b0b), TOBN(0x979d74c2, 0xa9e917f7),
- TOBN(0xfc195647, 0x61fb0428), TOBN(0x4d78954a, 0xbee624d4),
- TOBN(0xb94896e0, 0xb8ae86fd), TOBN(0x6667ac0c, 0xc91c8b13),
- TOBN(0x9f180512, 0x43bcf832), TOBN(0xfbadf8b7, 0xa0010137),
- TOBN(0xc69b4089, 0xb3ba8aa7), TOBN(0xfac4bacd, 0xe687ce85),
- TOBN(0x9164088d, 0x977eab40), TOBN(0x51f4c5b6, 0x2760b390),
- TOBN(0xd238238f, 0x340dd553), TOBN(0x358566c3, 0xdb1d31c9),
- TOBN(0x3a5ad69e, 0x5068f5ff), TOBN(0xf31435fc, 0xdaff6b06),
- TOBN(0xae549a5b, 0xd6debff0), TOBN(0x59e5f0b7, 0x75e01331),
- TOBN(0x5d492fb8, 0x98559acf), TOBN(0x96018c2e, 0x4db79b50),
- TOBN(0x55f4a48f, 0x609f66aa), TOBN(0x1943b3af, 0x4900a14f),
- TOBN(0xc22496df, 0x15a40d39), TOBN(0xb2a44684, 0x4c20f7c5),
- TOBN(0x76a35afa, 0x3b98404c), TOBN(0xbec75725, 0xff5d1b77),
- TOBN(0xb67aa163, 0xbea06444), TOBN(0x27e95bb2, 0xf724b6f2),
- TOBN(0x3c20e3e9, 0xd238c8ab), TOBN(0x1213754e, 0xddd6ae17),
- TOBN(0x8c431020, 0x716e0f74), TOBN(0x6679c82e, 0xffc095c2),
- TOBN(0x2eb3adf4, 0xd0ac2932), TOBN(0x2cc970d3, 0x01bb7a76),
- TOBN(0x70c71f2f, 0x740f0e66), TOBN(0x545c616b, 0x2b6b23cc),
- TOBN(0x4528cfcb, 0xb40a8bd7), TOBN(0xff839633, 0x2ab27722),
- TOBN(0x049127d9, 0x025ac99a), TOBN(0xd314d4a0, 0x2b63e33b),
- TOBN(0xc8c310e7, 0x28d84519), TOBN(0x0fcb8983, 0xb3bc84ba),
- TOBN(0x2cc52261, 0x38634818), TOBN(0x501814f4, 0xb44c2e0b),
- TOBN(0xf7e181aa, 0x54dfdba3), TOBN(0xcfd58ff0, 0xe759718c),
- TOBN(0xf90cdb14, 0xd3b507a8), TOBN(0x57bd478e, 0xc50bdad8),
- TOBN(0x29c197e2, 0x50e5f9aa), TOBN(0x4db6eef8, 0xe40bc855),
- TOBN(0x2cc8f21a, 0xd1fc0654), TOBN(0xc71cc963, 0x81269d73),
- TOBN(0xecfbb204, 0x077f49f9), TOBN(0xdde92571, 0xca56b793),
- TOBN(0x9abed6a3, 0xf97ad8f7), TOBN(0xe6c19d3f, 0x924de3bd),
- TOBN(0x8dce92f4, 0xa140a800), TOBN(0x85f44d1e, 0x1337af07),
- TOBN(0x5953c08b, 0x09d64c52), TOBN(0xa1b5e49f, 0xf5df9749),
- TOBN(0x336a8fb8, 0x52735f7d), TOBN(0xb332b6db, 0x9add676b),
- TOBN(0x558b88a0, 0xb4511aa4), TOBN(0x09788752, 0xdbd5cc55),
- TOBN(0x16b43b9c, 0xd8cd52bd), TOBN(0x7f0bc5a0, 0xc2a2696b),
- TOBN(0x146e12d4, 0xc11f61ef), TOBN(0x9ce10754, 0x3a83e79e),
- TOBN(0x08ec73d9, 0x6cbfca15), TOBN(0x09ff29ad, 0x5b49653f),
- TOBN(0xe31b72bd, 0xe7da946e), TOBN(0xebf9eb3b, 0xee80a4f2),
- TOBN(0xd1aabd08, 0x17598ce4), TOBN(0x18b5fef4, 0x53f37e80),
- TOBN(0xd5d5cdd3, 0x5958cd79), TOBN(0x3580a1b5, 0x1d373114),
- TOBN(0xa36e4c91, 0xfa935726), TOBN(0xa38c534d, 0xef20d760),
- TOBN(0x7088e40a, 0x2ff5845b), TOBN(0xe5bb40bd, 0xbd78177f),
- TOBN(0x4f06a7a8, 0x857f9920), TOBN(0xe3cc3e50, 0xe968f05d),
- TOBN(0x1d68b7fe, 0xe5682d26), TOBN(0x5206f76f, 0xaec7f87c),
- TOBN(0x41110530, 0x041951ab), TOBN(0x58ec52c1, 0xd4b5a71a),
- TOBN(0xf3488f99, 0x0f75cf9a), TOBN(0xf411951f, 0xba82d0d5),
- TOBN(0x27ee75be, 0x618895ab), TOBN(0xeae060d4, 0x6d8aab14),
- TOBN(0x9ae1df73, 0x7fb54dc2), TOBN(0x1f3e391b, 0x25963649),
- TOBN(0x242ec32a, 0xfe055081), TOBN(0x5bd450ef, 0x8491c9bd),
- TOBN(0x367efc67, 0x981eb389), TOBN(0xed7e1928, 0x3a0550d5),
- TOBN(0x362e776b, 0xab3ce75c), TOBN(0xe890e308, 0x1f24c523),
- TOBN(0xb961b682, 0xfeccef76), TOBN(0x8b8e11f5, 0x8bba6d92),
- TOBN(0x8f2ccc4c, 0x2b2375c4), TOBN(0x0d7f7a52, 0xe2f86cfa),
- TOBN(0xfd94d30a, 0x9efe5633), TOBN(0x2d8d246b, 0x5451f934),
- TOBN(0x2234c6e3, 0x244e6a00), TOBN(0xde2b5b0d, 0xddec8c50),
- TOBN(0x2ce53c5a, 0xbf776f5b), TOBN(0x6f724071, 0x60357b05),
- TOBN(0xb2593717, 0x71bf3f7a), TOBN(0x87d2501c, 0x440c4a9f),
- TOBN(0x440552e1, 0x87b05340), TOBN(0xb7bf7cc8, 0x21624c32),
- TOBN(0x4155a6ce, 0x22facddb), TOBN(0x5a4228cb, 0x889837ef),
- TOBN(0xef87d6d6, 0xfd4fd671), TOBN(0xa233687e, 0xc2daa10e),
- TOBN(0x75622244, 0x03c0eb96), TOBN(0x7632d184, 0x8bf19be6),
- TOBN(0x05d0f8e9, 0x40735ff4), TOBN(0x3a3e6e13, 0xc00931f1),
- TOBN(0x31ccde6a, 0xdafe3f18), TOBN(0xf381366a, 0xcfe51207),
- TOBN(0x24c222a9, 0x60167d92), TOBN(0x62f9d6f8, 0x7529f18c),
- TOBN(0x412397c0, 0x0353b114), TOBN(0x334d89dc, 0xef808043),
- TOBN(0xd9ec63ba, 0x2a4383ce), TOBN(0xcec8e937, 0x5cf92ba0),
- TOBN(0xfb8b4288, 0xc8be74c0), TOBN(0x67d6912f, 0x105d4391),
- TOBN(0x7b996c46, 0x1b913149), TOBN(0x36aae2ef, 0x3a4e02da),
- TOBN(0xb68aa003, 0x972de594), TOBN(0x284ec70d, 0x4ec6d545),
- TOBN(0xf3d2b2d0, 0x61391d54), TOBN(0x69c5d5d6, 0xfe114e92),
- TOBN(0xbe0f00b5, 0xb4482dff), TOBN(0xe1596fa5, 0xf5bf33c5),
- TOBN(0x10595b56, 0x96a71cba), TOBN(0x944938b2, 0xfdcadeb7),
- TOBN(0xa282da4c, 0xfccd8471), TOBN(0x98ec05f3, 0x0d37bfe1),
- TOBN(0xe171ce1b, 0x0698304a), TOBN(0x2d691444, 0x21bdf79b),
- TOBN(0xd0cd3b74, 0x1b21dec1), TOBN(0x712ecd8b, 0x16a15f71),
- TOBN(0x8d4c00a7, 0x00fd56e1), TOBN(0x02ec9692, 0xf9527c18),
- TOBN(0x21c44937, 0x4a3e42e1), TOBN(0x9176fbab, 0x1392ae0a),
- TOBN(0x8726f1ba, 0x44b7b618), TOBN(0xb4d7aae9, 0xf1de491c),
- TOBN(0xf91df7b9, 0x07b582c0), TOBN(0x7e116c30, 0xef60aa3a),
- TOBN(0x99270f81, 0x466265d7), TOBN(0xb15b6fe2, 0x4df7adf0),
- TOBN(0xfe33b2d3, 0xf9738f7f), TOBN(0x48553ab9, 0xd6d70f95),
- TOBN(0x2cc72ac8, 0xc21e94db), TOBN(0x795ac38d, 0xbdc0bbee),
- TOBN(0x0a1be449, 0x2e40478f), TOBN(0x81bd3394, 0x052bde55),
- TOBN(0x63c8dbe9, 0x56b3c4f2), TOBN(0x017a99cf, 0x904177cc),
- TOBN(0x947bbddb, 0x4d010fc1), TOBN(0xacf9b00b, 0xbb2c9b21),
- TOBN(0x2970bc8d, 0x47173611), TOBN(0x1a4cbe08, 0xac7d756f),
- TOBN(0x06d9f4aa, 0x67d541a2), TOBN(0xa3e8b689, 0x59c2cf44),
- TOBN(0xaad066da, 0x4d88f1dd), TOBN(0xc604f165, 0x7ad35dea),
- TOBN(0x7edc0720, 0x4478ca67), TOBN(0xa10dfae0, 0xba02ce06),
- TOBN(0xeceb1c76, 0xaf36f4e4), TOBN(0x994b2292, 0xaf3f8f48),
- TOBN(0xbf9ed77b, 0x77c8a68c), TOBN(0x74f544ea, 0x51744c9d),
- TOBN(0x82d05bb9, 0x8113a757), TOBN(0x4ef2d2b4, 0x8a9885e4),
- TOBN(0x1e332be5, 0x1aa7865f), TOBN(0x22b76b18, 0x290d1a52),
- TOBN(0x308a2310, 0x44351683), TOBN(0x9d861896, 0xa3f22840),
- TOBN(0x5959ddcd, 0x841ed947), TOBN(0x0def0c94, 0x154b73bf),
- TOBN(0xf0105417, 0x4c7c15e0), TOBN(0x539bfb02, 0x3a277c32),
- TOBN(0xe699268e, 0xf9dccf5f), TOBN(0x9f5796a5, 0x0247a3bd),
- TOBN(0x8b839de8, 0x4f157269), TOBN(0xc825c1e5, 0x7a30196b),
- TOBN(0x6ef0aabc, 0xdc8a5a91), TOBN(0xf4a8ce6c, 0x498b7fe6),
- TOBN(0x1cce35a7, 0x70cbac78), TOBN(0x83488e9b, 0xf6b23958),
- TOBN(0x0341a070, 0xd76cb011), TOBN(0xda6c9d06, 0xae1b2658),
- TOBN(0xb701fb30, 0xdd648c52), TOBN(0x994ca02c, 0x52fb9fd1),
- TOBN(0x06933117, 0x6f563086), TOBN(0x3d2b8100, 0x17856bab),
- TOBN(0xe89f48c8, 0x5963a46e), TOBN(0x658ab875, 0xa99e61c7),
- TOBN(0x6e296f87, 0x4b8517b4), TOBN(0x36c4fcdc, 0xfc1bc656),
- TOBN(0xde5227a1, 0xa3906def), TOBN(0x9fe95f57, 0x62418945),
- TOBN(0x20c91e81, 0xfdd96cde), TOBN(0x5adbe47e, 0xda4480de),
- TOBN(0xa009370f, 0x396de2b6), TOBN(0x98583d4b, 0xf0ecc7bd),
- TOBN(0xf44f6b57, 0xe51d0672), TOBN(0x03d6b078, 0x556b1984),
- TOBN(0x27dbdd93, 0xb0b64912), TOBN(0x9b3a3434, 0x15687b09),
- TOBN(0x0dba6461, 0x51ec20a9), TOBN(0xec93db7f, 0xff28187c),
- TOBN(0x00ff8c24, 0x66e48bdd), TOBN(0x2514f2f9, 0x11ccd78e),
- TOBN(0xeba11f4f, 0xe1250603), TOBN(0x8a22cd41, 0x243fa156),
- TOBN(0xa4e58df4, 0xb283e4c6), TOBN(0x78c29859, 0x8b39783f),
- TOBN(0x5235aee2, 0xa5259809), TOBN(0xc16284b5, 0x0e0227dd),
- TOBN(0xa5f57916, 0x1338830d), TOBN(0x6d4b8a6b, 0xd2123fca),
- TOBN(0x236ea68a, 0xf9c546f8), TOBN(0xc1d36873, 0xfa608d36),
- TOBN(0xcd76e495, 0x8d436d13), TOBN(0xd4d9c221, 0x8fb080af),
- TOBN(0x665c1728, 0xe8ad3fb5), TOBN(0xcf1ebe4d, 0xb3d572e0),
- TOBN(0xa7a8746a, 0x584c5e20), TOBN(0x267e4ea1, 0xb9dc7035),
- TOBN(0x593a15cf, 0xb9548c9b), TOBN(0x5e6e2135, 0x4bd012f3),
- TOBN(0xdf31cc6a, 0x8c8f936e), TOBN(0x8af84d04, 0xb5c241dc),
- TOBN(0x63990a6f, 0x345efb86), TOBN(0x6fef4e61, 0xb9b962cb)},
- {TOBN(0xf6368f09, 0x25722608), TOBN(0x131260db, 0x131cf5c6),
- TOBN(0x40eb353b, 0xfab4f7ac), TOBN(0x85c78880, 0x37eee829),
- TOBN(0x4c1581ff, 0xc3bdf24e), TOBN(0x5bff75cb, 0xf5c3c5a8),
- TOBN(0x35e8c83f, 0xa14e6f40), TOBN(0xb81d1c0f, 0x0295e0ca),
- TOBN(0xfcde7cc8, 0xf43a730f), TOBN(0xe89b6f3c, 0x33ab590e),
- TOBN(0xc823f529, 0xad03240b), TOBN(0x82b79afe, 0x98bea5db),
- TOBN(0x568f2856, 0x962fe5de), TOBN(0x0c590adb, 0x60c591f3),
- TOBN(0x1fc74a14, 0x4a28a858), TOBN(0x3b662498, 0xb3203f4c),
- TOBN(0x91e3cf0d, 0x6c39765a), TOBN(0xa2db3acd, 0xac3cca0b),
- TOBN(0x288f2f08, 0xcb953b50), TOBN(0x2414582c, 0xcf43cf1a),
- TOBN(0x8dec8bbc, 0x60eee9a8), TOBN(0x54c79f02, 0x729aa042),
- TOBN(0xd81cd5ec, 0x6532f5d5), TOBN(0xa672303a, 0xcf82e15f),
- TOBN(0x376aafa8, 0x719c0563), TOBN(0xcd8ad2dc, 0xbc5fc79f),
- TOBN(0x303fdb9f, 0xcb750cd3), TOBN(0x14ff052f, 0x4418b08e),
- TOBN(0xf75084cf, 0x3e2d6520), TOBN(0x7ebdf0f8, 0x144ed509),
- TOBN(0xf43bf0f2, 0xd3f25b98), TOBN(0x86ad71cf, 0xa354d837),
- TOBN(0xb827fe92, 0x26f43572), TOBN(0xdfd3ab5b, 0x5d824758),
- TOBN(0x315dd23a, 0x539094c1), TOBN(0x85c0e37a, 0x66623d68),
- TOBN(0x575c7972, 0x7be19ae0), TOBN(0x616a3396, 0xdf0d36b5),
- TOBN(0xa1ebb3c8, 0x26b1ff7e), TOBN(0x635b9485, 0x140ad453),
- TOBN(0x92bf3cda, 0xda430c0b), TOBN(0x4702850e, 0x3a96dac6),
- TOBN(0xc91cf0a5, 0x15ac326a), TOBN(0x95de4f49, 0xab8c25e4),
- TOBN(0xb01bad09, 0xe265c17c), TOBN(0x24e45464, 0x087b3881),
- TOBN(0xd43e583c, 0xe1fac5ca), TOBN(0xe17cb318, 0x6ead97a6),
- TOBN(0x6cc39243, 0x74dcec46), TOBN(0x33cfc02d, 0x54c2b73f),
- TOBN(0x82917844, 0xf26cd99c), TOBN(0x8819dd95, 0xd1773f89),
- TOBN(0x09572aa6, 0x0871f427), TOBN(0x8e0cf365, 0xf6f01c34),
- TOBN(0x7fa52988, 0xbff1f5af), TOBN(0x4eb357ea, 0xe75e8e50),
- TOBN(0xd9d0c8c4, 0x868af75d), TOBN(0xd7325cff, 0x45c8c7ea),
- TOBN(0xab471996, 0xcc81ecb0), TOBN(0xff5d55f3, 0x611824ed),
- TOBN(0xbe314541, 0x1977a0ee), TOBN(0x5085c4c5, 0x722038c6),
- TOBN(0x2d5335bf, 0xf94bb495), TOBN(0x894ad8a6, 0xc8e2a082),
- TOBN(0x5c3e2341, 0xada35438), TOBN(0xf4a9fc89, 0x049b8c4e),
- TOBN(0xbeeb355a, 0x9f17cf34), TOBN(0x3f311e0e, 0x6c91fe10),
- TOBN(0xc2d20038, 0x92ab9891), TOBN(0x257bdcc1, 0x3e8ce9a9),
- TOBN(0x1b2d9789, 0x88c53bee), TOBN(0x927ce89a, 0xcdba143a),
- TOBN(0xb0a32cca, 0x523db280), TOBN(0x5c889f8a, 0x50d43783),
- TOBN(0x503e04b3, 0x4897d16f), TOBN(0x8cdb6e78, 0x08f5f2e8),
- TOBN(0x6ab91cf0, 0x179c8e74), TOBN(0xd8874e52, 0x48211d60),
- TOBN(0xf948d4d5, 0xea851200), TOBN(0x4076d41e, 0xe6f9840a),
- TOBN(0xc20e263c, 0x47b517ea), TOBN(0x79a448fd, 0x30685e5e),
- TOBN(0xe55f6f78, 0xf90631a0), TOBN(0x88a790b1, 0xa79e6346),
- TOBN(0x62160c7d, 0x80969fe8), TOBN(0x54f92fd4, 0x41491bb9),
- TOBN(0xa6645c23, 0x5c957526), TOBN(0xf44cc5ae, 0xbea3ce7b),
- TOBN(0xf7628327, 0x8b1e68b7), TOBN(0xc731ad7a, 0x303f29d3),
- TOBN(0xfe5a9ca9, 0x57d03ecb), TOBN(0x96c0d50c, 0x41bc97a7),
- TOBN(0xc4669fe7, 0x9b4f7f24), TOBN(0xfdd781d8, 0x3d9967ef),
- TOBN(0x7892c7c3, 0x5d2c208d), TOBN(0x8bf64f7c, 0xae545cb3),
- TOBN(0xc01f862c, 0x467be912), TOBN(0xf4c85ee9, 0xc73d30cc),
- TOBN(0x1fa6f4be, 0x6ab83ec7), TOBN(0xa07a3c1c, 0x4e3e3cf9),
- TOBN(0x87f8ef45, 0x0c00beb3), TOBN(0x30e2c2b3, 0x000d4c3e),
- TOBN(0x1aa00b94, 0xfe08bf5b), TOBN(0x32c133aa, 0x9224ef52),
- TOBN(0x38df16bb, 0x32e5685d), TOBN(0x68a9e069, 0x58e6f544),
- TOBN(0x495aaff7, 0xcdc5ebc6), TOBN(0xf894a645, 0x378b135f),
- TOBN(0xf316350a, 0x09e27ecf), TOBN(0xeced201e, 0x58f7179d),
- TOBN(0x2eec273c, 0xe97861ba), TOBN(0x47ec2cae, 0xd693be2e),
- TOBN(0xfa4c97c4, 0xf68367ce), TOBN(0xe4f47d0b, 0xbe5a5755),
- TOBN(0x17de815d, 0xb298a979), TOBN(0xd7eca659, 0xc177dc7d),
- TOBN(0x20fdbb71, 0x49ded0a3), TOBN(0x4cb2aad4, 0xfb34d3c5),
- TOBN(0x2cf31d28, 0x60858a33), TOBN(0x3b6873ef, 0xa24aa40f),
- TOBN(0x540234b2, 0x2c11bb37), TOBN(0x2d0366dd, 0xed4c74a3),
- TOBN(0xf9a968da, 0xeec5f25d), TOBN(0x36601068, 0x67b63142),
- TOBN(0x07cd6d2c, 0x68d7b6d4), TOBN(0xa8f74f09, 0x0c842942),
- TOBN(0xe2751404, 0x7768b1ee), TOBN(0x4b5f7e89, 0xfe62aee4),
- TOBN(0xc6a77177, 0x89070d26), TOBN(0xa1f28e4e, 0xdd1c8bc7),
- TOBN(0xea5f4f06, 0x469e1f17), TOBN(0x78fc242a, 0xfbdb78e0),
- TOBN(0xc9c7c592, 0x8b0588f1), TOBN(0xb6b7a0fd, 0x1535921e),
- TOBN(0xcc5bdb91, 0xbde5ae35), TOBN(0xb42c485e, 0x12ff1864),
- TOBN(0xa1113e13, 0xdbab98aa), TOBN(0xde9d469b, 0xa17b1024),
- TOBN(0x23f48b37, 0xc0462d3a), TOBN(0x3752e537, 0x7c5c078d),
- TOBN(0xe3a86add, 0x15544eb9), TOBN(0xf013aea7, 0x80fba279),
- TOBN(0x8b5bb76c, 0xf22001b5), TOBN(0xe617ba14, 0xf02891ab),
- TOBN(0xd39182a6, 0x936219d3), TOBN(0x5ce1f194, 0xae51cb19),
- TOBN(0xc78f8598, 0xbf07a74c), TOBN(0x6d7158f2, 0x22cbf1bc),
- TOBN(0x3b846b21, 0xe300ce18), TOBN(0x35fba630, 0x2d11275d),
- TOBN(0x5fe25c36, 0xa0239b9b), TOBN(0xd8beb35d, 0xdf05d940),
- TOBN(0x4db02bb0, 0x1f7e320d), TOBN(0x0641c364, 0x6da320ea),
- TOBN(0x6d95fa5d, 0x821389a3), TOBN(0x92699748, 0x8fcd8e3d),
- TOBN(0x316fef17, 0xceb6c143), TOBN(0x67fcb841, 0xd933762b),
- TOBN(0xbb837e35, 0x118b17f8), TOBN(0x4b92552f, 0x9fd24821),
- TOBN(0xae6bc70e, 0x46aca793), TOBN(0x1cf0b0e4, 0xe579311b),
- TOBN(0x8dc631be, 0x5802f716), TOBN(0x099bdc6f, 0xbddbee4d),
- TOBN(0xcc352bb2, 0x0caf8b05), TOBN(0xf74d505a, 0x72d63df2),
- TOBN(0xb9876d4b, 0x91c4f408), TOBN(0x1ce18473, 0x9e229b2d),
- TOBN(0x49507597, 0x83abdb4a), TOBN(0x850fbcb6, 0xdee84b18),
- TOBN(0x6325236e, 0x609e67dc), TOBN(0x04d831d9, 0x9336c6d8),
- TOBN(0x8deaae3b, 0xfa12d45d), TOBN(0xe425f8ce, 0x4746e246),
- TOBN(0x8004c175, 0x24f5f31e), TOBN(0xaca16d8f, 0xad62c3b7),
- TOBN(0x0dc15a6a, 0x9152f934), TOBN(0xf1235e5d, 0xed0e12c1),
- TOBN(0xc33c06ec, 0xda477dac), TOBN(0x76be8732, 0xb2ea0006),
- TOBN(0xcf3f7831, 0x0c0cd313), TOBN(0x3c524553, 0xa614260d),
- TOBN(0x31a756f8, 0xcab22d15), TOBN(0x03ee10d1, 0x77827a20),
- TOBN(0xd1e059b2, 0x1994ef20), TOBN(0x2a653b69, 0x638ae318),
- TOBN(0x70d5eb58, 0x2f699010), TOBN(0x279739f7, 0x09f5f84a),
- TOBN(0x5da4663c, 0x8b799336), TOBN(0xfdfdf14d, 0x203c37eb),
- TOBN(0x32d8a9dc, 0xa1dbfb2d), TOBN(0xab40cff0, 0x77d48f9b),
- TOBN(0xc018b383, 0xd20b42d5), TOBN(0xf9a810ef, 0x9f78845f),
- TOBN(0x40af3753, 0xbdba9df0), TOBN(0xb90bdcfc, 0x131dfdf9),
- TOBN(0x18720591, 0xf01ab782), TOBN(0xc823f211, 0x6af12a88),
- TOBN(0xa51b80f3, 0x0dc14401), TOBN(0xde248f77, 0xfb2dfbe3),
- TOBN(0xef5a44e5, 0x0cafe751), TOBN(0x73997c9c, 0xd4dcd221),
- TOBN(0x32fd86d1, 0xde854024), TOBN(0xd5b53adc, 0xa09b84bb),
- TOBN(0x008d7a11, 0xdcedd8d1), TOBN(0x406bd1c8, 0x74b32c84),
- TOBN(0x5d4472ff, 0x05dde8b1), TOBN(0x2e25f2cd, 0xfce2b32f),
- TOBN(0xbec0dd5e, 0x29dfc254), TOBN(0x4455fcf6, 0x2b98b267),
- TOBN(0x0b4d43a5, 0xc72df2ad), TOBN(0xea70e6be, 0x48a75397),
- TOBN(0x2aad6169, 0x5820f3bf), TOBN(0xf410d2dd, 0x9e37f68f),
- TOBN(0x70fb7dba, 0x7be5ac83), TOBN(0x636bb645, 0x36ec3eec),
- TOBN(0x27104ea3, 0x9754e21c), TOBN(0xbc87a3e6, 0x8d63c373),
- TOBN(0x483351d7, 0x4109db9a), TOBN(0x0fa724e3, 0x60134da7),
- TOBN(0x9ff44c29, 0xb0720b16), TOBN(0x2dd0cf13, 0x06aceead),
- TOBN(0x5942758c, 0xe26929a6), TOBN(0x96c5db92, 0xb766a92b),
- TOBN(0xcec7d4c0, 0x5f18395e), TOBN(0xd3f22744, 0x1f80d032),
- TOBN(0x7a68b37a, 0xcb86075b), TOBN(0x074764dd, 0xafef92db),
- TOBN(0xded1e950, 0x7bc7f389), TOBN(0xc580c850, 0xb9756460),
- TOBN(0xaeeec2a4, 0x7da48157), TOBN(0x3f0b4e7f, 0x82c587b3),
- TOBN(0x231c6de8, 0xa9f19c53), TOBN(0x5717bd73, 0x6974e34e),
- TOBN(0xd9e1d216, 0xf1508fa9), TOBN(0x9f112361, 0xdadaa124),
- TOBN(0x80145e31, 0x823b7348), TOBN(0x4dd8f0d5, 0xac634069),
- TOBN(0xe3d82fc7, 0x2297c258), TOBN(0x276fcfee, 0x9cee7431),
- TOBN(0x8eb61b5e, 0x2bc0aea9), TOBN(0x4f668fd5, 0xde329431),
- TOBN(0x03a32ab1, 0x38e4b87e), TOBN(0xe1374517, 0x73d0ef0b),
- TOBN(0x1a46f7e6, 0x853ac983), TOBN(0xc3bdf42e, 0x68e78a57),
- TOBN(0xacf20785, 0x2ea96dd1), TOBN(0xa10649b9, 0xf1638460),
- TOBN(0xf2369f0b, 0x879fbbed), TOBN(0x0ff0ae86, 0xda9d1869),
- TOBN(0x5251d759, 0x56766f45), TOBN(0x4984d8c0, 0x2be8d0fc),
- TOBN(0x7ecc95a6, 0xd21008f0), TOBN(0x29bd54a0, 0x3a1a1c49),
- TOBN(0xab9828c5, 0xd26c50f3), TOBN(0x32c0087c, 0x51d0d251),
- TOBN(0x9bac3ce6, 0x0c1cdb26), TOBN(0xcd94d947, 0x557ca205),
- TOBN(0x1b1bd598, 0x9db1fdcd), TOBN(0x0eda0108, 0xa3d8b149),
- TOBN(0x95066610, 0x56152fcc), TOBN(0xc2f037e6, 0xe7192b33),
- TOBN(0xdeffb41a, 0xc92e05a4), TOBN(0x1105f6c2, 0xc2f6c62e),
- TOBN(0x68e73500, 0x8733913c), TOBN(0xcce86163, 0x3f3adc40),
- TOBN(0xf407a942, 0x38a278e9), TOBN(0xd13c1b9d, 0x2ab21292),
- TOBN(0x93ed7ec7, 0x1c74cf5c), TOBN(0x8887dc48, 0xf1a4c1b4),
- TOBN(0x3830ff30, 0x4b3a11f1), TOBN(0x358c5a3c, 0x58937cb6),
- TOBN(0x027dc404, 0x89022829), TOBN(0x40e93977, 0x3b798f79),
- TOBN(0x90ad3337, 0x38be6ead), TOBN(0x9c23f6bc, 0xf34c0a5d),
- TOBN(0xd1711a35, 0xfbffd8bb), TOBN(0x60fcfb49, 0x1949d3dd),
- TOBN(0x09c8ef4b, 0x7825d93a), TOBN(0x24233cff, 0xa0a8c968),
- TOBN(0x67ade46c, 0xe6d982af), TOBN(0xebb6bf3e, 0xe7544d7c),
- TOBN(0xd6b9ba76, 0x3d8bd087), TOBN(0x46fe382d, 0x4dc61280),
- TOBN(0xbd39a7e8, 0xb5bdbd75), TOBN(0xab381331, 0xb8f228fe),
- TOBN(0x0709a77c, 0xce1c4300), TOBN(0x6a247e56, 0xf337ceac),
- TOBN(0x8f34f21b, 0x636288be), TOBN(0x9dfdca74, 0xc8a7c305),
- TOBN(0x6decfd1b, 0xea919e04), TOBN(0xcdf2688d, 0x8e1991f8),
- TOBN(0xe607df44, 0xd0f8a67e), TOBN(0xd985df4b, 0x0b58d010),
- TOBN(0x57f834c5, 0x0c24f8f4), TOBN(0xe976ef56, 0xa0bf01ae),
- TOBN(0x536395ac, 0xa1c32373), TOBN(0x351027aa, 0x734c0a13),
- TOBN(0xd2f1b5d6, 0x5e6bd5bc), TOBN(0x2b539e24, 0x223debed),
- TOBN(0xd4994cec, 0x0eaa1d71), TOBN(0x2a83381d, 0x661dcf65),
- TOBN(0x5f1aed2f, 0x7b54c740), TOBN(0x0bea3fa5, 0xd6dda5ee),
- TOBN(0x9d4fb684, 0x36cc6134), TOBN(0x8eb9bbf3, 0xc0a443dd),
- TOBN(0xfc500e2e, 0x383b7d2a), TOBN(0x7aad621c, 0x5b775257),
- TOBN(0x69284d74, 0x0a8f7cc0), TOBN(0xe820c2ce, 0x07562d65),
- TOBN(0xbf9531b9, 0x499758ee), TOBN(0x73e95ca5, 0x6ee0cc2d),
- TOBN(0xf61790ab, 0xfbaf50a5), TOBN(0xdf55e76b, 0x684e0750),
- TOBN(0xec516da7, 0xf176b005), TOBN(0x575553bb, 0x7a2dddc7),
- TOBN(0x37c87ca3, 0x553afa73), TOBN(0x315f3ffc, 0x4d55c251),
- TOBN(0xe846442a, 0xaf3e5d35), TOBN(0x61b91149, 0x6495ff28),
- TOBN(0x23cc95d3, 0xfa326dc3), TOBN(0x1df4da1f, 0x18fc2cea),
- TOBN(0x24bf9adc, 0xd0a37d59), TOBN(0xb6710053, 0x320d6e1e),
- TOBN(0x96f9667e, 0x618344d1), TOBN(0xcc7ce042, 0xa06445af),
- TOBN(0xa02d8514, 0xd68dbc3a), TOBN(0x4ea109e4, 0x280b5a5b),
- TOBN(0x5741a7ac, 0xb40961bf), TOBN(0x4ada5937, 0x6aa56bfa),
- TOBN(0x7feb9145, 0x02b765d1), TOBN(0x561e97be, 0xe6ad1582),
- TOBN(0xbbc4a5b6, 0xda3982f5), TOBN(0x0c2659ed, 0xb546f468),
- TOBN(0xb8e7e6aa, 0x59612d20), TOBN(0xd83dfe20, 0xac19e8e0),
- TOBN(0x8530c45f, 0xb835398c), TOBN(0x6106a8bf, 0xb38a41c2),
- TOBN(0x21e8f9a6, 0x35f5dcdb), TOBN(0x39707137, 0xcae498ed),
- TOBN(0x70c23834, 0xd8249f00), TOBN(0x9f14b58f, 0xab2537a0),
- TOBN(0xd043c365, 0x5f61c0c2), TOBN(0xdc5926d6, 0x09a194a7),
- TOBN(0xddec0339, 0x8e77738a), TOBN(0xd07a63ef, 0xfba46426),
- TOBN(0x2e58e79c, 0xee7f6e86), TOBN(0xe59b0459, 0xff32d241),
- TOBN(0xc5ec84e5, 0x20fa0338), TOBN(0x97939ac8, 0xeaff5ace),
- TOBN(0x0310a4e3, 0xb4a38313), TOBN(0x9115fba2, 0x8f9d9885),
- TOBN(0x8dd710c2, 0x5fadf8c3), TOBN(0x66be38a2, 0xce19c0e2),
- TOBN(0xd42a279c, 0x4cfe5022), TOBN(0x597bb530, 0x0e24e1b8),
- TOBN(0x3cde86b7, 0xc153ca7f), TOBN(0xa8d30fb3, 0x707d63bd),
- TOBN(0xac905f92, 0xbd60d21e), TOBN(0x98e7ffb6, 0x7b9a54ab),
- TOBN(0xd7147df8, 0xe9726a30), TOBN(0xb5e216ff, 0xafce3533),
- TOBN(0xb550b799, 0x2ff1ec40), TOBN(0x6b613b87, 0xa1e953fd),
- TOBN(0x87b88dba, 0x792d5610), TOBN(0x2ee1270a, 0xa190fbe1),
- TOBN(0x02f4e2dc, 0x2ef581da), TOBN(0x016530e4, 0xeff82a95),
- TOBN(0xcbb93dfd, 0x8fd6ee89), TOBN(0x16d3d986, 0x46848fff),
- TOBN(0x600eff24, 0x1da47adf), TOBN(0x1b9754a0, 0x0ad47a71),
- TOBN(0x8f9266df, 0x70c33b98), TOBN(0xaadc87ae, 0xdf34186e),
- TOBN(0x0d2ce8e1, 0x4ad24132), TOBN(0x8a47cbfc, 0x19946eba),
- TOBN(0x47feeb66, 0x62b5f3af), TOBN(0xcefab561, 0x0abb3734),
- TOBN(0x449de60e, 0x19f35cb1), TOBN(0x39f8db14, 0x157f0eb9),
- TOBN(0xffaecc5b, 0x3c61bfd6), TOBN(0xa5a4d41d, 0x41216703),
- TOBN(0x7f8fabed, 0x224e1cc2), TOBN(0x0d5a8186, 0x871ad953),
- TOBN(0xf10774f7, 0xd22da9a9), TOBN(0x45b8a678, 0xcc8a9b0d),
- TOBN(0xd9c2e722, 0xbdc32cff), TOBN(0xbf71b5f5, 0x337202a5),
- TOBN(0x95c57f2f, 0x69fc4db9), TOBN(0xb6dad34c, 0x765d01e1),
- TOBN(0x7e0bd13f, 0xcb904635), TOBN(0x61751253, 0x763a588c),
- TOBN(0xd85c2997, 0x81af2c2d), TOBN(0xc0f7d9c4, 0x81b9d7da),
- TOBN(0x838a34ae, 0x08533e8d), TOBN(0x15c4cb08, 0x311d8311),
- TOBN(0x97f83285, 0x8e121e14), TOBN(0xeea7dc1e, 0x85000a5f),
- TOBN(0x0c6059b6, 0x5d256274), TOBN(0xec9beace, 0xb95075c0),
- TOBN(0x173daad7, 0x1df97828), TOBN(0xbf851cb5, 0xa8937877),
- TOBN(0xb083c594, 0x01646f3c), TOBN(0x3bad30cf, 0x50c6d352),
- TOBN(0xfeb2b202, 0x496bbcea), TOBN(0x3cf9fd4f, 0x18a1e8ba),
- TOBN(0xd26de7ff, 0x1c066029), TOBN(0x39c81e9e, 0x4e9ed4f8),
- TOBN(0xd8be0cb9, 0x7b390d35), TOBN(0x01df2bbd, 0x964aab27),
- TOBN(0x3e8c1a65, 0xc3ef64f8), TOBN(0x567291d1, 0x716ed1dd),
- TOBN(0x95499c6c, 0x5f5406d3), TOBN(0x71fdda39, 0x5ba8e23f),
- TOBN(0xcfeb320e, 0xd5096ece), TOBN(0xbe7ba92b, 0xca66dd16),
- TOBN(0x4608d36b, 0xc6fb5a7d), TOBN(0xe3eea15a, 0x6d2dd0e0),
- TOBN(0x75b0a3eb, 0x8f97a36a), TOBN(0xf59814cc, 0x1c83de1e),
- TOBN(0x56c9c5b0, 0x1c33c23f), TOBN(0xa96c1da4, 0x6faa4136),
- TOBN(0x46bf2074, 0xde316551), TOBN(0x3b866e7b, 0x1f756c8f),
- TOBN(0x727727d8, 0x1495ed6b), TOBN(0xb2394243, 0xb682dce7),
- TOBN(0x8ab8454e, 0x758610f3), TOBN(0xc243ce84, 0x857d72a4),
- TOBN(0x7b320d71, 0xdbbf370f), TOBN(0xff9afa37, 0x78e0f7ca),
- TOBN(0x0119d1e0, 0xea7b523f), TOBN(0xb997f8cb, 0x058c7d42),
- TOBN(0x285bcd2a, 0x37bbb184), TOBN(0x51dcec49, 0xa45d1fa6),
- TOBN(0x6ade3b64, 0xe29634cb), TOBN(0x080c94a7, 0x26b86ef1),
- TOBN(0xba583db1, 0x2283fbe3), TOBN(0x902bddc8, 0x5a9315ed),
- TOBN(0x07c1ccb3, 0x86964bec), TOBN(0x78f4eacf, 0xb6258301),
- TOBN(0x4bdf3a49, 0x56f90823), TOBN(0xba0f5080, 0x741d777b),
- TOBN(0x091d71c3, 0xf38bf760), TOBN(0x9633d50f, 0x9b625b02),
- TOBN(0x03ecb743, 0xb8c9de61), TOBN(0xb4751254, 0x5de74720),
- TOBN(0x9f9defc9, 0x74ce1cb2), TOBN(0x774a4f6a, 0x00bd32ef),
- TOBN(0xaca385f7, 0x73848f22), TOBN(0x53dad716, 0xf3f8558e),
- TOBN(0xab7b34b0, 0x93c471f9), TOBN(0xf530e069, 0x19644bc7),
- TOBN(0x3d9fb1ff, 0xdd59d31a), TOBN(0x4382e0df, 0x08daa795),
- TOBN(0x165c6f4b, 0xd5cc88d7), TOBN(0xeaa392d5, 0x4a18c900),
- TOBN(0x94203c67, 0x648024ee), TOBN(0x188763f2, 0x8c2fabcd),
- TOBN(0xa80f87ac, 0xbbaec835), TOBN(0x632c96e0, 0xf29d8d54),
- TOBN(0x29b0a60e, 0x4c00a95e), TOBN(0x2ef17f40, 0xe011e9fa),
- TOBN(0xf6c0e1d1, 0x15b77223), TOBN(0xaaec2c62, 0x14b04e32),
- TOBN(0xd35688d8, 0x3d84e58c), TOBN(0x2af5094c, 0x958571db),
- TOBN(0x4fff7e19, 0x760682a6), TOBN(0x4cb27077, 0xe39a407c),
- TOBN(0x0f59c547, 0x4ff0e321), TOBN(0x169f34a6, 0x1b34c8ff),
- TOBN(0x2bff1096, 0x52bc1ba7), TOBN(0xa25423b7, 0x83583544),
- TOBN(0x5d55d5d5, 0x0ac8b782), TOBN(0xff6622ec, 0x2db3c892),
- TOBN(0x48fce741, 0x6b8bb642), TOBN(0x31d6998c, 0x69d7e3dc),
- TOBN(0xdbaf8004, 0xcadcaed0), TOBN(0x801b0142, 0xd81d053c),
- TOBN(0x94b189fc, 0x59630ec6), TOBN(0x120e9934, 0xaf762c8e),
- TOBN(0x53a29aa4, 0xfdc6a404), TOBN(0x19d8e01e, 0xa1909948),
- TOBN(0x3cfcabf1, 0xd7e89681), TOBN(0x3321a50d, 0x4e132d37),
- TOBN(0xd0496863, 0xe9a86111), TOBN(0x8c0cde61, 0x06a3bc65),
- TOBN(0xaf866c49, 0xfc9f8eef), TOBN(0x2066350e, 0xff7f5141),
- TOBN(0x4f8a4689, 0xe56ddfbd), TOBN(0xea1b0c07, 0xfe32983a),
- TOBN(0x2b317462, 0x873cb8cb), TOBN(0x658deddc, 0x2d93229f),
- TOBN(0x65efaf4d, 0x0f64ef58), TOBN(0xfe43287d, 0x730cc7a8),
- TOBN(0xaebc0c72, 0x3d047d70), TOBN(0x92efa539, 0xd92d26c9),
- TOBN(0x06e78457, 0x94b56526), TOBN(0x415cb80f, 0x0961002d),
- TOBN(0x89e5c565, 0x76dcb10f), TOBN(0x8bbb6982, 0xff9259fe),
- TOBN(0x4fe8795b, 0x9abc2668), TOBN(0xb5d4f534, 0x1e678fb1),
- TOBN(0x6601f3be, 0x7b7da2b9), TOBN(0x98da59e2, 0xa13d6805),
- TOBN(0x190d8ea6, 0x01799a52), TOBN(0xa20cec41, 0xb86d2952),
- TOBN(0x3062ffb2, 0x7fff2a7c), TOBN(0x741b32e5, 0x79f19d37),
- TOBN(0xf80d8181, 0x4eb57d47), TOBN(0x7a2d0ed4, 0x16aef06b),
- TOBN(0x09735fb0, 0x1cecb588), TOBN(0x1641caaa, 0xc6061f5b)},
- {TOBN(0x7f99824f, 0x20151427), TOBN(0x206828b6, 0x92430206),
- TOBN(0xaa9097d7, 0xe1112357), TOBN(0xacf9a2f2, 0x09e414ec),
- TOBN(0xdbdac9da, 0x27915356), TOBN(0x7e0734b7, 0x001efee3),
- TOBN(0x54fab5bb, 0xd2b288e2), TOBN(0x4c630fc4, 0xf62dd09c),
- TOBN(0x8537107a, 0x1ac2703b), TOBN(0xb49258d8, 0x6bc857b5),
- TOBN(0x57df14de, 0xbcdaccd1), TOBN(0x24ab68d7, 0xc4ae8529),
- TOBN(0x7ed8b5d4, 0x734e59d0), TOBN(0x5f8740c8, 0xc495cc80),
- TOBN(0x84aedd5a, 0x291db9b3), TOBN(0x80b360f8, 0x4fb995be),
- TOBN(0xae915f5d, 0x5fa067d1), TOBN(0x4134b57f, 0x9668960c),
- TOBN(0xbd3656d6, 0xa48edaac), TOBN(0xdac1e3e4, 0xfc1d7436),
- TOBN(0x674ff869, 0xd81fbb26), TOBN(0x449ed3ec, 0xb26c33d4),
- TOBN(0x85138705, 0xd94203e8), TOBN(0xccde538b, 0xbeeb6f4a),
- TOBN(0x55d5c68d, 0xa61a76fa), TOBN(0x598b441d, 0xca1554dc),
- TOBN(0xd39923b9, 0x773b279c), TOBN(0x33331d3c, 0x36bf9efc),
- TOBN(0x2d4c848e, 0x298de399), TOBN(0xcfdb8e77, 0xa1a27f56),
- TOBN(0x94c855ea, 0x57b8ab70), TOBN(0xdcdb9dae, 0x6f7879ba),
- TOBN(0x7bdff8c2, 0x019f2a59), TOBN(0xb3ce5bb3, 0xcb4fbc74),
- TOBN(0xea907f68, 0x8a9173dd), TOBN(0x6cd3d0d3, 0x95a75439),
- TOBN(0x92ecc4d6, 0xefed021c), TOBN(0x09a9f9b0, 0x6a77339a),
- TOBN(0x87ca6b15, 0x7188c64a), TOBN(0x10c29968, 0x44899158),
- TOBN(0x5859a229, 0xed6e82ef), TOBN(0x16f338e3, 0x65ebaf4e),
- TOBN(0x0cd31387, 0x5ead67ae), TOBN(0x1c73d228, 0x54ef0bb4),
- TOBN(0x4cb55131, 0x74a5c8c7), TOBN(0x01cd2970, 0x7f69ad6a),
- TOBN(0xa04d00dd, 0xe966f87e), TOBN(0xd96fe447, 0x0b7b0321),
- TOBN(0x342ac06e, 0x88fbd381), TOBN(0x02cd4a84, 0x5c35a493),
- TOBN(0xe8fa89de, 0x54f1bbcd), TOBN(0x341d6367, 0x2575ed4c),
- TOBN(0xebe357fb, 0xd238202b), TOBN(0x600b4d1a, 0xa984ead9),
- TOBN(0xc35c9f44, 0x52436ea0), TOBN(0x96fe0a39, 0xa370751b),
- TOBN(0x4c4f0736, 0x7f636a38), TOBN(0x9f943fb7, 0x0e76d5cb),
- TOBN(0xb03510ba, 0xa8b68b8b), TOBN(0xc246780a, 0x9ed07a1f),
- TOBN(0x3c051415, 0x6d549fc2), TOBN(0xc2953f31, 0x607781ca),
- TOBN(0x955e2c69, 0xd8d95413), TOBN(0xb300fadc, 0x7bd282e3),
- TOBN(0x81fe7b50, 0x87e9189f), TOBN(0xdb17375c, 0xf42dda27),
- TOBN(0x22f7d896, 0xcf0a5904), TOBN(0xa0e57c5a, 0xebe348e6),
- TOBN(0xa61011d3, 0xf40e3c80), TOBN(0xb1189321, 0x8db705c5),
- TOBN(0x4ed9309e, 0x50fedec3), TOBN(0xdcf14a10, 0x4d6d5c1d),
- TOBN(0x056c265b, 0x55691342), TOBN(0xe8e08504, 0x91049dc7),
- TOBN(0x131329f5, 0xc9bae20a), TOBN(0x96c8b3e8, 0xd9dccdb4),
- TOBN(0x8c5ff838, 0xfb4ee6b4), TOBN(0xfc5a9aeb, 0x41e8ccf0),
- TOBN(0x7417b764, 0xfae050c6), TOBN(0x0953c3d7, 0x00452080),
- TOBN(0x21372682, 0x38dfe7e8), TOBN(0xea417e15, 0x2bb79d4b),
- TOBN(0x59641f1c, 0x76e7cf2d), TOBN(0x271e3059, 0xea0bcfcc),
- TOBN(0x624c7dfd, 0x7253ecbd), TOBN(0x2f552e25, 0x4fca6186),
- TOBN(0xcbf84ecd, 0x4d866e9c), TOBN(0x73967709, 0xf68d4610),
- TOBN(0xa14b1163, 0xc27901b4), TOBN(0xfd9236e0, 0x899b8bf3),
- TOBN(0x42b091ec, 0xcbc6da0a), TOBN(0xbb1dac6f, 0x5ad1d297),
- TOBN(0x80e61d53, 0xa91cf76e), TOBN(0x4110a412, 0xd31f1ee7),
- TOBN(0x2d87c3ba, 0x13efcf77), TOBN(0x1f374bb4, 0xdf450d76),
- TOBN(0x5e78e2f2, 0x0d188dab), TOBN(0xe3968ed0, 0xf4b885ef),
- TOBN(0x46c0568e, 0x7314570f), TOBN(0x31616338, 0x01170521),
- TOBN(0x18e1e7e2, 0x4f0c8afe), TOBN(0x4caa75ff, 0xdeea78da),
- TOBN(0x82db67f2, 0x7c5d8a51), TOBN(0x36a44d86, 0x6f505370),
- TOBN(0xd72c5bda, 0x0333974f), TOBN(0x5db516ae, 0x27a70146),
- TOBN(0x34705281, 0x210ef921), TOBN(0xbff17a8f, 0x0c9c38e5),
- TOBN(0x78f4814e, 0x12476da1), TOBN(0xc1e16613, 0x33c16980),
- TOBN(0x9e5b386f, 0x424d4bca), TOBN(0x4c274e87, 0xc85740de),
- TOBN(0xb6a9b88d, 0x6c2f5226), TOBN(0x14d1b944, 0x550d7ca8),
- TOBN(0x580c85fc, 0x1fc41709), TOBN(0xc1da368b, 0x54c6d519),
- TOBN(0x2b0785ce, 0xd5113cf7), TOBN(0x0670f633, 0x5a34708f),
- TOBN(0x46e23767, 0x15cc3f88), TOBN(0x1b480cfa, 0x50c72c8f),
- TOBN(0x20288602, 0x4147519a), TOBN(0xd0981eac, 0x26b372f0),
- TOBN(0xa9d4a7ca, 0xa785ebc8), TOBN(0xd953c50d, 0xdbdf58e9),
- TOBN(0x9d6361cc, 0xfd590f8f), TOBN(0x72e9626b, 0x44e6c917),
- TOBN(0x7fd96110, 0x22eb64cf), TOBN(0x863ebb7e, 0x9eb288f3),
- TOBN(0x6e6ab761, 0x6aca8ee7), TOBN(0x97d10b39, 0xd7b40358),
- TOBN(0x1687d377, 0x1e5feb0d), TOBN(0xc83e50e4, 0x8265a27a),
- TOBN(0x8f75a9fe, 0xc954b313), TOBN(0xcc2e8f47, 0x310d1f61),
- TOBN(0xf5ba81c5, 0x6557d0e0), TOBN(0x25f9680c, 0x3eaf6207),
- TOBN(0xf95c6609, 0x4354080b), TOBN(0x5225bfa5, 0x7bf2fe1c),
- TOBN(0xc5c004e2, 0x5c7d98fa), TOBN(0x3561bf1c, 0x019aaf60),
- TOBN(0x5e6f9f17, 0xba151474), TOBN(0xdec2f934, 0xb04f6eca),
- TOBN(0x64e368a1, 0x269acb1e), TOBN(0x1332d9e4, 0x0cdda493),
- TOBN(0x60d6cf69, 0xdf23de05), TOBN(0x66d17da2, 0x009339a0),
- TOBN(0x9fcac985, 0x0a693923), TOBN(0xbcf057fc, 0xed7c6a6d),
- TOBN(0xc3c5c8c5, 0xf0b5662c), TOBN(0x25318dd8, 0xdcba4f24),
- TOBN(0x60e8cb75, 0x082b69ff), TOBN(0x7c23b3ee, 0x1e728c01),
- TOBN(0x15e10a0a, 0x097e4403), TOBN(0xcb3d0a86, 0x19854665),
- TOBN(0x88d8e211, 0xd67d4826), TOBN(0xb39af66e, 0x0b9d2839),
- TOBN(0xa5f94588, 0xbd475ca8), TOBN(0xe06b7966, 0xc077b80b),
- TOBN(0xfedb1485, 0xda27c26c), TOBN(0xd290d33a, 0xfe0fd5e0),
- TOBN(0xa40bcc47, 0xf34fb0fa), TOBN(0xb4760cc8, 0x1fb1ab09),
- TOBN(0x8fca0993, 0xa273bfe3), TOBN(0x13e4fe07, 0xf70b213c),
- TOBN(0x3bcdb992, 0xfdb05163), TOBN(0x8c484b11, 0x0c2b19b6),
- TOBN(0x1acb815f, 0xaaf2e3e2), TOBN(0xc6905935, 0xb89ff1b4),
- TOBN(0xb2ad6f9d, 0x586e74e1), TOBN(0x488883ad, 0x67b80484),
- TOBN(0x758aa2c7, 0x369c3ddb), TOBN(0x8ab74e69, 0x9f9afd31),
- TOBN(0x10fc2d28, 0x5e21beb1), TOBN(0x3484518a, 0x318c42f9),
- TOBN(0x377427dc, 0x53cf40c3), TOBN(0x9de0781a, 0x391bc1d9),
- TOBN(0x8faee858, 0x693807e1), TOBN(0xa3865327, 0x4e81ccc7),
- TOBN(0x02c30ff2, 0x6f835b84), TOBN(0xb604437b, 0x0d3d38d4),
- TOBN(0xb3fc8a98, 0x5ca1823d), TOBN(0xb82f7ec9, 0x03be0324),
- TOBN(0xee36d761, 0xcf684a33), TOBN(0x5a01df0e, 0x9f29bf7d),
- TOBN(0x686202f3, 0x1306583d), TOBN(0x05b10da0, 0x437c622e),
- TOBN(0xbf9aaa0f, 0x076a7bc8), TOBN(0x25e94efb, 0x8f8f4e43),
- TOBN(0x8a35c9b7, 0xfa3dc26d), TOBN(0xe0e5fb93, 0x96ff03c5),
- TOBN(0xa77e3843, 0xebc394ce), TOBN(0xcede6595, 0x8361de60),
- TOBN(0xd27c22f6, 0xa1993545), TOBN(0xab01cc36, 0x24d671ba),
- TOBN(0x63fa2877, 0xa169c28e), TOBN(0x925ef904, 0x2eb08376),
- TOBN(0x3b2fa3cf, 0x53aa0b32), TOBN(0xb27beb5b, 0x71c49d7a),
- TOBN(0xb60e1834, 0xd105e27f), TOBN(0xd6089788, 0x4f68570d),
- TOBN(0x23094ce0, 0xd6fbc2ac), TOBN(0x738037a1, 0x815ff551),
- TOBN(0xda73b1bb, 0x6bef119c), TOBN(0xdcf6c430, 0xeef506ba),
- TOBN(0x00e4fe7b, 0xe3ef104a), TOBN(0xebdd9a2c, 0x0a065628),
- TOBN(0x853a81c3, 0x8792043e), TOBN(0x22ad6ece, 0xb3b59108),
- TOBN(0x9fb813c0, 0x39cd297d), TOBN(0x8ec7e16e, 0x05bda5d9),
- TOBN(0x2834797c, 0x0d104b96), TOBN(0xcc11a2e7, 0x7c511510),
- TOBN(0x96ca5a53, 0x96ee6380), TOBN(0x054c8655, 0xcea38742),
- TOBN(0xb5946852, 0xd54dfa7d), TOBN(0x97c422e7, 0x1f4ab207),
- TOBN(0xbf907509, 0x0c22b540), TOBN(0x2cde42aa, 0xb7c267d4),
- TOBN(0xba18f9ed, 0x5ab0d693), TOBN(0x3ba62aa6, 0x6e4660d9),
- TOBN(0xb24bf97b, 0xab9ea96a), TOBN(0x5d039642, 0xe3b60e32),
- TOBN(0x4e6a4506, 0x7c4d9bd5), TOBN(0x666c5b9e, 0x7ed4a6a4),
- TOBN(0xfa3fdcd9, 0x8edbd7cc), TOBN(0x4660bb87, 0xc6ccd753),
- TOBN(0x9ae90820, 0x21e6b64f), TOBN(0x8a56a713, 0xb36bfb3f),
- TOBN(0xabfce096, 0x5726d47f), TOBN(0x9eed01b2, 0x0b1a9a7f),
- TOBN(0x30e9cad4, 0x4eb74a37), TOBN(0x7b2524cc, 0x53e9666d),
- TOBN(0x6a29683b, 0x8f4b002f), TOBN(0xc2200d7a, 0x41f4fc20),
- TOBN(0xcf3af47a, 0x3a338acc), TOBN(0x6539a4fb, 0xe7128975),
- TOBN(0xcec31c14, 0xc33c7fcf), TOBN(0x7eb6799b, 0xc7be322b),
- TOBN(0x119ef4e9, 0x6646f623), TOBN(0x7b7a26a5, 0x54d7299b),
- TOBN(0xcb37f08d, 0x403f46f2), TOBN(0x94b8fc43, 0x1a0ec0c7),
- TOBN(0xbb8514e3, 0xc332142f), TOBN(0xf3ed2c33, 0xe80d2a7a),
- TOBN(0x8d2080af, 0xb639126c), TOBN(0xf7b6be60, 0xe3553ade),
- TOBN(0x3950aa9f, 0x1c7e2b09), TOBN(0x847ff958, 0x6410f02b),
- TOBN(0x877b7cf5, 0x678a31b0), TOBN(0xd50301ae, 0x3998b620),
- TOBN(0x734257c5, 0xc00fb396), TOBN(0xf9fb18a0, 0x04e672a6),
- TOBN(0xff8bd8eb, 0xe8758851), TOBN(0x1e64e4c6, 0x5d99ba44),
- TOBN(0x4b8eaedf, 0x7dfd93b7), TOBN(0xba2f2a98, 0x04e76b8c),
- TOBN(0x7d790cba, 0xe8053433), TOBN(0xc8e725a0, 0x3d2c9585),
- TOBN(0x58c5c476, 0xcdd8f5ed), TOBN(0xd106b952, 0xefa9fe1d),
- TOBN(0x3c5c775b, 0x0eff13a9), TOBN(0x242442ba, 0xe057b930),
- TOBN(0xe9f458d4, 0xc9b70cbd), TOBN(0x69b71448, 0xa3cdb89a),
- TOBN(0x41ee46f6, 0x0e2ed742), TOBN(0x573f1045, 0x40067493),
- TOBN(0xb1e154ff, 0x9d54c304), TOBN(0x2ad0436a, 0x8d3a7502),
- TOBN(0xee4aaa2d, 0x431a8121), TOBN(0xcd38b3ab, 0x886f11ed),
- TOBN(0x57d49ea6, 0x034a0eb7), TOBN(0xd2b773bd, 0xf7e85e58),
- TOBN(0x4a559ac4, 0x9b5c1f14), TOBN(0xc444be1a, 0x3e54df2b),
- TOBN(0x13aad704, 0xeda41891), TOBN(0xcd927bec, 0x5eb5c788),
- TOBN(0xeb3c8516, 0xe48c8a34), TOBN(0x1b7ac812, 0x4b546669),
- TOBN(0x1815f896, 0x594df8ec), TOBN(0x87c6a79c, 0x79227865),
- TOBN(0xae02a2f0, 0x9b56ddbd), TOBN(0x1339b5ac, 0x8a2f1cf3),
- TOBN(0xf2b569c7, 0x839dff0d), TOBN(0xb0b9e864, 0xfee9a43d),
- TOBN(0x4ff8ca41, 0x77bb064e), TOBN(0x145a2812, 0xfd249f63),
- TOBN(0x3ab7beac, 0xf86f689a), TOBN(0x9bafec27, 0x01d35f5e),
- TOBN(0x28054c65, 0x4265aa91), TOBN(0xa4b18304, 0x035efe42),
- TOBN(0x6887b0e6, 0x9639dec7), TOBN(0xf4b8f6ad, 0x3d52aea5),
- TOBN(0xfb9293cc, 0x971a8a13), TOBN(0x3f159e5d, 0x4c934d07),
- TOBN(0x2c50e9b1, 0x09acbc29), TOBN(0x08eb65e6, 0x7154d129),
- TOBN(0x4feff589, 0x30b75c3e), TOBN(0x0bb82fe2, 0x94491c93),
- TOBN(0xd8ac377a, 0x89af62bb), TOBN(0xd7b51490, 0x9685e49f),
- TOBN(0xabca9a7b, 0x04497f19), TOBN(0x1b35ed0a, 0x1a7ad13f),
- TOBN(0x6b601e21, 0x3ec86ed6), TOBN(0xda91fcb9, 0xce0c76f1),
- TOBN(0x9e28507b, 0xd7ab27e1), TOBN(0x7c19a555, 0x63945b7b),
- TOBN(0x6b43f0a1, 0xaafc9827), TOBN(0x443b4fbd, 0x3aa55b91),
- TOBN(0x962b2e65, 0x6962c88f), TOBN(0x139da8d4, 0xce0db0ca),
- TOBN(0xb93f05dd, 0x1b8d6c4f), TOBN(0x779cdff7, 0x180b9824),
- TOBN(0xbba23fdd, 0xae57c7b7), TOBN(0x345342f2, 0x1b932522),
- TOBN(0xfd9c80fe, 0x556d4aa3), TOBN(0xa03907ba, 0x6525bb61),
- TOBN(0x38b010e1, 0xff218933), TOBN(0xc066b654, 0xaa52117b),
- TOBN(0x8e141920, 0x94f2e6ea), TOBN(0x66a27dca, 0x0d32f2b2),
- TOBN(0x69c7f993, 0x048b3717), TOBN(0xbf5a989a, 0xb178ae1c),
- TOBN(0x49fa9058, 0x564f1d6b), TOBN(0x27ec6e15, 0xd31fde4e),
- TOBN(0x4cce0373, 0x7276e7fc), TOBN(0x64086d79, 0x89d6bf02),
- TOBN(0x5a72f046, 0x4ccdd979), TOBN(0x909c3566, 0x47775631),
- TOBN(0x1c07bc6b, 0x75dd7125), TOBN(0xb4c6bc97, 0x87a0428d),
- TOBN(0x507ece52, 0xfdeb6b9d), TOBN(0xfca56512, 0xb2c95432),
- TOBN(0x15d97181, 0xd0e8bd06), TOBN(0x384dd317, 0xc6bb46ea),
- TOBN(0x5441ea20, 0x3952b624), TOBN(0xbcf70dee, 0x4e7dc2fb),
- TOBN(0x372b016e, 0x6628e8c3), TOBN(0x07a0d667, 0xb60a7522),
- TOBN(0xcf05751b, 0x0a344ee2), TOBN(0x0ec09a48, 0x118bdeec),
- TOBN(0x6e4b3d4e, 0xd83dce46), TOBN(0x43a6316d, 0x99d2fc6e),
- TOBN(0xa99d8989, 0x56cf044c), TOBN(0x7c7f4454, 0xae3e5fb7),
- TOBN(0xb2e6b121, 0xfbabbe92), TOBN(0x281850fb, 0xe1330076),
- TOBN(0x093581ec, 0x97890015), TOBN(0x69b1dded, 0x75ff77f5),
- TOBN(0x7cf0b18f, 0xab105105), TOBN(0x953ced31, 0xa89ccfef),
- TOBN(0x3151f85f, 0xeb914009), TOBN(0x3c9f1b87, 0x88ed48ad),
- TOBN(0xc9aba1a1, 0x4a7eadcb), TOBN(0x928e7501, 0x522e71cf),
- TOBN(0xeaede727, 0x3a2e4f83), TOBN(0x467e10d1, 0x1ce3bbd3),
- TOBN(0xf3442ac3, 0xb955dcf0), TOBN(0xba96307d, 0xd3d5e527),
- TOBN(0xf763a10e, 0xfd77f474), TOBN(0x5d744bd0, 0x6a6e1ff0),
- TOBN(0xd287282a, 0xa777899e), TOBN(0xe20eda8f, 0xd03f3cde),
- TOBN(0x6a7e75bb, 0x50b07d31), TOBN(0x0b7e2a94, 0x6f379de4),
- TOBN(0x31cb64ad, 0x19f593cf), TOBN(0x7b1a9e4f, 0x1e76ef1d),
- TOBN(0xe18c9c9d, 0xb62d609c), TOBN(0x439bad6d, 0xe779a650),
- TOBN(0x219d9066, 0xe032f144), TOBN(0x1db632b8, 0xe8b2ec6a),
- TOBN(0xff0d0fd4, 0xfda12f78), TOBN(0x56fb4c2d, 0x2a25d265),
- TOBN(0x5f4e2ee1, 0x255a03f1), TOBN(0x61cd6af2, 0xe96af176),
- TOBN(0xe0317ba8, 0xd068bc97), TOBN(0x927d6bab, 0x264b988e),
- TOBN(0xa18f07e0, 0xe90fb21e), TOBN(0x00fd2b80, 0xbba7fca1),
- TOBN(0x20387f27, 0x95cd67b5), TOBN(0x5b89a4e7, 0xd39707f7),
- TOBN(0x8f83ad3f, 0x894407ce), TOBN(0xa0025b94, 0x6c226132),
- TOBN(0xc79563c7, 0xf906c13b), TOBN(0x5f548f31, 0x4e7bb025),
- TOBN(0x2b4c6b8f, 0xeac6d113), TOBN(0xa67e3f9c, 0x0e813c76),
- TOBN(0x3982717c, 0x3fe1f4b9), TOBN(0x58865819, 0x26d8050e),
- TOBN(0x99f3640c, 0xf7f06f20), TOBN(0xdc610216, 0x2a66ebc2),
- TOBN(0x52f2c175, 0x767a1e08), TOBN(0x05660e1a, 0x5999871b),
- TOBN(0x6b0f1762, 0x6d3c4693), TOBN(0xf0e7d627, 0x37ed7bea),
- TOBN(0xc51758c7, 0xb75b226d), TOBN(0x40a88628, 0x1f91613b),
- TOBN(0x889dbaa7, 0xbbb38ce0), TOBN(0xe0404b65, 0xbddcad81),
- TOBN(0xfebccd3a, 0x8bc9671f), TOBN(0xfbf9a357, 0xee1f5375),
- TOBN(0x5dc169b0, 0x28f33398), TOBN(0xb07ec11d, 0x72e90f65),
- TOBN(0xae7f3b4a, 0xfaab1eb1), TOBN(0xd970195e, 0x5f17538a),
- TOBN(0x52b05cbe, 0x0181e640), TOBN(0xf5debd62, 0x2643313d),
- TOBN(0x76148154, 0x5df31f82), TOBN(0x23e03b33, 0x3a9e13c5),
- TOBN(0xff758949, 0x4fde0c1f), TOBN(0xbf8a1abe, 0xe5b6ec20),
- TOBN(0x702278fb, 0x87e1db6c), TOBN(0xc447ad7a, 0x35ed658f),
- TOBN(0x48d4aa38, 0x03d0ccf2), TOBN(0x80acb338, 0x819a7c03),
- TOBN(0x9bc7c89e, 0x6e17cecc), TOBN(0x46736b8b, 0x03be1d82),
- TOBN(0xd65d7b60, 0xc0432f96), TOBN(0xddebe7a3, 0xdeb5442f),
- TOBN(0x79a25307, 0x7dff69a2), TOBN(0x37a56d94, 0x02cf3122),
- TOBN(0x8bab8aed, 0xf2350d0a), TOBN(0x13c3f276, 0x037b0d9a),
- TOBN(0xc664957c, 0x44c65cae), TOBN(0x88b44089, 0xc2e71a88),
- TOBN(0xdb88e5a3, 0x5cb02664), TOBN(0x5d4c0bf1, 0x8686c72e),
- TOBN(0xea3d9b62, 0xa682d53e), TOBN(0x9b605ef4, 0x0b2ad431),
- TOBN(0x71bac202, 0xc69645d0), TOBN(0xa115f03a, 0x6a1b66e7),
- TOBN(0xfe2c563a, 0x158f4dc4), TOBN(0xf715b3a0, 0x4d12a78c),
- TOBN(0x8f7f0a48, 0xd413213a), TOBN(0x2035806d, 0xc04becdb),
- TOBN(0xecd34a99, 0x5d8587f5), TOBN(0x4d8c3079, 0x9f6d3a71),
- TOBN(0x1b2a2a67, 0x8d95a8f6), TOBN(0xc58c9d7d, 0xf2110d0d),
- TOBN(0xdeee81d5, 0xcf8fba3f), TOBN(0xa42be3c0, 0x0c7cdf68),
- TOBN(0x2126f742, 0xd43b5eaa), TOBN(0x054a0766, 0xdfa59b85),
- TOBN(0x9d0d5e36, 0x126bfd45), TOBN(0xa1f8fbd7, 0x384f8a8f),
- TOBN(0x317680f5, 0xd563fccc), TOBN(0x48ca5055, 0xf280a928),
- TOBN(0xe00b81b2, 0x27b578cf), TOBN(0x10aad918, 0x2994a514),
- TOBN(0xd9e07b62, 0xb7bdc953), TOBN(0x9f0f6ff2, 0x5bc086dd),
- TOBN(0x09d1ccff, 0x655eee77), TOBN(0x45475f79, 0x5bef7df1),
- TOBN(0x3faa28fa, 0x86f702cc), TOBN(0x92e60905, 0x0f021f07),
- TOBN(0xe9e62968, 0x7f8fa8c6), TOBN(0xbd71419a, 0xf036ea2c),
- TOBN(0x171ee1cc, 0x6028da9a), TOBN(0x5352fe1a, 0xc251f573),
- TOBN(0xf8ff236e, 0x3fa997f4), TOBN(0xd831b6c9, 0xa5749d5f),
- TOBN(0x7c872e1d, 0xe350e2c2), TOBN(0xc56240d9, 0x1e0ce403),
- TOBN(0xf9deb077, 0x6974f5cb), TOBN(0x7d50ba87, 0x961c3728),
- TOBN(0xd6f89426, 0x5a3a2518), TOBN(0xcf817799, 0xc6303d43),
- TOBN(0x510a0471, 0x619e5696), TOBN(0xab049ff6, 0x3a5e307b),
- TOBN(0xe4cdf9b0, 0xfeb13ec7), TOBN(0xd5e97117, 0x9d8ff90c),
- TOBN(0xf6f64d06, 0x9afa96af), TOBN(0x00d0bf5e, 0x9d2012a2),
- TOBN(0xe63f301f, 0x358bcdc0), TOBN(0x07689e99, 0x0a9d47f8),
- TOBN(0x1f689e2f, 0x4f43d43a), TOBN(0x4d542a16, 0x90920904),
- TOBN(0xaea293d5, 0x9ca0a707), TOBN(0xd061fe45, 0x8ac68065),
- TOBN(0x1033bf1b, 0x0090008c), TOBN(0x29749558, 0xc08a6db6),
- TOBN(0x74b5fc59, 0xc1d5d034), TOBN(0xf712e9f6, 0x67e215e0),
- TOBN(0xfd520cbd, 0x860200e6), TOBN(0x0229acb4, 0x3ea22588),
- TOBN(0x9cd1e14c, 0xfff0c82e), TOBN(0x87684b62, 0x59c69e73),
- TOBN(0xda85e61c, 0x96ccb989), TOBN(0x2d5dbb02, 0xa3d06493),
- TOBN(0xf22ad33a, 0xe86b173c), TOBN(0xe8e41ea5, 0xa79ff0e3),
- TOBN(0x01d2d725, 0xdd0d0c10), TOBN(0x31f39088, 0x032d28f9),
- TOBN(0x7b3f71e1, 0x7829839e), TOBN(0x0cf691b4, 0x4502ae58),
- TOBN(0xef658dbd, 0xbefc6115), TOBN(0xa5cd6ee5, 0xb3ab5314),
- TOBN(0x206c8d7b, 0x5f1d2347), TOBN(0x794645ba, 0x4cc2253a),
- TOBN(0xd517d8ff, 0x58389e08), TOBN(0x4fa20dee, 0x9f847288),
- TOBN(0xeba072d8, 0xd797770a), TOBN(0x7360c91d, 0xbf429e26),
- TOBN(0x7200a3b3, 0x80af8279), TOBN(0x6a1c9150, 0x82dadce3),
- TOBN(0x0ee6d3a7, 0xc35d8794), TOBN(0x042e6558, 0x0356bae5),
- TOBN(0x9f59698d, 0x643322fd), TOBN(0x9379ae15, 0x50a61967),
- TOBN(0x64b9ae62, 0xfcc9981e), TOBN(0xaed3d631, 0x6d2934c6),
- TOBN(0x2454b302, 0x5e4e65eb), TOBN(0xab09f647, 0xf9950428)},
- {TOBN(0xb2083a12, 0x22248acc), TOBN(0x1f6ec0ef, 0x3264e366),
- TOBN(0x5659b704, 0x5afdee28), TOBN(0x7a823a40, 0xe6430bb5),
- TOBN(0x24592a04, 0xe1900a79), TOBN(0xcde09d4a, 0xc9ee6576),
- TOBN(0x52b6463f, 0x4b5ea54a), TOBN(0x1efe9ed3, 0xd3ca65a7),
- TOBN(0xe27a6dbe, 0x305406dd), TOBN(0x8eb7dc7f, 0xdd5d1957),
- TOBN(0xf54a6876, 0x387d4d8f), TOBN(0x9c479409, 0xc7762de4),
- TOBN(0xbe4d5b5d, 0x99b30778), TOBN(0x25380c56, 0x6e793682),
- TOBN(0x602d37f3, 0xdac740e3), TOBN(0x140deabe, 0x1566e4ae),
- TOBN(0x4481d067, 0xafd32acf), TOBN(0xd8f0fcca, 0xe1f71ccf),
- TOBN(0xd208dd0c, 0xb596f2da), TOBN(0xd049d730, 0x9aad93f9),
- TOBN(0xc79f263d, 0x42ab580e), TOBN(0x09411bb1, 0x23f707b4),
- TOBN(0x8cfde1ff, 0x835e0eda), TOBN(0x72707490, 0x90f03402),
- TOBN(0xeaee6126, 0xc49a861e), TOBN(0x024f3b65, 0xe14f0d06),
- TOBN(0x51a3f1e8, 0xc69bfc17), TOBN(0xc3c3a8e9, 0xa7686381),
- TOBN(0x3400752c, 0xb103d4c8), TOBN(0x02bc4613, 0x9218b36b),
- TOBN(0xc67f75eb, 0x7651504a), TOBN(0xd6848b56, 0xd02aebfa),
- TOBN(0xbd9802e6, 0xc30fa92b), TOBN(0x5a70d96d, 0x9a552784),
- TOBN(0x9085c4ea, 0x3f83169b), TOBN(0xfa9423bb, 0x06908228),
- TOBN(0x2ffebe12, 0xfe97a5b9), TOBN(0x85da6049, 0x71b99118),
- TOBN(0x9cbc2f7f, 0x63178846), TOBN(0xfd96bc70, 0x9153218e),
- TOBN(0x958381db, 0x1782269b), TOBN(0xae34bf79, 0x2597e550),
- TOBN(0xbb5c6064, 0x5f385153), TOBN(0x6f0e96af, 0xe3088048),
- TOBN(0xbf6a0215, 0x77884456), TOBN(0xb3b5688c, 0x69310ea7),
- TOBN(0x17c94295, 0x04fad2de), TOBN(0xe020f0e5, 0x17896d4d),
- TOBN(0x730ba0ab, 0x0976505f), TOBN(0x567f6813, 0x095e2ec5),
- TOBN(0x47062010, 0x6331ab71), TOBN(0x72cfa977, 0x41d22b9f),
- TOBN(0x33e55ead, 0x8a2373da), TOBN(0xa8d0d5f4, 0x7ba45a68),
- TOBN(0xba1d8f9c, 0x03029d15), TOBN(0x8f34f1cc, 0xfc55b9f3),
- TOBN(0xcca4428d, 0xbbe5a1a9), TOBN(0x8187fd5f, 0x3126bd67),
- TOBN(0x0036973a, 0x48105826), TOBN(0xa39b6663, 0xb8bd61a0),
- TOBN(0x6d42deef, 0x2d65a808), TOBN(0x4969044f, 0x94636b19),
- TOBN(0xf611ee47, 0xdd5d564c), TOBN(0x7b2f3a49, 0xd2873077),
- TOBN(0x94157d45, 0x300eb294), TOBN(0x2b2a656e, 0x169c1494),
- TOBN(0xc000dd76, 0xd3a47aa9), TOBN(0xa2864e4f, 0xa6243ea4),
- TOBN(0x82716c47, 0xdb89842e), TOBN(0x12dfd7d7, 0x61479fb7),
- TOBN(0x3b9a2c56, 0xe0b2f6dc), TOBN(0x46be862a, 0xd7f85d67),
- TOBN(0x03b0d8dd, 0x0f82b214), TOBN(0x460c34f9, 0xf103cbc6),
- TOBN(0xf32e5c03, 0x18d79e19), TOBN(0x8b8888ba, 0xa84117f8),
- TOBN(0x8f3c37dc, 0xc0722677), TOBN(0x10d21be9, 0x1c1c0f27),
- TOBN(0xd47c8468, 0xe0f7a0c6), TOBN(0x9bf02213, 0xadecc0e0),
- TOBN(0x0baa7d12, 0x42b48b99), TOBN(0x1bcb665d, 0x48424096),
- TOBN(0x8b847cd6, 0xebfb5cfb), TOBN(0x87c2ae56, 0x9ad4d10d),
- TOBN(0xf1cbb122, 0x0de36726), TOBN(0xe7043c68, 0x3fdfbd21),
- TOBN(0x4bd0826a, 0x4e79d460), TOBN(0x11f5e598, 0x4bd1a2cb),
- TOBN(0x97554160, 0xb7fe7b6e), TOBN(0x7d16189a, 0x400a3fb2),
- TOBN(0xd73e9bea, 0xe328ca1e), TOBN(0x0dd04b97, 0xe793d8cc),
- TOBN(0xa9c83c9b, 0x506db8cc), TOBN(0x5cd47aae, 0xcf38814c),
- TOBN(0x26fc430d, 0xb64b45e6), TOBN(0x079b5499, 0xd818ea84),
- TOBN(0xebb01102, 0xc1c24a3b), TOBN(0xca24e568, 0x1c161c1a),
- TOBN(0x103eea69, 0x36f00a4a), TOBN(0x9ad76ee8, 0x76176c7b),
- TOBN(0x97451fc2, 0x538e0ff7), TOBN(0x94f89809, 0x6604b3b0),
- TOBN(0x6311436e, 0x3249cfd7), TOBN(0x27b4a7bd, 0x41224f69),
- TOBN(0x03b5d21a, 0xe0ac2941), TOBN(0x279b0254, 0xc2d31937),
- TOBN(0x3307c052, 0xcac992d0), TOBN(0x6aa7cb92, 0xefa8b1f3),
- TOBN(0x5a182580, 0x0d37c7a5), TOBN(0x13380c37, 0x342d5422),
- TOBN(0x92ac2d66, 0xd5d2ef92), TOBN(0x035a70c9, 0x030c63c6),
- TOBN(0xc16025dd, 0x4ce4f152), TOBN(0x1f419a71, 0xf9df7c06),
- TOBN(0x6d5b2214, 0x91e4bb14), TOBN(0xfc43c6cc, 0x839fb4ce),
- TOBN(0x49f06591, 0x925d6b2d), TOBN(0x4b37d9d3, 0x62186598),
- TOBN(0x8c54a971, 0xd01b1629), TOBN(0xe1a9c29f, 0x51d50e05),
- TOBN(0x5109b785, 0x71ba1861), TOBN(0x48b22d5c, 0xd0c8f93d),
- TOBN(0xe8fa84a7, 0x8633bb93), TOBN(0x53fba6ba, 0x5aebbd08),
- TOBN(0x7ff27df3, 0xe5eea7d8), TOBN(0x521c8796, 0x68ca7158),
- TOBN(0xb9d5133b, 0xce6f1a05), TOBN(0x2d50cd53, 0xfd0ebee4),
- TOBN(0xc82115d6, 0xc5a3ef16), TOBN(0x993eff9d, 0xba079221),
- TOBN(0xe4da2c5e, 0x4b5da81c), TOBN(0x9a89dbdb, 0x8033fd85),
- TOBN(0x60819ebf, 0x2b892891), TOBN(0x53902b21, 0x5d14a4d5),
- TOBN(0x6ac35051, 0xd7fda421), TOBN(0xcc6ab885, 0x61c83284),
- TOBN(0x14eba133, 0xf74cff17), TOBN(0x240aaa03, 0xecb813f2),
- TOBN(0xcfbb6540, 0x6f665bee), TOBN(0x084b1fe4, 0xa425ad73),
- TOBN(0x009d5d16, 0xd081f6a6), TOBN(0x35304fe8, 0xeef82c90),
- TOBN(0xf20346d5, 0xaa9eaa22), TOBN(0x0ada9f07, 0xac1c91e3),
- TOBN(0xa6e21678, 0x968a6144), TOBN(0x54c1f77c, 0x07b31a1e),
- TOBN(0xd6bb787e, 0x5781fbe1), TOBN(0x61bd2ee0, 0xe31f1c4a),
- TOBN(0xf25aa1e9, 0x781105fc), TOBN(0x9cf2971f, 0x7b2f8e80),
- TOBN(0x26d15412, 0xcdff919b), TOBN(0x01db4ebe, 0x34bc896e),
- TOBN(0x7d9b3e23, 0xb40df1cf), TOBN(0x59337373, 0x94e971b4),
- TOBN(0xbf57bd14, 0x669cf921), TOBN(0x865daedf, 0x0c1a1064),
- TOBN(0x3eb70bd3, 0x83279125), TOBN(0xbc3d5b9f, 0x34ecdaab),
- TOBN(0x91e3ed7e, 0x5f755caf), TOBN(0x49699f54, 0xd41e6f02),
- TOBN(0x185770e1, 0xd4a7a15b), TOBN(0x08f3587a, 0xeaac87e7),
- TOBN(0x352018db, 0x473133ea), TOBN(0x674ce719, 0x04fd30fc),
- TOBN(0x7b8d9835, 0x088b3e0e), TOBN(0x7a0356a9, 0x5d0d47a1),
- TOBN(0x9d9e7659, 0x6474a3c4), TOBN(0x61ea48a7, 0xff66966c),
- TOBN(0x30417758, 0x0f3e4834), TOBN(0xfdbb21c2, 0x17a9afcb),
- TOBN(0x756fa17f, 0x2f9a67b3), TOBN(0x2a6b2421, 0xa245c1a8),
- TOBN(0x64be2794, 0x4af02291), TOBN(0xade465c6, 0x2a5804fe),
- TOBN(0x8dffbd39, 0xa6f08fd7), TOBN(0xc4efa84c, 0xaa14403b),
- TOBN(0xa1b91b2a, 0x442b0f5c), TOBN(0xb748e317, 0xcf997736),
- TOBN(0x8d1b62bf, 0xcee90e16), TOBN(0x907ae271, 0x0b2078c0),
- TOBN(0xdf31534b, 0x0c9bcddd), TOBN(0x043fb054, 0x39adce83),
- TOBN(0x99031043, 0xd826846a), TOBN(0x61a9c0d6, 0xb144f393),
- TOBN(0xdab48046, 0x47718427), TOBN(0xdf17ff9b, 0x6e830f8b),
- TOBN(0x408d7ee8, 0xe49a1347), TOBN(0x6ac71e23, 0x91c1d4ae),
- TOBN(0xc8cbb9fd, 0x1defd73c), TOBN(0x19840657, 0xbbbbfec5),
- TOBN(0x39db1cb5, 0x9e7ef8ea), TOBN(0x78aa8296, 0x64105f30),
- TOBN(0xa3d9b7f0, 0xa3738c29), TOBN(0x0a2f235a, 0xbc3250a3),
- TOBN(0x55e506f6, 0x445e4caf), TOBN(0x0974f73d, 0x33475f7a),
- TOBN(0xd37dbba3, 0x5ba2f5a8), TOBN(0x542c6e63, 0x6af40066),
- TOBN(0x26d99b53, 0xc5d73e2c), TOBN(0x06060d7d, 0x6c3ca33e),
- TOBN(0xcdbef1c2, 0x065fef4a), TOBN(0x77e60f7d, 0xfd5b92e3),
- TOBN(0xd7c549f0, 0x26708350), TOBN(0x201b3ad0, 0x34f121bf),
- TOBN(0x5fcac2a1, 0x0334fc14), TOBN(0x8a9a9e09, 0x344552f6),
- TOBN(0x7dd8a1d3, 0x97653082), TOBN(0x5fc0738f, 0x79d4f289),
- TOBN(0x787d244d, 0x17d2d8c3), TOBN(0xeffc6345, 0x70830684),
- TOBN(0x5ddb96dd, 0xe4f73ae5), TOBN(0x8efb14b1, 0x172549a5),
- TOBN(0x6eb73eee, 0x2245ae7a), TOBN(0xbca4061e, 0xea11f13e),
- TOBN(0xb577421d, 0x30b01f5d), TOBN(0xaa688b24, 0x782e152c),
- TOBN(0x67608e71, 0xbd3502ba), TOBN(0x4ef41f24, 0xb4de75a0),
- TOBN(0xb08dde5e, 0xfd6125e5), TOBN(0xde484825, 0xa409543f),
- TOBN(0x1f198d98, 0x65cc2295), TOBN(0x428a3771, 0x6e0edfa2),
- TOBN(0x4f9697a2, 0xadf35fc7), TOBN(0x01a43c79, 0xf7cac3c7),
- TOBN(0xb05d7059, 0x0fd3659a), TOBN(0x8927f30c, 0xbb7f2d9a),
- TOBN(0x4023d1ac, 0x8cf984d3), TOBN(0x32125ed3, 0x02897a45),
- TOBN(0xfb572dad, 0x3d414205), TOBN(0x73000ef2, 0xe3fa82a9),
- TOBN(0x4c0868e9, 0xf10a5581), TOBN(0x5b61fc67, 0x6b0b3ca5),
- TOBN(0xc1258d5b, 0x7cae440c), TOBN(0x21c08b41, 0x402b7531),
- TOBN(0xf61a8955, 0xde932321), TOBN(0x3568faf8, 0x2d1408af),
- TOBN(0x71b15e99, 0x9ecf965b), TOBN(0xf14ed248, 0xe917276f),
- TOBN(0xc6f4caa1, 0x820cf9e2), TOBN(0x681b20b2, 0x18d83c7e),
- TOBN(0x6cde738d, 0xc6c01120), TOBN(0x71db0813, 0xae70e0db),
- TOBN(0x95fc0644, 0x74afe18c), TOBN(0x34619053, 0x129e2be7),
- TOBN(0x80615cea, 0xdb2a3b15), TOBN(0x0a49a19e, 0xdb4c7073),
- TOBN(0x0e1b84c8, 0x8fd2d367), TOBN(0xd74bf462, 0x033fb8aa),
- TOBN(0x889f6d65, 0x533ef217), TOBN(0x7158c7e4, 0xc3ca2e87),
- TOBN(0xfb670dfb, 0xdc2b4167), TOBN(0x75910a01, 0x844c257f),
- TOBN(0xf336bf07, 0xcf88577d), TOBN(0x22245250, 0xe45e2ace),
- TOBN(0x2ed92e8d, 0x7ca23d85), TOBN(0x29f8be4c, 0x2b812f58),
- TOBN(0xdd9ebaa7, 0x076fe12b), TOBN(0x3f2400cb, 0xae1537f9),
- TOBN(0x1aa93528, 0x17bdfb46), TOBN(0xc0f98430, 0x67883b41),
- TOBN(0x5590ede1, 0x0170911d), TOBN(0x7562f5bb, 0x34d4b17f),
- TOBN(0xe1fa1df2, 0x1826b8d2), TOBN(0xb40b796a, 0x6bd80d59),
- TOBN(0xd65bf197, 0x3467ba92), TOBN(0x8c9b46db, 0xf70954b0),
- TOBN(0x97c8a0f3, 0x0e78f15d), TOBN(0xa8f3a69a, 0x85a4c961),
- TOBN(0x4242660f, 0x61e4ce9b), TOBN(0xbf06aab3, 0x6ea6790c),
- TOBN(0xc6706f8e, 0xec986416), TOBN(0x9e56dec1, 0x9a9fc225),
- TOBN(0x527c46f4, 0x9a9898d9), TOBN(0xd799e77b, 0x5633cdef),
- TOBN(0x24eacc16, 0x7d9e4297), TOBN(0xabb61cea, 0x6b1cb734),
- TOBN(0xbee2e8a7, 0xf778443c), TOBN(0x3bb42bf1, 0x29de2fe6),
- TOBN(0xcbed86a1, 0x3003bb6f), TOBN(0xd3918e6c, 0xd781cdf6),
- TOBN(0x4bee3271, 0x9a5103f1), TOBN(0x5243efc6, 0xf50eac06),
- TOBN(0xb8e122cb, 0x6adcc119), TOBN(0x1b7faa84, 0xc0b80a08),
- TOBN(0x32c3d1bd, 0x6dfcd08c), TOBN(0x129dec4e, 0x0be427de),
- TOBN(0x98ab679c, 0x1d263c83), TOBN(0xafc83cb7, 0xcef64eff),
- TOBN(0x85eb6088, 0x2fa6be76), TOBN(0x892585fb, 0x1328cbfe),
- TOBN(0xc154d3ed, 0xcf618dda), TOBN(0xc44f601b, 0x3abaf26e),
- TOBN(0x7bf57d0b, 0x2be1fdfd), TOBN(0xa833bd2d, 0x21137fee),
- TOBN(0x9353af36, 0x2db591a8), TOBN(0xc76f26dc, 0x5562a056),
- TOBN(0x1d87e47d, 0x3fdf5a51), TOBN(0x7afb5f93, 0x55c9cab0),
- TOBN(0x91bbf58f, 0x89e0586e), TOBN(0x7c72c018, 0x0d843709),
- TOBN(0xa9a5aafb, 0x99b5c3dc), TOBN(0xa48a0f1d, 0x3844aeb0),
- TOBN(0x7178b7dd, 0xb667e482), TOBN(0x453985e9, 0x6e23a59a),
- TOBN(0x4a54c860, 0x01b25dd8), TOBN(0x0dd37f48, 0xfb897c8a),
- TOBN(0x5f8aa610, 0x0ea90cd9), TOBN(0xc8892c68, 0x16d5830d),
- TOBN(0xeb4befc0, 0xef514ca5), TOBN(0x478eb679, 0xe72c9ee6),
- TOBN(0x9bca20da, 0xdbc40d5f), TOBN(0xf015de21, 0xdde4f64a),
- TOBN(0xaa6a4de0, 0xeaf4b8a5), TOBN(0x68cfd9ca, 0x4bc60e32),
- TOBN(0x668a4b01, 0x7fd15e70), TOBN(0xd9f0694a, 0xf27dc09d),
- TOBN(0xf6c3cad5, 0xba708bcd), TOBN(0x5cd2ba69, 0x5bb95c2a),
- TOBN(0xaa28c1d3, 0x33c0a58f), TOBN(0x23e274e3, 0xabc77870),
- TOBN(0x44c3692d, 0xdfd20a4a), TOBN(0x091c5fd3, 0x81a66653),
- TOBN(0x6c0bb691, 0x09a0757d), TOBN(0x9072e8b9, 0x667343ea),
- TOBN(0x31d40eb0, 0x80848bec), TOBN(0x95bd480a, 0x79fd36cc),
- TOBN(0x01a77c61, 0x65ed43f5), TOBN(0xafccd127, 0x2e0d40bf),
- TOBN(0xeccfc82d, 0x1cc1884b), TOBN(0xc85ac201, 0x5d4753b4),
- TOBN(0xc7a6caac, 0x658e099f), TOBN(0xcf46369e, 0x04b27390),
- TOBN(0xe2e7d049, 0x506467ea), TOBN(0x481b63a2, 0x37cdeccc),
- TOBN(0x4029abd8, 0xed80143a), TOBN(0x28bfe3c7, 0xbcb00b88),
- TOBN(0x3bec1009, 0x0643d84a), TOBN(0x885f3668, 0xabd11041),
- TOBN(0xdb02432c, 0xf83a34d6), TOBN(0x32f7b360, 0x719ceebe),
- TOBN(0xf06c7837, 0xdad1fe7a), TOBN(0x60a157a9, 0x5441a0b0),
- TOBN(0x704970e9, 0xe2d47550), TOBN(0xcd2bd553, 0x271b9020),
- TOBN(0xff57f82f, 0x33e24a0b), TOBN(0x9cbee23f, 0xf2565079),
- TOBN(0x16353427, 0xeb5f5825), TOBN(0x276feec4, 0xe948d662),
- TOBN(0xd1b62bc6, 0xda10032b), TOBN(0x718351dd, 0xf0e72a53),
- TOBN(0x93452076, 0x2420e7ba), TOBN(0x96368fff, 0x3a00118d),
- TOBN(0x00ce2d26, 0x150a49e4), TOBN(0x0c28b636, 0x3f04706b),
- TOBN(0xbad65a46, 0x58b196d0), TOBN(0x6c8455fc, 0xec9f8b7c),
- TOBN(0xe90c895f, 0x2d71867e), TOBN(0x5c0be31b, 0xedf9f38c),
- TOBN(0x2a37a15e, 0xd8f6ec04), TOBN(0x239639e7, 0x8cd85251),
- TOBN(0xd8975315, 0x9c7c4c6b), TOBN(0x603aa3c0, 0xd7409af7),
- TOBN(0xb8d53d0c, 0x007132fb), TOBN(0x68d12af7, 0xa6849238),
- TOBN(0xbe0607e7, 0xbf5d9279), TOBN(0x9aa50055, 0xaada74ce),
- TOBN(0xe81079cb, 0xba7e8ccb), TOBN(0x610c71d1, 0xa5f4ff5e),
- TOBN(0x9e2ee1a7, 0x5aa07093), TOBN(0xca84004b, 0xa75da47c),
- TOBN(0x074d3951, 0x3de75401), TOBN(0xf938f756, 0xbb311592),
- TOBN(0x96197618, 0x00a43421), TOBN(0x39a25362, 0x07bc78c8),
- TOBN(0x278f710a, 0x0a171276), TOBN(0xb28446ea, 0x8d1a8f08),
- TOBN(0x184781bf, 0xe3b6a661), TOBN(0x7751cb1d, 0xe6d279f7),
- TOBN(0xf8ff95d6, 0xc59eb662), TOBN(0x186d90b7, 0x58d3dea7),
- TOBN(0x0e4bb6c1, 0xdfb4f754), TOBN(0x5c5cf56b, 0x2b2801dc),
- TOBN(0xc561e452, 0x1f54564d), TOBN(0xb4fb8c60, 0xf0dd7f13),
- TOBN(0xf8849630, 0x33ff98c7), TOBN(0x9619fffa, 0xcf17769c),
- TOBN(0xf8090bf6, 0x1bfdd80a), TOBN(0x14d9a149, 0x422cfe63),
- TOBN(0xb354c360, 0x6f6df9ea), TOBN(0xdbcf770d, 0x218f17ea),
- TOBN(0x207db7c8, 0x79eb3480), TOBN(0x213dbda8, 0x559b6a26),
- TOBN(0xac4c200b, 0x29fc81b3), TOBN(0xebc3e09f, 0x171d87c1),
- TOBN(0x91799530, 0x1481aa9e), TOBN(0x051b92e1, 0x92e114fa),
- TOBN(0xdf8f92e9, 0xecb5537f), TOBN(0x44b1b2cc, 0x290c7483),
- TOBN(0xa711455a, 0x2adeb016), TOBN(0x964b6856, 0x81a10c2c),
- TOBN(0x4f159d99, 0xcec03623), TOBN(0x05532225, 0xef3271ea),
- TOBN(0xb231bea3, 0xc5ee4849), TOBN(0x57a54f50, 0x7094f103),
- TOBN(0x3e2d421d, 0x9598b352), TOBN(0xe865a49c, 0x67412ab4),
- TOBN(0xd2998a25, 0x1cc3a912), TOBN(0x5d092808, 0x0c74d65d),
- TOBN(0x73f45908, 0x4088567a), TOBN(0xeb6b280e, 0x1f214a61),
- TOBN(0x8c9adc34, 0xcaf0c13d), TOBN(0x39d12938, 0xf561fb80),
- TOBN(0xb2dc3a5e, 0xbc6edfb4), TOBN(0x7485b1b1, 0xfe4d210e),
- TOBN(0x062e0400, 0xe186ae72), TOBN(0x91e32d5c, 0x6eeb3b88),
- TOBN(0x6df574d7, 0x4be59224), TOBN(0xebc88ccc, 0x716d55f3),
- TOBN(0x26c2e6d0, 0xcad6ed33), TOBN(0xc6e21e7d, 0x0d3e8b10),
- TOBN(0x2cc5840e, 0x5bcc36bb), TOBN(0x9292445e, 0x7da74f69),
- TOBN(0x8be8d321, 0x4e5193a8), TOBN(0x3ec23629, 0x8df06413),
- TOBN(0xc7e9ae85, 0xb134defa), TOBN(0x6073b1d0, 0x1bb2d475),
- TOBN(0xb9ad615e, 0x2863c00d), TOBN(0x9e29493d, 0x525f4ac4),
- TOBN(0xc32b1dea, 0x4e9acf4f), TOBN(0x3e1f01c8, 0xa50db88d),
- TOBN(0xb05d70ea, 0x04da916c), TOBN(0x714b0d0a, 0xd865803e),
- TOBN(0x4bd493fc, 0x9920cb5e), TOBN(0x5b44b1f7, 0x92c7a3ac),
- TOBN(0xa2a77293, 0xbcec9235), TOBN(0x5ee06e87, 0xcd378553),
- TOBN(0xceff8173, 0xda621607), TOBN(0x2bb03e4c, 0x99f5d290),
- TOBN(0x2945106a, 0xa6f734ac), TOBN(0xb5056604, 0xd25c4732),
- TOBN(0x5945920c, 0xe079afee), TOBN(0x686e17a0, 0x6789831f),
- TOBN(0x5966bee8, 0xb74a5ae5), TOBN(0x38a673a2, 0x1e258d46),
- TOBN(0xbd1cc1f2, 0x83141c95), TOBN(0x3b2ecf4f, 0x0e96e486),
- TOBN(0xcd3aa896, 0x74e5fc78), TOBN(0x415ec10c, 0x2482fa7a),
- TOBN(0x15234419, 0x80503380), TOBN(0x513d917a, 0xd314b392),
- TOBN(0xb0b52f4e, 0x63caecae), TOBN(0x07bf22ad, 0x2dc7780b),
- TOBN(0xe761e8a1, 0xe4306839), TOBN(0x1b3be962, 0x5dd7feaa),
- TOBN(0x4fe728de, 0x74c778f1), TOBN(0xf1fa0bda, 0x5e0070f6),
- TOBN(0x85205a31, 0x6ec3f510), TOBN(0x2c7e4a14, 0xd2980475),
- TOBN(0xde3c19c0, 0x6f30ebfd), TOBN(0xdb1c1f38, 0xd4b7e644),
- TOBN(0xfe291a75, 0x5dce364a), TOBN(0xb7b22a3c, 0x058f5be3),
- TOBN(0x2cd2c302, 0x37fea38c), TOBN(0x2930967a, 0x2e17be17),
- TOBN(0x87f009de, 0x0c061c65), TOBN(0xcb014aac, 0xedc6ed44),
- TOBN(0x49bd1cb4, 0x3bafb1eb), TOBN(0x81bd8b5c, 0x282d3688),
- TOBN(0x1cdab87e, 0xf01a17af), TOBN(0x21f37ac4, 0xe710063b),
- TOBN(0x5a6c5676, 0x42fc8193), TOBN(0xf4753e70, 0x56a6015c),
- TOBN(0x020f795e, 0xa15b0a44), TOBN(0x8f37c8d7, 0x8958a958),
- TOBN(0x63b7e89b, 0xa4b675b5), TOBN(0xb4fb0c0c, 0x0fc31aea),
- TOBN(0xed95e639, 0xa7ff1f2e), TOBN(0x9880f5a3, 0x619614fb),
- TOBN(0xdeb6ff02, 0x947151ab), TOBN(0x5bc5118c, 0xa868dcdb),
- TOBN(0xd8da2055, 0x4c20cea5), TOBN(0xcac2776e, 0x14c4d69a),
- TOBN(0xcccb22c1, 0x622d599b), TOBN(0xa4ddb653, 0x68a9bb50),
- TOBN(0x2c4ff151, 0x1b4941b4), TOBN(0xe1ff19b4, 0x6efba588),
- TOBN(0x35034363, 0xc48345e0), TOBN(0x45542e3d, 0x1e29dfc4),
- TOBN(0xf197cb91, 0x349f7aed), TOBN(0x3b2b5a00, 0x8fca8420),
- TOBN(0x7c175ee8, 0x23aaf6d8), TOBN(0x54dcf421, 0x35af32b6),
- TOBN(0x0ba14307, 0x27d6561e), TOBN(0x879d5ee4, 0xd175b1e2),
- TOBN(0xc7c43673, 0x99807db5), TOBN(0x77a54455, 0x9cd55bcd),
- TOBN(0xe6c2ff13, 0x0105c072), TOBN(0x18f7a99f, 0x8dda7da4),
- TOBN(0x4c301820, 0x0e2d35c1), TOBN(0x06a53ca0, 0xd9cc6c82),
- TOBN(0xaa21cc1e, 0xf1aa1d9e), TOBN(0x32414334, 0x4a75b1e8),
- TOBN(0x2a6d1328, 0x0ebe9fdc), TOBN(0x16bd173f, 0x98a4755a),
- TOBN(0xfbb9b245, 0x2133ffd9), TOBN(0x39a8b2f1, 0x830f1a20),
- TOBN(0x484bc97d, 0xd5a1f52a), TOBN(0xd6aebf56, 0xa40eddf8),
- TOBN(0x32257acb, 0x76ccdac6), TOBN(0xaf4d36ec, 0x1586ff27),
- TOBN(0x8eaa8863, 0xf8de7dd1), TOBN(0x0045d5cf, 0x88647c16)},
- {TOBN(0xa6f3d574, 0xc005979d), TOBN(0xc2072b42, 0x6a40e350),
- TOBN(0xfca5c156, 0x8de2ecf9), TOBN(0xa8c8bf5b, 0xa515344e),
- TOBN(0x97aee555, 0x114df14a), TOBN(0xd4374a4d, 0xfdc5ec6b),
- TOBN(0x754cc28f, 0x2ca85418), TOBN(0x71cb9e27, 0xd3c41f78),
- TOBN(0x89105079, 0x03605c39), TOBN(0xf0843d9e, 0xa142c96c),
- TOBN(0xf3744934, 0x16923684), TOBN(0x732caa2f, 0xfa0a2893),
- TOBN(0xb2e8c270, 0x61160170), TOBN(0xc32788cc, 0x437fbaa3),
- TOBN(0x39cd818e, 0xa6eda3ac), TOBN(0xe2e94239, 0x9e2b2e07),
- TOBN(0x6967d39b, 0x0260e52a), TOBN(0xd42585cc, 0x90653325),
- TOBN(0x0d9bd605, 0x21ca7954), TOBN(0x4fa20877, 0x81ed57b3),
- TOBN(0x60c1eff8, 0xe34a0bbe), TOBN(0x56b0040c, 0x84f6ef64),
- TOBN(0x28be2b24, 0xb1af8483), TOBN(0xb2278163, 0xf5531614),
- TOBN(0x8df27545, 0x5922ac1c), TOBN(0xa7b3ef5c, 0xa52b3f63),
- TOBN(0x8e77b214, 0x71de57c4), TOBN(0x31682c10, 0x834c008b),
- TOBN(0xc76824f0, 0x4bd55d31), TOBN(0xb6d1c086, 0x17b61c71),
- TOBN(0x31db0903, 0xc2a5089d), TOBN(0x9c092172, 0x184e5d3f),
- TOBN(0xdd7ced5b, 0xc00cc638), TOBN(0x1a2015eb, 0x61278fc2),
- TOBN(0x2e8e5288, 0x6a37f8d6), TOBN(0xc457786f, 0xe79933ad),
- TOBN(0xb3fe4cce, 0x2c51211a), TOBN(0xad9b10b2, 0x24c20498),
- TOBN(0x90d87a4f, 0xd28db5e5), TOBN(0x698cd105, 0x3aca2fc3),
- TOBN(0x4f112d07, 0xe91b536d), TOBN(0xceb982f2, 0x9eba09d6),
- TOBN(0x3c157b2c, 0x197c396f), TOBN(0xe23c2d41, 0x7b66eb24),
- TOBN(0x480c57d9, 0x3f330d37), TOBN(0xb3a4c8a1, 0x79108deb),
- TOBN(0x702388de, 0xcb199ce5), TOBN(0x0b019211, 0xb944a8d4),
- TOBN(0x24f2a692, 0x840bb336), TOBN(0x7c353bdc, 0xa669fa7b),
- TOBN(0xda20d6fc, 0xdec9c300), TOBN(0x625fbe2f, 0xa13a4f17),
- TOBN(0xa2b1b61a, 0xdbc17328), TOBN(0x008965bf, 0xa9515621),
- TOBN(0x49690939, 0xc620ff46), TOBN(0x182dd27d, 0x8717e91c),
- TOBN(0x5ace5035, 0xea6c3997), TOBN(0x54259aaa, 0xc2610bef),
- TOBN(0xef18bb3f, 0x3c80dd39), TOBN(0x6910b95b, 0x5fc3fa39),
- TOBN(0xfce2f510, 0x43e09aee), TOBN(0xced56c9f, 0xa7675665),
- TOBN(0x10e265ac, 0xd872db61), TOBN(0x6982812e, 0xae9fce69),
- TOBN(0x29be11c6, 0xce800998), TOBN(0x72bb1752, 0xb90360d9),
- TOBN(0x2c193197, 0x5a4ad590), TOBN(0x2ba2f548, 0x9fc1dbc0),
- TOBN(0x7fe4eebb, 0xe490ebe0), TOBN(0x12a0a4cd, 0x7fae11c0),
- TOBN(0x7197cf81, 0xe903ba37), TOBN(0xcf7d4aa8, 0xde1c6dd8),
- TOBN(0x92af6bf4, 0x3fd5684c), TOBN(0x2b26eecf, 0x80360aa1),
- TOBN(0xbd960f30, 0x00546a82), TOBN(0x407b3c43, 0xf59ad8fe),
- TOBN(0x86cae5fe, 0x249c82ba), TOBN(0x9e0faec7, 0x2463744c),
- TOBN(0x87f551e8, 0x94916272), TOBN(0x033f9344, 0x6ceb0615),
- TOBN(0x1e5eb0d1, 0x8be82e84), TOBN(0x89967f0e, 0x7a582fef),
- TOBN(0xbcf687d5, 0xa6e921fa), TOBN(0xdfee4cf3, 0xd37a09ba),
- TOBN(0x94f06965, 0xb493c465), TOBN(0x638b9a1c, 0x7635c030),
- TOBN(0x76667864, 0x66f05e9f), TOBN(0xccaf6808, 0xc04da725),
- TOBN(0xca2eb690, 0x768fccfc), TOBN(0xf402d37d, 0xb835b362),
- TOBN(0x0efac0d0, 0xe2fdfcce), TOBN(0xefc9cdef, 0xb638d990),
- TOBN(0x2af12b72, 0xd1669a8b), TOBN(0x33c536bc, 0x5774ccbd),
- TOBN(0x30b21909, 0xfb34870e), TOBN(0xc38fa2f7, 0x7df25aca),
- TOBN(0x74c5f02b, 0xbf81f3f5), TOBN(0x0525a5ae, 0xaf7e4581),
- TOBN(0x88d2aaba, 0x433c54ae), TOBN(0xed9775db, 0x806a56c5),
- TOBN(0xd320738a, 0xc0edb37d), TOBN(0x25fdb6ee, 0x66cc1f51),
- TOBN(0xac661d17, 0x10600d76), TOBN(0x931ec1f3, 0xbdd1ed76),
- TOBN(0x65c11d62, 0x19ee43f1), TOBN(0x5cd57c3e, 0x60829d97),
- TOBN(0xd26c91a3, 0x984be6e8), TOBN(0xf08d9309, 0x8b0c53bd),
- TOBN(0x94bc9e5b, 0xc016e4ea), TOBN(0xd3916839, 0x11d43d2b),
- TOBN(0x886c5ad7, 0x73701155), TOBN(0xe0377626, 0x20b00715),
- TOBN(0x7f01c9ec, 0xaa80ba59), TOBN(0x3083411a, 0x68538e51),
- TOBN(0x970370f1, 0xe88128af), TOBN(0x625cc3db, 0x91dec14b),
- TOBN(0xfef9666c, 0x01ac3107), TOBN(0xb2a8d577, 0xd5057ac3),
- TOBN(0xb0f26299, 0x92be5df7), TOBN(0xf579c8e5, 0x00353924),
- TOBN(0xb8fa3d93, 0x1341ed7a), TOBN(0x4223272c, 0xa7b59d49),
- TOBN(0x3dcb1947, 0x83b8c4a4), TOBN(0x4e413c01, 0xed1302e4),
- TOBN(0x6d999127, 0xe17e44ce), TOBN(0xee86bf75, 0x33b3adfb),
- TOBN(0xf6902fe6, 0x25aa96ca), TOBN(0xb73540e4, 0xe5aae47d),
- TOBN(0x32801d7b, 0x1b4a158c), TOBN(0xe571c99e, 0x27e2a369),
- TOBN(0x40cb76c0, 0x10d9f197), TOBN(0xc308c289, 0x3167c0ae),
- TOBN(0xa6ef9dd3, 0xeb7958f2), TOBN(0xa7226dfc, 0x300879b1),
- TOBN(0x6cd0b362, 0x7edf0636), TOBN(0x4efbce6c, 0x7bc37eed),
- TOBN(0x75f92a05, 0x8d699021), TOBN(0x586d4c79, 0x772566e3),
- TOBN(0x378ca5f1, 0x761ad23a), TOBN(0x650d86fc, 0x1465a8ac),
- TOBN(0x7a4ed457, 0x842ba251), TOBN(0x6b65e3e6, 0x42234933),
- TOBN(0xaf1543b7, 0x31aad657), TOBN(0xa4cefe98, 0xcbfec369),
- TOBN(0xb587da90, 0x9f47befb), TOBN(0x6562e9fb, 0x41312d13),
- TOBN(0xa691ea59, 0xeff1cefe), TOBN(0xcc30477a, 0x05fc4cf6),
- TOBN(0xa1632461, 0x0b0ffd3d), TOBN(0xa1f16f3b, 0x5b355956),
- TOBN(0x5b148d53, 0x4224ec24), TOBN(0xdc834e7b, 0xf977012a),
- TOBN(0x7bfc5e75, 0xb2c69dbc), TOBN(0x3aa77a29, 0x03c3da6c),
- TOBN(0xde0df03c, 0xca910271), TOBN(0xcbd5ca4a, 0x7806dc55),
- TOBN(0xe1ca5807, 0x6db476cb), TOBN(0xfde15d62, 0x5f37a31e),
- TOBN(0xf49af520, 0xf41af416), TOBN(0x96c5c5b1, 0x7d342db5),
- TOBN(0x155c43b7, 0xeb4ceb9b), TOBN(0x2e993010, 0x4e77371a),
- TOBN(0x1d2987da, 0x675d43af), TOBN(0xef2bc1c0, 0x8599fd72),
- TOBN(0x96894b7b, 0x9342f6b2), TOBN(0x201eadf2, 0x7c8e71f0),
- TOBN(0xf3479d9f, 0x4a1f3efc), TOBN(0xe0f8a742, 0x702a9704),
- TOBN(0xeafd44b6, 0xb3eba40c), TOBN(0xf9739f29, 0xc1c1e0d0),
- TOBN(0x0091471a, 0x619d505e), TOBN(0xc15f9c96, 0x9d7c263e),
- TOBN(0x5be47285, 0x83afbe33), TOBN(0xa3b6d6af, 0x04f1e092),
- TOBN(0xe76526b9, 0x751a9d11), TOBN(0x2ec5b26d, 0x9a4ae4d2),
- TOBN(0xeb66f4d9, 0x02f6fb8d), TOBN(0x4063c561, 0x96912164),
- TOBN(0xeb7050c1, 0x80ef3000), TOBN(0x288d1c33, 0xeaa5b3f0),
- TOBN(0xe87c68d6, 0x07806fd8), TOBN(0xb2f7f9d5, 0x4bbbf50f),
- TOBN(0x25972f3a, 0xac8d6627), TOBN(0xf8547774, 0x10e8c13b),
- TOBN(0xcc50ef6c, 0x872b4a60), TOBN(0xab2a34a4, 0x4613521b),
- TOBN(0x39c5c190, 0x983e15d1), TOBN(0x61dde5df, 0x59905512),
- TOBN(0xe417f621, 0x9f2275f3), TOBN(0x0750c8b6, 0x451d894b),
- TOBN(0x75b04ab9, 0x78b0bdaa), TOBN(0x3bfd9fd4, 0x458589bd),
- TOBN(0xf1013e30, 0xee9120b6), TOBN(0x2b51af93, 0x23a4743e),
- TOBN(0xea96ffae, 0x48d14d9e), TOBN(0x71dc0dbe, 0x698a1d32),
- TOBN(0x914962d2, 0x0180cca4), TOBN(0x1ae60677, 0xc3568963),
- TOBN(0x8cf227b1, 0x437bc444), TOBN(0xc650c83b, 0xc9962c7a),
- TOBN(0x23c2c7dd, 0xfe7ccfc4), TOBN(0xf925c89d, 0x1b929d48),
- TOBN(0x4460f74b, 0x06783c33), TOBN(0xac2c8d49, 0xa590475a),
- TOBN(0xfb40b407, 0xb807bba0), TOBN(0x9d1e362d, 0x69ff8f3a),
- TOBN(0xa33e9681, 0xcbef64a4), TOBN(0x67ece5fa, 0x332fb4b2),
- TOBN(0x6900a99b, 0x739f10e3), TOBN(0xc3341ca9, 0xff525925),
- TOBN(0xee18a626, 0xa9e2d041), TOBN(0xa5a83685, 0x29580ddd),
- TOBN(0xf3470c81, 0x9d7de3cd), TOBN(0xedf02586, 0x2062cf9c),
- TOBN(0xf43522fa, 0xc010edb0), TOBN(0x30314135, 0x13a4b1ae),
- TOBN(0xc792e02a, 0xdb22b94b), TOBN(0x993d8ae9, 0xa1eaa45b),
- TOBN(0x8aad6cd3, 0xcd1e1c63), TOBN(0x89529ca7, 0xc5ce688a),
- TOBN(0x2ccee3aa, 0xe572a253), TOBN(0xe02b6438, 0x02a21efb),
- TOBN(0xa7091b6e, 0xc9430358), TOBN(0x06d1b1fa, 0x9d7db504),
- TOBN(0x58846d32, 0xc4744733), TOBN(0x40517c71, 0x379f9e34),
- TOBN(0x2f65655f, 0x130ef6ca), TOBN(0x526e4488, 0xf1f3503f),
- TOBN(0x8467bd17, 0x7ee4a976), TOBN(0x1d9dc913, 0x921363d1),
- TOBN(0xd8d24c33, 0xb069e041), TOBN(0x5eb5da0a, 0x2cdf7f51),
- TOBN(0x1c0f3cb1, 0x197b994f), TOBN(0x3c95a6c5, 0x2843eae9),
- TOBN(0x7766ffc9, 0xa6097ea5), TOBN(0x7bea4093, 0xd723b867),
- TOBN(0xb48e1f73, 0x4db378f9), TOBN(0x70025b00, 0xe37b77ac),
- TOBN(0x943dc8e7, 0xaf24ad46), TOBN(0xb98a15ac, 0x16d00a85),
- TOBN(0x3adc38ba, 0x2743b004), TOBN(0xb1c7f4f7, 0x334415ee),
- TOBN(0xea43df8f, 0x1e62d05a), TOBN(0x32618905, 0x9d76a3b6),
- TOBN(0x2fbd0bb5, 0xa23a0f46), TOBN(0x5bc971db, 0x6a01918c),
- TOBN(0x7801d94a, 0xb4743f94), TOBN(0xb94df65e, 0x676ae22b),
- TOBN(0xaafcbfab, 0xaf95894c), TOBN(0x7b9bdc07, 0x276b2241),
- TOBN(0xeaf98362, 0x5bdda48b), TOBN(0x5977faf2, 0xa3fcb4df),
- TOBN(0xbed042ef, 0x052c4b5b), TOBN(0x9fe87f71, 0x067591f0),
- TOBN(0xc89c73ca, 0x22f24ec7), TOBN(0x7d37fa9e, 0xe64a9f1b),
- TOBN(0x2710841a, 0x15562627), TOBN(0x2c01a613, 0xc243b034),
- TOBN(0x1d135c56, 0x2bc68609), TOBN(0xc2ca1715, 0x8b03f1f6),
- TOBN(0xc9966c2d, 0x3eb81d82), TOBN(0xc02abf4a, 0x8f6df13e),
- TOBN(0x77b34bd7, 0x8f72b43b), TOBN(0xaff6218f, 0x360c82b0),
- TOBN(0x0aa5726c, 0x8d55b9d2), TOBN(0xdc0adbe9, 0x99e9bffb),
- TOBN(0x9097549c, 0xefb9e72a), TOBN(0x16755712, 0x9dfb3111),
- TOBN(0xdd8bf984, 0xf26847f9), TOBN(0xbcb8e387, 0xdfb30cb7),
- TOBN(0xc1fd32a7, 0x5171ef9c), TOBN(0x977f3fc7, 0x389b363f),
- TOBN(0x116eaf2b, 0xf4babda0), TOBN(0xfeab68bd, 0xf7113c8e),
- TOBN(0xd1e3f064, 0xb7def526), TOBN(0x1ac30885, 0xe0b3fa02),
- TOBN(0x1c5a6e7b, 0x40142d9d), TOBN(0x839b5603, 0x30921c0b),
- TOBN(0x48f301fa, 0x36a116a3), TOBN(0x380e1107, 0xcfd9ee6d),
- TOBN(0x7945ead8, 0x58854be1), TOBN(0x4111c12e, 0xcbd4d49d),
- TOBN(0xece3b1ec, 0x3a29c2ef), TOBN(0x6356d404, 0x8d3616f5),
- TOBN(0x9f0d6a8f, 0x594d320e), TOBN(0x0989316d, 0xf651ccd2),
- TOBN(0x6c32117a, 0x0f8fdde4), TOBN(0x9abe5cc5, 0xa26a9bbc),
- TOBN(0xcff560fb, 0x9723f671), TOBN(0x21b2a12d, 0x7f3d593c),
- TOBN(0xe4cb18da, 0x24ba0696), TOBN(0x186e2220, 0xc3543384),
- TOBN(0x722f64e0, 0x88312c29), TOBN(0x94282a99, 0x17dc7752),
- TOBN(0x62467bbf, 0x5a85ee89), TOBN(0xf435c650, 0xf10076a0),
- TOBN(0xc9ff1539, 0x43b3a50b), TOBN(0x7132130c, 0x1a53efbc),
- TOBN(0x31bfe063, 0xf7b0c5b7), TOBN(0xb0179a7d, 0x4ea994cc),
- TOBN(0x12d064b3, 0xc85f455b), TOBN(0x47259328, 0x8f6e0062),
- TOBN(0xf64e590b, 0xb875d6d9), TOBN(0x22dd6225, 0xad92bcc7),
- TOBN(0xb658038e, 0xb9c3bd6d), TOBN(0x00cdb0d6, 0xfbba27c8),
- TOBN(0x0c681337, 0x1062c45d), TOBN(0xd8515b8c, 0x2d33407d),
- TOBN(0xcb8f699e, 0x8cbb5ecf), TOBN(0x8c4347f8, 0xc608d7d8),
- TOBN(0x2c11850a, 0xbb3e00db), TOBN(0x20a8dafd, 0xecb49d19),
- TOBN(0xbd781480, 0x45ee2f40), TOBN(0x75e354af, 0x416b60cf),
- TOBN(0xde0b58a1, 0x8d49a8c4), TOBN(0xe40e94e2, 0xfa359536),
- TOBN(0xbd4fa59f, 0x62accd76), TOBN(0x05cf466a, 0x8c762837),
- TOBN(0xb5abda99, 0x448c277b), TOBN(0x5a9e01bf, 0x48b13740),
- TOBN(0x9d457798, 0x326aad8d), TOBN(0xbdef4954, 0xc396f7e7),
- TOBN(0x6fb274a2, 0xc253e292), TOBN(0x2800bf0a, 0x1cfe53e7),
- TOBN(0x22426d31, 0x44438fd4), TOBN(0xef233923, 0x5e259f9a),
- TOBN(0x4188503c, 0x03f66264), TOBN(0x9e5e7f13, 0x7f9fdfab),
- TOBN(0x565eb76c, 0x5fcc1aba), TOBN(0xea632548, 0x59b5bff8),
- TOBN(0x5587c087, 0xaab6d3fa), TOBN(0x92b639ea, 0x6ce39c1b),
- TOBN(0x0706e782, 0x953b135c), TOBN(0x7308912e, 0x425268ef),
- TOBN(0x599e92c7, 0x090e7469), TOBN(0x83b90f52, 0x9bc35e75),
- TOBN(0x4750b3d0, 0x244975b3), TOBN(0xf3a44358, 0x11965d72),
- TOBN(0x179c6774, 0x9c8dc751), TOBN(0xff18cdfe, 0xd23d9ff0),
- TOBN(0xc4013833, 0x2028e247), TOBN(0x96e280e2, 0xf3bfbc79),
- TOBN(0xf60417bd, 0xd0880a84), TOBN(0x263c9f3d, 0x2a568151),
- TOBN(0x36be15b3, 0x2d2ce811), TOBN(0x846dc0c2, 0xf8291d21),
- TOBN(0x5cfa0ecb, 0x789fcfdb), TOBN(0x45a0beed, 0xd7535b9a),
- TOBN(0xec8e9f07, 0x96d69af1), TOBN(0x31a7c5b8, 0x599ab6dc),
- TOBN(0xd36d45ef, 0xf9e2e09f), TOBN(0x3cf49ef1, 0xdcee954b),
- TOBN(0x6be34cf3, 0x086cff9b), TOBN(0x88dbd491, 0x39a3360f),
- TOBN(0x1e96b8cc, 0x0dbfbd1d), TOBN(0xc1e5f7bf, 0xcb7e2552),
- TOBN(0x0547b214, 0x28819d98), TOBN(0xc770dd9c, 0x7aea9dcb),
- TOBN(0xaef0d4c7, 0x041d68c8), TOBN(0xcc2b9818, 0x13cb9ba8),
- TOBN(0x7fc7bc76, 0xfe86c607), TOBN(0x6b7b9337, 0x502a9a95),
- TOBN(0x1948dc27, 0xd14dab63), TOBN(0x249dd198, 0xdae047be),
- TOBN(0xe8356584, 0xa981a202), TOBN(0x3531dd18, 0x3a893387),
- TOBN(0x1be11f90, 0xc85c7209), TOBN(0x93d2fe1e, 0xe2a52b5a),
- TOBN(0x8225bfe2, 0xec6d6b97), TOBN(0x9cf6d6f4, 0xbd0aa5de),
- TOBN(0x911459cb, 0x54779f5f), TOBN(0x5649cddb, 0x86aeb1f3),
- TOBN(0x32133579, 0x3f26ce5a), TOBN(0xc289a102, 0x550f431e),
- TOBN(0x559dcfda, 0x73b84c6f), TOBN(0x84973819, 0xee3ac4d7),
- TOBN(0xb51e55e6, 0xf2606a82), TOBN(0xe25f7061, 0x90f2fb57),
- TOBN(0xacef6c2a, 0xb1a4e37c), TOBN(0x864e359d, 0x5dcf2706),
- TOBN(0x479e6b18, 0x7ce57316), TOBN(0x2cab2500, 0x3a96b23d),
- TOBN(0xed489862, 0x8ef16df7), TOBN(0x2056538c, 0xef3758b5),
- TOBN(0xa7df865e, 0xf15d3101), TOBN(0x80c5533a, 0x61b553d7),
- TOBN(0x366e1997, 0x4ed14294), TOBN(0x6620741f, 0xb3c0bcd6),
- TOBN(0x21d1d9c4, 0xedc45418), TOBN(0x005b859e, 0xc1cc4a9d),
- TOBN(0xdf01f630, 0xa1c462f0), TOBN(0x15d06cf3, 0xf26820c7),
- TOBN(0x9f7f24ee, 0x3484be47), TOBN(0x2ff33e96, 0x4a0c902f),
- TOBN(0x00bdf457, 0x5a0bc453), TOBN(0x2378dfaf, 0x1aa238db),
- TOBN(0x272420ec, 0x856720f2), TOBN(0x2ad9d95b, 0x96797291),
- TOBN(0xd1242cc6, 0x768a1558), TOBN(0x2e287f8b, 0x5cc86aa8),
- TOBN(0x796873d0, 0x990cecaa), TOBN(0xade55f81, 0x675d4080),
- TOBN(0x2645eea3, 0x21f0cd84), TOBN(0x7a1efa0f, 0xb4e17d02),
- TOBN(0xf6858420, 0x037cc061), TOBN(0x682e05f0, 0xd5d43e12),
- TOBN(0x59c36994, 0x27218710), TOBN(0x85cbba4d, 0x3f7cd2fc),
- TOBN(0x726f9729, 0x7a3cd22a), TOBN(0x9f8cd5dc, 0x4a628397),
- TOBN(0x17b93ab9, 0xc23165ed), TOBN(0xff5f5dbf, 0x122823d4),
- TOBN(0xc1e4e4b5, 0x654a446d), TOBN(0xd1a9496f, 0x677257ba),
- TOBN(0x6387ba94, 0xde766a56), TOBN(0x23608bc8, 0x521ec74a),
- TOBN(0x16a522d7, 0x6688c4d4), TOBN(0x9d6b4282, 0x07373abd),
- TOBN(0xa62f07ac, 0xb42efaa3), TOBN(0xf73e00f7, 0xe3b90180),
- TOBN(0x36175fec, 0x49421c3e), TOBN(0xc4e44f9b, 0x3dcf2678),
- TOBN(0x76df436b, 0x7220f09f), TOBN(0x172755fb, 0x3aa8b6cf),
- TOBN(0xbab89d57, 0x446139cc), TOBN(0x0a0a6e02, 0x5fe0208f),
- TOBN(0xcdbb63e2, 0x11e5d399), TOBN(0x33ecaa12, 0xa8977f0b),
- TOBN(0x59598b21, 0xf7c42664), TOBN(0xb3e91b32, 0xab65d08a),
- TOBN(0x035822ee, 0xf4502526), TOBN(0x1dcf0176, 0x720a82a9),
- TOBN(0x50f8598f, 0x3d589e02), TOBN(0xdf0478ff, 0xb1d63d2c),
- TOBN(0x8b8068bd, 0x1571cd07), TOBN(0x30c3aa4f, 0xd79670cd),
- TOBN(0x25e8fd4b, 0x941ade7f), TOBN(0x3d1debdc, 0x32790011),
- TOBN(0x65b6dcbd, 0x3a3f9ff0), TOBN(0x282736a4, 0x793de69c),
- TOBN(0xef69a0c3, 0xd41d3bd3), TOBN(0xb533b8c9, 0x07a26bde),
- TOBN(0xe2801d97, 0xdb2edf9f), TOBN(0xdc4a8269, 0xe1877af0),
- TOBN(0x6c1c5851, 0x3d590dbe), TOBN(0x84632f6b, 0xee4e9357),
- TOBN(0xd36d36b7, 0x79b33374), TOBN(0xb46833e3, 0x9bbca2e6),
- TOBN(0x37893913, 0xf7fc0586), TOBN(0x385315f7, 0x66bf4719),
- TOBN(0x72c56293, 0xb31855dc), TOBN(0xd1416d4e, 0x849061fe),
- TOBN(0xbeb3ab78, 0x51047213), TOBN(0x447f6e61, 0xf040c996),
- TOBN(0xd06d310d, 0x638b1d0c), TOBN(0xe28a413f, 0xbad1522e),
- TOBN(0x685a76cb, 0x82003f86), TOBN(0x610d07f7, 0x0bcdbca3),
- TOBN(0x6ff66021, 0x9ca4c455), TOBN(0x7df39b87, 0xcea10eec),
- TOBN(0xb9255f96, 0xe22db218), TOBN(0x8cc6d9eb, 0x08a34c44),
- TOBN(0xcd4ffb86, 0x859f9276), TOBN(0x8fa15eb2, 0x50d07335),
- TOBN(0xdf553845, 0xcf2c24b5), TOBN(0x89f66a9f, 0x52f9c3ba),
- TOBN(0x8f22b5b9, 0xe4a7ceb3), TOBN(0xaffef809, 0x0e134686),
- TOBN(0x3e53e1c6, 0x8eb8fac2), TOBN(0x93c1e4eb, 0x28aec98e),
- TOBN(0xb6b91ec5, 0x32a43bcb), TOBN(0x2dbfa947, 0xb2d74a51),
- TOBN(0xe065d190, 0xca84bad7), TOBN(0xfb13919f, 0xad58e65c),
- TOBN(0x3c41718b, 0xf1cb6e31), TOBN(0x688969f0, 0x06d05c3f),
- TOBN(0xd4f94ce7, 0x21264d45), TOBN(0xfdfb65e9, 0x7367532b),
- TOBN(0x5b1be8b1, 0x0945a39d), TOBN(0x229f789c, 0x2b8baf3b),
- TOBN(0xd8f41f3e, 0x6f49f15d), TOBN(0x678ce828, 0x907f0792),
- TOBN(0xc69ace82, 0xfca6e867), TOBN(0x106451ae, 0xd01dcc89),
- TOBN(0x1bb4f7f0, 0x19fc32d2), TOBN(0x64633dfc, 0xb00c52d2),
- TOBN(0x8f13549a, 0xad9ea445), TOBN(0x99a3bf50, 0xfb323705),
- TOBN(0x0c9625a2, 0x534d4dbc), TOBN(0x45b8f1d1, 0xc2a2fea3),
- TOBN(0x76ec21a1, 0xa530fc1a), TOBN(0x4bac9c2a, 0x9e5bd734),
- TOBN(0x5996d76a, 0x7b4e3587), TOBN(0x0045cdee, 0x1182d9e3),
- TOBN(0x1aee24b9, 0x1207f13d), TOBN(0x66452e97, 0x97345a41),
- TOBN(0x16e5b054, 0x9f950cd0), TOBN(0x9cc72fb1, 0xd7fdd075),
- TOBN(0x6edd61e7, 0x66249663), TOBN(0xde4caa4d, 0xf043cccb),
- TOBN(0x11b1f57a, 0x55c7ac17), TOBN(0x779cbd44, 0x1a85e24d),
- TOBN(0x78030f86, 0xe46081e7), TOBN(0xfd4a6032, 0x8e20f643),
- TOBN(0xcc7a6488, 0x0a750c0f), TOBN(0x39bacfe3, 0x4e548e83),
- TOBN(0x3d418c76, 0x0c110f05), TOBN(0x3e4daa4c, 0xb1f11588),
- TOBN(0x2733e7b5, 0x5ffc69ff), TOBN(0x46f147bc, 0x92053127),
- TOBN(0x885b2434, 0xd722df94), TOBN(0x6a444f65, 0xe6fc6b7c)},
- {TOBN(0x7a1a465a, 0xc3f16ea8), TOBN(0x115a461d, 0xb2f1d11c),
- TOBN(0x4767dd95, 0x6c68a172), TOBN(0x3392f2eb, 0xd13a4698),
- TOBN(0xc7a99ccd, 0xe526cdc7), TOBN(0x8e537fdc, 0x22292b81),
- TOBN(0x76d8cf69, 0xa6d39198), TOBN(0xffc5ff43, 0x2446852d),
- TOBN(0x97b14f7e, 0xa90567e6), TOBN(0x513257b7, 0xb6ae5cb7),
- TOBN(0x85454a3c, 0x9f10903d), TOBN(0xd8d2c9ad, 0x69bc3724),
- TOBN(0x38da9324, 0x6b29cb44), TOBN(0xb540a21d, 0x77c8cbac),
- TOBN(0x9bbfe435, 0x01918e42), TOBN(0xfffa707a, 0x56c3614e),
- TOBN(0x0ce4e3f1, 0xd4e353b7), TOBN(0x062d8a14, 0xef46b0a0),
- TOBN(0x6408d5ab, 0x574b73fd), TOBN(0xbc41d1c9, 0xd3273ffd),
- TOBN(0x3538e1e7, 0x6be77800), TOBN(0x71fe8b37, 0xc5655031),
- TOBN(0x1cd91621, 0x6b9b331a), TOBN(0xad825d0b, 0xbb388f73),
- TOBN(0x56c2e05b, 0x1cb76219), TOBN(0x0ec0bf91, 0x71567e7e),
- TOBN(0xe7076f86, 0x61c4c910), TOBN(0xd67b085b, 0xbabc04d9),
- TOBN(0x9fb90459, 0x5e93a96a), TOBN(0x7526c1ea, 0xfbdc249a),
- TOBN(0x0d44d367, 0xecdd0bb7), TOBN(0x95399917, 0x9dc0d695),
- TOBN(0x61360ee9, 0x9e240d18), TOBN(0x057cdcac, 0xb4b94466),
- TOBN(0xe7667cd1, 0x2fe5325c), TOBN(0x1fa297b5, 0x21974e3b),
- TOBN(0xfa4081e7, 0xdb083d76), TOBN(0x31993be6, 0xf206bd15),
- TOBN(0x8949269b, 0x14c19f8c), TOBN(0x21468d72, 0xa9d92357),
- TOBN(0x2ccbc583, 0xa4c506ec), TOBN(0x957ed188, 0xd1acfe97),
- TOBN(0x8baed833, 0x12f1aea2), TOBN(0xef2a6cb4, 0x8325362d),
- TOBN(0x130dde42, 0x8e195c43), TOBN(0xc842025a, 0x0e6050c6),
- TOBN(0x2da972a7, 0x08686a5d), TOBN(0xb52999a1, 0xe508b4a8),
- TOBN(0xd9f090b9, 0x10a5a8bd), TOBN(0xca91d249, 0x096864da),
- TOBN(0x8e6a93be, 0x3f67dbc1), TOBN(0xacae6fba, 0xf5f4764c),
- TOBN(0x1563c6e0, 0xd21411a0), TOBN(0x28fa787f, 0xda0a4ad8),
- TOBN(0xd524491c, 0x908c8030), TOBN(0x1257ba0e, 0x4c795f07),
- TOBN(0x83f49167, 0xceca9754), TOBN(0x426d2cf6, 0x4b7939a0),
- TOBN(0x2555e355, 0x723fd0bf), TOBN(0xa96e6d06, 0xc4f144e2),
- TOBN(0x4768a8dd, 0x87880e61), TOBN(0x15543815, 0xe508e4d5),
- TOBN(0x09d7e772, 0xb1b65e15), TOBN(0x63439dd6, 0xac302fa0),
- TOBN(0xb93f802f, 0xc14e35c2), TOBN(0x71735b7c, 0x4341333c),
- TOBN(0x03a25104, 0x16d4f362), TOBN(0x3f4d069b, 0xbf433c8e),
- TOBN(0x0d83ae01, 0xf78f5a7c), TOBN(0x50a8ffbe, 0x7c4eed07),
- TOBN(0xc74f8906, 0x76e10f83), TOBN(0x7d080966, 0x9ddaf8e1),
- TOBN(0xb11df8e1, 0x698e04cc), TOBN(0x877be203, 0x169005c8),
- TOBN(0x32749e8c, 0x4f3c6179), TOBN(0x2dbc9d0a, 0x7853fc05),
- TOBN(0x187d4f93, 0x9454d937), TOBN(0xe682ce9d, 0xb4800e1b),
- TOBN(0xa9129ad8, 0x165e68e8), TOBN(0x0fe29735, 0xbe7f785b),
- TOBN(0x5303f40c, 0x5b9e02b7), TOBN(0xa37c9692, 0x35ee04e8),
- TOBN(0x5f46cc20, 0x34d6632b), TOBN(0x55ef72b2, 0x96ac545b),
- TOBN(0xabec5c1f, 0x7b91b062), TOBN(0x0a79e1c7, 0xbb33e821),
- TOBN(0xbb04b428, 0x3a9f4117), TOBN(0x0de1f28f, 0xfd2a475a),
- TOBN(0x31019ccf, 0x3a4434b4), TOBN(0xa3458111, 0x1a7954dc),
- TOBN(0xa9dac80d, 0xe34972a7), TOBN(0xb043d054, 0x74f6b8dd),
- TOBN(0x021c319e, 0x11137b1a), TOBN(0x00a754ce, 0xed5cc03f),
- TOBN(0x0aa2c794, 0xcbea5ad4), TOBN(0x093e67f4, 0x70c015b6),
- TOBN(0x72cdfee9, 0xc97e3f6b), TOBN(0xc10bcab4, 0xb6da7461),
- TOBN(0x3b02d2fc, 0xb59806b9), TOBN(0x85185e89, 0xa1de6f47),
- TOBN(0x39e6931f, 0x0eb6c4d4), TOBN(0x4d4440bd, 0xd4fa5b04),
- TOBN(0x5418786e, 0x34be7eb8), TOBN(0x6380e521, 0x9d7259bc),
- TOBN(0x20ac0351, 0xd598d710), TOBN(0x272c4166, 0xcb3a4da4),
- TOBN(0xdb82fe1a, 0xca71de1f), TOBN(0x746e79f2, 0xd8f54b0f),
- TOBN(0x6e7fc736, 0x4b573e9b), TOBN(0x75d03f46, 0xfd4b5040),
- TOBN(0x5c1cc36d, 0x0b98d87b), TOBN(0x513ba3f1, 0x1f472da1),
- TOBN(0x79d0af26, 0xabb177dd), TOBN(0xf82ab568, 0x7891d564),
- TOBN(0x2b6768a9, 0x72232173), TOBN(0xefbb3bb0, 0x8c1f6619),
- TOBN(0xb29c11db, 0xa6d18358), TOBN(0x519e2797, 0xb0916d3a),
- TOBN(0xd4dc18f0, 0x9188e290), TOBN(0x648e86e3, 0x98b0ca7f),
- TOBN(0x859d3145, 0x983c38b5), TOBN(0xb14f176c, 0x637abc8b),
- TOBN(0x2793fb9d, 0xcaff7be6), TOBN(0xebe5a55f, 0x35a66a5a),
- TOBN(0x7cec1dcd, 0x9f87dc59), TOBN(0x7c595cd3, 0xfbdbf560),
- TOBN(0x5b543b22, 0x26eb3257), TOBN(0x69080646, 0xc4c935fd),
- TOBN(0x7f2e4403, 0x81e9ede3), TOBN(0x243c3894, 0xcaf6df0a),
- TOBN(0x7c605bb1, 0x1c073b11), TOBN(0xcd06a541, 0xba6a4a62),
- TOBN(0x29168949, 0x49d4e2e5), TOBN(0x33649d07, 0x4af66880),
- TOBN(0xbfc0c885, 0xe9a85035), TOBN(0xb4e52113, 0xfc410f4b),
- TOBN(0xdca3b706, 0x78a6513b), TOBN(0x92ea4a2a, 0x9edb1943),
- TOBN(0x02642216, 0xdb6e2dd8), TOBN(0x9b45d0b4, 0x9fd57894),
- TOBN(0x114e70db, 0xc69d11ae), TOBN(0x1477dd19, 0x4c57595f),
- TOBN(0xbc2208b4, 0xec77c272), TOBN(0x95c5b4d7, 0xdb68f59c),
- TOBN(0xb8c4fc63, 0x42e532b7), TOBN(0x386ba422, 0x9ae35290),
- TOBN(0xfb5dda42, 0xd201ecbc), TOBN(0x2353dc8b, 0xa0e38fd6),
- TOBN(0x9a0b85ea, 0x68f7e978), TOBN(0x96ec5682, 0x2ad6d11f),
- TOBN(0x5e279d6c, 0xe5f6886d), TOBN(0xd3fe03cd, 0x3cb1914d),
- TOBN(0xfe541fa4, 0x7ea67c77), TOBN(0x952bd2af, 0xe3ea810c),
- TOBN(0x791fef56, 0x8d01d374), TOBN(0xa3a1c621, 0x0f11336e),
- TOBN(0x5ad0d5a9, 0xc7ec6d79), TOBN(0xff7038af, 0x3225c342),
- TOBN(0x003c6689, 0xbc69601b), TOBN(0x25059bc7, 0x45e8747d),
- TOBN(0xfa4965b2, 0xf2086fbf), TOBN(0xf6840ea6, 0x86916078),
- TOBN(0xd7ac7620, 0x70081d6c), TOBN(0xe600da31, 0xb5328645),
- TOBN(0x01916f63, 0x529b8a80), TOBN(0xe80e4858, 0x2d7d6f3e),
- TOBN(0x29eb0fe8, 0xd664ca7c), TOBN(0xf017637b, 0xe7b43b0c),
- TOBN(0x9a75c806, 0x76cb2566), TOBN(0x8f76acb1, 0xb24892d9),
- TOBN(0x7ae7b9cc, 0x1f08fe45), TOBN(0x19ef7329, 0x6a4907d8),
- TOBN(0x2db4ab71, 0x5f228bf0), TOBN(0xf3cdea39, 0x817032d7),
- TOBN(0x0b1f482e, 0xdcabe3c0), TOBN(0x3baf76b4, 0xbb86325c),
- TOBN(0xd49065e0, 0x10089465), TOBN(0x3bab5d29, 0x8e77c596),
- TOBN(0x7636c3a6, 0x193dbd95), TOBN(0xdef5d294, 0xb246e499),
- TOBN(0xb22c58b9, 0x286b2475), TOBN(0xa0b93939, 0xcd80862b),
- TOBN(0x3002c83a, 0xf0992388), TOBN(0x6de01f9b, 0xeacbe14c),
- TOBN(0x6aac688e, 0xadd70482), TOBN(0x708de92a, 0x7b4a4e8a),
- TOBN(0x75b6dd73, 0x758a6eef), TOBN(0xea4bf352, 0x725b3c43),
- TOBN(0x10041f2c, 0x87912868), TOBN(0xb1b1be95, 0xef09297a),
- TOBN(0x19ae23c5, 0xa9f3860a), TOBN(0xc4f0f839, 0x515dcf4b),
- TOBN(0x3c7ecca3, 0x97f6306a), TOBN(0x744c44ae, 0x68a3a4b0),
- TOBN(0x69cd13a0, 0xb3a1d8a2), TOBN(0x7cad0a1e, 0x5256b578),
- TOBN(0xea653fcd, 0x33791d9e), TOBN(0x9cc2a05d, 0x74b2e05f),
- TOBN(0x73b391dc, 0xfd7affa2), TOBN(0xddb7091e, 0xb6b05442),
- TOBN(0xc71e27bf, 0x8538a5c6), TOBN(0x195c63dd, 0x89abff17),
- TOBN(0xfd315285, 0x1b71e3da), TOBN(0x9cbdfda7, 0xfa680fa0),
- TOBN(0x9db876ca, 0x849d7eab), TOBN(0xebe2764b, 0x3c273271),
- TOBN(0x663357e3, 0xf208dcea), TOBN(0x8c5bd833, 0x565b1b70),
- TOBN(0xccc3b4f5, 0x9837fc0d), TOBN(0x9b641ba8, 0xa79cf00f),
- TOBN(0x7428243d, 0xdfdf3990), TOBN(0x83a594c4, 0x020786b1),
- TOBN(0xb712451a, 0x526c4502), TOBN(0x9d39438e, 0x6adb3f93),
- TOBN(0xfdb261e3, 0xe9ff0ccd), TOBN(0x80344e3c, 0xe07af4c3),
- TOBN(0x75900d7c, 0x2fa4f126), TOBN(0x08a3b865, 0x5c99a232),
- TOBN(0x2478b6bf, 0xdb25e0c3), TOBN(0x482cc2c2, 0x71db2edf),
- TOBN(0x37df7e64, 0x5f321bb8), TOBN(0x8a93821b, 0x9a8005b4),
- TOBN(0x3fa2f10c, 0xcc8c1958), TOBN(0x0d332218, 0x2c269d0a),
- TOBN(0x20ab8119, 0xe246b0e6), TOBN(0xb39781e4, 0xd349fd17),
- TOBN(0xd293231e, 0xb31aa100), TOBN(0x4b779c97, 0xbb032168),
- TOBN(0x4b3f19e1, 0xc8470500), TOBN(0x45b7efe9, 0x0c4c869d),
- TOBN(0xdb84f38a, 0xa1a6bbcc), TOBN(0x3b59cb15, 0xb2fddbc1),
- TOBN(0xba5514df, 0x3fd165e8), TOBN(0x499fd6a9, 0x061f8811),
- TOBN(0x72cd1fe0, 0xbfef9f00), TOBN(0x120a4bb9, 0x79ad7e8a),
- TOBN(0xf2ffd095, 0x5f4a5ac5), TOBN(0xcfd174f1, 0x95a7a2f0),
- TOBN(0xd42301ba, 0x9d17baf1), TOBN(0xd2fa487a, 0x77f22089),
- TOBN(0x9cb09efe, 0xb1dc77e1), TOBN(0xe9566939, 0x21c99682),
- TOBN(0x8c546901, 0x6c6067bb), TOBN(0xfd378574, 0x61c24456),
- TOBN(0x2b6a6cbe, 0x81796b33), TOBN(0x62d550f6, 0x58e87f8b),
- TOBN(0x1b763e1c, 0x7f1b01b4), TOBN(0x4b93cfea, 0x1b1b5e12),
- TOBN(0xb9345238, 0x1d531696), TOBN(0x57201c00, 0x88cdde69),
- TOBN(0xdde92251, 0x9a86afc7), TOBN(0xe3043895, 0xbd35cea8),
- TOBN(0x7608c1e1, 0x8555970d), TOBN(0x8267dfa9, 0x2535935e),
- TOBN(0xd4c60a57, 0x322ea38b), TOBN(0xe0bf7977, 0x804ef8b5),
- TOBN(0x1a0dab28, 0xc06fece4), TOBN(0xd405991e, 0x94e7b49d),
- TOBN(0xc542b6d2, 0x706dab28), TOBN(0xcb228da3, 0xa91618fb),
- TOBN(0x224e4164, 0x107d1cea), TOBN(0xeb9fdab3, 0xd0f5d8f1),
- TOBN(0xc02ba386, 0x0d6e41cd), TOBN(0x676a72c5, 0x9b1f7146),
- TOBN(0xffd6dd98, 0x4d6cb00b), TOBN(0xcef9c5ca, 0xde2e8d7c),
- TOBN(0xa1bbf5d7, 0x641c7936), TOBN(0x1b95b230, 0xee8f772e),
- TOBN(0xf765a92e, 0xe8ac25b1), TOBN(0xceb04cfc, 0x3a18b7c6),
- TOBN(0x27944cef, 0x0acc8966), TOBN(0xcbb3c957, 0x434c1004),
- TOBN(0x9c9971a1, 0xa43ff93c), TOBN(0x5bc2db17, 0xa1e358a9),
- TOBN(0x45b4862e, 0xa8d9bc82), TOBN(0x70ebfbfb, 0x2201e052),
- TOBN(0xafdf64c7, 0x92871591), TOBN(0xea5bcae6, 0xb42d0219),
- TOBN(0xde536c55, 0x2ad8f03c), TOBN(0xcd6c3f4d, 0xa76aa33c),
- TOBN(0xbeb5f623, 0x0bca6de3), TOBN(0xdd20dd99, 0xb1e706fd),
- TOBN(0x90b3ff9d, 0xac9059d4), TOBN(0x2d7b2902, 0x7ccccc4e),
- TOBN(0x8a090a59, 0xce98840f), TOBN(0xa5d947e0, 0x8410680a),
- TOBN(0x49ae346a, 0x923379a5), TOBN(0x7dbc84f9, 0xb28a3156),
- TOBN(0xfd40d916, 0x54a1aff2), TOBN(0xabf318ba, 0x3a78fb9b),
- TOBN(0x50152ed8, 0x3029f95e), TOBN(0x9fc1dd77, 0xc58ad7fa),
- TOBN(0x5fa57915, 0x13595c17), TOBN(0xb9504668, 0x8f62b3a9),
- TOBN(0x907b5b24, 0xff3055b0), TOBN(0x2e995e35, 0x9a84f125),
- TOBN(0x87dacf69, 0x7e9bbcfb), TOBN(0x95d0c1d6, 0xe86d96e3),
- TOBN(0x65726e3c, 0x2d95a75c), TOBN(0x2c3c9001, 0xacd27f21),
- TOBN(0x1deab561, 0x6c973f57), TOBN(0x108b7e2c, 0xa5221643),
- TOBN(0x5fee9859, 0xc4ef79d4), TOBN(0xbd62b88a, 0x40d4b8c6),
- TOBN(0xb4dd29c4, 0x197c75d6), TOBN(0x266a6df2, 0xb7076feb),
- TOBN(0x9512d0ea, 0x4bf2df11), TOBN(0x1320c24f, 0x6b0cc9ec),
- TOBN(0x6bb1e0e1, 0x01a59596), TOBN(0x8317c5bb, 0xeff9aaac),
- TOBN(0x65bb405e, 0x385aa6c9), TOBN(0x613439c1, 0x8f07988f),
- TOBN(0xd730049f, 0x16a66e91), TOBN(0xe97f2820, 0xfa1b0e0d),
- TOBN(0x4131e003, 0x304c28ea), TOBN(0x820ab732, 0x526bac62),
- TOBN(0xb2ac9ef9, 0x28714423), TOBN(0x54ecfffa, 0xadb10cb2),
- TOBN(0x8781476e, 0xf886a4cc), TOBN(0x4b2c87b5, 0xdb2f8d49),
- TOBN(0xe857cd20, 0x0a44295d), TOBN(0x707d7d21, 0x58c6b044),
- TOBN(0xae8521f9, 0xf596757c), TOBN(0x87448f03, 0x67b2b714),
- TOBN(0x13a9bc45, 0x5ebcd58d), TOBN(0x79bcced9, 0x9122d3c1),
- TOBN(0x3c644247, 0x9e076642), TOBN(0x0cf22778, 0x2df4767d),
- TOBN(0x5e61aee4, 0x71d444b6), TOBN(0x211236bf, 0xc5084a1d),
- TOBN(0x7e15bc9a, 0x4fd3eaf6), TOBN(0x68df2c34, 0xab622bf5),
- TOBN(0x9e674f0f, 0x59bf4f36), TOBN(0xf883669b, 0xd7f34d73),
- TOBN(0xc48ac1b8, 0x31497b1d), TOBN(0x323b925d, 0x5106703b),
- TOBN(0x22156f42, 0x74082008), TOBN(0xeffc521a, 0xc8482bcb),
- TOBN(0x5c6831bf, 0x12173479), TOBN(0xcaa2528f, 0xc4739490),
- TOBN(0x84d2102a, 0x8f1b3c4d), TOBN(0xcf64dfc1, 0x2d9bec0d),
- TOBN(0x433febad, 0x78a546ef), TOBN(0x1f621ec3, 0x7b73cef1),
- TOBN(0x6aecd627, 0x37338615), TOBN(0x162082ab, 0x01d8edf6),
- TOBN(0x833a8119, 0x19e86b66), TOBN(0x6023a251, 0xd299b5db),
- TOBN(0xf5bb0c3a, 0xbbf04b89), TOBN(0x6735eb69, 0xae749a44),
- TOBN(0xd0e058c5, 0x4713de3b), TOBN(0xfdf2593e, 0x2c3d4ccd),
- TOBN(0x1b8f414e, 0xfdd23667), TOBN(0xdd52aaca, 0xfa2015ee),
- TOBN(0x3e31b517, 0xbd9625ff), TOBN(0x5ec9322d, 0x8db5918c),
- TOBN(0xbc73ac85, 0xa96f5294), TOBN(0x82aa5bf3, 0x61a0666a),
- TOBN(0x49755810, 0xbf08ac42), TOBN(0xd21cdfd5, 0x891cedfc),
- TOBN(0x918cb57b, 0x67f8be10), TOBN(0x365d1a7c, 0x56ffa726),
- TOBN(0x2435c504, 0x6532de93), TOBN(0xc0fc5e10, 0x2674cd02),
- TOBN(0x6e51fcf8, 0x9cbbb142), TOBN(0x1d436e5a, 0xafc50692),
- TOBN(0x766bffff, 0x3fbcae22), TOBN(0x3148c2fd, 0xfd55d3b8),
- TOBN(0x52c7fdc9, 0x233222fa), TOBN(0x89ff1092, 0xe419fb6b),
- TOBN(0x3cd6db99, 0x25254977), TOBN(0x2e85a161, 0x1cf12ca7),
- TOBN(0xadd2547c, 0xdc810bc9), TOBN(0xea3f458f, 0x9d257c22),
- TOBN(0x642c1fbe, 0x27d6b19b), TOBN(0xed07e6b5, 0x140481a6),
- TOBN(0x6ada1d42, 0x86d2e0f8), TOBN(0xe5920122, 0x0e8a9fd5),
- TOBN(0x02c936af, 0x708c1b49), TOBN(0x60f30fee, 0x2b4bfaff),
- TOBN(0x6637ad06, 0x858e6a61), TOBN(0xce4c7767, 0x3fd374d0),
- TOBN(0x39d54b2d, 0x7188defb), TOBN(0xa8c9d250, 0xf56a6b66),
- TOBN(0x58fc0f5e, 0xb24fe1dc), TOBN(0x9eaf9dee, 0x6b73f24c),
- TOBN(0xa90d588b, 0x33650705), TOBN(0xde5b62c5, 0xaf2ec729),
- TOBN(0x5c72cfae, 0xd3c2b36e), TOBN(0x868c19d5, 0x034435da),
- TOBN(0x88605f93, 0xe17ee145), TOBN(0xaa60c4ee, 0x77a5d5b1),
- TOBN(0xbcf5bfd2, 0x3b60c472), TOBN(0xaf4ef13c, 0xeb1d3049),
- TOBN(0x373f44fc, 0xe13895c9), TOBN(0xf29b382f, 0x0cbc9822),
- TOBN(0x1bfcb853, 0x73efaef6), TOBN(0xcf56ac9c, 0xa8c96f40),
- TOBN(0xd7adf109, 0x7a191e24), TOBN(0x98035f44, 0xbf8a8dc2),
- TOBN(0xf40a71b9, 0x1e750c84), TOBN(0xc57f7b0c, 0x5dc6c469),
- TOBN(0x49a0e79c, 0x6fbc19c1), TOBN(0x6b0f5889, 0xa48ebdb8),
- TOBN(0x5d3fd084, 0xa07c4e9f), TOBN(0xc3830111, 0xab27de14),
- TOBN(0x0e4929fe, 0x33e08dcc), TOBN(0xf4a5ad24, 0x40bb73a3),
- TOBN(0xde86c2bf, 0x490f97ca), TOBN(0x288f09c6, 0x67a1ce18),
- TOBN(0x364bb886, 0x1844478d), TOBN(0x7840fa42, 0xceedb040),
- TOBN(0x1269fdd2, 0x5a631b37), TOBN(0x94761f1e, 0xa47c8b7d),
- TOBN(0xfc0c2e17, 0x481c6266), TOBN(0x85e16ea2, 0x3daa5fa7),
- TOBN(0xccd86033, 0x92491048), TOBN(0x0c2f6963, 0xf4d402d7),
- TOBN(0x6336f7df, 0xdf6a865c), TOBN(0x0a2a463c, 0xb5c02a87),
- TOBN(0xb0e29be7, 0xbf2f12ee), TOBN(0xf0a22002, 0x66bad988),
- TOBN(0x27f87e03, 0x9123c1d7), TOBN(0x21669c55, 0x328a8c98),
- TOBN(0x186b9803, 0x92f14529), TOBN(0xd3d056cc, 0x63954df3),
- TOBN(0x2f03fd58, 0x175a46f6), TOBN(0x63e34ebe, 0x11558558),
- TOBN(0xe13fedee, 0x5b80cfa5), TOBN(0xe872a120, 0xd401dbd1),
- TOBN(0x52657616, 0xe8a9d667), TOBN(0xbc8da4b6, 0xe08d6693),
- TOBN(0x370fb9bb, 0x1b703e75), TOBN(0x6773b186, 0xd4338363),
- TOBN(0x18dad378, 0xecef7bff), TOBN(0xaac787ed, 0x995677da),
- TOBN(0x4801ea8b, 0x0437164b), TOBN(0xf430ad20, 0x73fe795e),
- TOBN(0xb164154d, 0x8ee5eb73), TOBN(0x0884ecd8, 0x108f7c0e),
- TOBN(0x0e6ec096, 0x5f520698), TOBN(0x640631fe, 0x44f7b8d9),
- TOBN(0x92fd34fc, 0xa35a68b9), TOBN(0x9c5a4b66, 0x4d40cf4e),
- TOBN(0x949454bf, 0x80b6783d), TOBN(0x80e701fe, 0x3a320a10),
- TOBN(0x8d1a564a, 0x1a0a39b2), TOBN(0x1436d53d, 0x320587db),
- TOBN(0xf5096e6d, 0x6556c362), TOBN(0xbc23a3c0, 0xe2455d7e),
- TOBN(0x3a7aee54, 0x807230f9), TOBN(0x9ba1cfa6, 0x22ae82fd),
- TOBN(0x833a057a, 0x99c5d706), TOBN(0x8be85f4b, 0x842315c9),
- TOBN(0xd083179a, 0x66a72f12), TOBN(0x2fc77d5d, 0xcdcc73cd),
- TOBN(0x22b88a80, 0x5616ee30), TOBN(0xfb09548f, 0xe7ab1083),
- TOBN(0x8ad6ab0d, 0x511270cd), TOBN(0x61f6c57a, 0x6924d9ab),
- TOBN(0xa0f7bf72, 0x90aecb08), TOBN(0x849f87c9, 0x0df784a4),
- TOBN(0x27c79c15, 0xcfaf1d03), TOBN(0xbbf9f675, 0xc463face),
- TOBN(0x91502c65, 0x765ba543), TOBN(0x18ce3cac, 0x42ea60dd),
- TOBN(0xe5cee6ac, 0x6e43ecb3), TOBN(0x63e4e910, 0x68f2aeeb),
- TOBN(0x26234fa3, 0xc85932ee), TOBN(0x96883e8b, 0x4c90c44d),
- TOBN(0x29b9e738, 0xa18a50f6), TOBN(0xbfc62b2a, 0x3f0420df),
- TOBN(0xd22a7d90, 0x6d3e1fa9), TOBN(0x17115618, 0xfe05b8a3),
- TOBN(0x2a0c9926, 0xbb2b9c01), TOBN(0xc739fcc6, 0xe07e76a2),
- TOBN(0x540e9157, 0x165e439a), TOBN(0x06353a62, 0x6a9063d8),
- TOBN(0x84d95594, 0x61e927a3), TOBN(0x013b9b26, 0xe2e0be7f),
- TOBN(0x4feaec3b, 0x973497f1), TOBN(0x15c0f94e, 0x093ebc2d),
- TOBN(0x6af5f227, 0x33af0583), TOBN(0x0c2af206, 0xc61f3340),
- TOBN(0xd25dbdf1, 0x4457397c), TOBN(0x2e8ed017, 0xcabcbae0),
- TOBN(0xe3010938, 0xc2815306), TOBN(0xbaa99337, 0xe8c6cd68),
- TOBN(0x08513182, 0x3b0ec7de), TOBN(0x1e1b822b, 0x58df05df),
- TOBN(0x5c14842f, 0xa5c3b683), TOBN(0x98fe977e, 0x3eba34ce),
- TOBN(0xfd2316c2, 0x0d5e8873), TOBN(0xe48d839a, 0xbd0d427d),
- TOBN(0x495b2218, 0x623fc961), TOBN(0x24ee56e7, 0xb46fba5e),
- TOBN(0x9184a55b, 0x91e4de58), TOBN(0xa7488ca5, 0xdfdea288),
- TOBN(0xa723862e, 0xa8dcc943), TOBN(0x92d762b2, 0x849dc0fc),
- TOBN(0x3c444a12, 0x091ff4a9), TOBN(0x581113fa, 0x0cada274),
- TOBN(0xb9de0a45, 0x30d8eae2), TOBN(0x5e0fcd85, 0xdf6b41ea),
- TOBN(0x6233ea68, 0xc094dbb5), TOBN(0xb77d062e, 0xd968d410),
- TOBN(0x3e719bbc, 0x58b3002d), TOBN(0x68e7dd3d, 0x3dc49d58),
- TOBN(0x8d825740, 0x013a5e58), TOBN(0x21311747, 0x3c9e3c1b),
- TOBN(0x0cb0a2a7, 0x7c99b6ab), TOBN(0x5c48a3b3, 0xc2f888f2)},
- {TOBN(0xc7913e91, 0x991724f3), TOBN(0x5eda799c, 0x39cbd686),
- TOBN(0xddb595c7, 0x63d4fc1e), TOBN(0x6b63b80b, 0xac4fed54),
- TOBN(0x6ea0fc69, 0x7e5fb516), TOBN(0x737708ba, 0xd0f1c964),
- TOBN(0x9628745f, 0x11a92ca5), TOBN(0x61f37958, 0x9a86967a),
- TOBN(0x9af39b2c, 0xaa665072), TOBN(0x78322fa4, 0xefd324ef),
- TOBN(0x3d153394, 0xc327bd31), TOBN(0x81d5f271, 0x3129dab0),
- TOBN(0xc72e0c42, 0xf48027f5), TOBN(0xaa40cdbc, 0x8536e717),
- TOBN(0xf45a657a, 0x2d369d0f), TOBN(0xb03bbfc4, 0xea7f74e6),
- TOBN(0x46a8c418, 0x0d738ded), TOBN(0x6f1a5bb0, 0xe0de5729),
- TOBN(0xf10230b9, 0x8ba81675), TOBN(0x32c6f30c, 0x112b33d4),
- TOBN(0x7559129d, 0xd8fffb62), TOBN(0x6a281b47, 0xb459bf05),
- TOBN(0x77c1bd3a, 0xfa3b6776), TOBN(0x0709b380, 0x7829973a),
- TOBN(0x8c26b232, 0xa3326505), TOBN(0x38d69272, 0xee1d41bf),
- TOBN(0x0459453e, 0xffe32afa), TOBN(0xce8143ad, 0x7cb3ea87),
- TOBN(0x932ec1fa, 0x7e6ab666), TOBN(0x6cd2d230, 0x22286264),
- TOBN(0x459a46fe, 0x6736f8ed), TOBN(0x50bf0d00, 0x9eca85bb),
- TOBN(0x0b825852, 0x877a21ec), TOBN(0x300414a7, 0x0f537a94),
- TOBN(0x3f1cba40, 0x21a9a6a2), TOBN(0x50824eee, 0x76943c00),
- TOBN(0xa0dbfcec, 0xf83cba5d), TOBN(0xf9538148, 0x93b4f3c0),
- TOBN(0x61744162, 0x48f24dd7), TOBN(0x5322d64d, 0xe4fb09dd),
- TOBN(0x57447384, 0x3d9325f3), TOBN(0xa9bef2d0, 0xf371cb84),
- TOBN(0x77d2188b, 0xa61e36c5), TOBN(0xbbd6a7d7, 0xc602df72),
- TOBN(0xba3aa902, 0x8f61bc0b), TOBN(0xf49085ed, 0x6ed0b6a1),
- TOBN(0x8bc625d6, 0xae6e8298), TOBN(0x832b0b1d, 0xa2e9c01d),
- TOBN(0xa337c447, 0xf1f0ced1), TOBN(0x800cc793, 0x9492dd2b),
- TOBN(0x4b93151d, 0xbea08efa), TOBN(0x820cf3f8, 0xde0a741e),
- TOBN(0xff1982dc, 0x1c0f7d13), TOBN(0xef921960, 0x84dde6ca),
- TOBN(0x1ad7d972, 0x45f96ee3), TOBN(0x319c8dbe, 0x29dea0c7),
- TOBN(0xd3ea3871, 0x7b82b99b), TOBN(0x75922d4d, 0x470eb624),
- TOBN(0x8f66ec54, 0x3b95d466), TOBN(0x66e673cc, 0xbee1e346),
- TOBN(0x6afe67c4, 0xb5f2b89a), TOBN(0x3de9c1e6, 0x290e5cd3),
- TOBN(0x8c278bb6, 0x310a2ada), TOBN(0x420fa384, 0x0bdb323b),
- TOBN(0x0ae1d63b, 0x0eb919b0), TOBN(0xd74ee51d, 0xa74b9620),
- TOBN(0x395458d0, 0xa674290c), TOBN(0x324c930f, 0x4620a510),
- TOBN(0x2d1f4d19, 0xfbac27d4), TOBN(0x4086e8ca, 0x9bedeeac),
- TOBN(0x0cdd211b, 0x9b679ab8), TOBN(0x5970167d, 0x7090fec4),
- TOBN(0x3420f2c9, 0xfaf1fc63), TOBN(0x616d333a, 0x328c8bb4),
- TOBN(0x7d65364c, 0x57f1fe4a), TOBN(0x9343e877, 0x55e5c73a),
- TOBN(0x5795176b, 0xe970e78c), TOBN(0xa36ccebf, 0x60533627),
- TOBN(0xfc7c7380, 0x09cdfc1b), TOBN(0xb39a2afe, 0xb3fec326),
- TOBN(0xb7ff1ba1, 0x6224408a), TOBN(0xcc856e92, 0x247cfc5e),
- TOBN(0x01f102e7, 0xc18bc493), TOBN(0x4613ab74, 0x2091c727),
- TOBN(0xaa25e89c, 0xc420bf2b), TOBN(0x00a53176, 0x90337ec2),
- TOBN(0xd2be9f43, 0x7d025fc7), TOBN(0x3316fb85, 0x6e6fe3dc),
- TOBN(0x27520af5, 0x9ac50814), TOBN(0xfdf95e78, 0x9a8e4223),
- TOBN(0xb7e7df2a, 0x56bec5a0), TOBN(0xf7022f7d, 0xdf159e5d),
- TOBN(0x93eeeab1, 0xcac1fe8f), TOBN(0x8040188c, 0x37451168),
- TOBN(0x7ee8aa8a, 0xd967dce6), TOBN(0xfa0e79e7, 0x3abc9299),
- TOBN(0x67332cfc, 0x2064cfd1), TOBN(0x339c31de, 0xb0651934),
- TOBN(0x719b28d5, 0x2a3bcbea), TOBN(0xee74c82b, 0x9d6ae5c6),
- TOBN(0x0927d05e, 0xbaf28ee6), TOBN(0x82cecf2c, 0x9d719028),
- TOBN(0x0b0d353e, 0xddb30289), TOBN(0xfe4bb977, 0xfddb2e29),
- TOBN(0xbb5bb990, 0x640bfd9e), TOBN(0xd226e277, 0x82f62108),
- TOBN(0x4bf00985, 0x02ffdd56), TOBN(0x7756758a, 0x2ca1b1b5),
- TOBN(0xc32b62a3, 0x5285fe91), TOBN(0xedbc546a, 0x8c9cd140),
- TOBN(0x1e47a013, 0xaf5cb008), TOBN(0xbca7e720, 0x073ce8f2),
- TOBN(0xe10b2ab8, 0x17a91cae), TOBN(0xb89aab65, 0x08e27f63),
- TOBN(0x7b3074a7, 0xdba3ddf9), TOBN(0x1c20ce09, 0x330c2972),
- TOBN(0x6b9917b4, 0x5fcf7e33), TOBN(0xe6793743, 0x945ceb42),
- TOBN(0x18fc2215, 0x5c633d19), TOBN(0xad1adb3c, 0xc7485474),
- TOBN(0x646f9679, 0x6424c49b), TOBN(0xf888dfe8, 0x67c241c9),
- TOBN(0xe12d4b93, 0x24f68b49), TOBN(0x9a6b62d8, 0xa571df20),
- TOBN(0x81b4b26d, 0x179483cb), TOBN(0x666f9632, 0x9511fae2),
- TOBN(0xd281b3e4, 0xd53aa51f), TOBN(0x7f96a765, 0x7f3dbd16),
- TOBN(0xa7f8b5bf, 0x074a30ce), TOBN(0xd7f52107, 0x005a32e6),
- TOBN(0x6f9e0907, 0x50237ed4), TOBN(0x2f21da47, 0x8096fa2b),
- TOBN(0xf3e19cb4, 0xeec863a0), TOBN(0xd18f77fd, 0x9527620a),
- TOBN(0x9505c81c, 0x407c1cf8), TOBN(0x9998db4e, 0x1b6ec284),
- TOBN(0x7e3389e5, 0xc247d44d), TOBN(0x12507141, 0x3f4f3d80),
- TOBN(0xd4ba0110, 0x4a78a6c7), TOBN(0x312874a0, 0x767720be),
- TOBN(0xded059a6, 0x75944370), TOBN(0xd6123d90, 0x3b2c0bdd),
- TOBN(0xa56b717b, 0x51c108e3), TOBN(0x9bb7940e, 0x070623e9),
- TOBN(0x794e2d59, 0x84ac066c), TOBN(0xf5954a92, 0xe68c69a0),
- TOBN(0x28c52458, 0x4fd99dcc), TOBN(0x60e639fc, 0xb1012517),
- TOBN(0xc2e60125, 0x7de79248), TOBN(0xe9ef6404, 0xf12fc6d7),
- TOBN(0x4c4f2808, 0x2a3b5d32), TOBN(0x865ad32e, 0xc768eb8a),
- TOBN(0xac02331b, 0x13fb70b6), TOBN(0x037b44c1, 0x95599b27),
- TOBN(0x1a860fc4, 0x60bd082c), TOBN(0xa2e25745, 0xc980cd01),
- TOBN(0xee3387a8, 0x1da0263e), TOBN(0x931bfb95, 0x2d10f3d6),
- TOBN(0x5b687270, 0xa1f24a32), TOBN(0xf140e65d, 0xca494b86),
- TOBN(0x4f4ddf91, 0xb2f1ac7a), TOBN(0xf99eaabb, 0x760fee27),
- TOBN(0x57f4008a, 0x49c228e5), TOBN(0x090be440, 0x1cf713bb),
- TOBN(0xac91fbe4, 0x5004f022), TOBN(0xd838c2c2, 0x569e1af6),
- TOBN(0xd6c7d20b, 0x0f1daaa5), TOBN(0xaa063ac1, 0x1bbb02c0),
- TOBN(0x0938a422, 0x59558a78), TOBN(0x5343c669, 0x8435da2f),
- TOBN(0x96f67b18, 0x034410dc), TOBN(0x7cc1e424, 0x84510804),
- TOBN(0x86a1543f, 0x16dfbb7d), TOBN(0x921fa942, 0x5b5bd592),
- TOBN(0x9dcccb6e, 0xb33dd03c), TOBN(0x8581ddd9, 0xb843f51e),
- TOBN(0x54935fcb, 0x81d73c9e), TOBN(0x6d07e979, 0x0a5e97ab),
- TOBN(0x4dc7b30a, 0xcf3a6bab), TOBN(0x147ab1f3, 0x170bee11),
- TOBN(0x0aaf8e3d, 0x9fafdee4), TOBN(0xfab3dbcb, 0x538a8b95),
- TOBN(0x405df4b3, 0x6ef13871), TOBN(0xf1f4e9cb, 0x088d5a49),
- TOBN(0x9bcd24d3, 0x66b33f1d), TOBN(0x3b97b820, 0x5ce445c0),
- TOBN(0xe2926549, 0xba93ff61), TOBN(0xd9c341ce, 0x4dafe616),
- TOBN(0xfb30a76e, 0x16efb6f3), TOBN(0xdf24b8ca, 0x605b953c),
- TOBN(0x8bd52afe, 0xc2fffb9f), TOBN(0xbbac5ff7, 0xe19d0b96),
- TOBN(0x43c01b87, 0x459afccd), TOBN(0x6bd45143, 0xb7432652),
- TOBN(0x84734530, 0x55b5d78e), TOBN(0x81088fdb, 0x1554ba7d),
- TOBN(0xada0a52c, 0x1e269375), TOBN(0xf9f037c4, 0x2dc5ec10),
- TOBN(0xc0660607, 0x94bfbc11), TOBN(0xc0a630bb, 0xc9c40d2f),
- TOBN(0x5efc797e, 0xab64c31e), TOBN(0xffdb1dab, 0x74507144),
- TOBN(0xf6124287, 0x1ca6790c), TOBN(0xe9609d81, 0xe69bf1bf),
- TOBN(0xdb898595, 0x00d24fc9), TOBN(0x9c750333, 0xe51fb417),
- TOBN(0x51830a91, 0xfef7bbde), TOBN(0x0ce67dc8, 0x945f585c),
- TOBN(0x9a730ed4, 0x4763eb50), TOBN(0x24a0e221, 0xc1ab0d66),
- TOBN(0x643b6393, 0x648748f3), TOBN(0x1982daa1, 0x6d3c6291),
- TOBN(0x6f00a9f7, 0x8bbc5549), TOBN(0x7a1783e1, 0x7f36384e),
- TOBN(0xe8346323, 0xde977f50), TOBN(0x91ab688d, 0xb245502a),
- TOBN(0x331ab6b5, 0x6d0bdd66), TOBN(0x0a6ef32e, 0x64b71229),
- TOBN(0x1028150e, 0xfe7c352f), TOBN(0x27e04350, 0xce7b39d3),
- TOBN(0x2a3c8acd, 0xc1070c82), TOBN(0xfb2034d3, 0x80c9feef),
- TOBN(0x2d729621, 0x709f3729), TOBN(0x8df290bf, 0x62cb4549),
- TOBN(0x02f99f33, 0xfc2e4326), TOBN(0x3b30076d, 0x5eddf032),
- TOBN(0xbb21f8cf, 0x0c652fb5), TOBN(0x314fb49e, 0xed91cf7b),
- TOBN(0xa013eca5, 0x2f700750), TOBN(0x2b9e3c23, 0x712a4575),
- TOBN(0xe5355557, 0xaf30fbb0), TOBN(0x1ada3516, 0x7c77e771),
- TOBN(0x45f6ecb2, 0x7b135670), TOBN(0xe85d19df, 0x7cfc202e),
- TOBN(0x0f1b50c7, 0x58d1be9f), TOBN(0x5ebf2c0a, 0xead2e344),
- TOBN(0x1531fe4e, 0xabc199c9), TOBN(0xc7032592, 0x56bab0ae),
- TOBN(0x16ab2e48, 0x6c1fec54), TOBN(0x0f87fda8, 0x04280188),
- TOBN(0xdc9f46fc, 0x609e4a74), TOBN(0x2a44a143, 0xba667f91),
- TOBN(0xbc3d8b95, 0xb4d83436), TOBN(0xa01e4bd0, 0xc7bd2958),
- TOBN(0x7b182932, 0x73483c90), TOBN(0xa79c6aa1, 0xa7c7b598),
- TOBN(0xbf3983c6, 0xeaaac07e), TOBN(0x8f18181e, 0x96e0d4e6),
- TOBN(0x8553d37c, 0x051af62b), TOBN(0xe9a998eb, 0x0bf94496),
- TOBN(0xe0844f9f, 0xb0d59aa1), TOBN(0x983fd558, 0xe6afb813),
- TOBN(0x9670c0ca, 0x65d69804), TOBN(0x732b22de, 0x6ea5ff2d),
- TOBN(0xd7640ba9, 0x5fd8623b), TOBN(0x9f619163, 0xa6351782),
- TOBN(0x0bfc27ee, 0xacee5043), TOBN(0xae419e73, 0x2eb10f02),
- TOBN(0x19c028d1, 0x8943fb05), TOBN(0x71f01cf7, 0xff13aa2a),
- TOBN(0x7790737e, 0x8887a132), TOBN(0x67513309, 0x66318410),
- TOBN(0x9819e8a3, 0x7ddb795e), TOBN(0xfecb8ef5, 0xdad100b2),
- TOBN(0x59f74a22, 0x3021926a), TOBN(0xb7c28a49, 0x6f9b4c1c),
- TOBN(0xed1a733f, 0x912ad0ab), TOBN(0x42a910af, 0x01a5659c),
- TOBN(0x3842c6e0, 0x7bd68cab), TOBN(0x2b57fa38, 0x76d70ac8),
- TOBN(0x8a6707a8, 0x3c53aaeb), TOBN(0x62c1c510, 0x65b4db18),
- TOBN(0x8de2c1fb, 0xb2d09dc7), TOBN(0xc3dfed12, 0x266bd23b),
- TOBN(0x927d039b, 0xd5b27db6), TOBN(0x2fb2f0f1, 0x103243da),
- TOBN(0xf855a07b, 0x80be7399), TOBN(0xed9327ce, 0x1f9f27a8),
- TOBN(0xa0bd99c7, 0x729bdef7), TOBN(0x2b67125e, 0x28250d88),
- TOBN(0x784b26e8, 0x8670ced7), TOBN(0xe3dfe41f, 0xc31bd3b4),
- TOBN(0x9e353a06, 0xbcc85cbc), TOBN(0x302e2909, 0x60178a9d),
- TOBN(0x860abf11, 0xa6eac16e), TOBN(0x76447000, 0xaa2b3aac),
- TOBN(0x46ff9d19, 0x850afdab), TOBN(0x35bdd6a5, 0xfdb2d4c1),
- TOBN(0xe82594b0, 0x7e5c9ce9), TOBN(0x0f379e53, 0x20af346e),
- TOBN(0x608b31e3, 0xbc65ad4a), TOBN(0x710c6b12, 0x267c4826),
- TOBN(0x51c966f9, 0x71954cf1), TOBN(0xb1cec793, 0x0d0aa215),
- TOBN(0x1f155989, 0x86bd23a8), TOBN(0xae2ff99c, 0xf9452e86),
- TOBN(0xd8dd953c, 0x340ceaa2), TOBN(0x26355275, 0x2e2e9333),
- TOBN(0x15d4e5f9, 0x8586f06d), TOBN(0xd6bf94a8, 0xf7cab546),
- TOBN(0x33c59a0a, 0xb76a9af0), TOBN(0x52740ab3, 0xba095af7),
- TOBN(0xc444de8a, 0x24389ca0), TOBN(0xcc6f9863, 0x706da0cb),
- TOBN(0xb5a741a7, 0x6b2515cf), TOBN(0x71c41601, 0x9585c749),
- TOBN(0x78350d4f, 0xe683de97), TOBN(0x31d61524, 0x63d0b5f5),
- TOBN(0x7a0cc5e1, 0xfbce090b), TOBN(0xaac927ed, 0xfbcb2a5b),
- TOBN(0xe920de49, 0x20d84c35), TOBN(0x8c06a0b6, 0x22b4de26),
- TOBN(0xd34dd58b, 0xafe7ddf3), TOBN(0x55851fed, 0xc1e6e55b),
- TOBN(0xd1395616, 0x960696e7), TOBN(0x940304b2, 0x5f22705f),
- TOBN(0x6f43f861, 0xb0a2a860), TOBN(0xcf121282, 0x0e7cc981),
- TOBN(0x12186212, 0x0ab64a96), TOBN(0x09215b9a, 0xb789383c),
- TOBN(0x311eb305, 0x37387c09), TOBN(0xc5832fce, 0xf03ee760),
- TOBN(0x30358f58, 0x32f7ea19), TOBN(0xe01d3c34, 0x91d53551),
- TOBN(0x1ca5ee41, 0xda48ea80), TOBN(0x34e71e8e, 0xcf4fa4c1),
- TOBN(0x312abd25, 0x7af1e1c7), TOBN(0xe3afcdeb, 0x2153f4a5),
- TOBN(0x9d5c84d7, 0x00235e9a), TOBN(0x0308d3f4, 0x8c4c836f),
- TOBN(0xc0a66b04, 0x89332de5), TOBN(0x610dd399, 0x89e566ef),
- TOBN(0xf8eea460, 0xd1ac1635), TOBN(0x84cbb3fb, 0x20a2c0df),
- TOBN(0x40afb488, 0xe74a48c5), TOBN(0x29738198, 0xd326b150),
- TOBN(0x2a17747f, 0xa6d74081), TOBN(0x60ea4c05, 0x55a26214),
- TOBN(0x53514bb4, 0x1f88c5fe), TOBN(0xedd64567, 0x7e83426c),
- TOBN(0xd5d6cbec, 0x96460b25), TOBN(0xa12fd0ce, 0x68dc115e),
- TOBN(0xc5bc3ed2, 0x697840ea), TOBN(0x969876a8, 0xa6331e31),
- TOBN(0x60c36217, 0x472ff580), TOBN(0xf4229705, 0x4ad41393),
- TOBN(0x4bd99ef0, 0xa03b8b92), TOBN(0x501c7317, 0xc144f4f6),
- TOBN(0x159009b3, 0x18464945), TOBN(0x6d5e594c, 0x74c5c6be),
- TOBN(0x2d587011, 0x321a3660), TOBN(0xd1e184b1, 0x3898d022),
- TOBN(0x5ba04752, 0x4c6a7e04), TOBN(0x47fa1e2b, 0x45550b65),
- TOBN(0x9419daf0, 0x48c0a9a5), TOBN(0x66362953, 0x7c243236),
- TOBN(0xcd0744b1, 0x5cb12a88), TOBN(0x561b6f9a, 0x2b646188),
- TOBN(0x599415a5, 0x66c2c0c0), TOBN(0xbe3f0859, 0x0f83f09a),
- TOBN(0x9141c5be, 0xb92041b8), TOBN(0x01ae38c7, 0x26477d0d),
- TOBN(0xca8b71f3, 0xd12c7a94), TOBN(0xfab5b31f, 0x765c70db),
- TOBN(0x76ae7492, 0x487443e9), TOBN(0x8595a310, 0x990d1349),
- TOBN(0xf8dbeda8, 0x7d460a37), TOBN(0x7f7ad082, 0x1e45a38f),
- TOBN(0xed1d4db6, 0x1059705a), TOBN(0xa3dd492a, 0xe6b9c697),
- TOBN(0x4b92ee3a, 0x6eb38bd5), TOBN(0xbab2609d, 0x67cc0bb7),
- TOBN(0x7fc4fe89, 0x6e70ee82), TOBN(0xeff2c56e, 0x13e6b7e3),
- TOBN(0x9b18959e, 0x34d26fca), TOBN(0x2517ab66, 0x889d6b45),
- TOBN(0xf167b4e0, 0xbdefdd4f), TOBN(0x69958465, 0xf366e401),
- TOBN(0x5aa368ab, 0xa73bbec0), TOBN(0x12148709, 0x7b240c21),
- TOBN(0x378c3233, 0x18969006), TOBN(0xcb4d73ce, 0xe1fe53d1),
- TOBN(0x5f50a80e, 0x130c4361), TOBN(0xd67f5951, 0x7ef5212b),
- TOBN(0xf145e21e, 0x9e70c72e), TOBN(0xb2e52e29, 0x5566d2fb),
- TOBN(0x44eaba4a, 0x032397f5), TOBN(0x5e56937b, 0x7e31a7de),
- TOBN(0x68dcf517, 0x456c61e1), TOBN(0xbc2e954a, 0xa8b0a388),
- TOBN(0xe3552fa7, 0x60a8b755), TOBN(0x03442dae, 0x73ad0cde),
- TOBN(0x37ffe747, 0xceb26210), TOBN(0x983545e8, 0x787baef9),
- TOBN(0x8b8c8535, 0x86a3de31), TOBN(0xc621dbcb, 0xfacd46db),
- TOBN(0x82e442e9, 0x59266fbb), TOBN(0xa3514c37, 0x339d471c),
- TOBN(0x3a11b771, 0x62cdad96), TOBN(0xf0cb3b3c, 0xecf9bdf0),
- TOBN(0x3fcbdbce, 0x478e2135), TOBN(0x7547b5cf, 0xbda35342),
- TOBN(0xa97e81f1, 0x8a677af6), TOBN(0xc8c2bf83, 0x28817987),
- TOBN(0xdf07eaaf, 0x45580985), TOBN(0xc68d1f05, 0xc93b45cb),
- TOBN(0x106aa2fe, 0xc77b4cac), TOBN(0x4c1d8afc, 0x04a7ae86),
- TOBN(0xdb41c3fd, 0x9eb45ab2), TOBN(0x5b234b5b, 0xd4b22e74),
- TOBN(0xda253dec, 0xf215958a), TOBN(0x67e0606e, 0xa04edfa0),
- TOBN(0xabbbf070, 0xef751b11), TOBN(0xf352f175, 0xf6f06dce),
- TOBN(0xdfc4b6af, 0x6839f6b4), TOBN(0x53ddf9a8, 0x9959848e),
- TOBN(0xda49c379, 0xc21520b0), TOBN(0x90864ff0, 0xdbd5d1b6),
- TOBN(0x2f055d23, 0x5f49c7f7), TOBN(0xe51e4e6a, 0xa796b2d8),
- TOBN(0xc361a67f, 0x5c9dc340), TOBN(0x5ad53c37, 0xbca7c620),
- TOBN(0xda1d6588, 0x32c756d0), TOBN(0xad60d911, 0x8bb67e13),
- TOBN(0xd6c47bdf, 0x0eeec8c6), TOBN(0x4a27fec1, 0x078a1821),
- TOBN(0x081f7415, 0xc3099524), TOBN(0x8effdf0b, 0x82cd8060),
- TOBN(0xdb70ec1c, 0x65842df8), TOBN(0x8821b358, 0xd319a901),
- TOBN(0x72ee56ee, 0xde42b529), TOBN(0x5bb39592, 0x236e4286),
- TOBN(0xd1183316, 0xfd6f7140), TOBN(0xf9fadb5b, 0xbd8e81f7),
- TOBN(0x701d5e0c, 0x5a02d962), TOBN(0xfdee4dbf, 0x1b601324),
- TOBN(0xbed17407, 0x35d7620e), TOBN(0x04e3c2c3, 0xf48c0012),
- TOBN(0x9ee29da7, 0x3455449a), TOBN(0x562cdef4, 0x91a836c4),
- TOBN(0x8f682a5f, 0x47701097), TOBN(0x617125d8, 0xff88d0c2),
- TOBN(0x948fda24, 0x57bb86dd), TOBN(0x348abb8f, 0x289f7286),
- TOBN(0xeb10eab5, 0x99d94bbd), TOBN(0xd51ba28e, 0x4684d160),
- TOBN(0xabe0e51c, 0x30c8f41a), TOBN(0x66588b45, 0x13254f4a),
- TOBN(0x147ebf01, 0xfad097a5), TOBN(0x49883ea8, 0x610e815d),
- TOBN(0xe44d60ba, 0x8a11de56), TOBN(0xa970de6e, 0x827a7a6d),
- TOBN(0x2be41424, 0x5e17fc19), TOBN(0xd833c657, 0x01214057),
- TOBN(0x1375813b, 0x363e723f), TOBN(0x6820bb88, 0xe6a52e9b),
- TOBN(0x7e7f6970, 0xd875d56a), TOBN(0xd6a0a9ac, 0x51fbf6bf),
- TOBN(0x54ba8790, 0xa3083c12), TOBN(0xebaeb23d, 0x6ae7eb64),
- TOBN(0xa8685c3a, 0xb99a907a), TOBN(0xf1e74550, 0x026bf40b),
- TOBN(0x7b73a027, 0xc802cd9e), TOBN(0x9a8a927c, 0x4fef4635),
- TOBN(0xe1b6f60c, 0x08191224), TOBN(0xc4126ebb, 0xde4ec091),
- TOBN(0xe1dff4dc, 0x4ae38d84), TOBN(0xde3f57db, 0x4f2ef985),
- TOBN(0x34964337, 0xd446a1dd), TOBN(0x7bf217a0, 0x859e77f6),
- TOBN(0x8ff10527, 0x8e1d13f5), TOBN(0xa304ef03, 0x74eeae27),
- TOBN(0xfc6f5e47, 0xd19dfa5a), TOBN(0xdb007de3, 0x7fad982b),
- TOBN(0x28205ad1, 0x613715f5), TOBN(0x251e6729, 0x7889529e),
- TOBN(0x72705184, 0x1ae98e78), TOBN(0xf818537d, 0x271cac32),
- TOBN(0xc8a15b7e, 0xb7f410f5), TOBN(0xc474356f, 0x81f62393),
- TOBN(0x92dbdc5a, 0xc242316b), TOBN(0xabe060ac, 0xdbf4aff5),
- TOBN(0x6e8c38fe, 0x909a8ec6), TOBN(0x43e514e5, 0x6116cb94),
- TOBN(0x2078fa38, 0x07d784f9), TOBN(0x1161a880, 0xf4b5b357),
- TOBN(0x5283ce79, 0x13adea3d), TOBN(0x0756c3e6, 0xcc6a910b),
- TOBN(0x60bcfe01, 0xaaa79697), TOBN(0x04a73b29, 0x56391db1),
- TOBN(0xdd8dad47, 0x189b45a0), TOBN(0xbfac0dd0, 0x48d5b8d9),
- TOBN(0x34ab3af5, 0x7d3d2ec2), TOBN(0x6fa2fc2d, 0x207bd3af),
- TOBN(0x9ff40092, 0x66550ded), TOBN(0x719b3e87, 0x1fd5b913),
- TOBN(0xa573a496, 0x6d17fbc7), TOBN(0x0cd1a70a, 0x73d2b24e),
- TOBN(0x34e2c5ca, 0xb2676937), TOBN(0xe7050b06, 0xbf669f21),
- TOBN(0xfbe948b6, 0x1ede9046), TOBN(0xa0530051, 0x97662659),
- TOBN(0x58cbd4ed, 0xf10124c5), TOBN(0xde2646e4, 0xdd6c06c8),
- TOBN(0x332f8108, 0x8cad38c0), TOBN(0x471b7e90, 0x6bd68ae2),
- TOBN(0x56ac3fb2, 0x0d8e27a3), TOBN(0xb54660db, 0x136b4b0d),
- TOBN(0x123a1e11, 0xa6fd8de4), TOBN(0x44dbffea, 0xa37799ef),
- TOBN(0x4540b977, 0xce6ac17c), TOBN(0x495173a8, 0xaf60acef)},
- {TOBN(0x9ebb284d, 0x391c2a82), TOBN(0xbcdd4863, 0x158308e8),
- TOBN(0x006f16ec, 0x83f1edca), TOBN(0xa13e2c37, 0x695dc6c8),
- TOBN(0x2ab756f0, 0x4a057a87), TOBN(0xa8765500, 0xa6b48f98),
- TOBN(0x4252face, 0x68651c44), TOBN(0xa52b540b, 0xe1765e02),
- TOBN(0x4f922fc5, 0x16a0d2bb), TOBN(0x0d5cc16c, 0x1a623499),
- TOBN(0x9241cf3a, 0x57c62c8b), TOBN(0x2f5e6961, 0xfd1b667f),
- TOBN(0x5c15c70b, 0xf5a01797), TOBN(0x3d20b44d, 0x60956192),
- TOBN(0x04911b37, 0x071fdb52), TOBN(0xf648f916, 0x8d6f0f7b),
- TOBN(0x6dc1acaf, 0xe60b7cf7), TOBN(0x25860a50, 0x84a9d869),
- TOBN(0x56fc6f09, 0xe7ba8ac4), TOBN(0x828c5bd0, 0x6148d29e),
- TOBN(0xac6b435e, 0xdc55ae5f), TOBN(0xa527f56c, 0xc0117411),
- TOBN(0x94d5045e, 0xfd24342c), TOBN(0x2c4c0a35, 0x70b67c0d),
- TOBN(0x027cc8b8, 0xfac61d9a), TOBN(0x7d25e062, 0xe3c6fe8a),
- TOBN(0xe08805bf, 0xe5bff503), TOBN(0x13271e6c, 0x6ff632f7),
- TOBN(0x55dca6c0, 0x232f76a5), TOBN(0x8957c32d, 0x701ef426),
- TOBN(0xee728bcb, 0xa10a5178), TOBN(0x5ea60411, 0xb62c5173),
- TOBN(0xfc4e964e, 0xd0b8892b), TOBN(0x9ea17683, 0x9301bb74),
- TOBN(0x6265c5ae, 0xfcc48626), TOBN(0xe60cf82e, 0xbb3e9102),
- TOBN(0x57adf797, 0xd4df5531), TOBN(0x235b59a1, 0x8deeefe2),
- TOBN(0x60adcf58, 0x3f306eb1), TOBN(0x105c2753, 0x3d09492d),
- TOBN(0x4090914b, 0xb5def996), TOBN(0x1cb69c83, 0x233dd1e7),
- TOBN(0xc1e9c1d3, 0x9b3d5e76), TOBN(0x1f3338ed, 0xfccf6012),
- TOBN(0xb1e95d0d, 0x2f5378a8), TOBN(0xacf4c2c7, 0x2f00cd21),
- TOBN(0x6e984240, 0xeb5fe290), TOBN(0xd66c038d, 0x248088ae),
- TOBN(0x804d264a, 0xf94d70cf), TOBN(0xbdb802ef, 0x7314bf7e),
- TOBN(0x8fb54de2, 0x4333ed02), TOBN(0x740461e0, 0x285635d9),
- TOBN(0x4113b2c8, 0x365e9383), TOBN(0xea762c83, 0x3fdef652),
- TOBN(0x4eec6e2e, 0x47b956c1), TOBN(0xa3d814be, 0x65620fa4),
- TOBN(0x9ad5462b, 0xb4d8bc50), TOBN(0x181c0b16, 0xa9195770),
- TOBN(0xebd4fe1c, 0x78412a68), TOBN(0xae0341bc, 0xc0dff48c),
- TOBN(0xb6bc45cf, 0x7003e866), TOBN(0xf11a6dea, 0x8a24a41b),
- TOBN(0x5407151a, 0xd04c24c2), TOBN(0x62c9d27d, 0xda5b7b68),
- TOBN(0x2e964235, 0x88cceff6), TOBN(0x8594c54f, 0x8b07ed69),
- TOBN(0x1578e73c, 0xc84d0d0d), TOBN(0x7b4e1055, 0xff532868),
- TOBN(0xa348c0d5, 0xb5ec995a), TOBN(0xbf4b9d55, 0x14289a54),
- TOBN(0x9ba155a6, 0x58fbd777), TOBN(0x186ed7a8, 0x1a84491d),
- TOBN(0xd4992b30, 0x614c0900), TOBN(0xda98d121, 0xbd00c24b),
- TOBN(0x7f534dc8, 0x7ec4bfa1), TOBN(0x4a5ff674, 0x37dc34bc),
- TOBN(0x68c196b8, 0x1d7ea1d7), TOBN(0x38cf2893, 0x80a6d208),
- TOBN(0xfd56cd09, 0xe3cbbd6e), TOBN(0xec72e27e, 0x4205a5b6),
- TOBN(0x15ea68f5, 0xa44f77f7), TOBN(0x7aa5f9fd, 0xb43c52bc),
- TOBN(0x86ff676f, 0x94f0e609), TOBN(0xa4cde963, 0x2e2d432b),
- TOBN(0x8cafa0c0, 0xeee470af), TOBN(0x84137d0e, 0x8a3f5ec8),
- TOBN(0xebb40411, 0xfaa31231), TOBN(0xa239c13f, 0x6f7f7ccf),
- TOBN(0x32865719, 0xa8afd30b), TOBN(0x86798328, 0x8a826dce),
- TOBN(0xdf04e891, 0xc4a8fbe0), TOBN(0xbb6b6e1b, 0xebf56ad3),
- TOBN(0x0a695b11, 0x471f1ff0), TOBN(0xd76c3389, 0xbe15baf0),
- TOBN(0x018edb95, 0xbe96c43e), TOBN(0xf2beaaf4, 0x90794158),
- TOBN(0x152db09e, 0xc3076a27), TOBN(0x5e82908e, 0xe416545d),
- TOBN(0xa2c41272, 0x356d6f2e), TOBN(0xdc9c9642, 0x31fd74e1),
- TOBN(0x66ceb88d, 0x519bf615), TOBN(0xe29ecd76, 0x05a2274e),
- TOBN(0x3a0473c4, 0xbf5e2fa0), TOBN(0x6b6eb671, 0x64284e67),
- TOBN(0xe8b97932, 0xb88756dd), TOBN(0xed4e8652, 0xf17e3e61),
- TOBN(0xc2dd1499, 0x3ee1c4a4), TOBN(0xc0aaee17, 0x597f8c0e),
- TOBN(0x15c4edb9, 0x6c168af3), TOBN(0x6563c7bf, 0xb39ae875),
- TOBN(0xadfadb6f, 0x20adb436), TOBN(0xad55e8c9, 0x9a042ac0),
- TOBN(0x975a1ed8, 0xb76da1f5), TOBN(0x10dfa466, 0xa58acb94),
- TOBN(0x8dd7f7e3, 0xac060282), TOBN(0x6813e66a, 0x572a051e),
- TOBN(0xb4ccae1e, 0x350cb901), TOBN(0xb653d656, 0x50cb7822),
- TOBN(0x42484710, 0xdfab3b87), TOBN(0xcd7ee537, 0x9b670fd0),
- TOBN(0x0a50b12e, 0x523b8bf6), TOBN(0x8009eb5b, 0x8f910c1b),
- TOBN(0xf535af82, 0x4a167588), TOBN(0x0f835f9c, 0xfb2a2abd),
- TOBN(0xf59b2931, 0x2afceb62), TOBN(0xc797df2a, 0x169d383f),
- TOBN(0xeb3f5fb0, 0x66ac02b0), TOBN(0x029d4c6f, 0xdaa2d0ca),
- TOBN(0xd4059bc1, 0xafab4bc5), TOBN(0x833f5c6f, 0x56783247),
- TOBN(0xb5346630, 0x8d2d3605), TOBN(0x83387891, 0xd34d8433),
- TOBN(0xd973b30f, 0xadd9419a), TOBN(0xbcca1099, 0xafe3fce8),
- TOBN(0x08178315, 0x0809aac6), TOBN(0x01b7f21a, 0x540f0f11),
- TOBN(0x65c29219, 0x909523c8), TOBN(0xa62f648f, 0xa3a1c741),
- TOBN(0x88598d4f, 0x60c9e55a), TOBN(0xbce9141b, 0x0e4f347a),
- TOBN(0x9af97d84, 0x35f9b988), TOBN(0x0210da62, 0x320475b6),
- TOBN(0x3c076e22, 0x9191476c), TOBN(0x7520dbd9, 0x44fc7834),
- TOBN(0x6a6b2cfe, 0xc1ab1bbd), TOBN(0xef8a65be, 0xdc650938),
- TOBN(0x72855540, 0x805d7bc4), TOBN(0xda389396, 0xed11fdfd),
- TOBN(0xa9d5bd36, 0x74660876), TOBN(0x11d67c54, 0xb45dff35),
- TOBN(0x6af7d148, 0xa4f5da94), TOBN(0xbb8d4c3f, 0xc0bbeb31),
- TOBN(0x87a7ebd1, 0xe0a1b12a), TOBN(0x1e4ef88d, 0x770ba95f),
- TOBN(0x8c33345c, 0xdc2ae9cb), TOBN(0xcecf1276, 0x01cc8403),
- TOBN(0x687c012e, 0x1b39b80f), TOBN(0xfd90d0ad, 0x35c33ba4),
- TOBN(0xa3ef5a67, 0x5c9661c2), TOBN(0x368fc88e, 0xe017429e),
- TOBN(0xd30c6761, 0x196a2fa2), TOBN(0x931b9817, 0xbd5b312e),
- TOBN(0xba01000c, 0x72f54a31), TOBN(0xa203d2c8, 0x66eaa541),
- TOBN(0xf2abdee0, 0x98939db3), TOBN(0xe37d6c2c, 0x3e606c02),
- TOBN(0xf2921574, 0x521ff643), TOBN(0x2781b3c4, 0xd7e2fca3),
- TOBN(0x664300b0, 0x7850ec06), TOBN(0xac5a38b9, 0x7d3a10cf),
- TOBN(0x9233188d, 0xe34ab39d), TOBN(0xe77057e4, 0x5072cbb9),
- TOBN(0xbcf0c042, 0xb59e78df), TOBN(0x4cfc91e8, 0x1d97de52),
- TOBN(0x4661a26c, 0x3ee0ca4a), TOBN(0x5620a4c1, 0xfb8507bc),
- TOBN(0x4b44d4aa, 0x049f842c), TOBN(0xceabc5d5, 0x1540e82b),
- TOBN(0x306710fd, 0x15c6f156), TOBN(0xbe5ae52b, 0x63db1d72),
- TOBN(0x06f1e7e6, 0x334957f1), TOBN(0x57e388f0, 0x31144a70),
- TOBN(0xfb69bb2f, 0xdf96447b), TOBN(0x0f78ebd3, 0x73e38a12),
- TOBN(0xb8222605, 0x2b7ce542), TOBN(0xe6d4ce99, 0x7472bde1),
- TOBN(0x53e16ebe, 0x09d2f4da), TOBN(0x180ff42e, 0x53b92b2e),
- TOBN(0xc59bcc02, 0x2c34a1c6), TOBN(0x3803d6f9, 0x422c46c2),
- TOBN(0x18aff74f, 0x5c14a8a2), TOBN(0x55aebf80, 0x10a08b28),
- TOBN(0x66097d58, 0x7135593f), TOBN(0x32e6eff7, 0x2be570cd),
- TOBN(0x584e6a10, 0x2a8c860d), TOBN(0xcd185890, 0xa2eb4163),
- TOBN(0x7ceae99d, 0x6d97e134), TOBN(0xd42c6b70, 0xdd8447ce),
- TOBN(0x59ddbb4a, 0xb8c50273), TOBN(0x03c612df, 0x3cf34e1e),
- TOBN(0x84b9ca15, 0x04b6c5a0), TOBN(0x35216f39, 0x18f0e3a3),
- TOBN(0x3ec2d2bc, 0xbd986c00), TOBN(0x8bf546d9, 0xd19228fe),
- TOBN(0xd1c655a4, 0x4cd623c3), TOBN(0x366ce718, 0x502b8e5a),
- TOBN(0x2cfc84b4, 0xeea0bfe7), TOBN(0xe01d5cee, 0xcf443e8e),
- TOBN(0x8ec045d9, 0x036520f8), TOBN(0xdfb3c3d1, 0x92d40e98),
- TOBN(0x0bac4cce, 0xcc559a04), TOBN(0x35eccae5, 0x240ea6b1),
- TOBN(0x180b32db, 0xf8a5a0ac), TOBN(0x547972a5, 0xeb699700),
- TOBN(0xa3765801, 0xca26bca0), TOBN(0x57e09d0e, 0xa647f25a),
- TOBN(0xb956970e, 0x2fdd23cc), TOBN(0xb80288bc, 0x5682e971),
- TOBN(0xe6e6d91e, 0x9ae86ebc), TOBN(0x0564c83f, 0x8c9f1939),
- TOBN(0x551932a2, 0x39560368), TOBN(0xe893752b, 0x049c28e2),
- TOBN(0x0b03cee5, 0xa6a158c3), TOBN(0xe12d656b, 0x04964263),
- TOBN(0x4b47554e, 0x63e3bc1d), TOBN(0xc719b6a2, 0x45044ff7),
- TOBN(0x4f24d30a, 0xe48daa07), TOBN(0xa3f37556, 0xc8c1edc3),
- TOBN(0x9a47bf76, 0x0700d360), TOBN(0xbb1a1824, 0x822ae4e2),
- TOBN(0x22e275a3, 0x89f1fb4c), TOBN(0x72b1aa23, 0x9968c5f5),
- TOBN(0xa75feaca, 0xbe063f64), TOBN(0x9b392f43, 0xbce47a09),
- TOBN(0xd4241509, 0x1ad07aca), TOBN(0x4b0c591b, 0x8d26cd0f),
- TOBN(0x2d42ddfd, 0x92f1169a), TOBN(0x63aeb1ac, 0x4cbf2392),
- TOBN(0x1de9e877, 0x0691a2af), TOBN(0xebe79af7, 0xd98021da),
- TOBN(0xcfdf2a4e, 0x40e50acf), TOBN(0xf0a98ad7, 0xaf01d665),
- TOBN(0xefb640bf, 0x1831be1f), TOBN(0x6fe8bd2f, 0x80e9ada0),
- TOBN(0x94c103a1, 0x6cafbc91), TOBN(0x170f8759, 0x8308e08c),
- TOBN(0x5de2d2ab, 0x9780ff4f), TOBN(0x666466bc, 0x45b201f2),
- TOBN(0x58af2010, 0xf5b343bc), TOBN(0x0f2e400a, 0xf2f142fe),
- TOBN(0x3483bfde, 0xa85f4bdf), TOBN(0xf0b1d093, 0x03bfeaa9),
- TOBN(0x2ea01b95, 0xc7081603), TOBN(0xe943e4c9, 0x3dba1097),
- TOBN(0x47be92ad, 0xb438f3a6), TOBN(0x00bb7742, 0xe5bf6636),
- TOBN(0x136b7083, 0x824297b4), TOBN(0x9d0e5580, 0x5584455f),
- TOBN(0xab48cedc, 0xf1c7d69e), TOBN(0x53a9e481, 0x2a256e76),
- TOBN(0x0402b0e0, 0x65eb2413), TOBN(0xdadbbb84, 0x8fc407a7),
- TOBN(0xa65cd5a4, 0x8d7f5492), TOBN(0x21d44293, 0x74bae294),
- TOBN(0x66917ce6, 0x3b5f1cc4), TOBN(0x37ae52ea, 0xce872e62),
- TOBN(0xbb087b72, 0x2905f244), TOBN(0x12077086, 0x1e6af74f),
- TOBN(0x4b644e49, 0x1058edea), TOBN(0x827510e3, 0xb638ca1d),
- TOBN(0x8cf2b704, 0x6038591c), TOBN(0xffc8b47a, 0xfe635063),
- TOBN(0x3ae220e6, 0x1b4d5e63), TOBN(0xbd864742, 0x9d961b4b),
- TOBN(0x610c107e, 0x9bd16bed), TOBN(0x4270352a, 0x1127147b),
- TOBN(0x7d17ffe6, 0x64cfc50e), TOBN(0x50dee01a, 0x1e36cb42),
- TOBN(0x068a7622, 0x35dc5f9a), TOBN(0x9a08d536, 0xdf53f62c),
- TOBN(0x4ed71457, 0x6be5f7de), TOBN(0xd93006f8, 0xc2263c9e),
- TOBN(0xe073694c, 0xcacacb36), TOBN(0x2ff7a5b4, 0x3ae118ab),
- TOBN(0x3cce53f1, 0xcd871236), TOBN(0xf156a39d, 0xc2aa6d52),
- TOBN(0x9cc5f271, 0xb198d76d), TOBN(0xbc615b6f, 0x81383d39),
- TOBN(0xa54538e8, 0xde3eee6b), TOBN(0x58c77538, 0xab910d91),
- TOBN(0x31e5bdbc, 0x58d278bd), TOBN(0x3cde4adf, 0xb963acae),
- TOBN(0xb1881fd2, 0x5302169c), TOBN(0x8ca60fa0, 0xa989ed8b),
- TOBN(0xa1999458, 0xff96a0ee), TOBN(0xc1141f03, 0xac6c283d),
- TOBN(0x7677408d, 0x6dfafed3), TOBN(0x33a01653, 0x39661588),
- TOBN(0x3c9c15ec, 0x0b726fa0), TOBN(0x090cfd93, 0x6c9b56da),
- TOBN(0xe34f4bae, 0xa3c40af5), TOBN(0x3469eadb, 0xd21129f1),
- TOBN(0xcc51674a, 0x1e207ce8), TOBN(0x1e293b24, 0xc83b1ef9),
- TOBN(0x17173d13, 0x1e6c0bb4), TOBN(0x19004695, 0x90776d35),
- TOBN(0xe7980e34, 0x6de6f922), TOBN(0x873554cb, 0xf4dd9a22),
- TOBN(0x0316c627, 0xcbf18a51), TOBN(0x4d93651b, 0x3032c081),
- TOBN(0x207f2771, 0x3946834d), TOBN(0x2c08d7b4, 0x30cdbf80),
- TOBN(0x137a4fb4, 0x86df2a61), TOBN(0xa1ed9c07, 0xecf7b4a2),
- TOBN(0xb2e460e2, 0x7bd042ff), TOBN(0xb7f5e2fa, 0x5f62f5ec),
- TOBN(0x7aa6ec6b, 0xcc2423b7), TOBN(0x75ce0a7f, 0xba63eea7),
- TOBN(0x67a45fb1, 0xf250a6e1), TOBN(0x93bc919c, 0xe53cdc9f),
- TOBN(0x9271f56f, 0x871942df), TOBN(0x2372ff6f, 0x7859ad66),
- TOBN(0x5f4c2b96, 0x33cb1a78), TOBN(0xe3e29101, 0x5838aa83),
- TOBN(0xa7ed1611, 0xe4e8110c), TOBN(0x2a2d70d5, 0x330198ce),
- TOBN(0xbdf132e8, 0x6720efe0), TOBN(0xe61a8962, 0x66a471bf),
- TOBN(0x796d3a85, 0x825808bd), TOBN(0x51dc3cb7, 0x3fd6e902),
- TOBN(0x643c768a, 0x916219d1), TOBN(0x36cd7685, 0xa2ad7d32),
- TOBN(0xe3db9d05, 0xb22922a4), TOBN(0x6494c87e, 0xdba29660),
- TOBN(0xf0ac91df, 0xbcd2ebc7), TOBN(0x4deb57a0, 0x45107f8d),
- TOBN(0x42271f59, 0xc3d12a73), TOBN(0x5f71687c, 0xa5c2c51d),
- TOBN(0xcb1f50c6, 0x05797bcb), TOBN(0x29ed0ed9, 0xd6d34eb0),
- TOBN(0xe5fe5b47, 0x4683c2eb), TOBN(0x4956eeb5, 0x97447c46),
- TOBN(0x5b163a43, 0x71207167), TOBN(0x93fa2fed, 0x0248c5ef),
- TOBN(0x67930af2, 0x31f63950), TOBN(0xa77797c1, 0x14caa2c9),
- TOBN(0x526e80ee, 0x27ac7e62), TOBN(0xe1e6e626, 0x58b28aec),
- TOBN(0x636178b0, 0xb3c9fef0), TOBN(0xaf7752e0, 0x6d5f90be),
- TOBN(0x94ecaf18, 0xeece51cf), TOBN(0x2864d0ed, 0xca806e1f),
- TOBN(0x6de2e383, 0x97c69134), TOBN(0x5a42c316, 0xeb291293),
- TOBN(0xc7779219, 0x6a60bae0), TOBN(0xa24de346, 0x6b7599d1),
- TOBN(0x49d374aa, 0xb75d4941), TOBN(0x98900586, 0x2d501ff0),
- TOBN(0x9f16d40e, 0xeb7974cf), TOBN(0x1033860b, 0xcdd8c115),
- TOBN(0xb6c69ac8, 0x2094cec3), TOBN(0x9976fb88, 0x403b770c),
- TOBN(0x1dea026c, 0x4859590d), TOBN(0xb6acbb46, 0x8562d1fd),
- TOBN(0x7cd6c461, 0x44569d85), TOBN(0xc3190a36, 0x97f0891d),
- TOBN(0xc6f53195, 0x48d5a17d), TOBN(0x7d919966, 0xd749abc8),
- TOBN(0x65104837, 0xdd1c8a20), TOBN(0x7e5410c8, 0x2f683419),
- TOBN(0x958c3ca8, 0xbe94022e), TOBN(0x605c3197, 0x6145dac2),
- TOBN(0x3fc07501, 0x01683d54), TOBN(0x1d7127c5, 0x595b1234),
- TOBN(0x10b8f87c, 0x9481277f), TOBN(0x677db2a8, 0xe65a1adb),
- TOBN(0xec2fccaa, 0xddce3345), TOBN(0x2a6811b7, 0x012a4350),
- TOBN(0x96760ff1, 0xac598bdc), TOBN(0x054d652a, 0xd1bf4128),
- TOBN(0x0a1151d4, 0x92a21005), TOBN(0xad7f3971, 0x33110fdf),
- TOBN(0x8c95928c, 0x1960100f), TOBN(0x6c91c825, 0x7bf03362),
- TOBN(0xc8c8b2a2, 0xce309f06), TOBN(0xfdb27b59, 0xca27204b),
- TOBN(0xd223eaa5, 0x0848e32e), TOBN(0xb93e4b2e, 0xe7bfaf1e),
- TOBN(0xc5308ae6, 0x44aa3ded), TOBN(0x317a666a, 0xc015d573),
- TOBN(0xc888ce23, 0x1a979707), TOBN(0xf141c1e6, 0x0d5c4958),
- TOBN(0xb53b7de5, 0x61906373), TOBN(0x858dbade, 0xeb999595),
- TOBN(0x8cbb47b2, 0xa59e5c36), TOBN(0x660318b3, 0xdcf4e842),
- TOBN(0xbd161ccd, 0x12ba4b7a), TOBN(0xf399daab, 0xf8c8282a),
- TOBN(0x1587633a, 0xeeb2130d), TOBN(0xa465311a, 0xda38dd7d),
- TOBN(0x5f75eec8, 0x64d3779b), TOBN(0x3c5d0476, 0xad64c171),
- TOBN(0x87410371, 0x2a914428), TOBN(0x8096a891, 0x90e2fc29),
- TOBN(0xd3d2ae9d, 0x23b3ebc2), TOBN(0x90bdd6db, 0xa580cfd6),
- TOBN(0x52dbb7f3, 0xc5b01f6c), TOBN(0xe68eded4, 0xe102a2dc),
- TOBN(0x17785b77, 0x99eb6df0), TOBN(0x26c3cc51, 0x7386b779),
- TOBN(0x345ed988, 0x6417a48e), TOBN(0xe990b4e4, 0x07d6ef31),
- TOBN(0x0f456b7e, 0x2586abba), TOBN(0x239ca6a5, 0x59c96e9a),
- TOBN(0xe327459c, 0xe2eb4206), TOBN(0x3a4c3313, 0xa002b90a),
- TOBN(0x2a114806, 0xf6a3f6fb), TOBN(0xad5cad2f, 0x85c251dd),
- TOBN(0x92c1f613, 0xf5a784d3), TOBN(0xec7bfacf, 0x349766d5),
- TOBN(0x04b3cd33, 0x3e23cb3b), TOBN(0x3979fe84, 0xc5a64b2d),
- TOBN(0x192e2720, 0x7e589106), TOBN(0xa60c43d1, 0xa15b527f),
- TOBN(0x2dae9082, 0xbe7cf3a6), TOBN(0xcc86ba92, 0xbc967274),
- TOBN(0xf28a2ce8, 0xaea0a8a9), TOBN(0x404ca6d9, 0x6ee988b3),
- TOBN(0xfd7e9c5d, 0x005921b8), TOBN(0xf56297f1, 0x44e79bf9),
- TOBN(0xa163b460, 0x0d75ddc2), TOBN(0x30b23616, 0xa1f2be87),
- TOBN(0x4b070d21, 0xbfe50e2b), TOBN(0x7ef8cfd0, 0xe1bfede1),
- TOBN(0xadba0011, 0x2aac4ae0), TOBN(0x2a3e7d01, 0xb9ebd033),
- TOBN(0x995277ec, 0xe38d9d1c), TOBN(0xb500249e, 0x9c5d2de3),
- TOBN(0x8912b820, 0xf13ca8c9), TOBN(0xc8798114, 0x877793af),
- TOBN(0x19e6125d, 0xec3f1dec), TOBN(0x07b1f040, 0x911178da),
- TOBN(0xd93ededa, 0x904a6738), TOBN(0x55187a5a, 0x0bebedcd),
- TOBN(0xf7d04722, 0xeb329d41), TOBN(0xf449099e, 0xf170b391),
- TOBN(0xfd317a69, 0xca99f828), TOBN(0x50c3db2b, 0x34a4976d),
- TOBN(0xe9ba7784, 0x3757b392), TOBN(0x326caefd, 0xaa3ca05a),
- TOBN(0x78e5293b, 0xf1e593d4), TOBN(0x7842a937, 0x0d98fd13),
- TOBN(0xe694bf96, 0x5f96b10d), TOBN(0x373a9df6, 0x06a8cd05),
- TOBN(0x997d1e51, 0xe8f0c7fc), TOBN(0x1d019790, 0x63fd972e),
- TOBN(0x0064d858, 0x5499fb32), TOBN(0x7b67bad9, 0x77a8aeb7),
- TOBN(0x1d3eb977, 0x2d08eec5), TOBN(0x5fc047a6, 0xcbabae1d),
- TOBN(0x0577d159, 0xe54a64bb), TOBN(0x8862201b, 0xc43497e4),
- TOBN(0xad6b4e28, 0x2ce0608d), TOBN(0x8b687b7d, 0x0b167aac),
- TOBN(0x6ed4d367, 0x8b2ecfa9), TOBN(0x24dfe62d, 0xa90c3c38),
- TOBN(0xa1862e10, 0x3fe5c42b), TOBN(0x1ca73dca, 0xd5732a9f),
- TOBN(0x35f038b7, 0x76bb87ad), TOBN(0x674976ab, 0xf242b81f),
- TOBN(0x4f2bde7e, 0xb0fd90cd), TOBN(0x6efc172e, 0xa7fdf092),
- TOBN(0x3806b69b, 0x92222f1f), TOBN(0x5a2459ca, 0x6cf7ae70),
- TOBN(0x6789f69c, 0xa85217ee), TOBN(0x5f232b5e, 0xe3dc85ac),
- TOBN(0x660e3ec5, 0x48e9e516), TOBN(0x124b4e47, 0x3197eb31),
- TOBN(0x10a0cb13, 0xaafcca23), TOBN(0x7bd63ba4, 0x8213224f),
- TOBN(0xaffad7cc, 0x290a7f4f), TOBN(0x6b409c9e, 0x0286b461),
- TOBN(0x58ab809f, 0xffa407af), TOBN(0xc3122eed, 0xc68ac073),
- TOBN(0x17bf9e50, 0x4ef24d7e), TOBN(0x5d929794, 0x3e2a5811),
- TOBN(0x519bc867, 0x02902e01), TOBN(0x76bba5da, 0x39c8a851),
- TOBN(0xe9f9669c, 0xda94951e), TOBN(0x4b6af58d, 0x66b8d418),
- TOBN(0xfa321074, 0x17d426a4), TOBN(0xc78e66a9, 0x9dde6027),
- TOBN(0x0516c083, 0x4a53b964), TOBN(0xfc659d38, 0xff602330),
- TOBN(0x0ab55e5c, 0x58c5c897), TOBN(0x985099b2, 0x838bc5df),
- TOBN(0x061d9efc, 0xc52fc238), TOBN(0x712b2728, 0x6ac1da3f),
- TOBN(0xfb658149, 0x9283fe08), TOBN(0x4954ac94, 0xb8aaa2f7),
- TOBN(0x85c0ada4, 0x7fb2e74f), TOBN(0xee8ba98e, 0xb89926b0),
- TOBN(0xe4f9d37d, 0x23d1af5b), TOBN(0x14ccdbf9, 0xba9b015e),
- TOBN(0xb674481b, 0x7bfe7178), TOBN(0x4e1debae, 0x65405868),
- TOBN(0x061b2821, 0xc48c867d), TOBN(0x69c15b35, 0x513b30ea),
- TOBN(0x3b4a1666, 0x36871088), TOBN(0xe5e29f5d, 0x1220b1ff),
- TOBN(0x4b82bb35, 0x233d9f4d), TOBN(0x4e076333, 0x18cdc675)},
- {TOBN(0x0d53f5c7, 0xa3e6fced), TOBN(0xe8cbbdd5, 0xf45fbdeb),
- TOBN(0xf85c01df, 0x13339a70), TOBN(0x0ff71880, 0x142ceb81),
- TOBN(0x4c4e8774, 0xbd70437a), TOBN(0x5fb32891, 0xba0bda6a),
- TOBN(0x1cdbebd2, 0xf18bd26e), TOBN(0x2f9526f1, 0x03a9d522),
- TOBN(0x40ce3051, 0x92c4d684), TOBN(0x8b04d725, 0x7612efcd),
- TOBN(0xb9dcda36, 0x6f9cae20), TOBN(0x0edc4d24, 0xf058856c),
- TOBN(0x64f2e6bf, 0x85427900), TOBN(0x3de81295, 0xdc09dfea),
- TOBN(0xd41b4487, 0x379bf26c), TOBN(0x50b62c6d, 0x6df135a9),
- TOBN(0xd4f8e3b4, 0xc72dfe67), TOBN(0xc416b0f6, 0x90e19fdf),
- TOBN(0x18b9098d, 0x4c13bd35), TOBN(0xac11118a, 0x15b8cb9e),
- TOBN(0xf598a318, 0xf0062841), TOBN(0xbfe0602f, 0x89f356f4),
- TOBN(0x7ae3637e, 0x30177a0c), TOBN(0x34097747, 0x61136537),
- TOBN(0x0db2fb5e, 0xd005832a), TOBN(0x5f5efd3b, 0x91042e4f),
- TOBN(0x8c4ffdc6, 0xed70f8ca), TOBN(0xe4645d0b, 0xb52da9cc),
- TOBN(0x9596f58b, 0xc9001d1f), TOBN(0x52c8f0bc, 0x4e117205),
- TOBN(0xfd4aa0d2, 0xe398a084), TOBN(0x815bfe3a, 0x104f49de),
- TOBN(0x97e5443f, 0x23885e5f), TOBN(0xf72f8f99, 0xe8433aab),
- TOBN(0xbd00b154, 0xe4d4e604), TOBN(0xd0b35e6a, 0xe5e173ff),
- TOBN(0x57b2a048, 0x9164722d), TOBN(0x3e3c665b, 0x88761ec8),
- TOBN(0x6bdd1397, 0x3da83832), TOBN(0x3c8b1a1e, 0x73dafe3b),
- TOBN(0x4497ace6, 0x54317cac), TOBN(0xbe600ab9, 0x521771b3),
- TOBN(0xb42e409e, 0xb0dfe8b8), TOBN(0x386a67d7, 0x3942310f),
- TOBN(0x25548d8d, 0x4431cc28), TOBN(0xa7cff142, 0x985dc524),
- TOBN(0x4d60f5a1, 0x93c4be32), TOBN(0x83ebd5c8, 0xd071c6e1),
- TOBN(0xba3a80a7, 0xb1fd2b0b), TOBN(0x9b3ad396, 0x5bec33e8),
- TOBN(0xb3868d61, 0x79743fb3), TOBN(0xcfd169fc, 0xfdb462fa),
- TOBN(0xd3b499d7, 0x9ce0a6af), TOBN(0x55dc1cf1, 0xe42d3ff8),
- TOBN(0x04fb9e6c, 0xc6c3e1b2), TOBN(0x47e6961d, 0x6f69a474),
- TOBN(0x54eb3acc, 0xe548b37b), TOBN(0xb38e7542, 0x84d40549),
- TOBN(0x8c3daa51, 0x7b341b4f), TOBN(0x2f6928ec, 0x690bf7fa),
- TOBN(0x0496b323, 0x86ce6c41), TOBN(0x01be1c55, 0x10adadcd),
- TOBN(0xc04e67e7, 0x4bb5faf9), TOBN(0x3cbaf678, 0xe15c9985),
- TOBN(0x8cd12145, 0x50ca4247), TOBN(0xba1aa47a, 0xe7dd30aa),
- TOBN(0x2f81ddf1, 0xe58fee24), TOBN(0x03452936, 0xeec9b0e8),
- TOBN(0x8bdc3b81, 0x243aea96), TOBN(0x9a2919af, 0x15c3d0e5),
- TOBN(0x9ea640ec, 0x10948361), TOBN(0x5ac86d5b, 0x6e0bcccf),
- TOBN(0xf892d918, 0xc36cf440), TOBN(0xaed3e837, 0xc939719c),
- TOBN(0xb07b08d2, 0xc0218b64), TOBN(0x6f1bcbba, 0xce9790dd),
- TOBN(0x4a84d6ed, 0x60919b8e), TOBN(0xd8900791, 0x8ac1f9eb),
- TOBN(0xf84941aa, 0x0dd5daef), TOBN(0xb22fe40a, 0x67fd62c5),
- TOBN(0x97e15ba2, 0x157f2db3), TOBN(0xbda2fc8f, 0x8e28ca9c),
- TOBN(0x5d050da4, 0x37b9f454), TOBN(0x3d57eb57, 0x2379d72e),
- TOBN(0xe9b5eba2, 0xfb5ee997), TOBN(0x01648ca2, 0xe11538ca),
- TOBN(0x32bb76f6, 0xf6327974), TOBN(0x338f14b8, 0xff3f4bb7),
- TOBN(0x524d226a, 0xd7ab9a2d), TOBN(0x9c00090d, 0x7dfae958),
- TOBN(0x0ba5f539, 0x8751d8c2), TOBN(0x8afcbcdd, 0x3ab8262d),
- TOBN(0x57392729, 0xe99d043b), TOBN(0xef51263b, 0xaebc943a),
- TOBN(0x9feace93, 0x20862935), TOBN(0x639efc03, 0xb06c817b),
- TOBN(0x1fe054b3, 0x66b4be7a), TOBN(0x3f25a9de, 0x84a37a1e),
- TOBN(0xf39ef1ad, 0x78d75cd9), TOBN(0xd7b58f49, 0x5062c1b5),
- TOBN(0x6f74f9a9, 0xff563436), TOBN(0xf718ff29, 0xe8af51e7),
- TOBN(0x5234d313, 0x15e97fec), TOBN(0xb6a8e2b1, 0x292f1c0a),
- TOBN(0xa7f53aa8, 0x327720c1), TOBN(0x956ca322, 0xba092cc8),
- TOBN(0x8f03d64a, 0x28746c4d), TOBN(0x51fe1782, 0x66d0d392),
- TOBN(0xd19b34db, 0x3c832c80), TOBN(0x60dccc5c, 0x6da2e3b4),
- TOBN(0x245dd62e, 0x0a104ccc), TOBN(0xa7ab1de1, 0x620b21fd),
- TOBN(0xb293ae0b, 0x3893d123), TOBN(0xf7b75783, 0xb15ee71c),
- TOBN(0x5aa3c614, 0x42a9468b), TOBN(0xd686123c, 0xdb15d744),
- TOBN(0x8c616891, 0xa7ab4116), TOBN(0x6fcd72c8, 0xa4e6a459),
- TOBN(0xac219110, 0x77e5fad7), TOBN(0xfb6a20e7, 0x704fa46b),
- TOBN(0xe839be7d, 0x341d81dc), TOBN(0xcddb6889, 0x32148379),
- TOBN(0xda6211a1, 0xf7026ead), TOBN(0xf3b2575f, 0xf4d1cc5e),
- TOBN(0x40cfc8f6, 0xa7a73ae6), TOBN(0x83879a5e, 0x61d5b483),
- TOBN(0xc5acb1ed, 0x41a50ebc), TOBN(0x59a60cc8, 0x3c07d8fa),
- TOBN(0x1b73bdce, 0xb1876262), TOBN(0x2b0d79f0, 0x12af4ee9),
- TOBN(0x8bcf3b0b, 0xd46e1d07), TOBN(0x17d6af9d, 0xe45d152f),
- TOBN(0x73520461, 0x6d736451), TOBN(0x43cbbd97, 0x56b0bf5a),
- TOBN(0xb0833a5b, 0xd5999b9d), TOBN(0x702614f0, 0xeb72e398),
- TOBN(0x0aadf01a, 0x59c3e9f8), TOBN(0x40200e77, 0xce6b3d16),
- TOBN(0xda22bdd3, 0xdeddafad), TOBN(0x76dedaf4, 0x310d72e1),
- TOBN(0x49ef807c, 0x4bc2e88f), TOBN(0x6ba81291, 0x146dd5a5),
- TOBN(0xa1a4077a, 0x7d8d59e9), TOBN(0x87b6a2e7, 0x802db349),
- TOBN(0xd5679997, 0x1b4e598e), TOBN(0xf499ef1f, 0x06fe4b1d),
- TOBN(0x3978d3ae, 0xfcb267c5), TOBN(0xb582b557, 0x235786d0),
- TOBN(0x32b3b2ca, 0x1715cb07), TOBN(0x4c3de6a2, 0x8480241d),
- TOBN(0x63b5ffed, 0xcb571ecd), TOBN(0xeaf53900, 0xed2fe9a9),
- TOBN(0xdec98d4a, 0xc3b81990), TOBN(0x1cb83722, 0x9e0cc8fe),
- TOBN(0xfe0b0491, 0xd2b427b9), TOBN(0x0f2386ac, 0xe983a66c),
- TOBN(0x930c4d1e, 0xb3291213), TOBN(0xa2f82b2e, 0x59a62ae4),
- TOBN(0x77233853, 0xf93e89e3), TOBN(0x7f8063ac, 0x11777c7f),
- TOBN(0xff0eb567, 0x59ad2877), TOBN(0x6f454642, 0x9865c754),
- TOBN(0xe6fe701a, 0x236e9a84), TOBN(0xc586ef16, 0x06e40fc3),
- TOBN(0x3f62b6e0, 0x24bafad9), TOBN(0xc8b42bd2, 0x64da906a),
- TOBN(0xc98e1eb4, 0xda3276a0), TOBN(0x30d0e5fc, 0x06cbf852),
- TOBN(0x1b6b2ae1, 0xe8b4dfd4), TOBN(0xd754d5c7, 0x8301cbac),
- TOBN(0x66097629, 0x112a39ac), TOBN(0xf86b5999, 0x93ba4ab9),
- TOBN(0x26c9dea7, 0x99f9d581), TOBN(0x0473b1a8, 0xc2fafeaa),
- TOBN(0x1469af55, 0x3b2505a5), TOBN(0x227d16d7, 0xd6a43323),
- TOBN(0x3316f73c, 0xad3d97f9), TOBN(0x52bf3bb5, 0x1f137455),
- TOBN(0x953eafeb, 0x09954e7c), TOBN(0xa721dfed, 0xdd732411),
- TOBN(0xb4929821, 0x141d4579), TOBN(0x3411321c, 0xaa3bd435),
- TOBN(0xafb355aa, 0x17fa6015), TOBN(0xb4e7ef4a, 0x18e42f0e),
- TOBN(0x604ac97c, 0x59371000), TOBN(0xe1c48c70, 0x7f759c18),
- TOBN(0x3f62ecc5, 0xa5db6b65), TOBN(0x0a78b173, 0x38a21495),
- TOBN(0x6be1819d, 0xbcc8ad94), TOBN(0x70dc04f6, 0xd89c3400),
- TOBN(0x462557b4, 0xa6b4840a), TOBN(0x544c6ade, 0x60bd21c0),
- TOBN(0x6a00f24e, 0x907a544b), TOBN(0xa7520dcb, 0x313da210),
- TOBN(0xfe939b75, 0x11e4994b), TOBN(0x918b6ba6, 0xbc275d70),
- TOBN(0xd3e5e0fc, 0x644be892), TOBN(0x707a9816, 0xfdaf6c42),
- TOBN(0x60145567, 0xf15c13fe), TOBN(0x4818ebaa, 0xe130a54a),
- TOBN(0x28aad3ad, 0x58d2f767), TOBN(0xdc5267fd, 0xd7e7c773),
- TOBN(0x4919cc88, 0xc3afcc98), TOBN(0xaa2e6ab0, 0x2db8cd4b),
- TOBN(0xd46fec04, 0xd0c63eaa), TOBN(0xa1cb92c5, 0x19ffa832),
- TOBN(0x678dd178, 0xe43a631f), TOBN(0xfb5ae1cd, 0x3dc788b3),
- TOBN(0x68b4fb90, 0x6e77de04), TOBN(0x7992bcf0, 0xf06dbb97),
- TOBN(0x896e6a13, 0xc417c01d), TOBN(0x8d96332c, 0xb956be01),
- TOBN(0x902fc93a, 0x413aa2b9), TOBN(0x99a4d915, 0xfc98c8a5),
- TOBN(0x52c29407, 0x565f1137), TOBN(0x4072690f, 0x21e4f281),
- TOBN(0x36e607cf, 0x02ff6072), TOBN(0xa47d2ca9, 0x8ad98cdc),
- TOBN(0xbf471d1e, 0xf5f56609), TOBN(0xbcf86623, 0xf264ada0),
- TOBN(0xb70c0687, 0xaa9e5cb6), TOBN(0xc98124f2, 0x17401c6c),
- TOBN(0x8189635f, 0xd4a61435), TOBN(0xd28fb8af, 0xa9d98ea6),
- TOBN(0xb9a67c2a, 0x40c251f8), TOBN(0x88cd5d87, 0xa2da44be),
- TOBN(0x437deb96, 0xe09b5423), TOBN(0x150467db, 0x64287dc1),
- TOBN(0xe161debb, 0xcdabb839), TOBN(0xa79e9742, 0xf1839a3e),
- TOBN(0xbb8dd3c2, 0x652d202b), TOBN(0x7b3e67f7, 0xe9f97d96),
- TOBN(0x5aa5d78f, 0xb1cb6ac9), TOBN(0xffa13e8e, 0xca1d0d45),
- TOBN(0x369295dd, 0x2ba5bf95), TOBN(0xd68bd1f8, 0x39aff05e),
- TOBN(0xaf0d86f9, 0x26d783f2), TOBN(0x543a59b3, 0xfc3aafc1),
- TOBN(0x3fcf81d2, 0x7b7da97c), TOBN(0xc990a056, 0xd25dee46),
- TOBN(0x3e6775b8, 0x519cce2c), TOBN(0xfc9af71f, 0xae13d863),
- TOBN(0x774a4a6f, 0x47c1605c), TOBN(0x46ba4245, 0x2fd205e8),
- TOBN(0xa06feea4, 0xd3fd524d), TOBN(0x1e724641, 0x6de1acc2),
- TOBN(0xf53816f1, 0x334e2b42), TOBN(0x49e5918e, 0x922f0024),
- TOBN(0x439530b6, 0x65c7322d), TOBN(0xcf12cc01, 0xb3c1b3fb),
- TOBN(0xc70b0186, 0x0172f685), TOBN(0xb915ee22, 0x1b58391d),
- TOBN(0x9afdf03b, 0xa317db24), TOBN(0x87dec659, 0x17b8ffc4),
- TOBN(0x7f46597b, 0xe4d3d050), TOBN(0x80a1c1ed, 0x006500e7),
- TOBN(0x84902a96, 0x78bf030e), TOBN(0xfb5e9c9a, 0x50560148),
- TOBN(0x6dae0a92, 0x63362426), TOBN(0xdcaeecf4, 0xa9e30c40),
- TOBN(0xc0d887bb, 0x518d0c6b), TOBN(0x99181152, 0xcb985b9d),
- TOBN(0xad186898, 0xef7bc381), TOBN(0x18168ffb, 0x9ee46201),
- TOBN(0x9a04cdaa, 0x2502753c), TOBN(0xbb279e26, 0x51407c41),
- TOBN(0xeacb03aa, 0xf23564e5), TOBN(0x18336582, 0x71e61016),
- TOBN(0x8684b8c4, 0xeb809877), TOBN(0xb336e18d, 0xea0e672e),
- TOBN(0xefb601f0, 0x34ee5867), TOBN(0x2733edbe, 0x1341cfd1),
- TOBN(0xb15e809a, 0x26025c3c), TOBN(0xe6e981a6, 0x9350df88),
- TOBN(0x92376237, 0x8502fd8e), TOBN(0x4791f216, 0x0c12be9b),
- TOBN(0xb7256789, 0x25f02425), TOBN(0xec863194, 0x7a974443),
- TOBN(0x7c0ce882, 0xfb41cc52), TOBN(0xc266ff7e, 0xf25c07f2),
- TOBN(0x3d4da8c3, 0x017025f3), TOBN(0xefcf628c, 0xfb9579b4),
- TOBN(0x5c4d0016, 0x1f3716ec), TOBN(0x9c27ebc4, 0x6801116e),
- TOBN(0x5eba0ea1, 0x1da1767e), TOBN(0xfe151452, 0x47004c57),
- TOBN(0x3ace6df6, 0x8c2373b7), TOBN(0x75c3dffe, 0x5dbc37ac),
- TOBN(0x3dc32a73, 0xddc925fc), TOBN(0xb679c841, 0x2f65ee0b),
- TOBN(0x715a3295, 0x451cbfeb), TOBN(0xd9889768, 0xf76e9a29),
- TOBN(0xec20ce7f, 0xb28ad247), TOBN(0xe99146c4, 0x00894d79),
- TOBN(0x71457d7c, 0x9f5e3ea7), TOBN(0x097b2662, 0x38030031),
- TOBN(0xdb7f6ae6, 0xcf9f82a8), TOBN(0x319decb9, 0x438f473a),
- TOBN(0xa63ab386, 0x283856c3), TOBN(0x13e3172f, 0xb06a361b),
- TOBN(0x2959f8dc, 0x7d5a006c), TOBN(0x2dbc27c6, 0x75fba752),
- TOBN(0xc1227ab2, 0x87c22c9e), TOBN(0x06f61f75, 0x71a268b2),
- TOBN(0x1b6bb971, 0x04779ce2), TOBN(0xaca83812, 0x0aadcb1d),
- TOBN(0x297ae0bc, 0xaeaab2d5), TOBN(0xa5c14ee7, 0x5bfb9f13),
- TOBN(0xaa00c583, 0xf17a62c7), TOBN(0x39eb962c, 0x173759f6),
- TOBN(0x1eeba1d4, 0x86c9a88f), TOBN(0x0ab6c37a, 0xdf016c5e),
- TOBN(0xa2a147db, 0xa28a0749), TOBN(0x246c20d6, 0xee519165),
- TOBN(0x5068d1b1, 0xd3810715), TOBN(0xb1e7018c, 0x748160b9),
- TOBN(0x03f5b1fa, 0xf380ff62), TOBN(0xef7fb1dd, 0xf3cb2c1e),
- TOBN(0xeab539a8, 0xfc91a7da), TOBN(0x83ddb707, 0xf3f9b561),
- TOBN(0xc550e211, 0xfe7df7a4), TOBN(0xa7cd07f2, 0x063f6f40),
- TOBN(0xb0de3635, 0x2976879c), TOBN(0xb5f83f85, 0xe55741da),
- TOBN(0x4ea9d25e, 0xf3d8ac3d), TOBN(0x6fe2066f, 0x62819f02),
- TOBN(0x4ab2b9c2, 0xcef4a564), TOBN(0x1e155d96, 0x5ffa2de3),
- TOBN(0x0eb0a19b, 0xc3a72d00), TOBN(0x4037665b, 0x8513c31b),
- TOBN(0x2fb2b6bf, 0x04c64637), TOBN(0x45c34d6e, 0x08cdc639),
- TOBN(0x56f1e10f, 0xf01fd796), TOBN(0x4dfb8101, 0xfe3667b8),
- TOBN(0xe0eda253, 0x9021d0c0), TOBN(0x7a94e9ff, 0x8a06c6ab),
- TOBN(0x2d3bb0d9, 0xbb9aa882), TOBN(0xea20e4e5, 0xec05fd10),
- TOBN(0xed7eeb5f, 0x1a1ca64e), TOBN(0x2fa6b43c, 0xc6327cbd),
- TOBN(0xb577e3cf, 0x3aa91121), TOBN(0x8c6bd5ea, 0x3a34079b),
- TOBN(0xd7e5ba39, 0x60e02fc0), TOBN(0xf16dd2c3, 0x90141bf8),
- TOBN(0xb57276d9, 0x80101b98), TOBN(0x760883fd, 0xb82f0f66),
- TOBN(0x89d7de75, 0x4bc3eff3), TOBN(0x03b60643, 0x5dc2ab40),
- TOBN(0xcd6e53df, 0xe05beeac), TOBN(0xf2f1e862, 0xbc3325cd),
- TOBN(0xdd0f7921, 0x774f03c3), TOBN(0x97ca7221, 0x4552cc1b),
- TOBN(0x5a0d6afe, 0x1cd19f72), TOBN(0xa20915dc, 0xf183fbeb),
- TOBN(0x9fda4b40, 0x832c403c), TOBN(0x32738edd, 0xbe425442),
- TOBN(0x469a1df6, 0xb5eccf1a), TOBN(0x4b5aff42, 0x28bbe1f0),
- TOBN(0x31359d7f, 0x570dfc93), TOBN(0xa18be235, 0xf0088628),
- TOBN(0xa5b30fba, 0xb00ed3a9), TOBN(0x34c61374, 0x73cdf8be),
- TOBN(0x2c5c5f46, 0xabc56797), TOBN(0x5cecf93d, 0xb82a8ae2),
- TOBN(0x7d3dbe41, 0xa968fbf0), TOBN(0xd23d4583, 0x1a5c7f3d),
- TOBN(0xf28f69a0, 0xc087a9c7), TOBN(0xc2d75471, 0x474471ca),
- TOBN(0x36ec9f4a, 0x4eb732ec), TOBN(0x6c943bbd, 0xb1ca6bed),
- TOBN(0xd64535e1, 0xf2457892), TOBN(0x8b84a8ea, 0xf7e2ac06),
- TOBN(0xe0936cd3, 0x2499dd5f), TOBN(0x12053d7e, 0x0ed04e57),
- TOBN(0x4bdd0076, 0xe4305d9d), TOBN(0x34a527b9, 0x1f67f0a2),
- TOBN(0xe79a4af0, 0x9cec46ea), TOBN(0xb15347a1, 0x658b9bc7),
- TOBN(0x6bd2796f, 0x35af2f75), TOBN(0xac957990, 0x4051c435),
- TOBN(0x2669dda3, 0xc33a655d), TOBN(0x5d503c2e, 0x88514aa3),
- TOBN(0xdfa11337, 0x3753dd41), TOBN(0x3f054673, 0x0b754f78),
- TOBN(0xbf185677, 0x496125bd), TOBN(0xfb0023c8, 0x3775006c),
- TOBN(0xfa0f072f, 0x3a037899), TOBN(0x4222b6eb, 0x0e4aea57),
- TOBN(0x3dde5e76, 0x7866d25a), TOBN(0xb6eb04f8, 0x4837aa6f),
- TOBN(0x5315591a, 0x2cf1cdb8), TOBN(0x6dfb4f41, 0x2d4e683c),
- TOBN(0x7e923ea4, 0x48ee1f3a), TOBN(0x9604d9f7, 0x05a2afd5),
- TOBN(0xbe1d4a33, 0x40ea4948), TOBN(0x5b45f1f4, 0xb44cbd2f),
- TOBN(0x5faf8376, 0x4acc757e), TOBN(0xa7cf9ab8, 0x63d68ff7),
- TOBN(0x8ad62f69, 0xdf0e404b), TOBN(0xd65f33c2, 0x12bdafdf),
- TOBN(0xc365de15, 0xa377b14e), TOBN(0x6bf5463b, 0x8e39f60c),
- TOBN(0x62030d2d, 0x2ce68148), TOBN(0xd95867ef, 0xe6f843a8),
- TOBN(0xd39a0244, 0xef5ab017), TOBN(0x0bd2d8c1, 0x4ab55d12),
- TOBN(0xc9503db3, 0x41639169), TOBN(0x2d4e25b0, 0xf7660c8a),
- TOBN(0x760cb3b5, 0xe224c5d7), TOBN(0xfa3baf8c, 0x68616919),
- TOBN(0x9fbca113, 0x8d142552), TOBN(0x1ab18bf1, 0x7669ebf5),
- TOBN(0x55e6f53e, 0x9bdf25dd), TOBN(0x04cc0bf3, 0xcb6cd154),
- TOBN(0x595bef49, 0x95e89080), TOBN(0xfe9459a8, 0x104a9ac1),
- TOBN(0xad2d89ca, 0xcce9bb32), TOBN(0xddea65e1, 0xf7de8285),
- TOBN(0x62ed8c35, 0xb351bd4b), TOBN(0x4150ff36, 0x0c0e19a7),
- TOBN(0x86e3c801, 0x345f4e47), TOBN(0x3bf21f71, 0x203a266c),
- TOBN(0x7ae110d4, 0x855b1f13), TOBN(0x5d6aaf6a, 0x07262517),
- TOBN(0x1e0f12e1, 0x813d28f1), TOBN(0x6000e11d, 0x7ad7a523),
- TOBN(0xc7d8deef, 0xc744a17b), TOBN(0x1e990b48, 0x14c05a00),
- TOBN(0x68fddaee, 0x93e976d5), TOBN(0x696241d1, 0x46610d63),
- TOBN(0xb204e7c3, 0x893dda88), TOBN(0x8bccfa65, 0x6a3a6946),
- TOBN(0xb59425b4, 0xc5cd1411), TOBN(0x701b4042, 0xff3658b1),
- TOBN(0xe3e56bca, 0x4784cf93), TOBN(0x27de5f15, 0x8fe68d60),
- TOBN(0x4ab9cfce, 0xf8d53f19), TOBN(0xddb10311, 0xa40a730d),
- TOBN(0x6fa73cd1, 0x4eee0a8a), TOBN(0xfd548748, 0x5249719d),
- TOBN(0x49d66316, 0xa8123ef0), TOBN(0x73c32db4, 0xe7f95438),
- TOBN(0x2e2ed209, 0x0d9e7854), TOBN(0xf98a9329, 0x9d9f0507),
- TOBN(0xc5d33cf6, 0x0c6aa20a), TOBN(0x9a32ba14, 0x75279bb2),
- TOBN(0x7e3202cb, 0x774a7307), TOBN(0x64ed4bc4, 0xe8c42dbd),
- TOBN(0xc20f1a06, 0xd4caed0d), TOBN(0xb8021407, 0x171d22b3),
- TOBN(0xd426ca04, 0xd13268d7), TOBN(0x92377007, 0x25f4d126),
- TOBN(0x4204cbc3, 0x71f21a85), TOBN(0x18461b7a, 0xf82369ba),
- TOBN(0xc0c07d31, 0x3fc858f9), TOBN(0x5deb5a50, 0xe2bab569),
- TOBN(0xd5959d46, 0xd5eea89e), TOBN(0xfdff8424, 0x08437f4b),
- TOBN(0xf21071e4, 0x3cfe254f), TOBN(0x72417696, 0x95468321),
- TOBN(0x5d8288b9, 0x102cae3e), TOBN(0x2d143e3d, 0xf1965dff),
- TOBN(0x00c9a376, 0xa078d847), TOBN(0x6fc0da31, 0x26028731),
- TOBN(0xa2baeadf, 0xe45083a2), TOBN(0x66bc7218, 0x5e5b4bcd),
- TOBN(0x2c826442, 0xd04b8e7f), TOBN(0xc19f5451, 0x6c4b586b),
- TOBN(0x60182c49, 0x5b7eeed5), TOBN(0xd9954ecd, 0x7aa9dfa1),
- TOBN(0xa403a8ec, 0xc73884ad), TOBN(0x7fb17de2, 0x9bb39041),
- TOBN(0x694b64c5, 0xabb020e8), TOBN(0x3d18c184, 0x19c4eec7),
- TOBN(0x9c4673ef, 0x1c4793e5), TOBN(0xc7b8aeb5, 0x056092e6),
- TOBN(0x3aa1ca43, 0xf0f8c16b), TOBN(0x224ed5ec, 0xd679b2f6),
- TOBN(0x0d56eeaf, 0x55a205c9), TOBN(0xbfe115ba, 0x4b8e028b),
- TOBN(0x97e60849, 0x3927f4fe), TOBN(0xf91fbf94, 0x759aa7c5),
- TOBN(0x985af769, 0x6be90a51), TOBN(0xc1277b78, 0x78ccb823),
- TOBN(0x395b656e, 0xe7a75952), TOBN(0x00df7de0, 0x928da5f5),
- TOBN(0x09c23175, 0x4ca4454f), TOBN(0x4ec971f4, 0x7aa2d3c1),
- TOBN(0x45c3c507, 0xe75d9ccc), TOBN(0x63b7be8a, 0x3dc90306),
- TOBN(0x37e09c66, 0x5db44bdc), TOBN(0x50d60da1, 0x6841c6a2),
- TOBN(0x6f9b65ee, 0x08df1b12), TOBN(0x38734879, 0x7ff089df),
- TOBN(0x9c331a66, 0x3fe8013d), TOBN(0x017f5de9, 0x5f42fcc8),
- TOBN(0x43077866, 0xe8e57567), TOBN(0xc9f781ce, 0xf9fcdb18),
- TOBN(0x38131dda, 0x9b12e174), TOBN(0x25d84aa3, 0x8a03752a),
- TOBN(0x45e09e09, 0x4d0c0ce2), TOBN(0x1564008b, 0x92bebba5),
- TOBN(0xf7e8ad31, 0xa87284c7), TOBN(0xb7c4b46c, 0x97e7bbaa),
- TOBN(0x3e22a7b3, 0x97acf4ec), TOBN(0x0426c400, 0x5ea8b640),
- TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670),
- TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed),
- TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)},
- {TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7),
- TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e),
- TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d),
- TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef),
- TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090),
- TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124),
- TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3),
- TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad),
- TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46),
- TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505),
- TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33),
- TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1),
- TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0),
- TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec),
- TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00),
- TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695),
- TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a),
- TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1),
- TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1),
- TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604),
- TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094),
- TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33),
- TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773),
- TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20),
- TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0),
- TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc),
- TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5),
- TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846),
- TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d),
- TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9),
- TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2),
- TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342),
- TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e),
- TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f),
- TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb),
- TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8),
- TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c),
- TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef),
- TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485),
- TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799),
- TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c),
- TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a),
- TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374),
- TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2),
- TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1),
- TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f),
- TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0),
- TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98),
- TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa),
- TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe),
- TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568),
- TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6),
- TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db),
- TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39),
- TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed),
- TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a),
- TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97),
- TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe),
- TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116),
- TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192),
- TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e),
- TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201),
- TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66),
- TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11),
- TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819),
- TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709),
- TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671),
- TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1),
- TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2),
- TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a),
- TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9),
- TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84),
- TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f),
- TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a),
- TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e),
- TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a),
- TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e),
- TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0),
- TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f),
- TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf),
- TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05),
- TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596),
- TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674),
- TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25),
- TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825),
- TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e),
- TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6),
- TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5),
- TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e),
- TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de),
- TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7),
- TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf),
- TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd),
- TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad),
- TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced),
- TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178),
- TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547),
- TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96),
- TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0),
- TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98),
- TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994),
- TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa),
- TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa),
- TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81),
- TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a),
- TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148),
- TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab),
- TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80),
- TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3),
- TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb),
- TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41),
- TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa),
- TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a),
- TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a),
- TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd),
- TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831),
- TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe),
- TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6),
- TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810),
- TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a),
- TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a),
- TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054),
- TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9),
- TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4),
- TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604),
- TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb),
- TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff),
- TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb),
- TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa),
- TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d),
- TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c),
- TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef),
- TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857),
- TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a),
- TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6),
- TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35),
- TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302),
- TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe),
- TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f),
- TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa),
- TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9),
- TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a),
- TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515),
- TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4),
- TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642),
- TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf),
- TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3),
- TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac),
- TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1),
- TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196),
- TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77),
- TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f),
- TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374),
- TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6),
- TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131),
- TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001),
- TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd),
- TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115),
- TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617),
- TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b),
- TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1),
- TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a),
- TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c),
- TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7),
- TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178),
- TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770),
- TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a),
- TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e),
- TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b),
- TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f),
- TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef),
- TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686),
- TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff),
- TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee),
- TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2),
- TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1),
- TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1),
- TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7),
- TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9),
- TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046),
- TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6),
- TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5),
- TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644),
- TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197),
- TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17),
- TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253),
- TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be),
- TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188),
- TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e),
- TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf),
- TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397),
- TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2),
- TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571),
- TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1),
- TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9),
- TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa),
- TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4),
- TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb),
- TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575),
- TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b),
- TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c),
- TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af),
- TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a),
- TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f),
- TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900),
- TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958),
- TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7),
- TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5),
- TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23),
- TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051),
- TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0),
- TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8),
- TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656),
- TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4),
- TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16),
- TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9),
- TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57),
- TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0),
- TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817),
- TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490),
- TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f),
- TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6),
- TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637),
- TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0),
- TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047),
- TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44),
- TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b),
- TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445),
- TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8),
- TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503),
- TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71),
- TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d),
- TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993),
- TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47),
- TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203),
- TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd),
- TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480),
- TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733),
- TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9),
- TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3),
- TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1),
- TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce),
- TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa),
- TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd),
- TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5),
- TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358),
- TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b),
- TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8),
- TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b),
- TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562),
- TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b),
- TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef),
- TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9),
- TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3),
- TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952),
- TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636)},
- {TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00),
- TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28),
- TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949),
- TOBN(0x1a09eea9, 0x53479fc6), TOBN(0x82ae9891, 0xf499e742),
- TOBN(0xab58b910, 0x5ca7d866), TOBN(0x582967e2, 0x3adb3b34),
- TOBN(0x89ae4447, 0xcceac0bc), TOBN(0x919c667c, 0x7bf56af5),
- TOBN(0x9aec17b1, 0x60f5dcd7), TOBN(0xec697b9f, 0xddcaadbc),
- TOBN(0x0b98f341, 0x463467f5), TOBN(0xb187f1f7, 0xa967132f),
- TOBN(0x90fe7a1d, 0x214aeb18), TOBN(0x1506af3c, 0x741432f7),
- TOBN(0xbb5565f9, 0xe591a0c4), TOBN(0x10d41a77, 0xb44f1bc3),
- TOBN(0xa09d65e4, 0xa84bde96), TOBN(0x42f060d8, 0xf20a6a1c),
- TOBN(0x652a3bfd, 0xf27f9ce7), TOBN(0xb6bdb65c, 0x3b3d739f),
- TOBN(0xeb5ddcb6, 0xec7fae9f), TOBN(0x995f2714, 0xefb66e5a),
- TOBN(0xdee95d8e, 0x69445d52), TOBN(0x1b6c2d46, 0x09e27620),
- TOBN(0x32621c31, 0x8129d716), TOBN(0xb03909f1, 0x0958c1aa),
- TOBN(0x8c468ef9, 0x1af4af63), TOBN(0x162c429f, 0xfba5cdf6),
- TOBN(0x2f682343, 0x753b9371), TOBN(0x29cab45a, 0x5f1f9cd7),
- TOBN(0x571623ab, 0xb245db96), TOBN(0xc507db09, 0x3fd79999),
- TOBN(0x4e2ef652, 0xaf036c32), TOBN(0x86f0cc78, 0x05018e5c),
- TOBN(0xc10a73d4, 0xab8be350), TOBN(0x6519b397, 0x7e826327),
- TOBN(0xe8cb5eef, 0x9c053df7), TOBN(0x8de25b37, 0xb300ea6f),
- TOBN(0xdb03fa92, 0xc849cffb), TOBN(0x242e43a7, 0xe84169bb),
- TOBN(0xe4fa51f4, 0xdd6f958e), TOBN(0x6925a77f, 0xf4445a8d),
- TOBN(0xe6e72a50, 0xe90d8949), TOBN(0xc66648e3, 0x2b1f6390),
- TOBN(0xb2ab1957, 0x173e460c), TOBN(0x1bbbce75, 0x30704590),
- TOBN(0xc0a90dbd, 0xdb1c7162), TOBN(0x505e399e, 0x15cdd65d),
- TOBN(0x68434dcb, 0x57797ab7), TOBN(0x60ad35ba, 0x6a2ca8e8),
- TOBN(0x4bfdb1e0, 0xde3336c1), TOBN(0xbbef99eb, 0xd8b39015),
- TOBN(0x6c3b96f3, 0x1711ebec), TOBN(0x2da40f1f, 0xce98fdc4),
- TOBN(0xb99774d3, 0x57b4411f), TOBN(0x87c8bdf4, 0x15b65bb6),
- TOBN(0xda3a89e3, 0xc2eef12d), TOBN(0xde95bb9b, 0x3c7471f3),
- TOBN(0x600f225b, 0xd812c594), TOBN(0x54907c5d, 0x2b75a56b),
- TOBN(0xa93cc5f0, 0x8db60e35), TOBN(0x743e3cd6, 0xfa833319),
- TOBN(0x7dad5c41, 0xf81683c9), TOBN(0x70c1e7d9, 0x9c34107e),
- TOBN(0x0edc4a39, 0xa6be0907), TOBN(0x36d47035, 0x86d0b7d3),
- TOBN(0x8c76da03, 0x272bfa60), TOBN(0x0b4a07ea, 0x0f08a414),
- TOBN(0x699e4d29, 0x45c1dd53), TOBN(0xcadc5898, 0x231debb5),
- TOBN(0xdf49fcc7, 0xa77f00e0), TOBN(0x93057bbf, 0xa73e5a0e),
- TOBN(0x2f8b7ecd, 0x027a4cd1), TOBN(0x114734b3, 0xc614011a),
- TOBN(0xe7a01db7, 0x67677c68), TOBN(0x89d9be5e, 0x7e273f4f),
- TOBN(0xd225cb2e, 0x089808ef), TOBN(0xf1f7a27d, 0xd59e4107),
- TOBN(0x53afc761, 0x8211b9c9), TOBN(0x0361bc67, 0xe6819159),
- TOBN(0x2a865d0b, 0x7f071426), TOBN(0x6a3c1810, 0xe7072567),
- TOBN(0x3e3bca1e, 0x0d6bcabd), TOBN(0xa1b02bc1, 0x408591bc),
- TOBN(0xe0deee59, 0x31fba239), TOBN(0xf47424d3, 0x98bd91d1),
- TOBN(0x0f8886f4, 0x071a3c1d), TOBN(0x3f7d41e8, 0xa819233b),
- TOBN(0x708623c2, 0xcf6eb998), TOBN(0x86bb49af, 0x609a287f),
- TOBN(0x942bb249, 0x63c90762), TOBN(0x0ef6eea5, 0x55a9654b),
- TOBN(0x5f6d2d72, 0x36f5defe), TOBN(0xfa9922dc, 0x56f99176),
- TOBN(0x6c8c5ece, 0xf78ce0c7), TOBN(0x7b44589d, 0xbe09b55e),
- TOBN(0xe11b3bca, 0x9ea83770), TOBN(0xd7fa2c7f, 0x2ab71547),
- TOBN(0x2a3dd6fa, 0x2a1ddcc0), TOBN(0x09acb430, 0x5a7b7707),
- TOBN(0x4add4a2e, 0x649d4e57), TOBN(0xcd53a2b0, 0x1917526e),
- TOBN(0xc5262330, 0x20b44ac4), TOBN(0x4028746a, 0xbaa2c31d),
- TOBN(0x51318390, 0x64291d4c), TOBN(0xbf48f151, 0xee5ad909),
- TOBN(0xcce57f59, 0x7b185681), TOBN(0x7c3ac1b0, 0x4854d442),
- TOBN(0x65587dc3, 0xc093c171), TOBN(0xae7acb24, 0x24f42b65),
- TOBN(0x5a338adb, 0x955996cb), TOBN(0xc8e65675, 0x6051f91b),
- TOBN(0x66711fba, 0x28b8d0b1), TOBN(0x15d74137, 0xb6c10a90),
- TOBN(0x70cdd7eb, 0x3a232a80), TOBN(0xc9e2f07f, 0x6191ed24),
- TOBN(0xa80d1db6, 0xf79588c0), TOBN(0xfa52fc69, 0xb55768cc),
- TOBN(0x0b4df1ae, 0x7f54438a), TOBN(0x0cadd1a7, 0xf9b46a4f),
- TOBN(0xb40ea6b3, 0x1803dd6f), TOBN(0x488e4fa5, 0x55eaae35),
- TOBN(0x9f047d55, 0x382e4e16), TOBN(0xc9b5b7e0, 0x2f6e0c98),
- TOBN(0x6b1bd2d3, 0x95762649), TOBN(0xa9604ee7, 0xc7aea3f6),
- TOBN(0x3646ff27, 0x6dc6f896), TOBN(0x9bf0e7f5, 0x2860bad1),
- TOBN(0x2d92c821, 0x7cb44b92), TOBN(0xa2f5ce63, 0xaea9c182),
- TOBN(0xd0a2afb1, 0x9154a5fd), TOBN(0x482e474c, 0x95801da6),
- TOBN(0xc19972d0, 0xb611c24b), TOBN(0x1d468e65, 0x60a8f351),
- TOBN(0xeb758069, 0x7bcf6421), TOBN(0xec9dd0ee, 0x88fbc491),
- TOBN(0x5b59d2bf, 0x956c2e32), TOBN(0x73dc6864, 0xdcddf94e),
- TOBN(0xfd5e2321, 0xbcee7665), TOBN(0xa7b4f8ef, 0x5e9a06c4),
- TOBN(0xfba918dd, 0x7280f855), TOBN(0xbbaac260, 0x8baec688),
- TOBN(0xa3b3f00f, 0x33400f42), TOBN(0x3d2dba29, 0x66f2e6e4),
- TOBN(0xb6f71a94, 0x98509375), TOBN(0x8f33031f, 0xcea423cc),
- TOBN(0x009b8dd0, 0x4807e6fb), TOBN(0x5163cfe5, 0x5cdb954c),
- TOBN(0x03cc8f17, 0xcf41c6e8), TOBN(0xf1f03c2a, 0x037b925c),
- TOBN(0xc39c19cc, 0x66d2427c), TOBN(0x823d24ba, 0x7b6c18e4),
- TOBN(0x32ef9013, 0x901f0b4f), TOBN(0x684360f1, 0xf8941c2e),
- TOBN(0x0ebaff52, 0x2c28092e), TOBN(0x7891e4e3, 0x256c932f),
- TOBN(0x51264319, 0xac445e3d), TOBN(0x553432e7, 0x8ea74381),
- TOBN(0xe6eeaa69, 0x67e9c50a), TOBN(0x27ced284, 0x62e628c7),
- TOBN(0x3f96d375, 0x7a4afa57), TOBN(0xde0a14c3, 0xe484c150),
- TOBN(0x364a24eb, 0x38bd9923), TOBN(0x1df18da0, 0xe5177422),
- TOBN(0x174e8f82, 0xd8d38a9b), TOBN(0x2e97c600, 0xe7de1391),
- TOBN(0xc5709850, 0xa1c175dd), TOBN(0x969041a0, 0x32ae5035),
- TOBN(0xcbfd533b, 0x76a2086b), TOBN(0xd6bba71b, 0xd7c2e8fe),
- TOBN(0xb2d58ee6, 0x099dfb67), TOBN(0x3a8b342d, 0x064a85d9),
- TOBN(0x3bc07649, 0x522f9be3), TOBN(0x690c075b, 0xdf1f49a8),
- TOBN(0x80e1aee8, 0x3854ec42), TOBN(0x2a7dbf44, 0x17689dc7),
- TOBN(0xc004fc0e, 0x3faf4078), TOBN(0xb2f02e9e, 0xdf11862c),
- TOBN(0xf10a5e0f, 0xa0a1b7b3), TOBN(0x30aca623, 0x8936ec80),
- TOBN(0xf83cbf05, 0x02f40d9a), TOBN(0x4681c468, 0x2c318a4d),
- TOBN(0x98575618, 0x0e9c2674), TOBN(0xbe79d046, 0x1847092e),
- TOBN(0xaf1e480a, 0x78bd01e0), TOBN(0x6dd359e4, 0x72a51db9),
- TOBN(0x62ce3821, 0xe3afbab6), TOBN(0xc5cee5b6, 0x17733199),
- TOBN(0xe08b30d4, 0x6ffd9fbb), TOBN(0x6e5bc699, 0x36c610b7),
- TOBN(0xf343cff2, 0x9ce262cf), TOBN(0xca2e4e35, 0x68b914c1),
- TOBN(0x011d64c0, 0x16de36c5), TOBN(0xe0b10fdd, 0x42e2b829),
- TOBN(0x78942981, 0x6685aaf8), TOBN(0xe7511708, 0x230ede97),
- TOBN(0x671ed8fc, 0x3b922bf8), TOBN(0xe4d8c0a0, 0x4c29b133),
- TOBN(0x87eb1239, 0x3b6e99c4), TOBN(0xaff3974c, 0x8793beba),
- TOBN(0x03749405, 0x2c18df9b), TOBN(0xc5c3a293, 0x91007139),
- TOBN(0x6a77234f, 0xe37a0b95), TOBN(0x02c29a21, 0xb661c96b),
- TOBN(0xc3aaf1d6, 0x141ecf61), TOBN(0x9195509e, 0x3bb22f53),
- TOBN(0x29597404, 0x22d51357), TOBN(0x1b083822, 0x537bed60),
- TOBN(0xcd7d6e35, 0xe07289f0), TOBN(0x1f94c48c, 0x6dd86eff),
- TOBN(0xc8bb1f82, 0xeb0f9cfa), TOBN(0x9ee0b7e6, 0x1b2eb97d),
- TOBN(0x5a52fe2e, 0x34d74e31), TOBN(0xa352c310, 0x3bf79ab6),
- TOBN(0x97ff6c5a, 0xabfeeb8f), TOBN(0xbfbe8fef, 0xf5c97305),
- TOBN(0xd6081ce6, 0xa7904608), TOBN(0x1f812f3a, 0xc4fca249),
- TOBN(0x9b24bc9a, 0xb9e5e200), TOBN(0x91022c67, 0x38012ee8),
- TOBN(0xe83d9c5d, 0x30a713a1), TOBN(0x4876e3f0, 0x84ef0f93),
- TOBN(0xc9777029, 0xc1fbf928), TOBN(0xef7a6bb3, 0xbce7d2a4),
- TOBN(0xb8067228, 0xdfa2a659), TOBN(0xd5cd3398, 0xd877a48f),
- TOBN(0xbea4fd8f, 0x025d0f3f), TOBN(0xd67d2e35, 0x2eae7c2b),
- TOBN(0x184de7d7, 0xcc5f4394), TOBN(0xb5551b5c, 0x4536e142),
- TOBN(0x2e89b212, 0xd34aa60a), TOBN(0x14a96fea, 0xf50051d5),
- TOBN(0x4e21ef74, 0x0d12bb0b), TOBN(0xc522f020, 0x60b9677e),
- TOBN(0x8b12e467, 0x2df7731d), TOBN(0x39f80382, 0x7b326d31),
- TOBN(0xdfb8630c, 0x39024a94), TOBN(0xaacb96a8, 0x97319452),
- TOBN(0xd68a3961, 0xeda3867c), TOBN(0x0c58e2b0, 0x77c4ffca),
- TOBN(0x3d545d63, 0x4da919fa), TOBN(0xef79b69a, 0xf15e2289),
- TOBN(0x54bc3d3d, 0x808bab10), TOBN(0xc8ab3007, 0x45f82c37),
- TOBN(0xc12738b6, 0x7c4a658a), TOBN(0xb3c47639, 0x40e72182),
- TOBN(0x3b77be46, 0x8798e44f), TOBN(0xdc047df2, 0x17a7f85f),
- TOBN(0x2439d4c5, 0x5e59d92d), TOBN(0xcedca475, 0xe8e64d8d),
- TOBN(0xa724cd0d, 0x87ca9b16), TOBN(0x35e4fd59, 0xa5540dfe),
- TOBN(0xf8c1ff18, 0xe4bcf6b1), TOBN(0x856d6285, 0x295018fa),
- TOBN(0x433f665c, 0x3263c949), TOBN(0xa6a76dd6, 0xa1f21409),
- TOBN(0x17d32334, 0xcc7b4f79), TOBN(0xa1d03122, 0x06720e4a),
- TOBN(0xadb6661d, 0x81d9bed5), TOBN(0xf0d6fb02, 0x11db15d1),
- TOBN(0x7fd11ad5, 0x1fb747d2), TOBN(0xab50f959, 0x3033762b),
- TOBN(0x2a7e711b, 0xfbefaf5a), TOBN(0xc7393278, 0x3fef2bbf),
- TOBN(0xe29fa244, 0x0df6f9be), TOBN(0x9092757b, 0x71efd215),
- TOBN(0xee60e311, 0x4f3d6fd9), TOBN(0x338542d4, 0x0acfb78b),
- TOBN(0x44a23f08, 0x38961a0f), TOBN(0x1426eade, 0x986987ca),
- TOBN(0x36e6ee2e, 0x4a863cc6), TOBN(0x48059420, 0x628b8b79),
- TOBN(0x30303ad8, 0x7396e1de), TOBN(0x5c8bdc48, 0x38c5aad1),
- TOBN(0x3e40e11f, 0x5c8f5066), TOBN(0xabd6e768, 0x8d246bbd),
- TOBN(0x68aa40bb, 0x23330a01), TOBN(0xd23f5ee4, 0xc34eafa0),
- TOBN(0x3bbee315, 0x5de02c21), TOBN(0x18dd4397, 0xd1d8dd06),
- TOBN(0x3ba1939a, 0x122d7b44), TOBN(0xe6d3b40a, 0xa33870d6),
- TOBN(0x8e620f70, 0x1c4fe3f8), TOBN(0xf6bba1a5, 0xd3a50cbf),
- TOBN(0x4a78bde5, 0xcfc0aee0), TOBN(0x847edc46, 0xc08c50bd),
- TOBN(0xbaa2439c, 0xad63c9b2), TOBN(0xceb4a728, 0x10fc2acb),
- TOBN(0xa419e40e, 0x26da033d), TOBN(0x6cc3889d, 0x03e02683),
- TOBN(0x1cd28559, 0xfdccf725), TOBN(0x0fd7e0f1, 0x8d13d208),
- TOBN(0x01b9733b, 0x1f0df9d4), TOBN(0x8cc2c5f3, 0xa2b5e4f3),
- TOBN(0x43053bfa, 0x3a304fd4), TOBN(0x8e87665c, 0x0a9f1aa7),
- TOBN(0x087f29ec, 0xd73dc965), TOBN(0x15ace455, 0x3e9023db),
- TOBN(0x2370e309, 0x2bce28b4), TOBN(0xf9723442, 0xb6b1e84a),
- TOBN(0xbeee662e, 0xb72d9f26), TOBN(0xb19396de, 0xf0e47109),
- TOBN(0x85b1fa73, 0xe13289d0), TOBN(0x436cf77e, 0x54e58e32),
- TOBN(0x0ec833b3, 0xe990ef77), TOBN(0x7373e3ed, 0x1b11fc25),
- TOBN(0xbe0eda87, 0x0fc332ce), TOBN(0xced04970, 0x8d7ea856),
- TOBN(0xf85ff785, 0x7e977ca0), TOBN(0xb66ee8da, 0xdfdd5d2b),
- TOBN(0xf5e37950, 0x905af461), TOBN(0x587b9090, 0x966d487c),
- TOBN(0x6a198a1b, 0x32ba0127), TOBN(0xa7720e07, 0x141615ac),
- TOBN(0xa23f3499, 0x996ef2f2), TOBN(0xef5f64b4, 0x470bcb3d),
- TOBN(0xa526a962, 0x92b8c559), TOBN(0x0c14aac0, 0x69740a0f),
- TOBN(0x0d41a9e3, 0xa6bdc0a5), TOBN(0x97d52106, 0x9c48aef4),
- TOBN(0xcf16bd30, 0x3e7c253b), TOBN(0xcc834b1a, 0x47fdedc1),
- TOBN(0x7362c6e5, 0x373aab2e), TOBN(0x264ed85e, 0xc5f590ff),
- TOBN(0x7a46d9c0, 0x66d41870), TOBN(0xa50c20b1, 0x4787ba09),
- TOBN(0x185e7e51, 0xe3d44635), TOBN(0xb3b3e080, 0x31e2d8dc),
- TOBN(0xbed1e558, 0xa179e9d9), TOBN(0x2daa3f79, 0x74a76781),
- TOBN(0x4372baf2, 0x3a40864f), TOBN(0x46900c54, 0x4fe75cb5),
- TOBN(0xb95f171e, 0xf76765d0), TOBN(0x4ad726d2, 0x95c87502),
- TOBN(0x2ec769da, 0x4d7c99bd), TOBN(0x5e2ddd19, 0xc36cdfa8),
- TOBN(0xc22117fc, 0xa93e6dea), TOBN(0xe8a2583b, 0x93771123),
- TOBN(0xbe2f6089, 0xfa08a3a2), TOBN(0x4809d5ed, 0x8f0e1112),
- TOBN(0x3b414aa3, 0xda7a095e), TOBN(0x9049acf1, 0x26f5aadd),
- TOBN(0x78d46a4d, 0x6be8b84a), TOBN(0xd66b1963, 0xb732b9b3),
- TOBN(0x5c2ac2a0, 0xde6e9555), TOBN(0xcf52d098, 0xb5bd8770),
- TOBN(0x15a15fa6, 0x0fd28921), TOBN(0x56ccb81e, 0x8b27536d),
- TOBN(0x0f0d8ab8, 0x9f4ccbb8), TOBN(0xed5f44d2, 0xdb221729),
- TOBN(0x43141988, 0x00bed10c), TOBN(0xc94348a4, 0x1d735b8b),
- TOBN(0x79f3e9c4, 0x29ef8479), TOBN(0x4c13a4e3, 0x614c693f),
- TOBN(0x32c9af56, 0x8e143a14), TOBN(0xbc517799, 0xe29ac5c4),
- TOBN(0x05e17992, 0x2774856f), TOBN(0x6e52fb05, 0x6c1bf55f),
- TOBN(0xaeda4225, 0xe4f19e16), TOBN(0x70f4728a, 0xaf5ccb26),
- TOBN(0x5d2118d1, 0xb2947f22), TOBN(0xc827ea16, 0x281d6fb9),
- TOBN(0x8412328d, 0x8cf0eabd), TOBN(0x45ee9fb2, 0x03ef9dcf),
- TOBN(0x8e700421, 0xbb937d63), TOBN(0xdf8ff2d5, 0xcc4b37a6),
- TOBN(0xa4c0d5b2, 0x5ced7b68), TOBN(0x6537c1ef, 0xc7308f59),
- TOBN(0x25ce6a26, 0x3b37f8e8), TOBN(0x170e9a9b, 0xdeebc6ce),
- TOBN(0xdd037952, 0x8728d72c), TOBN(0x445b0e55, 0x850154bc),
- TOBN(0x4b7d0e06, 0x83a7337b), TOBN(0x1e3416d4, 0xffecf249),
- TOBN(0x24840eff, 0x66a2b71f), TOBN(0xd0d9a50a, 0xb37cc26d),
- TOBN(0xe2198150, 0x6fe28ef7), TOBN(0x3cc5ef16, 0x23324c7f),
- TOBN(0x220f3455, 0x769b5263), TOBN(0xe2ade2f1, 0xa10bf475),
- TOBN(0x28cd20fa, 0x458d3671), TOBN(0x1549722c, 0x2dc4847b),
- TOBN(0x6dd01e55, 0x591941e3), TOBN(0x0e6fbcea, 0x27128ccb),
- TOBN(0xae1a1e6b, 0x3bef0262), TOBN(0xfa8c472c, 0x8f54e103),
- TOBN(0x7539c0a8, 0x72c052ec), TOBN(0xd7b27369, 0x5a3490e9),
- TOBN(0x143fe1f1, 0x71684349), TOBN(0x36b4722e, 0x32e19b97),
- TOBN(0xdc059227, 0x90980aff), TOBN(0x175c9c88, 0x9e13d674),
- TOBN(0xa7de5b22, 0x6e6bfdb1), TOBN(0x5ea5b7b2, 0xbedb4b46),
- TOBN(0xd5570191, 0xd34a6e44), TOBN(0xfcf60d2e, 0xa24ff7e6),
- TOBN(0x614a392d, 0x677819e1), TOBN(0x7be74c7e, 0xaa5a29e8),
- TOBN(0xab50fece, 0x63c85f3f), TOBN(0xaca2e2a9, 0x46cab337),
- TOBN(0x7f700388, 0x122a6fe3), TOBN(0xdb69f703, 0x882a04a8),
- TOBN(0x9a77935d, 0xcf7aed57), TOBN(0xdf16207c, 0x8d91c86f),
- TOBN(0x2fca49ab, 0x63ed9998), TOBN(0xa3125c44, 0xa77ddf96),
- TOBN(0x05dd8a86, 0x24344072), TOBN(0xa023dda2, 0xfec3fb56),
- TOBN(0x421b41fc, 0x0c743032), TOBN(0x4f2120c1, 0x5e438639),
- TOBN(0xfb7cae51, 0xc83c1b07), TOBN(0xb2370caa, 0xcac2171a),
- TOBN(0x2eb2d962, 0x6cc820fb), TOBN(0x59feee5c, 0xb85a44bf),
- TOBN(0x94620fca, 0x5b6598f0), TOBN(0x6b922cae, 0x7e314051),
- TOBN(0xff8745ad, 0x106bed4e), TOBN(0x546e71f5, 0xdfa1e9ab),
- TOBN(0x935c1e48, 0x1ec29487), TOBN(0x9509216c, 0x4d936530),
- TOBN(0xc7ca3067, 0x85c9a2db), TOBN(0xd6ae5152, 0x6be8606f),
- TOBN(0x09dbcae6, 0xe14c651d), TOBN(0xc9536e23, 0x9bc32f96),
- TOBN(0xa90535a9, 0x34521b03), TOBN(0xf39c526c, 0x878756ff),
- TOBN(0x383172ec, 0x8aedf03c), TOBN(0x20a8075e, 0xefe0c034),
- TOBN(0xf22f9c62, 0x64026422), TOBN(0x8dd10780, 0x24b9d076),
- TOBN(0x944c742a, 0x3bef2950), TOBN(0x55b9502e, 0x88a2b00b),
- TOBN(0xa59e14b4, 0x86a09817), TOBN(0xa39dd3ac, 0x47bb4071),
- TOBN(0x55137f66, 0x3be0592f), TOBN(0x07fcafd4, 0xc9e63f5b),
- TOBN(0x963652ee, 0x346eb226), TOBN(0x7dfab085, 0xec2facb7),
- TOBN(0x273bf2b8, 0x691add26), TOBN(0x30d74540, 0xf2b46c44),
- TOBN(0x05e8e73e, 0xf2c2d065), TOBN(0xff9b8a00, 0xd42eeac9),
- TOBN(0x2fcbd205, 0x97209d22), TOBN(0xeb740ffa, 0xde14ea2c),
- TOBN(0xc71ff913, 0xa8aef518), TOBN(0x7bfc74bb, 0xfff4cfa2),
- TOBN(0x1716680c, 0xb6b36048), TOBN(0x121b2cce, 0x9ef79af1),
- TOBN(0xbff3c836, 0xa01eb3d3), TOBN(0x50eb1c6a, 0x5f79077b),
- TOBN(0xa48c32d6, 0xa004bbcf), TOBN(0x47a59316, 0x7d64f61d),
- TOBN(0x6068147f, 0x93102016), TOBN(0x12c5f654, 0x94d12576),
- TOBN(0xefb071a7, 0xc9bc6b91), TOBN(0x7c2da0c5, 0x6e23ea95),
- TOBN(0xf4fd45b6, 0xd4a1dd5d), TOBN(0x3e7ad9b6, 0x9122b13c),
- TOBN(0x342ca118, 0xe6f57a48), TOBN(0x1c2e94a7, 0x06f8288f),
- TOBN(0x99e68f07, 0x5a97d231), TOBN(0x7c80de97, 0x4d838758),
- TOBN(0xbce0f5d0, 0x05872727), TOBN(0xbe5d95c2, 0x19c4d016),
- TOBN(0x921d5cb1, 0x9c2492ee), TOBN(0x42192dc1, 0x404d6fb3),
- TOBN(0x4c84dcd1, 0x32f988d3), TOBN(0xde26d61f, 0xa17b8e85),
- TOBN(0xc466dcb6, 0x137c7408), TOBN(0x9a38d7b6, 0x36a266da),
- TOBN(0x7ef5cb06, 0x83bebf1b), TOBN(0xe5cdcbbf, 0x0fd014e3),
- TOBN(0x30aa376d, 0xf65965a0), TOBN(0x60fe88c2, 0xebb3e95e),
- TOBN(0x33fd0b61, 0x66ee6f20), TOBN(0x8827dcdb, 0x3f41f0a0),
- TOBN(0xbf8a9d24, 0x0c56c690), TOBN(0x40265dad, 0xddb7641d),
- TOBN(0x522b05bf, 0x3a6b662b), TOBN(0x466d1dfe, 0xb1478c9b),
- TOBN(0xaa616962, 0x1484469b), TOBN(0x0db60549, 0x02df8f9f),
- TOBN(0xc37bca02, 0x3cb8bf51), TOBN(0x5effe346, 0x21371ce8),
- TOBN(0xe8f65264, 0xff112c32), TOBN(0x8a9c736d, 0x7b971fb2),
- TOBN(0xa4f19470, 0x7b75080d), TOBN(0xfc3f2c5a, 0x8839c59b),
- TOBN(0x1d6c777e, 0x5aeb49c2), TOBN(0xf3db034d, 0xda1addfe),
- TOBN(0xd76fee5a, 0x5535affc), TOBN(0x0853ac70, 0xb92251fd),
- TOBN(0x37e3d594, 0x8b2a29d5), TOBN(0x28f1f457, 0x4de00ddb),
- TOBN(0x8083c1b5, 0xf42c328b), TOBN(0xd8ef1d8f, 0xe493c73b),
- TOBN(0x96fb6260, 0x41dc61bd), TOBN(0xf74e8a9d, 0x27ee2f8a),
- TOBN(0x7c605a80, 0x2c946a5d), TOBN(0xeed48d65, 0x3839ccfd),
- TOBN(0x9894344f, 0x3a29467a), TOBN(0xde81e949, 0xc51eba6d),
- TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3),
- TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a),
- TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)},
- {TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d),
- TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04),
- TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d),
- TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152),
- TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7),
- TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc),
- TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42),
- TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036),
- TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e),
- TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83),
- TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d),
- TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3),
- TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed),
- TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32),
- TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b),
- TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc),
- TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747),
- TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f),
- TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99),
- TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a),
- TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc),
- TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5),
- TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed),
- TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533),
- TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1),
- TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493),
- TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549),
- TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5),
- TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04),
- TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d),
- TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e),
- TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44),
- TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5),
- TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b),
- TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92),
- TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e),
- TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61),
- TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a),
- TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b),
- TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253),
- TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f),
- TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1),
- TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347),
- TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b),
- TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7),
- TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819),
- TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e),
- TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6),
- TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4),
- TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070),
- TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b),
- TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b),
- TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016),
- TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a),
- TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790),
- TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0),
- TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371),
- TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba),
- TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256),
- TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6),
- TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4),
- TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc),
- TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0),
- TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711),
- TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8),
- TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c),
- TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b),
- TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4),
- TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a),
- TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a),
- TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b),
- TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5),
- TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1),
- TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3),
- TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe),
- TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45),
- TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc),
- TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6),
- TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97),
- TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e),
- TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5),
- TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1),
- TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe),
- TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc),
- TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb),
- TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd),
- TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b),
- TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db),
- TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb),
- TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048),
- TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2),
- TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46),
- TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b),
- TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0),
- TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550),
- TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418),
- TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282),
- TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c),
- TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc),
- TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a),
- TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f),
- TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4),
- TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf),
- TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90),
- TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe),
- TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab),
- TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea),
- TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b),
- TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64),
- TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b),
- TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae),
- TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc),
- TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2),
- TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6),
- TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8),
- TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe),
- TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0),
- TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f),
- TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0),
- TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6),
- TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953),
- TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1),
- TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4),
- TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094),
- TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab),
- TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831),
- TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5),
- TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f),
- TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5),
- TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce),
- TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381),
- TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897),
- TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301),
- TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699),
- TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20),
- TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9),
- TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2),
- TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910),
- TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a),
- TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242),
- TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f),
- TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98),
- TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0),
- TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6),
- TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0),
- TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc),
- TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7),
- TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3),
- TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d),
- TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e),
- TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5),
- TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f),
- TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d),
- TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c),
- TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123),
- TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c),
- TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b),
- TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa),
- TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524),
- TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820),
- TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654),
- TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c),
- TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6),
- TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1),
- TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32),
- TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234),
- TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f),
- TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8),
- TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48),
- TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2),
- TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e),
- TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6),
- TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca),
- TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55),
- TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c),
- TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385),
- TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a),
- TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc),
- TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc),
- TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce),
- TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842),
- TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0),
- TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce),
- TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365),
- TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159),
- TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181),
- TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4),
- TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb),
- TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a),
- TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b),
- TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495),
- TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95),
- TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085),
- TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e),
- TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049),
- TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538),
- TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268),
- TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff),
- TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea),
- TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711),
- TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975),
- TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875),
- TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766),
- TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c),
- TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1),
- TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e),
- TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a),
- TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a),
- TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b),
- TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025),
- TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35),
- TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d),
- TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603),
- TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9),
- TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31),
- TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934),
- TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11),
- TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c),
- TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3),
- TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125),
- TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe),
- TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920),
- TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603),
- TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2),
- TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28),
- TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083),
- TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3),
- TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0),
- TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7),
- TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6),
- TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608),
- TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33),
- TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5),
- TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066),
- TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9),
- TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb),
- TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937),
- TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9),
- TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f),
- TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c),
- TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981),
- TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163),
- TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95),
- TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9),
- TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a),
- TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831),
- TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c),
- TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d),
- TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb),
- TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe),
- TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc),
- TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a),
- TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284),
- TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7),
- TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84),
- TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a)},
- {TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34),
- TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda),
- TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7),
- TOBN(0xad684dbf, 0xb69ec1a0), TOBN(0x367e7cf2, 0x801fd997),
- TOBN(0x0ca1f3b7, 0xb0dc8595), TOBN(0x27de4608, 0x9f1d9f2e),
- TOBN(0x1af3bf39, 0xbadd82a7), TOBN(0x79356a79, 0x65862448),
- TOBN(0xc0602345, 0xf5f9a052), TOBN(0x1a8b0f89, 0x139a42f9),
- TOBN(0xb53eee42, 0x844d40fc), TOBN(0x93b0bfe5, 0x4e5b6368),
- TOBN(0x5434dd02, 0xc024789c), TOBN(0x90dca9ea, 0x41b57bfc),
- TOBN(0x8aa898e2, 0x243398df), TOBN(0xf607c834, 0x894a94bb),
- TOBN(0xbb07be97, 0xc2c99b76), TOBN(0x6576ba67, 0x18c29302),
- TOBN(0x3d79efcc, 0xe703a88c), TOBN(0xf259ced7, 0xb6a0d106),
- TOBN(0x0f893a5d, 0xc8de610b), TOBN(0xe8c515fb, 0x67e223ce),
- TOBN(0x7774bfa6, 0x4ead6dc5), TOBN(0x89d20f95, 0x925c728f),
- TOBN(0x7a1e0966, 0x098583ce), TOBN(0xa2eedb94, 0x93f2a7d7),
- TOBN(0x1b282097, 0x4c304d4a), TOBN(0x0842e3da, 0xc077282d),
- TOBN(0xe4d972a3, 0x3b9e2d7b), TOBN(0x7cc60b27, 0xc48218ff),
- TOBN(0x8fc70838, 0x84149d91), TOBN(0x5c04346f, 0x2f461ecc),
- TOBN(0xebe9fdf2, 0x614650a9), TOBN(0x5e35b537, 0xc1f666ac),
- TOBN(0x645613d1, 0x88babc83), TOBN(0x88cace3a, 0xc5e1c93e),
- TOBN(0x209ca375, 0x3de92e23), TOBN(0xccb03cc8, 0x5fbbb6e3),
- TOBN(0xccb90f03, 0xd7b1487e), TOBN(0xfa9c2a38, 0xc710941f),
- TOBN(0x756c3823, 0x6724ceed), TOBN(0x3a902258, 0x192d0323),
- TOBN(0xb150e519, 0xea5e038e), TOBN(0xdcba2865, 0xc7427591),
- TOBN(0xe549237f, 0x78890732), TOBN(0xc443bef9, 0x53fcb4d9),
- TOBN(0x9884d8a6, 0xeb3480d6), TOBN(0x8a35b6a1, 0x3048b186),
- TOBN(0xb4e44716, 0x65e9a90a), TOBN(0x45bf380d, 0x653006c0),
- TOBN(0x8f3f820d, 0x4fe9ae3b), TOBN(0x244a35a0, 0x979a3b71),
- TOBN(0xa1010e9d, 0x74cd06ff), TOBN(0x9c17c7df, 0xaca3eeac),
- TOBN(0x74c86cd3, 0x8063aa2b), TOBN(0x8595c4b3, 0x734614ff),
- TOBN(0xa3de00ca, 0x990f62cc), TOBN(0xd9bed213, 0xca0c3be5),
- TOBN(0x7886078a, 0xdf8ce9f5), TOBN(0xddb27ce3, 0x5cd44444),
- TOBN(0xed374a66, 0x58926ddd), TOBN(0x138b2d49, 0x908015b8),
- TOBN(0x886c6579, 0xde1f7ab8), TOBN(0x888b9aa0, 0xc3020b7a),
- TOBN(0xd3ec034e, 0x3a96e355), TOBN(0xba65b0b8, 0xf30fbe9a),
- TOBN(0x064c8e50, 0xff21367a), TOBN(0x1f508ea4, 0x0b04b46e),
- TOBN(0x98561a49, 0x747c866c), TOBN(0xbbb1e5fe, 0x0518a062),
- TOBN(0x20ff4e8b, 0xecdc3608), TOBN(0x7f55cded, 0x20184027),
- TOBN(0x8d73ec95, 0xf38c85f0), TOBN(0x5b589fdf, 0x8bc3b8c3),
- TOBN(0xbe95dd98, 0x0f12b66f), TOBN(0xf5bd1a09, 0x0e338e01),
- TOBN(0x65163ae5, 0x5e915918), TOBN(0x6158d6d9, 0x86f8a46b),
- TOBN(0x8466b538, 0xeeebf99c), TOBN(0xca8761f6, 0xbca477ef),
- TOBN(0xaf3449c2, 0x9ebbc601), TOBN(0xef3b0f41, 0xe0c3ae2f),
- TOBN(0xaa6c577d, 0x5de63752), TOBN(0xe9166601, 0x64682a51),
- TOBN(0x5a3097be, 0xfc15aa1e), TOBN(0x40d12548, 0xb54b0745),
- TOBN(0x5bad4706, 0x519a5f12), TOBN(0xed03f717, 0xa439dee6),
- TOBN(0x0794bb6c, 0x4a02c499), TOBN(0xf725083d, 0xcffe71d2),
- TOBN(0x2cad7519, 0x0f3adcaf), TOBN(0x7f68ea1c, 0x43729310),
- TOBN(0xe747c8c7, 0xb7ffd977), TOBN(0xec104c35, 0x80761a22),
- TOBN(0x8395ebaf, 0x5a3ffb83), TOBN(0xfb3261f4, 0xe4b63db7),
- TOBN(0x53544960, 0xd883e544), TOBN(0x13520d70, 0x8cc2eeb8),
- TOBN(0x08f6337b, 0xd3d65f99), TOBN(0x83997db2, 0x781cf95b),
- TOBN(0xce6ff106, 0x0dbd2c01), TOBN(0x4f8eea6b, 0x1f9ce934),
- TOBN(0x546f7c4b, 0x0e993921), TOBN(0x6236a324, 0x5e753fc7),
- TOBN(0x65a41f84, 0xa16022e9), TOBN(0x0c18d878, 0x43d1dbb2),
- TOBN(0x73c55640, 0x2d4cef9c), TOBN(0xa0428108, 0x70444c74),
- TOBN(0x68e4f15e, 0x9afdfb3c), TOBN(0x49a56143, 0x5bdfb6df),
- TOBN(0xa9bc1bd4, 0x5f823d97), TOBN(0xbceb5970, 0xea111c2a),
- TOBN(0x366b455f, 0xb269bbc4), TOBN(0x7cd85e1e, 0xe9bc5d62),
- TOBN(0xc743c41c, 0x4f18b086), TOBN(0xa4b40990, 0x95294fb9),
- TOBN(0x9c7c581d, 0x26ee8382), TOBN(0xcf17dcc5, 0x359d638e),
- TOBN(0xee8273ab, 0xb728ae3d), TOBN(0x1d112926, 0xf821f047),
- TOBN(0x11498477, 0x50491a74), TOBN(0x687fa761, 0xfde0dfb9),
- TOBN(0x2c258022, 0x7ea435ab), TOBN(0x6b8bdb94, 0x91ce7e3f),
- TOBN(0x4c5b5dc9, 0x3bf834aa), TOBN(0x04371819, 0x4f6c7e4b),
- TOBN(0xc284e00a, 0x3736bcad), TOBN(0x0d881118, 0x21ae8f8d),
- TOBN(0xf9cf0f82, 0xf48c8e33), TOBN(0xa11fd075, 0xa1bf40db),
- TOBN(0xdceab0de, 0xdc2733e5), TOBN(0xc560a8b5, 0x8e986bd7),
- TOBN(0x48dd1fe2, 0x3929d097), TOBN(0x3885b290, 0x92f188f1),
- TOBN(0x0f2ae613, 0xda6fcdac), TOBN(0x9054303e, 0xb662a46c),
- TOBN(0xb6871e44, 0x0738042a), TOBN(0x98e6a977, 0xbdaf6449),
- TOBN(0xd8bc0650, 0xd1c9df1b), TOBN(0xef3d6451, 0x36e098f9),
- TOBN(0x03fbae82, 0xb6d72d28), TOBN(0x77ca9db1, 0xf5d84080),
- TOBN(0x8a112cff, 0xa58efc1c), TOBN(0x518d761c, 0xc564cb4a),
- TOBN(0x69b5740e, 0xf0d1b5ce), TOBN(0x717039cc, 0xe9eb1785),
- TOBN(0x3fe29f90, 0x22f53382), TOBN(0x8e54ba56, 0x6bc7c95c),
- TOBN(0x9c806d8a, 0xf7f91d0f), TOBN(0x3b61b0f1, 0xa82a5728),
- TOBN(0x4640032d, 0x94d76754), TOBN(0x273eb5de, 0x47d834c6),
- TOBN(0x2988abf7, 0x7b4e4d53), TOBN(0xb7ce66bf, 0xde401777),
- TOBN(0x9fba6b32, 0x715071b3), TOBN(0x82413c24, 0xad3a1a98),
- TOBN(0x5b7fc8c4, 0xe0e8ad93), TOBN(0xb5679aee, 0x5fab868d),
- TOBN(0xb1f9d2fa, 0x2b3946f3), TOBN(0x458897dc, 0x5685b50a),
- TOBN(0x1e98c930, 0x89d0caf3), TOBN(0x39564c5f, 0x78642e92),
- TOBN(0x1b77729a, 0x0dbdaf18), TOBN(0xf9170722, 0x579e82e6),
- TOBN(0x680c0317, 0xe4515fa5), TOBN(0xf85cff84, 0xfb0c790f),
- TOBN(0xc7a82aab, 0x6d2e0765), TOBN(0x7446bca9, 0x35c82b32),
- TOBN(0x5de607aa, 0x6d63184f), TOBN(0x7c1a46a8, 0x262803a6),
- TOBN(0xd218313d, 0xaebe8035), TOBN(0x92113ffd, 0xc73c51f8),
- TOBN(0x4b38e083, 0x12e7e46c), TOBN(0x69d0a37a, 0x56126bd5),
- TOBN(0xfb3f324b, 0x73c07e04), TOBN(0xa0c22f67, 0x8fda7267),
- TOBN(0x8f2c0051, 0x4d2c7d8f), TOBN(0xbc45ced3, 0xcbe2cae5),
- TOBN(0xe1c6cf07, 0xa8f0f277), TOBN(0xbc392312, 0x1eb99a98),
- TOBN(0x75537b7e, 0x3cc8ac85), TOBN(0x8d725f57, 0xdd02753b),
- TOBN(0xfd05ff64, 0xb737df2f), TOBN(0x55fe8712, 0xf6d2531d),
- TOBN(0x57ce04a9, 0x6ab6b01c), TOBN(0x69a02a89, 0x7cd93724),
- TOBN(0x4f82ac35, 0xcf86699b), TOBN(0x8242d3ad, 0x9cb4b232),
- TOBN(0x713d0f65, 0xd62105e5), TOBN(0xbb222bfa, 0x2d29be61),
- TOBN(0xf2f9a79e, 0x6cfbef09), TOBN(0xfc24d8d3, 0xd5d6782f),
- TOBN(0x5db77085, 0xd4129967), TOBN(0xdb81c3cc, 0xdc3c2a43),
- TOBN(0x9d655fc0, 0x05d8d9a3), TOBN(0x3f5d057a, 0x54298026),
- TOBN(0x1157f56d, 0x88c54694), TOBN(0xb26baba5, 0x9b09573e),
- TOBN(0x2cab03b0, 0x22adffd1), TOBN(0x60a412c8, 0xdd69f383),
- TOBN(0xed76e98b, 0x54b25039), TOBN(0xd4ee67d3, 0x687e714d),
- TOBN(0x87739648, 0x7b00b594), TOBN(0xce419775, 0xc9ef709b),
- TOBN(0x40f76f85, 0x1c203a40), TOBN(0x30d352d6, 0xeafd8f91),
- TOBN(0xaf196d3d, 0x95578dd2), TOBN(0xea4bb3d7, 0x77cc3f3d),
- TOBN(0x42a5bd03, 0xb98e782b), TOBN(0xac958c40, 0x0624920d),
- TOBN(0xb838134c, 0xfc56fcc8), TOBN(0x86ec4ccf, 0x89572e5e),
- TOBN(0x69c43526, 0x9be47be0), TOBN(0x323b7dd8, 0xcb28fea1),
- TOBN(0xfa5538ba, 0x3a6c67e5), TOBN(0xef921d70, 0x1d378e46),
- TOBN(0xf92961fc, 0x3c4b880e), TOBN(0x3f6f914e, 0x98940a67),
- TOBN(0xa990eb0a, 0xfef0ff39), TOBN(0xa6c2920f, 0xf0eeff9c),
- TOBN(0xca804166, 0x51b8d9a3), TOBN(0x42531bc9, 0x0ffb0db1),
- TOBN(0x72ce4718, 0xaa82e7ce), TOBN(0x6e199913, 0xdf574741),
- TOBN(0xd5f1b13d, 0xd5d36946), TOBN(0x8255dc65, 0xf68f0194),
- TOBN(0xdc9df4cd, 0x8710d230), TOBN(0x3453c20f, 0x138c1988),
- TOBN(0x9af98dc0, 0x89a6ef01), TOBN(0x4dbcc3f0, 0x9857df85),
- TOBN(0x34805601, 0x5c1ad924), TOBN(0x40448da5, 0xd0493046),
- TOBN(0xf629926d, 0x4ee343e2), TOBN(0x6343f1bd, 0x90e8a301),
- TOBN(0xefc93491, 0x40815b3f), TOBN(0xf882a423, 0xde8f66fb),
- TOBN(0x3a12d5f4, 0xe7db9f57), TOBN(0x7dfba38a, 0x3c384c27),
- TOBN(0x7a904bfd, 0x6fc660b1), TOBN(0xeb6c5db3, 0x2773b21c),
- TOBN(0xc350ee66, 0x1cdfe049), TOBN(0x9baac0ce, 0x44540f29),
- TOBN(0xbc57b6ab, 0xa5ec6aad), TOBN(0x167ce8c3, 0x0a7c1baa),
- TOBN(0xb23a03a5, 0x53fb2b56), TOBN(0x6ce141e7, 0x4e057f78),
- TOBN(0x796525c3, 0x89e490d9), TOBN(0x0bc95725, 0xa31a7e75),
- TOBN(0x1ec56791, 0x1220fd06), TOBN(0x716e3a3c, 0x408b0bd6),
- TOBN(0x31cd6bf7, 0xe8ebeba9), TOBN(0xa7326ca6, 0xbee6b670),
- TOBN(0x3d9f851c, 0xcd090c43), TOBN(0x561e8f13, 0xf12c3988),
- TOBN(0x50490b6a, 0x904b7be4), TOBN(0x61690ce1, 0x0410737b),
- TOBN(0x299e9a37, 0x0f009052), TOBN(0x258758f0, 0xf026092e),
- TOBN(0x9fa255f3, 0xfdfcdc0f), TOBN(0xdbc9fb1f, 0xc0e1bcd2),
- TOBN(0x35f9dd6e, 0x24651840), TOBN(0xdca45a84, 0xa5c59abc),
- TOBN(0x103d396f, 0xecca4938), TOBN(0x4532da0a, 0xb97b3f29),
- TOBN(0xc4135ea5, 0x1999a6bf), TOBN(0x3aa9505a, 0x5e6bf2ee),
- TOBN(0xf77cef06, 0x3f5be093), TOBN(0x97d1a0f8, 0xa943152e),
- TOBN(0x2cb0ebba, 0x2e1c21dd), TOBN(0xf41b29fc, 0x2c6797c4),
- TOBN(0xc6e17321, 0xb300101f), TOBN(0x4422b0e9, 0xd0d79a89),
- TOBN(0x49e4901c, 0x92f1bfc4), TOBN(0x06ab1f8f, 0xe1e10ed9),
- TOBN(0x84d35577, 0xdb2926b8), TOBN(0xca349d39, 0x356e8ec2),
- TOBN(0x70b63d32, 0x343bf1a9), TOBN(0x8fd3bd28, 0x37d1a6b1),
- TOBN(0x0454879c, 0x316865b4), TOBN(0xee959ff6, 0xc458efa2),
- TOBN(0x0461dcf8, 0x9706dc3f), TOBN(0x737db0e2, 0x164e4b2e),
- TOBN(0x09262680, 0x2f8843c8), TOBN(0x54498bbc, 0x7745e6f6),
- TOBN(0x359473fa, 0xa29e24af), TOBN(0xfcc3c454, 0x70aa87a1),
- TOBN(0xfd2c4bf5, 0x00573ace), TOBN(0xb65b514e, 0x28dd1965),
- TOBN(0xe46ae7cf, 0x2193e393), TOBN(0x60e9a4e1, 0xf5444d97),
- TOBN(0xe7594e96, 0x00ff38ed), TOBN(0x43d84d2f, 0x0a0e0f02),
- TOBN(0x8b6db141, 0xee398a21), TOBN(0xb88a56ae, 0xe3bcc5be),
- TOBN(0x0a1aa52f, 0x373460ea), TOBN(0x20da1a56, 0x160bb19b),
- TOBN(0xfb54999d, 0x65bf0384), TOBN(0x71a14d24, 0x5d5a180e),
- TOBN(0xbc44db7b, 0x21737b04), TOBN(0xd84fcb18, 0x01dd8e92),
- TOBN(0x80de937b, 0xfa44b479), TOBN(0x53505499, 0x5c98fd4f),
- TOBN(0x1edb12ab, 0x28f08727), TOBN(0x4c58b582, 0xa5f3ef53),
- TOBN(0xbfb236d8, 0x8327f246), TOBN(0xc3a3bfaa, 0x4d7df320),
- TOBN(0xecd96c59, 0xb96024f2), TOBN(0xfc293a53, 0x7f4e0433),
- TOBN(0x5341352b, 0x5acf6e10), TOBN(0xc50343fd, 0xafe652c3),
- TOBN(0x4af3792d, 0x18577a7f), TOBN(0xe1a4c617, 0xaf16823d),
- TOBN(0x9b26d0cd, 0x33425d0a), TOBN(0x306399ed, 0x9b7bc47f),
- TOBN(0x2a792f33, 0x706bb20b), TOBN(0x31219614, 0x98111055),
- TOBN(0x864ec064, 0x87f5d28b), TOBN(0x11392d91, 0x962277fd),
- TOBN(0xb5aa7942, 0xbb6aed5f), TOBN(0x080094dc, 0x47e799d9),
- TOBN(0x4afa588c, 0x208ba19b), TOBN(0xd3e7570f, 0x8512f284),
- TOBN(0xcbae64e6, 0x02f5799a), TOBN(0xdeebe7ef, 0x514b9492),
- TOBN(0x30300f98, 0xe5c298ff), TOBN(0x17f561be, 0x3678361f),
- TOBN(0xf52ff312, 0x98cb9a16), TOBN(0x6233c3bc, 0x5562d490),
- TOBN(0x7bfa15a1, 0x92e3a2cb), TOBN(0x961bcfd1, 0xe6365119),
- TOBN(0x3bdd29bf, 0x2c8c53b1), TOBN(0x739704df, 0x822844ba),
- TOBN(0x7dacfb58, 0x7e7b754b), TOBN(0x23360791, 0xa806c9b9),
- TOBN(0xe7eb88c9, 0x23504452), TOBN(0x2983e996, 0x852c1783),
- TOBN(0xdd4ae529, 0x958d881d), TOBN(0x026bae03, 0x262c7b3c),
- TOBN(0x3a6f9193, 0x960b52d1), TOBN(0xd0980f90, 0x92696cfb),
- TOBN(0x4c1f428c, 0xd5f30851), TOBN(0x94dfed27, 0x2a4f6630),
- TOBN(0x4df53772, 0xfc5d48a4), TOBN(0xdd2d5a2f, 0x933260ce),
- TOBN(0x574115bd, 0xd44cc7a5), TOBN(0x4ba6b20d, 0xbd12533a),
- TOBN(0x30e93cb8, 0x243057c9), TOBN(0x794c486a, 0x14de320e),
- TOBN(0xe925d4ce, 0xf21496e4), TOBN(0xf951d198, 0xec696331),
- TOBN(0x9810e2de, 0x3e8d812f), TOBN(0xd0a47259, 0x389294ab),
- TOBN(0x513ba2b5, 0x0e3bab66), TOBN(0x462caff5, 0xabad306f),
- TOBN(0xe2dc6d59, 0xaf04c49e), TOBN(0x1aeb8750, 0xe0b84b0b),
- TOBN(0xc034f12f, 0x2f7d0ca2), TOBN(0x6d2e8128, 0xe06acf2f),
- TOBN(0x801f4f83, 0x21facc2f), TOBN(0xa1170c03, 0xf40ef607),
- TOBN(0xfe0a1d4f, 0x7805a99c), TOBN(0xbde56a36, 0xcc26aba5),
- TOBN(0x5b1629d0, 0x35531f40), TOBN(0xac212c2b, 0x9afa6108),
- TOBN(0x30a06bf3, 0x15697be5), TOBN(0x6f0545dc, 0x2c63c7c1),
- TOBN(0x5d8cb842, 0x7ccdadaf), TOBN(0xd52e379b, 0xac7015bb),
- TOBN(0xc4f56147, 0xf462c23e), TOBN(0xd44a4298, 0x46bc24b0),
- TOBN(0xbc73d23a, 0xe2856d4f), TOBN(0x61cedd8c, 0x0832bcdf),
- TOBN(0x60953556, 0x99f241d7), TOBN(0xee4adbd7, 0x001a349d),
- TOBN(0x0b35bf6a, 0xaa89e491), TOBN(0x7f0076f4, 0x136f7546),
- TOBN(0xd19a18ba, 0x9264da3d), TOBN(0x6eb2d2cd, 0x62a7a28b),
- TOBN(0xcdba941f, 0x8761c971), TOBN(0x1550518b, 0xa3be4a5d),
- TOBN(0xd0e8e2f0, 0x57d0b70c), TOBN(0xeea8612e, 0xcd133ba3),
- TOBN(0x814670f0, 0x44416aec), TOBN(0x424db6c3, 0x30775061),
- TOBN(0xd96039d1, 0x16213fd1), TOBN(0xc61e7fa5, 0x18a3478f),
- TOBN(0xa805bdcc, 0xcb0c5021), TOBN(0xbdd6f3a8, 0x0cc616dd),
- TOBN(0x06009667, 0x5d97f7e2), TOBN(0x31db0fc1, 0xaf0bf4b6),
- TOBN(0x23680ed4, 0x5491627a), TOBN(0xb99a3c66, 0x7d741fb1),
- TOBN(0xe9bb5f55, 0x36b1ff92), TOBN(0x29738577, 0x512b388d),
- TOBN(0xdb8a2ce7, 0x50fcf263), TOBN(0x385346d4, 0x6c4f7b47),
- TOBN(0xbe86c5ef, 0x31631f9e), TOBN(0xbf91da21, 0x03a57a29),
- TOBN(0xc3b1f796, 0x7b23f821), TOBN(0x0f7d00d2, 0x770db354),
- TOBN(0x8ffc6c3b, 0xd8fe79da), TOBN(0xcc5e8c40, 0xd525c996),
- TOBN(0x4640991d, 0xcfff632a), TOBN(0x64d97e8c, 0x67112528),
- TOBN(0xc232d973, 0x02f1cd1e), TOBN(0xce87eacb, 0x1dd212a4),
- TOBN(0x6e4c8c73, 0xe69802f7), TOBN(0x12ef0290, 0x1fffddbd),
- TOBN(0x941ec74e, 0x1bcea6e2), TOBN(0xd0b54024, 0x3cb92cbb),
- TOBN(0x809fb9d4, 0x7e8f9d05), TOBN(0x3bf16159, 0xf2992aae),
- TOBN(0xad40f279, 0xf8a7a838), TOBN(0x11aea631, 0x05615660),
- TOBN(0xbf52e6f1, 0xa01f6fa1), TOBN(0xef046995, 0x3dc2aec9),
- TOBN(0x785dbec9, 0xd8080711), TOBN(0xe1aec60a, 0x9fdedf76),
- TOBN(0xece797b5, 0xfa21c126), TOBN(0xc66e898f, 0x05e52732),
- TOBN(0x39bb69c4, 0x08811fdb), TOBN(0x8bfe1ef8, 0x2fc7f082),
- TOBN(0xc8e7a393, 0x174f4138), TOBN(0xfba8ad1d, 0xd58d1f98),
- TOBN(0xbc21d0ce, 0xbfd2fd5b), TOBN(0x0b839a82, 0x6ee60d61),
- TOBN(0xaacf7658, 0xafd22253), TOBN(0xb526bed8, 0xaae396b3),
- TOBN(0xccc1bbc2, 0x38564464), TOBN(0x9e3ff947, 0x8c45bc73),
- TOBN(0xcde9bca3, 0x58188a78), TOBN(0x138b8ee0, 0xd73bf8f7),
- TOBN(0x5c7e234c, 0x4123c489), TOBN(0x66e69368, 0xfa643297),
- TOBN(0x0629eeee, 0x39a15fa3), TOBN(0x95fab881, 0xa9e2a927),
- TOBN(0xb2497007, 0xeafbb1e1), TOBN(0xd75c9ce6, 0xe75b7a93),
- TOBN(0x3558352d, 0xefb68d78), TOBN(0xa2f26699, 0x223f6396),
- TOBN(0xeb911ecf, 0xe469b17a), TOBN(0x62545779, 0xe72d3ec2),
- TOBN(0x8ea47de7, 0x82cb113f), TOBN(0xebe4b086, 0x4e1fa98d),
- TOBN(0xec2d5ed7, 0x8cdfedb1), TOBN(0xa535c077, 0xfe211a74),
- TOBN(0x9678109b, 0x11d244c5), TOBN(0xf17c8bfb, 0xbe299a76),
- TOBN(0xb651412e, 0xfb11fbc4), TOBN(0xea0b5482, 0x94ab3f65),
- TOBN(0xd8dffd95, 0x0cf78243), TOBN(0x2e719e57, 0xce0361d4),
- TOBN(0x9007f085, 0x304ddc5b), TOBN(0x095e8c6d, 0x4daba2ea),
- TOBN(0x5a33cdb4, 0x3f9d28a9), TOBN(0x85b95cd8, 0xe2283003),
- TOBN(0xbcd6c819, 0xb9744733), TOBN(0x29c5f538, 0xfc7f5783),
- TOBN(0x6c49b2fa, 0xd59038e4), TOBN(0x68349cc1, 0x3bbe1018),
- TOBN(0xcc490c1d, 0x21830ee5), TOBN(0x36f9c4ee, 0xe9bfa297),
- TOBN(0x58fd7294, 0x48de1a94), TOBN(0xaadb13a8, 0x4e8f2cdc),
- TOBN(0x515eaaa0, 0x81313dba), TOBN(0xc76bb468, 0xc2152dd8),
- TOBN(0x357f8d75, 0xa653dbf8), TOBN(0xe4d8c4d1, 0xb14ac143),
- TOBN(0xbdb8e675, 0xb055cb40), TOBN(0x898f8e7b, 0x977b5167),
- TOBN(0xecc65651, 0xb82fb863), TOBN(0x56544814, 0x6d88f01f),
- TOBN(0xb0928e95, 0x263a75a9), TOBN(0xcfb6836f, 0x1a22fcda),
- TOBN(0x651d14db, 0x3f3bd37c), TOBN(0x1d3837fb, 0xb6ad4664),
- TOBN(0x7c5fb538, 0xff4f94ab), TOBN(0x7243c712, 0x6d7fb8f2),
- TOBN(0xef13d60c, 0xa85c5287), TOBN(0x18cfb7c7, 0x4bb8dd1b),
- TOBN(0x82f9bfe6, 0x72908219), TOBN(0x35c4592b, 0x9d5144ab),
- TOBN(0x52734f37, 0x9cf4b42f), TOBN(0x6bac55e7, 0x8c60ddc4),
- TOBN(0xb5cd811e, 0x94dea0f6), TOBN(0x259ecae4, 0xe18cc1a3),
- TOBN(0x6a0e836e, 0x15e660f8), TOBN(0x6c639ea6, 0x0e02bff2),
- TOBN(0x8721b8cb, 0x7e1026fd), TOBN(0x9e73b50b, 0x63261942),
- TOBN(0xb8c70974, 0x77f01da3), TOBN(0x1839e6a6, 0x8268f57f),
- TOBN(0x571b9415, 0x5150b805), TOBN(0x1892389e, 0xf92c7097),
- TOBN(0x8d69c18e, 0x4a084b95), TOBN(0x7014c512, 0xbe5b495c),
- TOBN(0x4780db36, 0x1b07523c), TOBN(0x2f6219ce, 0x2c1c64fa),
- TOBN(0xc38b81b0, 0x602c105a), TOBN(0xab4f4f20, 0x5dc8e360),
- TOBN(0x20d3c982, 0xcf7d62d2), TOBN(0x1f36e29d, 0x23ba8150),
- TOBN(0x48ae0bf0, 0x92763f9e), TOBN(0x7a527e6b, 0x1d3a7007),
- TOBN(0xb4a89097, 0x581a85e3), TOBN(0x1f1a520f, 0xdc158be5),
- TOBN(0xf98db37d, 0x167d726e), TOBN(0x8802786e, 0x1113e862)},
- {TOBN(0xefb2149e, 0x36f09ab0), TOBN(0x03f163ca, 0x4a10bb5b),
- TOBN(0xd0297045, 0x06e20998), TOBN(0x56f0af00, 0x1b5a3bab),
- TOBN(0x7af4cfec, 0x70880e0d), TOBN(0x7332a66f, 0xbe3d913f),
- TOBN(0x32e6c84a, 0x7eceb4bd), TOBN(0xedc4a79a, 0x9c228f55),
- TOBN(0xc37c7dd0, 0xc55c4496), TOBN(0xa6a96357, 0x25bbabd2),
- TOBN(0x5b7e63f2, 0xadd7f363), TOBN(0x9dce3782, 0x2e73f1df),
- TOBN(0xe1e5a16a, 0xb2b91f71), TOBN(0xe4489823, 0x5ba0163c),
- TOBN(0xf2759c32, 0xf6e515ad), TOBN(0xa5e2f1f8, 0x8615eecf),
- TOBN(0x74519be7, 0xabded551), TOBN(0x03d358b8, 0xc8b74410),
- TOBN(0x4d00b10b, 0x0e10d9a9), TOBN(0x6392b0b1, 0x28da52b7),
- TOBN(0x6744a298, 0x0b75c904), TOBN(0xc305b0ae, 0xa8f7f96c),
- TOBN(0x042e421d, 0x182cf932), TOBN(0xf6fc5d50, 0x9e4636ca),
- TOBN(0x795847c9, 0xd64cc78c), TOBN(0x6c50621b, 0x9b6cb27b),
- TOBN(0x07099bf8, 0xdf8022ab), TOBN(0x48f862eb, 0xc04eda1d),
- TOBN(0xd12732ed, 0xe1603c16), TOBN(0x19a80e0f, 0x5c9a9450),
- TOBN(0xe2257f54, 0xb429b4fc), TOBN(0x66d3b2c6, 0x45460515),
- TOBN(0x6ca4f87e, 0x822e37be), TOBN(0x73f237b4, 0x253bda4e),
- TOBN(0xf747f3a2, 0x41190aeb), TOBN(0xf06fa36f, 0x804cf284),
- TOBN(0x0a6bbb6e, 0xfc621c12), TOBN(0x5d624b64, 0x40b80ec6),
- TOBN(0x4b072425, 0x7ba556f3), TOBN(0x7fa0c354, 0x3e2d20a8),
- TOBN(0xe921fa31, 0xe3229d41), TOBN(0xa929c652, 0x94531bd4),
- TOBN(0x84156027, 0xa6d38209), TOBN(0xf3d69f73, 0x6bdb97bd),
- TOBN(0x8906d19a, 0x16833631), TOBN(0x68a34c2e, 0x03d51be3),
- TOBN(0xcb59583b, 0x0e511cd8), TOBN(0x99ce6bfd, 0xfdc132a8),
- TOBN(0x3facdaaa, 0xffcdb463), TOBN(0x658bbc1a, 0x34a38b08),
- TOBN(0x12a801f8, 0xf1a9078d), TOBN(0x1567bcf9, 0x6ab855de),
- TOBN(0xe08498e0, 0x3572359b), TOBN(0xcf0353e5, 0x8659e68b),
- TOBN(0xbb86e9c8, 0x7d23807c), TOBN(0xbc08728d, 0x2198e8a2),
- TOBN(0x8de2b7bc, 0x453cadd6), TOBN(0x203900a7, 0xbc0bc1f8),
- TOBN(0xbcd86e47, 0xa6abd3af), TOBN(0x911cac12, 0x8502effb),
- TOBN(0x2d550242, 0xec965469), TOBN(0x0e9f7692, 0x29e0017e),
- TOBN(0x633f078f, 0x65979885), TOBN(0xfb87d449, 0x4cf751ef),
- TOBN(0xe1790e4b, 0xfc25419a), TOBN(0x36467203, 0x4bff3cfd),
- TOBN(0xc8db6386, 0x25b6e83f), TOBN(0x6cc69f23, 0x6cad6fd2),
- TOBN(0x0219e45a, 0x6bc68bb9), TOBN(0xe43d79b6, 0x297f7334),
- TOBN(0x7d445368, 0x465dc97c), TOBN(0x4b9eea32, 0x2a0b949a),
- TOBN(0x1b96c6ba, 0x6102d021), TOBN(0xeaafac78, 0x2f4461ea),
- TOBN(0xd4b85c41, 0xc49f19a8), TOBN(0x275c28e4, 0xcf538875),
- TOBN(0x35451a9d, 0xdd2e54e0), TOBN(0x6991adb5, 0x0605618b),
- TOBN(0x5b8b4bcd, 0x7b36cd24), TOBN(0x372a4f8c, 0x56f37216),
- TOBN(0xc890bd73, 0xa6a5da60), TOBN(0x6f083da0, 0xdc4c9ff0),
- TOBN(0xf4e14d94, 0xf0536e57), TOBN(0xf9ee1eda, 0xaaec8243),
- TOBN(0x571241ec, 0x8bdcf8e7), TOBN(0xa5db8271, 0x0b041e26),
- TOBN(0x9a0b9a99, 0xe3fff040), TOBN(0xcaaf21dd, 0x7c271202),
- TOBN(0xb4e2b2e1, 0x4f0dd2e8), TOBN(0xe77e7c4f, 0x0a377ac7),
- TOBN(0x69202c3f, 0x0d7a2198), TOBN(0xf759b7ff, 0x28200eb8),
- TOBN(0xc87526ed, 0xdcfe314e), TOBN(0xeb84c524, 0x53d5cf99),
- TOBN(0xb1b52ace, 0x515138b6), TOBN(0x5aa7ff8c, 0x23fca3f4),
- TOBN(0xff0b13c3, 0xb9791a26), TOBN(0x960022da, 0xcdd58b16),
- TOBN(0xdbd55c92, 0x57aad2de), TOBN(0x3baaaaa3, 0xf30fe619),
- TOBN(0x9a4b2346, 0x0d881efd), TOBN(0x506416c0, 0x46325e2a),
- TOBN(0x91381e76, 0x035c18d4), TOBN(0xb3bb68be, 0xf27817b0),
- TOBN(0x15bfb8bf, 0x5116f937), TOBN(0x7c64a586, 0xc1268943),
- TOBN(0x71e25cc3, 0x8419a2c8), TOBN(0x9fd6b0c4, 0x8335f463),
- TOBN(0x4bf0ba3c, 0xe8ee0e0e), TOBN(0x6f6fba60, 0x298c21fa),
- TOBN(0x57d57b39, 0xae66bee0), TOBN(0x292d5130, 0x22672544),
- TOBN(0xf451105d, 0xbab093b3), TOBN(0x012f59b9, 0x02839986),
- TOBN(0x8a915802, 0x3474a89c), TOBN(0x048c919c, 0x2de03e97),
- TOBN(0xc476a2b5, 0x91071cd5), TOBN(0x791ed89a, 0x034970a5),
- TOBN(0x89bd9042, 0xe1b7994b), TOBN(0x8eaf5179, 0xa1057ffd),
- TOBN(0x6066e2a2, 0xd551ee10), TOBN(0x87a8f1d8, 0x727e09a6),
- TOBN(0x00d08bab, 0x2c01148d), TOBN(0x6da8e4f1, 0x424f33fe),
- TOBN(0x466d17f0, 0xcf9a4e71), TOBN(0xff502010, 0x3bf5cb19),
- TOBN(0xdccf97d8, 0xd062ecc0), TOBN(0x80c0d9af, 0x81d80ac4),
- TOBN(0xe87771d8, 0x033f2876), TOBN(0xb0186ec6, 0x7d5cc3db),
- TOBN(0x58e8bb80, 0x3bc9bc1d), TOBN(0x4d1395cc, 0x6f6ef60e),
- TOBN(0xa73c62d6, 0x186244a0), TOBN(0x918e5f23, 0x110a5b53),
- TOBN(0xed4878ca, 0x741b7eab), TOBN(0x3038d71a, 0xdbe03e51),
- TOBN(0x840204b7, 0xa93c3246), TOBN(0x21ab6069, 0xa0b9b4cd),
- TOBN(0xf5fa6e2b, 0xb1d64218), TOBN(0x1de6ad0e, 0xf3d56191),
- TOBN(0x570aaa88, 0xff1929c7), TOBN(0xc6df4c6b, 0x640e87b5),
- TOBN(0xde8a74f2, 0xc65f0ccc), TOBN(0x8b972fd5, 0xe6f6cc01),
- TOBN(0x3fff36b6, 0x0b846531), TOBN(0xba7e45e6, 0x10a5e475),
- TOBN(0x84a1d10e, 0x4145b6c5), TOBN(0xf1f7f91a, 0x5e046d9d),
- TOBN(0x0317a692, 0x44de90d7), TOBN(0x951a1d4a, 0xf199c15e),
- TOBN(0x91f78046, 0xc9d73deb), TOBN(0x74c82828, 0xfab8224f),
- TOBN(0xaa6778fc, 0xe7560b90), TOBN(0xb4073e61, 0xa7e824ce),
- TOBN(0xff0d693c, 0xd642eba8), TOBN(0x7ce2e57a, 0x5dccef38),
- TOBN(0x89c2c789, 0x1df1ad46), TOBN(0x83a06922, 0x098346fd),
- TOBN(0x2d715d72, 0xda2fc177), TOBN(0x7b6dd71d, 0x85b6cf1d),
- TOBN(0xc60a6d0a, 0x73fa9cb0), TOBN(0xedd3992e, 0x328bf5a9),
- TOBN(0xc380ddd0, 0x832c8c82), TOBN(0xd182d410, 0xa2a0bf50),
- TOBN(0x7d9d7438, 0xd9a528db), TOBN(0xe8b1a0e9, 0xcaf53994),
- TOBN(0xddd6e5fe, 0x0e19987c), TOBN(0xacb8df03, 0x190b059d),
- TOBN(0x53703a32, 0x8300129f), TOBN(0x1f637662, 0x68c43bfd),
- TOBN(0xbcbd1913, 0x00e54051), TOBN(0x812fcc62, 0x7bf5a8c5),
- TOBN(0x3f969d5f, 0x29fb85da), TOBN(0x72f4e00a, 0x694759e8),
- TOBN(0x426b6e52, 0x790726b7), TOBN(0x617bbc87, 0x3bdbb209),
- TOBN(0x511f8bb9, 0x97aee317), TOBN(0x812a4096, 0xe81536a8),
- TOBN(0x137dfe59, 0x3ac09b9b), TOBN(0x0682238f, 0xba8c9a7a),
- TOBN(0x7072ead6, 0xaeccb4bd), TOBN(0x6a34e9aa, 0x692ba633),
- TOBN(0xc82eaec2, 0x6fff9d33), TOBN(0xfb753512, 0x1d4d2b62),
- TOBN(0x1a0445ff, 0x1d7aadab), TOBN(0x65d38260, 0xd5f6a67c),
- TOBN(0x6e62fb08, 0x91cfb26f), TOBN(0xef1e0fa5, 0x5c7d91d6),
- TOBN(0x47e7c7ba, 0x33db72cd), TOBN(0x017cbc09, 0xfa7c74b2),
- TOBN(0x3c931590, 0xf50a503c), TOBN(0xcac54f60, 0x616baa42),
- TOBN(0x9b6cd380, 0xb2369f0f), TOBN(0x97d3a70d, 0x23c76151),
- TOBN(0x5f9dd6fc, 0x9862a9c6), TOBN(0x044c4ab2, 0x12312f51),
- TOBN(0x035ea0fd, 0x834a2ddc), TOBN(0x49e6b862, 0xcc7b826d),
- TOBN(0xb03d6883, 0x62fce490), TOBN(0x62f2497a, 0xb37e36e9),
- TOBN(0x04b005b6, 0xc6458293), TOBN(0x36bb5276, 0xe8d10af7),
- TOBN(0xacf2dc13, 0x8ee617b8), TOBN(0x470d2d35, 0xb004b3d4),
- TOBN(0x06790832, 0xfeeb1b77), TOBN(0x2bb75c39, 0x85657f9c),
- TOBN(0xd70bd4ed, 0xc0f60004), TOBN(0xfe797ecc, 0x219b018b),
- TOBN(0x9b5bec2a, 0x753aebcc), TOBN(0xdaf9f3dc, 0xc939eca5),
- TOBN(0xd6bc6833, 0xd095ad09), TOBN(0x98abdd51, 0xdaa4d2fc),
- TOBN(0xd9840a31, 0x8d168be5), TOBN(0xcf7c10e0, 0x2325a23c),
- TOBN(0xa5c02aa0, 0x7e6ecfaf), TOBN(0x2462e7e6, 0xb5bfdf18),
- TOBN(0xab2d8a8b, 0xa0cc3f12), TOBN(0x68dd485d, 0xbc672a29),
- TOBN(0x72039752, 0x596f2cd3), TOBN(0x5d3eea67, 0xa0cf3d8d),
- TOBN(0x810a1a81, 0xe6602671), TOBN(0x8f144a40, 0x14026c0c),
- TOBN(0xbc753a6d, 0x76b50f85), TOBN(0xc4dc21e8, 0x645cd4a4),
- TOBN(0xc5262dea, 0x521d0378), TOBN(0x802b8e0e, 0x05011c6f),
- TOBN(0x1ba19cbb, 0x0b4c19ea), TOBN(0x21db64b5, 0xebf0aaec),
- TOBN(0x1f394ee9, 0x70342f9d), TOBN(0x93a10aee, 0x1bc44a14),
- TOBN(0xa7eed31b, 0x3efd0baa), TOBN(0x6e7c824e, 0x1d154e65),
- TOBN(0xee23fa81, 0x9966e7ee), TOBN(0x64ec4aa8, 0x05b7920d),
- TOBN(0x2d44462d, 0x2d90aad4), TOBN(0xf44dd195, 0xdf277ad5),
- TOBN(0x8d6471f1, 0xbb46b6a1), TOBN(0x1e65d313, 0xfd885090),
- TOBN(0x33a800f5, 0x13a977b4), TOBN(0xaca9d721, 0x0797e1ef),
- TOBN(0x9a5a85a0, 0xfcff6a17), TOBN(0x9970a3f3, 0x1eca7cee),
- TOBN(0xbb9f0d6b, 0xc9504be3), TOBN(0xe0c504be, 0xadd24ee2),
- TOBN(0x7e09d956, 0x77fcc2f4), TOBN(0xef1a5227, 0x65bb5fc4),
- TOBN(0x145d4fb1, 0x8b9286aa), TOBN(0x66fd0c5d, 0x6649028b),
- TOBN(0x98857ceb, 0x1bf4581c), TOBN(0xe635e186, 0xaca7b166),
- TOBN(0x278ddd22, 0x659722ac), TOBN(0xa0903c4c, 0x1db68007),
- TOBN(0x366e4589, 0x48f21402), TOBN(0x31b49c14, 0xb96abda2),
- TOBN(0x329c4b09, 0xe0403190), TOBN(0x97197ca3, 0xd29f43fe),
- TOBN(0x8073dd1e, 0x274983d8), TOBN(0xda1a3bde, 0x55717c8f),
- TOBN(0xfd3d4da2, 0x0361f9d1), TOBN(0x1332d081, 0x4c7de1ce),
- TOBN(0x9b7ef7a3, 0xaa6d0e10), TOBN(0x17db2e73, 0xf54f1c4a),
- TOBN(0xaf3dffae, 0x4cd35567), TOBN(0xaaa2f406, 0xe56f4e71),
- TOBN(0x8966759e, 0x7ace3fc7), TOBN(0x9594eacf, 0x45a8d8c6),
- TOBN(0x8de3bd8b, 0x91834e0e), TOBN(0xafe4ca53, 0x548c0421),
- TOBN(0xfdd7e856, 0xe6ee81c6), TOBN(0x8f671beb, 0x6b891a3a),
- TOBN(0xf7a58f2b, 0xfae63829), TOBN(0x9ab186fb, 0x9c11ac9f),
- TOBN(0x8d6eb369, 0x10b5be76), TOBN(0x046b7739, 0xfb040bcd),
- TOBN(0xccb4529f, 0xcb73de88), TOBN(0x1df0fefc, 0xcf26be03),
- TOBN(0xad7757a6, 0xbcfcd027), TOBN(0xa8786c75, 0xbb3165ca),
- TOBN(0xe9db1e34, 0x7e99a4d9), TOBN(0x99ee86df, 0xb06c504b),
- TOBN(0x5b7c2ddd, 0xc15c9f0a), TOBN(0xdf87a734, 0x4295989e),
- TOBN(0x59ece47c, 0x03d08fda), TOBN(0xb074d3dd, 0xad5fc702),
- TOBN(0x20407903, 0x51a03776), TOBN(0x2bb1f77b, 0x2a608007),
- TOBN(0x25c58f4f, 0xe1153185), TOBN(0xe6df62f6, 0x766e6447),
- TOBN(0xefb3d1be, 0xed51275a), TOBN(0x5de47dc7, 0x2f0f483f),
- TOBN(0x7932d98e, 0x97c2bedf), TOBN(0xd5c11927, 0x0219f8a1),
- TOBN(0x9d751200, 0xa73a294e), TOBN(0x5f88434a, 0x9dc20172),
- TOBN(0xd28d9fd3, 0xa26f506a), TOBN(0xa890cd31, 0x9d1dcd48),
- TOBN(0x0aebaec1, 0x70f4d3b4), TOBN(0xfd1a1369, 0x0ffc8d00),
- TOBN(0xb9d9c240, 0x57d57838), TOBN(0x45929d26, 0x68bac361),
- TOBN(0x5a2cd060, 0x25b15ca6), TOBN(0x4b3c83e1, 0x6e474446),
- TOBN(0x1aac7578, 0xee1e5134), TOBN(0xa418f5d6, 0xc91e2f41),
- TOBN(0x6936fc8a, 0x213ed68b), TOBN(0x860ae7ed, 0x510a5224),
- TOBN(0x63660335, 0xdef09b53), TOBN(0x641b2897, 0xcd79c98d),
- TOBN(0x29bd38e1, 0x01110f35), TOBN(0x79c26f42, 0x648b1937),
- TOBN(0x64dae519, 0x9d9164f4), TOBN(0xd85a2310, 0x0265c273),
- TOBN(0x7173dd5d, 0x4b07e2b1), TOBN(0xd144c4cb, 0x8d9ea221),
- TOBN(0xe8b04ea4, 0x1105ab14), TOBN(0x92dda542, 0xfe80d8f1),
- TOBN(0xe9982fa8, 0xcf03dce6), TOBN(0x8b5ea965, 0x1a22cffc),
- TOBN(0xf7f4ea7f, 0x3fad88c4), TOBN(0x62db773e, 0x6a5ba95c),
- TOBN(0xd20f02fb, 0x93f24567), TOBN(0xfd46c69a, 0x315257ca),
- TOBN(0x0ac74cc7, 0x8bcab987), TOBN(0x46f31c01, 0x5ceca2f5),
- TOBN(0x40aedb59, 0x888b219e), TOBN(0xe50ecc37, 0xe1fccd02),
- TOBN(0x1bcd9dad, 0x911f816c), TOBN(0x583cc1ec, 0x8db9b00c),
- TOBN(0xf3cd2e66, 0xa483bf11), TOBN(0xfa08a6f5, 0xb1b2c169),
- TOBN(0xf375e245, 0x4be9fa28), TOBN(0x99a7ffec, 0x5b6d011f),
- TOBN(0x6a3ebddb, 0xc4ae62da), TOBN(0x6cea00ae, 0x374aef5d),
- TOBN(0xab5fb98d, 0x9d4d05bc), TOBN(0x7cba1423, 0xd560f252),
- TOBN(0x49b2cc21, 0x208490de), TOBN(0x1ca66ec3, 0xbcfb2879),
- TOBN(0x7f1166b7, 0x1b6fb16f), TOBN(0xfff63e08, 0x65fe5db3),
- TOBN(0xb8345abe, 0x8b2610be), TOBN(0xb732ed80, 0x39de3df4),
- TOBN(0x0e24ed50, 0x211c32b4), TOBN(0xd10d8a69, 0x848ff27d),
- TOBN(0xc1074398, 0xed4de248), TOBN(0xd7cedace, 0x10488927),
- TOBN(0xa4aa6bf8, 0x85673e13), TOBN(0xb46bae91, 0x6daf30af),
- TOBN(0x07088472, 0xfcef7ad8), TOBN(0x61151608, 0xd4b35e97),
- TOBN(0xbcfe8f26, 0xdde29986), TOBN(0xeb84c4c7, 0xd5a34c79),
- TOBN(0xc1eec55c, 0x164e1214), TOBN(0x891be86d, 0xa147bb03),
- TOBN(0x9fab4d10, 0x0ba96835), TOBN(0xbf01e9b8, 0xa5c1ae9f),
- TOBN(0x6b4de139, 0xb186ebc0), TOBN(0xd5c74c26, 0x85b91bca),
- TOBN(0x5086a99c, 0xc2d93854), TOBN(0xeed62a7b, 0xa7a9dfbc),
- TOBN(0x8778ed6f, 0x76b7618a), TOBN(0xbff750a5, 0x03b66062),
- TOBN(0x4cb7be22, 0xb65186db), TOBN(0x369dfbf0, 0xcc3a6d13),
- TOBN(0xc7dab26c, 0x7191a321), TOBN(0x9edac3f9, 0x40ed718e),
- TOBN(0xbc142b36, 0xd0cfd183), TOBN(0xc8af82f6, 0x7c991693),
- TOBN(0xb3d1e4d8, 0x97ce0b2a), TOBN(0xe6d7c87f, 0xc3a55cdf),
- TOBN(0x35846b95, 0x68b81afe), TOBN(0x018d12af, 0xd3c239d8),
- TOBN(0x2b2c6208, 0x01206e15), TOBN(0xe0e42453, 0xa3b882c6),
- TOBN(0x854470a3, 0xa50162d5), TOBN(0x08157478, 0x7017a62a),
- TOBN(0x18bd3fb4, 0x820357c7), TOBN(0x992039ae, 0x6f1458ad),
- TOBN(0x9a1df3c5, 0x25b44aa1), TOBN(0x2d780357, 0xed3d5281),
- TOBN(0x58cf7e4d, 0xc77ad4d4), TOBN(0xd49a7998, 0xf9df4fc4),
- TOBN(0x4465a8b5, 0x1d71205e), TOBN(0xa0ee0ea6, 0x649254aa),
- TOBN(0x4b5eeecf, 0xab7bd771), TOBN(0x6c873073, 0x35c262b9),
- TOBN(0xdc5bd648, 0x3c9d61e7), TOBN(0x233d6d54, 0x321460d2),
- TOBN(0xd20c5626, 0xfc195bcc), TOBN(0x25445958, 0x04d78b63),
- TOBN(0xe03fcb3d, 0x17ec8ef3), TOBN(0x54b690d1, 0x46b8f781),
- TOBN(0x82fa2c8a, 0x21230646), TOBN(0xf51aabb9, 0x084f418c),
- TOBN(0xff4fbec1, 0x1a30ba43), TOBN(0x6a5acf73, 0x743c9df7),
- TOBN(0x1da2b357, 0xd635b4d5), TOBN(0xc3de68dd, 0xecd5c1da),
- TOBN(0xa689080b, 0xd61af0dd), TOBN(0xdea5938a, 0xd665bf99),
- TOBN(0x0231d71a, 0xfe637294), TOBN(0x01968aa6, 0xa5a81cd8),
- TOBN(0x11252d50, 0x048e63b5), TOBN(0xc446bc52, 0x6ca007e9),
- TOBN(0xef8c50a6, 0x96d6134b), TOBN(0x9361fbf5, 0x9e09a05c),
- TOBN(0xf17f85a6, 0xdca3291a), TOBN(0xb178d548, 0xff251a21),
- TOBN(0x87f6374b, 0xa4df3915), TOBN(0x566ce1bf, 0x2fd5d608),
- TOBN(0x425cba4d, 0x7de35102), TOBN(0x6b745f8f, 0x58c5d5e2),
- TOBN(0x88402af6, 0x63122edf), TOBN(0x3190f9ed, 0x3b989a89),
- TOBN(0x4ad3d387, 0xebba3156), TOBN(0xef385ad9, 0xc7c469a5),
- TOBN(0xb08281de, 0x3f642c29), TOBN(0x20be0888, 0x910ffb88),
- TOBN(0xf353dd4a, 0xd5292546), TOBN(0x3f1627de, 0x8377a262),
- TOBN(0xa5faa013, 0xeefcd638), TOBN(0x8f3bf626, 0x74cc77c3),
- TOBN(0x32618f65, 0xa348f55e), TOBN(0x5787c0dc, 0x9fefeb9e),
- TOBN(0xf1673aa2, 0xd9a23e44), TOBN(0x88dfa993, 0x4e10690d),
- TOBN(0x1ced1b36, 0x2bf91108), TOBN(0x9193ceca, 0x3af48649),
- TOBN(0xfb34327d, 0x2d738fc5), TOBN(0x6697b037, 0x975fee6c),
- TOBN(0x2f485da0, 0xc04079a5), TOBN(0x2cdf5735, 0x2feaa1ac),
- TOBN(0x76944420, 0xbd55659e), TOBN(0x7973e32b, 0x4376090c),
- TOBN(0x86bb4fe1, 0x163b591a), TOBN(0x10441aed, 0xc196f0ca),
- TOBN(0x3b431f4a, 0x045ad915), TOBN(0x6c11b437, 0xa4afacb1),
- TOBN(0x30b0c7db, 0x71fdbbd8), TOBN(0xb642931f, 0xeda65acd),
- TOBN(0x4baae6e8, 0x9c92b235), TOBN(0xa73bbd0e, 0x6b3993a1),
- TOBN(0xd06d60ec, 0x693dd031), TOBN(0x03cab91b, 0x7156881c),
- TOBN(0xd615862f, 0x1db3574b), TOBN(0x485b0185, 0x64bb061a),
- TOBN(0x27434988, 0xa0181e06), TOBN(0x2cd61ad4, 0xc1c0c757),
- TOBN(0x3effed5a, 0x2ff9f403), TOBN(0x8dc98d8b, 0x62239029),
- TOBN(0x2206021e, 0x1f17b70d), TOBN(0xafbec0ca, 0xbf510015),
- TOBN(0x9fed7164, 0x80130dfa), TOBN(0x306dc2b5, 0x8a02dcf5),
- TOBN(0x48f06620, 0xfeb10fc0), TOBN(0x78d1e1d5, 0x5a57cf51),
- TOBN(0xadef8c5a, 0x192ef710), TOBN(0x88afbd4b, 0x3b7431f9),
- TOBN(0x7e1f7407, 0x64250c9e), TOBN(0x6e31318d, 0xb58bec07),
- TOBN(0xfd4fc4b8, 0x24f89b4e), TOBN(0x65a5dd88, 0x48c36a2a),
- TOBN(0x4f1eccff, 0xf024baa7), TOBN(0x22a21cf2, 0xcba94650),
- TOBN(0x95d29dee, 0x42a554f7), TOBN(0x828983a5, 0x002ec4ba),
- TOBN(0x8112a1f7, 0x8badb73d), TOBN(0x79ea8897, 0xa27c1839),
- TOBN(0x8969a5a7, 0xd065fd83), TOBN(0xf49af791, 0xb262a0bc),
- TOBN(0xfcdea8b6, 0xaf2b5127), TOBN(0x10e913e1, 0x564c2dbc),
- TOBN(0x51239d14, 0xbc21ef51), TOBN(0xe51c3ceb, 0x4ce57292),
- TOBN(0x795ff068, 0x47bbcc3b), TOBN(0x86b46e1e, 0xbd7e11e6),
- TOBN(0x0ea6ba23, 0x80041ef4), TOBN(0xd72fe505, 0x6262342e),
- TOBN(0x8abc6dfd, 0x31d294d4), TOBN(0xbbe017a2, 0x1278c2c9),
- TOBN(0xb1fcfa09, 0xb389328a), TOBN(0x322fbc62, 0xd01771b5),
- TOBN(0x04c0d063, 0x60b045bf), TOBN(0xdb652edc, 0x10e52d01),
- TOBN(0x50ef932c, 0x03ec6627), TOBN(0xde1b3b2d, 0xc1ee50e3),
- TOBN(0x5ab7bdc5, 0xdc37a90d), TOBN(0xfea67213, 0x31e33a96),
- TOBN(0x6482b5cb, 0x4f2999aa), TOBN(0x38476cc6, 0xb8cbf0dd),
- TOBN(0x93ebfacb, 0x173405bb), TOBN(0x15cdafe7, 0xe52369ec),
- TOBN(0xd42d5ba4, 0xd935b7db), TOBN(0x648b6004, 0x1c99a4cd),
- TOBN(0x785101bd, 0xa3b5545b), TOBN(0x4bf2c38a, 0x9dd67faf),
- TOBN(0xb1aadc63, 0x4442449c), TOBN(0xe0e9921a, 0x33ad4fb8),
- TOBN(0x5c552313, 0xaa686d82), TOBN(0xdee635fa, 0x465d866c),
- TOBN(0xbc3c224a, 0x18ee6e8a), TOBN(0xeed748a6, 0xed42e02f),
- TOBN(0xe70f930a, 0xd474cd08), TOBN(0x774ea6ec, 0xfff24adf),
- TOBN(0x03e2de1c, 0xf3480d4a), TOBN(0xf0d8edc7, 0xbc8acf1a),
- TOBN(0xf23e3303, 0x68295a9c), TOBN(0xfadd5f68, 0xc546a97d),
- TOBN(0x895597ad, 0x96f8acb1), TOBN(0xbddd49d5, 0x671bdae2),
- TOBN(0x16fcd528, 0x21dd43f4), TOBN(0xa5a45412, 0x6619141a)},
- {TOBN(0x8ce9b6bf, 0xc360e25a), TOBN(0xe6425195, 0x075a1a78),
- TOBN(0x9dc756a8, 0x481732f4), TOBN(0x83c0440f, 0x5432b57a),
- TOBN(0xc670b3f1, 0xd720281f), TOBN(0x2205910e, 0xd135e051),
- TOBN(0xded14b0e, 0xdb052be7), TOBN(0x697b3d27, 0xc568ea39),
- TOBN(0x2e599b9a, 0xfb3ff9ed), TOBN(0x28c2e0ab, 0x17f6515c),
- TOBN(0x1cbee4fd, 0x474da449), TOBN(0x071279a4, 0x4f364452),
- TOBN(0x97abff66, 0x01fbe855), TOBN(0x3ee394e8, 0x5fda51c4),
- TOBN(0x190385f6, 0x67597c0b), TOBN(0x6e9fccc6, 0xa27ee34b),
- TOBN(0x0b89de93, 0x14092ebb), TOBN(0xf17256bd, 0x428e240c),
- TOBN(0xcf89a7f3, 0x93d2f064), TOBN(0x4f57841e, 0xe1ed3b14),
- TOBN(0x4ee14405, 0xe708d855), TOBN(0x856aae72, 0x03f1c3d0),
- TOBN(0xc8e5424f, 0xbdd7eed5), TOBN(0x3333e4ef, 0x73ab4270),
- TOBN(0x3bc77ade, 0xdda492f8), TOBN(0xc11a3aea, 0x78297205),
- TOBN(0x5e89a3e7, 0x34931b4c), TOBN(0x17512e2e, 0x9f5694bb),
- TOBN(0x5dc349f3, 0x177bf8b6), TOBN(0x232ea4ba, 0x08c7ff3e),
- TOBN(0x9c4f9d16, 0xf511145d), TOBN(0xccf109a3, 0x33b379c3),
- TOBN(0xe75e7a88, 0xa1f25897), TOBN(0x7ac6961f, 0xa1b5d4d8),
- TOBN(0xe3e10773, 0x08f3ed5c), TOBN(0x208a54ec, 0x0a892dfb),
- TOBN(0xbe826e19, 0x78660710), TOBN(0x0cf70a97, 0x237df2c8),
- TOBN(0x418a7340, 0xed704da5), TOBN(0xa3eeb9a9, 0x08ca33fd),
- TOBN(0x49d96233, 0x169bca96), TOBN(0x04d286d4, 0x2da6aafb),
- TOBN(0xc09606ec, 0xa0c2fa94), TOBN(0x8869d0d5, 0x23ff0fb3),
- TOBN(0xa99937e5, 0xd0150d65), TOBN(0xa92e2503, 0x240c14c9),
- TOBN(0x656bf945, 0x108e2d49), TOBN(0x152a733a, 0xa2f59e2b),
- TOBN(0xb4323d58, 0x8434a920), TOBN(0xc0af8e93, 0x622103c5),
- TOBN(0x667518ef, 0x938dbf9a), TOBN(0xa1843073, 0x83a9cdf2),
- TOBN(0x350a94aa, 0x5447ab80), TOBN(0xe5e5a325, 0xc75a3d61),
- TOBN(0x74ba507f, 0x68411a9e), TOBN(0x10581fc1, 0x594f70c5),
- TOBN(0x60e28570, 0x80eb24a9), TOBN(0x7bedfb4d, 0x488e0cfd),
- TOBN(0x721ebbd7, 0xc259cdb8), TOBN(0x0b0da855, 0xbc6390a9),
- TOBN(0x2b4d04db, 0xde314c70), TOBN(0xcdbf1fbc, 0x6c32e846),
- TOBN(0x33833eab, 0xb162fc9e), TOBN(0x9939b48b, 0xb0dd3ab7),
- TOBN(0x5aaa98a7, 0xcb0c9c8c), TOBN(0x75105f30, 0x81c4375c),
- TOBN(0xceee5057, 0x5ef1c90f), TOBN(0xb31e065f, 0xc23a17bf),
- TOBN(0x5364d275, 0xd4b6d45a), TOBN(0xd363f3ad, 0x62ec8996),
- TOBN(0xb5d21239, 0x4391c65b), TOBN(0x84564765, 0xebb41b47),
- TOBN(0x20d18ecc, 0x37107c78), TOBN(0xacff3b6b, 0x570c2a66),
- TOBN(0x22f975d9, 0x9bd0d845), TOBN(0xef0a0c46, 0xba178fa0),
- TOBN(0x1a419651, 0x76b6028e), TOBN(0xc49ec674, 0x248612d4),
- TOBN(0x5b6ac4f2, 0x7338af55), TOBN(0x06145e62, 0x7bee5a36),
- TOBN(0x33e95d07, 0xe75746b5), TOBN(0x1c1e1f6d, 0xc40c78be),
- TOBN(0x967833ef, 0x222ff8e2), TOBN(0x4bedcf6a, 0xb49180ad),
- TOBN(0x6b37e9c1, 0x3d7a4c8a), TOBN(0x2748887c, 0x6ddfe760),
- TOBN(0xf7055123, 0xaa3a5bbc), TOBN(0x954ff225, 0x7bbb8e74),
- TOBN(0xc42b8ab1, 0x97c3dfb9), TOBN(0x55a549b0, 0xcf168154),
- TOBN(0xad6748e7, 0xc1b50692), TOBN(0x2775780f, 0x6fc5cbcb),
- TOBN(0x4eab80b8, 0xe1c9d7c8), TOBN(0x8c69dae1, 0x3fdbcd56),
- TOBN(0x47e6b4fb, 0x9969eace), TOBN(0x002f1085, 0xa705cb5a),
- TOBN(0x4e23ca44, 0x6d3fea55), TOBN(0xb4ae9c86, 0xf4810568),
- TOBN(0x47bfb91b, 0x2a62f27d), TOBN(0x60deb4c9, 0xd9bac28c),
- TOBN(0xa892d894, 0x7de6c34c), TOBN(0x4ee68259, 0x4494587d),
- TOBN(0x914ee14e, 0x1a3f8a5b), TOBN(0xbb113eaa, 0x28700385),
- TOBN(0x81ca03b9, 0x2115b4c9), TOBN(0x7c163d38, 0x8908cad1),
- TOBN(0xc912a118, 0xaa18179a), TOBN(0xe09ed750, 0x886e3081),
- TOBN(0xa676e3fa, 0x26f516ca), TOBN(0x753cacf7, 0x8e732f91),
- TOBN(0x51592aea, 0x833da8b4), TOBN(0xc626f42f, 0x4cbea8aa),
- TOBN(0xef9dc899, 0xa7b56eaf), TOBN(0x00c0e52c, 0x34ef7316),
- TOBN(0x5b1e4e24, 0xfe818a86), TOBN(0x9d31e20d, 0xc538be47),
- TOBN(0x22eb932d, 0x3ed68974), TOBN(0xe44bbc08, 0x7c4e87c4),
- TOBN(0x4121086e, 0x0dde9aef), TOBN(0x8e6b9cff, 0x134f4345),
- TOBN(0x96892c1f, 0x711b0eb9), TOBN(0xb905f2c8, 0x780ab954),
- TOBN(0xace26309, 0xa20792db), TOBN(0xec8ac9b3, 0x0684e126),
- TOBN(0x486ad8b6, 0xb40a2447), TOBN(0x60121fc1, 0x9fe3fb24),
- TOBN(0x5626fccf, 0x1a8e3b3f), TOBN(0x4e568622, 0x6ad1f394),
- TOBN(0xda7aae0d, 0x196aa5a1), TOBN(0xe0df8c77, 0x1041b5fb),
- TOBN(0x451465d9, 0x26b318b7), TOBN(0xc29b6e55, 0x7ab136e9),
- TOBN(0x2c2ab48b, 0x71148463), TOBN(0xb5738de3, 0x64454a76),
- TOBN(0x54ccf9a0, 0x5a03abe4), TOBN(0x377c0296, 0x0427d58e),
- TOBN(0x73f5f0b9, 0x2bb39c1f), TOBN(0x14373f2c, 0xe608d8c5),
- TOBN(0xdcbfd314, 0x00fbb805), TOBN(0xdf18fb20, 0x83afdcfb),
- TOBN(0x81a57f42, 0x42b3523f), TOBN(0xe958532d, 0x87f650fb),
- TOBN(0xaa8dc8b6, 0x8b0a7d7c), TOBN(0x1b75dfb7, 0x150166be),
- TOBN(0x90e4f7c9, 0x2d7d1413), TOBN(0x67e2d6b5, 0x9834f597),
- TOBN(0x4fd4f4f9, 0xa808c3e8), TOBN(0xaf8237e0, 0xd5281ec1),
- TOBN(0x25ab5fdc, 0x84687cee), TOBN(0xc5ded6b1, 0xa5b26c09),
- TOBN(0x8e4a5aec, 0xc8ea7650), TOBN(0x23b73e5c, 0x14cc417f),
- TOBN(0x2bfb4318, 0x3037bf52), TOBN(0xb61e6db5, 0x78c725d7),
- TOBN(0x8efd4060, 0xbbb3e5d7), TOBN(0x2e014701, 0xdbac488e),
- TOBN(0xac75cf9a, 0x360aa449), TOBN(0xb70cfd05, 0x79634d08),
- TOBN(0xa591536d, 0xfffb15ef), TOBN(0xb2c37582, 0xd07c106c),
- TOBN(0xb4293fdc, 0xf50225f9), TOBN(0xc52e175c, 0xb0e12b03),
- TOBN(0xf649c3ba, 0xd0a8bf64), TOBN(0x745a8fef, 0xeb8ae3c6),
- TOBN(0x30d7e5a3, 0x58321bc3), TOBN(0xb1732be7, 0x0bc4df48),
- TOBN(0x1f217993, 0xe9ea5058), TOBN(0xf7a71cde, 0x3e4fd745),
- TOBN(0x86cc533e, 0x894c5bbb), TOBN(0x6915c7d9, 0x69d83082),
- TOBN(0xa6aa2d05, 0x5815c244), TOBN(0xaeeee592, 0x49b22ce5),
- TOBN(0x89e39d13, 0x78135486), TOBN(0x3a275c1f, 0x16b76f2f),
- TOBN(0xdb6bcc1b, 0xe036e8f5), TOBN(0x4df69b21, 0x5e4709f5),
- TOBN(0xa188b250, 0x2d0f39aa), TOBN(0x622118bb, 0x15a85947),
- TOBN(0x2ebf520f, 0xfde0f4fa), TOBN(0xa40e9f29, 0x4860e539),
- TOBN(0x7b6a51eb, 0x22b57f0f), TOBN(0x849a33b9, 0x7e80644a),
- TOBN(0x50e5d16f, 0x1cf095fe), TOBN(0xd754b54e, 0xec55f002),
- TOBN(0x5cfbbb22, 0x236f4a98), TOBN(0x0b0c59e9, 0x066800bb),
- TOBN(0x4ac69a8f, 0x5a9a7774), TOBN(0x2b33f804, 0xd6bec948),
- TOBN(0xb3729295, 0x32e6c466), TOBN(0x68956d0f, 0x4e599c73),
- TOBN(0xa47a249f, 0x155c31cc), TOBN(0x24d80f0d, 0xe1ce284e),
- TOBN(0xcd821dfb, 0x988baf01), TOBN(0xe6331a7d, 0xdbb16647),
- TOBN(0x1eb8ad33, 0x094cb960), TOBN(0x593cca38, 0xc91bbca5),
- TOBN(0x384aac8d, 0x26567456), TOBN(0x40fa0309, 0xc04b6490),
- TOBN(0x97834cd6, 0xdab6c8f6), TOBN(0x68a7318d, 0x3f91e55f),
- TOBN(0xa00fd04e, 0xfc4d3157), TOBN(0xb56f8ab2, 0x2bf3bdea),
- TOBN(0x014f5648, 0x4fa57172), TOBN(0x948c5860, 0x450abdb3),
- TOBN(0x342b5df0, 0x0ebd4f08), TOBN(0x3e5168cd, 0x0e82938e),
- TOBN(0x7aedc1ce, 0xb0df5dd0), TOBN(0x6bbbc6d9, 0xe5732516),
- TOBN(0xc7bfd486, 0x605daaa6), TOBN(0x46fd72b7, 0xbb9a6c9e),
- TOBN(0xe4847fb1, 0xa124fb89), TOBN(0x75959cbd, 0xa2d8ffbc),
- TOBN(0x42579f65, 0xc8a588ee), TOBN(0x368c92e6, 0xb80b499d),
- TOBN(0xea4ef6cd, 0x999a5df1), TOBN(0xaa73bb7f, 0x936fe604),
- TOBN(0xf347a70d, 0x6457d188), TOBN(0x86eda86b, 0x8b7a388b),
- TOBN(0xb7cdff06, 0x0ccd6013), TOBN(0xbeb1b6c7, 0xd0053fb2),
- TOBN(0x0b022387, 0x99240a9f), TOBN(0x1bbb384f, 0x776189b2),
- TOBN(0x8695e71e, 0x9066193a), TOBN(0x2eb50097, 0x06ffac7e),
- TOBN(0x0654a9c0, 0x4a7d2caa), TOBN(0x6f3fb3d1, 0xa5aaa290),
- TOBN(0x835db041, 0xff476e8f), TOBN(0x540b8b0b, 0xc42295e4),
- TOBN(0xa5c73ac9, 0x05e214f5), TOBN(0x9a74075a, 0x56a0b638),
- TOBN(0x2e4b1090, 0xce9e680b), TOBN(0x57a5b479, 0x6b8d9afa),
- TOBN(0x0dca48e7, 0x26bfe65c), TOBN(0x097e391c, 0x7290c307),
- TOBN(0x683c462e, 0x6669e72e), TOBN(0xf505be1e, 0x062559ac),
- TOBN(0x5fbe3ea1, 0xe3a3035a), TOBN(0x6431ebf6, 0x9cd50da8),
- TOBN(0xfd169d5c, 0x1f6407f2), TOBN(0x8d838a95, 0x60fce6b8),
- TOBN(0x2a2bfa7f, 0x650006f0), TOBN(0xdfd7dad3, 0x50c0fbb2),
- TOBN(0x92452495, 0xccf9ad96), TOBN(0x183bf494, 0xd95635f9),
- TOBN(0x02d5df43, 0x4a7bd989), TOBN(0x505385cc, 0xa5431095),
- TOBN(0xdd98e67d, 0xfd43f53e), TOBN(0xd61e1a6c, 0x500c34a9),
- TOBN(0x5a4b46c6, 0x4a8a3d62), TOBN(0x8469c4d0, 0x247743d2),
- TOBN(0x2bb3a13d, 0x88f7e433), TOBN(0x62b23a10, 0x01be5849),
- TOBN(0xe83596b4, 0xa63d1a4c), TOBN(0x454e7fea, 0x7d183f3e),
- TOBN(0x643fce61, 0x17afb01c), TOBN(0x4e65e5e6, 0x1c4c3638),
- TOBN(0x41d85ea1, 0xef74c45b), TOBN(0x2cfbfa66, 0xae328506),
- TOBN(0x98b078f5, 0x3ada7da9), TOBN(0xd985fe37, 0xec752fbb),
- TOBN(0xeece68fe, 0x5a0148b4), TOBN(0x6f9a55c7, 0x2d78136d),
- TOBN(0x232dccc4, 0xd2b729ce), TOBN(0xa27e0dfd, 0x90aafbc4),
- TOBN(0x96474452, 0x12b4603e), TOBN(0xa876c551, 0x6b706d14),
- TOBN(0xdf145fcf, 0x69a9d412), TOBN(0xe2ab75b7, 0x2d479c34),
- TOBN(0x12df9a76, 0x1a23ff97), TOBN(0xc6138992, 0x5d359d10),
- TOBN(0x6e51c7ae, 0xfa835f22), TOBN(0x69a79cb1, 0xc0fcc4d9),
- TOBN(0xf57f350d, 0x594cc7e1), TOBN(0x3079ca63, 0x3350ab79),
- TOBN(0x226fb614, 0x9aff594a), TOBN(0x35afec02, 0x6d59a62b),
- TOBN(0x9bee46f4, 0x06ed2c6e), TOBN(0x58da1735, 0x7d939a57),
- TOBN(0x44c50402, 0x8fd1797e), TOBN(0xd8853e7c, 0x5ccea6ca),
- TOBN(0x4065508d, 0xa35fcd5f), TOBN(0x8965df8c, 0x495ccaeb),
- TOBN(0x0f2da850, 0x12e1a962), TOBN(0xee471b94, 0xc1cf1cc4),
- TOBN(0xcef19bc8, 0x0a08fb75), TOBN(0x704958f5, 0x81de3591),
- TOBN(0x2867f8b2, 0x3aef4f88), TOBN(0x8d749384, 0xea9f9a5f),
- TOBN(0x1b385537, 0x8c9049f4), TOBN(0x5be948f3, 0x7b92d8b6),
- TOBN(0xd96f725d, 0xb6e2bd6b), TOBN(0x37a222bc, 0x958c454d),
- TOBN(0xe7c61abb, 0x8809bf61), TOBN(0x46f07fbc, 0x1346f18d),
- TOBN(0xfb567a7a, 0xe87c0d1c), TOBN(0x84a461c8, 0x7ef3d07a),
- TOBN(0x0a5adce6, 0xd9278d98), TOBN(0x24d94813, 0x9dfc73e1),
- TOBN(0x4f3528b6, 0x054321c3), TOBN(0x2e03fdde, 0x692ea706),
- TOBN(0x10e60619, 0x47b533c0), TOBN(0x1a8bc73f, 0x2ca3c055),
- TOBN(0xae58d4b2, 0x1bb62b8f), TOBN(0xb2045a73, 0x584a24e3),
- TOBN(0x3ab3d5af, 0xbd76e195), TOBN(0x478dd1ad, 0x6938a810),
- TOBN(0x6ffab393, 0x6ee3d5cb), TOBN(0xdfb693db, 0x22b361e4),
- TOBN(0xf9694496, 0x51dbf1a7), TOBN(0xcab4b4ef, 0x08a2e762),
- TOBN(0xe8c92f25, 0xd39bba9a), TOBN(0x850e61bc, 0xf1464d96),
- TOBN(0xb7e830e3, 0xdc09508b), TOBN(0xfaf6d2cf, 0x74317655),
- TOBN(0x72606ceb, 0xdf690355), TOBN(0x48bb92b3, 0xd0c3ded6),
- TOBN(0x65b75484, 0x5c7cf892), TOBN(0xf6cd7ac9, 0xd5d5f01f),
- TOBN(0xc2c30a59, 0x96401d69), TOBN(0x91268650, 0xed921878),
- TOBN(0x380bf913, 0xb78c558f), TOBN(0x43c0baeb, 0xc8afdaa9),
- TOBN(0x377f61d5, 0x54f169d3), TOBN(0xf8da07e3, 0xae5ff20b),
- TOBN(0xb676c49d, 0xa8a90ea8), TOBN(0x81c1ff2b, 0x83a29b21),
- TOBN(0x383297ac, 0x2ad8d276), TOBN(0x3001122f, 0xba89f982),
- TOBN(0xe1d794be, 0x6718e448), TOBN(0x246c1482, 0x7c3e6e13),
- TOBN(0x56646ef8, 0x5d26b5ef), TOBN(0x80f5091e, 0x88069cdd),
- TOBN(0xc5992e2f, 0x724bdd38), TOBN(0x02e915b4, 0x8471e8c7),
- TOBN(0x96ff320a, 0x0d0ff2a9), TOBN(0xbf886487, 0x4384d1a0),
- TOBN(0xbbe1e6a6, 0xc93f72d6), TOBN(0xd5f75d12, 0xcad800ea),
- TOBN(0xfa40a09f, 0xe7acf117), TOBN(0x32c8cdd5, 0x7581a355),
- TOBN(0x74221992, 0x7023c499), TOBN(0xa8afe5d7, 0x38ec3901),
- TOBN(0x5691afcb, 0xa90e83f0), TOBN(0x41bcaa03, 0x0b8f8eac),
- TOBN(0xe38b5ff9, 0x8d2668d5), TOBN(0x0715281a, 0x7ad81965),
- TOBN(0x1bc8fc7c, 0x03c6ce11), TOBN(0xcbbee6e2, 0x8b650436),
- TOBN(0x06b00fe8, 0x0cdb9808), TOBN(0x17d6e066, 0xfe3ed315),
- TOBN(0x2e9d38c6, 0x4d0b5018), TOBN(0xab8bfd56, 0x844dcaef),
- TOBN(0x42894a59, 0x513aed8b), TOBN(0xf77f3b6d, 0x314bd07a),
- TOBN(0xbbdecb8f, 0x8e42b582), TOBN(0xf10e2fa8, 0xd2390fe6),
- TOBN(0xefb95022, 0x62a2f201), TOBN(0x4d59ea50, 0x50ee32b0),
- TOBN(0xd87f7728, 0x6da789a8), TOBN(0xcf98a2cf, 0xf79492c4),
- TOBN(0xf9577239, 0x720943c2), TOBN(0xba044cf5, 0x3990b9d0),
- TOBN(0x5aa8e823, 0x95f2884a), TOBN(0x834de6ed, 0x0278a0af),
- TOBN(0xc8e1ee9a, 0x5f25bd12), TOBN(0x9259ceaa, 0x6f7ab271),
- TOBN(0x7e6d97a2, 0x77d00b76), TOBN(0x5c0c6eea, 0xa437832a),
- TOBN(0x5232c20f, 0x5606b81d), TOBN(0xabd7b375, 0x0d991ee5),
- TOBN(0x4d2bfe35, 0x8632d951), TOBN(0x78f85146, 0x98ed9364),
- TOBN(0x951873f0, 0xf30c3282), TOBN(0x0da8ac80, 0xa789230b),
- TOBN(0x3ac7789c, 0x5398967f), TOBN(0xa69b8f7f, 0xbdda0fb5),
- TOBN(0xe5db7717, 0x6add8545), TOBN(0x1b71cb66, 0x72c49b66),
- TOBN(0xd8560739, 0x68421d77), TOBN(0x03840fe8, 0x83e3afea),
- TOBN(0xb391dad5, 0x1ec69977), TOBN(0xae243fb9, 0x307f6726),
- TOBN(0xc88ac87b, 0xe8ca160c), TOBN(0x5174cced, 0x4ce355f4),
- TOBN(0x98a35966, 0xe58ba37d), TOBN(0xfdcc8da2, 0x7817335d),
- TOBN(0x5b752830, 0x83fbc7bf), TOBN(0x68e419d4, 0xd9c96984),
- TOBN(0x409a39f4, 0x02a40380), TOBN(0x88940faf, 0x1fe977bc),
- TOBN(0xc640a94b, 0x8f8edea6), TOBN(0x1e22cd17, 0xed11547d),
- TOBN(0xe28568ce, 0x59ffc3e2), TOBN(0x60aa1b55, 0xc1dee4e7),
- TOBN(0xc67497c8, 0x837cb363), TOBN(0x06fb438a, 0x105a2bf2),
- TOBN(0x30357ec4, 0x500d8e20), TOBN(0x1ad9095d, 0x0670db10),
- TOBN(0x7f589a05, 0xc73b7cfd), TOBN(0xf544607d, 0x880d6d28),
- TOBN(0x17ba93b1, 0xa20ef103), TOBN(0xad859130, 0x6ba6577b),
- TOBN(0x65c91cf6, 0x6fa214a0), TOBN(0xd7d49c6c, 0x27990da5),
- TOBN(0xecd9ec8d, 0x20bb569d), TOBN(0xbd4b2502, 0xeeffbc33),
- TOBN(0x2056ca5a, 0x6bed0467), TOBN(0x7916a1f7, 0x5b63728c),
- TOBN(0xd4f9497d, 0x53a4f566), TOBN(0x89734664, 0x97b56810),
- TOBN(0xf8e1da74, 0x0494a621), TOBN(0x82546a93, 0x8d011c68),
- TOBN(0x1f3acb19, 0xc61ac162), TOBN(0x52f8fa9c, 0xabad0d3e),
- TOBN(0x15356523, 0xb4b7ea43), TOBN(0x5a16ad61, 0xae608125),
- TOBN(0xb0bcb87f, 0x4faed184), TOBN(0x5f236b1d, 0x5029f45f),
- TOBN(0xd42c7607, 0x0bc6b1fc), TOBN(0xc644324e, 0x68aefce3),
- TOBN(0x8e191d59, 0x5c5d8446), TOBN(0xc0208077, 0x13ae1979),
- TOBN(0xadcaee55, 0x3ba59cc7), TOBN(0x20ed6d6b, 0xa2cb81ba),
- TOBN(0x0952ba19, 0xb6efcffc), TOBN(0x60f12d68, 0x97c0b87c),
- TOBN(0x4ee2c7c4, 0x9caa30bc), TOBN(0x767238b7, 0x97fbff4e),
- TOBN(0xebc73921, 0x501b5d92), TOBN(0x3279e3df, 0xc2a37737),
- TOBN(0x9fc12bc8, 0x6d197543), TOBN(0xfa94dc6f, 0x0a40db4e),
- TOBN(0x7392b41a, 0x530ccbbd), TOBN(0x87c82146, 0xea823525),
- TOBN(0xa52f984c, 0x05d98d0c), TOBN(0x2ae57d73, 0x5ef6974c),
- TOBN(0x9377f7bf, 0x3042a6dd), TOBN(0xb1a007c0, 0x19647a64),
- TOBN(0xfaa9079a, 0x0cca9767), TOBN(0x3d81a25b, 0xf68f72d5),
- TOBN(0x752067f8, 0xff81578e), TOBN(0x78622150, 0x9045447d),
- TOBN(0xc0c22fcf, 0x0505aa6f), TOBN(0x1030f0a6, 0x6bed1c77),
- TOBN(0x31f29f15, 0x1f0bd739), TOBN(0x2d7989c7, 0xe6debe85),
- TOBN(0x5c070e72, 0x8e677e98), TOBN(0x0a817bd3, 0x06e81fd5),
- TOBN(0xc110d830, 0xb0f2ac95), TOBN(0x48d0995a, 0xab20e64e),
- TOBN(0x0f3e00e1, 0x7729cd9a), TOBN(0x2a570c20, 0xdd556946),
- TOBN(0x912dbcfd, 0x4e86214d), TOBN(0x2d014ee2, 0xcf615498),
- TOBN(0x55e2b1e6, 0x3530d76e), TOBN(0xc5135ae4, 0xfd0fd6d1),
- TOBN(0x0066273a, 0xd4f3049f), TOBN(0xbb8e9893, 0xe7087477),
- TOBN(0x2dba1ddb, 0x14c6e5fd), TOBN(0xdba37886, 0x51f57e6c),
- TOBN(0x5aaee0a6, 0x5a72f2cf), TOBN(0x1208bfbf, 0x7bea5642),
- TOBN(0xf5c6aa3b, 0x67872c37), TOBN(0xd726e083, 0x43f93224),
- TOBN(0x1854daa5, 0x061f1658), TOBN(0xc0016df1, 0xdf0cd2b3),
- TOBN(0xc2a3f23e, 0x833d50de), TOBN(0x73b681d2, 0xbbbd3017),
- TOBN(0x2f046dc4, 0x3ac343c0), TOBN(0x9c847e7d, 0x85716421),
- TOBN(0xe1e13c91, 0x0917eed4), TOBN(0x3fc9eebd, 0x63a1b9c6),
- TOBN(0x0f816a72, 0x7fe02299), TOBN(0x6335ccc2, 0x294f3319),
- TOBN(0x3820179f, 0x4745c5be), TOBN(0xe647b782, 0x922f066e),
- TOBN(0xc22e49de, 0x02cafb8a), TOBN(0x299bc2ff, 0xfcc2eccc),
- TOBN(0x9a8feea2, 0x6e0e8282), TOBN(0xa627278b, 0xfe893205),
- TOBN(0xa7e19733, 0x7933e47b), TOBN(0xf4ff6b13, 0x2e766402),
- TOBN(0xa4d8be0a, 0x98440d9f), TOBN(0x658f5c2f, 0x38938808),
- TOBN(0x90b75677, 0xc95b3b3e), TOBN(0xfa044269, 0x3137b6ff),
- TOBN(0x077b039b, 0x43c47c29), TOBN(0xcca95dd3, 0x8a6445b2),
- TOBN(0x0b498ba4, 0x2333fc4c), TOBN(0x274f8e68, 0xf736a1b1),
- TOBN(0x6ca348fd, 0x5f1d4b2e), TOBN(0x24d3be78, 0xa8f10199),
- TOBN(0x8535f858, 0xca14f530), TOBN(0xa6e7f163, 0x5b982e51),
- TOBN(0x847c8512, 0x36e1bf62), TOBN(0xf6a7c58e, 0x03448418),
- TOBN(0x583f3703, 0xf9374ab6), TOBN(0x864f9195, 0x6e564145),
- TOBN(0x33bc3f48, 0x22526d50), TOBN(0x9f323c80, 0x1262a496),
- TOBN(0xaa97a7ae, 0x3f046a9a), TOBN(0x70da183e, 0xdf8a039a),
- TOBN(0x5b68f71c, 0x52aa0ba6), TOBN(0x9be0fe51, 0x21459c2d),
- TOBN(0xc1e17eb6, 0xcbc613e5), TOBN(0x33131d55, 0x497ea61c),
- TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b),
- TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2),
- TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)},
- {TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6),
- TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1),
- TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866),
- TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5),
- TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760),
- TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d),
- TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251),
- TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8),
- TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8),
- TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a),
- TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a),
- TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954),
- TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915),
- TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911),
- TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc),
- TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a),
- TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49),
- TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a),
- TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11),
- TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3),
- TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593),
- TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5),
- TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83),
- TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698),
- TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729),
- TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0),
- TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e),
- TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c),
- TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982),
- TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509),
- TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268),
- TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b),
- TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf),
- TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f),
- TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295),
- TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585),
- TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d),
- TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d),
- TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db),
- TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8),
- TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823),
- TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690),
- TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec),
- TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3),
- TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217),
- TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f),
- TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074),
- TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c),
- TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511),
- TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649),
- TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0),
- TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70),
- TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea),
- TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35),
- TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686),
- TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840),
- TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7),
- TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9),
- TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a),
- TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86),
- TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53),
- TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd),
- TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190),
- TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a),
- TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683),
- TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc),
- TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524),
- TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66),
- TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5),
- TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac),
- TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766),
- TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1),
- TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1),
- TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea),
- TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2),
- TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d),
- TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e),
- TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b),
- TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261),
- TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83),
- TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02),
- TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920),
- TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540),
- TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38),
- TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17),
- TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad),
- TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e),
- TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2),
- TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08),
- TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2),
- TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b),
- TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424),
- TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99),
- TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6),
- TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453),
- TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e),
- TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6),
- TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6),
- TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea),
- TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930),
- TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272),
- TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf),
- TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1),
- TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0),
- TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af),
- TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c),
- TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e),
- TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e),
- TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82),
- TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e),
- TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c),
- TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54),
- TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f),
- TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b),
- TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369),
- TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c),
- TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b),
- TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df),
- TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af),
- TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a),
- TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469),
- TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f),
- TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f),
- TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462),
- TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca),
- TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555),
- TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204),
- TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a),
- TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8),
- TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758),
- TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5),
- TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455),
- TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972),
- TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e),
- TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd),
- TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e),
- TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9),
- TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25),
- TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d),
- TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11),
- TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31),
- TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53),
- TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44),
- TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802),
- TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71),
- TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362),
- TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c),
- TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef),
- TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320),
- TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3),
- TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6),
- TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830),
- TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432),
- TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73),
- TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49),
- TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008),
- TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57),
- TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8),
- TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065),
- TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c),
- TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89),
- TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e),
- TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6),
- TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3),
- TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b),
- TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212),
- TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78),
- TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057),
- TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316),
- TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391),
- TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd),
- TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7),
- TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392),
- TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb),
- TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69),
- TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe),
- TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154),
- TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23),
- TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149),
- TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732),
- TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0),
- TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2),
- TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95),
- TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04),
- TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599),
- TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0),
- TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696),
- TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab),
- TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d),
- TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d),
- TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1),
- TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1),
- TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4),
- TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974),
- TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0),
- TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a),
- TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf),
- TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b),
- TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9),
- TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851),
- TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a),
- TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051),
- TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78),
- TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e),
- TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5),
- TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc),
- TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a),
- TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd),
- TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453),
- TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2),
- TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6),
- TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f),
- TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7),
- TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1),
- TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f),
- TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1),
- TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c),
- TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a),
- TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9),
- TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8),
- TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169),
- TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2),
- TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452),
- TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0),
- TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8),
- TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4),
- TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93),
- TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d),
- TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7),
- TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b),
- TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c),
- TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f),
- TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7),
- TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9),
- TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96),
- TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b),
- TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c),
- TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5),
- TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c),
- TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9),
- TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0),
- TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183),
- TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e),
- TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e),
- TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76),
- TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b),
- TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167),
- TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12),
- TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6),
- TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a),
- TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963),
- TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92),
- TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235),
- TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a),
- TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d),
- TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494)},
- {TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65),
- TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860),
- TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f),
- TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50),
- TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d),
- TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6),
- TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d),
- TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee),
- TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5),
- TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca),
- TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2),
- TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf),
- TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867),
- TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6),
- TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65),
- TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe),
- TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976),
- TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3),
- TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837),
- TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1),
- TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4),
- TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6),
- TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae),
- TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4),
- TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624),
- TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c),
- TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6),
- TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f),
- TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f),
- TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d),
- TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a),
- TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011),
- TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0),
- TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854),
- TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459),
- TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3),
- TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f),
- TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c),
- TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941),
- TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe),
- TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6),
- TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c),
- TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919),
- TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce),
- TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860),
- TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa),
- TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073),
- TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd),
- TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2),
- TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a),
- TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91),
- TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615),
- TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270),
- TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f),
- TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664),
- TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d),
- TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e),
- TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a),
- TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77),
- TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32),
- TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e),
- TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c),
- TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e),
- TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517),
- TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be),
- TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664),
- TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a),
- TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700),
- TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9),
- TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152),
- TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a),
- TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb),
- TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b),
- TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db),
- TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85),
- TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad),
- TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab),
- TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662),
- TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f),
- TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02),
- TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22),
- TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e),
- TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5),
- TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70),
- TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8),
- TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993),
- TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0),
- TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c),
- TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c),
- TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682),
- TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85),
- TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb),
- TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b),
- TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef),
- TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1),
- TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59),
- TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26),
- TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e),
- TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296),
- TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb),
- TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5),
- TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d),
- TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47),
- TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87),
- TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75),
- TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130),
- TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769),
- TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5),
- TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb),
- TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5),
- TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c),
- TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed),
- TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496),
- TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7),
- TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936),
- TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e),
- TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2),
- TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d),
- TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670),
- TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade),
- TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f),
- TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252),
- TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336),
- TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597),
- TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf),
- TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11),
- TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3),
- TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7),
- TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c),
- TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4),
- TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e),
- TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075),
- TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05),
- TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493),
- TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a),
- TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6),
- TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a),
- TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1),
- TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d),
- TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc),
- TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15),
- TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77),
- TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11),
- TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9),
- TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef),
- TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f),
- TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759),
- TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0),
- TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf),
- TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee),
- TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455),
- TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408),
- TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e),
- TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954),
- TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec),
- TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626),
- TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35),
- TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c),
- TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c),
- TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e),
- TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d),
- TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80),
- TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849),
- TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11),
- TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d),
- TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47),
- TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1),
- TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4),
- TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448),
- TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9),
- TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286),
- TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f),
- TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4),
- TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521),
- TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c),
- TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4),
- TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433),
- TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8),
- TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d),
- TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092),
- TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2),
- TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7),
- TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524),
- TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71),
- TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8),
- TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816),
- TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8),
- TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c),
- TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b),
- TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b),
- TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a),
- TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063),
- TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89),
- TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb),
- TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084),
- TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef),
- TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4),
- TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab),
- TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca),
- TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0),
- TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c),
- TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675),
- TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c),
- TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014),
- TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2),
- TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52),
- TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f),
- TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964),
- TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a),
- TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed),
- TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e),
- TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1),
- TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6),
- TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c),
- TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681),
- TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f),
- TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789),
- TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885),
- TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895),
- TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e),
- TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52),
- TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8),
- TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939),
- TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6),
- TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba),
- TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04),
- TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741),
- TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb),
- TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7),
- TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4),
- TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe),
- TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b),
- TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a),
- TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480),
- TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4),
- TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c),
- TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5),
- TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08),
- TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74),
- TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4),
- TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb),
- TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a),
- TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5),
- TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816),
- TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5),
- TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5),
- TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89),
- TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b),
- TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de),
- TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d),
- TOBN(0x8a0bc66e, 0x7550fee