From 46d95551ff1852aa2e13a875b25d817a7f044a1c Mon Sep 17 00:00:00 2001
From: knaccc <hello@monero.how>
Date: Wed, 13 Sep 2017 23:27:46 +0100
Subject: [PATCH] RuffCT first commit

---
 source-code/RuffCT-java/c/crypto-ops-data.c   |  872 +++++
 source-code/RuffCT-java/c/crypto-ops.c        | 2923 +++++++++++++++++
 source-code/RuffCT-java/c/crypto-ops.h        |  153 +
 .../c/how_monero_hodl_jni_CryptoOpsUtil.c     |   87 +
 .../c/how_monero_hodl_jni_CryptoOpsUtil.h     |   29 +
 source-code/RuffCT-java/c/warnings.h          |   30 +
 source-code/RuffCT-java/doc/readme.txt        |   19 +
 .../RuffCT-java/lib/commons-codec-1.10.jar    |  Bin 0 -> 284184 bytes
 .../RuffCT-java/lib/commons-pool2-2.4.2.jar   |  Bin 0 -> 111969 bytes
 .../src/com/joemelsha/crypto/hash/Keccak.java |  449 +++
 .../how/monero/hodl/crypto/CryptoUtil.java    |  155 +
 .../how/monero/hodl/crypto/HashToPoint.java   |  136 +
 .../src/how/monero/hodl/crypto/PointPair.java |   37 +
 .../src/how/monero/hodl/crypto/Scalar.java    |  100 +
 .../how/monero/hodl/crypto/ScalarPair.java    |   12 +
 .../hodl/cursor/BootleRuffingCursor.java      |   38 +
 .../src/how/monero/hodl/cursor/Cursor.java    |   75 +
 .../how/monero/hodl/jni/CryptoOpsUtil.java    |   11 +
 .../hodl/ringSignature/BootleRuffing.java     |  560 ++++
 .../hodl/ringSignature/Multisignature.java    |  114 +
 .../hodl/ringSignature/SpendParams.java       |   19 +
 .../src/how/monero/hodl/util/ByteUtil.java    |   83 +
 .../monero/hodl/util/ExceptionAdapter.java    |    8 +
 .../src/how/monero/hodl/util/VarInt.java      |   45 +
 .../src/org/nem/core/crypto/Curve.java        |   30 +
 .../nem/core/crypto/ed25519/Ed25519Curve.java |   41 +
 .../ed25519/arithmetic/CoordinateSystem.java  |   37 +
 .../Ed25519EncodedFieldElement.java           | 1005 ++++++
 .../Ed25519EncodedGroupElement.java           |  129 +
 .../ed25519/arithmetic/Ed25519Field.java      |   43 +
 .../arithmetic/Ed25519FieldElement.java       | 1026 ++++++
 .../ed25519/arithmetic/Ed25519Group.java      |   36 +
 .../arithmetic/Ed25519GroupElement.java       | 1012 ++++++
 .../nem/core/utils/AbstractTwoLevelMap.java   |   74 +
 .../src/org/nem/core/utils/ArrayUtils.java    |  156 +
 .../src/org/nem/core/utils/Base32Encoder.java |   37 +
 .../src/org/nem/core/utils/Base64Encoder.java |   37 +
 .../src/org/nem/core/utils/ByteUtils.java     |  100 +
 .../src/org/nem/core/utils/CircularStack.java |   88 +
 .../org/nem/core/utils/ExceptionUtils.java    |  102 +
 .../src/org/nem/core/utils/FormatUtils.java   |   63 +
 .../src/org/nem/core/utils/HexEncoder.java    |   57 +
 .../src/org/nem/core/utils/HttpStatus.java    |  494 +++
 .../src/org/nem/core/utils/LockFile.java      |   82 +
 .../src/org/nem/core/utils/MustBe.java        |  118 +
 .../src/org/nem/core/utils/SetOnce.java       |   42 +
 .../src/org/nem/core/utils/StringEncoder.java |   31 +
 .../src/org/nem/core/utils/StringUtils.java   |   50 +
 .../monero/hodl/BootleRuffingBenchmarks.java  |  126 +
 .../monero/hodl/BootleRuffingSpendTest.java   |  168 +
 .../how/monero/hodl/Prove1Valid1Test1.java    |   29 +
 .../how/monero/hodl/Prove2Valid2Test1.java    |   37 +
 .../how/monero/hodl/Prove2Valid2Test1a.java   |   42 +
 .../how/monero/hodl/Prove2Valid2Test1b.java   |   61 +
 54 files changed, 11308 insertions(+)
 create mode 100644 source-code/RuffCT-java/c/crypto-ops-data.c
 create mode 100644 source-code/RuffCT-java/c/crypto-ops.c
 create mode 100644 source-code/RuffCT-java/c/crypto-ops.h
 create mode 100644 source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.c
 create mode 100644 source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.h
 create mode 100644 source-code/RuffCT-java/c/warnings.h
 create mode 100644 source-code/RuffCT-java/doc/readme.txt
 create mode 100644 source-code/RuffCT-java/lib/commons-codec-1.10.jar
 create mode 100644 source-code/RuffCT-java/lib/commons-pool2-2.4.2.jar
 create mode 100755 source-code/RuffCT-java/src/com/joemelsha/crypto/hash/Keccak.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/crypto/CryptoUtil.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/crypto/HashToPoint.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/crypto/PointPair.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/crypto/Scalar.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/crypto/ScalarPair.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/cursor/BootleRuffingCursor.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/cursor/Cursor.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/jni/CryptoOpsUtil.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/ringSignature/BootleRuffing.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/ringSignature/Multisignature.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/ringSignature/SpendParams.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/util/ByteUtil.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/util/ExceptionAdapter.java
 create mode 100644 source-code/RuffCT-java/src/how/monero/hodl/util/VarInt.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/Curve.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/Ed25519Curve.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/CoordinateSystem.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedFieldElement.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedGroupElement.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Field.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519FieldElement.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Group.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519GroupElement.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/AbstractTwoLevelMap.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/ArrayUtils.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/Base32Encoder.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/Base64Encoder.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/ByteUtils.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/CircularStack.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/ExceptionUtils.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/FormatUtils.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/HexEncoder.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/HttpStatus.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/LockFile.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/MustBe.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/SetOnce.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/StringEncoder.java
 create mode 100755 source-code/RuffCT-java/src/org/nem/core/utils/StringUtils.java
 create mode 100644 source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingBenchmarks.java
 create mode 100644 source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingSpendTest.java
 create mode 100644 source-code/RuffCT-java/src/test/how/monero/hodl/Prove1Valid1Test1.java
 create mode 100644 source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1.java
 create mode 100644 source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1a.java
 create mode 100644 source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1b.java

diff --git a/source-code/RuffCT-java/c/crypto-ops-data.c b/source-code/RuffCT-java/c/crypto-ops-data.c
new file mode 100644
index 0000000..246808a
--- /dev/null
+++ b/source-code/RuffCT-java/c/crypto-ops-data.c
@@ -0,0 +1,872 @@
+// Copyright (c) 2014-2017, The Monero Project
+//
+// 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. Neither the name of the copyright holder nor the names of its contributors may be
+//    used to endorse or promote products derived from this software without specific
+//    prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR 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.
+//
+// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+
+#include <stdint.h>
+
+#include "crypto-ops.h"
+
+/* sqrt(x) is such an integer y that 0 <= y <= p - 1, y % 2 = 0, and y^2 = x (mod p). */
+/* d = -121665 / 121666 */
+const fe fe_d = {-10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116}; /* d */
+const fe fe_sqrtm1 = {-32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482}; /* sqrt(-1) */
+const fe fe_d2 = {-21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199}; /* 2 * d */
+
+/* base[i][j] = (j+1)*256^i*B */
+const ge_precomp ge_base[32][8] = {
+  {
+    {{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605},
+     {-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378},
+     {-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}},
+    {{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303},
+     {-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081},
+     {26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}},
+    {{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024},
+     {16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574},
+     {30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}},
+    {{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540},
+     {23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397},
+     {7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}},
+    {{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380},
+     {4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306},
+     {19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}},
+    {{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777},
+     {-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737},
+     {-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}},
+    {{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766},
+     {-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701},
+     {28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}},
+    {{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726},
+     {-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955},
+     {27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}}
+  }, {
+    {{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171},
+     {27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510},
+     {17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}},
+    {{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639},
+     {29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963},
+     {5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}},
+    {{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568},
+     {12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335},
+     {25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}},
+    {{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007},
+     {-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772},
+     {-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}},
+    {{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567},
+     {13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686},
+     {21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}},
+    {{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887},
+     {-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954},
+     {-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}},
+    {{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833},
+     {-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532},
+     {-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}},
+    {{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268},
+     {33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214},
+     {1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}}
+  }, {
+    {{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800},
+     {4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645},
+     {-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}},
+    {{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933},
+     {-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182},
+     {-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}},
+    {{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991},
+     {20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880},
+     {9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}},
+    {{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295},
+     {19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788},
+     {8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}},
+    {{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026},
+     {11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347},
+     {-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}},
+    {{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395},
+     {-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278},
+     {1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}},
+    {{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995},
+     {-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596},
+     {-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}},
+    {{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060},
+     {11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608},
+     {-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}}
+  }, {
+    {{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389},
+     {-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016},
+     {-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}},
+    {{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505},
+     {14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553},
+     {-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}},
+    {{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220},
+     {12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631},
+     {-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}},
+    {{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556},
+     {14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749},
+     {236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}},
+    {{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391},
+     {5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253},
+     {20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}},
+    {{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958},
+     {-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082},
+     {-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}},
+    {{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521},
+     {-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807},
+     {23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}},
+    {{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134},
+     {-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455},
+     {27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}}
+  }, {
+    {{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069},
+     {-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746},
+     {24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}},
+    {{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837},
+     {8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906},
+     {-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}},
+    {{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817},
+     {10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098},
+     {10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}},
+    {{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504},
+     {-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727},
+     {28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}},
+    {{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003},
+     {-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605},
+     {-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}},
+    {{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701},
+     {-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683},
+     {29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}},
+    {{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563},
+     {-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260},
+     {-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}},
+    {{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672},
+     {23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686},
+     {-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}}
+  }, {
+    {{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182},
+     {-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277},
+     {14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}},
+    {{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474},
+     {-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539},
+     {-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}},
+    {{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970},
+     {19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756},
+     {-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}},
+    {{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683},
+     {-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655},
+     {-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}},
+    {{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125},
+     {-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839},
+     {-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}},
+    {{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294},
+     {-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899},
+     {-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}},
+    {{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294},
+     {-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949},
+     {-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}},
+    {{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420},
+     {-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940},
+     {29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}}
+  }, {
+    {{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567},
+     {20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127},
+     {-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}},
+    {{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887},
+     {22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964},
+     {16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}},
+    {{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244},
+     {24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999},
+     {-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}},
+    {{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274},
+     {-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236},
+     {-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}},
+    {{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761},
+     {-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884},
+     {-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}},
+    {{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638},
+     {-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490},
+     {-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}},
+    {{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736},
+     {10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124},
+     {-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}},
+    {{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029},
+     {6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048},
+     {28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}}
+  }, {
+    {{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593},
+     {26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071},
+     {-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}},
+    {{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687},
+     {-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441},
+     {-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}},
+    {{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460},
+     {-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007},
+     {-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}},
+    {{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005},
+     {-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674},
+     {4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}},
+    {{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590},
+     {-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957},
+     {-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}},
+    {{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740},
+     {-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122},
+     {-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}},
+    {{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885},
+     {26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140},
+     {19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}},
+    {{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155},
+     {19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260},
+     {19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}}
+  }, {
+    {{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677},
+     {32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815},
+     {22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}},
+    {{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203},
+     {-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208},
+     {1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}},
+    {{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850},
+     {-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389},
+     {-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}},
+    {{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689},
+     {14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880},
+     {5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}},
+    {{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632},
+     {-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412},
+     {20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}},
+    {{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038},
+     {-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232},
+     {-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}},
+    {{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856},
+     {23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738},
+     {15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}},
+    {{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718},
+     {-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697},
+     {-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}}
+  }, {
+    {{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912},
+     {-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358},
+     {3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}},
+    {{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307},
+     {-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977},
+     {-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}},
+    {{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644},
+     {-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616},
+     {-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}},
+    {{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099},
+     {29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341},
+     {-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}},
+    {{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646},
+     {31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425},
+     {-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}},
+    {{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743},
+     {-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822},
+     {-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}},
+    {{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985},
+     {9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702},
+     {-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}},
+    {{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293},
+     {27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100},
+     {19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}}
+  }, {
+    {{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186},
+     {2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610},
+     {-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}},
+    {{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220},
+     {915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025},
+     {32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}},
+    {{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992},
+     {-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027},
+     {21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}},
+    {{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901},
+     {31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952},
+     {19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}},
+    {{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390},
+     {32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730},
+     {2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}},
+    {{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180},
+     {-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272},
+     {-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}},
+    {{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970},
+     {-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772},
+     {-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}},
+    {{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750},
+     {20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373},
+     {32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}}
+  }, {
+    {{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144},
+     {-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195},
+     {5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}},
+    {{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684},
+     {-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518},
+     {-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}},
+    {{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793},
+     {-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794},
+     {580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}},
+    {{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921},
+     {13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518},
+     {2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}},
+    {{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278},
+     {-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024},
+     {4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}},
+    {{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783},
+     {27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717},
+     {6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}},
+    {{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333},
+     {16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048},
+     {22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}},
+    {{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760},
+     {-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757},
+     {-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}}
+  }, {
+    {{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468},
+     {3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184},
+     {10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}},
+    {{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066},
+     {24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882},
+     {13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}},
+    {{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101},
+     {29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279},
+     {-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}},
+    {{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709},
+     {20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714},
+     {-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}},
+    {{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464},
+     {12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847},
+     {13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}},
+    {{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414},
+     {-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158},
+     {17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}},
+    {{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415},
+     {-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459},
+     {-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}},
+    {{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412},
+     {-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743},
+     {-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}}
+  }, {
+    {{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022},
+     {18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429},
+     {-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}},
+    {{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861},
+     {10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000},
+     {-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}},
+    {{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815},
+     {29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642},
+     {10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}},
+    {{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574},
+     {-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742},
+     {-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}},
+    {{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020},
+     {-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772},
+     {3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}},
+    {{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953},
+     {-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218},
+     {-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}},
+    {{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073},
+     {-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325},
+     {-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}},
+    {{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870},
+     {-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863},
+     {-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}}
+  }, {
+    {{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267},
+     {-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663},
+     {22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}},
+    {{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673},
+     {15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943},
+     {15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}},
+    {{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238},
+     {11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064},
+     {14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}},
+    {{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052},
+     {-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904},
+     {29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}},
+    {{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979},
+     {-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841},
+     {10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}},
+    {{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324},
+     {-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940},
+     {10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}},
+    {{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184},
+     {14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114},
+     {30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}},
+    {{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784},
+     {-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091},
+     {-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}}
+  }, {
+    {{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208},
+     {10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864},
+     {17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}},
+    {{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233},
+     {26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212},
+     {-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}},
+    {{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068},
+     {9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397},
+     {-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}},
+    {{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889},
+     {32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038},
+     {14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}},
+    {{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875},
+     {-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905},
+     {-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}},
+    {{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818},
+     {27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714},
+     {10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}},
+    {{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931},
+     {-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024},
+     {-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}},
+    {{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204},
+     {20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817},
+     {27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}}
+  }, {
+    {{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504},
+     {-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768},
+     {-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}},
+    {{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790},
+     {1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438},
+     {-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}},
+    {{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971},
+     {31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905},
+     {29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}},
+    {{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409},
+     {6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499},
+     {-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}},
+    {{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664},
+     {-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324},
+     {-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}},
+    {{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990},
+     {-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914},
+     {-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}},
+    {{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257},
+     {-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433},
+     {-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}},
+    {{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045},
+     {11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093},
+     {-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}}
+  }, {
+    {{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191},
+     {-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507},
+     {-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}},
+    {{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018},
+     {-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109},
+     {-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}},
+    {{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528},
+     {8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625},
+     {-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}},
+    {{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033},
+     {27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866},
+     {21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}},
+    {{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075},
+     {26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347},
+     {-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}},
+    {{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165},
+     {-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588},
+     {-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}},
+    {{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017},
+     {-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883},
+     {21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}},
+    {{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043},
+     {29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663},
+     {-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}}
+  }, {
+    {{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860},
+     {2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466},
+     {-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}},
+    {{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997},
+     {-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295},
+     {-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}},
+    {{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385},
+     {18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109},
+     {2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}},
+    {{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424},
+     {-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185},
+     {7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}},
+    {{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325},
+     {10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593},
+     {696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}},
+    {{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644},
+     {17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801},
+     {26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}},
+    {{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884},
+     {-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577},
+     {-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}},
+    {{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473},
+     {-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644},
+     {-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}}
+  }, {
+    {{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599},
+     {-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768},
+     {-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}},
+    {{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328},
+     {-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369},
+     {20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}},
+    {{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815},
+     {-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025},
+     {-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}},
+    {{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448},
+     {6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981},
+     {30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}},
+    {{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501},
+     {17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073},
+     {-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}},
+    {{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845},
+     {-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211},
+     {18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}},
+    {{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096},
+     {33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803},
+     {-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}},
+    {{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965},
+     {-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505},
+     {18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}}
+  }, {
+    {{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782},
+     {5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900},
+     {-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}},
+    {{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208},
+     {8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232},
+     {17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}},
+    {{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271},
+     {-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326},
+     {-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}},
+    {{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300},
+     {8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570},
+     {15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}},
+    {{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994},
+     {-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913},
+     {31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}},
+    {{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730},
+     {842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096},
+     {-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}},
+    {{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411},
+     {-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905},
+     {-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}},
+    {{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870},
+     {-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498},
+     {12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}}
+  }, {
+    {{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677},
+     {10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647},
+     {-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}},
+    {{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468},
+     {21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375},
+     {-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}},
+    {{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725},
+     {-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612},
+     {-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}},
+    {{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944},
+     {30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928},
+     {9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}},
+    {{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139},
+     {-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963},
+     {-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}},
+    {{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734},
+     {-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680},
+     {-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}},
+    {{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931},
+     {-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654},
+     {22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}},
+    {{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180},
+     {-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684},
+     {-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}}
+  }, {
+    {{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501},
+     {-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413},
+     {6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}},
+    {{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874},
+     {22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962},
+     {-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}},
+    {{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152},
+     {9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063},
+     {7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}},
+    {{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146},
+     {-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183},
+     {-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}},
+    {{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421},
+     {-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622},
+     {-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}},
+    {{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663},
+     {31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753},
+     {4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}},
+    {{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862},
+     {-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118},
+     {26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}},
+    {{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380},
+     {16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824},
+     {28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}}
+  }, {
+    {{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438},
+     {-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584},
+     {-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}},
+    {{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471},
+     {18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610},
+     {19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}},
+    {{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650},
+     {14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369},
+     {19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}},
+    {{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462},
+     {-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793},
+     {-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}},
+    {{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226},
+     {18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019},
+     {-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}},
+    {{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171},
+     {-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132},
+     {-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}},
+    {{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181},
+     {-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210},
+     {-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}},
+    {{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935},
+     {24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105},
+     {-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}}
+  }, {
+    {{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852},
+     {5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581},
+     {-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}},
+    {{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844},
+     {10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025},
+     {27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}},
+    {{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068},
+     {4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192},
+     {-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}},
+    {{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259},
+     {-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426},
+     {-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}},
+    {{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305},
+     {13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832},
+     {28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}},
+    {{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011},
+     {24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447},
+     {17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}},
+    {{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245},
+     {-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859},
+     {28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}},
+    {{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707},
+     {10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848},
+     {-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}}
+  }, {
+    {{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391},
+     {15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215},
+     {-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}},
+    {{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713},
+     {21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849},
+     {-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}},
+    {{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940},
+     {-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031},
+     {-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}},
+    {{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243},
+     {-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116},
+     {-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}},
+    {{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509},
+     {-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883},
+     {15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}},
+    {{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660},
+     {4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273},
+     {-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}},
+    {{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560},
+     {-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135},
+     {2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}},
+    {{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739},
+     {18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756},
+     {-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}}
+  }, {
+    {{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347},
+     {-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028},
+     {21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}},
+    {{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799},
+     {-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609},
+     {-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}},
+    {{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989},
+     {-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523},
+     {4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}},
+    {{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045},
+     {19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377},
+     {24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}},
+    {{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016},
+     {510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426},
+     {18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}},
+    {{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396},
+     {9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080},
+     {12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}},
+    {{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275},
+     {11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074},
+     {20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}},
+    {{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717},
+     {-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101},
+     {24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}}
+  }, {
+    {{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632},
+     {-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415},
+     {-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}},
+    {{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876},
+     {22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625},
+     {-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}},
+    {{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164},
+     {26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595},
+     {-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}},
+    {{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858},
+     {15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193},
+     {8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}},
+    {{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942},
+     {-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635},
+     {21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}},
+    {{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935},
+     {-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415},
+     {-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}},
+    {{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018},
+     {4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778},
+     {366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}},
+    {{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385},
+     {18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503},
+     {476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}}
+  }, {
+    {{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056},
+     {-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838},
+     {24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}},
+    {{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691},
+     {-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118},
+     {-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}},
+    {{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269},
+     {-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904},
+     {-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}},
+    {{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193},
+     {-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910},
+     {-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}},
+    {{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667},
+     {25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481},
+     {-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}},
+    {{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640},
+     {-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278},
+     {-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}},
+    {{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272},
+     {17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012},
+     {-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}},
+    {{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046},
+     {13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345},
+     {-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}}
+  }, {
+    {{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937},
+     {31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636},
+     {-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}},
+    {{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429},
+     {-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576},
+     {31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}},
+    {{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490},
+     {-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104},
+     {33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}},
+    {{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275},
+     {-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511},
+     {22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}},
+    {{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439},
+     {23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939},
+     {-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}},
+    {{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310},
+     {3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608},
+     {-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}},
+    {{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101},
+     {21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418},
+     {18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}},
+    {{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356},
+     {9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996},
+     {-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}}
+  }, {
+    {{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728},
+     {-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658},
+     {-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}},
+    {{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001},
+     {-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766},
+     {18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}},
+    {{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458},
+     {-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628},
+     {-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}},
+    {{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062},
+     {25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616},
+     {31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}},
+    {{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383},
+     {-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814},
+     {-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}},
+    {{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417},
+     {2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222},
+     {33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}},
+    {{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597},
+     {23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970},
+     {1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}},
+    {{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647},
+     {13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511},
+     {-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}}
+  }, {
+    {{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834},
+     {-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461},
+     {29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}},
+    {{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516},
+     {-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547},
+     {-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}},
+    {{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038},
+     {-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741},
+     {16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}},
+    {{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747},
+     {-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323},
+     {31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}},
+    {{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373},
+     {15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228},
+     {-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}},
+    {{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399},
+     {11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831},
+     {-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}},
+    {{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313},
+     {-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958},
+     {-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}},
+    {{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743},
+     {29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684},
+     {-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}}
+  }
+};
+
+const ge_precomp ge_Bi[8] = {
+  {{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605},
+   {-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378},
+   {-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}}, {{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024},
+   {16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574},
+   {30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}}, {{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380},
+   {4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306},
+   {19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}}, {{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766},
+   {-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701},
+   {28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}}, {{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877},
+   {-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951},
+   {4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}}, {{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436},
+   {25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918},
+   {23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}}, {{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800},
+   {-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305},
+   {-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}}, {{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876},
+   {-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619},
+   {-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}}
+};
+
+/* A = 2 * (1 - d) / (1 + d) = 486662 */
+const fe fe_ma2 = {-12721188, -3529, 0, 0, 0, 0, 0, 0, 0, 0}; /* -A^2 */
+const fe fe_ma = {-486662, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* -A */
+const fe fe_fffb1 = {-31702527, -2466483, -26106795, -12203692, -12169197, -321052, 14850977, -10296299, -16929438, -407568}; /* sqrt(-2 * A * (A + 2)) */
+const fe fe_fffb2 = {8166131, -6741800, -17040804, 3154616, 21461005, 1466302, -30876704, -6368709, 10503587, -13363080}; /* sqrt(2 * A * (A + 2)) */
+const fe fe_fffb3 = {-13620103, 14639558, 4532995, 7679154, 16815101, -15883539, -22863840, -14813421, 13716513, -6477756}; /* sqrt(-sqrt(-1) * A * (A + 2)) */
+const fe fe_fffb4 = {-21786234, -12173074, 21573800, 4524538, -4645904, 16204591, 8012863, -8444712, 3212926, 6885324}; /* sqrt(sqrt(-1) * A * (A + 2)) */
diff --git a/source-code/RuffCT-java/c/crypto-ops.c b/source-code/RuffCT-java/c/crypto-ops.c
new file mode 100644
index 0000000..e104825
--- /dev/null
+++ b/source-code/RuffCT-java/c/crypto-ops.c
@@ -0,0 +1,2923 @@
+// Copyright (c) 2014-2017, The Monero Project
+//
+// 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. Neither the name of the copyright holder nor the names of its contributors may be
+//    used to endorse or promote products derived from this software without specific
+//    prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR 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.
+//
+// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+
+#include <assert.h>
+#include <stdint.h>
+
+/*#include "warnings.h"*/
+#include "crypto-ops.h"
+
+// DISABLE_VS_WARNINGS(4146 4244)
+
+/* Predeclarations */
+
+static void fe_mul(fe, const fe, const fe);
+static void fe_sq(fe, const fe);
+static void ge_madd(ge_p1p1 *, const ge_p3 *, const ge_precomp *);
+static void ge_msub(ge_p1p1 *, const ge_p3 *, const ge_precomp *);
+static void ge_p2_0(ge_p2 *);
+static void ge_p3_dbl(ge_p1p1 *, const ge_p3 *);
+static void fe_divpowm1(fe, const fe, const fe);
+
+/* Common functions */
+
+uint64_t load_3(const unsigned char *in) {
+  uint64_t result;
+  result = (uint64_t) in[0];
+  result |= ((uint64_t) in[1]) << 8;
+  result |= ((uint64_t) in[2]) << 16;
+  return result;
+}
+
+uint64_t load_4(const unsigned char *in)
+{
+  uint64_t result;
+  result = (uint64_t) in[0];
+  result |= ((uint64_t) in[1]) << 8;
+  result |= ((uint64_t) in[2]) << 16;
+  result |= ((uint64_t) in[3]) << 24;
+  return result;
+}
+
+/* From fe_0.c */
+
+/*
+h = 0
+*/
+
+static void fe_0(fe h) {
+  h[0] = 0;
+  h[1] = 0;
+  h[2] = 0;
+  h[3] = 0;
+  h[4] = 0;
+  h[5] = 0;
+  h[6] = 0;
+  h[7] = 0;
+  h[8] = 0;
+  h[9] = 0;
+}
+
+/* From fe_1.c */
+
+/*
+h = 1
+*/
+
+static void fe_1(fe h) {
+  h[0] = 1;
+  h[1] = 0;
+  h[2] = 0;
+  h[3] = 0;
+  h[4] = 0;
+  h[5] = 0;
+  h[6] = 0;
+  h[7] = 0;
+  h[8] = 0;
+  h[9] = 0;
+}
+
+/* From fe_add.c */
+
+/*
+h = f + g
+Can overlap h with f or g.
+
+Preconditions:
+   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+   |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+
+Postconditions:
+   |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+void fe_add(fe h, const fe f, const fe g) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t g0 = g[0];
+  int32_t g1 = g[1];
+  int32_t g2 = g[2];
+  int32_t g3 = g[3];
+  int32_t g4 = g[4];
+  int32_t g5 = g[5];
+  int32_t g6 = g[6];
+  int32_t g7 = g[7];
+  int32_t g8 = g[8];
+  int32_t g9 = g[9];
+  int32_t h0 = f0 + g0;
+  int32_t h1 = f1 + g1;
+  int32_t h2 = f2 + g2;
+  int32_t h3 = f3 + g3;
+  int32_t h4 = f4 + g4;
+  int32_t h5 = f5 + g5;
+  int32_t h6 = f6 + g6;
+  int32_t h7 = f7 + g7;
+  int32_t h8 = f8 + g8;
+  int32_t h9 = f9 + g9;
+  h[0] = h0;
+  h[1] = h1;
+  h[2] = h2;
+  h[3] = h3;
+  h[4] = h4;
+  h[5] = h5;
+  h[6] = h6;
+  h[7] = h7;
+  h[8] = h8;
+  h[9] = h9;
+}
+
+/* From fe_cmov.c */
+
+/*
+Replace (f,g) with (g,g) if b == 1;
+replace (f,g) with (f,g) if b == 0.
+
+Preconditions: b in {0,1}.
+*/
+
+static void fe_cmov(fe f, const fe g, unsigned int b) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t g0 = g[0];
+  int32_t g1 = g[1];
+  int32_t g2 = g[2];
+  int32_t g3 = g[3];
+  int32_t g4 = g[4];
+  int32_t g5 = g[5];
+  int32_t g6 = g[6];
+  int32_t g7 = g[7];
+  int32_t g8 = g[8];
+  int32_t g9 = g[9];
+  int32_t x0 = f0 ^ g0;
+  int32_t x1 = f1 ^ g1;
+  int32_t x2 = f2 ^ g2;
+  int32_t x3 = f3 ^ g3;
+  int32_t x4 = f4 ^ g4;
+  int32_t x5 = f5 ^ g5;
+  int32_t x6 = f6 ^ g6;
+  int32_t x7 = f7 ^ g7;
+  int32_t x8 = f8 ^ g8;
+  int32_t x9 = f9 ^ g9;
+  assert((((b - 1) & ~b) | ((b - 2) & ~(b - 1))) == (unsigned int) -1);
+  b = -b;
+  x0 &= b;
+  x1 &= b;
+  x2 &= b;
+  x3 &= b;
+  x4 &= b;
+  x5 &= b;
+  x6 &= b;
+  x7 &= b;
+  x8 &= b;
+  x9 &= b;
+  f[0] = f0 ^ x0;
+  f[1] = f1 ^ x1;
+  f[2] = f2 ^ x2;
+  f[3] = f3 ^ x3;
+  f[4] = f4 ^ x4;
+  f[5] = f5 ^ x5;
+  f[6] = f6 ^ x6;
+  f[7] = f7 ^ x7;
+  f[8] = f8 ^ x8;
+  f[9] = f9 ^ x9;
+}
+
+/* From fe_copy.c */
+
+/*
+h = f
+*/
+
+static void fe_copy(fe h, const fe f) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  h[0] = f0;
+  h[1] = f1;
+  h[2] = f2;
+  h[3] = f3;
+  h[4] = f4;
+  h[5] = f5;
+  h[6] = f6;
+  h[7] = f7;
+  h[8] = f8;
+  h[9] = f9;
+}
+
+/* From fe_invert.c */
+
+void fe_invert(fe out, const fe z) {
+  fe t0;
+  fe t1;
+  fe t2;
+  fe t3;
+  int i;
+
+  fe_sq(t0, z);
+  fe_sq(t1, t0);
+  fe_sq(t1, t1);
+  fe_mul(t1, z, t1);
+  fe_mul(t0, t0, t1);
+  fe_sq(t2, t0);
+  fe_mul(t1, t1, t2);
+  fe_sq(t2, t1);
+  for (i = 0; i < 4; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t1, t2, t1);
+  fe_sq(t2, t1);
+  for (i = 0; i < 9; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t2, t2, t1);
+  fe_sq(t3, t2);
+  for (i = 0; i < 19; ++i) {
+    fe_sq(t3, t3);
+  }
+  fe_mul(t2, t3, t2);
+  fe_sq(t2, t2);
+  for (i = 0; i < 9; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t1, t2, t1);
+  fe_sq(t2, t1);
+  for (i = 0; i < 49; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t2, t2, t1);
+  fe_sq(t3, t2);
+  for (i = 0; i < 99; ++i) {
+    fe_sq(t3, t3);
+  }
+  fe_mul(t2, t3, t2);
+  fe_sq(t2, t2);
+  for (i = 0; i < 49; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t1, t2, t1);
+  fe_sq(t1, t1);
+  for (i = 0; i < 4; ++i) {
+    fe_sq(t1, t1);
+  }
+  fe_mul(out, t1, t0);
+
+  return;
+}
+
+/* From fe_isnegative.c */
+
+/*
+return 1 if f is in {1,3,5,...,q-2}
+return 0 if f is in {0,2,4,...,q-1}
+
+Preconditions:
+   |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+static int fe_isnegative(const fe f) {
+  unsigned char s[32];
+  fe_tobytes(s, f);
+  return s[0] & 1;
+}
+
+/* From fe_isnonzero.c, modified */
+
+static int fe_isnonzero(const fe f) {
+  unsigned char s[32];
+  fe_tobytes(s, f);
+  return (((int) (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] |
+    s[9] | s[10] | s[11] | s[12] | s[13] | s[14] | s[15] | s[16] | s[17] |
+    s[18] | s[19] | s[20] | s[21] | s[22] | s[23] | s[24] | s[25] | s[26] |
+    s[27] | s[28] | s[29] | s[30] | s[31]) - 1) >> 8) + 1;
+}
+
+/* From fe_mul.c */
+
+/*
+h = f * g
+Can overlap h with f or g.
+
+Preconditions:
+   |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+   |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+
+Postconditions:
+   |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+*/
+
+/*
+Notes on implementation strategy:
+
+Using schoolbook multiplication.
+Karatsuba would save a little in some cost models.
+
+Most multiplications by 2 and 19 are 32-bit precomputations;
+cheaper than 64-bit postcomputations.
+
+There is one remaining multiplication by 19 in the carry chain;
+one *19 precomputation can be merged into this,
+but the resulting data flow is considerably less clean.
+
+There are 12 carries below.
+10 of them are 2-way parallelizable and vectorizable.
+Can get away with 11 carries, but then data flow is much deeper.
+
+With tighter constraints on inputs can squeeze carries into int32.
+*/
+
+static void fe_mul(fe h, const fe f, const fe g) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t g0 = g[0];
+  int32_t g1 = g[1];
+  int32_t g2 = g[2];
+  int32_t g3 = g[3];
+  int32_t g4 = g[4];
+  int32_t g5 = g[5];
+  int32_t g6 = g[6];
+  int32_t g7 = g[7];
+  int32_t g8 = g[8];
+  int32_t g9 = g[9];
+  int32_t g1_19 = 19 * g1; /* 1.959375*2^29 */
+  int32_t g2_19 = 19 * g2; /* 1.959375*2^30; still ok */
+  int32_t g3_19 = 19 * g3;
+  int32_t g4_19 = 19 * g4;
+  int32_t g5_19 = 19 * g5;
+  int32_t g6_19 = 19 * g6;
+  int32_t g7_19 = 19 * g7;
+  int32_t g8_19 = 19 * g8;
+  int32_t g9_19 = 19 * g9;
+  int32_t f1_2 = 2 * f1;
+  int32_t f3_2 = 2 * f3;
+  int32_t f5_2 = 2 * f5;
+  int32_t f7_2 = 2 * f7;
+  int32_t f9_2 = 2 * f9;
+  int64_t f0g0    = f0   * (int64_t) g0;
+  int64_t f0g1    = f0   * (int64_t) g1;
+  int64_t f0g2    = f0   * (int64_t) g2;
+  int64_t f0g3    = f0   * (int64_t) g3;
+  int64_t f0g4    = f0   * (int64_t) g4;
+  int64_t f0g5    = f0   * (int64_t) g5;
+  int64_t f0g6    = f0   * (int64_t) g6;
+  int64_t f0g7    = f0   * (int64_t) g7;
+  int64_t f0g8    = f0   * (int64_t) g8;
+  int64_t f0g9    = f0   * (int64_t) g9;
+  int64_t f1g0    = f1   * (int64_t) g0;
+  int64_t f1g1_2  = f1_2 * (int64_t) g1;
+  int64_t f1g2    = f1   * (int64_t) g2;
+  int64_t f1g3_2  = f1_2 * (int64_t) g3;
+  int64_t f1g4    = f1   * (int64_t) g4;
+  int64_t f1g5_2  = f1_2 * (int64_t) g5;
+  int64_t f1g6    = f1   * (int64_t) g6;
+  int64_t f1g7_2  = f1_2 * (int64_t) g7;
+  int64_t f1g8    = f1   * (int64_t) g8;
+  int64_t f1g9_38 = f1_2 * (int64_t) g9_19;
+  int64_t f2g0    = f2   * (int64_t) g0;
+  int64_t f2g1    = f2   * (int64_t) g1;
+  int64_t f2g2    = f2   * (int64_t) g2;
+  int64_t f2g3    = f2   * (int64_t) g3;
+  int64_t f2g4    = f2   * (int64_t) g4;
+  int64_t f2g5    = f2   * (int64_t) g5;
+  int64_t f2g6    = f2   * (int64_t) g6;
+  int64_t f2g7    = f2   * (int64_t) g7;
+  int64_t f2g8_19 = f2   * (int64_t) g8_19;
+  int64_t f2g9_19 = f2   * (int64_t) g9_19;
+  int64_t f3g0    = f3   * (int64_t) g0;
+  int64_t f3g1_2  = f3_2 * (int64_t) g1;
+  int64_t f3g2    = f3   * (int64_t) g2;
+  int64_t f3g3_2  = f3_2 * (int64_t) g3;
+  int64_t f3g4    = f3   * (int64_t) g4;
+  int64_t f3g5_2  = f3_2 * (int64_t) g5;
+  int64_t f3g6    = f3   * (int64_t) g6;
+  int64_t f3g7_38 = f3_2 * (int64_t) g7_19;
+  int64_t f3g8_19 = f3   * (int64_t) g8_19;
+  int64_t f3g9_38 = f3_2 * (int64_t) g9_19;
+  int64_t f4g0    = f4   * (int64_t) g0;
+  int64_t f4g1    = f4   * (int64_t) g1;
+  int64_t f4g2    = f4   * (int64_t) g2;
+  int64_t f4g3    = f4   * (int64_t) g3;
+  int64_t f4g4    = f4   * (int64_t) g4;
+  int64_t f4g5    = f4   * (int64_t) g5;
+  int64_t f4g6_19 = f4   * (int64_t) g6_19;
+  int64_t f4g7_19 = f4   * (int64_t) g7_19;
+  int64_t f4g8_19 = f4   * (int64_t) g8_19;
+  int64_t f4g9_19 = f4   * (int64_t) g9_19;
+  int64_t f5g0    = f5   * (int64_t) g0;
+  int64_t f5g1_2  = f5_2 * (int64_t) g1;
+  int64_t f5g2    = f5   * (int64_t) g2;
+  int64_t f5g3_2  = f5_2 * (int64_t) g3;
+  int64_t f5g4    = f5   * (int64_t) g4;
+  int64_t f5g5_38 = f5_2 * (int64_t) g5_19;
+  int64_t f5g6_19 = f5   * (int64_t) g6_19;
+  int64_t f5g7_38 = f5_2 * (int64_t) g7_19;
+  int64_t f5g8_19 = f5   * (int64_t) g8_19;
+  int64_t f5g9_38 = f5_2 * (int64_t) g9_19;
+  int64_t f6g0    = f6   * (int64_t) g0;
+  int64_t f6g1    = f6   * (int64_t) g1;
+  int64_t f6g2    = f6   * (int64_t) g2;
+  int64_t f6g3    = f6   * (int64_t) g3;
+  int64_t f6g4_19 = f6   * (int64_t) g4_19;
+  int64_t f6g5_19 = f6   * (int64_t) g5_19;
+  int64_t f6g6_19 = f6   * (int64_t) g6_19;
+  int64_t f6g7_19 = f6   * (int64_t) g7_19;
+  int64_t f6g8_19 = f6   * (int64_t) g8_19;
+  int64_t f6g9_19 = f6   * (int64_t) g9_19;
+  int64_t f7g0    = f7   * (int64_t) g0;
+  int64_t f7g1_2  = f7_2 * (int64_t) g1;
+  int64_t f7g2    = f7   * (int64_t) g2;
+  int64_t f7g3_38 = f7_2 * (int64_t) g3_19;
+  int64_t f7g4_19 = f7   * (int64_t) g4_19;
+  int64_t f7g5_38 = f7_2 * (int64_t) g5_19;
+  int64_t f7g6_19 = f7   * (int64_t) g6_19;
+  int64_t f7g7_38 = f7_2 * (int64_t) g7_19;
+  int64_t f7g8_19 = f7   * (int64_t) g8_19;
+  int64_t f7g9_38 = f7_2 * (int64_t) g9_19;
+  int64_t f8g0    = f8   * (int64_t) g0;
+  int64_t f8g1    = f8   * (int64_t) g1;
+  int64_t f8g2_19 = f8   * (int64_t) g2_19;
+  int64_t f8g3_19 = f8   * (int64_t) g3_19;
+  int64_t f8g4_19 = f8   * (int64_t) g4_19;
+  int64_t f8g5_19 = f8   * (int64_t) g5_19;
+  int64_t f8g6_19 = f8   * (int64_t) g6_19;
+  int64_t f8g7_19 = f8   * (int64_t) g7_19;
+  int64_t f8g8_19 = f8   * (int64_t) g8_19;
+  int64_t f8g9_19 = f8   * (int64_t) g9_19;
+  int64_t f9g0    = f9   * (int64_t) g0;
+  int64_t f9g1_38 = f9_2 * (int64_t) g1_19;
+  int64_t f9g2_19 = f9   * (int64_t) g2_19;
+  int64_t f9g3_38 = f9_2 * (int64_t) g3_19;
+  int64_t f9g4_19 = f9   * (int64_t) g4_19;
+  int64_t f9g5_38 = f9_2 * (int64_t) g5_19;
+  int64_t f9g6_19 = f9   * (int64_t) g6_19;
+  int64_t f9g7_38 = f9_2 * (int64_t) g7_19;
+  int64_t f9g8_19 = f9   * (int64_t) g8_19;
+  int64_t f9g9_38 = f9_2 * (int64_t) g9_19;
+  int64_t h0 = f0g0+f1g9_38+f2g8_19+f3g7_38+f4g6_19+f5g5_38+f6g4_19+f7g3_38+f8g2_19+f9g1_38;
+  int64_t h1 = f0g1+f1g0   +f2g9_19+f3g8_19+f4g7_19+f5g6_19+f6g5_19+f7g4_19+f8g3_19+f9g2_19;
+  int64_t h2 = f0g2+f1g1_2 +f2g0   +f3g9_38+f4g8_19+f5g7_38+f6g6_19+f7g5_38+f8g4_19+f9g3_38;
+  int64_t h3 = f0g3+f1g2   +f2g1   +f3g0   +f4g9_19+f5g8_19+f6g7_19+f7g6_19+f8g5_19+f9g4_19;
+  int64_t h4 = f0g4+f1g3_2 +f2g2   +f3g1_2 +f4g0   +f5g9_38+f6g8_19+f7g7_38+f8g6_19+f9g5_38;
+  int64_t h5 = f0g5+f1g4   +f2g3   +f3g2   +f4g1   +f5g0   +f6g9_19+f7g8_19+f8g7_19+f9g6_19;
+  int64_t h6 = f0g6+f1g5_2 +f2g4   +f3g3_2 +f4g2   +f5g1_2 +f6g0   +f7g9_38+f8g8_19+f9g7_38;
+  int64_t h7 = f0g7+f1g6   +f2g5   +f3g4   +f4g3   +f5g2   +f6g1   +f7g0   +f8g9_19+f9g8_19;
+  int64_t h8 = f0g8+f1g7_2 +f2g6   +f3g5_2 +f4g4   +f5g3_2 +f6g2   +f7g1_2 +f8g0   +f9g9_38;
+  int64_t h9 = f0g9+f1g8   +f2g7   +f3g6   +f4g5   +f5g4   +f6g3   +f7g2   +f8g1   +f9g0   ;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+
+  /*
+  |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
+    i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8
+  |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
+    i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9
+  */
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+  /* |h0| <= 2^25 */
+  /* |h4| <= 2^25 */
+  /* |h1| <= 1.71*2^59 */
+  /* |h5| <= 1.71*2^59 */
+
+  carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
+  carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
+  /* |h1| <= 2^24; from now on fits into int32 */
+  /* |h5| <= 2^24; from now on fits into int32 */
+  /* |h2| <= 1.41*2^60 */
+  /* |h6| <= 1.41*2^60 */
+
+  carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
+  carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
+  /* |h2| <= 2^25; from now on fits into int32 unchanged */
+  /* |h6| <= 2^25; from now on fits into int32 unchanged */
+  /* |h3| <= 1.71*2^59 */
+  /* |h7| <= 1.71*2^59 */
+
+  carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
+  carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
+  /* |h3| <= 2^24; from now on fits into int32 unchanged */
+  /* |h7| <= 2^24; from now on fits into int32 unchanged */
+  /* |h4| <= 1.72*2^34 */
+  /* |h8| <= 1.41*2^60 */
+
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+  carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
+  /* |h4| <= 2^25; from now on fits into int32 unchanged */
+  /* |h8| <= 2^25; from now on fits into int32 unchanged */
+  /* |h5| <= 1.01*2^24 */
+  /* |h9| <= 1.71*2^59 */
+
+  carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
+  /* |h9| <= 2^24; from now on fits into int32 unchanged */
+  /* |h0| <= 1.1*2^39 */
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+  /* |h0| <= 2^25; from now on fits into int32 unchanged */
+  /* |h1| <= 1.01*2^24 */
+
+  h[0] = h0;
+  h[1] = h1;
+  h[2] = h2;
+  h[3] = h3;
+  h[4] = h4;
+  h[5] = h5;
+  h[6] = h6;
+  h[7] = h7;
+  h[8] = h8;
+  h[9] = h9;
+}
+
+/* From fe_neg.c */
+
+/*
+h = -f
+
+Preconditions:
+   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+
+Postconditions:
+   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+*/
+
+static void fe_neg(fe h, const fe f) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t h0 = -f0;
+  int32_t h1 = -f1;
+  int32_t h2 = -f2;
+  int32_t h3 = -f3;
+  int32_t h4 = -f4;
+  int32_t h5 = -f5;
+  int32_t h6 = -f6;
+  int32_t h7 = -f7;
+  int32_t h8 = -f8;
+  int32_t h9 = -f9;
+  h[0] = h0;
+  h[1] = h1;
+  h[2] = h2;
+  h[3] = h3;
+  h[4] = h4;
+  h[5] = h5;
+  h[6] = h6;
+  h[7] = h7;
+  h[8] = h8;
+  h[9] = h9;
+}
+
+/* From fe_sq.c */
+
+/*
+h = f * f
+Can overlap h with f.
+
+Preconditions:
+   |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+
+Postconditions:
+   |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+*/
+
+/*
+See fe_mul.c for discussion of implementation strategy.
+*/
+
+static void fe_sq(fe h, const fe f) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t f0_2 = 2 * f0;
+  int32_t f1_2 = 2 * f1;
+  int32_t f2_2 = 2 * f2;
+  int32_t f3_2 = 2 * f3;
+  int32_t f4_2 = 2 * f4;
+  int32_t f5_2 = 2 * f5;
+  int32_t f6_2 = 2 * f6;
+  int32_t f7_2 = 2 * f7;
+  int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
+  int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
+  int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
+  int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
+  int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
+  int64_t f0f0    = f0   * (int64_t) f0;
+  int64_t f0f1_2  = f0_2 * (int64_t) f1;
+  int64_t f0f2_2  = f0_2 * (int64_t) f2;
+  int64_t f0f3_2  = f0_2 * (int64_t) f3;
+  int64_t f0f4_2  = f0_2 * (int64_t) f4;
+  int64_t f0f5_2  = f0_2 * (int64_t) f5;
+  int64_t f0f6_2  = f0_2 * (int64_t) f6;
+  int64_t f0f7_2  = f0_2 * (int64_t) f7;
+  int64_t f0f8_2  = f0_2 * (int64_t) f8;
+  int64_t f0f9_2  = f0_2 * (int64_t) f9;
+  int64_t f1f1_2  = f1_2 * (int64_t) f1;
+  int64_t f1f2_2  = f1_2 * (int64_t) f2;
+  int64_t f1f3_4  = f1_2 * (int64_t) f3_2;
+  int64_t f1f4_2  = f1_2 * (int64_t) f4;
+  int64_t f1f5_4  = f1_2 * (int64_t) f5_2;
+  int64_t f1f6_2  = f1_2 * (int64_t) f6;
+  int64_t f1f7_4  = f1_2 * (int64_t) f7_2;
+  int64_t f1f8_2  = f1_2 * (int64_t) f8;
+  int64_t f1f9_76 = f1_2 * (int64_t) f9_38;
+  int64_t f2f2    = f2   * (int64_t) f2;
+  int64_t f2f3_2  = f2_2 * (int64_t) f3;
+  int64_t f2f4_2  = f2_2 * (int64_t) f4;
+  int64_t f2f5_2  = f2_2 * (int64_t) f5;
+  int64_t f2f6_2  = f2_2 * (int64_t) f6;
+  int64_t f2f7_2  = f2_2 * (int64_t) f7;
+  int64_t f2f8_38 = f2_2 * (int64_t) f8_19;
+  int64_t f2f9_38 = f2   * (int64_t) f9_38;
+  int64_t f3f3_2  = f3_2 * (int64_t) f3;
+  int64_t f3f4_2  = f3_2 * (int64_t) f4;
+  int64_t f3f5_4  = f3_2 * (int64_t) f5_2;
+  int64_t f3f6_2  = f3_2 * (int64_t) f6;
+  int64_t f3f7_76 = f3_2 * (int64_t) f7_38;
+  int64_t f3f8_38 = f3_2 * (int64_t) f8_19;
+  int64_t f3f9_76 = f3_2 * (int64_t) f9_38;
+  int64_t f4f4    = f4   * (int64_t) f4;
+  int64_t f4f5_2  = f4_2 * (int64_t) f5;
+  int64_t f4f6_38 = f4_2 * (int64_t) f6_19;
+  int64_t f4f7_38 = f4   * (int64_t) f7_38;
+  int64_t f4f8_38 = f4_2 * (int64_t) f8_19;
+  int64_t f4f9_38 = f4   * (int64_t) f9_38;
+  int64_t f5f5_38 = f5   * (int64_t) f5_38;
+  int64_t f5f6_38 = f5_2 * (int64_t) f6_19;
+  int64_t f5f7_76 = f5_2 * (int64_t) f7_38;
+  int64_t f5f8_38 = f5_2 * (int64_t) f8_19;
+  int64_t f5f9_76 = f5_2 * (int64_t) f9_38;
+  int64_t f6f6_19 = f6   * (int64_t) f6_19;
+  int64_t f6f7_38 = f6   * (int64_t) f7_38;
+  int64_t f6f8_38 = f6_2 * (int64_t) f8_19;
+  int64_t f6f9_38 = f6   * (int64_t) f9_38;
+  int64_t f7f7_38 = f7   * (int64_t) f7_38;
+  int64_t f7f8_38 = f7_2 * (int64_t) f8_19;
+  int64_t f7f9_76 = f7_2 * (int64_t) f9_38;
+  int64_t f8f8_19 = f8   * (int64_t) f8_19;
+  int64_t f8f9_38 = f8   * (int64_t) f9_38;
+  int64_t f9f9_38 = f9   * (int64_t) f9_38;
+  int64_t h0 = f0f0  +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;
+  int64_t h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;
+  int64_t h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;
+  int64_t h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;
+  int64_t h4 = f0f4_2+f1f3_4 +f2f2   +f5f9_76+f6f8_38+f7f7_38;
+  int64_t h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;
+  int64_t h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;
+  int64_t h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;
+  int64_t h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4   +f9f9_38;
+  int64_t h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+
+  carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
+  carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
+
+  carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
+  carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
+
+  carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
+  carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
+
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+  carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
+
+  carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+
+  h[0] = h0;
+  h[1] = h1;
+  h[2] = h2;
+  h[3] = h3;
+  h[4] = h4;
+  h[5] = h5;
+  h[6] = h6;
+  h[7] = h7;
+  h[8] = h8;
+  h[9] = h9;
+}
+
+/* From fe_sq2.c */
+
+/*
+h = 2 * f * f
+Can overlap h with f.
+
+Preconditions:
+   |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+
+Postconditions:
+   |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+*/
+
+/*
+See fe_mul.c for discussion of implementation strategy.
+*/
+
+static void fe_sq2(fe h, const fe f) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t f0_2 = 2 * f0;
+  int32_t f1_2 = 2 * f1;
+  int32_t f2_2 = 2 * f2;
+  int32_t f3_2 = 2 * f3;
+  int32_t f4_2 = 2 * f4;
+  int32_t f5_2 = 2 * f5;
+  int32_t f6_2 = 2 * f6;
+  int32_t f7_2 = 2 * f7;
+  int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
+  int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
+  int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
+  int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
+  int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
+  int64_t f0f0    = f0   * (int64_t) f0;
+  int64_t f0f1_2  = f0_2 * (int64_t) f1;
+  int64_t f0f2_2  = f0_2 * (int64_t) f2;
+  int64_t f0f3_2  = f0_2 * (int64_t) f3;
+  int64_t f0f4_2  = f0_2 * (int64_t) f4;
+  int64_t f0f5_2  = f0_2 * (int64_t) f5;
+  int64_t f0f6_2  = f0_2 * (int64_t) f6;
+  int64_t f0f7_2  = f0_2 * (int64_t) f7;
+  int64_t f0f8_2  = f0_2 * (int64_t) f8;
+  int64_t f0f9_2  = f0_2 * (int64_t) f9;
+  int64_t f1f1_2  = f1_2 * (int64_t) f1;
+  int64_t f1f2_2  = f1_2 * (int64_t) f2;
+  int64_t f1f3_4  = f1_2 * (int64_t) f3_2;
+  int64_t f1f4_2  = f1_2 * (int64_t) f4;
+  int64_t f1f5_4  = f1_2 * (int64_t) f5_2;
+  int64_t f1f6_2  = f1_2 * (int64_t) f6;
+  int64_t f1f7_4  = f1_2 * (int64_t) f7_2;
+  int64_t f1f8_2  = f1_2 * (int64_t) f8;
+  int64_t f1f9_76 = f1_2 * (int64_t) f9_38;
+  int64_t f2f2    = f2   * (int64_t) f2;
+  int64_t f2f3_2  = f2_2 * (int64_t) f3;
+  int64_t f2f4_2  = f2_2 * (int64_t) f4;
+  int64_t f2f5_2  = f2_2 * (int64_t) f5;
+  int64_t f2f6_2  = f2_2 * (int64_t) f6;
+  int64_t f2f7_2  = f2_2 * (int64_t) f7;
+  int64_t f2f8_38 = f2_2 * (int64_t) f8_19;
+  int64_t f2f9_38 = f2   * (int64_t) f9_38;
+  int64_t f3f3_2  = f3_2 * (int64_t) f3;
+  int64_t f3f4_2  = f3_2 * (int64_t) f4;
+  int64_t f3f5_4  = f3_2 * (int64_t) f5_2;
+  int64_t f3f6_2  = f3_2 * (int64_t) f6;
+  int64_t f3f7_76 = f3_2 * (int64_t) f7_38;
+  int64_t f3f8_38 = f3_2 * (int64_t) f8_19;
+  int64_t f3f9_76 = f3_2 * (int64_t) f9_38;
+  int64_t f4f4    = f4   * (int64_t) f4;
+  int64_t f4f5_2  = f4_2 * (int64_t) f5;
+  int64_t f4f6_38 = f4_2 * (int64_t) f6_19;
+  int64_t f4f7_38 = f4   * (int64_t) f7_38;
+  int64_t f4f8_38 = f4_2 * (int64_t) f8_19;
+  int64_t f4f9_38 = f4   * (int64_t) f9_38;
+  int64_t f5f5_38 = f5   * (int64_t) f5_38;
+  int64_t f5f6_38 = f5_2 * (int64_t) f6_19;
+  int64_t f5f7_76 = f5_2 * (int64_t) f7_38;
+  int64_t f5f8_38 = f5_2 * (int64_t) f8_19;
+  int64_t f5f9_76 = f5_2 * (int64_t) f9_38;
+  int64_t f6f6_19 = f6   * (int64_t) f6_19;
+  int64_t f6f7_38 = f6   * (int64_t) f7_38;
+  int64_t f6f8_38 = f6_2 * (int64_t) f8_19;
+  int64_t f6f9_38 = f6   * (int64_t) f9_38;
+  int64_t f7f7_38 = f7   * (int64_t) f7_38;
+  int64_t f7f8_38 = f7_2 * (int64_t) f8_19;
+  int64_t f7f9_76 = f7_2 * (int64_t) f9_38;
+  int64_t f8f8_19 = f8   * (int64_t) f8_19;
+  int64_t f8f9_38 = f8   * (int64_t) f9_38;
+  int64_t f9f9_38 = f9   * (int64_t) f9_38;
+  int64_t h0 = f0f0  +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;
+  int64_t h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;
+  int64_t h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;
+  int64_t h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;
+  int64_t h4 = f0f4_2+f1f3_4 +f2f2   +f5f9_76+f6f8_38+f7f7_38;
+  int64_t h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;
+  int64_t h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;
+  int64_t h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;
+  int64_t h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4   +f9f9_38;
+  int64_t h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+
+  h0 += h0;
+  h1 += h1;
+  h2 += h2;
+  h3 += h3;
+  h4 += h4;
+  h5 += h5;
+  h6 += h6;
+  h7 += h7;
+  h8 += h8;
+  h9 += h9;
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+
+  carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
+  carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
+
+  carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
+  carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
+
+  carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
+  carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
+
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+  carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
+
+  carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+
+  h[0] = h0;
+  h[1] = h1;
+  h[2] = h2;
+  h[3] = h3;
+  h[4] = h4;
+  h[5] = h5;
+  h[6] = h6;
+  h[7] = h7;
+  h[8] = h8;
+  h[9] = h9;
+}
+
+/* From fe_sub.c */
+
+/*
+h = f - g
+Can overlap h with f or g.
+
+Preconditions:
+   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+   |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+
+Postconditions:
+   |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+*/
+
+static void fe_sub(fe h, const fe f, const fe g) {
+  int32_t f0 = f[0];
+  int32_t f1 = f[1];
+  int32_t f2 = f[2];
+  int32_t f3 = f[3];
+  int32_t f4 = f[4];
+  int32_t f5 = f[5];
+  int32_t f6 = f[6];
+  int32_t f7 = f[7];
+  int32_t f8 = f[8];
+  int32_t f9 = f[9];
+  int32_t g0 = g[0];
+  int32_t g1 = g[1];
+  int32_t g2 = g[2];
+  int32_t g3 = g[3];
+  int32_t g4 = g[4];
+  int32_t g5 = g[5];
+  int32_t g6 = g[6];
+  int32_t g7 = g[7];
+  int32_t g8 = g[8];
+  int32_t g9 = g[9];
+  int32_t h0 = f0 - g0;
+  int32_t h1 = f1 - g1;
+  int32_t h2 = f2 - g2;
+  int32_t h3 = f3 - g3;
+  int32_t h4 = f4 - g4;
+  int32_t h5 = f5 - g5;
+  int32_t h6 = f6 - g6;
+  int32_t h7 = f7 - g7;
+  int32_t h8 = f8 - g8;
+  int32_t h9 = f9 - g9;
+  h[0] = h0;
+  h[1] = h1;
+  h[2] = h2;
+  h[3] = h3;
+  h[4] = h4;
+  h[5] = h5;
+  h[6] = h6;
+  h[7] = h7;
+  h[8] = h8;
+  h[9] = h9;
+}
+
+/* From fe_tobytes.c */
+
+/*
+Preconditions:
+  |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+
+Write p=2^255-19; q=floor(h/p).
+Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).
+
+Proof:
+  Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.
+  Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4.
+
+  Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).
+  Then 0<y<1.
+
+  Write r=h-pq.
+  Have 0<=r<=p-1=2^255-20.
+  Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.
+
+  Write x=r+19(2^-255)r+y.
+  Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.
+
+  Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))
+  so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.
+*/
+
+void fe_tobytes(unsigned char *s, const fe h) {
+  int32_t h0 = h[0];
+  int32_t h1 = h[1];
+  int32_t h2 = h[2];
+  int32_t h3 = h[3];
+  int32_t h4 = h[4];
+  int32_t h5 = h[5];
+  int32_t h6 = h[6];
+  int32_t h7 = h[7];
+  int32_t h8 = h[8];
+  int32_t h9 = h[9];
+  int32_t q;
+  int32_t carry0;
+  int32_t carry1;
+  int32_t carry2;
+  int32_t carry3;
+  int32_t carry4;
+  int32_t carry5;
+  int32_t carry6;
+  int32_t carry7;
+  int32_t carry8;
+  int32_t carry9;
+
+  q = (19 * h9 + (((int32_t) 1) << 24)) >> 25;
+  q = (h0 + q) >> 26;
+  q = (h1 + q) >> 25;
+  q = (h2 + q) >> 26;
+  q = (h3 + q) >> 25;
+  q = (h4 + q) >> 26;
+  q = (h5 + q) >> 25;
+  q = (h6 + q) >> 26;
+  q = (h7 + q) >> 25;
+  q = (h8 + q) >> 26;
+  q = (h9 + q) >> 25;
+
+  /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */
+  h0 += 19 * q;
+  /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */
+
+  carry0 = h0 >> 26; h1 += carry0; h0 -= carry0 << 26;
+  carry1 = h1 >> 25; h2 += carry1; h1 -= carry1 << 25;
+  carry2 = h2 >> 26; h3 += carry2; h2 -= carry2 << 26;
+  carry3 = h3 >> 25; h4 += carry3; h3 -= carry3 << 25;
+  carry4 = h4 >> 26; h5 += carry4; h4 -= carry4 << 26;
+  carry5 = h5 >> 25; h6 += carry5; h5 -= carry5 << 25;
+  carry6 = h6 >> 26; h7 += carry6; h6 -= carry6 << 26;
+  carry7 = h7 >> 25; h8 += carry7; h7 -= carry7 << 25;
+  carry8 = h8 >> 26; h9 += carry8; h8 -= carry8 << 26;
+  carry9 = h9 >> 25;               h9 -= carry9 << 25;
+                  /* h10 = carry9 */
+
+  /*
+  Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
+  Have h0+...+2^230 h9 between 0 and 2^255-1;
+  evidently 2^255 h10-2^255 q = 0.
+  Goal: Output h0+...+2^230 h9.
+  */
+
+  s[0] = h0 >> 0;
+  s[1] = h0 >> 8;
+  s[2] = h0 >> 16;
+  s[3] = (h0 >> 24) | (h1 << 2);
+  s[4] = h1 >> 6;
+  s[5] = h1 >> 14;
+  s[6] = (h1 >> 22) | (h2 << 3);
+  s[7] = h2 >> 5;
+  s[8] = h2 >> 13;
+  s[9] = (h2 >> 21) | (h3 << 5);
+  s[10] = h3 >> 3;
+  s[11] = h3 >> 11;
+  s[12] = (h3 >> 19) | (h4 << 6);
+  s[13] = h4 >> 2;
+  s[14] = h4 >> 10;
+  s[15] = h4 >> 18;
+  s[16] = h5 >> 0;
+  s[17] = h5 >> 8;
+  s[18] = h5 >> 16;
+  s[19] = (h5 >> 24) | (h6 << 1);
+  s[20] = h6 >> 7;
+  s[21] = h6 >> 15;
+  s[22] = (h6 >> 23) | (h7 << 3);
+  s[23] = h7 >> 5;
+  s[24] = h7 >> 13;
+  s[25] = (h7 >> 21) | (h8 << 4);
+  s[26] = h8 >> 4;
+  s[27] = h8 >> 12;
+  s[28] = (h8 >> 20) | (h9 << 6);
+  s[29] = h9 >> 2;
+  s[30] = h9 >> 10;
+  s[31] = h9 >> 18;
+}
+
+/* From ge_add.c */
+
+void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
+  fe t0;
+  fe_add(r->X, p->Y, p->X);
+  fe_sub(r->Y, p->Y, p->X);
+  fe_mul(r->Z, r->X, q->YplusX);
+  fe_mul(r->Y, r->Y, q->YminusX);
+  fe_mul(r->T, q->T2d, p->T);
+  fe_mul(r->X, p->Z, q->Z);
+  fe_add(t0, r->X, r->X);
+  fe_sub(r->X, r->Z, r->Y);
+  fe_add(r->Y, r->Z, r->Y);
+  fe_add(r->Z, t0, r->T);
+  fe_sub(r->T, t0, r->T);
+}
+
+/* From ge_double_scalarmult.c, modified */
+
+static void slide(signed char *r, const unsigned char *a) {
+  int i;
+  int b;
+  int k;
+
+  for (i = 0; i < 256; ++i) {
+    r[i] = 1 & (a[i >> 3] >> (i & 7));
+  }
+
+  for (i = 0; i < 256; ++i) {
+    if (r[i]) {
+      for (b = 1; b <= 6 && i + b < 256; ++b) {
+        if (r[i + b]) {
+          if (r[i] + (r[i + b] << b) <= 15) {
+            r[i] += r[i + b] << b; r[i + b] = 0;
+          } else if (r[i] - (r[i + b] << b) >= -15) {
+            r[i] -= r[i + b] << b;
+            for (k = i + b; k < 256; ++k) {
+              if (!r[k]) {
+                r[k] = 1;
+                break;
+              }
+              r[k] = 0;
+            }
+          } else
+            break;
+        }
+      }
+    }
+  }
+}
+
+void ge_dsm_precomp(ge_dsmp r, const ge_p3 *s) {
+  ge_p1p1 t;
+  ge_p3 s2, u;
+  ge_p3_to_cached(&r[0], s);
+  ge_p3_dbl(&t, s); ge_p1p1_to_p3(&s2, &t);
+  ge_add(&t, &s2, &r[0]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[1], &u);
+  ge_add(&t, &s2, &r[1]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[2], &u);
+  ge_add(&t, &s2, &r[2]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[3], &u);
+  ge_add(&t, &s2, &r[3]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[4], &u);
+  ge_add(&t, &s2, &r[4]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[5], &u);
+  ge_add(&t, &s2, &r[5]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[6], &u);
+  ge_add(&t, &s2, &r[6]); ge_p1p1_to_p3(&u, &t); ge_p3_to_cached(&r[7], &u);
+}
+
+/*
+r = a * A + b * B
+where a = a[0]+256*a[1]+...+256^31 a[31].
+and b = b[0]+256*b[1]+...+256^31 b[31].
+B is the Ed25519 base point (x,4/5) with x positive.
+*/
+
+void ge_double_scalarmult_base_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b) {
+  signed char aslide[256];
+  signed char bslide[256];
+  ge_dsmp Ai; /* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */
+  ge_p1p1 t;
+  ge_p3 u;
+  int i;
+
+  slide(aslide, a);
+  slide(bslide, b);
+  ge_dsm_precomp(Ai, A);
+
+  ge_p2_0(r);
+
+  for (i = 255; i >= 0; --i) {
+    if (aslide[i] || bslide[i]) break;
+  }
+
+  for (; i >= 0; --i) {
+    ge_p2_dbl(&t, r);
+
+    if (aslide[i] > 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_add(&t, &u, &Ai[aslide[i]/2]);
+    } else if (aslide[i] < 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_sub(&t, &u, &Ai[(-aslide[i])/2]);
+    }
+
+    if (bslide[i] > 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_madd(&t, &u, &ge_Bi[bslide[i]/2]);
+    } else if (bslide[i] < 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_msub(&t, &u, &ge_Bi[(-bslide[i])/2]);
+    }
+
+    ge_p1p1_to_p2(r, &t);
+  }
+}
+
+/* From ge_frombytes.c, modified */
+
+int ge_frombytes_vartime(ge_p3 *h, const unsigned char *s) {
+  fe u;
+  fe v;
+  fe vxx;
+  fe check;
+
+  /* From fe_frombytes.c */
+
+  int64_t h0 = load_4(s);
+  int64_t h1 = load_3(s + 4) << 6;
+  int64_t h2 = load_3(s + 7) << 5;
+  int64_t h3 = load_3(s + 10) << 3;
+  int64_t h4 = load_3(s + 13) << 2;
+  int64_t h5 = load_4(s + 16);
+  int64_t h6 = load_3(s + 20) << 7;
+  int64_t h7 = load_3(s + 23) << 5;
+  int64_t h8 = load_3(s + 26) << 4;
+  int64_t h9 = (load_3(s + 29) & 8388607) << 2;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+
+  /* Validate the number to be canonical */
+  if (h9 == 33554428 && h8 == 268435440 && h7 == 536870880 && h6 == 2147483520 &&
+    h5 == 4294967295 && h4 == 67108860 && h3 == 134217720 && h2 == 536870880 &&
+    h1 == 1073741760 && h0 >= 4294967277) {
+    return -1;
+  }
+
+  carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
+  carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
+  carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
+  carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
+  carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+  carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+  carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
+  carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
+
+  h->Y[0] = h0;
+  h->Y[1] = h1;
+  h->Y[2] = h2;
+  h->Y[3] = h3;
+  h->Y[4] = h4;
+  h->Y[5] = h5;
+  h->Y[6] = h6;
+  h->Y[7] = h7;
+  h->Y[8] = h8;
+  h->Y[9] = h9;
+
+  /* End fe_frombytes.c */
+
+  fe_1(h->Z);
+  fe_sq(u, h->Y);
+  fe_mul(v, u, fe_d);
+  fe_sub(u, u, h->Z);       /* u = y^2-1 */
+  fe_add(v, v, h->Z);       /* v = dy^2+1 */
+
+  fe_divpowm1(h->X, u, v); /* x = uv^3(uv^7)^((q-5)/8) */
+
+  fe_sq(vxx, h->X);
+  fe_mul(vxx, vxx, v);
+  fe_sub(check, vxx, u);    /* vx^2-u */
+  if (fe_isnonzero(check)) {
+    fe_add(check, vxx, u);  /* vx^2+u */
+    if (fe_isnonzero(check)) {
+      return -1;
+    }
+    fe_mul(h->X, h->X, fe_sqrtm1);
+  }
+
+  if (fe_isnegative(h->X) != (s[31] >> 7)) {
+    /* If x = 0, the sign must be positive */
+    if (!fe_isnonzero(h->X)) {
+      return -1;
+    }
+    fe_neg(h->X, h->X);
+  }
+
+  fe_mul(h->T, h->X, h->Y);
+  return 0;
+}
+
+/* From ge_madd.c */
+
+/*
+r = p + q
+*/
+
+static void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
+  fe t0;
+  fe_add(r->X, p->Y, p->X);
+  fe_sub(r->Y, p->Y, p->X);
+  fe_mul(r->Z, r->X, q->yplusx);
+  fe_mul(r->Y, r->Y, q->yminusx);
+  fe_mul(r->T, q->xy2d, p->T);
+  fe_add(t0, p->Z, p->Z);
+  fe_sub(r->X, r->Z, r->Y);
+  fe_add(r->Y, r->Z, r->Y);
+  fe_add(r->Z, t0, r->T);
+  fe_sub(r->T, t0, r->T);
+}
+
+/* From ge_msub.c */
+
+/*
+r = p - q
+*/
+
+static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
+  fe t0;
+  fe_add(r->X, p->Y, p->X);
+  fe_sub(r->Y, p->Y, p->X);
+  fe_mul(r->Z, r->X, q->yminusx);
+  fe_mul(r->Y, r->Y, q->yplusx);
+  fe_mul(r->T, q->xy2d, p->T);
+  fe_add(t0, p->Z, p->Z);
+  fe_sub(r->X, r->Z, r->Y);
+  fe_add(r->Y, r->Z, r->Y);
+  fe_sub(r->Z, t0, r->T);
+  fe_add(r->T, t0, r->T);
+}
+
+/* From ge_p1p1_to_p2.c */
+
+/*
+r = p
+*/
+
+void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) {
+  fe_mul(r->X, p->X, p->T);
+  fe_mul(r->Y, p->Y, p->Z);
+  fe_mul(r->Z, p->Z, p->T);
+}
+
+/* From ge_p1p1_to_p3.c */
+
+/*
+r = p
+*/
+
+void ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) {
+  fe_mul(r->X, p->X, p->T);
+  fe_mul(r->Y, p->Y, p->Z);
+  fe_mul(r->Z, p->Z, p->T);
+  fe_mul(r->T, p->X, p->Y);
+}
+
+/* From ge_p2_0.c */
+
+static void ge_p2_0(ge_p2 *h) {
+  fe_0(h->X);
+  fe_1(h->Y);
+  fe_1(h->Z);
+}
+
+/* From ge_p2_dbl.c */
+
+/*
+r = 2 * p
+*/
+
+void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) {
+  fe t0;
+  fe_sq(r->X, p->X);
+  fe_sq(r->Z, p->Y);
+  fe_sq2(r->T, p->Z);
+  fe_add(r->Y, p->X, p->Y);
+  fe_sq(t0, r->Y);
+  fe_add(r->Y, r->Z, r->X);
+  fe_sub(r->Z, r->Z, r->X);
+  fe_sub(r->X, t0, r->Y);
+  fe_sub(r->T, r->T, r->Z);
+}
+
+/* From ge_p3_0.c */
+
+static void ge_p3_0(ge_p3 *h) {
+  fe_0(h->X);
+  fe_1(h->Y);
+  fe_1(h->Z);
+  fe_0(h->T);
+}
+
+/* From ge_p3_dbl.c */
+
+/*
+r = 2 * p
+*/
+
+static void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p) {
+  ge_p2 q;
+  ge_p3_to_p2(&q, p);
+  ge_p2_dbl(r, &q);
+}
+
+/* From ge_p3_to_cached.c */
+
+/*
+r = p
+*/
+
+void ge_p3_to_cached(ge_cached *r, const ge_p3 *p) {
+  fe_add(r->YplusX, p->Y, p->X);
+  fe_sub(r->YminusX, p->Y, p->X);
+  fe_copy(r->Z, p->Z);
+  fe_mul(r->T2d, p->T, fe_d2);
+}
+
+/* From ge_p3_to_p2.c */
+
+/*
+r = p
+*/
+
+void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) {
+  fe_copy(r->X, p->X);
+  fe_copy(r->Y, p->Y);
+  fe_copy(r->Z, p->Z);
+}
+
+/* From ge_p3_tobytes.c */
+
+void ge_p3_tobytes(unsigned char *s, const ge_p3 *h) {
+  fe recip;
+  fe x;
+  fe y;
+
+  fe_invert(recip, h->Z);
+  fe_mul(x, h->X, recip);
+  fe_mul(y, h->Y, recip);
+  fe_tobytes(s, y);
+  s[31] ^= fe_isnegative(x) << 7;
+}
+
+/* From ge_precomp_0.c */
+
+static void ge_precomp_0(ge_precomp *h) {
+  fe_1(h->yplusx);
+  fe_1(h->yminusx);
+  fe_0(h->xy2d);
+}
+
+/* From ge_scalarmult_base.c */
+
+static unsigned char equal(signed char b, signed char c) {
+  unsigned char ub = b;
+  unsigned char uc = c;
+  unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */
+  uint32_t y = x; /* 0: yes; 1..255: no */
+  y -= 1; /* 4294967295: yes; 0..254: no */
+  y >>= 31; /* 1: yes; 0: no */
+  return y;
+}
+
+static unsigned char negative(signed char b) {
+  unsigned long long x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */
+  x >>= 63; /* 1: yes; 0: no */
+  return x;
+}
+
+static void ge_precomp_cmov(ge_precomp *t, const ge_precomp *u, unsigned char b) {
+  fe_cmov(t->yplusx, u->yplusx, b);
+  fe_cmov(t->yminusx, u->yminusx, b);
+  fe_cmov(t->xy2d, u->xy2d, b);
+}
+
+static void select(ge_precomp *t, int pos, signed char b) {
+  ge_precomp minust;
+  unsigned char bnegative = negative(b);
+  unsigned char babs = b - (((-bnegative) & b) << 1);
+
+  ge_precomp_0(t);
+  ge_precomp_cmov(t, &ge_base[pos][0], equal(babs, 1));
+  ge_precomp_cmov(t, &ge_base[pos][1], equal(babs, 2));
+  ge_precomp_cmov(t, &ge_base[pos][2], equal(babs, 3));
+  ge_precomp_cmov(t, &ge_base[pos][3], equal(babs, 4));
+  ge_precomp_cmov(t, &ge_base[pos][4], equal(babs, 5));
+  ge_precomp_cmov(t, &ge_base[pos][5], equal(babs, 6));
+  ge_precomp_cmov(t, &ge_base[pos][6], equal(babs, 7));
+  ge_precomp_cmov(t, &ge_base[pos][7], equal(babs, 8));
+  fe_copy(minust.yplusx, t->yminusx);
+  fe_copy(minust.yminusx, t->yplusx);
+  fe_neg(minust.xy2d, t->xy2d);
+  ge_precomp_cmov(t, &minust, bnegative);
+}
+
+/*
+h = a * B
+where a = a[0]+256*a[1]+...+256^31 a[31]
+B is the Ed25519 base point (x,4/5) with x positive.
+
+Preconditions:
+  a[31] <= 127
+*/
+
+void ge_scalarmult_base(ge_p3 *h, const unsigned char *a) {
+  signed char e[64];
+  signed char carry;
+  ge_p1p1 r;
+  ge_p2 s;
+  ge_precomp t;
+  int i;
+
+  for (i = 0; i < 32; ++i) {
+    e[2 * i + 0] = (a[i] >> 0) & 15;
+    e[2 * i + 1] = (a[i] >> 4) & 15;
+  }
+  /* each e[i] is between 0 and 15 */
+  /* e[63] is between 0 and 7 */
+
+  carry = 0;
+  for (i = 0; i < 63; ++i) {
+    e[i] += carry;
+    carry = e[i] + 8;
+    carry >>= 4;
+    e[i] -= carry << 4;
+  }
+  e[63] += carry;
+  /* each e[i] is between -8 and 8 */
+
+  ge_p3_0(h);
+  for (i = 1; i < 64; i += 2) {
+    select(&t, i / 2, e[i]);
+    ge_madd(&r, h, &t); ge_p1p1_to_p3(h, &r);
+  }
+
+  ge_p3_dbl(&r, h);  ge_p1p1_to_p2(&s, &r);
+  ge_p2_dbl(&r, &s); ge_p1p1_to_p2(&s, &r);
+  ge_p2_dbl(&r, &s); ge_p1p1_to_p2(&s, &r);
+  ge_p2_dbl(&r, &s); ge_p1p1_to_p3(h, &r);
+
+  for (i = 0; i < 64; i += 2) {
+    select(&t, i / 2, e[i]);
+    ge_madd(&r, h, &t); ge_p1p1_to_p3(h, &r);
+  }
+}
+
+/* From ge_sub.c */
+
+/*
+r = p - q
+*/
+
+void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
+  fe t0;
+  fe_add(r->X, p->Y, p->X);
+  fe_sub(r->Y, p->Y, p->X);
+  fe_mul(r->Z, r->X, q->YminusX);
+  fe_mul(r->Y, r->Y, q->YplusX);
+  fe_mul(r->T, q->T2d, p->T);
+  fe_mul(r->X, p->Z, q->Z);
+  fe_add(t0, r->X, r->X);
+  fe_sub(r->X, r->Z, r->Y);
+  fe_add(r->Y, r->Z, r->Y);
+  fe_sub(r->Z, t0, r->T);
+  fe_add(r->T, t0, r->T);
+}
+
+/* From ge_tobytes.c */
+
+void ge_tobytes(unsigned char *s, const ge_p2 *h) {
+  fe recip;
+  fe x;
+  fe y;
+
+  fe_invert(recip, h->Z);
+  fe_mul(x, h->X, recip);
+  fe_mul(y, h->Y, recip);
+  fe_tobytes(s, y);
+  s[31] ^= fe_isnegative(x) << 7;
+}
+
+/* From sc_reduce.c */
+
+/*
+Input:
+  s[0]+256*s[1]+...+256^63*s[63] = s
+
+Output:
+  s[0]+256*s[1]+...+256^31*s[31] = s mod l
+  where l = 2^252 + 27742317777372353535851937790883648493.
+  Overwrites s in place.
+*/
+
+void sc_reduce(unsigned char *s) {
+  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);
+  int64_t s3 = 2097151 & (load_4(s + 7) >> 7);
+  int64_t s4 = 2097151 & (load_4(s + 10) >> 4);
+  int64_t s5 = 2097151 & (load_3(s + 13) >> 1);
+  int64_t s6 = 2097151 & (load_4(s + 15) >> 6);
+  int64_t s7 = 2097151 & (load_3(s + 18) >> 3);
+  int64_t s8 = 2097151 & load_3(s + 21);
+  int64_t s9 = 2097151 & (load_4(s + 23) >> 5);
+  int64_t s10 = 2097151 & (load_3(s + 26) >> 2);
+  int64_t s11 = 2097151 & (load_4(s + 28) >> 7);
+  int64_t s12 = 2097151 & (load_4(s + 31) >> 4);
+  int64_t s13 = 2097151 & (load_3(s + 34) >> 1);
+  int64_t s14 = 2097151 & (load_4(s + 36) >> 6);
+  int64_t s15 = 2097151 & (load_3(s + 39) >> 3);
+  int64_t s16 = 2097151 & load_3(s + 42);
+  int64_t s17 = 2097151 & (load_4(s + 44) >> 5);
+  int64_t s18 = 2097151 & (load_3(s + 47) >> 2);
+  int64_t s19 = 2097151 & (load_4(s + 49) >> 7);
+  int64_t s20 = 2097151 & (load_4(s + 52) >> 4);
+  int64_t s21 = 2097151 & (load_3(s + 55) >> 1);
+  int64_t s22 = 2097151 & (load_4(s + 57) >> 6);
+  int64_t s23 = (load_4(s + 60) >> 3);
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+  int64_t carry12;
+  int64_t carry13;
+  int64_t carry14;
+  int64_t carry15;
+  int64_t carry16;
+
+  s11 += s23 * 666643;
+  s12 += s23 * 470296;
+  s13 += s23 * 654183;
+  s14 -= s23 * 997805;
+  s15 += s23 * 136657;
+  s16 -= s23 * 683901;
+
+  s10 += s22 * 666643;
+  s11 += s22 * 470296;
+  s12 += s22 * 654183;
+  s13 -= s22 * 997805;
+  s14 += s22 * 136657;
+  s15 -= s22 * 683901;
+
+  s9 += s21 * 666643;
+  s10 += s21 * 470296;
+  s11 += s21 * 654183;
+  s12 -= s21 * 997805;
+  s13 += s21 * 136657;
+  s14 -= s21 * 683901;
+
+  s8 += s20 * 666643;
+  s9 += s20 * 470296;
+  s10 += s20 * 654183;
+  s11 -= s20 * 997805;
+  s12 += s20 * 136657;
+  s13 -= s20 * 683901;
+
+  s7 += s19 * 666643;
+  s8 += s19 * 470296;
+  s9 += s19 * 654183;
+  s10 -= s19 * 997805;
+  s11 += s19 * 136657;
+  s12 -= s19 * 683901;
+
+  s6 += s18 * 666643;
+  s7 += s18 * 470296;
+  s8 += s18 * 654183;
+  s9 -= s18 * 997805;
+  s10 += s18 * 136657;
+  s11 -= s18 * 683901;
+
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry12 = (s12 + (1<<20)) >> 21; s13 += carry12; s12 -= carry12 << 21;
+  carry14 = (s14 + (1<<20)) >> 21; s15 += carry14; s14 -= carry14 << 21;
+  carry16 = (s16 + (1<<20)) >> 21; s17 += carry16; s16 -= carry16 << 21;
+
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+  carry13 = (s13 + (1<<20)) >> 21; s14 += carry13; s13 -= carry13 << 21;
+  carry15 = (s15 + (1<<20)) >> 21; s16 += carry15; s15 -= carry15 << 21;
+
+  s5 += s17 * 666643;
+  s6 += s17 * 470296;
+  s7 += s17 * 654183;
+  s8 -= s17 * 997805;
+  s9 += s17 * 136657;
+  s10 -= s17 * 683901;
+
+  s4 += s16 * 666643;
+  s5 += s16 * 470296;
+  s6 += s16 * 654183;
+  s7 -= s16 * 997805;
+  s8 += s16 * 136657;
+  s9 -= s16 * 683901;
+
+  s3 += s15 * 666643;
+  s4 += s15 * 470296;
+  s5 += s15 * 654183;
+  s6 -= s15 * 997805;
+  s7 += s15 * 136657;
+  s8 -= s15 * 683901;
+
+  s2 += s14 * 666643;
+  s3 += s14 * 470296;
+  s4 += s14 * 654183;
+  s5 -= s14 * 997805;
+  s6 += s14 * 136657;
+  s7 -= s14 * 683901;
+
+  s1 += s13 * 666643;
+  s2 += s13 * 470296;
+  s3 += s13 * 654183;
+  s4 -= s13 * 997805;
+  s5 += s13 * 136657;
+  s6 -= s13 * 683901;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+/* New code */
+
+static void fe_divpowm1(fe r, const fe u, const fe v) {
+  fe v3, uv7, t0, t1, t2;
+  int i;
+
+  fe_sq(v3, v);
+  fe_mul(v3, v3, v); /* v3 = v^3 */
+  fe_sq(uv7, v3);
+  fe_mul(uv7, uv7, v);
+  fe_mul(uv7, uv7, u); /* uv7 = uv^7 */
+
+  /*fe_pow22523(uv7, uv7);*/
+
+  /* From fe_pow22523.c */
+
+  fe_sq(t0, uv7);
+  fe_sq(t1, t0);
+  fe_sq(t1, t1);
+  fe_mul(t1, uv7, t1);
+  fe_mul(t0, t0, t1);
+  fe_sq(t0, t0);
+  fe_mul(t0, t1, t0);
+  fe_sq(t1, t0);
+  for (i = 0; i < 4; ++i) {
+    fe_sq(t1, t1);
+  }
+  fe_mul(t0, t1, t0);
+  fe_sq(t1, t0);
+  for (i = 0; i < 9; ++i) {
+    fe_sq(t1, t1);
+  }
+  fe_mul(t1, t1, t0);
+  fe_sq(t2, t1);
+  for (i = 0; i < 19; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t1, t2, t1);
+  for (i = 0; i < 10; ++i) {
+    fe_sq(t1, t1);
+  }
+  fe_mul(t0, t1, t0);
+  fe_sq(t1, t0);
+  for (i = 0; i < 49; ++i) {
+    fe_sq(t1, t1);
+  }
+  fe_mul(t1, t1, t0);
+  fe_sq(t2, t1);
+  for (i = 0; i < 99; ++i) {
+    fe_sq(t2, t2);
+  }
+  fe_mul(t1, t2, t1);
+  for (i = 0; i < 50; ++i) {
+    fe_sq(t1, t1);
+  }
+  fe_mul(t0, t1, t0);
+  fe_sq(t0, t0);
+  fe_sq(t0, t0);
+  fe_mul(t0, t0, uv7);
+
+  /* End fe_pow22523.c */
+  /* t0 = (uv^7)^((q-5)/8) */
+  fe_mul(t0, t0, v3);
+  fe_mul(r, t0, u); /* u^(m+1)v^(-(m+1)) */
+}
+
+static void ge_cached_0(ge_cached *r) {
+  fe_1(r->YplusX);
+  fe_1(r->YminusX);
+  fe_1(r->Z);
+  fe_0(r->T2d);
+}
+
+static void ge_cached_cmov(ge_cached *t, const ge_cached *u, unsigned char b) {
+  fe_cmov(t->YplusX, u->YplusX, b);
+  fe_cmov(t->YminusX, u->YminusX, b);
+  fe_cmov(t->Z, u->Z, b);
+  fe_cmov(t->T2d, u->T2d, b);
+}
+
+/* Assumes that a[31] <= 127 */
+void ge_scalarmult(ge_p2 *r, const unsigned char *a, const ge_p3 *A) {
+  signed char e[64];
+  int carry, carry2, i;
+  ge_cached Ai[8]; /* 1 * A, 2 * A, ..., 8 * A */
+  ge_p1p1 t;
+  ge_p3 u;
+
+  carry = 0; /* 0..1 */
+  for (i = 0; i < 31; i++) {
+    carry += a[i]; /* 0..256 */
+    carry2 = (carry + 8) >> 4; /* 0..16 */
+    e[2 * i] = carry - (carry2 << 4); /* -8..7 */
+    carry = (carry2 + 8) >> 4; /* 0..1 */
+    e[2 * i + 1] = carry2 - (carry << 4); /* -8..7 */
+  }
+  carry += a[31]; /* 0..128 */
+  carry2 = (carry + 8) >> 4; /* 0..8 */
+  e[62] = carry - (carry2 << 4); /* -8..7 */
+  e[63] = carry2; /* 0..8 */
+
+  ge_p3_to_cached(&Ai[0], A);
+  for (i = 0; i < 7; i++) {
+    ge_add(&t, A, &Ai[i]);
+    ge_p1p1_to_p3(&u, &t);
+    ge_p3_to_cached(&Ai[i + 1], &u);
+  }
+
+  ge_p2_0(r);
+  for (i = 63; i >= 0; i--) {
+    signed char b = e[i];
+    unsigned char bnegative = negative(b);
+    unsigned char babs = b - (((-bnegative) & b) << 1);
+    ge_cached cur, minuscur;
+    ge_p2_dbl(&t, r);
+    ge_p1p1_to_p2(r, &t);
+    ge_p2_dbl(&t, r);
+    ge_p1p1_to_p2(r, &t);
+    ge_p2_dbl(&t, r);
+    ge_p1p1_to_p2(r, &t);
+    ge_p2_dbl(&t, r);
+    ge_p1p1_to_p3(&u, &t);
+    ge_cached_0(&cur);
+    ge_cached_cmov(&cur, &Ai[0], equal(babs, 1));
+    ge_cached_cmov(&cur, &Ai[1], equal(babs, 2));
+    ge_cached_cmov(&cur, &Ai[2], equal(babs, 3));
+    ge_cached_cmov(&cur, &Ai[3], equal(babs, 4));
+    ge_cached_cmov(&cur, &Ai[4], equal(babs, 5));
+    ge_cached_cmov(&cur, &Ai[5], equal(babs, 6));
+    ge_cached_cmov(&cur, &Ai[6], equal(babs, 7));
+    ge_cached_cmov(&cur, &Ai[7], equal(babs, 8));
+    fe_copy(minuscur.YplusX, cur.YminusX);
+    fe_copy(minuscur.YminusX, cur.YplusX);
+    fe_copy(minuscur.Z, cur.Z);
+    fe_neg(minuscur.T2d, cur.T2d);
+    ge_cached_cmov(&cur, &minuscur, bnegative);
+    ge_add(&t, &u, &cur);
+    ge_p1p1_to_p2(r, &t);
+  }
+}
+
+void ge_double_scalarmult_precomp_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b, const ge_dsmp Bi) {
+  signed char aslide[256];
+  signed char bslide[256];
+  ge_dsmp Ai; /* A, 3A, 5A, 7A, 9A, 11A, 13A, 15A */
+  ge_p1p1 t;
+  ge_p3 u;
+  int i;
+
+  slide(aslide, a);
+  slide(bslide, b);
+  ge_dsm_precomp(Ai, A);
+
+  ge_p2_0(r);
+
+  for (i = 255; i >= 0; --i) {
+    if (aslide[i] || bslide[i]) break;
+  }
+
+  for (; i >= 0; --i) {
+    ge_p2_dbl(&t, r);
+
+    if (aslide[i] > 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_add(&t, &u, &Ai[aslide[i]/2]);
+    } else if (aslide[i] < 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_sub(&t, &u, &Ai[(-aslide[i])/2]);
+    }
+
+    if (bslide[i] > 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_add(&t, &u, &Bi[bslide[i]/2]);
+    } else if (bslide[i] < 0) {
+      ge_p1p1_to_p3(&u, &t);
+      ge_sub(&t, &u, &Bi[(-bslide[i])/2]);
+    }
+
+    ge_p1p1_to_p2(r, &t);
+  }
+}
+
+void ge_mul8(ge_p1p1 *r, const ge_p2 *t) {
+  ge_p2 u;
+  ge_p2_dbl(r, t);
+  ge_p1p1_to_p2(&u, r);
+  ge_p2_dbl(r, &u);
+  ge_p1p1_to_p2(&u, r);
+  ge_p2_dbl(r, &u);
+}
+
+void ge_fromfe_frombytes_vartime(ge_p2 *r, const unsigned char *s) {
+  fe u, v, w, x, y, z;
+  unsigned char sign;
+
+  /* From fe_frombytes.c */
+
+  int64_t h0 = load_4(s);
+  int64_t h1 = load_3(s + 4) << 6;
+  int64_t h2 = load_3(s + 7) << 5;
+  int64_t h3 = load_3(s + 10) << 3;
+  int64_t h4 = load_3(s + 13) << 2;
+  int64_t h5 = load_4(s + 16);
+  int64_t h6 = load_3(s + 20) << 7;
+  int64_t h7 = load_3(s + 23) << 5;
+  int64_t h8 = load_3(s + 26) << 4;
+  int64_t h9 = load_3(s + 29) << 2;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+
+  carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
+  carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
+  carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
+  carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
+  carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
+
+  carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
+  carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
+  carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
+  carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
+  carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
+
+  u[0] = h0;
+  u[1] = h1;
+  u[2] = h2;
+  u[3] = h3;
+  u[4] = h4;
+  u[5] = h5;
+  u[6] = h6;
+  u[7] = h7;
+  u[8] = h8;
+  u[9] = h9;
+
+  /* End fe_frombytes.c */
+
+  fe_sq2(v, u); /* 2 * u^2 */
+  fe_1(w);
+  fe_add(w, v, w); /* w = 2 * u^2 + 1 */
+  fe_sq(x, w); /* w^2 */
+  fe_mul(y, fe_ma2, v); /* -2 * A^2 * u^2 */
+  fe_add(x, x, y); /* x = w^2 - 2 * A^2 * u^2 */
+  fe_divpowm1(r->X, w, x); /* (w / x)^(m + 1) */
+  fe_sq(y, r->X);
+  fe_mul(x, y, x);
+  fe_sub(y, w, x);
+  fe_copy(z, fe_ma);
+  if (fe_isnonzero(y)) {
+    fe_add(y, w, x);
+    if (fe_isnonzero(y)) {
+      goto negative;
+    } else {
+      fe_mul(r->X, r->X, fe_fffb1);
+    }
+  } else {
+    fe_mul(r->X, r->X, fe_fffb2);
+  }
+  fe_mul(r->X, r->X, u); /* u * sqrt(2 * A * (A + 2) * w / x) */
+  fe_mul(z, z, v); /* -2 * A * u^2 */
+  sign = 0;
+  goto setsign;
+negative:
+  fe_mul(x, x, fe_sqrtm1);
+  fe_sub(y, w, x);
+  if (fe_isnonzero(y)) {
+    assert((fe_add(y, w, x), !fe_isnonzero(y)));
+    fe_mul(r->X, r->X, fe_fffb3);
+  } else {
+    fe_mul(r->X, r->X, fe_fffb4);
+  }
+  /* r->X = sqrt(A * (A + 2) * w / x) */
+  /* z = -A */
+  sign = 1;
+setsign:
+  if (fe_isnegative(r->X) != sign) {
+    assert(fe_isnonzero(r->X));
+    fe_neg(r->X, r->X);
+  }
+  fe_add(r->Z, z, w);
+  fe_sub(r->Y, z, w);
+  fe_mul(r->X, r->X, r->Z);
+#if !defined(NDEBUG)
+  {
+    fe check_x, check_y, check_iz, check_v;
+    fe_invert(check_iz, r->Z);
+    fe_mul(check_x, r->X, check_iz);
+    fe_mul(check_y, r->Y, check_iz);
+    fe_sq(check_x, check_x);
+    fe_sq(check_y, check_y);
+    fe_mul(check_v, check_x, check_y);
+    fe_mul(check_v, fe_d, check_v);
+    fe_add(check_v, check_v, check_x);
+    fe_sub(check_v, check_v, check_y);
+    fe_1(check_x);
+    fe_add(check_v, check_v, check_x);
+    assert(!fe_isnonzero(check_v));
+  }
+#endif
+}
+
+void sc_0(unsigned char *s) {
+  int i;
+  for (i = 0; i < 32; i++) {
+    s[i] = 0;
+  }
+}
+
+void sc_reduce32(unsigned char *s) {
+  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);
+  int64_t s3 = 2097151 & (load_4(s + 7) >> 7);
+  int64_t s4 = 2097151 & (load_4(s + 10) >> 4);
+  int64_t s5 = 2097151 & (load_3(s + 13) >> 1);
+  int64_t s6 = 2097151 & (load_4(s + 15) >> 6);
+  int64_t s7 = 2097151 & (load_3(s + 18) >> 3);
+  int64_t s8 = 2097151 & load_3(s + 21);
+  int64_t s9 = 2097151 & (load_4(s + 23) >> 5);
+  int64_t s10 = 2097151 & (load_3(s + 26) >> 2);
+  int64_t s11 = (load_4(s + 28) >> 7);
+  int64_t s12 = 0;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+
+  carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+void sc_add(unsigned char *s, const unsigned char *a, const unsigned char *b) {
+  int64_t a0 = 2097151 & load_3(a);
+  int64_t a1 = 2097151 & (load_4(a + 2) >> 5);
+  int64_t a2 = 2097151 & (load_3(a + 5) >> 2);
+  int64_t a3 = 2097151 & (load_4(a + 7) >> 7);
+  int64_t a4 = 2097151 & (load_4(a + 10) >> 4);
+  int64_t a5 = 2097151 & (load_3(a + 13) >> 1);
+  int64_t a6 = 2097151 & (load_4(a + 15) >> 6);
+  int64_t a7 = 2097151 & (load_3(a + 18) >> 3);
+  int64_t a8 = 2097151 & load_3(a + 21);
+  int64_t a9 = 2097151 & (load_4(a + 23) >> 5);
+  int64_t a10 = 2097151 & (load_3(a + 26) >> 2);
+  int64_t a11 = (load_4(a + 28) >> 7);
+  int64_t b0 = 2097151 & load_3(b);
+  int64_t b1 = 2097151 & (load_4(b + 2) >> 5);
+  int64_t b2 = 2097151 & (load_3(b + 5) >> 2);
+  int64_t b3 = 2097151 & (load_4(b + 7) >> 7);
+  int64_t b4 = 2097151 & (load_4(b + 10) >> 4);
+  int64_t b5 = 2097151 & (load_3(b + 13) >> 1);
+  int64_t b6 = 2097151 & (load_4(b + 15) >> 6);
+  int64_t b7 = 2097151 & (load_3(b + 18) >> 3);
+  int64_t b8 = 2097151 & load_3(b + 21);
+  int64_t b9 = 2097151 & (load_4(b + 23) >> 5);
+  int64_t b10 = 2097151 & (load_3(b + 26) >> 2);
+  int64_t b11 = (load_4(b + 28) >> 7);
+  int64_t s0 = a0 + b0;
+  int64_t s1 = a1 + b1;
+  int64_t s2 = a2 + b2;
+  int64_t s3 = a3 + b3;
+  int64_t s4 = a4 + b4;
+  int64_t s5 = a5 + b5;
+  int64_t s6 = a6 + b6;
+  int64_t s7 = a7 + b7;
+  int64_t s8 = a8 + b8;
+  int64_t s9 = a9 + b9;
+  int64_t s10 = a10 + b10;
+  int64_t s11 = a11 + b11;
+  int64_t s12 = 0;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+
+  carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+void sc_sub(unsigned char *s, const unsigned char *a, const unsigned char *b) {
+  int64_t a0 = 2097151 & load_3(a);
+  int64_t a1 = 2097151 & (load_4(a + 2) >> 5);
+  int64_t a2 = 2097151 & (load_3(a + 5) >> 2);
+  int64_t a3 = 2097151 & (load_4(a + 7) >> 7);
+  int64_t a4 = 2097151 & (load_4(a + 10) >> 4);
+  int64_t a5 = 2097151 & (load_3(a + 13) >> 1);
+  int64_t a6 = 2097151 & (load_4(a + 15) >> 6);
+  int64_t a7 = 2097151 & (load_3(a + 18) >> 3);
+  int64_t a8 = 2097151 & load_3(a + 21);
+  int64_t a9 = 2097151 & (load_4(a + 23) >> 5);
+  int64_t a10 = 2097151 & (load_3(a + 26) >> 2);
+  int64_t a11 = (load_4(a + 28) >> 7);
+  int64_t b0 = 2097151 & load_3(b);
+  int64_t b1 = 2097151 & (load_4(b + 2) >> 5);
+  int64_t b2 = 2097151 & (load_3(b + 5) >> 2);
+  int64_t b3 = 2097151 & (load_4(b + 7) >> 7);
+  int64_t b4 = 2097151 & (load_4(b + 10) >> 4);
+  int64_t b5 = 2097151 & (load_3(b + 13) >> 1);
+  int64_t b6 = 2097151 & (load_4(b + 15) >> 6);
+  int64_t b7 = 2097151 & (load_3(b + 18) >> 3);
+  int64_t b8 = 2097151 & load_3(b + 21);
+  int64_t b9 = 2097151 & (load_4(b + 23) >> 5);
+  int64_t b10 = 2097151 & (load_3(b + 26) >> 2);
+  int64_t b11 = (load_4(b + 28) >> 7);
+  int64_t s0 = a0 - b0;
+  int64_t s1 = a1 - b1;
+  int64_t s2 = a2 - b2;
+  int64_t s3 = a3 - b3;
+  int64_t s4 = a4 - b4;
+  int64_t s5 = a5 - b5;
+  int64_t s6 = a6 - b6;
+  int64_t s7 = a7 - b7;
+  int64_t s8 = a8 - b8;
+  int64_t s9 = a9 - b9;
+  int64_t s10 = a10 - b10;
+  int64_t s11 = a11 - b11;
+  int64_t s12 = 0;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+
+  carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+/*
+Input:
+  a[0]+256*a[1]+...+256^31*a[31] = a
+  b[0]+256*b[1]+...+256^31*b[31] = b
+  c[0]+256*c[1]+...+256^31*c[31] = c
+
+Output:
+  s[0]+256*s[1]+...+256^31*s[31] = (c-ab) mod l
+  where l = 2^252 + 27742317777372353535851937790883648493.
+*/
+
+void sc_mulsub(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c) {
+  int64_t a0 = 2097151 & load_3(a);
+  int64_t a1 = 2097151 & (load_4(a + 2) >> 5);
+  int64_t a2 = 2097151 & (load_3(a + 5) >> 2);
+  int64_t a3 = 2097151 & (load_4(a + 7) >> 7);
+  int64_t a4 = 2097151 & (load_4(a + 10) >> 4);
+  int64_t a5 = 2097151 & (load_3(a + 13) >> 1);
+  int64_t a6 = 2097151 & (load_4(a + 15) >> 6);
+  int64_t a7 = 2097151 & (load_3(a + 18) >> 3);
+  int64_t a8 = 2097151 & load_3(a + 21);
+  int64_t a9 = 2097151 & (load_4(a + 23) >> 5);
+  int64_t a10 = 2097151 & (load_3(a + 26) >> 2);
+  int64_t a11 = (load_4(a + 28) >> 7);
+  int64_t b0 = 2097151 & load_3(b);
+  int64_t b1 = 2097151 & (load_4(b + 2) >> 5);
+  int64_t b2 = 2097151 & (load_3(b + 5) >> 2);
+  int64_t b3 = 2097151 & (load_4(b + 7) >> 7);
+  int64_t b4 = 2097151 & (load_4(b + 10) >> 4);
+  int64_t b5 = 2097151 & (load_3(b + 13) >> 1);
+  int64_t b6 = 2097151 & (load_4(b + 15) >> 6);
+  int64_t b7 = 2097151 & (load_3(b + 18) >> 3);
+  int64_t b8 = 2097151 & load_3(b + 21);
+  int64_t b9 = 2097151 & (load_4(b + 23) >> 5);
+  int64_t b10 = 2097151 & (load_3(b + 26) >> 2);
+  int64_t b11 = (load_4(b + 28) >> 7);
+  int64_t c0 = 2097151 & load_3(c);
+  int64_t c1 = 2097151 & (load_4(c + 2) >> 5);
+  int64_t c2 = 2097151 & (load_3(c + 5) >> 2);
+  int64_t c3 = 2097151 & (load_4(c + 7) >> 7);
+  int64_t c4 = 2097151 & (load_4(c + 10) >> 4);
+  int64_t c5 = 2097151 & (load_3(c + 13) >> 1);
+  int64_t c6 = 2097151 & (load_4(c + 15) >> 6);
+  int64_t c7 = 2097151 & (load_3(c + 18) >> 3);
+  int64_t c8 = 2097151 & load_3(c + 21);
+  int64_t c9 = 2097151 & (load_4(c + 23) >> 5);
+  int64_t c10 = 2097151 & (load_3(c + 26) >> 2);
+  int64_t c11 = (load_4(c + 28) >> 7);
+  int64_t s0;
+  int64_t s1;
+  int64_t s2;
+  int64_t s3;
+  int64_t s4;
+  int64_t s5;
+  int64_t s6;
+  int64_t s7;
+  int64_t s8;
+  int64_t s9;
+  int64_t s10;
+  int64_t s11;
+  int64_t s12;
+  int64_t s13;
+  int64_t s14;
+  int64_t s15;
+  int64_t s16;
+  int64_t s17;
+  int64_t s18;
+  int64_t s19;
+  int64_t s20;
+  int64_t s21;
+  int64_t s22;
+  int64_t s23;
+  int64_t carry0;
+  int64_t carry1;
+  int64_t carry2;
+  int64_t carry3;
+  int64_t carry4;
+  int64_t carry5;
+  int64_t carry6;
+  int64_t carry7;
+  int64_t carry8;
+  int64_t carry9;
+  int64_t carry10;
+  int64_t carry11;
+  int64_t carry12;
+  int64_t carry13;
+  int64_t carry14;
+  int64_t carry15;
+  int64_t carry16;
+  int64_t carry17;
+  int64_t carry18;
+  int64_t carry19;
+  int64_t carry20;
+  int64_t carry21;
+  int64_t carry22;
+
+  s0 = c0 - a0*b0;
+  s1 = c1 - (a0*b1 + a1*b0);
+  s2 = c2 - (a0*b2 + a1*b1 + a2*b0);
+  s3 = c3 - (a0*b3 + a1*b2 + a2*b1 + a3*b0);
+  s4 = c4 - (a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0);
+  s5 = c5 - (a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0);
+  s6 = c6 - (a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0);
+  s7 = c7 - (a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0);
+  s8 = c8 - (a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0);
+  s9 = c9 - (a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0);
+  s10 = c10 - (a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0);
+  s11 = c11 - (a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0);
+  s12 = -(a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1);
+  s13 = -(a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2);
+  s14 = -(a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3);
+  s15 = -(a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4);
+  s16 = -(a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5);
+  s17 = -(a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6);
+  s18 = -(a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7);
+  s19 = -(a8*b11 + a9*b10 + a10*b9 + a11*b8);
+  s20 = -(a9*b11 + a10*b10 + a11*b9);
+  s21 = -(a10*b11 + a11*b10);
+  s22 = -a11*b11;
+  s23 = 0;
+
+  carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry12 = (s12 + (1<<20)) >> 21; s13 += carry12; s12 -= carry12 << 21;
+  carry14 = (s14 + (1<<20)) >> 21; s15 += carry14; s14 -= carry14 << 21;
+  carry16 = (s16 + (1<<20)) >> 21; s17 += carry16; s16 -= carry16 << 21;
+  carry18 = (s18 + (1<<20)) >> 21; s19 += carry18; s18 -= carry18 << 21;
+  carry20 = (s20 + (1<<20)) >> 21; s21 += carry20; s20 -= carry20 << 21;
+  carry22 = (s22 + (1<<20)) >> 21; s23 += carry22; s22 -= carry22 << 21;
+
+  carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+  carry13 = (s13 + (1<<20)) >> 21; s14 += carry13; s13 -= carry13 << 21;
+  carry15 = (s15 + (1<<20)) >> 21; s16 += carry15; s15 -= carry15 << 21;
+  carry17 = (s17 + (1<<20)) >> 21; s18 += carry17; s17 -= carry17 << 21;
+  carry19 = (s19 + (1<<20)) >> 21; s20 += carry19; s19 -= carry19 << 21;
+  carry21 = (s21 + (1<<20)) >> 21; s22 += carry21; s21 -= carry21 << 21;
+
+  s11 += s23 * 666643;
+  s12 += s23 * 470296;
+  s13 += s23 * 654183;
+  s14 -= s23 * 997805;
+  s15 += s23 * 136657;
+  s16 -= s23 * 683901;
+
+  s10 += s22 * 666643;
+  s11 += s22 * 470296;
+  s12 += s22 * 654183;
+  s13 -= s22 * 997805;
+  s14 += s22 * 136657;
+  s15 -= s22 * 683901;
+
+  s9 += s21 * 666643;
+  s10 += s21 * 470296;
+  s11 += s21 * 654183;
+  s12 -= s21 * 997805;
+  s13 += s21 * 136657;
+  s14 -= s21 * 683901;
+
+  s8 += s20 * 666643;
+  s9 += s20 * 470296;
+  s10 += s20 * 654183;
+  s11 -= s20 * 997805;
+  s12 += s20 * 136657;
+  s13 -= s20 * 683901;
+
+  s7 += s19 * 666643;
+  s8 += s19 * 470296;
+  s9 += s19 * 654183;
+  s10 -= s19 * 997805;
+  s11 += s19 * 136657;
+  s12 -= s19 * 683901;
+
+  s6 += s18 * 666643;
+  s7 += s18 * 470296;
+  s8 += s18 * 654183;
+  s9 -= s18 * 997805;
+  s10 += s18 * 136657;
+  s11 -= s18 * 683901;
+
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry12 = (s12 + (1<<20)) >> 21; s13 += carry12; s12 -= carry12 << 21;
+  carry14 = (s14 + (1<<20)) >> 21; s15 += carry14; s14 -= carry14 << 21;
+  carry16 = (s16 + (1<<20)) >> 21; s17 += carry16; s16 -= carry16 << 21;
+
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+  carry13 = (s13 + (1<<20)) >> 21; s14 += carry13; s13 -= carry13 << 21;
+  carry15 = (s15 + (1<<20)) >> 21; s16 += carry15; s15 -= carry15 << 21;
+
+  s5 += s17 * 666643;
+  s6 += s17 * 470296;
+  s7 += s17 * 654183;
+  s8 -= s17 * 997805;
+  s9 += s17 * 136657;
+  s10 -= s17 * 683901;
+
+  s4 += s16 * 666643;
+  s5 += s16 * 470296;
+  s6 += s16 * 654183;
+  s7 -= s16 * 997805;
+  s8 += s16 * 136657;
+  s9 -= s16 * 683901;
+
+  s3 += s15 * 666643;
+  s4 += s15 * 470296;
+  s5 += s15 * 654183;
+  s6 -= s15 * 997805;
+  s7 += s15 * 136657;
+  s8 -= s15 * 683901;
+
+  s2 += s14 * 666643;
+  s3 += s14 * 470296;
+  s4 += s14 * 654183;
+  s5 -= s14 * 997805;
+  s6 += s14 * 136657;
+  s7 -= s14 * 683901;
+
+  s1 += s13 * 666643;
+  s2 += s13 * 470296;
+  s3 += s13 * 654183;
+  s4 -= s13 * 997805;
+  s5 += s13 * 136657;
+  s6 -= s13 * 683901;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = (s0 + (1<<20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry2 = (s2 + (1<<20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry4 = (s4 + (1<<20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry6 = (s6 + (1<<20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry8 = (s8 + (1<<20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry10 = (s10 + (1<<20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  carry1 = (s1 + (1<<20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry3 = (s3 + (1<<20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry5 = (s5 + (1<<20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry7 = (s7 + (1<<20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry9 = (s9 + (1<<20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry11 = (s11 + (1<<20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+  s12 = 0;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
+
+  s0 += s12 * 666643;
+  s1 += s12 * 470296;
+  s2 += s12 * 654183;
+  s3 -= s12 * 997805;
+  s4 += s12 * 136657;
+  s5 -= s12 * 683901;
+
+  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
+  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
+  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
+  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
+  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
+  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
+  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
+  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
+  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
+  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
+  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
+
+  s[0] = s0 >> 0;
+  s[1] = s0 >> 8;
+  s[2] = (s0 >> 16) | (s1 << 5);
+  s[3] = s1 >> 3;
+  s[4] = s1 >> 11;
+  s[5] = (s1 >> 19) | (s2 << 2);
+  s[6] = s2 >> 6;
+  s[7] = (s2 >> 14) | (s3 << 7);
+  s[8] = s3 >> 1;
+  s[9] = s3 >> 9;
+  s[10] = (s3 >> 17) | (s4 << 4);
+  s[11] = s4 >> 4;
+  s[12] = s4 >> 12;
+  s[13] = (s4 >> 20) | (s5 << 1);
+  s[14] = s5 >> 7;
+  s[15] = (s5 >> 15) | (s6 << 6);
+  s[16] = s6 >> 2;
+  s[17] = s6 >> 10;
+  s[18] = (s6 >> 18) | (s7 << 3);
+  s[19] = s7 >> 5;
+  s[20] = s7 >> 13;
+  s[21] = s8 >> 0;
+  s[22] = s8 >> 8;
+  s[23] = (s8 >> 16) | (s9 << 5);
+  s[24] = s9 >> 3;
+  s[25] = s9 >> 11;
+  s[26] = (s9 >> 19) | (s10 << 2);
+  s[27] = s10 >> 6;
+  s[28] = (s10 >> 14) | (s11 << 7);
+  s[29] = s11 >> 1;
+  s[30] = s11 >> 9;
+  s[31] = s11 >> 17;
+}
+
+/* Assumes that a != INT64_MIN */
+static int64_t signum(int64_t a) {
+  return (a >> 63) - ((-a) >> 63);
+}
+
+int sc_check(const unsigned char *s) {
+  int64_t s0 = load_4(s);
+  int64_t s1 = load_4(s + 4);
+  int64_t s2 = load_4(s + 8);
+  int64_t s3 = load_4(s + 12);
+  int64_t s4 = load_4(s + 16);
+  int64_t s5 = load_4(s + 20);
+  int64_t s6 = load_4(s + 24);
+  int64_t s7 = load_4(s + 28);
+  return (signum(1559614444 - s0) + (signum(1477600026 - s1) << 1) + (signum(2734136534 - s2) << 2) + (signum(350157278 - s3) << 3) + (signum(-s4) << 4) + (signum(-s5) << 5) + (signum(-s6) << 6) + (signum(268435456 - s7) << 7)) >> 8;
+}
+
+int sc_isnonzero(const unsigned char *s) {
+  return (((int) (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7] | s[8] |
+    s[9] | s[10] | s[11] | s[12] | s[13] | s[14] | s[15] | s[16] | s[17] |
+    s[18] | s[19] | s[20] | s[21] | s[22] | s[23] | s[24] | s[25] | s[26] |
+    s[27] | s[28] | s[29] | s[30] | s[31]) - 1) >> 8) + 1;
+}
\ No newline at end of file
diff --git a/source-code/RuffCT-java/c/crypto-ops.h b/source-code/RuffCT-java/c/crypto-ops.h
new file mode 100644
index 0000000..9a802ff
--- /dev/null
+++ b/source-code/RuffCT-java/c/crypto-ops.h
@@ -0,0 +1,153 @@
+// Copyright (c) 2014-2017, The Monero Project
+//
+// 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. Neither the name of the copyright holder nor the names of its contributors may be
+//    used to endorse or promote products derived from this software without specific
+//    prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR 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.
+//
+// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+
+#pragma once
+
+/* From fe.h */
+
+typedef int32_t fe[10];
+
+/* From ge.h */
+
+typedef struct {
+  fe X;
+  fe Y;
+  fe Z;
+} ge_p2;
+
+typedef struct {
+  fe X;
+  fe Y;
+  fe Z;
+  fe T;
+} ge_p3;
+
+typedef struct {
+  fe X;
+  fe Y;
+  fe Z;
+  fe T;
+} ge_p1p1;
+
+typedef struct {
+  fe yplusx;
+  fe yminusx;
+  fe xy2d;
+} ge_precomp;
+
+typedef struct {
+  fe YplusX;
+  fe YminusX;
+  fe Z;
+  fe T2d;
+} ge_cached;
+
+/* From ge_add.c */
+
+void ge_add(ge_p1p1 *, const ge_p3 *, const ge_cached *);
+
+/* From ge_double_scalarmult.c, modified */
+
+typedef ge_cached ge_dsmp[8];
+extern const ge_precomp ge_Bi[8];
+void ge_dsm_precomp(ge_dsmp r, const ge_p3 *s);
+void ge_double_scalarmult_base_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *);
+
+/* From ge_frombytes.c, modified */
+
+extern const fe fe_sqrtm1;
+extern const fe fe_d;
+int ge_frombytes_vartime(ge_p3 *, const unsigned char *);
+
+/* From ge_p1p1_to_p2.c */
+
+void ge_p1p1_to_p2(ge_p2 *, const ge_p1p1 *);
+
+/* From ge_p1p1_to_p3.c */
+
+void ge_p1p1_to_p3(ge_p3 *, const ge_p1p1 *);
+
+/* From ge_p2_dbl.c */
+
+void ge_p2_dbl(ge_p1p1 *, const ge_p2 *);
+
+/* From ge_p3_to_cached.c */
+
+extern const fe fe_d2;
+void ge_p3_to_cached(ge_cached *, const ge_p3 *);
+
+/* From ge_p3_to_p2.c */
+
+void ge_p3_to_p2(ge_p2 *, const ge_p3 *);
+
+/* From ge_p3_tobytes.c */
+
+void ge_p3_tobytes(unsigned char *, const ge_p3 *);
+
+/* From ge_scalarmult_base.c */
+
+extern const ge_precomp ge_base[32][8];
+void ge_scalarmult_base(ge_p3 *, const unsigned char *);
+
+/* From ge_tobytes.c */
+
+void ge_tobytes(unsigned char *, const ge_p2 *);
+
+/* From sc_reduce.c */
+
+void sc_reduce(unsigned char *);
+
+/* New code */
+
+void ge_scalarmult(ge_p2 *, const unsigned char *, const ge_p3 *);
+void ge_double_scalarmult_precomp_vartime(ge_p2 *, const unsigned char *, const ge_p3 *, const unsigned char *, const ge_dsmp);
+void ge_mul8(ge_p1p1 *, const ge_p2 *);
+extern const fe fe_ma2;
+extern const fe fe_ma;
+extern const fe fe_fffb1;
+extern const fe fe_fffb2;
+extern const fe fe_fffb3;
+extern const fe fe_fffb4;
+void ge_fromfe_frombytes_vartime(ge_p2 *, const unsigned char *);
+void sc_0(unsigned char *);
+void sc_reduce32(unsigned char *);
+void sc_add(unsigned char *, const unsigned char *, const unsigned char *);
+void sc_sub(unsigned char *, const unsigned char *, const unsigned char *);
+void sc_mulsub(unsigned char *, const unsigned char *, const unsigned char *, const unsigned char *);
+int sc_check(const unsigned char *);
+int sc_isnonzero(const unsigned char *); /* Doesn't normalize */
+
+// internal
+uint64_t load_3(const unsigned char *in);
+uint64_t load_4(const unsigned char *in);
+void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q);
+void fe_add(fe h, const fe f, const fe g);
+void fe_tobytes(unsigned char *, const fe);
+void fe_invert(fe out, const fe z);
\ No newline at end of file
diff --git a/source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.c b/source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.c
new file mode 100644
index 0000000..5a93fe9
--- /dev/null
+++ b/source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.c
@@ -0,0 +1,87 @@
+#include "how_monero_hodl_jni_CryptoOpsUtil.h"
+#include <unistd.h>
+#include <stdint.h>
+#include "crypto-ops.h"
+
+JNIEXPORT jbyteArray JNICALL Java_how_monero_hodl_jni_CryptoOpsUtil_scalarMult
+  (JNIEnv *env, jclass cls, jbyteArray pointBytes, jbyteArray scalarBytes) {
+
+  jbyte* pointBytesBuf = (*env)->GetByteArrayElements(env, pointBytes, NULL);
+  jbyte* scalarBytesBuf = (*env)->GetByteArrayElements(env, scalarBytes, NULL);
+
+  ge_p3 pointp3;
+  ge_p2 pointp2;
+  ge_p2 pointp2result;
+
+  ge_frombytes_vartime(&pointp3, (const unsigned char *) pointBytesBuf);
+
+  ge_p3_to_p2(&pointp2, &pointp3);
+
+  ge_scalarmult(&pointp2result, (const unsigned char *) scalarBytesBuf, &pointp3);
+
+  unsigned char resultBytes[32];
+  ge_tobytes(resultBytes, &pointp2result);
+  
+
+  jbyteArray returnData = (*env)->NewByteArray(env, 32);
+  (*env)->SetByteArrayRegion(env, returnData, 0, 32, (jbyte *) resultBytes);
+
+  return returnData;
+
+}
+
+//void ge_scalarmult_base(ge_p3 *h, const unsigned char *a) {
+JNIEXPORT jbyteArray JNICALL Java_how_monero_hodl_jni_CryptoOpsUtil_scalarMultBase
+  (JNIEnv *env, jclass cls, jbyteArray scalarBytes) {
+
+  jbyte* scalarBytesBuf = (*env)->GetByteArrayElements(env, scalarBytes, NULL);
+
+  ge_p3 pointp3result;
+  ge_p2 pointp2result;
+
+  ge_scalarmult_base(&pointp3result, (const unsigned char *) scalarBytesBuf);
+
+  ge_p3_to_p2(&pointp2result, &pointp3result);
+
+  unsigned char resultBytes[32];
+  ge_tobytes(resultBytes, &pointp2result);
+
+
+  jbyteArray returnData = (*env)->NewByteArray(env, 32);
+  (*env)->SetByteArrayRegion(env, returnData, 0, 32, (jbyte *) resultBytes);
+
+  return returnData;
+
+}
+
+
+
+
+//ge_double_scalarmult_base_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b)
+//r = a * A + b * B
+JNIEXPORT jbyteArray JNICALL Java_how_monero_hodl_jni_CryptoOpsUtil_doubleScalarMultBaseVartime
+  (JNIEnv *env, jclass cls, jbyteArray aScalarBytes, jbyteArray pointBytes, jbyteArray bScalarBytes) {
+
+  jbyte* pointBytesBuf = (*env)->GetByteArrayElements(env, pointBytes, NULL);
+  jbyte* aScalarBytesBuf = (*env)->GetByteArrayElements(env, aScalarBytes, NULL);
+  jbyte* bScalarBytesBuf = (*env)->GetByteArrayElements(env, bScalarBytes, NULL);
+
+  ge_p3 pointp3;
+  ge_p2 pointp2;
+  ge_p2 pointp2result;
+
+  ge_frombytes_vartime(&pointp3, (const unsigned char *) pointBytesBuf);
+
+  ge_double_scalarmult_base_vartime(&pointp2result, (const unsigned char *) aScalarBytesBuf, &pointp3, (const unsigned char *) bScalarBytesBuf);
+
+  unsigned char resultBytes[32];
+  ge_tobytes(resultBytes, &pointp2result);
+
+
+  jbyteArray returnData = (*env)->NewByteArray(env, 32);
+  (*env)->SetByteArrayRegion(env, returnData, 0, 32, (jbyte *) resultBytes);
+
+  return returnData;
+
+}
+
diff --git a/source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.h b/source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.h
new file mode 100644
index 0000000..036a416
--- /dev/null
+++ b/source-code/RuffCT-java/c/how_monero_hodl_jni_CryptoOpsUtil.h
@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class how_monero_hodl_jni_CryptoOpsUtil */
+
+#ifndef _Included_how_monero_hodl_jni_CryptoOpsUtil
+#define _Included_how_monero_hodl_jni_CryptoOpsUtil
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     how_monero_hodl_jni_CryptoOpsUtil
+ * Method:    scalarMult
+ * Signature: ([B[B)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_how_monero_hodl_jni_CryptoOpsUtil_scalarMult
+  (JNIEnv *, jclass, jbyteArray, jbyteArray);
+
+/*
+ * Class:     how_monero_hodl_jni_CryptoOpsUtil
+ * Method:    doubleScalarMultBaseVartime
+ * Signature: ([B[B[B)[B
+ */
+JNIEXPORT jbyteArray JNICALL Java_how_monero_hodl_jni_CryptoOpsUtil_doubleScalarMultBaseVartime
+  (JNIEnv *, jclass, jbyteArray, jbyteArray, jbyteArray);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/source-code/RuffCT-java/c/warnings.h b/source-code/RuffCT-java/c/warnings.h
new file mode 100644
index 0000000..df5c7d1
--- /dev/null
+++ b/source-code/RuffCT-java/c/warnings.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#if defined(_MSC_VER)
+
+#define PUSH_WARNINGS __pragma(warning(push))
+#define POP_WARNINGS __pragma(warning(pop))
+#define DISABLE_VS_WARNINGS(w) __pragma(warning(disable: w))
+#define DISABLE_GCC_WARNING(w)
+#define DISABLE_CLANG_WARNING(w)
+#define DISABLE_GCC_AND_CLANG_WARNING(w)
+
+#else
+
+#include <boost/preprocessor/stringize.hpp>
+
+#define PUSH_WARNINGS _Pragma("GCC diagnostic push")
+#define POP_WARNINGS _Pragma("GCC diagnostic pop")
+#define DISABLE_VS_WARNINGS(w)
+
+#if defined(__clang__)
+#define DISABLE_GCC_WARNING(w)
+#define DISABLE_CLANG_WARNING DISABLE_GCC_AND_CLANG_WARNING
+#else
+#define DISABLE_GCC_WARNING DISABLE_GCC_AND_CLANG_WARNING
+#define DISABLE_CLANG_WARNING(w)
+#endif
+
+#define DISABLE_GCC_AND_CLANG_WARNING(w) _Pragma(BOOST_PP_STRINGIZE(GCC diagnostic ignored BOOST_PP_STRINGIZE(-W##w)))
+
+#endif
diff --git a/source-code/RuffCT-java/doc/readme.txt b/source-code/RuffCT-java/doc/readme.txt
new file mode 100644
index 0000000..bb328ce
--- /dev/null
+++ b/source-code/RuffCT-java/doc/readme.txt
@@ -0,0 +1,19 @@
+Instructions for compiling the Ed25519 native library
+-----------------------------------------------------
+
+Note: You don't need to do any of this if you don't want to. The code will automatically fall back to a pure Java Ed25519 implementation.
+
+
+To compile the JNI C library:
+
+cd <path to RuffCT-java/c directory>
+
+# replace <OS> with darwin on OSX, or with linux on Linux.
+gcc -fPIC -c how_monero_hodl_jni_CryptoOpsUtil.c crypto-ops.c crypto-ops-data.c -I /<path to jdk>/include/<OS>/ -I /<path to jdk>/include
+
+gcc -dynamiclib -o libcryptoopsutil.jnilib how_monero_hodl_jni_CryptoOpsUtil.o crypto-ops.o crypto-ops-data.o -framework JavaVM
+
+When running Java code that uses this JNI library, provide the following command line argument:
+
+-Djava.library.path=/<path to directory containing libcryptoopsutil.jnilib>
+
diff --git a/source-code/RuffCT-java/lib/commons-codec-1.10.jar b/source-code/RuffCT-java/lib/commons-codec-1.10.jar
new file mode 100644
index 0000000000000000000000000000000000000000..1d7417c4031324cc6577a306cde57ae220f55523
GIT binary patch
literal 284184
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%0AwK_sw$c<OH+4j&x;cX@c=K%1=AURB*7Pw
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

literal 0
HcmV?d00001

diff --git a/source-code/RuffCT-java/lib/commons-pool2-2.4.2.jar b/source-code/RuffCT-java/lib/commons-pool2-2.4.2.jar
new file mode 100644
index 0000000000000000000000000000000000000000..fdf8b6faafa2fdbbc8fc6e24595c623232abaec6
GIT binary patch
literal 111969
zcmbrkW3VXUmMpmU*|u%l=GnGw+qP}nwr$(Ct+Q>;xqZ8P-tC#WFXBx_RMqz*S5!nr
z=C^WXm7F9HFeJb~4%duNk^fly=LO>LU0PU)pGI6pgih{1Vc-BRe__BflQ?R>002lq
z005BxSC}-vjJSxfq7tpNNVL+r%>g~Kx99<0RSzs{I0ST&Kt_r}IBcdL#<Zp}HqsWU
z%TbzjkB<$a*rN54n0$)ob^EDJ4m}AQVe@M%efiRaD6RcP^JX?Aq5o(CR5B!<b+z=T
z$%7p`d<uOJicn@92Fghj2QEy=;xWA90la5Z@y|VSElXYrH7KH8yPG4<s75jIJZHhv
zM)baBJKBlxFgN0;b_8uml)MP)ZjM({k&4&{nol`EthxmmXB-yAues~y4x7qDr%jz&
z)!OI-V#Ip66m@(M2NbhFQGR8K?iMLvFkc-%l?9Q!CsMWo{(Piqe$({j?2}&9!v^wH
zEy`f=D4C#kHM<mJq$6_NKfnCZ2$#7A2_}r%I{FLGzl#0T@7|MNL?F^;RBk)TX)jcJ
z@x`sFbC|xT1oo5$5}X9x(8pN-2}T#2{r%=?C1-Cgi9H+2?uMSP#0*OMs6rU=L5v0u
zEgNPvT)OEnmwO9_h#o8MAi<4LsN?5Cez=t8gO9Lbx#@6?-y-$j>-cRkzms($lCaWO
zk8tc-d=R%z+{y)*Q!EFk&I9W?XRT@;{&1rRo))6O=f0(S7{X0~JJs?F!BRa*&3wEH
zXk_$EH2v!4ok$5pR5KC4X+3sp3e=V;-+VWs>8ZN4?(n5wqKem3XF!6C#Jlz}DHS`_
z&a(>Ef1!q2Jn>@1`n@0ucRk$qrN1Rpd+f5Y3cl1*|A4cI>ri&%(F3M9_kPl+9Nj#{
zR)%P)2i!<FCL896iqwJziPEsow;rs3aw_JB7jQaNE14x)`_*Gy%T%@c4ftP71ONz0
z`&YsO|7D`BgXw>B_5X>0`cH(uoxY)&@xK8g{VUMW*4o<E#_@kC2>l<=#`u3Pu(P$b
zV*EE{xc{!q+}h6S-_+v$yIMO3TQ~RrE(ZUPcjdie?g$AF01!*_KU6CvE+{OcC`{|*
z=CrM$>4?>e;`36=$FW$>+*pvvEUtMP-g1@}E@dvpVMCe-W``zOphJtUr;7Y>=}Fs0
zBR+opSe+qdnGhKm==e6{3i}-Vy0vRWHW`h`)}d6bNSEV&k7k_BTK#JBsZ8LLU`_Xj
z-|Jynb(go@Y|*(>l}`8i<)gmHdSs+Vm$fU|^X(Vfjx5?ussUp!s;$lGYU9WHA1{iX
z9onJL<0kmX^X-G@_d%@Bj=a(u)5(wFt0%C}5MVDJ)YXcW>T5m@HlO`wj5nm{pv|!o
z1Wgjn`F?RO<5rom7Q|w6DjgCFL*W}Gf~pO5#U~OUZ8!N>t72`_r;5>=V5fos8f6j{
zuzDpDs5i_b&Ba=_1H6HyTmC`ElB?E=KQT{?&qDPJSFkFzY}xc5D(Zlg{Q}!KL06s8
z_3yh)xv7pe!maVye$uNd0|PG7aPC}2kY&wQLrFrp<nyg=d<!}d>Iq4CAZdU(PX^H3
zdnij2cPn~xGZ`iD3l+Ed1jSI?Fg}~DDAZKbE|wZ}<G;zDJ2vaEckHNlFeN>%JUW@+
z8OAH-_xnYO=!}I#?GFTW?-d$VTL50vZxJc;HNRa6IEf@6WJXWBkiWyJ^@dei9IEHs
z+iEW-qgAWmKcWi`17FN_#Ty(auUJHo#M<ZbAlgT*A7M$BJ3uY3lW620hh25Q-V$1v
z^l(|d;Fnx$fGP{&`lMCb@ezb-l%Pb&S=t=%c@~-4KUEiFhd`=^eb?uWubp4vtnc$G
zagEjEM?=x_aQQX=$RW&mR%RFam9ifa<F{r7Z6LZ(5r7bMw~WTOG*+mr3^=?ulScXu
z(6p2+*fEQ%qhMEUHk^+m#|0IzWSc#z9A58<nqJt%?jM^8+DU+{z_p78bfNp?fxqcq
zI@_MR+DR5NzP4$9K?&?DIj`fsa@mRQ%K0p<SnZEG5NXbF5`zl~U*3vi{EFx?{~Xm2
z>pvl|AHMa|8JTAwuy(;jnuv4wPO}UHW(V@(VYiFXv0DHWu?=-#cWtd$P;d&>_PL53
z@!<pv=J688M1s{XDn_2OW*3nHV9ox$qM`yo45z^6upIO`Ygf+4JPbfx3`c@tPmqU|
z28bJTJCYI*%95_^g0q6!AUC%X+2#jSCfdH;KT`*vhcl3cc9593Ez>^}8z&XLu1iX#
zMOBH{7Xc@c$G>&P{>v`*f%UfZC1DMe|1R0-tSd#Ket?JmoxlUV(vHdj?PS2Ga8eo+
zbgv550>G$587@OBTpqgQ&YcihZEfuqLdcEnbp0q;KUoo$Fu00NpJ`D}p^ve9h33lP
z;z5xcmR%Wcp%;Gi<Y8sd?74^NuE#>HIhpgMbVFP+KENg4&?;GZ8t^{vODIH>zez8v
z$)S=qaFGQdzS>w^xM0k}i1{L1!3@Xv;^>JD{J3W%_vzIhb|`83ITG{{0?opF2`CuG
zOMpSkofMH6qXniqU^iExXDp#WaEYzX8A)&RiK-744%gpR&ME$+C`T4#Bh2nINClWq
zvE8#p<46cZKD}ksO_ze+1g69-qsvRZ8LiN*BtCWciFbgJS^<VQj|E@^#6zD1E26M_
z*qJ6iw&!UDEe)i7UYQYjquh}~eeAo&tp!>5YU0K3Cqc$9tfPMzMouCwCAms0c&p#p
z;?e;;G-H#Bnt)_k><73Lj|#6bd92x?5Dg;=x&XhCbpwXoW}U0zzUeUKc42WWHps1<
zxqMVFXkT5Bdq93mCbjz<hxkTiLl)edwZ4$AJ!$bWr4CO3!CNSV2P+(0rI2GyGlE-n
zv~Urb_h9vIjR5Gkq`LzUA+Jp=D+-pJNilwoA0wrJgB<5B8A-mP?<4$g7#mH@I<{0x
z;x6@f26%5K)Zc{F1J=7khhQcoDLiPZc$KD^>D1E>N-A<B!Y26s@V_{bB8hYWj^Je=
zplwSz>!iSc`}LG;SRP?ko7av#z{*77)%rcHv9QXV;AdXjDQkk{GQ)R*DH6uzDmm`{
z?1$uU2B5?lazz~?6-nClT&mWgR)PC>SP}z!e1bZiC|sUl$x`3<(3HL*M21u6Ub&TI
zA+^*6erIr;$q=4><GG#wN-5V4g#e`yMI%QfKWiiCK<47LJmJZ^#J3{CL$2@2gMXSY
zsfj=3N05W*qx+%5kEqAtB0caUo5(>yoC-?JhgcKUS8d;9S+mJN&5}_Oxw@}Nj$YEU
z^<m}0R*MfhT8VC37kK6*t1h{!qREpzGfRSPrjz}Ia)q$2Gf%D!1Muw=Bdjbn9)%k4
zZyS7CMqM&ZU{jj0trt}d(qKbv#QehZBmff&X28i_IA^KEUq$pKjeCgx5T;a%*VH`R
zLcxHJmCwL^L-GZkm7E{zzH|;1wO-1I1W=<U&t>mNpyUO!Q$kX+Kh^w0Tq-rg5o8GB
zYZYD|fL>xSC<dKG!Cc6zC{P&hFqPWXSJB3)7g6vcP$h;2t_h+WvKP4mV!lSE0u8bo
zGc0hNn9pF{og5luHA)W5UIx^Pu{X~|9jg`4gur?Uctjo(H{bV@sTLn<&6Ije7FQ)!
z4Ua(_yrM$!>|l*~7T(qacIAO`aTVNkl=uv9Zn=cEeCPwTRk0riuEFsXy-o0)jjg2M
z&3;YnlgEhptYz$Zzeg%>epOiKdzv3J3?J~!--=GQ#nWNs8PtZpK#rvO!h#`KpS3?@
z+|sCwL#&42=D0GT=n8;|gGal`Zj<(_pbuJdx&C%u8=qPQ(p@n=9s+Wnwm9=QRxJL^
znIm-hYib%+p=lidgmMTtjS>boX+|Q`j7z!Qow$tT)128dNr1{@ukGjDa^c&bud8V%
z;PIEW_-=+jpSWV}jo$ZH6Zm^lC0S}IpUL5n)uq6A6A>O$$W9kk>Ig~1Gww_bxJ%#|
zulP<u2a;DA;T*R6jV{G{Kp4>pu$$#x5;v(uRv-qznLUse6M2RW&JA<;6<dv*pK*b2
z_+$57xUhLaHApjh<65PVZj`%g2TK!-cHLGJ$DV;qDiyJe!QjA7epl4+W|dUjM+EOB
z!*AHkQ)1LfL8Om9gWBi^tL5oTzDVwSDx9!yd7)y{RE$aaoV=~z^{|2KUes6(6}P*n
zAKBc5Oceaiw)u49K>^h_eF$&qWw`@)BFg107p?v+u!N)lP%pmy*`sM9ps<3_^n>e0
z1?DJ^Qd2-yzSzE2X{FaRGa2O0C_<X%YO}z5X1B@hzk**Kk0=ktWQZ(r>b97md840a
zv@q(^u4=}XOq(baHkOvCadXUs@6WZQND@LdO&7b0`o^u7^B_f6q8p707SKfl>!q%g
zVmST%1$zojMt6bjYBSXGup;4Tl;lNa6l3e;%j>^L!q-8>vuv?r)QwoDCPvg`V`>l=
zM{#1oIHaCb-X7n2&8NAi30WHb^bw@AEA2kUE>BAah3}q2E+!}J6hq8AOP*mT!OKrP
z$iZZkBj^I?VHi_iqtmo+{gA8BH49iCoseI_atW5=%SDw<;AQ);U<{TuG<sAyuX#ST
z`(6No{r%X3hNDDPL*g0@C$hJ}^Y_1kF&9(qq6u2r*&?GrOLZoA_oQ}xfwR4!9|j4`
z0!IiG6f!NA@w%T|Mb+kTUV$Y!+mRuA*AJeUEr3)&cjN~EyQvHo{S!A5->k+;_Ske`
zW|9C}mUc%DG`K9XZx>on@%()Qv|$+_3Mwjr*y@(t4I`8F{JO-ZB{Kq0#`Sq$v=yFy
zIS=Re+ec>njy|09ccing0g3yaK|O56fmlm6xz33Ga(MN<{U_A(&b~oS>g1*ITw#m$
z-tuj;)qwFw`I9?S7ifFl3+OX!Q9f0s07A9GN-Bdf?4*csZwW9%ixGuI=o#6dKkcRQ
zBhwsEC0BR)#1^gbEq3u`@y(myuhF&L@lQ!yZOmN%sznyCHGO$FPte6nbHi{=1Yy4#
zoHio3=B2*2NmZ<A@zPw|oBnmy8z{}P%{ey>?HW922RN(V*ob+~fzuXpHXus=jd)=4
zppe7L36=#Oi?yf0CE#KzfwO4@>g+o!vAFhG@YIxky!P>d&I^`!P=H0F+L1r`fT5xT
z_*nW!3@!ywmxcKX7$<*mMucXc6zW&mq$p^$1{>y@YB_DB+om?ONW1<0!@66qUV$Ie
zmq=~cT)cy2mgtaYWSw!SEk1h(&hK2jsGPuif5G&<29d=PA40yGWX*QmnOl2jHxm4A
z>^&FAo0Y~*Q!#S<7O!MK;1JUeH-gh((4diYth4Ati%HiLwPC~R5zWIxk<_Yn(Wvt`
ztZffdleP?5Xxf}^Bsh)zdaOafPS%o*OVV5%pMU}@7p`zcfg@lZN*&4V$CS!=tBW4#
zqmYQbbT<B5RDeLXRxsNtY+%?C0>sBd{;X7l(DMe5IVW+Ak5x8&pe}@gNf;e&)4ty$
z1_}n!d{n?k!`Woza;D;U_JK>@X*Hv%!LvH8AgCHPQTr6+(wtzaf0!LXc2uYako-6o
z<XVak1h3qnFXnIf>`Pl{dNdM14Xjp3&uFJA?i9%nXy_1J;@<9+p|ZdphF?@U@y)F0
zchY%W1hynZ0^@m@`p>-{MI<+kS_$GEKP(Y258i7L#E_yAdWM`9Xe0z4nJFd)`euXb
zO&3@WnMk=$xz<Z!TFRAR{y^3Om}q5VWJ`9E5JMhuYA_T#+FEzeJR}<S8J$hks~;0s
z*mJV!;Bc>tfpO-6BuEpb@0!l1&5x8pf!#X!L_0riS=v2*99_fWrhh%4bi|c__?3bE
zybF9^;C_o#Tpem7es25j2MqLzFl3PeYgpr3Qa9~ur&%DEC)PGwP?F{G@ij1=)!wEk
z@EgVWe0U@K$C4uTY~TpcBUHTC&|Mad9vo~m`G(&>8F63+{hTYvwaQpm0C@n$10est
z*zXLivNCmTOryF6aQjB56DTh?1py$_(?7foh{%0*T<|-1q#lJ4!eCUf=?pWu7GQu?
zt)xoUQP0O($O|6~CX$N*T@C9eszMpel>NDfs(|n>J@oEs)oOE%K1^pmifh^0i)H~6
z?2!8W1K`^mxhrNn_i&c-<m#~nCZ7BxHF!&Lk0vk-!VACK-t`G69OMJ+?>Cu>mkWkj
ztGOG3$UG7jfh<~7vs-1RK?+9H2|v~Vwg26&Dr4){Ih(pjC6}J!1tI7g;rZ%1BPYeG
zz~wy%K?idWmSeE@L-YkZlsVO+WRWKT?ohx2&t%u+vMtyLNaEKphugb;T1paL+qvjC
zFG2^9M{2tx%|H8cBR}4`xrt@Zqdn!5zBTKU9ueCbnVVYsDlfB!we6#@d^s|g3B5X2
zDCUYn78>YUd>fs(U%M|1>x1^Z@n~sZNIVL6ROq5*@nz|*nU^l)<Ky8-=A%Jd)ARl9
z$>2ToR{1)g;d9!_n^oh`c{K{=)egOVodWtDm&QJxXHPGp1=)f~`O5*sr*avFD5khB
z4(;c^bC!Q*2jSO&YF>W>hw8uQKf;m!4hCgpmHws&|A-E}r|Mw`@ZkaGvTNJq!Tee6
z?JYCd+3J7u?NJja5!s1-dPa{de;rG&tHshU_9#}=!3#4e`lQskhsa;<GhggOUt&q?
zdKPlID#F(+B`{%=L)5>^5uiCtGX@zMI;!P=mkol6Oq})Az54d|Go3~%bi11KN-3-_
z$w#35S11Gy@Q+}o%;SwV@NYax0uBJc_3u&=0ewefNn>|oBe}mhjj@refrYW5lZd{d
zldXe0t)Z2^qhqs@wk#4qa(AP)nYv_T-V;=Egn(vTGNz$HCML`Mf`~M}^pW*ijB)-S
zo0d(3pG3I#fN;2P0N<p$sq2OXxMGr9#+R9H*IAC2>#5K8uR}6~<MVP6#ip8giP+-?
z1QH$z*@C8VvktQssn#L#gmD#&a@(p5y`-u%n!B3CEu<OPT}ymM-FoPqGKbNm5B#!@
z50lLKhlt}PXB$UD-LsHoD~;+F8%-6W+TIguc~l<x55MZN?p-eUkj`P4RR<3ck#e7<
z9Pfb7d#||RYzO^P4RSz_4Le|0z~+Q<>|5GZtS;r%uL}Ve_8~FPk9GJK%K%CVcM+yd
zlkVZ|7@#;c&@pws!gHd~%_vAB{h#vpCN)1R6F(LccZM@D%X`87(A!Q}VcGBGze5oI
zvLU(b1idDb^=iEb8SyXzPt1A&w-mIY29783Wup1?<TvS?5T%5Z`(V|+nwC&#=P81J
zEFycQ$xBjL(e&n@o-z6QPXjeIXQ3+Q@Nb5i=oV{dY(cB^d(@I2*Hu<x`>X=w$VF`J
zXvGK{dJmTx&q*_zI+(1z@DIJFTQt(HX$wr-9pruSK11}tXpc*1ms&lHE2V3$dRsff
zBK_>=fJrA1%Pl&;>|p6f;RGSd#OXwVhp_T7>NyrSNNrJ2B>th@-5^(}k1)|LsLDQz
z_N@&Dic#b@&OV*{HANrgKHBb0C$KjmU0RG2)Oai<2efaV4m^6O*wB#8YPTRsA4Xy$
z!2HJ)a+o$DU1i294d_bTDD+Xr&(KHk9OOF)uJF7vT~H-2?qUH5W%7JTW3gbw3ONB3
ziM)YR9e%5)E5Ic>Z-Deh;kH!j10z!P33r!2aR18fTC;qM!@u0F00jW}o8$dQ;Q60%
z=6|J>{|p`f!R>z%`XA)}C!4bqHUGip(Vxcdh7`?q@*VPm1r_V&oqY3O<e-YfYZ3u)
z3Fj^fsHxi~u9|m+uQ*-=^5VqtuD_G+q&jJ6BE=5{J56WO-?AOQO;28Ob9(`f>dFL!
zO~3`mMC??B0WgwLUkJy9?RACG;RxN(`wPKwnSxjb9fXqoyGw<2*qmGY;KfQ<F#;-8
zl<A{TofW%mu9SncPf!B6?+S|T4HGvzv^;0>It#g=%L|NG8@gtiapIS&x_Ks@8k{E?
z9oA8<!=fi@=C;_HbPUq2PrYhf)zbM1-W=S^`HIwr8>}xCx%%kSrBGbm6HQ@kRvP|h
zjS9IpmIc=rLXmqAgL2}v>08!oNsLKS2$5nf_@V0r(j;H_<<jipoy80#nbJ0A%GVJy
z7|o<w3zprKngkT9;TtYAmNh#`<II9~nUH(S7N<&OED#}O*Hs=&`Hjpd$y_mY+tD5L
z7$K6htGqo2&a&mLZ}$bg0|C2Fw!&W)6(p7VmIl(P7^Lqgvtka=MCj23A^IV~iApz8
zrSi3!EmRds)zifb+T(_5d<pu`MjsveVVG=XM5<1$@{x?v15H~&!ZedgvJ{hkXaS%O
z9nK+dfF7kHvaruei>`nYHPx9c8J>1AIZ2Qqj*pu00&|;*tmgthhD{z2!PI=xcmc&g
zyZP92lz#T-h3Ij7@E>7`D3&)vz@+C~%ctp}0nn%R{xef?bYk(5Z9*vllgRA>m8L=_
z6bbBH0?*hr?#ifVR7?~Tt2WO2DP*gP=?9fk=Bgskp8!>#epQ!6ISU3n4@;4_1a;0~
zdv_EEk+=p+qEQ}0=_@|L9&m9#BYlqxzH_!NWW6WzgXen~ia&nvEuOFXc)zdiMvo)!
z(k63S@*mk=kE);c1bDT^2Bis?QS>^M8R2Dr_|Bk0V&QipL}3wlc+IrY#&Pp``~tzX
zG}t^HhP*irbYh$;8CiF_ofUGQyE}t7t8cP<|5YvM$HZq!f7K!n1^~eNzf;TqXA`JS
zlC)jqgCG65WVbh5C~6|<nkekD2t{md$B!pR%uA6RDvb63pv4+3q7}DVm%-l+2hxfd
z@`vjS6^QynOk7{Fp+Lvg$kh3>JLR$J`~Ce6lNX?kVV-0Z=5__QiI^isE;)zJ$kJ%*
z;T)1wfXfg@SKZPtXO`xD_>{NGm_=&qOwq7W=d{Cf5OY2|%0JJ=svROR=)j5D+U{dz
z*0Fr4?ycHLQ>i(xW4G!inKSRR$jRVjn|qma99025?A{;GgW#Q^R=r}Sa!H&%j}z!g
zTwhZbjl_GTk@~`=(Ux+5zoWWc$CC(5az$?hH!YLv2^88=gp#aOR!j%micuk<#K+TF
zw_YG-q)JeoHc2)-$@9GqE(l$Lh^G?M=^~(EgH>~?RtQm5G-ULK7Bs(aHC$uOrEaV-
zB{A^i!|_INlVSaSHlFF8n<mP2?{qk|4_&M0xSAd5RmPGlOef2O88NEUc6gu9V&`PI
z`<Od1f&o`>)#wmcmox}Tdnz}i9Fkph6QOThZ}wg!USXp4QA_XbeL(sZw2%iT>03(D
zpg?b8{+vZklu7#q{J}2+$rzoE?}nFZHWdstMw>W2D-7v3_L)MUmux_2yizBV<42X0
z@0cgX-Yc@>yoDbCw^JBan?RE+Ly$%I<PE5k>2FGOYXu(5XPeOLuW2~ei63HSTKntH
zAPqb6W5;?cpW$~Zm6W5axfZZZf^V#h1h^j<^TP|oK`Y2XKeT)rVlenWE({Du-1s;9
zZ_(aeb0fIfaGy^8eEL_`{18>||6^C@*4P_`1_A)+{>xLQf5+4R_$I_}pl@SjYh!FA
zXlr9)Zu-x?Jvnhx28kbi^k=cKIx<**gQ}pwnxl#km;WfvOsoQ(1HElCC7-&fbNU)}
zkmxMgb`NMQ7!e{IlaA$Xz%rL_ci?rp1-Uaj!|h>uifwnF?I->1`D4%&;4m#xpuZVh
z#!xHmazF~)ktiw?VQb(Ixj-8cw`*`Zv>|1bC$u&yT}G!DYb6F&Nk1EEG{<7Y)G4%8
zc7Ct^OMD3yEE_Y?C<Z6b=A=h_rg5kP8hTPddhH*2A+xus1sod&V#dvlnv#o>_n`s@
zlow(_%k>kgmXy=Ul$6c+Xl_9>2{tFwjQ(7yYDVCbX&4La$um%2En1WI<|<>Tqj1xy
zEETn7YVE4Z8NbHjO=yderuzz&1qV&7>Ga_O^EHccW~jpo9cq*%%;PR|s|)vE=hKd-
z=1lrwK}F}yKM06oHBcLX>gk*yU`EOpgdUidOGc!Kh#jT%A~b|?TJZP`lnLdXF=>CE
z$dl6!xh^D1GPV*7RzY0IitP)mxstWa+ZJ3jPoinljj2ZQ&JGSZxm6iSImyq2QUg%4
z<l&J@P^=*j*ab;Qfc2%Q+F~){Su68!a3B#0-5z^&fVw4G-T0aAFAQ8VPqR2z7jpjG
z5^e`qww@Z(aiFe76sgaKi$xljD)H`!R~y9j6bj_B1Lv}1O?w@<U5k-9jk-BYhuVz>
zb=m+TCB*$HQHB7_05m)&s%!dz=hgo_XJvH=^GgF;#6!^F;(G-zg+)N9Ipb>8fm?S3
zPvntR4uS6%yr>iO*2zZ$6FcCF#+PXYdY_Xe8dRUCa8fl#_UwQ3e0{bQ7OZhRs6Eo7
zaretmPAH|=AS+n(4)P8_cJ5|MV!Bj0s}fSC3QLEVV#ZAhc<siwREUFefbT^MQk*eC
zic>>5BBT}P`=t}dLoo(VJNb_lTGB%UM3@_6!5vCDAwS)iC54zmjo2L2eTc(zrr%Iy
zL{VIdpU{p6AFnun2*UyZqm=C`)P1l+4=W%-t_U-3G9}^@<-H&zBdIF!1<0E?M{kB7
zaYaO#&CK%ee{BNBpjYwgf5o-`cN~!T--_!WzDd;B#@NB!@c*_?#KJD-hEC?THsVgk
z4*Gw`gMVtSIz>})k?*gck~B0Fj5sEw+(BrfnIqo;;ioMKj+p7Y-HU=F(4I8NSYkGI
z^12uA4an_7!*ddGdhEYjhbzvJ26_x&LdlkCG?iuTeb{xJVg0&$xMTw;REr{rsl?>8
zlh#;e+3Hi{8nIWDAuD28j{#~Up;M$RIc6`M?^Z`?Rh}wu8=RxPXYK9nn4#&NnoHMY
zW0NX8fZ9wumZkEFB4{Coj5$~3o}piN^W{GE02!oCU%_OfZdG&2Zjg7-_FQt~Q_ZO@
z7)?zbB|RIQYeu5Gbew(Ej?FIx?L01SUhHi9;nZ8wMLPC>fKL7SEFw>_GTfkk;M&^H
zsjGk<PxQ0j2lovi$lOB8rzkE*0W}_(R^){{3K~SC8dkoh$*g2`?{KIw-k>TWJK}bt
zbbx~n-^3cY55BxIl9}a1wjE)eG?t+{c`mTaLy*k8u1>w{Y9cY#r$Y#^Fmi!F(!H0y
z9Or37o(pX0sw9*wmi;y?9Vd20Zp*E<zPUECNCnNcc>Z=yEw?mrkN^FEK{&o7SdoS#
zr4VEjE)*tJX;~>>&cLJN#O4N{;Ii4+472G3Il}7FzW(+*Cb{KEg*$Q<VjbDLQ-z0U
z@QgiZkTXV4N%U8?k}l2zdOqQ$8lQ|P9PC9KS+#!D+1MW8pq`|GlUCdkG<3-N&-{zi
z0H&ibSObSTG};S%jEtvXs{E#0=*f^_>cElv`hkoNdvG>=w{y0-qs?>V+z7=x&kaC5
z0)Ofh{kry}kC`A_bkf!zcUwXNOMaK69??0`o<bw<A_jp&F%L5&>MsoI^L=Td5MF-w
zKp~G;sAmQ%!go}A4*9@wFb}?dhK^_Ptb25ZVn0~ny}X7PpW%_ZgFW``-^#&<z%oGo
zB*Jxl2@accvMzMd%gUw$$`BiTSfFDicW5*bW#~%wD#IN3sMi$YdB_X<G9_lD{T~Z>
z2=1~X#B%7#GR25x^OaBnEMLyJ80`@_gm}(G+9WQtLl!~NKK(u+t}s_<ELPRw)xlPz
znk-2fFzI)cOe42A8ihxxENgB^tU6?G+;4whXu|0wNh_1rnu#Uj@&py-+NFvSS;<j4
zbUPQuH*mN7bzur4HUx<7z_DJJ01jc`{G{J^Uly<r(7y^ek4WMD&tCyw{OykX|9=Gh
zU%D+;)>Xt(M*g8`uZyE43BGS_3d;-OTVIQ)7AW*<Qb6h>^;^;KSl1d$nYKB(2Azod
zLiB;iv1fMilFM}(p*!r9S$1Rtgh+gcH%;)I<vHDQoVodI|Jc<1{RzGY+QMlEF;3ob
z=aLk|wtO#x%;d%vq1je_*iBB+RlC+0!Bct|v!Tezd)6147F&P>713CBNQ5Jaxe*ZX
zCzgz5s)(oE@*c4ja-gZpVBXQY@yLA!W|1}p+tL5yAjdAase1WO=>X)47^@`ciPb8s
z0;bJqW&?eFzCVqJdwxEZb*DkG))p$`Xe-WvQz=g*7nat>g_a>BN&~33`EJWESqu6U
z?S_ssyInNmwnZuILl(=Rvf7<<{qvza0j7{shxYZQ$KDm9hN}fk)izCPQ9<8#irv58
z0=Bi8hT@*xbjX#Xy`FR8X?YrjDC&4pjiw$Vh;ey|bZEdTxiI7(kM<Li@*C4;UxdG-
zlwq>h{WLu>bRhZVC*@-0JkQ!H2{N8077$&ngI&r9vdoWX`QT`=&W6ikJVAL!8vH+A
zg+w>_K&d!YV5;^NBYFs!f#Bj;;s!hXVWKR~%>Cy3NO=p%b)scQPeE}Hpnzg;i~UC@
z7OsBCzr?YR`&_27w3W2aZkB~psl;ybHlXV{YxdkFs+Cg|+WN=e9J~m<bs{4cI;jGL
zXJLjK^J*9aoiCoM?HVDplw@tx2TJc`7W_^#vSyhW#On=hAbVc;uE2j;Ktx<k_=c6w
zLR`KHDMeS74jvR81ufpj-5;>cOv-(tn9CC_Q7YXjmEzfr-oeUzhz{~~?O&B?nntAZ
zJOarVp$8?E9-4TbWHfE#W64cNAX})Gdlb!&i`T?utNkvmsB(o|rIU=W-#+dly2b1s
z-+uJ5tWV3pD$qFFjpUuXMQRo?9S$cY?F~$M#ibc_iqP|0VO`)qa)n0RR$U%|ulYq#
zTxH%S(v<%wupV|V#4B34(p-CvO0@HU7N*p<5N?~_&38$cRwj?q^aahs^h9M44!OZ5
zZrczLW4KXjrmBG=6g!tIPh1~Gq%|hx9T<t?q+DE2gkHL^@kQiRvov=38>cXtSB_%p
zP@v89jH^k;uv6F+$6gGQK3t%!5&qQ>#p_7+EIzdj`3;LGNI!~UXq{eaC4zX-J`zK$
z9(RiAy`ny{P1Y&ISwGm>F#BmA0c!~LaukWx@7MOjnzGnNufgg-PziZA(a|60DES1`
zxfuH{{w2uaN75a_i*brrL^a8-81D$TD%!hQ%kbR1A979|!g3=1-rsXARfY*VBNW;Q
zf10#z@EsTR(bCXiD@)`<r}iLk|A*85f$4`+_&X5-{rz=O{Qqz-5jQfnaWZ#uS9Q?0
zvoroLFQ7DO^VbXT$Xs=anVW9|9K(QQ0b7(`;Yax0N}%8>6yVoqwiONy*GK=sKQ{FP
z`2|s*hX_9OtNx@A-qp(Rco@`Ke>eSu^Cj!<b@k@vH-MF4B>>3jL!5oSpS0H0fdgtr
zP?q@zU?U8zeslAv4&%0gi>~k1=Anq4pg@oHvo&fIw}hB0=h66*)F$)=;!5*dfP-ql
zmYoZQXS?yn=e*h4p-$*i6?`8<+OlyD#dEzPENF@B`n0wUm<hel1;grbPLRQ3OZ#eF
z+Kr<`+onTT&y1D{bej$PV7}o;$0hqpiw&%{Wbd?>Pp)FHxlki_{@RI@DrPS;&(PWz
z*Vqg{z>-)&2fTP;Fgy{P-ZwrXadmPg@;;r&)cp^^E)zrq5;X8nu}fdnDO@_%Z0gMe
zzC>c4#j$W`vDxu$Sd+%-yH{6FS<#$}NKXGv`Y!`Rf>9cI6(PW5LdG!@d5VGvDs`>o
zId*_);;JcF)QIJ5$fi-BzR)Aa!wazRI;dpg^4hOaJ9bG`p?oUA+)6!3R?$x6p=E-0
zyRa4E`^T}8F;q%j0_6(bxQ$Y6Ovy)HDb#zav3tv-W40zR33=9(a=HQKC2woW64H9F
zfG(Lz#Fz!my&VFo_-SQcq9>U1SO^P|*W*?K4Tg#E`IQoGi?M6;m{A<}DWU4`ASr3#
zL)Wp18-md7<M3-d(zY@PG!!g|RB+K~dzraH{ALeDXm7+)gFBmHVr2g(^N{{;U?Afd
ze?-@qCJyQ3`3vamth!S>Vx_om>b4-1qi=wJZGv(kA5@Ben;^j7;7{oPkhqFY`c96D
zf9<RBKmBWQqO2{FDEdh5-OR??HZT$*SQ(7}NvyR5tG$33zH`8vVgU9xNkovxxk)!9
z)TOqiYxG7=JmJ#<6q-$#q%4n;MZi*p7r;BnJHk5#dmL|L8!#~}c~ukFO&8O{)Qz{v
z^YP_x9e^@@1}GpCSno82c_&bo<(ae2ZZfcN^<>V<0*)t+)P66}Q;-EXn%YaDU&*$a
zFV&$b>(Sb?O+dTXA^C@+B`9FltE_aS(oDB(bl_uSU-Jm?lfODHTeEJ;k#-#m=PCRf
zr}4L#t7D9J9m^JNz<i8c0{SY`Z8{IrVW=E>?7hgG{$ygk;BfT}Ggy?MY3)W|{(3m}
zrl3|`fpDQPL%7mge9Fe!ehxvZQOCk%0-Ek?>2juWQtnMfrd1`k@!ztr8lJbn4w}N6
z<Xxt7S3#yQO?e(<>L43CfV{E&5j^z`qWYNEQPb>{%k{Di<bA#Zqf#N8mxfJMpSEaL
zGkEK`7m=08P}W5ov*NsqFnr5WsHw|^%`Uqf#_pQp=Q?|@N1{{>urcFO)eiQ!3ZzcF
zSU_iw;s+8`qmLUU@V|@glmLCVm#fBNqW2R7?NO1(Ne=4yHgADCLV}#VXPahY0ycTh
zPfrs9Y97lE5V@ou$SsfkolDFrsmGiLX_~1J4Di;~5abOL@PzV;V`2+tUIS=SS=vfa
zF&kfj+M2H%>C0~;xO!21z=U1>4cq-lcC^i3lzZ5BK_vaz@Nr{1?j!oj69YX+VRX#=
zZVUs$5txuQjM2j604vI28pMUyf66X`Dg9^cl|4=<f;ku|3dW%u154jC;Rau!Q;VF5
zJ-Ht(V6e8#9<dPpa=A{Jr&vuT&8x8)iEB*xhB0B+ny6C2tGSe2Zh39@ke1K1EsVE4
zNZ%cy)CdUa-eEu!AAx08A%!6Z;<`;#-6u4mrlOyblBdkqj9Qw%@FzoM_2ei{34B&g
zF;1|dC2)4;93(r0*C#+9lT$vSx_Uw7HZSjIXr$*^Y~iSv%;)=w=9;|$I#X;MMa&(@
z-5p8T9m?>Yb>bfOBwaJ<65^X$lByty?~?e9l0gT@xlmOBQnKuT*`37pHFdoH3T4%;
zlpScp(ukR$L|2|Fm}&e%yaI@0hP6yb=;D8jo~TvB3vj3a03+N00382kqWz~*n>8Tx
zl!O;*JZuwErErh@;2rb^^ud7$`~ooX6M_H$5#xmD@ek<T#X(7#>`i_RX>#*v$2xb*
zt!g&b;OCL<s|n99Kk=?EJ8Qf0yx6%eJFot{oTgS^yqp-H9806${`fn+T-MZlS9Ek#
zbPPuB-gqJcl<c#W)5D^15nx>+SDnU^K++z+Hx&(z;C*Y12m_%-Yh}$0JJ71w*@L1<
zi}(57v(4<+CTmqG+)CA`I@+V6S+=ofLbV21X2-?iew&>L92Nves?ct<-BPy6^gqd<
zNAiB#oDR$i`$fXi&e#hef@Uv4-kGZP%aBQpa9*$X@nB`QL3FmUtM)%+*%9W<D$?%N
zL#1C3+GtN{v<-!4-YL-1D&9KO)b1HX256#mDfCxn$pt%8xUsDMJ~+T6Q#xpd)G6J2
znz|f?+=&bLZ9hQRH6PBlKMlEa5Jcie<!faaZfj_6W4gh$a9iqD8sJLd)*A3~yVq^*
zhPN||40n4PD04NETf8s$>Ii~&!m)|6)qjR3Z&!-M-30ExHjLbf;>8St=Xh|qR;X7S
z;0<|g9}wH>Qj7H27Q5V#JKQDGuZv%_%4+#t$F|i>cy@g@7XWTiy;}=X>3uCH21W4-
zEFdxsT1$2X^J+P$F^2;SAKyrD1sjT4R!u-|kktuwVL^Gh%Dl3&yfUl1IH$J0R#(!|
z;K4tg5welY0<IQGU&Ofw7rgy_>(E-Om^iMHfuOLlorwvg-wH=ySxvX6-diC3uxe%D
z=o&JB8GR^`A;wI#wPTmPdioGjW=jw-cxnwX_lVlccD5?8R2kAN=N8_}S=K(7@urRf
z4hn=dJ!`Dd#&kxO^4VT6eYt3n=`F-Vd1bv?(R3>kt-@xcvvLk6oPxc7V`W=JkzcGq
zZ-GrvyIm=3SG(-af>=0KbtvGEDu9!#S7vgnfqCoBqYa*j1{P3ld=1-LDoynOys;^6
zY>eaYXRDFk+C8YMf+YAGiJ-ZE^TIVzj(7+{l*L`e@Nf$9WbY0{V8cLx$GZQ(`5NY$
zF?VxUqs8bC=QI*&fDu2RXTHeX#ZUz5`scc+TH6H9!ilAkrcUgPGevYXlU1ln8E4Ad
zub(3yQj84%&1~1Jwt`pq8{yyZdep5|sBDJUh-B9GecMx^wn|ACff|zQkkj2h=_>^w
zEWM(I;!L1exhO2?!^&5-3Vk;=tAtQil$Nd^+tnIe+1`ecm*#2m?ypDi3Y>d6Ptp9X
zqLD0NA$D_@wj>h-mc#iA8I?fU-}D0EGD{fG?_wN2vZnN7TjCoowWU=GN|8YCOL^>m
zCrZlH7Cx}nB}}N$PU$!tCZfuz^~)n-@=IYpW8>9snZdxI;+W;@o&4DBoR*F;<LK|*
zIQg|4E=*zji5D!N0R0l%VmZ@hr*Vag#_IY`BG|$@W`&!lhS{rD_hvW;@E+rW@9Rz_
zqoK?2u9$dN>N>q_TK;tv#DM+pB!s_r4y>~|=9odBrPO3<IymQ~N|JikE>|zOHdihB
zMV^DLv;bo_Teol??_1~3!CUM50>_Ybmj~1#?7+!zBgKrEE;rcj{P*-3RSzvGve|D)
zfyV{yDamH^3&|0v<Wxn4%I*zWv3Z#e_*UAvfSD#j$wd`!#X;cUw^V4fOhx3{jeZTU
zH_18W78a$j5oCf_S{+bH=YwbBG~hWWRUM6Eyi?9Iq@Bnk&w#_A+a*ySQ9w$oQwuN)
zW|@kZlOUhVmVS?<#bx7S&KWKU9k~6DUjKU!@cb=ZL^hZg9`TBi52!6H#o~r5hs;SR
zPHSHtn@DpMau6GBKmwOQ6$J^y%bRh+hE1@Gj>E|)je8e9jT{ue8i~)?WfY(-GzJC3
zNY**DLx&$7U7u6@&gX{fe&gdSyp@f;PK2S5FnY@Sq7@`{DaHGV11itFsljvp7%>Jv
z%^EUxx~Q?;BM}=~#hgJd8d(WR<)>Z~k?v$IcT4fbi(d!27Com=;I7z}Z$XqOfv6?U
z=t!a9bpkL<Bt_tjXDq`0MP4ej6_vR7t>-2lDl$@*FcYB9)G2GR;&n~iF+0x_jGb@-
zCqE!AQk08D2B=%cB@rYrC~!cAc@<G%?Eu4Dq+Fj4;z|=ajlMwCIE}lqsU^7+hqi4h
zjWaR=J2H;z@XBpr<6E3ABqSr&!eGF|@h0M%1z*D@|G{5+%^Woeo_oZ9@FgDj=Qa-^
z*LzGaOBR<H0X?Wb3_&EsAcin1iud&^RN@HO9{@{||IxdUsjH}1#<Fy%EktR^?igmE
zpdc*8GjLy~wKnEfo)sZ~vPC;oCTo_jY;W<MC$p-!F|b7)=}nC|ND5oXDrQKd(H;Xa
zABGElgpA#vUg(}{!-$B9l!`Ac2|aY|JSzcTC|hSQDuo#lJo}5HK4&}Y8qT7+ie%$!
z!5^%(CgRFHJr5k#E-w*u;c{lB5XR{clDBFPmZx9Cgtq<ehwgzp08QbS<?1<Z<&=n3
zYb^=9RV;b(c>zc+rtYl--do8@O@=hFo)mt)JS{~zC!c@^1viB7C~&u5J2OtubMt2w
zys0l{(;ldO*SzEd;RnTiYjY7Vh%2R=T)*g(DZz&8Go5^lt3Z~c1=@LhjARJ!9!yd-
zxW}M@ak*ikJ9N1(g?#8VKO-k><zb0bdca)TSPb0MRbl^{c5JcqP^XcK;aeYC6lA9;
zjHzHA)7kuq`}+RLdJRW<X}KNNR?PtIE1U6MAP^fm^+E@s%c5-qr4~R^lN6VSq3XUs
zn^<t<J|YUM<0T_4?dbs|ZHrxfvS@9PqjFn>rs^O`lcY+yavQEs)c_3lKG{|Wf{nsH
zY8y&Edp#8Q<vt6_wZErwTWsV<yPIDmSo>LsCjzC<8VlBbkf9#m*ewQ%4=7yuEj`+1
z`&xe<u75TqFBDywT8N_3E5%kg{nW^ga#mn6<rau5)vF{*?%=8NCrS^WzBl~jp|h^i
zK8yieYJ)+qDaaRijr<*nSGoc}imtz`k{60@;pAYvgLa9h_AuM6v_p+(;-EYu7kw&B
zi%Uan7~~ko3Xt~l`BV66X?f|#8?78NEb=)Wqi{VGvOCO=3bGjm<l=CP*l_EuHHxqF
zLOkqFc>E0SaSTblber-ks@P#L(AgSq6S<6_+hXLWzn#3_y>iRsEb?b`#La;xIFoOm
zB{9^4Cd%&UZuu)<SHZze``8e*1cA~gyl7l&SZ<?S2#Z+_qM>`Vb&^-zit;B=SHT{h
z@@E*@N7~<C@B3v@KBb0d?_`g<ls}oigYT0H!)7T>nAB7c2sDO!2gpL&N5eC_&UMRP
z**>{InhGN_kR#ooki8U!efLt4onsk;HpKCM`z<_CBStz&t_I2r{nQggynIrj^p5xv
zD&a-`fqs>q*!qcdJw->Wk>qDsdHxe#Bb@Txzjda^<`>Yf03D<lL*o%iRz~p7QZM3`
zae{t+Mn0E<6pr9QxLZF9<6(OQig6p-EWM9Tax@Y*+A}@eC4g@3*Otsgr)@Y0DwA8@
zYjm!jCa_Z7YO={~UKQ2Ygfn~iCr8NYY~gcbWURi<qVVU1$;!!RLFF8wZRFLfCnE?5
zq0wPoO55tNB4~n?6gA^D0pSQuUF7Dn7dC=f5Sq0^@DgOS|2jL6B)H3$AY);RVuAew
z1T|taPHMBvmQ;5hq2bqe2q4>vQ*G`5UZ!_(uRE_SJ8!;b>NmK)H(cEI^gzkDaC;!8
zy_H^!I0>+sG4UzlMf6>M{0aA0st`C)*poso*HjP72|emMPxH_Y_yX7TM>hJNc%V*{
znzG=>uH&QWZ9u|C|CL#oakw$7sP(PzVYG-<ZnYLyXn;BS48P8J>8b~fzWM^!+N|iV
zi%80vjv^_wYgCAR91MUVK3d0~79V?T4>3Dl1-o~t3kum`L5Y{vQs%HLDw*%W2V-H+
zR#`3m1&v7ea++&#{|)8ghect@Qv6D{N|h&$k==yMAC9bM#q9p@PV~a9?V`?f35mn$
z8|$D@8=8|BoJVQ%+CK5~>N1K@v?uR^nLR0;B{=k_K#^_hIe8Q7`wtH9-&SusHg7uw
zC(8EE(oYo3El@6sZ{!GW_~GBbW}Kh=j}kok_8lJi8Z6n#dEzFlOC_)UnQ4`1L+luo
z@MK*{Uid(pnLPE<c38HW@ftG2RN<oZCbGV7;%Tq^wP^3ln0hIi;UGQql$1W&%3So7
zI>{?|I4gKUHViYhFs8ljyx@>Wy`p2^D8n;Y{0Z7fp9hAl<IWwVvy?W#5<T*ouoT>i
zmV}!UAsp24q|W`zJ@qu`vgEGEoVjH!@PA#AroRk^OSi}HrpfG1S&G1AHDxwk`i+)#
zA&n@yQ+Q`Xmdim1=4Vv3gWl`$A`8&0KNF?_IMZXK^f|G^Oyv8Q$%KN`MQE4~VANr9
z+o3k~W14~CW&61_82nz>^s6cje15?`^T+1~BIvjY+7~<v>Ky=mO|bgbY{O2}gW}w`
zm<qPEXVwZGw&Rfr!LlRW3R*TQj791|dh#aY?f&cyE?Wlk9HVS&PNh~vtoB|?2p?5j
zgX_h2&%sw%&bt8ou9XBkGeu^HT`YhF$x+xd2Z3Gqy)aCGUJ0NL!nCjcT5MxSOnUDm
z=D-6R^Jgh8cqBpi6zEra1rqvLPT2WA3e!G^+m2pqlAQ$iZnA7k=jPEVa(8Sb$CP7`
z3`%^81{!$n!Yt4F(KnS_Kd4m$%2hvbe-Aj_y1#TwfOp_Y7X}!0C#Po}-5?dI+Bk4#
z$KbE$!oLW}+H^hRIFL1gdtjBi-MK8^VZh1nHQcMqmJDYN=E#`85dFz(VyezZ;Pr0v
zUU`|wD>ZO&HDuA}X?wN{8qGR$l{!Tv;ExubHD;={cHkCL*tN-nfUjm6wPncX$G_!<
za4O9K)+BX*U9k=>+Lf(UKWu%#b{hVg>!1HvN$Ax^0X;{w>FqXxa4kW)Xa?x{TEe-M
zp<Ka!$41!q*@QzqduyI1*x1vy(ec;yGG$99?rSZqwHI|ldhQ?j3<<h}>*5d51t950
z2xOZS$RMq2GG8z|ro&kUN{1*9;}M6wzdZMo4pto0g5R#%D|s1j={@9EM}(>?QR@fj
z{pj8FhN|~T4C0Gp;(}c%+kd^_S@*-X2GGdBUx_~Jg=+TC5Y{yw`gL>CuEp*n1%7x9
zLN9<{QFP1gKry+h<I{x&WU&G`^jdpE=AKL4;TsEn;#IfGIGs@(;HD|B!jwNDz3>Td
z7wND!_dJ@XHNq@N<_2&a!>ZDfES5SAPIP?9tvBISkPlbQWNbpQB=N314s?lo)Bp6<
z!(EedN3r3UC~8A0Ms>tANYt##@06RCLY>P1EKtT3F%bk?C~E+nFIbGl%>-DTTa6`d
z(P!9z9u}LBCkN0ATlkkNP%VjH=ILm_T@wGUO8r$Q3<*))JjZGrN6Q=fJ6>iqQRGL8
zjSNgbexEKWRU+vlhFQa%9=a!wTP37i4&Ovfj!wh3aK&T(y>soT`h?Ur*jEm<!nPsu
z^@2*vwC1+BeIWH@O3Xw9U;+`OhZ9&F((4Q7NNIjF9r82Lr-#B0|Cs&<_2a#|T63oU
z75Y3uh&pra8?9dW)pidGP$A>S?`F>zJj>Z%vC73wQb1I+cN2%O`iG9Ds8L(cD~)t=
z849YkKklopjKb0$ZwcqDHx+!AavLPViOopjMWi~JMX$PwoCfh!N-;yY>FVWV+*`Gm
zZ{SygiIL(Le-Y;kU<a5&GuXw)jaP6v+m5(v-&b8x_;rS4d!`s9)Jvav@vKu|<Cgrp
zR83%?L|)wa3}BDNEJ`!%j<5;ng3Pbp$SG&Gs5snUuX6_Sf==W5C8)(B-ZY9o!EXya
z<hu2J%!MF!YX?-QLg8ustI32Q1hzE+uQ<esWeLV;O!6Y3(dkJVu6M~p*!bG%y!HBQ
z%M;h#!0RNL*X}j@If`N1WjbmmPjmCD{z-t?ic&EVG^2-B>^|}MqsW>u!K~On$@rs6
znlZwx*uAoU2eOpIGk<Jj68;$T7VObAyD6!-LW{}zHZ;sC><6SH_MwzRH>{XZvN8KI
zno&fo7-I+rsn%omevw!*l7V^uH2!fy$C)AO%)+w<Y+-kw08x8%SiCr9nJd6llID0U
zd~uto#Eo0eY;B9g{$3g8wqDsr_G`4bRokk}M{af(*^D+cnN&Y53-5El@77EeCxs|1
z*h%4RAS$73FjMpzXGUXo{900KOMGQstSkp6qlruXwkrOXtzR4tR8dKr__EIeJy%S-
zu?-Xq)BW*7zQoNA46?-bASKYq(+s(Br2Md`am)%y%pmeJY*-1f{)+wb&5*dN#d-u^
z_)r=_h0(Xqj11x>9Re?A(x!FR2}M-#D;mQl%0;VI&}1AU>=8CyI0<j%F&$@>Xfs<b
zuZQ1q>>*YFNAyKw*~AB+=p?yd!}o7;l)3<lN0E9hUiI*cBukq55la4sc2)3szeeS`
z<MYr(4(^r~@J1i4tLTFk&m+UX{pvW~mk7oj$~*u@?}+uoF~nEVIqXWV^@D?kkI+@s
zZA9)>etDA^jj0N+OP4^<Bax{MXqA|=(IU*b)$<NgMsj%ZfEB*<S=jsuZd`L{Kz+zO
zSx=h2fZ-vBD{Ni~>ww=1!HgtGhS!FR@B)HPv<*hMk2a!V;|FYpI?l`&>j8;LwM7z(
z1owtL4QG#+Lk?dd_OEm66Q_)6h+&RPrBdtQ>mL^{YG%wTfFiIag-=52<E1Xe_HuSl
zFcfLv79<$5oK$pB%n3abKc-lpu&$%wTDND5T8GOKd(X-gD0eK+;eFwEbhluOYQ&n6
zxdx#TNc_Jzd&eNl+AUkSDl2W9m9}l$ws+cgR@$z#ZQHhOv(k3vmv5ibx6j-0#XWud
z$BNjo|EyRm#+++njPa!Hk4kSqQ8SbeOH;eB0mwFjFDYdw%n2nfS%y>l=Za%T3Hjdd
z>%AX$!p9V8B?mA1(nbfmcVP3Z$DGc7LWl^WrNdR^c81S7R<?=HXkF$fsHxro6wrs^
z{Hbh;&bPjs-4N0#ZHkLJqV12iiSI=Bn7YA5Bt7<Wx$)MI%JRv1BeD#GWlMTvO(tde
zK^+wBP(0&n(egsEj!pHkJcBg*4_?IS`g!cDZhM=%j8*jt-kervta2W(>NUNga><<Y
zJmb`aHqC<MVH%}Fy38&%2_(+6!bjzur;Aj0n5OX#Ar;@pm`dj_TF-FAMuI$~6t>dd
z>`PJajihMoj--4%>^Sb8Wh>s2O?Jl*Yt8DBW=gT17;%8FT_ZP#MA)%$g&Z&u5|6q*
z2xCmCZ*xg?k}$uRY4oH(P6{Ab%_9k|vfk3!g-HfLPVxY^D0zd4@2625#&ge3l|ZiS
zVV5((E)WN#b_joXU&W#{%y~_02_@C>y$jXGz_ub~&f&?{CM$h}u-qEnG-OSWJTr~%
z?59bLvU-|ALibUWlMoyGAsrdOT%Vw^>!Ps}f*kF5{*X~u!WYz03v-9h#Kjr5{iP<w
z@}@vdgM9xJ97^`Y7eB%up8q)C{l|S|fji-~rocUk@8`d)hW;|a=$1sEKl)k=6@4i)
z*#1XT=Ko?g{f$DHC~b+Q4DV}VRV0o?YB$SfHCx#AmQU0F{wW>5I+<#1Yq{k7F&e$n
zoMyDv(B!&g1sQnrxrW>PlOP}l{x@W9pzpVm-EU|yY_^BrRAbos3h3%|sxp$ADnb(6
zIBgCmUN_S)E<aq4($>CJqg6Ht@M@U`g<JIekR+mEez*9HeUL($-Wm)i74t~!H%6Rl
z=)PsrA-Dz#MH6oq+BHV3igEqjZ$W*<5or_S8sD!uaplaYh0@JSGDsL7s>MSvpa=wB
z1Y#O}Lfn@id6-bHj7)n$4Gv%YJV2;GLJp{7f&(hAnvfL&+{__B;N=Smj2aZ%eaE#e
zS74x(5wFoAN`=3jMGs47BH);8GmlzPdfVJwv)CLN3H6j2KdgPOPcET}RT%LEFoeEJ
z1{|YgHyui6x-ktg7!Z-#L(eFY#D6tk3<lN=@s?~A#>qV7E3QCij#R*yC=PSE$y)pg
zPFJi8o_V24XY$a3nT(`_@hj<UBz!ItTs-vgXz`9<Fr0Hn41ON@j0Re%{Ez+W&wkj8
z`?CUU7Ksb9z4YJx%GUE@%a?5(VAVN(#~9Q-tNo0d(8vUOVsg?!%Qn_g86zH`t0oG&
znXNBRMJg>UDSkv-h;!wqPQFPm6f<EWE<*jCYFC#tl~>dzXj7svP99{I|GV}e|4)Hb
zK|rvQC3S^``Hq5AJPaW@8VZ#n(z{}TntJR+E9SzO@q2C_0J%<KknTKRhPHGe0|cGU
z?zY%KM=3#}&s!w2$U|lh>ZlNHrnR0-6<U#<kneP5H%{%Rr_!oCL5!n%ifR(DY2AIX
zrQREJpSd`*DDV~RMSAaP_=$;aBV$ftf>8lmQGx?<5JLf)k(C5ZS^io)k3%f_1L@t3
zfEo`i8tQLbep=KTu)ZTF?KLcw@S_I0^Mq8+GURb48H3=-vV@~UkO3*RmEMjTmo>R)
zPBRM@bCs=aGXV=m%!%)gnQAF&5q?%!bSfC0{(H!JzKQF^4L=4q&ev?c9&it8CYqaM
z@dm|Pl@K!d1>pKN`dG<k^f~CotcA6mFv|egSsFD9Ug;P^MJm6XvR0+KAI!+cd~3|j
zDcv?Y)S56K9Z!bHay3csp)dB|_3p4-)RC~YIs$0uLa>C{JCK;3ZqJW-H<wigB|7rV
zt6Wrqd!&H>;5O($qn8zG1VN>4#8s$wDA17E{jO|^UJ@2`Wa5qZ{&92u6?w<O?{wS2
zKZsy^VR^BC+9mfRxXSr@q1zW@+7H9B8wFzL#t0gYwrkBKmp%5$FYg5#B0D7a+aVGX
ziI87GxQBIrQ(*|a5lmQrj0@?(ZI5$rENuoVFOwZ$>d2ptd~MuG;^Xb?XYExv_Lrvf
zol3hdIQd0gY-2Uul+%gh%;t{t=aKoCx_E198P69C#|!>GL#iD<@6zBd82w$J<O9AB
z3vjnlJv8GXKlIvj#Iw9aw-xo7%zOIm%WZ&KaUH{r+bAkk#Ejdp>q^GG$YvQmbZ*y=
zD|+rkYRPR7E$`tqj@d*AwTL^)X3qNyE$iF<v?_jp=h!xkTT&0&pI?Q>rh_@g7#d}Q
znx+#BPl6lgW7GUH8AL!ttzwR<OXYd^+(dpk7n{avc&#8<i8+^rfmh(8Y>qkW&^)ei
zi@mSY-|_h1dHU_2z~O9h6kUE)y(qRfPF+!0@6dO36M8}*dcuf5q1M`B0d_dqLgn9-
zUF#z?b%Ub?dU@2)MQfP@JHK7RnA|ci?oYvlr=<@dtq<@xUstUUh>NX+i%zczZstU~
zX52e8Y1H{_r}9>ScPP_x0&$-=K}z^C@g_z`-m?zA3=uDW=UgNoW(&Sy3pW2SI>-rN
zUKcbbIP!JvvG`@#)2hb@Jl+oP_?_L<DfU~uR*VX&5ht2a7~Jfr-<e1ZHw}KUWsDh(
z7#0-6C`ihVe|-(U88G_+ko_`fO5j|&`z_-=3D*dS8#M0GLP!?K41E4EkbVD45ArsI
z^^Qv|eo_m*>`iz>JV;9z{*o47)XG5Wksq*HjLX;m*Ze?K!$aWq8z4r@ps_9Z+El|y
zS~2WAVrWn|+<tG{K=$jP<hJ~+>M^>__$E*I8&tzK;5Thh!yz!awrv2MHD(_>{=;YO
zx+stqfBer@--uQ1x^Lm>SSL@G#34gdAo4qBrC2M0myDqOb8ym`ku><C6-zDOj+#qO
z^cD6n_WexX=I^TU!4URipoSqhnT2V@Vn9M|`6WDK@S)=PVj$3BzHa59I5$)XNQAP_
z%u3}!HNxdb)#5X7HqSitD>vaE)rw)jGvbE2;que6`yQ%+Pp!v>r}1NvraAhG-Ll!t
zO6fD-6|BH4u<8x$@4SlXre`hHFG5i87a{21uV{sg0s2msj{ivqmb0-mGyFeNK}{P(
zdH4_5q{{A}*}u&j%p1_MyI12nkp&Fokf2SG#E_Wj)f0bkJFN)nHHm))M|VE$OX_;g
z9Q*Tj;~A%GCz7~^)`zZ~ji=KxZjGlf9(jIV-(&gWB;?9fV-9eyN9)6!RyOQ}NrPa3
zsDrQv1%_1zXd8nAYQdm$QqSyzgap;zQW%e~<TWpo1GLP<1X<zkVr`dr&}-oalJ%Pi
zM7^Z({tOZ<L9?TaS(L*RFu5?%qo=MCZqDJ%d3#bpYl>OuruMRtGv=GH%LXZKc7(&L
zte)HdR_j|2#LzMN=wX1V5-%ftIq34ZjNjil${@5}K5%~^cAB^{Ko2__>w&i`r(ymb
zUD7+juBec3oZ3!;6P~M<LBOlKUr&6USb=4e`Z9fKlTZATXw6AjtNWS6BF*5@;jV0U
z$sBcOsLkk9R`u*r`T;wkK6GX#syT~+@fK?P*zh*gL)Mz2Bm}QqUGOv7&o37e1_TAJ
zx?)zDoGyWe&K`P1*M;B2A=7I7T;~?dx@PK}14dBtfn=b5z}KVck-YCk%cL*nMtps_
zkWTs$Q53=gax9RWBegdF(m4^VOf8!=a0ii_?)&V#VjR5&H_?PxutQc4PaHykgniEs
zhmd$BQrPAQ;FEpmxS!I|(3OZ4l8@gBUVO(FNr7*4;f-8hVd*sjRW=EQIXr`c1dDnU
zZ(!Uo=K8@nmVg^;ghbnd5Lv2Em1ELuUr?GCe^$CN8<AOu+P5t_t!Mv<$5riqlzsj%
zqe60?E8|FxVqCxBs1f+=Z;j;4?0iM~J6erYlhtv)SU|2{XjT2UrQSc$`me$!qW>cv
z`9}>XXm70VXlx|xYG`cx7s36X#C9dKFQFj1cTl1=H3&kLdv;zfHF)JNObA$rs75rh
z_%s}#6=!u}BLm=4dPDhkfp--j%8DCG@-l%}&{<aj7Di8U5uD<c<raO!4dC(ezJ={3
zn>30UkOTFgZ->-Iryt{iat6&<&f>=eqlzfBn|{Nswe9bf584z9s=PWhLT{mHcGge*
zrEPSaslcBvoP89ql#l@xJ->kUsLN|2MqNCOma1=Yo!CrhNquS7cJ=}zD+5JsvO8xN
zbS6!j0IX!9tsA!zfYt0CM<9=$ZYU;GLXlGzZjDdN{2m5vB0NBtUsa54Kp28FVntVS
zYTaM`?kEhbj57S^V3hjgxJ1Rb?h$)sS}4;`2OJ1P#_eYq5k^8dMfplDL3(RF&cSO!
z{D#~pRs)Q_hXzeZVNn(Q&BRf+u7MmNC3T({LpWDteh~#!)9Fe`u5OIO(I4}K=&cwK
zr@m9%RvzfkMucf+Z-*77&StG2LBPG^dd^`yT8hD8KgbL+T+!{Ab)7NbZdpy2IRGqU
zR0GScey2|@D2v@vqCFaiNar4ZcudrH$om+XlW8-sO#$1xCOv*D{30Sz5NrNBi<kHC
z)lj~_>ekaZ_Ox{$YV>wqTOx*YUQGuL0WRSXh5QGu#0GRpwpN+i5|bX44SGhcZR*Y+
z9~;EJRlLAYi1YVfjnGNtlZ%2*P0Y3(T@P05_2_0NjOBKz`eZ+>NZR+^GgIU-ZCbfU
zdW9Jeegy8`utZd`QJq3{<qf`d^P+*KS9&Jm`UA7%VR2_uiYS1&ix;+JfATOA)qpbA
z37(3?kr-kO!&3i(=@1x#BFgMfWY_RGMz+KjXZc0r43riDkj#2}n47GISzGJGopy-N
z_u3|pyDfmL?-V|In|2^djB$r3V|%+Mm`w`ejcVU|P5zm`%JUNH<ugu&c1wh3iAnB^
z%Fg1Sai)ds@<To5vQat;-S#Ydm{WZB_({OFx0gmOzmMwdL%^E@yt+D=X?ECW%B^W6
ztn;EtZ0fN>L*Ni2PIlJ_`d5N@%nEWPJemQ#rr8wyYGB{8-<|5;BQgRlYu5A2LDK^5
z+c(z#O+@}9;(n`HxFRoLc$2oRtZYaLj0dKHW5J6#j|@nL0|BK$Az~sDL1C5^#BYc*
z)UIfonDARxtfnnCJ_MoFujYbSLO~`1Ppil$xLcG}oM-WLaLM{K@~(ay4}djXrleQ`
zT=wQ*rs5qYJ&)2aJ-S}iH=nj!(7tI!ZGqT<T)=H(Jpp{Pwjg)co}$#w(fWQExXMAp
zh3@FnW5f3m8n`M!Z~eYjLovT{h2QFX^v}mG7XX8W6p<Zvt-TTaXbZ2Ucn;=#CV>6m
z8_dB+-Sy^$4Sx>ty-vX6g+?4v^t(yuz9Xc6YlalHlPb?lyq1Eev}_+5uoW1r^L`@=
zp_2*I{~02lj>uVLoQ`0c8Gqd#ktLyqh@+wy>L?)z4ZW2+FhL`zC`~=%ps6*M?9M^V
ze<EGLlt)<tsMApKqqWM2ms@fPZxywYEiIXGe!b9u_{HzVRFKLp7{47lAXYM-YDA{5
zth<VCrOIgTDP<8|G&D3<V(CGWA)~X|8M&A6#&4Ip<YxyZCWUvTZ5AGY2}H*^7Zkf`
zfm8;pFS^KXU}dvJ#%_$1VC2qJg{8hOmf5%HL_O0YE071}t)mI~a8Ud3>rcs?_K8;5
z%gf>k`G(e1+C)KW(^<myxdbVht4vnr?2E%*Un+uPaC~aD5=SM8OKA{ICr<7X_MF)y
zCC@6=iz~^>W<_LiOa2K90{<lSelsoOz<udTou(*j1zH%Z1Hm15g!!TG-hR+wV#>PK
z%DMr2Q>tj2R@4ns)3ow^zQ|r-=TNToLcDm6S%H3533lU=c`HY!M_H;}wr;;>N2pN`
zj=E%NO8HgR@;POgFL~<Pc|*PvDu;EHLqttnH5`a(N`$#-O?`l^gWIo`#)72fxx-|D
zn40<_4k?Y5q2nnbq47~qg6is6fJqh_`a8gVn(1!dwC2&W^s4@=Mh8YjO*nHtyfYGD
zT+}$&fu{_J$eNiR*Y7)9$r}=m>#r|2Ye^+%7L_E1Jb{sM-j~u2SgT;Ss$fH(K3P4r
z*N}Ot*bfMR8K`%vo6%G&trNPUQU_1=W==6O5A{QlGOdK;ZV;9J199qK$|%i6h0Mek
z1YoR?i^4EZPk4rf<=*I&KGU{2CZVRNe0tD0^}HtM=ygQ{lZsSs0<@|)6);kX^0(21
z!l}6YG**IJEog|e&Q!Lmz*UXhsN6O6T2nU~m`JB$EX?+FPqRUW99Mfmcc^iyVJ_f2
zl@zao`q<XvFzIiQZY_qpH7VA%67co2uxpDzLv9agfL!#Q@lffJT+Y$Msg$qQfyU~u
zmWP&iq&OC6^24RKM68cCYzQ#MgOF)<Zc5Yxk-uVa9%d`rMrkkI1`zCXT^P#Ap01`b
zG{{fLT{*N<=x>VdqidT|){x|HGq+djAsb31C=-lH`@IBBA4%s-X+nDc(xrGpF-<%L
zXz$U!^J?q#tO?9>`gy!Vd&&3SEGMHPHc%m(BtfN|!0*u$xvLF(!v{Q+t}yqabg5ja
zuM_OCLT(P6LwZvt)6kAxLh`^U_ZrtNMmu$}%|jxGM$#vpu^`d#DxyDhY<O{ljDtNI
zOIxL1L>)m3N~T;`D<7CMjc=bwYAVNP-ba)*g)X)jhnvPVxce<RIcx!#IRRbRTzeeU
z=ZcIND#{RF3ipAw`b=46%OJ(6$<0c&OFmvhYx5Qh4_V8hhY#(VU)pINxf@dFxtJqF
zlF<>SgCra93m${OXa}6DORUo<k@qpe-G?h{KGaYuHlLHGx;8E|6Xf-rMeTBGC#He1
zMl_VU+^ZPpm$=85Cn88$1*&|zl<XlKu`yb@14DKom4|qBsiz#V)9IYTGMcxbCY#6O
zQq~p#Z%v12Mw{A)qu8T{Whw8DHx4K`RX&#|<ov6;;$&Y^Ps~jSrJz1idG_yFjAN5$
za2_P^;F3t-VL24o$-anDQrR!S&#u)2FZbEDT2Qn<i+d>ytPlD+U?gWIi(J8m#%zgY
zwWY0=6tif4z5?5fH`HXqX%5%`Ra#=*p`F3(KUPkznP90d>9^%6C+NmK8S@V>4Bb|H
zqSBj(DxCd@D*gZpgV(FWA)*e#!M18daclfN6t-+l5nd6H;pY4}&9mDyB~W{7v%h_+
zHCz8_H!PW2Z+Q1z^unDQ!=WPH3%iMd1yoKl605i>2ID8Jy`7OtF2d4WW`ucW>o3Y^
zs38HcA^1-tvCF)k(}TfCH@Q7zvSnsO-|hk{EyU$dGJ2d}taOp2rfz$nz_#&Y4w0}y
z-wM2Dd+DfKW{6j!!=Q>Et&wwWQfJyb4Q@+~Qy&j8R-VIGA`?a~6d7w3!&VB$jG8E?
zXns^RG)V;<OBS>Hx*0g3GMmr^6TcAc&lPi%9GaCasa3Z4FMeX9?$IPo8xsp8wVa**
zs!tYjMkVFPB^0DR5_3gF6Q0bL@k50HdEoUk2l#je_=M)=fFgi2z$Ck1LS1mDipra4
zzcU=H_uVg5hwzpb?a{?eZGs0O6sdto#^^CAHQ%tsO&Qur?3EC#C8JdjpAv0>mw3Xl
zfqDcZ6R^H;p~7bL4tT}33dc9^zl6}O5us|Hwh|ja!dZE#$8g7khh8clMRjj={n0uN
zj}>RaA<aXf;w>AoWDfuHr`<pjBe~l<3Qi9ew|~Gjq(0c~#rG)-2DMaFy9d_^`MwVN
zq`3fpIge&<N^~F?c{jF3Q$zs}B+j64DGxx}BiSov-3?I9>z?57OcuUZr!r=Lz`aLa
z`@kpMhR_Nim5=VLBr~N7^&9LZD=r$>)Mt~w0yfDJ52kh~p|0zVGmB5e5%Cuc3z*uT
zh1BTT^Q%i124<6B8v;Kv>vaQ7+Ge8}fJl55Pio+}(VzK6HSU+Y84CwmljPvn6CU;w
zC_{EeaM9tWnPDOVaR7STs39FQc3UxKuFf-48<bqeugp{&501?z{p41zcU5k5o2oD~
z<GvCgH(rps(Ko5kkW{=n=D5c$@<e&2TUG0kVM5nFxOvaPd6EYFiP|=`Mk5QI=xQ*1
z5GvuiDDE_W(%3Gei+EAPFe}jT2G2O7!HhTf<~MlO<Zi>SL}hgNt;<C8>4*PAH1sO3
zKJiBc>f1mdxq=`0Zm*C7D---I&-w-5>RCX3)~+U*cWc+$!e^D^$ClRHJMr85bMIpc
z*AhX|74z!qu%ozZF^xTB*;8^ds(w;ymtsF}@gnaSq`i21D-Qi7Vy<b5Ri=gMke<(}
z8?a`|M}^L{cEey>w+F5=R6C2=%=clfh72<M&#vKvt^O-K9>b3@=NDY0D<HugFOg?3
zsv10l7NQ*CQogeN209%x$q7*pEXn(fex)9hX>HE{<(M^z^@*eKV9&$dTP-*3*7_DL
z1*oZ4stJZp+wV@;#;r%;5y&O`v3un1`(hI6FeRbNo+LI+N$#5FzEsSK2j?UYfho-_
zQ{7GoEjkJS=#B6yHmxT1z%jJWWSbd-OzGl;#8!!D+DquHdlqLj^Q?&umeE7ktiFz+
z9b9nH$y`IkBphlcnpADyAH=>tVD+LE+d4;4$q%dc48OLY@B8+Hp`Si~FK98Qo}010
zytF^Q4B-E-?n(dQMezUAVv1V>Z2nQyW~f*wu8AOXGXSp$fEv<$iMU?GcES2#h>7jU
z%znuM9mXcd@x5rQS>(+pa@D3Y@fPs<r8pJ_=8rqBR=vwxT}sq`IUhFH46SaoeR(K(
zJZ}E}{5X2#{WiYM*F$zFh~9J5q1Mffp$mLn;Ac%mq1Ib_yn)6@$<V2gt*0|s3WNd|
zU?;7%C`?O<iv?t<*n`?AY@<CW2tv=*dRO%t8yjCkxMu-jK0!y(-u&BV5Gpa?RK1U?
zNIen-*0ohnsVqoG7Ah&_u5s$RGC)p-@^suhSxca{PWg5OL}Qt;>Lj&+uWT15j@X&l
zkrqSP;Lnsf$Cjni?fSa@Go*U1dR{k0+xUF{GPAQLn1*(*mIqLUMp=H6TPQO{V%FI&
z9R{)eE3^5ehA$3DaPELk;Dv39rX-08>eftYeJ5q68sU@TB1&I5!`QAcgy6N%1BS=s
zEJ|V09Q)Y(9mB{;DVikWU<P^kr%{1}!4J<A`1FN+CcbQSl_pe}IVK%8$Gjs;p4#IR
z@pu$d;p`6q%Pqhxv}&)RVqNpeo@@Wf{{0*_by~Dx49UA4LQaD1bNPa;E0K`t;7nh*
zq=;ZqI`k2h%9EY{!aAXxy+|L`6^b<U;9B|)OwD(c_+@4Ks7GTil~}&G`Nrs+fMv-S
zDH}^EwD9<{vJ`V>#VXkgsAN)x2c@&Uk}#XAim>`_%vLgq`lCX(wDLql6!b5?9WHON
zUa|sxczzfcBt_UZg9OEBa-8k0k4bshn!s3vi-Z%TE9FLN65nA)HVZ2I+&OSjeb=gd
ztX%ir(VTYqrG<K3&@j|9dl}Ocs&bE>=Y%eyfyO!o@gsQEGeR2LurM<-`eWR>v<?5d
zE|LkrBwZ8!vf<71$cz(=n$|`zp=m-ogT~-;5IQWks@h%K_LbX`ko_);ex}lFgrv;g
zlg}ndUJN}?SBZ$J0qO1#d>hiegjXE*yQf$p={#t$a@<f%T*(&vQ=o|UQ%I)QJdmAx
z5)r%rBHo<o^7Wvy){nDHfA5SJiiW6zupzV}TogoZkToiG%dGt>@OJ*B0KqlM>icCz
zR?9?^xW1nRf#hfeqNxFXHAs$^!n8Pfq-i(ZI)Xd`SHHnZmMgOqI8Tvy4|^%lyO|Iq
z?xdUI(K%?ZCj$|APxuUqGx|ZyFFS;HrK9z-WQ1I$)A?37MQl{Ev-mb7aR}c)y}sv1
zO>gbmPTFDcuNSqeU0+KzbMa$N$z=miS+>auO$Hmh_sXsR!AFjD&RH&e*wGZYP7#f%
z8RF~b$BD5GI7R@~%|K{9MZ&xem~>-vppjV)W^_c|FM%UE`?dbC+psriA>{iOxIA@?
z)WM6u*?YAEPlK09PA$?lI;UHa3+LJo(rNfALC*lN#BurjZwl`}W~raZ-@ko({JQx5
zH%;_kIY(N+SpT2%D=)b*nLavrt)yAL>}fEdP^_j0zXIHy#axN(pYZ2!R3j|;678|4
z$k!IwPv3YTci<(>_<F&jodG88n^RSfaNp4RxBM%?xWAu=j0+)QYV?ysEMq`l0;ex7
zlb<3-=E!xA=&@<;fExQz#5v>{qG&@MuYO=uP9!%RE-{?E!8QG!D+|Z`QL2zRysxpK
zNMTJ`U^5_k7|<JhgaQJ%PE;RTu}K_b2XQP{=oH%ta4-gba+q}Dn`5h)49C(i$edqq
zG9P&~6mU|1)9gk$6*CCxfg16hOIXkVH2M(jF-h+GKsfuFyA&)U;%9#!xK49^od&LM
zhN{53)9N_-;}zVw2dCwATz!63JZ*JT(}6Yp{8a`1<D`#&82YVZ;a@*}z3t?$VIsr7
zedGT*@BZ7iSpF|pB=mG?>@+qRJTssKRq$w*8ab-KV7@>diWtNKTQQW$sMA(WOPhq&
zjvG=ohXWumqMt;tZ{NI;57xd)(%(=#XOokYXXB)we_7-C!fKF&nIhXkxInK{xAUfX
z#Wj;Ay@IkpTQVd(dmndk9q7~!5oZ0mM^_<cg$EnqZAZ9nmSiGtg?@3sy){bXt6Ms4
z41!*bS}qzp;E8@;BApq|I%^>$ueu973KDebJzytp*pI<utba8?WV=|thxHmlk|)|V
zG@%k&wsU2I#rZuY+)lXr1J_cX(QTz;x!HNr7&8eh^t5BmX^0~J&{z%Pjc9L@Rg=k%
zxnr11AF;!Ohn3vS-T_~RB=a*&()`?@=ONbPkA|AaoL?wnUmQ{TbmWgB+TCuyz_>t$
zM0DJ@sr~u4OGz6M(axk|9zmvKUDT84Bl+0a015`7^8~>*&=*Rz9H-whiX5l)yp3J{
z3*mS?xkgJx!(M)7syPVe<HLi<FX{8=8v2lX7MQ@6#nZ6d4>1OK2#>(0u3;RR`be6l
zdmuGyYJ|U~DIkSVnE7(Xlw!yo1LbrG)Ej-vN}HWY(0-hziZFDP$G>1!77?-yle_eM
z1g)b1u`7$K8p#T4F!E!L*c#@jPo-|rFm3f$w4_W-3?4<SXqr}1E}Z|1!tF2aL0TK!
z{?r$Kvc9nNKgZF(?oBxFZI*aIK|u*Yah*YFoI$NcKo{q0$M+FMg2Z65-f|t^`~CX&
zBb46v-`3aP+6~_Q-rleY-^bVeu)S1cTF2kGj^5hq#~m%!OMmzpnTPo(sF>S_HWUGn
z34fT_0^D^B#LeU>2nDgF&uSnbY8w633iXi;4&r~SB^GDJCnr_HIR)bs!V~^bwe>cW
zw=dNMz)tJ;(uM!HabSq2yyyFaf#De9KqUl6=>M&i+A;z<0$K_hzk9fMxO==CXul4~
zO$yqQ4_d#5(bm^Y=3l58e_2r;`f(@!<(c{Tb^Uu|r~eEyB{M5ydm{ROP6i|RA$#fI
zg+EOjG(f^hZFgjtmMKI0pzLzcLg?#bnG{q1>}a`ugCiEvYH<vD&iXav(Rl&)4Fi;Z
z7u`$1e%qqrZct4cy~;*}IcQ@hp;bp~Um8)wqKL|4?<T_<l4nQ^+@aEefU*RV8aauW
zla>OI2BD~;^5$A7*=u{6Ua6|$Ud2uDUL5$F2JLlDxGae7wJ%wQ&vb|Lyc%3LK;{^H
zBc{VvT<`cteh2G+C7HjT-c!9p_OB#k^Hoj?{*RN)Kb~IB-ptv|(%8h<NYvO-$<Xkh
z7KR0iYt~5g@Z6jED=d~~?t%8?Adp1V)l4>I1;t_CazuRRi>roLlKU41qp(RSd_ZVH
zuDijm<U_6j2+|5MKXm|Hd+dxRQ3rUuU0z^vgMD1~%_+f`<Dk~;btm>sUhDTY2Ya}J
z*0L04j~EOCv-E<ErD=ZpIV8Vb=PsE7N^V7@QVLR|Ts_Al9qm%bR~yghsX7_$@eOAX
zCscbE^T+_;I+Vmx%!eJB*>OkARvHACH^tPwU%Gsa``*e$JNASOYwS++;bDo2KedG8
zi$YzH*Nk2R)jCuQGEct2^r{tfX1a6j<j~6H5$hdR=^?`^p6e!LXhoP^nsy4VMY8C<
z<iDUDL~9G0&#`8YY~!Zr=8)vK#9ry&>Q4A)O)hEI&J~Z|VlUFf+7m`RBBZ>}<h~!q
zJYM7TAryRDQ-iJk8bWbGPkl&w2lYPvgvR>Z4A_}bnvEPUZi?KN4stWM4yf(gn<2#o
zh^H(hRx4MOvo#zE87`;zeP=l_dD2TRn2HZP>d!w$6ee&J@dms?wNE)-!N*Jxk31%m
zVnIXMVubIf%yENU7V3RcGMEf|WBU8BfjtIa^?vVBB>`mV1F$`N&VWLmG$6etHYG#r
z!b7WIpcHm596?l1c>M44KQJpvKY~uB+PMU_dVtL8{)|G^b^W)ns(z(!`3qQfU%-<3
zUjs|V*yV2#_s`vz;*9y1NhWvQ3SbY=KwqI;Hn^&?p|oq-4JJ;WFq;cs8ly1XG~p~(
zWa->@W<Bq7HGwyS1_kNui$}b<Vp$_z3U7;hIJw^PWeam@?EUfb@PiKti-l_5GC{7+
zwkZGw3uJw6QW@$L^+MCNTW&oeN2(DW()vB7XFW6uxX)8F$bk3UC6ME)^}Ac?`S7Ek
zpscvpR0hDF$}s3)Ndndw-+k9qw|xyqf;U#)75`O$o{hFot~jGR+>pP9b~W~ooz3?1
zkl(9(7hWJeo{;?Xel0Kf6T18RWk0n-`D~1SPeqe#d(P0D5a`>P)%7@*tA2FXpG<IG
zGj-SDX-5-<tNMa9gLa?ZZWCYztv|y$$HXPMI_EN{7;XkTMG_=<Pgw>{jF}T9t&Jgb
z7eXaB1DWH642icjQ7(FUQb_6DvkCSiFw`ydp!4WUJwT|`U%JPSsStFEcw)x+4{b(4
z!$J~9s+J?nHSq*!kBTODKr{fq7t$*n(bVA1NeaC+*wNv5aD<`O0jr3vbGoP7cr`rb
zmauaAA_9mmnnJzsHQ7H4A;p{0M|4Mefk~GB(ampnjy>!qB)3)?d8zQmN7xS0lm7!!
z?Cl==ExkN8+ypIL7ZYTE_x=Rbde-CnnED&_`s5jo7O`eQd?53v0aBbw!5!A$Q&)*n
zvHtfjTEO~Oee}OiU5bB8T?!T!e*r6gDfPTj+5%6bL8T%Uta&<GgOXSS-VYMunP&wj
zj=YUg-x=wY^j#cMW8gomgk4<_t!8ua8OHZAxgW<{T#jC&tG2$K<?QtKG%!dsU+jW5
z)*Tc|?nL>o!CtT}8xMmZ^Z`zjqg(Lo79P_OWaAPKbLgVcC0-Rq?tJyjUch83#^g-@
z$k9<X<s;IH*vTftUJ3`4H#&Cb(XcXv7wHk;3<u~R{Ejum2<-%4`*{wWf^gZQ(5vRg
zpFm1&^}>U9qlf>-H&mk%$~(`odTY!T@n&L(k*`n|6%n}7kuCah3&<Z9X<*swEHf6%
zT0HDd>M%se2Toe6t#ajH*uOgw?gbVXqGMq2+RNH-GtD^5>N@fz+Gxa0;lmbRi({XI
zV`vQqS-+PHI^E6;el2z{?zycFasqP-8v0xS4H|uBKyUoi0duNMeP2l#pX>(5{W=~d
z41wYuW$Mw+PhsXXR4h%SV3#PvjRrc>rx=9uP6LNdE4L+;IRw`^^ALzj0QJN%02`*e
z!UwdBm51Q*S1xv<sdnu;J*2C23#nS6sbQ}ONYZzYQ6&r*^9Q9{0z35cO|<<}yjV`*
zUmc$ne>4J{>bvT~HUl{2%dz7o2bG4JTKQ_c!*)~nM*Oa&?Cs1+qov1M{mPuTa&z_1
zf7?P)+WG+f9bt}uF+q<nbRm4XTG9W%<*<KFSCs$5eeR>NX+Fjt1p&D|rx6_VPX<L8
z2ynS;j^9--!3KFO(+Lqdtj_>m_S7~s8$%w?YrLo26iuK;H<;&0X8M}<7Q2ay&)drl
z3LmB$N=36bwB5R#t)eh`lhXPi4oDv)1LQ?%b1(u5<OQW`cJB8k<Os;mU<$<HQuMy&
z7!qVI1-g-JX?EDh+QyyNb(3TFL-n%6iSTy1zOBeA4S-&Y%qE3hbWQ;v{eXXy>6~LD
zPh0!UNe*VXgINWp15vG!#=!_3Q%BV^Z@A8S00Mm(xn-*Xn-X0goK(>PI<{PM8(Nxu
zY=`mpEaKzMV4QU7V!8$9L;8;TZdYjp@EGb2?r@8aJnLvs%ed1V^>3}ArLjtjBBwH?
z#(NHufS(ufhB-eO9El(E#<4ym0PY&T5Rw8ooVblU$WH2|=@!UFnPPmM(C5L0dLgLI
zR^<p2X1VHznFpxoh;_g8E4k=L<NW-{SGafdF{4Jzy5fTc5q;;?n|4z?d*e__@|=|W
zP1z!?VMu32Y%jr?Pq?Q=V^3=Q(t}8o3BrOCx4T$Zu(BydLsYMn`WU&;rgi9~-nJIO
zz}n1o8<-t;5`v(P3ocC2`^%pk8JU*Ct{hLOS<U>wqJRuSa?WEWFU*a1-)fIK*Dx*|
zZ^#TcIEhH}MGJ3Q)UV6+r16-gFJ9G`Ah?zqK{PA27sGmNJ2)&o5SaIhr8312zV_#5
zi{&hE(2>Hp^N}JZ4EIz1bsm3UllMy`3sLP7tt(Vo?*-%r*y8iU8mBQyaHQEoDBrd7
ze$QZ@uK{T$eK*N>2<h|>nQm}PB(fTUII_)L%s0J|0ZQbHppohZV1aveue0<*Swh85
zg?NivvbDk(=P-AM8fwakvvx&->M!MUUqcY=Ok-4N@aB54sT7?=c&+gn?oW_1&4PNF
zOj_ldWlTFwPjHLB${1)=>W6Yli~T|nV3NQ!6mm$fj@n@$$^T?4Jmw4)<{Ct_SIgNW
zf4WDQgEg{4ND3jY$q6CCFF;mLNvMoL7U3Pi0e>%KLIC-J@S+8xnEfdP1p;GGtf47G
zC#)yCMUr|167FX-^MnhrTN{ch^0xHY?IKV9i|f0qc=R~-DxGYGhcFT9r@4SEibhw2
z;YPi<#=|*g)SP=}ay`WMgq?f$u4%CA^e)@?>+J!EmY4rVA(N)b)~)}FWX7-a1x5aC
zB>&S~@;`j%|BHuB^pBrH#&%BsH0K#mnX<tWM*bL_1niv`Iw__CQOBSvViy_BW!2Z%
zr8Rf0H;b1@%e$wQ7fm*vYS*=a-k{-6h7gigV)M<{DgiG^aN8YZmAn9!A}v`#Jop6?
z0h{gDj~$m2?M<mBQ(14{x1o6?cfRq&3d##&CMj#p(EUO=QCF6q&EBom(o(jQ_76I>
zw-X$YhM6NPQ&W`JUp85=s;Rk`Oa3)w+qmlv<KNWWLJd7<#iBjLs!?f?MPCjWW1&dA
z6`NPJTJkhvk1X2_ZyaXKFIDN=;a@|7_Vf(uJtc54MZOo)$x)d=I}uHlmc8OjSZ_q4
zqf)}Xp>3IgrAnKQT6y5w0S1LzFEqxa+);7{nt{jFXSQBzJHb8n-#n~n4|B3lJPl~_
z%b4QcG>3@hr{#>gl3;oC;xD!VmG>d!9e4fxx*LQKG!_9gmd_x_pSwTE9b#6rkx=5+
z3n!F8z}YLWq*cT}J)*aE!zc-j_QCHh`;xlshM{X73k@<><M*@Ao&|T{{n-N=iMWYo
zUs^3n&4#rpKy^=(#SK7FIdbl?Ubo+Rlpa%B^6h70wL7|sVc^uAog9lIT=M~YFR8P0
zmcBFHi_B?(U!+<OWJ7~zMItTD14v|LtiF#R@WBTOS5`*!LJ$CZeR+cPAo1n(k`R(p
z2COht&#T(nfl&UA!X@>J(o5RY_8Zk&^3Iz6*5`6QCaZL5+4wA?)0*nFyK%PKp0en!
z1!NYrQc|9OP0JkJ&qdE`WwepXR;wxGC2IA1(Z|FFGCK}f1Cb$*<T*QREa+Q8Re#|1
z89VekXwpZa-_8?h>sy84^LD^CoflhG3E|LJB~dO{G<_#EveLPirNs<d&rL}p#=M?`
z6z0$cpV?FxaVuAfsnnu#6{e6~RY$vIMZtW~+R1rfBB{8fkN_iT-yQf0L|1>yR>NA8
z{qyse=$X_?P_ZK8=NOx~hp0W^$jiAuoCXrJp5#r_{6Ck386L4nSmL$GaHQfYtexo>
z_`{^E7#9XQVI6CWSfib4x_&%B{fZx+eqxaqd`2NZ0K-=C?oYo#k|B?_i%sUqepinZ
z{AG)%j$eNmOSlEJ!Z8y1ATuL{$3-<8h1@Ja*;2HR>;K-4B?b6?@EF4eM9IAy_&qv5
zT&5R)3sL6r=AtMAyU>dRkvb1;cZK`-PQR5`G@mp0)`KVmv+&g-BA+(D=!%}^K?$?Z
zB;`2o-P`v;K`iZThKdkx5(FEDlImBJZ5oYdSm`w?kI*j2-@ou5BKeT^G~d1fOuv2O
z_+RFQe|+j2JRv-l7VfXuA3IrT8E+BA#C-J`@dZ?zfr0|OpaOh>!R_$kzJtbzbHsy-
zY1{Up4D13?P|%d1pr9ebYihjr7pPd3EvQszRx~y)YV#9qu|HC$hy#hNc6A+gyk2lW
zt~*RQPqDik--_aXqI`>pBgJy<1`C;b;_EYk@uY#sI=b9?+2;1_k<94Y8w!7O9qCT;
z+8#1_+Is~3=m8^N9KwU~8~`hMqVRbe>0a`TiK@CC%6h&=^KS2<Y&YB16n|31yX$Fc
zxy8{r)wb>!>btz%vw3^+#q&9ufor)(X!@9}@UcD3T7OB_{M=paYPpAK`sk~WZMny2
z;yGGGTYrhu)U`Xcu=eV!uxW9M(F|_B$7zCfIQ6i`*-@cv0G5-)f221Pu+7>}9K>%=
zoqpcgnVRzIg%^K2x$lA8xrOMWgNYsICV!impll6SvM#{L6^#>n>>+<@#FG#fi90?)
z>kzUL1V(R{jXRd~&&AtQHu4$idxxR#CY6Ct>1UyzCIt;eitpFUv_<3%qAShujwP;z
ziS1+B$NV`3rcXZ(-xuExj#u8eh;@RJ*MCezAH+L&ljn=3-xy-YWyhuH#^8f`V+d5G
z({DQ<Zt(L_%D{Jo>qO96dS^%pH+eAn<SjXt2ynwumz=xeE&ucIX+TSUG};YXSETjl
zA>%O+DEj~{DuY;J^7t#|lIHp6lLdl5^`W{XwET`gmblG{;4j*HDR=Ywm*_4E7`swD
zYowy<J;%bUENC}SLbiB3lj}W85lp6j22j0Ul<IX98<eHZ17QTE7!>>dL&<**3<7n_
zk@dUOh*ccQf;1hV<;T7`y%iq~$tKIncZGz4;wgoQ4BEjyR_M2X?n+l33~}h}XdOPd
z3%)6l<^@2RHjV$eb)9^cdH`uJfO2~P#cd7&qXB5p?1U!W>@koS5?b^fyfypr((0|N
z-t1B6+*QkJQCIE^k$7v3MW4Dl))7=b_F#>VXN6MpxGJpkWf_zZSl{(<?ve<uTZU8w
zEeCC9by+GGm+HG8lSUE%*AXE?2p25?8`j7{6SS~2H|DpJ)Z-&(U}*&V60f60^*<KC
zkLR`q=|#@zQ^Bb)&kL6@x7O3N8n{;Ts5LM!wU<^lHqszs>FBC{vBKE+gG$ll7?rFL
z=;l(HzV~S2>L5U{Fo}d_Lh#}W&g8Zrp;D*P#nKT|!v*EV%0)Q)6(Q<#+38f{=4hUj
zZnO97M8fQ(?#%OND~EDN>>o=8Tbx=1O+g|Q^(u!!hkqj(RQFQD)(l5xmx{?cnv0mV
zE&rb5v7Wjv_zmN{6&**GNo6j-wR8cT-40&aDYkUblnL1kT}RNrW(P{J=TDevGeLj#
zxUZODMI4NP_0g>#j8nr->5k%j8PP1f213|uKW>gguQJR|D>#DYEPNQE8ZrSlZ19|9
z_b-`NoZff45cpZD;Z!}N0o!nX;GYo4J*-`pqwN?b(isXogb0=G1ej6f_#yjdM8AUc
z^7X~P`mF^;<fs5FlAp*%IKi35wEWYB3(CQ2SiP}w>W1gFa*p!0>e3-gRb`NiR1hM4
zZ&ohmFqD1y;vho>XhJ?yLiwkEaQcxxDWwU=k)r*-UpNAU?p)biwUpwalY&)?g}IeW
zBjxV4^nP}b*?_B5kmM<!<%bNxH_5>V*k1VbC4M@)lu!!5+^)Kbr2LkKWnx~m6B?t~
z5#Oi~zrJYjD8H=~A}uE&aV{Wvy13b9&o|RaWuG{F$v3nuve2AY^EGOze~=nFh@Keb
zp()b!<htFJ>ef<0i(IUz2|@@ma=K$$$>7LZ7^mEdXi&~^cUCmo7FQ2oNxS+9eGWX4
zE^}=fs}_RJMK+0&xbT}*r6OG(sgzjsl!mVw-5#eyAdYS^hON<*_&n@Bwd0w+C)L)e
z`d8s&bsE!1pk8=bP`Q3MRz53A4;{IPG>ivLx}cBa3k)|$(O!xaWg+#RLxF)Y8H3^Z
zsGeatfs(XQIYD}OZ$o`l7Y&bVvbz=}GuuUeKJjg<h*m81<MZd9;wpTTf~Bk-OW+xD
zV*E%o%XrOvPec$IRVbUpVv4h4uCoz2M}{U<5{-3bdX5=40;V{o1Q!VmaU@(8Qth(!
za-lR3_}o}3GAE$DAesMY{g2$eQX)A{3G7h8s^-<u6nD_p1sMh4+$w0<+9Ba3p$|$F
zyTG}*RCOW1PyT>vWk`+=iMjvW2qhzh36F48t3*EzFIUks%pl<)@px`Go)j~Tc@h3W
z&ZK7alRtlnynz_Df!I9Fi9RuV_2Mn{4}5R{2Z6q#K-it5J=U4RJ;ov@A-xbzc`Lil
zVaZIZlVw_MV&9sPfrgc({6?>w6;7Q2z=Y8!;qJ`T+P;nKnN2Qzv*g<c>0M3O2EW-)
zdVEath`_?@ecK;+Rb0`o70sHMVdbW3;+_?a>na)sK!zC!=?m$IaOY(e;miq(AY~~N
zo0tpLQJcSemX!{ySC)cu=?hwmYTwxI8VnxIobG{Bg)UlFA@{&=DI=Ql9_QK6ht#<F
zH9P2~d>Vv`k@Pr^UaIk?4>2IFuz8tdK9tI#mjb9XuUSM&$q`jvjtz9>RFNt*mYmK|
zx%9K<y^(llE#9hCCADVl_FOOxQV5*UcWDIItwL}UB)^UzcDyIM6BV!+UALqdnZcN?
zNNwe)Z9&G&Dva7PbBaVT*bp;5;k{sDv{XEFEsn1%u&B=*9X)~=vNU6vmv)J9_hYv3
zJAKL?<^XuF#WDrP&%1ye<P+FWN_u0{wt2r<FpqMfzJI%o8l#Ozh&O2SxT>^cFs}VB
zk-+|1U??!aHj*P&PLEkDXbxMr=Wj7498;YbJkkYUsOQw+;7P35*3X?l-ooz9f0M)V
zXGkK9^!YR|=S7dHzWc^~k$)HzNAZQv+~Qo~H(2?_MMA0y^J2`4jEgh#-V<T~@UI*3
zBW?c98YZnVw)hNRJ2$b4nyaTpw$=!@p86-gZt39KT25pyE%P(QCQ<DEGd;@!5R{8M
z$Coa0cogUS>|#S|qRJuim8*TIR?qqmUHB=PNB4m1^XGM^mw4)ymLXG(-p6?-i71ev
zaPC0+>>zSxX6yR$g<=XV@z=ODINKmcR<RtT_JiL-iAyES=B;AupL+B<G_%G!pV6qE
z6{gnuqArca@tt_3X3{W&0*z4vWlJ@bw4!CcI7u{9njFl?5o}Hpx^CKr^%P8u<K8tk
zM~p$&G$SI>U6uy9LE+D_esqVf(`sdKb%ii>MKFqUkXVZg!C{<PiD(duL1EH%(alLJ
zXwoE};CLxlaNci7JOb#mW=tFtR;!)EUnDJun|P~f#oU=}3X`-eVozcDDf+Ux^ci46
z7zkr?lH(&1&mUVqja*tpCZwQ~ZQ)^4u5hqfcEIaXcX_lT=*T8NEX)Nc{g@SVDKU}4
z=)gP9B*Vs6w_C@>v;_}q<pB9Lg+V3Hfe?6oT~c<umCQT5S0$mOdWGc9VPI0%*{;L=
zJj-LqZKg_GQu&6uxxgL@cn^h%t^uNW2b~}5OVO{mdo68dm8OSg)J)Q6JBvEj+>;ev
z>+XJ<UHgkw%?(+aT>#H6eJWXo#3J;u&%MRDb&l?66S2x&^`F?Xz1WIe!Qn91?d0B)
za;{LD=3!|4mt>DD1L3>G0r9QKGRbV1Rm=lpyTpQTo5()!KKmzC_(mUcp-?-(m5TGs
zEJpSvA?<R9H?5{5NfZnfNK437yBhW*?K*&Aa%zlSRK+)lG;9z_s;Cs#ADbcYYS=pl
zssKUlLWw{!1H0Hx5*^lotN~p__~v_h!FK&H)&b4Jr!v<y_{-#7?Q1?Dfg<D`{Qfn&
z67o%?%d}ma@gPpA>+i5ROix{r;ZoNwp2+&Ec2C1S#0&ivqvn*kJumK2hHVX}`g3X$
z499w)rRB(^#0+9ICV{2r?-ZQXk(B^#65$w_6sIx9=T*Y^5r%=_T|&WiK$y=q)o2k_
zE(7`J1oWb<d0SLD8S+R3hiPcR#lF;{uUet@CH(;J2tru2dgLeZhgFztzmL>4`3cu%
zAJ=C@!;6C@!vI=2*)y*>xuWOD;4RA9#8SjLmizWk@A4g#Kg*KPDO&^FKH+szc5>JZ
z{Vs)URGqB-=Y?#&Q1xL+QV@6e75IX@k+_HjboopLA{SzR&NxwLL<)kFzPhY*;TgG*
z_Yx+fIP#8NIX^|GAIyp`t}wj3QaXD|Tyy;%p|lL@g~_#8^*{IDlRdK%1f5y0(WER&
zr5KIike0?ACE}&qBR2+N6#>JUg=YiEvb?w;PN<e`tY@2@;U&k?&<XqVIx${SD`-m!
zqt?3|E79CnnuTYyn=A+4+<?@{=Tb-7;20>uM)_eW_YAodGsP|>U=PhmM+olt+@TLJ
z)W@qVF}pd9IA}8rN3~K+Mm>YZjBwt3xes6$W5BNX1z{NvY}tDg2oJ~<qYj7AUx+Rq
zC1P^DC@^<b6r+gIsG#=Q0&0d(^y#(t$QgNIqX><hn2k6lj|akjA3J`|s4@|~J=72g
z$Sjp@4{6+*I+=}PbC3um=n$c+C7lnJcoq<W&PMrjyMsh?Ike3tImxmXIa^@_8bakJ
zn8w>kPK{omHxQ;j2&T}N2?SfT7y<;HqbbTvGDfTRl^ZP3L{}w#LMWfI*><(=I(SRQ
zitBoI%fc|16Of+Knd=)89cnR;l%KJK1ImBBm0+5DH&u5)PvM`F>>E2RMsd*iXkJrz
z2^;WPNy@!uRevZj^;8Armp<Qbq##^$^I_c-B3q>6Wtiw>Iz>I5-s@EZ*>pv38VanD
znR7)iDr$p4QZ+iqJ)K4gDVw7L7v5WzFs#XozHhqlR>l)$h=?56vn}*FTi*L&=Iyp|
zW7ya4jZVV&;BP(?oG4LGd9O&w0)`oZV>mt3B^JgqUIizNs3q~tfoMYQX1w;X3n7uS
zAhCNn6y?V56@kTI<E1S<F>aes!84<^aZ}wy(9B`ve|I@gPiGuXsCCD1^gAIjF<~m1
zrOVQt{W*5B3JBX(fQQ6l60X}(LQ$bQh$WYaeIWEV4%*ql)}$1n;kM?8Yne@(?c_y$
zl5Im*&8v+>dXYk>v()rJy)j~jc%E|ENVW<^*{K(D+(?H}>yp0WlDbH1e+Olg<gL2)
z6Sb0AhJ9ZK=^zgN$e+I0(&AD7LZMQVK-1szgYJijc!u;tn)|qYWu$Z>ZW6TQ)qO@S
zes=buRGmS;`x`AX;`^cs)-yI}Jc<$$C$m_LXChAi1bfdcB(_1`TDxCyTtqsgt!ejB
zG?35)i@^)6!C@r3>sFVBO@{XnibU|K-FA_Y;3Zub%FR}XM9fiB4vr1nuiWqJB0~48
z;+QjL<=a|f>MqT;<P7v4*~?b9uCloJrxx%pP>^df6x0Viov7nzs8%N6=Lm^vBOwAI
zfW#v^8zy8zY}<9!Fq)zn=QO~)Ng|yN@Pwjr1p7dv8S?i}rHlCIP`t7dpJd#}zb(Mj
zqm;Ooo}J%=-%^VidI<uJ8F?B0NOEqw^9YvFj%^)lbe1eVc=L-+UAzQ(_RR-Dver`M
z#6|@t^q%&2Y4&Bxpp^0`Qg=91>uP{>8de10%FfgZb_!YmobFju!AVJm&rMZ(aA#}C
zsV@0cjucc}ydx1#AIkG7YYc-U`;)?~{0Ui%T^1^?szi_;cG30BHUB@(&M7z(pj+1y
zJDJ$FZQHhOV`AfrZQFJ-v2EM7o$T3lF8+Pa)v0~kS6yAz-PNn#=UFJD{OU?C<H`IY
zh8^1HbO{RmHm9g=zgFu@uU<Mrh?c@#ip>9PvgDtt;aZ(ca;8YMZBOxMY{uM2YU$IS
zwI1lmT!d;ZvC+vde&>so_FxfudfW0R622JT%m}9JU$2O%yL)%L_Lon~|DHgi7k2*J
zr25gDR8%h4P}IUmKRQffJ#gssSe1a(ouAle>J600%In4T6UBg1qsXtDZ$nX@KRwPp
zdPKRx=EvzZl;B=FKfIV#gIBsHZ9rggiwEhB{|!zia|F%ttLw+G=cjzzQs*5k*iTuz
zm;CVy|5fG54?MTyOMmty^)~tAi`B;uWQVFP$U)-C2O@Oq?&j<UvWaU4auxy+j6jOD
zMi{M`b<uKCm{+hsb(Wix+zsEr6ebKU4na9oBq)cERYPz?BSLcV+!Ck|-RE-#j$mya
z^c{Iv#_bY0HO{2jCZd@prqDD!502Br(o>JwU8{HWET;)O!RgTMwxWdI9RD?($eCTS
z6+x+N&6eGz)Xb`Q8Q8KTAEJ4I+7!m*5|G2$hV6M*=yuH<m$3jF;4@pwRBaFQxRIOK
zf&G3m%LU>(0QEUNN$4Li#Sqq7QC>Yw7z14OtLK}o==?@V{>$gI)DK$t$=)!@_cs~R
zmNO6J11~U|AVx|*6$h@`fKyqqIjE5Wf;AyDx{ypg)xvt-L<L++XL~KSE4f$`qixVc
z6CBzCgQ_HkHdGf2!&EOGc!_fE&?Ic&X?WM^7*m#z24-!}1IDZC--d^>X&6+-5-<bA
zLNvRJy^wf%6dM<qFcPxy#D&!0Sv~X`LezDXQW!k9AiUyLjL@wEqnicFddaKstvOMn
z4_7%GB`>4Q@YR&U-yeI5;a4l1uJ&G+^uM2XaKS$KV<NhGCL+qBd9z*a28s4VTW_}V
zUbe=nvupH9;>&+^N?Uh{lRfdd1R?A%%e1a6=3~QK{3D8*OXf-UZw!I+?~oZ5v~o}5
zQl5_v*#>saIKp>?|FM!ijTwZQJ0jY2J!2O4Z@g8QfCn!T=BUG$GBb>+8^$SylpU}s
zhM1j$%smrdbhZIdUvySs#vXFE0TN$%I{@Wp&N}SEIz|U5)9D)~Nj%J@+;lBFXOE1N
zpXTAKSlj`&e2qO5XZPCSJ6ha<wp7iHjgu$!*jY7EtGe`!=eidPBGy?~iq1|5#Q_GI
zc^pUFBtwoNwhkd&Ke8<ZW^L`48|gW9hVH!jgc$_#dZGj5lzCI>y6;MAqBKs<HZ1e{
z!8NLQ(+uf)sPJ0H$Qyj_1-C^Mxe?k0{9aj|`m`GLi3YW`YA}CDFJ9gsbEAB*T1~Kb
zyfohF(J|YA1R;9?FK}y<0CM3S=s!UA%#)UY_8!2zP_!69bpEm9$1nFLV1$<=6VKL7
zXkMFDCa?|AvvckT#Izk)n9aAbkKLs4rVv_%ZvMQh5K+ht6kJ(`c4=$P2Xykum%KpB
z>?xt~qia&6e-#bFdiK0I!}_KIs7E3G08{st`!NBEQyxnCM~F`#eda7J#M>KlSUjT<
z%Z)tj09;OytA$p)HzBmwy4jloK4GDNS|}yxDgSneY3Q_&Z`d8SWlt~4K%NfFKxq$2
zX2UVlP7+y|*QJEx?-FA6TeQjyf_4VYX5g_8XJD-G!cs&lfR$bxQN1onllm?$(+~8k
zKYZ9s9&o5Jqa1+Q5eU3K;~k_8v6i$?FEaDZwjDt!v;2{!w06kAfHZriR2VBqaMpa_
z7i_<P4!Cd~v>0;C9Y&yJ8&1i=zv)!wp{NfCRRx$zj9`n6Wf(ai=76XlV71}RglstS
zZbtKmeBAM@hMWu(wgElwir$jw0n_gm-y-P&)$Xd^!rO(s+*vv4WbPtw!sa6S=<hz=
zvVOyM573_WVKai+_p59I*4$x^_o|yZu9|vqIWX-<%H1KR`?($IwnaO-AgJ&3)*pN{
zqGj7~`~nO+@rm1zSN4M1fbjdJZxQ!Jnf0P+2cyk4BfKn^`Aiiu2|^}&W82dpeD_W9
zjt>}^vdediS;hUsFD?}mzf<-lpvS#A{y{zzSWn13DF+tk#t`rR#wm+RX60JO4m6l0
zf-God9OUU``0~sy`yaIKOwm|_U$h!w$QH6}hd8cx(3xij#wu(vL|Dzckx)6=Z@9CK
zsK9YWz(L^|0f`hXtP+@EfX`sNroSI9@@FaOMk&}F#mVr9_Fj<Z5JeDpf!|$PWA(4=
z!n3C;;OXbu;|>t{e$=)N$k1kpQLRBR8Dex6T+?;l6>QnVtEzg!DG6B}=qWI-tW^{f
z_JHIM0-f{~;L6Ksw%q!^Ow}b|R$~&>Fi+%bG!*0XkDxrU0$aRn0$pHr=)OW{mES7J
zuP|_)5U@*<mM<LHGF&aFW<%HyY#8__q!v<gy%qq#C-3Yk?1@b=MPf`jt0OTd@6*5D
zmUWTFxE~o~*A_fAMOgw$CvBIA*yx3vsl4gU@lTzIG0@PkM&mfZc7R;FAUsS!8#cH(
z2G3JxN1ptqRv~m3=OsUO#_6XW;GtE>iGVVXbpT9uw^0k7DWw|42pJCBNo%*D8pWlx
zcZdzn<unJ@TuH1~v(M?N8;5NG4Qap2fuBd>M!(+~<w+%u+A}gs5e#>JXI4;0@LVyl
z_|aCBCbt(9>H5ON!Y`ojmCWQo`%rH?B=L?nE#hVX=M%gA3Sp1s6C(J|7-_P{5Z4zt
z^`Nv4v&WzI6>~EzccA)}bTd*v(TfujVW0ibs5`{$6Fw(T;W#yEoripW7mRRMlyDC<
ze?XfEY8w&HT^{2${<i<5A7Lj9g@Z(fgC;>S>^hA^X^winK6JGAo5-I$f{#PvamZ#4
zpF9$|P6W1JDL&lPh=8uZH3TEdJR;Gd7$f2j5%vt?Tbo|gVB{c0r%cpPrD%W?HM_D7
zTk@m}*)-9L197&*r5dd3rt1Z7N3sZE<bo$6*{%)V5L3s@gxTKTWNV#PC%BYf+B(pB
zc{rgY(*Rot<YISs_;%Fnz!X)E)B=H^=}#+~A&<BsoJo<Rni@ykN!FGiMR!YE2>bfT
z)U23jW4=9uQfJ!7cRVp_bH+2TQIbY>2SMr(F1!h-vY$Hw)}&GnP%-NEmgj+tdzN9!
z&)X!**hP@2XMq^;hF$o8(vcU2FfO@t>7DLtyq=k78kn)hq(pPYJ~%o8*E;CsZ;lx!
zNr;(yNF7gvv>Kna?ZJWV!Nwg{b5kj6JhJa>SQtY_+Rikhjv>2Cz9@Lu-_8W0N&N<l
z2o0i`QD~*TV@8CNC`SzXGyvv7Bn?8UJTVn2SuBuG`Zw#Xu-fH0AgeX5U*?=#zerQy
zDJWZ~ShCYok~~UCO<5aPv&WRo*1!eaOuaDP6EMs)fMw2h$I^EqDN^c`(xzOYnS<ZD
z(CLI%VXzUU!k<!!ZHjHOwbThnjj%JcezsC<DvQJxh1n59wu!*W!-v}(+`_uv>}Fw7
z9UO`2HgS#YXRtoD<&wJyD7qNyh=k)?7wMQMTbJ@xL|YyxLemHSIuz4>gE$xkwk|sZ
zb9q@q6qG;J+PNIp7ckF!hlYCrVSth&O7oDsP*O>zm258`Lvwbcp$CcUfCE+`eI3Dy
zA}a|9Y61lJxz;bqFsN!myzA3h3}IwY*n3etXHeOx$m*Kmo4*3&uvla?8-iUp##-Fh
z<16utTYTL)BFL(L*U)J&pL8%sZl;$oE1!k3Hl~>|QGW!UKo(K!5^Q8P`Cr`-ye_rd
zT?mjezNxTB(-OAVC6Fe<KiU8)Pm|jJ{?#?3w+o+0O5iq;8nfH~lM(ssD>Q+c6rW<H
zJ5bRat|E=bJ-*bDTdZTUM`h1(bGcu#jPTxEJk7gCFqmCr%1w|gH_f+?he79yr=Ej(
zX0=Wry+DA<L@D%5k<Y_Czr-0>u(~$Si63@DnCt@oLG7DmX&%Mj3WcAr8+3ex>kq5c
zo9wlxb!d|TRkKaGq5MI>85v3-dl~4vZ|H;-JFLh(i2D9p`;>B)Tkh0Wp#-ED)JBjK
zSZ-gb*8qN*#xkdP^;*HNQ1;6oevy1bggpRFyqPK_Y$W{L$1w@sff9FDX}t@i7(_=3
zqAkfaws3JoZ7Y@{JIb*s=gJ*FV!T-C>`2X^&{4uw*YqrLxs?2+Jk)vK(3u%_e9m=X
zrpyf{6%6^wQZJ`k7SjW2+(lUVLY#*<6~|9W^IG|B{I)~To<o~+l6mpNrcB8`5*^tR
zXYj$~u_uJ&j_7PldRDnp2Jk~=60tIR`y(UXi*54i7eaK$Hu)PxB)q53avuaTyr%=N
z4pL5Gee`cD&$PxS<Gi5xB;{=uWKPk*Y_`seA%=+5T4^#UZI$s7U(8ta1HuN)F`@^S
zIQH!^Ut7G=UZxbXZrem^2%7%5JIBr(#DrJOUYV0z{<PkMS<KKC<yTv=yQY@KAvkPC
zi>i>Q@&&hS^~(tr$Z8t=hMN8Sw3%`Dl3oMNP7Z(Tj%!-7ePLVl$~w#j<@!pyV@JqJ
zA*w=eH3UyWr&|Cbx{^5t$%nLvwekfqLZTEey!=3;oy}k9_t|ZJ(mQWCzE>EE-}(cf
zcW@|?_J$Q4kmm8jA!9YxBLB3qP$$xGba7ldlyGg5WPR}IurCuR7V%qqj_Kg?6R_@T
z&;BQ-T%9yt{gn;qopd0#fXl)`52#{ob4B1W-;F#-M)5Z%T<E-Csqvf^hiB#r?^{yi
zPo3E4*LibRQiH7bfp6pfE*ANViS_Ol;vf`)KPuTa_UnKYk??1!KlToMS>cAR1`ed8
zH&tRvlrv6D<dF$PsR?g%q(kteCV+W8zvM=~zz$zT@dPW?1x-}-g$gU$s{CdR%);F-
zJWosw>4;Tm;;Y-3o-D}Nm=tI^b%?d2E3GG=FkLHrmBxsx%LcTirmzf2%aRCaZA%!f
z4Tc>X$nWOr>J4T~gwB&KlRh_;F(aA-A@xAt#^v>Mwef0dj!cu^%evZQ(f*FVoH#2B
zQKJ4_Oan_b@J!Ve-oQ%@cYa+14q@#b3Cd}9_bd$6zk$+nkn`LNiiEn3@2DVp<?(^K
zz^;|DQRK3AgR$hqrSfO2z`YO6SvXSruQDYq-+b^LJRL(lcf^6)XP(#*xvB(@{plY1
z;*xkq_YB4n8FXTTC7n=YQVR`ha6n*=G&IOy2uMcyq&V@c4ndW!!+$3x?&@%Y(IqGw
z7G{C3jITKa(F9~3!LE{-_v1eL(EIF&-;5mU6wf{l{!=VNKV|7C%x*yV35_3zNET5j
zDp`O4gzJ?o5OhQ!xGSq_q+HZEgoPZXmpd4SNv$&;2-ql+pZeu&RQh6|UiLVHhoEiE
zk)xWaiiw}KhNiV3ueC(4q5rKX=7u)}b|CIG{Ly4l?zqhFWI8z&sYl#NayTACHp^9D
zx<7Gp)qTybJon{)c|p=Vk`&z9P@^Uf_BvZ84}Lu=P<9S?Cn$mIZmcc78*Kt{1$Wiy
zz><%W#?ez76zM=0nvg~%mL~j`52C!6K|0ioc+;W45@(y7Tp_@pN1Y(e5(tn?9)}C-
zZUZTV^X-PwzwC9^FdN_w4TGA8E)>Vx&x2oy7cH+7*b$wSD}hREvzkQQX5+G}|0nZ(
zh`A}J@p8i7)Rx?leSC3#@2Cay&99hvK|gKiO<VxxhKYie2h@Y`7h@veC;%OROx^CX
zt%_IcLF8fgpm4YL>3j^wcD@_W8q@QLJfFe2za-2H_<#Jp2?+&LaabXSlm$I&+%OS#
zLAnePM|_o<?Q2IxJJP^czZI}YL-~4goywN^#Jpu`?w%~+E1k`3MEKW(0?J+6;Kk0p
zmn>x(jm!Eq=PsaR*{ePA_>ljpj&)PVs!JO>F(c0_{{>0D5)4{D(erXI+EE|bI}Lr-
zX+zmyNZre@794Dw>{OWh{wkm`EGA;yzZMLSJeClq6LY&7W$1QLr*yk>rh?u6IN=Li
zbN66930NW7A^Kve3+5|(a_rVN1k7=^0&kh~{*r@1_5K{kn6B{~O3>nv6wiiho;H_=
zLO(zKN2Ql!=eU^ojtdL)y(4*N6}yoUL9TBNqXgtorW0NJ*0HSjCRjb~5ah#vo-t-`
z5W_dp(FnNb>fMzvDgJFyK?Vz`r;7LoJp=_a2(JP0ebjlhYPmPui552bVwAonwEmta
zjc|s%Mdz2G2Vw9Lc-VO4E{_MJ4iSCG#i1D2DLwg5YrOXk>TO*ov@d0C3CK5=yRu!N
z+fnl^y9ci~jUPC~5n9qc_~U5iEWQ0ON;@3$VfCu^c0l^Q+++&>2v0jm=$My7Q71Z#
z333jNUx4xv2!}9VSfeR3T>@=e)V5(ezV#tq)Tj?eqWo^iy}En-C!8K#?qKd%sY8c1
z)=dJ$t==0AA6f1I+8ejG4qvSN=*~X#J(#y-cUbLc>Mh6{lP{HD?9P~auzEM0%v*&-
zydM(KTLuQj4vNP;52I8!IobG2vb0A|!T^O#zw;jTebq@HhE6O$DP<SbfNEzBD890o
zO2kP(>SwDe=8F+1lS=busJsBe(b^Z$kmX)i9o~%kp9dRgNOwD=99aF;YKEukLPdH#
z89mKr10KA7m{ZW(UXf2E`a>i%Q!6C)UD3m~;r$oTkMi+Yvb9q22#oO5*|oq~;lsUR
z_w;N{8j^_WFK<~|YxJROI=1-=G+Aujj55;$R^3ify6uT8okPM?V<!q@Fw#WWPN8fp
zb)p3PtK?;9;>!Y${<r{jO!wx9o-c?#Hw-bwM`sLhEcYovhR!2!J1$r<pJElnQNz=4
zl-3t8Kl8L2LF!k@nWL=F-$lqm@UYG92L5MM%P)hdcA!5WT$KW3!`j7e?#aZ3MxLKe
z1!{Sw7TShY$=yE{0ypyI_r0)PKU=da=NtNl9^SZaiU%vQyYXNs*PU^3L|T@;_K*X`
z2RvVpAw8v~JH^^|AdRKuxH;<$xSm|AHoae{Z7|7xH}V=eXuWdG0=})h8oeF4@9=eQ
zdwi<n#`MTS5mM@okqeOm^K__T+Y&k3P%niplR=*dq7p^X_b?JE`hppsSnuQZ24SCQ
zfU%%MMEE&FFATDAwX_04nH7>GYpkqt%-KATz0wQ>x~0!L#S3tCt8$0JW#kqsONYp1
zkn8z*!_pKW1k0{`QJ7wQ7V66rgAV$mot1d93kMk7PFF{Cy+6zc>Q|E*p{c4kgFg@j
zJwsEA2`-C#kt>PA)(Y_Gl-!GZG8#er1NA1v>is&X>ZHwEc$A$bLFz~I%acYKmVM}J
zA)EEP+(Law`-Y=p2)K_Z&Ip9fiwP2u%Gunw#ZHNDX5y5(VxdC2Xzv|B_DwLgJtd6W
zudWyHnxfp!_ZfTXz`Vjc;9@`3x5(Fx<8?8o&;5-q!3!tOkWz4EZ=ImvDuJclI}MAt
z(H4OLNoIJqEW2y9s2YF%!p_L8Ez_`6?Pu5Lra3anv?{-tp4;|<uL|8z?^-==3qdyx
zMNgX{i3>~s2~UKw*m68BiS=68l4Mmy6N*y$d#rP4R7Hm}Hzn@byz9yCFuwEYQwPJX
zll;r>1y(jo+Ue3q2RkJmjZ+l=QTbOkKG=$3Pc#UzvL)q^eB3HR5r{;7c2!^9*utWp
zq1lfV2h+C+{i~_7b~S<SzC$rHo2vsra4Fs73lFK<REBu7E9}v}RqIIb#EfQ~a_g8|
z<)N8Sp3~@1`e6P&u56eF_7<orbqZ^@$fuz=hBydCd&^xj(QP5k%(+s7;gBY-tVcv@
z8JGhPI;1bhJOlr&1kGBBIs1HaLqwNW2W3a(X-{PCkVrih;<6gh^2>Xj(!lD7WKJ}$
zoEFfh1$Jm5Z5X8n6|!E=pv?^@)x40e#0?Ut_1mi1v`()QFwulsC#eml-L&L@+~sD$
zYNsRD>3HPP8ZjKt(FJE;c#w3~zE-g|lH7CcTI~LBcn(0-(s;^}vgOIeFCoTf+%hgf
zvu0D;v#~|xR<3)bw^L(M>i&4Y7_d#dL6BA&bzET^QJ$hxh2oxCA*N+auIcPM!wk&E
z)}o*d@3-r&?RH=ryQL=T2y~F2!K5@Tb+NQz<N;I)x6UOoHyx6*?uk*54ME)eVA$zO
zD6_yOknT!Z|Hf3dTtjfsjzsjxr{1yN1&s+s>JCvKmu%lPvHQdpq@1^0K_w*bMCq2`
z7G-|xnc8<@3$A@D=Ti?cN~~bp-d-ua*nZ|Fz3I=LbqRr23Z~It$XQEyUU^k#6`h?t
zF`wn6=?n8&U;cE^!W|1lLvqD6{);^kSP#MX3S8+gwqctqa@4$?Yh`KD%mx^t*6dVr
z=$`KNOh+4hS)NM$aG;Y?n_X7_+gNL<0+t)3C+Q#%w}g4s4t|%7c_T6MA2RY<FuimN
zPNLJEAb6YaO?b-lj0+^VOs$`_mRvp^==p21F+Rw%bvh17ue9ez7%_|3zw;MhK&UH>
z4`P4kvCo!+<(rCA;lJ+e_}=!5*yoeCC0e<>jj|pS1abC=7EA_(XFGy^_N61dHoy1`
zQzJqvK3UaOEnZtiADo;X+8B&=A6_R^f~>o2I(a3{rtKi^?n-!}GM-T+Z!Ax1a0z^T
zQ{aP741RTmTFi7HUCQmL2V4z@{_ViSdReGuD<eW5cgb6fZBtsBBbg?tX5m`P-1W<}
zy}6=)-X1>2C4g&=RUDs15}8of|M$`J`Q~x14kY>6eY@w%{fT^a%X(VUCCBu|%sJB2
zt8fK3Ki4|S*?qv(AroOyB~7WdytSwCf`M&)wZq#$^ZG{DdDgoTx}p(@Y_;NB^NzrN
zn<Olv@sa(LrQw`Qy%hay3ih-4(!KASqMHEvv)V%ar?S9DM(u?@VWVg4{9Cx;gXOx0
zXsMWgDSA}K)b`Fzpqy^0+!0BMzw*)Ta|{>e6#ZItne1a_8iX^7u3)5c=*teszNg!3
zSDyRB?y}Vpp;N6DLT_jBnn{9N!UUhFp@*25TLzdDN&H!0h4pdZLltvMe7SppbmOlk
zHpU4SZ10UEyu>er-Js{ac<Iqagg)n7pzriCA8t;{-N{|}XOPWAYkf6Ti?3GY!_A$y
zZ4kebQ@M#*OKdQ$o~v2?XX4i$l}ha1!8zD!Tl@125q80a#J<W>p@<xC-ba_y@)tm#
z=dXrGzPQSl5XDEl(wCqyPcoSmh<+oV-&y6kMee;|eU3?!yhXs5Lw1pD`w`4#Suh>Z
zPN-@yPOqj^iz$OU?QM~`%2{DSHDN*HQyeSa^Io9P6nNM6FsWG}e1Wm+uvH{`OduEk
zvXRNOw<SKYPSzhmdnhNqXKZxPa?|SUm?2u-f7k2o$(<-Qb?EsRQ;j!URcZ?Dq}xmz
zKWqOv(*M0Rr#E%!_?LVda}Xro9Zrj5{bhVe4o?dW()h5T9~l`$@nM{wfGJi+`Y^e0
z7Z&xZ<^99-4u^}uTJEeEz?^OwlN}CwQU1X6t*hN^Ggl2RII=r7qpN78s$A2{K-&bl
zI-qoLWa#3QL>3P91$fyElom>FVO<s{UT{;OvvuH;yWTk4TE^PmACO|tS5-6YQ@nU|
zeURy$Zh5#WDqleOY%D5d>w7{$`p}gdQa&zE802;PYqX5AHf}TYc7<cxHwwftW#u@a
zQB!=#*?9|bCM#8Lm%$r#6Z`h7Vs*Ehm{v=xWWdi21{UgfM>n+W(6i^NiZ(t=yc_N`
z3ua)&+45E+44y^3n?~S~WS0l#d$QVcfg(R1F{tVTk-kf%$=@tIs@6%>hG_BbbA1D2
z9BgaLDq{`wmpL~ZgVi59XR_Mf4#9Wg)-ASY2;9C(Z_K~@A8%v%AS_f>76irhH=nYp
zz9vr$R=ZBOzd@v7@NyxebE=wc85P>4BC(iy#K;Zl+U8*RHDk`c^l>Kx6@qOyCnhcP
zvp4H41x%eFXR`m!q$gt2m$B&%-dr<vi0DRKK2IG$<tom3S9PfNZMKfFK1-^vfh`@d
z*+kGUkNitYcOgu7!QN5TLlpC5%MpQtlT^UX5rK=-!ok+DPk{4^t&J1nxNi}{nXR+0
zYpTC*+S)VNIP^qf*s3MJ_oIAMx_3i0KWhN?<s%T+8cqZ2(fJ$j0@}{t9<`ms`}sed
zK>tnoKRLaq^Zp}TivO`{0{_b-`~P%D6enNE{X-!~eipck7tv6)?f?ZsT~!6{eOl!T
zP5A`zQisaADTwN=9aFB>gAli1k3inPSg}NrWfy1ol03~il3X>z6ccjJ-e%fAr!VE+
z-YzECe-*YNiozNj>RbjQqz1RsOrjbN7q&&%V660yiq3`9Q-rS!q!~!aqn13lNgs{d
zeCri^cVyA49>cg%F^7<XtC^gpvpoJKy;v@&Vr|RS62(Z+PWbFOizQrIr<hiaP%iEl
zV~h`b_K~vLDHT&yrLVE@&dFr<mVLcnaOIctU8^&(6%Mn3gw3z2s8oyT<L7A@{hh|5
z#xYQnQ1Q?%_9s2l)I*cFxYdNBp@kx|;ue?DfLG-Lb}hlMM#@Q64bMrEu|hRNy8;uy
zMpeF)LAG_s#jYBn^^m+V5!+@owLq3V4f5xSO8AAU)lB=Jmc@KU*M0?fKols|24)k3
zRCA|-R7B?_p5$D+*sPgWF<VJt4mMkC3NH3@Cn+idhn_bfcQk?QqH?~djN4oTCR%HX
zfwo)8z2Y{b7>f(+g+`;{-d(L`4MNr)e*h17b<&P4Z`6W18c)Qf&ms*vS8Zqja}(+`
ziUM_j50)Y7=R=3_kq}R~hk?>?J}fjoc8_G55%z1U>Cwy{aCGs<4!YSO13)>RWrVSn
zegn`sv7_@$x^C<z(A`XH3kF>a;?OPEJ$#EJ;9om_N$BaA+7bTVj&aXTTmRm^siHKO
z-LPgKnjcHplHW!;i&_qtG_Q;D!~K>aYKZZ-4Z_^v61urM1TlFb6lwAQHGDQgCQa+S
z=pFcIiBpuV(TD=SSNB!P5JoJA9j;c7KItuT`lr%h6z!&o6heDUobiz4gkqh%fEfgr
zLs7e0VcMrdNS}GUoS?h-D$$VR7z)WH$RdYeq)RZ+E{=8FqXkZ49EfudYTqr0=LHn=
z8T_t8P)}ic!dBoNCk|0Q&L8_QnOtHRn`9T<LzvUP73j=O;1r3o*`!o0L2u|5;dMK?
zyTJO4xnSq&+3+tm;_KDDW7rQj{^*Yc{k~_VC^}`S<8X{T*HqClLu)@r=4fQ4ykoYr
zpU?~U%4R6fF<!B}e-fn6^u`_f|JxUysM#kd;vcA7_Rk3YzulU$8vjw}L@R6mQ$M5d
z1xd8;6cG_X?-#opCX)+8K^+-ESN~oQyR%(|zv^`<NzVp*U-7<$crA=#<~ASGf^$rq
zYCZXw&bqjq(ckg=)yw5QDi{~^0(viNCM6V-T1rdyVyDFt18e=eO<m(l%wVwMBguNK
zAWUFd3)Qy<Qf9rDs*92xl-uk*?oT3!sb4SjAJZ}dhU9uBejZP$_Hrje_aq!%g1S>s
zx|bSvi_>%iI``~W&2!eXC!1+SX`h&ljr=|JsNOpEY={6(`$bI?qKn+%BdMIhgx=t#
zEC&)dmO_AOdcwSxu6a7LnGvlIPz<N7qdsl`srVX}^rQ|m8M9<T)1@HZ6(nkVx}5oh
ztXCRUl^WeCDxA@Ps6ufzQ9wSHy_8ksItsqmldL^7Ri@yS1zqM4ta1u~HJ#25)u*o;
zcX?H@o+ao0Yg6f8tOStcXuZ)KZMD>Oblj*@p6OD-5<%@3!FPgA<sS6cF>j?xo1k$1
zC0ExLFL^tep5O-LFLk2o$(QVVYnpsV!<#h#korefn0q?iC2Q>s5#yoKQ86vXPCdl6
zJhRGbQ;cmx2q#;&ZdQZ-ZKp#LhwAy&O!Ul5fSbjpo<QZQB|&jkQK|}}a|^MLj=Qv;
zVI;*6F1L(kCV8uL!@}^vfjF`MVyL=@@`HI%rAoMEW{X$%dyr&-r^&WRQ5SH&l8}9!
z!7XcWaNU0$VQ`~r4+a7X`554p@^M8E|Md&)h8UjU*npvraL{lN5kuAi))D6oYEW{J
za?mpB<(DHkW9;kigUNy~$YUFyhnBy58g<Xci|B~C1bm`8LONpJfVRL_oI9|6Y4>CU
zpbPD*u@^4mp8DD!Pna7doe#MG8>XT#Z(Xw^{^#hI|MiRY|Mv>|4`2CzII1o$D0dan
zdw10y_Lm7LDA+JqiZ~cxpde7t1P8E0e{e`3#ZVIh;xU=5^j~vNd>VJFOMg^v`3?f0
zDUg4oqJnkm#;Uq?#Xf1QSpPvqo9e09$xKa`@!$RK!QV;s{rX#3Sy6d$?m6Jx!*|c|
z3ng6M#yuSQ_X?NbkhHCPIxhXm3w72l*>|5{kl*34lwD23UT)TIfAgnPGu+Q*uu3OD
zzvk$eORRnxaB=0{h5Wt?$KzfIXK&=q&Yh3H-A~-gv}(J#IX#8Dxj8naE0+ei+T5I)
z;@#Y|9{5Od=HlkY903RX&Gm9~yaBrA9qo$V+!*Yd+Vl$ZLU6W+c`4Yu*xgpUwmsM;
z-rSh(5^sOOc)>f_hQH?R>mqM|L3ts`<!*mrdCA$^rn|ms*~2?_qGg|Pdca|yaee@1
zr+0clVyAb0fTmB_{0hlbZ}*7KTxpNTb`Q#=mHVXb9z*h)0N6i_?z|q|z<WdN9Bq5C
zdGEyFa~MKx?*@jv=Hv1^?Ttv3zEKAK48-K#9iDs=v2XS*=&#;NlYb-k>^r}r=WegK
zegaB+Olfx3ZoSB}Vt!or5MGH9entTNYj@`4P3JDpTn_l(D={B$N9cCGrVNx4TtuqB
z*d>~R^EC5sE2VH?V1jIRbCR*K<yWuz1tCKc#dSnfG{PA3HMyewK2!P=%VBedYtPu?
z`^pZ_Mh^(!+O$lZV&xSd4a>Ua+7wOJMA-O0oDa-g!P^D}9D|Y1hX?>%2_xVSM6n@J
zKrXz}sKRMK`JEl+n3ojCmlgor;ZE3-6-3yCfyQ>86m#^qs8av6)jbsAAqqR_c1&7F
z5Q^N5K@4)6k>;qpQPSZEM>@x-(fyLNx!99q4PZp%Hq4P)(kNG=MxJo}SYxY1TcZf%
z9O7nVWzllwq;Mxs)P=V6YZT@|nd_;BaA@*QDzlBjJ2`h<mA@j%X$HtkY>Xph$LoVo
zkTs^;?-C4)Y_-)xp>diX8E(a`bz|5XdK$=3Zy*!oM5`HHmDE@n7Fg7;Q~0wxHp5E6
ziphPm_d@oOt=)6#8u&JL@ZkL+w0#E3ihKV$#=$wK<Q!MVPR{N@6&DWo@a#r60U)PV
z2ef!Bw>!fVp@J4R7K`MA5$9c6w28k<`l;+;WJ^_9UV#z)imKTTZ7uIYem6x3^rBPQ
z-vb8tv>M19$BICh_w4N~sc0SmKFmJBz52DvrpqzcVj?HiZX0uk9^^IeaWmL=$q?Eg
zh{0JL-RD68@5>5d7AT&?egCwthUMNW;79FkpDwT^u<%4;?Lkt01|hZiRg@Y%fiZtF
zZXVU}_ipjND}ur*PT;ssR8rMs`HQQX%(#T4I0M8x14e=Em8r9RGu+DAXMe-KVp$la
z`*8~G5o%D$>Ii^VC4K_=nK1RIWeq3~Zh}EtdDI2G<z>HDXlJIr3q5p7XBN?dUUbRA
zbQ1FSU<X+h&B^!UIYZ(ls)V#n$_<J?o9)u@>6kELQ}A_Oolm&WM2AwA4w%kzV3L_u
zv&a1Tv=<SgQbxX8t|cH&zApeBB9kl10?U7Ez5MZ8ooN1HH{zE0GM~14<xd*4H<)SP
zL@$p3LnI|n?GIzdVJ|vXkzl}!6h&_*d){XfQiygV?J|8GDBkJ<H`EnTlZm7XnwZiA
z-K#D|fiwIym33+jU-Our=nQPyr$EsLZRjAMsH*2jun*%7@+2~!4a+#Qa|zRuFyZ=p
zgON=N-syMfB7L%L2oA!Y^t%3B{_huxm$QEnTUtc^fOFt%#K_e`XD0-9GkoVXX(K%;
zZK~p`8Nx?W7F|gIpOivMmQJAf=y>|pK_?dE$0-hAIArA9K-Svl;E_z9SyaNg6f_bv
z4K<X+kS>9Py*A$6xJStOIeDAR4`j#)nAr5(xN}|zIRZBWc7>(-CNimQ`GQ>4)@py$
zzwxXV%uwXUL{x=2)ybvW_7SY4*6y(dKwQ=GtQwri3Y)*{uurRtb_y&Y$;T*_kVLd3
z#5djqTn{ojE}2449U0Q^RP^#_g^^JQvxCvly*s~v)F|%kB{vWLBbD2Y9)i&jj+L1<
z@;L{CEcXIo6c~GFQEq?lAv|9JB|tn?JgY;6cord3``4Uc)F3UlJK0yy@(D}fw6w=8
zScOy29HX%)h@^5pu7teT`7`{rKYm@zFHxTS%mR)@Aw?j_arFc|^YaNpJ_Nb$;uaYp
zyOorVK~8hBRQmVUuQBG9U~k&(xY$^5!q!%{@eQke@8Cr@J%;__=5nB&iu+d;7Zv;X
zA)2ja0VXIgNobF*DDnGG-1uD<Es8HCLwa=ABPPmjfwXHxT}NR*_9o&|qj-|O@`ifa
z%2vzd)@YffJzI+~N*(AY>PeT3!HNqEd?rCNh^T8FeF|4R@)mH4?O-Hh;4>>}oYbOT
zpcwiV2^uwxC$JKPgqSK8l=~Ld_W^IJ{uw?dy9T0t7{zD&0?r|P!c2-A%OgYbBU9cu
z4jB@c^kyien)z{X3vJX6%i_}p<Jwc0_(!D<;8@=Y8CalW-b52*JKKV*jzqHwtuI*<
zXV4@(dVO47F`Tx}9a$FARaQ32Shs8`J}xCJH|NQ)dLl5zg9Bm-X{_{Q4yUq-eU=?2
zdRr1bGt>Z6LCOZL;I%EwZ&z=~8`%u?giBZQpOlNs{D%H*;peO~6<V4H4-g1VHvUW9
z>rC|f@s1LYxmu_ez_}0er_Icoq=fk0HYMkqtY#|s&Vh@S0l!Diz+m12PH`=UX%z;k
zdXk6)eXO*W;_q9wkC=r)A)X+M2rjs9_#2B`y3W$Rk6XO{TfExuBQv)Y_DzWu0yw?^
zc?8gG6$%5T$bW}l_u{Vhs~mD<e9fM4he}C7`B>}bh6<L}c1D~8;UhCNPmY;=Ci(9u
z_mp>@faMZ0F^>dr{N7L(WWLMy0J0PVszMIUAisWfEHlFvGC9OjtA6P$BR>~w3(-t~
zC1_~+=Hp%o{rafE0Y>SgcRPJicrgq0ITZf-Tz-D!3RgKfRvEeXruOh@DzfL?Xs<6Y
zTB)Nw*h@y+%4FBCm%vTyz3sD27{(L^<8X!)wc&<@Ox4f78D6$7Mf<RhNd2P&<MXVJ
zWXiAE9MZ_<k<KiRbUisEQ*Sc2z-IeG+iUS0BFO0RE&DRt+pu<@r!C=;to4AmS6+BA
zjAd$w8bdz1#X(YzRkCHPeI-XsTJ%(6clczT1=X>(XLk<4V&W$n7yu8BF0UYNYa6ig
z*c=mYEPcxCe6%jIUoUAA>q}gUwL6l0`w0Zc(6dM&UizRSnGw-fVVe@NdN@BR0Yjrx
zW}6nWAKHq=zLt`+V>SmXkTy*ROMNx+1*;=3Ox5R)@LFuwXg!-_5SbkcyJcGc2Y!}`
zK9hb7vdLaJ6ZH!#hK?i%b5&dUlrX36AhOQ!o@Zhx=ltN*KAKb(t0Q#^fz0CD9gF7x
zo;`B0Eu5`MPPacfim)^`JG$3vTt6Q1-14Apk;J~MS|;~kHkPMjIoY+5sND!@Mq6g{
zHJ;tI=~53u?9w2(l>=5sOaU~r?hWtFi*Yy^UT<H9`|mL@yFndU8zVBd$WWF$20ZbX
zm;uR&H9wm<2hIm{RNRc!ai!d6Z8>HDM+%r?%$!eHx$VLru?_16WAeN`9Q9x!j||rf
z#>M7=Q7EAFJ|@SYo^LEq{%%n2u8AziaKIL=qpe*MxkGc@%l%o?%uA!4y%(tnXYsei
zYU4P*r3v$cCoDOS)PQN*AX(1B;KM$cY$t`@{NTiXahfQ}aZrZ4=;sib-aqzf|Ihe*
zng`N1_T+|s`UHD8<{er)4$aAdPb8+!7_xn1>Xn;6Xw<b`#%tzlhiqqIxZB!U7y0(d
zF-YdC!T{S{JQ?3Gvyq+F{h(rG0!|Ck2qDN5kP@z5rwEz6vEKk9G0swC(eZ5}ByWDc
z#AZj-u>sY#@K^9-otK_Cdgb=cl$WhyeWkV8eYAhVTd+*Bdx43s>%+N~l<6_Rd*ZVa
z5e>hBWhgX3M@;4~5J~K4fyT6r#}s$9$J3|4XlqtdCOsyUY7~b<YNyTX7zkjXQ$z2E
zhh@~UauQurl#l5e8a-yoHYsa!&BY5weAI2sW4kkYBK+G_@I1trH&t(fg>I_G;ZyrB
zAG$t*6aqP%DWZxd0&8xS!_0xs;^D?gmO#6rrxXl%bQ(i_h8cPkr&0fDJ~<v4TY_Eh
zU^4gofTZws+lJ!{bv?KDZo8nTta^;2gPDyt9pe}*G`{yXGT$L5JRuTmpDBbWGl{na
zMh!YSR#>N4!}fy7D?uX7;viO2iF&cMuy6U_FQXTJzd8pxN;{F<T`64-pgKRfScj^)
z$-aPzHC|b=l*UBDNheqQeOKSrm8m~ZP%kX!hqdMTqgiPB1bw<oP4VY!$`}j@f$n2m
zT7j~%%%6mGxtv7XsC<R|Wg{Q3wORPP1z~Ecikg~=%w67cPfb|sCNua_#<wI>j+~7M
zKnupjYuC2>;~3hiRx}9F?fMXY7Bny8f#QO4v8IQcASkKI9V;AO`o!8IFU>)L)1`0;
zCaf9N`hq2!6iazOKo};W7AohbR?8*UQ^1YOwn=02p8@Z2li$)HaLj8@=1naOKR7!5
zjH(kiS7b%VZgE!WsI9>_H;4YI%+Y(isHI*!q%F?8lTUx;FsU`UrKqV-l2WHL`Jz`X
zo&jp7+wv>U{n}P)RUMtLRLc>nj&ELpE*;$rw`>PsrhnJbn36$to!DOgvP@kgq&gF3
zc7|X*=k^gN!C|Es7TOi7KT}npC#k9Z-l5V)v=vS1p{BIBO@#sx#&3C4u$DH#(@fO_
zOi0{YgucQqI(KPBs&>K^a5kDx#JZhz7x8!w+rKM{z8q%4Ot?&xKUb3hsXUUcNPNHJ
zoj^S5^Nmgt5h$9u40(Ug6HmPV2_;&%A{L~N&I^=n*U!4bOc$Fx^bP=s@Vy_CI8Wzt
zVta4dEUd|h<1Wz1{)j9Y<f&?{R^x93nLf=gXX)Zwz~8=wxl1v&pc)e`ZI<+jQQ;Z|
z3YEC-mEVhDh0mG!2`pbyzrxh->ryedS+-YQKk@OGcl;s!u_BpVM%NdnCD*=P!q$I%
ze`c9RGdnkR?ce9%P0WoQo28g#J;kpo@(P1Ff=(yGW)3xeYXpr6`7}nH&a`kQZ+h4A
zN$&1-+D7=GNXLkiBunZvRy}XB6ZRY~FGW<Vp#=?F9nE3d3Q`%39i`-7b@}c?&3tMO
z<PwwM<RTBh%3(8#1^vUt0IK4SjPj2Q1@r`fjJJ(K3Cy_d@xFQM^D(!3Lqg&!>i3R3
zenWX%b^FQP==Y`~UFY5=bAHof{L)9}3${P(2)Xrv*-`Yvi1tDFDXGUlos!mp^ej0%
zvWKX;_%#PKPWBCj_bE}WEJp_nhc@6>mRb!mAb;EVnXebox49kM?sL33LMHr^Z1Qqp
z!WfC6WZ^BUCs<NU0KE)fceICAcT&93>Q5}c20Yz)wMztOq8;3Hm8f=h5m-l)_*aDd
z+=`1w51G80Ev0L;hcLMso%rXS0bQw$nSHwX^@4^GC%zTn0qQ1#0)AJb(q29mH(b<L
z3=eR5LK#()4+*ehhE-P=iuYuT3N=fE1WE%IEc0K;$Lg;G)iR{43S2N~MhO---$5CK
z7XH2Y0p?q5>l$tnLYaUHkl;G<FeJ}cw<($kV>6MUq*BpPDZ?Uf%AhEJT)e-BIkmYL
z6WbfD0g+1f)&W-2fT3$sxlbt_$n3Nvv(M<me$l{A;-F(ql&1aOodq5hHS;vLlR6tq
zqwzopG7cI8sKRekj9GK}3;NpkLm~^%@nN4HBUzH!O<_xnZ0p{z&1L*EVVSeGnk0(_
zI<8iexth<cW^dKs5M6d4_<wzY7`devKw_?bBm~0ch}=8CcY@G>ushfXmD{A>GknW6
zZ4*Yir>fk1ab)<wWuQq2S7T3ggHOrnc7H$xpOzX_2>RtXqEL!37^AN)x+)~o^}ok|
zGG9w5CB%@B#sq@}TT>}ZFjF?oCbmzSK_|a;5U}z?=lqc@a`E_<p?Ds?qTSfk1}{l$
z7`mb5j$x?YM)0vsBP=(^%X*IkQ7Bce&-?N#**@7_48;rMdSjma&Mkjo{ZqM?w@og#
zCAk=D1tEQ0cU=@qHb1a0@xmxsN)~^;knO@1PiH!>IoM4SO~-^ZypSSJ5-M&8%I{nd
zHzBX|<n5baj5{`?s7P^ma!L`kXRe4ceDAD-60>LSh%)@}uu37bYc7dGcJHi&5_52J
zNFlR#vPhA1-$(;}r0eQQwDxNkqwb#^@j&A=_MkUtL;xObzyb$hWWSyPmAsdRCZL@I
z5pAD@12s0Nm;=-M(Pog+0ZT5#%(KOSvTC@2L$Ephc^mLGN;?cwG1c_)eaeP&M-4DQ
zQ@nK?qgaG@rreh)Bw)?nel1(&D_|HnosR0KDdZ-BMiu*~;WESCDlBm5oU4u!QdJKd
zFFXLM0!6J97~q^mIO$j50TSB}Z@R#u81Ybue#nQnK5%Us-JByj+dgn>qUg(nyy{U1
z2O;4dZ@0(=xq~#$y`$svA|`2b=V?}_(~HFkg1n07NLyxJKg*NAfPgqWr<gp8@f5|e
z5=XKMjaffz-zM0P7Xh4#EGh;|6PHDc7}H6&cplPmcosck2U%Q#PT0nY&LE%F4zD{v
zkm3+?8{nmsu`u+kHlU(KwYD#9xi=`;Of^&$f*u)S{0><sH!uvBLUx(NRT$aQHBgPL
z=1F2+b$o)0D;K6qh`XA1f`HwIjVyFXXy-8HrYWEJmkN_x+f!?euj%(p1HkgNqq{sV
zZ3i!@B{5_#d28_eRT1EhqH;WJUxK$Fh*jJtiKDsTa`<N!*V5Z};ogd&psD=B?RI<a
zvi^1d6enhoO%p!+r{}u>g}ZJLQ}_a1;nE^>5h-<}8C9)KmvowD#1o@5k+7_Uf`#71
zsRq;uh)mpiQ%-Wax$tXc!xC<cbK^KtD9*8!z@~`#E2d#Uu1s7GkoA}q^596gW=~u*
z$i`)FiFueiQQj3mb3o>>I~5nw+Dp)h>U7735#rX5(Frkp0G<|%AVA3{vA+e0+6Hxe
zV5Sj_5Wk2=wo@14J)m|Evq2CQ+xzxPp%WtC+x$wh86iL5^9pOz&wGo(2P41dTnCXG
zihc*?4yF%azeRP&*AJn;WqpO-3BI|tU5(8ZB>#@)@Pl}3HIws3XZ`diItx8q;P3By
zg^KBwXGGv1Vfq9vJxFcpsI~Ch*%$gmr|Yl1L-_>1xZ_^G>S6TfpUv^>XZu8)8O*)2
z*^ETr<?94~IbeN-sX-<I%HQAWr?Nd3k|1Pu-c#U#&I%)mETkmia6tTm8$o1o4q?3L
zKP$T8Op|7A+y&jY0KNTb(F%KGF*BVAfBU@|2F8&<GZk>f6h}d_;p~8dHZK`PzAd%@
z4Kv0WXbd^MoGc}Ua|!P9N)%{b>x^o06{?8hz(sjer?_6Jv;#1XXD*T(mB%Q2MBlV5
zw-hh2B42mVA$PQtPb(3Ge&>LH>C5xYjsuGcw#?uHoWwd#o9A^glqG6h$gz%Pq9n3o
z$}5U`3LSA}G$NvS*)er5T-<XLh)@yxPc~H;w7QVSKk=++rM5SKs9mk9D5!s_^szy+
z_5#{5*RNShW_B$zI1}kAxHtMVjWF96Z1>`K2$K*C8kZHTNSvwTmRs=d@1cvpI;3bk
z?4(hqr<If8Immte3&z_sqgYSs_t4Xo>zkK(T3HQkZ3JqH|C}^pha1N?t{K5JqgRDi
z(L}a^0L(O9Zd~@RlHkw6Muu;jgyH-2n&6c%0r!EC;bC*S0~!>j1tT|qJPksHI0BT^
z<@C|VPoy}Ir%OQEFzAB#XCK7Yhr1p(VR3IEd2<7KZ~yHe^b+ITH0(TVXU6PQ?1n)B
zhe+aHVsOEnTY+v4Ea)Ky40^x-3L`L;2;L+jSe-@`(F#Wf2{*V}M7=`^1)y<=gF_t$
z1U=GtkBJfSn}Do0xd5~VHE|c*5oeQPJWn_4*Gq)cDnUt~86yan2pA8MS%0As8V_kq
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
RKp=v@E0`(Xd=M3U;D2!62ipJu

literal 0
HcmV?d00001

diff --git a/source-code/RuffCT-java/src/com/joemelsha/crypto/hash/Keccak.java b/source-code/RuffCT-java/src/com/joemelsha/crypto/hash/Keccak.java
new file mode 100755
index 0000000..1162750
--- /dev/null
+++ b/source-code/RuffCT-java/src/com/joemelsha/crypto/hash/Keccak.java
@@ -0,0 +1,449 @@
+package com.joemelsha.crypto.hash;
+
+import java.nio.*;
+
+/**
+ * @author Joseph Robert Melsha (jrmelsha@olivet.edu)
+ *
+ * Source: https://github.com/jrmelsha/keccak
+ * Created: Jun 23, 2016
+ *
+ * Copyright 2016 Joseph Robert Melsha
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+public class Keccak {
+	private static final int MAX_STATE_SIZE = 1600;
+	private static final int MAX_STATE_SIZE_WORDS = MAX_STATE_SIZE / 64;
+
+	protected int rateSizeBits, digestSizeBits;
+	private long[] state = new long[MAX_STATE_SIZE_WORDS];
+	private int rateBits;
+	private boolean padded;
+
+	public Keccak(int digestSizeBits) {
+		reset(digestSizeBits);
+	}
+
+	public Keccak(Keccak other) {
+		System.arraycopy(other.state, 0, state, 0, other.state.length);
+		rateBits = other.rateBits;
+		rateSizeBits = other.rateSizeBits;
+		digestSizeBits = other.digestSizeBits;
+		padded = other.padded;
+	}
+
+	@Override
+	public String toString() {
+		return "Keccak-" + digestSizeBits;
+	}
+
+	public int rateSize() {
+		return rateSizeBits >>> 3;
+	}
+
+	public int digestSize() {
+		return digestSizeBits >>> 3;
+	}
+
+	public void reset() {
+		reset(rateSizeBits, digestSizeBits);
+	}
+
+	protected int rateSizeBitsFor(int digestSizeBits) {
+		//@formatter:off
+		switch (digestSizeBits) {
+			case 288: return 1024;
+			case 128: return 1344;
+			case 224: return 1152;
+			case 256: return 1088;
+			case 384: return  832;
+			case 512: return  576;
+			default: throw new IllegalArgumentException("Invalid digestSizeBits: " + digestSizeBits + " ⊄ { 128, 224, 256, 288, 384, 512 }");
+		}
+		//@formatter:on
+	}
+
+	public void reset(int digestSizeBits) {
+		reset(rateSizeBitsFor(digestSizeBits), digestSizeBits);
+	}
+
+	protected void reset(int rateSizebits, int digestSizeBits) {
+		if (rateSizebits + digestSizeBits * 2 != MAX_STATE_SIZE)
+			throw new IllegalArgumentException("Invalid rateSizebits + digestSizeBits * 2: " + rateSizebits + " + " + digestSizeBits + " * 2 != " + MAX_STATE_SIZE);
+		if (rateSizebits <= 0 || (rateSizebits & 0x3f) > 0)
+			throw new IllegalArgumentException("Invalid rateSizebits: " + rateSizebits);
+
+		for (int i = 0; i < MAX_STATE_SIZE_WORDS; ++i)
+			state[i] = 0;
+		rateBits = 0;
+
+		rateSizeBits = rateSizebits;
+		this.digestSizeBits = digestSizeBits;
+		padded = false;
+	}
+
+	public void update(byte in) {
+		updateBits(in & 0xff, 8);
+	}
+
+	public void update(byte[] in) {
+		update(ByteBuffer.wrap(in));
+	}
+
+	public void update(byte[] in, int offset, int length) {
+		update(ByteBuffer.wrap(in, offset, length));
+	}
+
+	public void update(ByteBuffer in) {
+		int inBytes = in.remaining();
+		if (inBytes <= 0)
+			return;
+
+		if (padded)
+			throw new IllegalStateException("Cannot update while padded");
+
+		int rateBits = this.rateBits;
+		if ((rateBits & 0x7) > 0) //this could be implemented but would introduce considerable performance degradation - also, it's never technically possible.
+			throw new IllegalStateException("Cannot update while in bit-mode");
+
+		long[] state = this.state;
+		int rateBytes = rateBits >>> 3;
+
+		int rateBytesWord = rateBytes & 0x7;
+		if (rateBytesWord > 0) {
+			//logically must have space at this point
+			int c = 8 - rateBytesWord;
+			if (c > inBytes)
+				c = inBytes;
+			int i = rateBytes >>> 3;
+			long w = state[i];
+			rateBytes += c;
+			inBytes -= c;
+			rateBytesWord <<= 3;
+			c = rateBytesWord + (c << 3);
+			do {
+				w ^= (long) (in.get() & 0xff) << rateBytesWord;
+				rateBytesWord += 8;
+			} while (rateBytesWord < c);
+			state[i] = w;
+
+			if (inBytes > 0) {
+				this.rateBits = rateBytes << 3;
+				return;
+			}
+		}
+
+		int rateWords = rateBytes >>> 3;
+		int rateSizeWords = rateSizeBits >>> 6;
+
+		int inWords = inBytes >>> 3;
+		if (inWords > 0) {
+			ByteOrder order = in.order();
+			try {
+				in.order(ByteOrder.LITTLE_ENDIAN);
+				do {
+					if (rateWords >= rateSizeWords) {
+						Keccak.keccak(state);
+						rateWords = 0;
+					}
+					int c = rateSizeWords - rateWords;
+					if (c > inWords)
+						c = inWords;
+					inWords -= c;
+					c += rateWords;
+					do {
+						state[rateWords] ^= in.getLong();
+						rateWords++;
+					} while (rateWords < c);
+				} while (inWords > 0);
+			} finally {
+				in.order(order);
+			}
+			inBytes &= 0x7;
+			if (inBytes <= 0) {
+				this.rateBits = rateWords << 6;
+				return;
+			}
+		}
+
+		if (rateWords >= rateSizeWords) {
+			Keccak.keccak(state);
+			rateWords = 0;
+		}
+		long w = state[rateWords];
+		inBytes <<= 3;
+		int i = 0;
+		do {
+			w ^= (long) (in.get() & 0xff) << i;
+			i += 8;
+		} while (i < inBytes);
+		state[rateWords] = w;
+
+		this.rateBits = (rateWords << 6) | inBytes;
+	}
+
+	protected void updateBits(long in, int inBits) {
+		if (inBits < 0 || inBits > 64)
+			throw new IllegalArgumentException("Invalid valueBits: " + 0 + " < " + inBits + " > " + 64);
+
+		if (inBits <= 0)
+			return;
+
+		if (padded)
+			throw new IllegalStateException("Cannot update while padded");
+
+		long[] state = this.state;
+		int rateBits = this.rateBits;
+		int rateBitsWord = rateBits & 0x3f;
+		if (rateBitsWord > 0) {
+			//logically must have space at this point
+			int c = 64 - rateBitsWord;
+			if (c > inBits)
+				c = inBits;
+			state[rateBits >>> 6] ^= (in & (-1L >>> c)) << rateBitsWord;
+			rateBits += c;
+			inBits -= c;
+			if (inBits <= 0) {
+				this.rateBits = rateBits;
+				return;
+			}
+			in >>>= c;
+		}
+		if (rateBits >= rateSizeBits) {
+			Keccak.keccak(state);
+			rateBits = 0;
+		}
+		state[rateBits >>> 6] ^= in & (-1L >>> inBits);
+		this.rateBits = rateBits + inBits;
+	}
+
+	public ByteBuffer digest() {
+		return digest(digestSize());
+	}
+
+	public ByteBuffer digest(int outSize) {
+		return digest(outSize, false);
+	}
+
+	public ByteBuffer digest(int outSize, boolean direct) {
+		ByteBuffer buffer = direct ? ByteBuffer.allocateDirect(outSize) : ByteBuffer.allocate(outSize);
+		digest(buffer);
+		buffer.flip();
+		return buffer;
+	}
+
+	public byte[] digestArray() {
+		return digestArray(digestSize());
+	}
+
+	public byte[] digestArray(int outSize) {
+		byte[] array = new byte[outSize];
+		digest(array, 0, outSize);
+		return array;
+	}
+
+	public void digest(byte[] out) {
+		digest(ByteBuffer.wrap(out));
+	}
+
+	public void digest(byte[] out, int offset, int length) {
+		digest(ByteBuffer.wrap(out, offset, length));
+	}
+
+	public void digest(ByteBuffer out) {
+		int outBytes = out.remaining();
+		if (outBytes <= 0)
+			return;
+
+		long[] state = this.state;
+		int rateBits = this.rateBits;
+		int rateBytes;
+		if (!padded) {
+			pad();
+			padded = true;
+			rateBits = 0;
+			rateBytes = 0;
+		} else {
+			if ((rateBits & 0x7) > 0)
+				throw new IllegalStateException("Cannot digest while in bit-mode"); //this could be implemented but would introduce considerable performance degradation - also, it's never technically possible.
+
+			rateBytes = rateBits >>> 3;
+			int rateBytesWord = rateBytes & 0x7;
+			if (rateBytesWord > 0) {
+				int c = 8 - rateBytesWord;
+				if (c > outBytes)
+					c = outBytes;
+				long w = state[rateBytes >>> 3];
+				outBytes -= c;
+				rateBytes += c;
+				rateBytesWord <<= 3;
+				c = (c << 3) + rateBytesWord;
+				do {
+					out.put((byte) (w >>> rateBytesWord));
+					rateBytesWord += 8;
+				} while (rateBytesWord < c);
+				if (outBytes <= 0) {
+					this.rateBits = rateBytes << 3;
+					return;
+				}
+			}
+		}
+
+		int rateSizeWords = rateSizeBits >>> 6;
+		int rateWords = rateBytes >>> 3;
+
+		int outWords = outBytes >>> 3;
+		if (outWords > 0) {
+			ByteOrder order = out.order();
+			try {
+				out.order(ByteOrder.LITTLE_ENDIAN);
+				do {
+					if (rateWords >= rateSizeWords) {
+						squeeze();
+						rateWords = 0;
+					}
+					int c = rateSizeWords - rateWords;
+					if (c > outWords)
+						c = outWords;
+					outWords -= c;
+					c += rateWords;
+					do {
+						out.putLong(state[rateWords]);
+						rateWords++;
+					} while (rateWords < c);
+				} while (outWords > 0);
+			} finally {
+				out.order(order);
+			}
+			outBytes &= 0x7;
+			if (outBytes <= 0) {
+				this.rateBits = rateWords << 6;
+				return;
+			}
+		}
+
+		if (rateWords >= rateSizeWords) {
+			squeeze();
+			rateWords = 0;
+		}
+		long w = state[rateWords];
+		outBytes <<= 3;
+		int i = 0;
+		do {
+			out.put((byte) (w >>> i));
+			i += 8;
+		} while (i < outBytes);
+		this.rateBits = (rateWords << 6) | outBytes;
+	}
+
+	protected void squeeze() {
+		Keccak.keccak(state);
+	}
+
+	protected void pad() {
+		updateBits(0x1, 1);
+		if (rateBits >= rateSizeBits) {
+			Keccak.keccak(state);
+			rateBits = 0;
+		}
+		rateBits = rateSizeBits - 1;
+		updateBits(0x1, 1);
+		Keccak.keccak(state);
+	}
+
+	/**
+	 * @formatter:off
+	 */
+	private static void keccak(long[] a) {
+		//@formatter:off
+		int c, i;
+		long x, a_10_;
+		long x0, x1, x2, x3, x4;
+		long t0, t1, t2, t3, t4;
+		long c0, c1, c2, c3, c4;
+		long[] rc = RC;
+
+		i = 0;
+		do {
+			//theta (precalculation part)
+			c0 = a[0] ^ a[5 + 0] ^ a[10 + 0] ^ a[15 + 0] ^ a[20 + 0];
+			c1 = a[1] ^ a[5 + 1] ^ a[10 + 1] ^ a[15 + 1] ^ a[20 + 1];
+			c2 = a[2] ^ a[5 + 2] ^ a[10 + 2] ^ a[15 + 2] ^ a[20 + 2];
+			c3 = a[3] ^ a[5 + 3] ^ a[10 + 3] ^ a[15 + 3] ^ a[20 + 3];
+			c4 = a[4] ^ a[5 + 4] ^ a[10 + 4] ^ a[15 + 4] ^ a[20 + 4];
+
+			t0 = (c0 << 1) ^ (c0 >>> (64 - 1)) ^ c3;
+			t1 = (c1 << 1) ^ (c1 >>> (64 - 1)) ^ c4;
+			t2 = (c2 << 1) ^ (c2 >>> (64 - 1)) ^ c0;
+			t3 = (c3 << 1) ^ (c3 >>> (64 - 1)) ^ c1;
+			t4 = (c4 << 1) ^ (c4 >>> (64 - 1)) ^ c2;
+
+			//theta (xorring part) + rho + pi
+			a[ 0] ^= t1;
+			x = a[ 1] ^ t2; a_10_ = (x <<  1) | (x >>> (64 -  1));
+			x = a[ 6] ^ t2; a[ 1] = (x << 44) | (x >>> (64 - 44));
+			x = a[ 9] ^ t0; a[ 6] = (x << 20) | (x >>> (64 - 20));
+			x = a[22] ^ t3; a[ 9] = (x << 61) | (x >>> (64 - 61));
+
+			x = a[14] ^ t0; a[22] = (x << 39) | (x >>> (64 - 39));
+			x = a[20] ^ t1; a[14] = (x << 18) | (x >>> (64 - 18));
+			x = a[ 2] ^ t3; a[20] = (x << 62) | (x >>> (64 - 62));
+			x = a[12] ^ t3; a[ 2] = (x << 43) | (x >>> (64 - 43));
+			x = a[13] ^ t4; a[12] = (x << 25) | (x >>> (64 - 25));
+
+			x = a[19] ^ t0; a[13] = (x <<  8) | (x >>> (64 -  8));
+			x = a[23] ^ t4; a[19] = (x << 56) | (x >>> (64 - 56));
+			x = a[15] ^ t1; a[23] = (x << 41) | (x >>> (64 - 41));
+			x = a[ 4] ^ t0; a[15] = (x << 27) | (x >>> (64 - 27));
+			x = a[24] ^ t0; a[ 4] = (x << 14) | (x >>> (64 - 14));
+
+			x = a[21] ^ t2; a[24] = (x <<  2) | (x >>> (64 -  2));
+			x = a[ 8] ^ t4; a[21] = (x << 55) | (x >>> (64 - 55));
+			x = a[16] ^ t2; a[ 8] = (x << 45) | (x >>> (64 - 45));
+			x = a[ 5] ^ t1; a[16] = (x << 36) | (x >>> (64 - 36));
+			x = a[ 3] ^ t4; a[ 5] = (x << 28) | (x >>> (64 - 28));
+
+			x = a[18] ^ t4; a[ 3] = (x << 21) | (x >>> (64 - 21));
+			x = a[17] ^ t3; a[18] = (x << 15) | (x >>> (64 - 15));
+			x = a[11] ^ t2; a[17] = (x << 10) | (x >>> (64 - 10));
+			x = a[ 7] ^ t3; a[11] = (x <<  6) | (x >>> (64 -  6));
+			x = a[10] ^ t1; a[ 7] = (x <<  3) | (x >>> (64 -  3));
+			a[10] = a_10_;
+
+			//chi
+			c = 0;
+			do {
+				x0 = a[c + 0]; x1 = a[c + 1]; x2 = a[c + 2]; x3 = a[c + 3]; x4 = a[c + 4];
+				a[c + 0] = x0 ^ ((~x1) & x2);
+				a[c + 1] = x1 ^ ((~x2) & x3);
+				a[c + 2] = x2 ^ ((~x3) & x4);
+				a[c + 3] = x3 ^ ((~x4) & x0);
+				a[c + 4] = x4 ^ ((~x0) & x1);
+
+				c += 5;
+			} while (c < 25);
+
+			//iota
+			a[0] ^= rc[i];
+
+			i++;
+		} while (i < 24);
+		//@formatter:on
+	}
+
+	private static final long[] RC = { 0x0000000000000001L, 0x0000000000008082L, 0x800000000000808AL, 0x8000000080008000L, 0x000000000000808BL, 0x0000000080000001L, 0x8000000080008081L,
+	                                   0x8000000000008009L, 0x000000000000008AL, 0x0000000000000088L, 0x0000000080008009L, 0x000000008000000AL, 0x000000008000808BL, 0x800000000000008BL,
+	                                   0x8000000000008089L, 0x8000000000008003L, 0x8000000000008002L, 0x8000000000000080L, 0x000000000000800AL, 0x800000008000000AL, 0x8000000080008081L,
+	                                   0x8000000000008080L, 0x0000000080000001L, 0x8000000080008008L };
+}
\ No newline at end of file
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/crypto/CryptoUtil.java b/source-code/RuffCT-java/src/how/monero/hodl/crypto/CryptoUtil.java
new file mode 100644
index 0000000..266eb04
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/crypto/CryptoUtil.java
@@ -0,0 +1,155 @@
+package how.monero.hodl.crypto;
+
+import com.joemelsha.crypto.hash.Keccak;
+import how.monero.hodl.util.ExceptionAdapter;
+import org.apache.commons.pool2.BasePooledObjectFactory;
+import org.apache.commons.pool2.PooledObject;
+import org.apache.commons.pool2.impl.DefaultPooledObject;
+import org.apache.commons.pool2.impl.GenericObjectPool;
+import org.nem.core.crypto.ed25519.arithmetic.*;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+import static how.monero.hodl.crypto.HashToPoint.hashToPoint;
+import static how.monero.hodl.util.ByteUtil.*;
+
+public class CryptoUtil {
+
+  public static GenericObjectPool<Keccak> keccakPool = new GenericObjectPool<Keccak>(new BasePooledObjectFactory<Keccak>() {
+
+    @Override
+    public PooledObject<Keccak> wrap(Keccak keccak) {
+      return new DefaultPooledObject<>(keccak);
+    }
+
+    @Override
+    public Keccak create() throws Exception {
+      return new Keccak(256);
+    }
+  });
+
+  public static final Ed25519GroupElement G = Ed25519Group.BASE_POINT;
+  public static final Ed25519GroupElement H = new Ed25519EncodedGroupElement(hexToBytes("8b655970153799af2aeadc9ff1add0ea6c7251d54154cfa92c173a0dd39c1f94")).decode();
+  static {
+    H.precomputeForScalarMultiplication();
+  }
+
+  public static Scalar hashToScalar(byte[] a) {
+    return new Scalar(scReduce32(fastHash(a)));
+  }
+
+  public static byte[] fastHash(byte[] a) {
+    try {
+      Keccak keccak = keccakPool.borrowObject();
+      try {
+        keccak.reset();
+        keccak.update(a);
+        return keccak.digestArray();
+      } finally {
+        keccakPool.returnObject(keccak);
+      }
+    } catch (Exception e) {
+      throw ExceptionAdapter.toRuntimeException(e);
+    }
+  }
+
+  public static BigInteger l = BigInteger.valueOf(2).pow(252).add(new BigInteger("27742317777372353535851937790883648493"));
+
+  public static byte[] scReduce32(byte[] a) {
+    byte[] r = getBigIntegerFromUnsignedLittleEndianByteArray(a).mod(l).toByteArray();
+    return ensure32BytesAndConvertToLittleEndian(r);
+  }
+
+  public static byte[] ensure32BytesAndConvertToLittleEndian(byte[] r) {
+    byte[] s = new byte[32];
+    if(r.length>32) System.arraycopy(r, 1, s, 0, s.length);
+    else System.arraycopy(r, 0, s, 32 - r.length, r.length);
+    reverseByteArrayInPlace(s);
+    return s;
+  }
+
+  public static BigInteger getBigIntegerFromUnsignedLittleEndianByteArray(byte[] a1) {
+    byte[] a = new byte[a1.length];
+    System.arraycopy(a1, 0, a, 0, 32);
+    reverseByteArrayInPlace(a);
+    byte[] a2 = new byte[33];
+    System.arraycopy(a, 0, a2, 1, 32);
+    return new BigInteger(a2);
+  }
+  public static byte[] getUnsignedLittleEndianByteArrayFromBigInteger(BigInteger n) {
+    byte[] a = n.toByteArray();
+    byte[] a2 = new byte[32];
+    System.arraycopy(a, 0, a2, 32-a.length, a.length);
+    reverseByteArrayInPlace(a2);
+    return a2;
+  }
+
+  public static final Random random = new SecureRandom();
+  public static byte[] randomPointAsBytes() {
+    return randomPoint().encode().getRaw();
+  }
+  public static Ed25519GroupElement randomPoint() {
+    return Ed25519Group.BASE_POINT.scalarMultiply(Scalar.randomScalar());
+  }
+  public static byte[] randomMessage(int len) {
+    byte[] m = new byte[len];
+    random.nextBytes(m);
+    return m;
+  }
+
+  public static byte[] toBytes(Ed25519GroupElement[] a) {
+    byte[] r = new byte[0];
+    for(Ed25519GroupElement ai : a) r = concat(r, ai.encode().getRaw());
+    return r;
+  }
+
+  public static Scalar sumArray(Scalar[] a) {
+    Scalar r = Scalar.ZERO;
+    for(Scalar ai : a) r = r.add(ai);
+    return r;
+  }
+
+
+
+  public static PointPair COMeg(Scalar xAmount, Scalar rMask) {
+    return new PointPair(G.scalarMultiply(xAmount).add(getHpnGLookup(1).scalarMultiply(rMask).toCached()), G.scalarMultiply(rMask));
+  }
+
+  public static Ed25519GroupElement COMp(Scalar xAmount, Scalar rMask) {
+    return G.scalarMultiply(xAmount).add(getHpnGLookup(1).scalarMultiply(rMask).toCached());
+  }
+
+  public static Ed25519GroupElement COMb(Scalar[][] x, Scalar r) {
+    int m = x.length;
+    int n = x[0].length;
+    Ed25519GroupElement A = G.scalarMultiply(r);
+    for(int j=0; j<m; j++) {
+      for(int i=0; i<n; i++) {
+        A = A.toP3().add(getHpnGLookup(j * n + i + 1).scalarMultiply(x[j][i]).toCached());
+      }
+    }
+    return A;
+  }
+
+
+  public static Map<Integer, Ed25519GroupElement> HpnGLookup = new HashMap<>();
+
+  public static Ed25519GroupElement getHpnGLookup(int n) {
+    if(!HpnGLookup.containsKey(n)) {
+      Ed25519GroupElement HpnG = hashToPoint(G.scalarMultiply(Scalar.intToScalar(n)));
+      //HpnG.precomputeForScalarMultiplication(); // try precomputed vs non-precomputed to check best performance
+      HpnGLookup.put(n, HpnG);
+    }
+    return HpnGLookup.get(n);
+  }
+
+  public static PointPair ENCeg(Ed25519GroupElement X, Scalar r) {
+    return new PointPair(getHpnGLookup(1).scalarMultiply(r).toP3().add(X.toCached()), G.scalarMultiply(r));
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/crypto/HashToPoint.java b/source-code/RuffCT-java/src/how/monero/hodl/crypto/HashToPoint.java
new file mode 100644
index 0000000..2a463e6
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/crypto/HashToPoint.java
@@ -0,0 +1,136 @@
+package how.monero.hodl.crypto;
+
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519EncodedGroupElement;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+import org.nem.core.utils.ArrayUtils;
+
+import java.math.BigInteger;
+
+import static how.monero.hodl.crypto.CryptoUtil.*;
+import static how.monero.hodl.util.ByteUtil.*;
+
+public class HashToPoint {
+
+  private static BigInteger b = BigInteger.valueOf(256);
+  private static BigInteger q = BigInteger.valueOf(2).pow(255).subtract(BigInteger.valueOf(19));
+  private static BigInteger p = q;
+  private static BigInteger l = BigInteger.valueOf(2).pow(252).add(new BigInteger("27742317777372353535851937790883648493"));
+  private static BigInteger I = expmod(BigInteger.valueOf(2), (q.subtract(BigInteger.ONE)).divide(BigInteger.valueOf(4)), q);
+
+
+  public static Ed25519GroupElement hashToPoint(Ed25519GroupElement a) {
+    return hashToPoint(a.encode().getRaw());
+  }
+
+  public static Ed25519GroupElement hashToPoint(byte[] a) {
+
+    byte[] hash = fastHash(a);
+
+    BigInteger u = ArrayUtils.toBigInteger(hash).mod(q);
+
+    BigInteger A = BigInteger.valueOf(486662);
+
+    BigInteger sqrtm1 = ed25519Sqroot(BigInteger.valueOf(-1));
+
+    BigInteger w = (BigInteger.valueOf(2).multiply(u).multiply(u).add(BigInteger.ONE)).mod(q);
+    BigInteger xp = w.multiply(w).subtract(BigInteger.valueOf(2).multiply(A).multiply(A).multiply(u).multiply(u)).mod(q);
+
+    BigInteger b = w.multiply(ed25519Inv(xp));
+    BigInteger e = (q.add(BigInteger.valueOf(3)).divide(BigInteger.valueOf(8)));
+    BigInteger rx = expmod(b, e, q);
+
+    BigInteger x = rx.multiply(rx).multiply(w.multiply(w).subtract(BigInteger.valueOf(2).multiply(A).multiply(A).multiply(u).multiply(u))).mod(q);
+
+    BigInteger y = (BigInteger.valueOf(2).multiply(u).multiply(u).add(BigInteger.ONE).subtract(x)).mod(q);
+
+    BigInteger z;
+
+    boolean negative = false;
+    if (!y.equals(BigInteger.ZERO)) {
+      y = (w.add(x)).mod(q);
+      if (!y.equals(BigInteger.ZERO)) {
+        negative = true;
+      } else {
+        rx = rx.multiply(BigInteger.valueOf(-1)).multiply(ed25519Sqroot(BigInteger.valueOf(-2).multiply(A).multiply((A.add(BigInteger.valueOf(2)))))).mod(q);
+        negative = false;
+      }
+    } else {
+      rx = rx.multiply(BigInteger.valueOf(-1)).multiply(ed25519Sqroot(BigInteger.valueOf(2).multiply(A).multiply((A.add(BigInteger.valueOf(2)))))).mod(q);
+    }
+
+    BigInteger sign;
+    if (!negative) {
+      rx = (rx.multiply(u)).mod(q);
+      z = (BigInteger.valueOf(-2).multiply(A).multiply(u).multiply(u)).mod(q);
+      sign = BigInteger.ZERO;
+    } else {
+      z = BigInteger.valueOf(-1).multiply(A);
+      x = x.multiply(sqrtm1).mod(q);
+      y = (w.subtract(x)).mod(q);
+      if (!y.equals(BigInteger.ZERO)) {
+        rx = rx.multiply(ed25519Sqroot(BigInteger.valueOf(-1).multiply(sqrtm1).multiply(A).multiply((A.add(BigInteger.valueOf(2)))))).mod(q);
+      } else {
+        rx = rx.multiply(BigInteger.valueOf(-1)).multiply(ed25519Sqroot(sqrtm1.multiply(A).multiply((A.add(BigInteger.valueOf(2)))))).mod(q);
+      }
+      sign = BigInteger.ONE;
+    }
+    if(!(rx.mod(BigInteger.valueOf(2)).equals(sign))) {
+      rx = rx.mod(q).negate();
+    }
+    BigInteger rz = (z.add(w)).mod(q);
+    BigInteger ry = (z.subtract(w)).mod(q);
+    rx = (rx.multiply(rz)).mod(q);
+
+    Ed25519GroupElement P = pointCompress(rx, ry, rz);
+    Ed25519GroupElement P8 = P.toP2().dbl().toP2().dbl().toP2().dbl().toP3();
+    return P8;
+
+  }
+
+  private static Ed25519GroupElement pointCompress(BigInteger P0, BigInteger P1, BigInteger P2) {
+    BigInteger zinv = modpInv(P2);
+    BigInteger x = P0.multiply(zinv).mod(p);
+    BigInteger y = P1.multiply(zinv).mod(p);
+
+    BigInteger r = y.or((x.and(BigInteger.ONE)).shiftLeft(255));
+
+    byte[] a = r.toByteArray();
+
+    byte[] b = new byte[32];
+
+    if(a.length>32) System.arraycopy(a, a.length-32, b, 0, 32);
+    else if(a.length<32) System.arraycopy(a, 0, b, 32-a.length, a.length);
+    else System.arraycopy(a, 0, b, 0, 32);
+
+    reverseByteArrayInPlace(b);
+    return new Ed25519EncodedGroupElement(b).decode();
+  }
+
+  private static BigInteger modpInv(BigInteger x) {
+    return x.modPow(p.subtract(BigInteger.valueOf(2)), p);
+  }
+
+  private static BigInteger ed25519Inv(BigInteger x) {
+    return expmod(x, q.subtract(BigInteger.valueOf(2)), q);
+  }
+
+  private static BigInteger ed25519Sqroot(BigInteger xx) {
+    BigInteger x = expmod(xx, q.add(BigInteger.valueOf(3)).divide(BigInteger.valueOf(8)), q);
+    if (!x.multiply(x).subtract(xx).mod(q).equals(BigInteger.ZERO)) {
+      x = x.multiply(I).mod(q);
+    }
+    if (!x.multiply(x).subtract(xx).mod(q).equals(BigInteger.ZERO)) {
+      throw new RuntimeException("no square root!");
+    }
+    return x;
+  }
+
+  private static BigInteger expmod(BigInteger b, BigInteger e, BigInteger m) {
+    if (e.equals(BigInteger.ZERO)) return BigInteger.ONE;
+    BigInteger t = expmod(b, e.divide(BigInteger.valueOf(2)), m).pow(2).mod(m);
+    if(e.and(BigInteger.ONE).equals(BigInteger.ONE)) t = (t.multiply(b)).mod(m);
+    return t;
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/crypto/PointPair.java b/source-code/RuffCT-java/src/how/monero/hodl/crypto/PointPair.java
new file mode 100644
index 0000000..eda3388
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/crypto/PointPair.java
@@ -0,0 +1,37 @@
+package how.monero.hodl.crypto;
+
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+import static how.monero.hodl.util.ByteUtil.*;
+
+public class PointPair {
+  public Ed25519GroupElement P1;
+  public Ed25519GroupElement P2;
+  public PointPair(Ed25519GroupElement P1, Ed25519GroupElement P2) {
+    this.P1 = P1;
+    this.P2 = P2;
+  }
+  public byte[] toBytes() {
+    return concat(P1.encode().getRaw(), P2.encode().getRaw());
+  }
+  public PointPair add(PointPair a) {
+    return new PointPair(P1.toP3().add(a.P1.toP3().toCached()), P2.toP3().add(a.P2.toP3().toCached()));
+  }
+  public PointPair subtract(PointPair a) {
+    return new PointPair(P1.toP3().subtract(a.P1.toCached()), P2.toP3().subtract(a.P2.toCached()));
+  }
+  public PointPair multiply(Scalar n) {
+    return new PointPair(P1.toP3().scalarMultiply(n), P2.toP3().scalarMultiply(n));
+  }
+
+  public boolean equals(PointPair obj) {
+    return P1.toP3().equals(obj.P1.toP3()) && P2.toP3().equals(obj.P2.toP3());
+  }
+
+  @Override
+  public String toString() {
+    return "(P1: " + bytesToHex(P1.encode().getRaw()) + ", P2: " + P2 + ")";
+  }
+
+}
+
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/crypto/Scalar.java b/source-code/RuffCT-java/src/how/monero/hodl/crypto/Scalar.java
new file mode 100644
index 0000000..0f23602
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/crypto/Scalar.java
@@ -0,0 +1,100 @@
+package how.monero.hodl.crypto;
+
+import how.monero.hodl.util.ByteUtil;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519EncodedFieldElement;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519FieldElement;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+
+import static how.monero.hodl.crypto.CryptoUtil.*;
+import static how.monero.hodl.util.ByteUtil.*;
+
+public class Scalar {
+
+  public final static Scalar ZERO = intToScalar(0);
+  public final static Scalar ONE = intToScalar(1);
+  public final static Scalar TWO = intToScalar(2);
+  public final static Scalar MINUS_ONE = intToScalar(-1);
+
+  // use only for small numbers
+  public static Scalar intToScalar(int a) {
+    return new Scalar(scReduce32(getUnsignedLittleEndianByteArrayFromBigInteger(BigInteger.valueOf(a).mod(l))));
+  }
+
+  public byte[] bytes;
+  public Scalar(byte[] bytes) {
+    this.bytes = bytes;
+  }
+  public Scalar(String hex) {
+    this.bytes = ByteUtil.hexToBytes(hex);
+  }
+  public Scalar(BigInteger a) {
+    this(scReduce32(getUnsignedLittleEndianByteArrayFromBigInteger(a.mod(l))));
+  }
+  public Ed25519EncodedFieldElement toEd25519EncodedFieldElement() {
+    return new Ed25519EncodedFieldElement(bytes);
+  }
+  public Ed25519FieldElement toEd25519FieldElement() {
+    return new Ed25519EncodedFieldElement(bytes).decode();
+  }
+
+  public static Scalar randomScalar() {
+    byte[] s = new byte[32];
+    random.nextBytes(s);
+    s = CryptoUtil.scReduce32(s);
+    return new Scalar(s);
+  }
+
+  @Override
+  public String toString() {
+    return bytesToHex(bytes);
+  }
+
+  public BigInteger toBigInteger() {
+    return getBigIntegerFromUnsignedLittleEndianByteArray(this.bytes);
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    return Arrays.equals(this.bytes, ((Scalar)obj).bytes);
+  }
+
+  public static BigInteger[] scalarArrayToBigIntegerArray(Scalar[] a) {
+    BigInteger[] r = new BigInteger[a.length];
+    for(int i=0; i<a.length; i++) r[i] = a[i].toBigInteger();
+    return r;
+  }
+
+  public static void printScalarArray(Scalar[] a) {
+    for(int i=0; i<a.length; i++) {
+      System.out.print(a[i].toBigInteger()+"");
+      if(i==a.length-1) System.out.println("");
+      else System.out.print(", ");
+    }
+  }
+
+  public static Scalar[] bigIntegerArrayToScalarArray(BigInteger[] a) {
+    int len = a.length;
+    Scalar[] r = new Scalar[len];
+    for(int i=0; i<len; i++) {
+      r[i] = new Scalar(a[i]);
+    }
+    return r;
+  }
+
+  public Scalar add(Scalar a) { return new Scalar(ensure32BytesAndConvertToLittleEndian(getBigIntegerFromUnsignedLittleEndianByteArray(this.bytes).add(getBigIntegerFromUnsignedLittleEndianByteArray(a.bytes)).mod(l).toByteArray())); }
+  public Scalar sub(Scalar a) { return new Scalar(ensure32BytesAndConvertToLittleEndian(getBigIntegerFromUnsignedLittleEndianByteArray(this.bytes).subtract(getBigIntegerFromUnsignedLittleEndianByteArray(a.bytes)).mod(l).toByteArray())); }
+  public Scalar mul(Scalar a) { return new Scalar(ensure32BytesAndConvertToLittleEndian(getBigIntegerFromUnsignedLittleEndianByteArray(this.bytes).multiply(getBigIntegerFromUnsignedLittleEndianByteArray(a.bytes)).mod(l).toByteArray())); }
+  public Scalar sq() { return new Scalar(ensure32BytesAndConvertToLittleEndian(getBigIntegerFromUnsignedLittleEndianByteArray(this.bytes).multiply(getBigIntegerFromUnsignedLittleEndianByteArray(this.bytes)).mod(l).toByteArray())); }
+
+  public Scalar pow(int b) {
+    Scalar result = Scalar.ONE;
+    for(int i=0; i<b; i++) {
+      result = result.mul(this);
+    }
+    return result;
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/crypto/ScalarPair.java b/source-code/RuffCT-java/src/how/monero/hodl/crypto/ScalarPair.java
new file mode 100644
index 0000000..70dccca
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/crypto/ScalarPair.java
@@ -0,0 +1,12 @@
+package how.monero.hodl.crypto;
+
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519FieldElement;
+
+public class ScalarPair {
+    Ed25519FieldElement p1;
+    Ed25519FieldElement p2;
+    public ScalarPair(Ed25519FieldElement p1, Ed25519FieldElement p2) {
+      this.p1 = p1;
+      this.p2 = p2;
+    }
+  }
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/cursor/BootleRuffingCursor.java b/source-code/RuffCT-java/src/how/monero/hodl/cursor/BootleRuffingCursor.java
new file mode 100644
index 0000000..9c932c9
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/cursor/BootleRuffingCursor.java
@@ -0,0 +1,38 @@
+package how.monero.hodl.cursor;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519EncodedFieldElement;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519EncodedGroupElement;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519FieldElement;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+public class BootleRuffingCursor extends Cursor {
+  public byte[] data;
+
+  public BootleRuffingCursor(byte[] data) {
+    super(data);
+  }
+
+  public Ed25519GroupElement readGroupElement() {
+    return new Ed25519EncodedGroupElement(readBytes(32)).decode();
+  }
+  public Ed25519FieldElement readFieldElement() {
+    return new Ed25519EncodedFieldElement(readBytes(32)).decode();
+  }
+  public PointPair[] readPointPairArray(int len) {
+    PointPair[] result = new PointPair[len];
+    for(int i=0; i<len; i++) result[i] = new PointPair(readGroupElement(), readGroupElement());
+    return result;
+  }
+  public Scalar[][] readScalar2DArray(int m, int n) {
+    Scalar[][] result = new Scalar[m][n];
+    for(int j=0; j<m; j++) {
+      for(int i=0; i<n; i++) {
+        result[j][i] = readScalar();
+      }
+    }
+    return result;
+  }
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/cursor/Cursor.java b/source-code/RuffCT-java/src/how/monero/hodl/cursor/Cursor.java
new file mode 100644
index 0000000..2f63e3b
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/cursor/Cursor.java
@@ -0,0 +1,75 @@
+package how.monero.hodl.cursor;
+
+import how.monero.hodl.crypto.Scalar;
+
+import java.math.BigInteger;
+
+public class Cursor {
+
+  public int pos = 0;
+  protected byte[] data;
+  public Cursor(byte[] data) {
+    this.data = data;
+  }
+
+  public long readVarInt() {
+
+    long result = 0;
+    int c = 0;
+
+    while(true) {
+      boolean isLastByteInVarInt = true;
+      int i = Byte.toUnsignedInt(data[pos]);
+      if(i>=128) {
+        isLastByteInVarInt = false;
+        i-=128;
+      }
+      result += Math.round(i * Math.pow(128, c));
+      c++;
+      pos++;
+      if(isLastByteInVarInt) break;
+    }
+    return result;
+  }
+  public BigInteger readVarIntAsBigInteger() {
+
+    BigInteger result = BigInteger.ZERO;
+    int c = 0;
+
+    while(true) {
+      boolean isLastByteInVarInt = true;
+      int i = Byte.toUnsignedInt(data[pos]);
+      if(i>=128) {
+        isLastByteInVarInt = false;
+        i-=128;
+      }
+      result = result.add(BigInteger.valueOf(Math.round(i * Math.pow(128, c))));
+      c++;
+      pos++;
+      if(isLastByteInVarInt) break;
+    }
+    return result;
+  }
+
+  public byte[] readBytes(int len) {
+    byte[] bytes = new byte[len];
+    System.arraycopy(data, pos, bytes, 0, len);
+    pos+=len;
+    return bytes;
+  }
+  public Scalar readScalar() {
+    return new Scalar(readBytes(32));
+  }
+
+
+  public int readByte() {
+    pos++;
+    return Byte.toUnsignedInt(data[pos-1]);
+  }
+
+  public byte[] readKey() {
+    return readBytes(32);
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/jni/CryptoOpsUtil.java b/source-code/RuffCT-java/src/how/monero/hodl/jni/CryptoOpsUtil.java
new file mode 100644
index 0000000..7e89feb
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/jni/CryptoOpsUtil.java
@@ -0,0 +1,11 @@
+package how.monero.hodl.jni;
+
+public class CryptoOpsUtil {
+
+  static { System.loadLibrary("cryptoopsutil"); }
+
+  public static native byte[] scalarMult(byte[] point, byte[] scalar);
+  public static native byte[] scalarMultBase(byte[] scalar);
+  public static native byte[] doubleScalarMultBaseVartime(byte[] aScalar, byte[] point, byte[] bScalar);
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/BootleRuffing.java b/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/BootleRuffing.java
new file mode 100644
index 0000000..e8dcd33
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/BootleRuffing.java
@@ -0,0 +1,560 @@
+package how.monero.hodl.ringSignature;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+import how.monero.hodl.cursor.BootleRuffingCursor;
+import how.monero.hodl.util.VarInt;
+import org.nem.core.crypto.ed25519.arithmetic.*;
+
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.Map;
+
+import static how.monero.hodl.crypto.CryptoUtil.*;
+import static how.monero.hodl.crypto.HashToPoint.hashToPoint;
+import static how.monero.hodl.crypto.Scalar.bigIntegerArrayToScalarArray;
+import static how.monero.hodl.crypto.Scalar.randomScalar;
+import static how.monero.hodl.util.ByteUtil.*;
+
+
+public class BootleRuffing {
+
+  public static class SK {
+    public Scalar r;
+    public Scalar r1;
+    public SK(Scalar r, Scalar r1) {
+      this.r = r; this.r1 = r1;
+    }
+
+    @Override
+    public String toString() {
+      return "(r: " + bytesToHex(r) + ", r1: " + bytesToHex(r1) + ")";
+    }
+  }
+
+  public static KeyGenResult KEYGEN() {
+    SK sk = new SK(randomScalar(), randomScalar());
+    Ed25519GroupElement ki = G.scalarMultiply(sk.r1);
+    PointPair pk = ENCeg(ki, sk.r);
+    return new KeyGenResult(sk, ki, pk);
+  }
+  public static class KeyGenResult {
+    public SK sk;
+    public Ed25519GroupElement ki;
+    public PointPair pk = null;
+    public KeyGenResult(SK sk, Ed25519GroupElement ki, PointPair pk) {
+      this.sk = sk; this.ki = ki; this.pk = pk;
+    }
+
+    @Override
+    public String toString() {
+      return "sk: " + sk.toString() + ", ki: " + bytesToHex(ki.encode().getRaw()) + ", pk: " + (pk==null ? "(no pk)" : "pk: " + pk);
+    }
+  }
+
+  public static class F {
+    public Ed25519GroupElement[] ki;
+    public PointPair[][] pk;
+    public Ed25519GroupElement[] co;
+    public Ed25519GroupElement co1;
+    byte[] M;
+    public F(Ed25519GroupElement[] ki, PointPair[][] pk, Ed25519GroupElement[] co, Ed25519GroupElement co1, byte[] M) {
+      this.ki = ki; this.pk = pk; this.co = co; this.co1 = co1; this.M = M;
+    }
+    byte[] toBytes() {
+      byte[] r = new byte[0];
+      for(int i=0; i<ki.length; i++) r = concat(r, ki[i].encode().getRaw());
+      for(int i=0; i<pk.length; i++) for(int j=0; j<pk[i].length; j++) r = concat(r, pk[i][j].toBytes());
+      for(int i=0; i<co.length; i++) r = concat(r, co[i].encode().getRaw());
+      r = concat(r, co1.encode().getRaw());
+      r = concat(r, M);
+      return r;
+    }
+  }
+
+  public static SpendSignature SPEND(SpendParams sp) {
+
+    int iAsterisk = sp.iAsterisk;
+    PointPair[][] pk = sp.pk;
+    SK[] sk = sp.sk;
+    Ed25519GroupElement[] ki = sp.ki;
+    Ed25519GroupElement[] co = sp.co;
+    byte[] M = sp.M;
+    Scalar s = sp.s;
+    int decompositionBase = sp.decompositionBase;
+    int decompositionExponent = sp.decompositionExponent;
+
+    Ed25519GroupElement co1 = G.scalarMultiply(s);
+    F f = new F(ki, pk, co, co1, M);
+    SubResult cf1 = SUB(f);
+    Scalar s1 = s;
+    for(int i=0; i<sk.length; i++) s1 = s1.add(sk[i].r.mul(cf1.f[i]));
+    Proof2 sigma1 = PROVE2(cf1.c, iAsterisk, s1, pk.length, decompositionBase, decompositionExponent);
+
+    Scalar[] r1 = new Scalar[sk.length];
+    for(int i=0; i<r1.length; i++) r1[i] = sk[i].r1;
+
+    Multisignature.Signature sigma2 = Multisignature.sign(concat(sigma1.toBytes(decompositionBase, decompositionExponent), f.toBytes()), r1, null);
+    return new SpendSignature(decompositionBase, decompositionExponent, co1, sigma1, sigma2);
+  }
+
+  public static class SpendSignature {
+    public int decompositionBase;
+    public int decompositionExponent;
+    public Ed25519GroupElement co1;
+    public Proof2 sigma1;
+    Multisignature.Signature sigma2;
+    public SpendSignature(int decompositionBase, int decompositionExponent, Ed25519GroupElement co1, Proof2 sigma1, Multisignature.Signature sigma2) {
+      this.decompositionBase = decompositionBase; this.decompositionExponent = decompositionExponent; this.co1 = co1; this.sigma1 = sigma1; this.sigma2 = sigma2;
+    }
+    public byte[] toBytes() {
+      byte[] result;
+      result = concat(VarInt.writeVarInt(decompositionBase), VarInt.writeVarInt(decompositionExponent));
+      result = concat(result, co1.encode().getRaw(), sigma1.toBytes(decompositionBase, decompositionExponent), sigma2.toBytes());
+      return result;
+    }
+    public static SpendSignature fromBytes(byte[] a) {
+      BootleRuffingCursor cursor = new BootleRuffingCursor(a);
+      int decompositionBase = (int) cursor.readVarInt();
+      int decompositionExponent = (int) cursor.readVarInt();
+      return new SpendSignature(decompositionBase, decompositionExponent,
+        cursor.readGroupElement(),
+        new Proof2(
+          new Proof1(cursor.readGroupElement(), cursor.readGroupElement(), cursor.readGroupElement(),
+            cursor.readScalar2DArray(decompositionExponent, decompositionBase-1), cursor.readScalar(), cursor.readScalar(), null),
+          cursor.readGroupElement(),
+          cursor.readPointPairArray(decompositionExponent), cursor.readScalar()),
+        new Multisignature.Signature(cursor.readGroupElement(), cursor.readScalar()));
+    }
+  }
+
+  public static SubResult SUB(F fin) {
+    int L = fin.pk.length; // inputs
+    int N = fin.pk[0].length; // ring size
+    PointPair[] pkz = new PointPair[L];
+    Scalar[] f = new Scalar[L];
+    for(int j=0; j<L; j++) {
+      pkz[j] = new PointPair(fin.ki[j], Ed25519Group.ZERO_P3);
+      f[j] = hashToScalar(concat(fin.ki[j].encode().getRaw(), fin.toBytes(), longToLittleEndianUint32ByteArray(j)));
+    }
+    PointPair[] c = new PointPair[N];
+    for(int i=0; i<N; i++) {
+      c[i] = new PointPair(fin.co[i], fin.co1);
+      for(int j=0; j<L; j++) {
+        c[i] = c[i].add( (fin.pk[j][i].subtract(pkz[j])).multiply(f[j]) );
+      }
+    }
+    return new SubResult(c, f);
+  }
+  public static class SubResult {
+    public PointPair[] c;
+    public Scalar[] f;
+    public SubResult(PointPair[] c, Scalar[] f) {
+      this.c = c; this.f = f;
+    }
+  }
+
+  public static Proof1 PROVE1(Scalar[][] b, Scalar r) {
+
+    int m = b.length; // decompositionExponent
+    int n = b[0].length; // decompositionBase
+
+    Scalar rA = randomScalar();
+    Scalar rC = randomScalar();
+    Scalar rD = randomScalar();
+
+    Scalar[][] a = new Scalar[m][n];
+    for(int j=0; j<m; j++) {
+      for(int i=1; i<n; i++) {
+        a[j][i] = randomScalar();
+      }
+    }
+
+    for(int j=0; j<m; j++) {
+      a[j][0] = Scalar.ZERO;
+      for(int i=1; i<n; i++) {
+        a[j][0] = a[j][0].sub(a[j][i]);
+      }
+    }
+
+    Ed25519GroupElement A = COMb(a, rA);
+
+    Scalar[][] c = new Scalar[m][n];
+    Scalar[][] d = new Scalar[m][n];
+    for(int j=0; j<m; j++) {
+      for(int i=0; i<n; i++) {
+        c[j][i] = a[j][i].mul(Scalar.ONE.sub(b[j][i].mul(Scalar.TWO)));
+        d[j][i] = a[j][i].sq().mul(Scalar.MINUS_ONE);
+      }
+    }
+
+    Ed25519GroupElement C = COMb(c, rC);
+    Ed25519GroupElement D = COMb(d, rD);
+
+    Scalar x = hashToScalar(concat(A.encode().getRaw(), C.encode().getRaw(), D.encode().getRaw()));
+
+    Scalar[][] f = new Scalar[m][n];
+    for(int j=0; j<m; j++) {
+      for(int i=0; i<n; i++) {
+        f[j][i] = b[j][i].mul(x).add(a[j][i]);
+      }
+    }
+
+    Scalar[][] fTrimmed = new Scalar[m][n-1];
+    for(int j=0; j<m; j++) {
+      for(int i=1; i<n; i++) {
+        fTrimmed[j][i-1] = f[j][i];
+      }
+    }
+
+    Scalar zA = r.mul(x).add(rA);
+    Scalar zC = rC.mul(x).add(rD);
+
+    return new Proof1(A, C, D, fTrimmed, zA, zC, a);
+  }
+
+  public static class Proof1 {
+    public Ed25519GroupElement A;
+    public Ed25519GroupElement C;
+    public Ed25519GroupElement D;
+    private Scalar[][] fTrimmed;
+    private Scalar zA;
+    private Scalar zC;
+    public transient Scalar[][] a;
+
+    private Proof1(Ed25519GroupElement A, Ed25519GroupElement C, Ed25519GroupElement D, Scalar[][] fTrimmed,
+                  Scalar zA, Scalar zC, Scalar[][] a) {
+      this.A = A; this.C = C; this.D = D; this.fTrimmed = fTrimmed; this.zA = zA; this.zC = zC; this.a = a;
+    }
+    private byte[] toBytes(int decompositionBase, int decompositionExponent) {
+      byte[] result = concat(A.encode().getRaw(), C.encode().getRaw(), D.encode().getRaw());
+      for(int j=0; j<decompositionExponent; j++) {
+        for(int i=0; i<decompositionBase-1; i++) {
+          result = concat(result, fTrimmed[j][i].bytes);
+        }
+      }
+      result = concat(result, zA.bytes, zC.bytes);
+      return result;
+    }
+  }
+
+  public static Proof2 PROVE2(PointPair[] co, int iAsterisk, Scalar r, int inputs, int decompositionBase, int decompositionExponent) {
+
+    int ringSize = (int) Math.pow(decompositionBase, decompositionExponent);
+
+    Scalar[] u = new Scalar[decompositionExponent];
+    for(int k=0; k<decompositionExponent; k++) u[k] = randomScalar();
+
+    Scalar rB = randomScalar();
+
+    int[] iAsteriskSequence = nAryDecompose(decompositionBase, iAsterisk, decompositionExponent);
+
+    Scalar[][] d = new Scalar[decompositionExponent][decompositionBase];
+    for(int j=0; j<decompositionExponent; j++) {
+      for(int i=0; i<decompositionBase; i++) {
+        d[j][i] = Scalar.intToScalar(delta(iAsteriskSequence[j], i));
+      }
+    }
+
+    Ed25519GroupElement B = COMb(d, rB);
+
+    Proof1 P = PROVE1(d, rB);
+
+    Scalar[][] coefs = COEFS(P.a, iAsterisk);
+
+    PointPair[] G = new PointPair[decompositionExponent];
+
+    for(int k=0; k<decompositionExponent; k++) {
+      G[k] = ENCeg(Ed25519Group.ZERO_P3, u[k]);
+      for (int i = 0; i < ringSize; i++) {
+        G[k] = G[k].add(co[i].multiply(coefs[i][k]));
+      }
+    }
+
+    byte[] bytes = concat(P.A.encode().getRaw(), P.C.encode().getRaw(), P.D.encode().getRaw());
+    Scalar x1 = hashToScalar(bytes);
+
+    Scalar z = r.mul(x1.pow(decompositionExponent));
+    for(int i=decompositionExponent-1; i>=0; i--) {
+      z = z.sub(u[i].mul(x1.pow(i)));
+    }
+    return new Proof2(P, B, G, z);
+  }
+
+
+  public static class Proof2 {
+    Proof1 P;
+    public Ed25519GroupElement B;
+    public PointPair[] G;
+    public Scalar z;
+
+    private Proof2(Proof1 P, Ed25519GroupElement B, PointPair[] G, Scalar z) {
+      this.P = P;
+      this.B = B;
+      this.G = G;
+      this.z = z;
+    }
+
+    private byte[] toBytes(int decompositionBase, int decompositionExponent) {
+      byte[] bytes;
+      bytes = concat(P.toBytes(decompositionBase, decompositionExponent), B.encode().getRaw());
+      for(PointPair g : G) bytes = concat(bytes, g.toBytes());
+      bytes = concat(bytes, z.bytes);
+      return bytes;
+    }
+
+  }
+
+  private static int delta(int j, int i) {
+    return j==i ? 1 : 0;
+  }
+  private static int intPow(int a, int b) {
+    return (int) Math.round(Math.pow(a, b));
+  }
+  public static int[] nAryDecompose(int base, int n, int decompositionExponent) {
+    int[] r = new int[decompositionExponent];
+    for(int i=decompositionExponent-1; i>=0; i--) {
+      int basePow = intPow(base, i);
+      r[i] = n / basePow;
+      n-=basePow*r[i];
+    }
+    return r;
+  }
+
+  public static boolean VALID1(Ed25519GroupElement B, Proof1 P) {
+    boolean abcdOnCurve =
+      P.A.satisfiesCurveEquation()
+      && B.satisfiesCurveEquation()
+      && P.C.satisfiesCurveEquation()
+      && P.D.satisfiesCurveEquation();
+    if(!abcdOnCurve) {
+      System.out.println("VALID1: ABCD not on curve");
+      return false;
+    }
+
+    int m = P.fTrimmed.length;
+    int n = P.fTrimmed[0].length + 1;
+
+    Scalar[][] f = new Scalar[m][n];
+    for(int j=0; j<m; j++) {
+      for(int i=1; i<n; i++) {
+        f[j][i] = P.fTrimmed[j][i-1];
+      }
+    }
+
+    Scalar x = hashToScalar(concat(P.A.encode().getRaw(), P.C.encode().getRaw(), P.D.encode().getRaw()));
+
+    for(int j=0; j<m; j++) {
+      f[j][0] = x;
+      for(int i=1; i<n; i++) {
+        f[j][0] = f[j][0].sub(f[j][i]);
+      }
+    }
+
+    Scalar[][] f1 = new Scalar[m][n];
+    for(int j=0; j<m; j++) {
+      for(int i=0; i<n; i++) {
+        f1[j][i] = f[j][i].mul(x.sub(f[j][i]));
+      }
+    }
+
+    for(int j=0; j<m; j++) {
+      Scalar colSum = x;
+      for(int i=1; i<n; i++) {
+        colSum = colSum.sub(f[j][i]);
+      }
+      if(!f[j][0].equals(colSum)) {
+        System.out.println("VALID1: FAILED For each j=0, ..., m-1, f[j][0] == x-f[j][1]-f[j][2]- ... -f[j][n-1]");
+        return false;
+      }
+    }
+
+    if(!B.toP3().scalarMultiply(x).toP3().add(P.A.toP3().toCached()).equals(COMb(f, P.zA))) {
+      System.out.println("VALID1: FAILED xB + A == COMp(f[0][0], ..., f[m-1][n-1]; z[A])");
+      return false;
+    }
+    if(!P.C.toP3().scalarMultiply(x).toP3().add(P.D.toP3().toCached()).equals(COMb(f1, P.zC))) {
+      System.out.println("VALID1: FAILED xC + D == COMp(f'[0][0], ..., f'[m-1][n-1]; z[C])");
+      return false;
+    }
+
+    return true;
+
+  }
+
+  public static boolean VALID2(int decompositionBase, Proof2 P1, PointPair[] co) {
+
+    boolean abcdOnCurve =
+      P1.P.A.satisfiesCurveEquation()
+      && P1.B.satisfiesCurveEquation()
+      && P1.P.C.satisfiesCurveEquation()
+      && P1.P.D.satisfiesCurveEquation();
+    if(!abcdOnCurve) {
+      System.out.println("VALID2: FAILED: ABCD not on curve");
+      return false;
+    }
+
+    if(!VALID1(P1.B, P1.P)) {
+      System.out.println("VALID2: FAILED: VALID1 failed");
+      return false;
+    }
+
+    Scalar x1 = hashToScalar(concat(P1.P.A.encode().getRaw(), P1.P.C.encode().getRaw(), P1.P.D.encode().getRaw()));
+
+    int decompositionExponent = P1.P.fTrimmed.length;
+    Scalar[][] f = new Scalar[decompositionExponent][decompositionBase];
+    for(int j=0; j<decompositionExponent; j++) {
+      for(int i=1; i<decompositionBase; i++) {
+        f[j][i] = P1.P.fTrimmed[j][i-1];
+      }
+    }
+
+    int ringSize = (int) Math.pow(decompositionBase, decompositionExponent);
+
+    PointPair c = ENCeg(Ed25519Group.ZERO_P3, P1.z);
+
+    Scalar x = hashToScalar(concat(P1.P.A.encode().getRaw(), P1.P.C.encode().getRaw(), P1.P.D.encode().getRaw()));
+    for(int j=0; j<decompositionExponent; j++) {
+      f[j][0] = x;
+      for(int i=1; i<decompositionBase; i++) {
+        f[j][0] = f[j][0].sub(f[j][i]);
+      }
+    }
+
+    Scalar[] g = new Scalar[ringSize];
+    g[0] = f[0][0];
+    for(int j=1; j<decompositionExponent; j++) {
+      g[0] = g[0].mul(f[j][0]);
+    }
+
+    PointPair c1 = co[0].multiply(g[0]);
+    for(int i=1; i<ringSize; i++) {
+      int[] iSequence = nAryDecompose(decompositionBase, i, decompositionExponent);
+      g[i] = f[0][iSequence[0]];
+      for(int j=1; j<decompositionExponent; j++) {
+        g[i] = g[i].mul(f[j][iSequence[j]]);
+      }
+      c1 = c1.add(co[i].multiply(g[i]));
+    }
+
+    for(int k=0; k<decompositionExponent; k++) {
+      c1 = c1.subtract(P1.G[k].multiply(x1.pow(k)));
+    }
+    
+
+    boolean result = c1.equals(c);
+    if(!result) {
+      System.out.println("VALID2: FAILED: c' != c");
+      System.out.println("c:  (" + bytesToHex(c.P1.encode().getRaw()) + ", " + bytesToHex(c.P2.encode().getRaw()));
+      System.out.println("c': (" + bytesToHex(c1.P1.encode().getRaw()) + ", " + bytesToHex(c1.P2.encode().getRaw()));
+    }
+    return result;
+
+  }
+
+  public static boolean VER(Ed25519GroupElement[] ki, PointPair[][] pk, Ed25519GroupElement[] co, Ed25519GroupElement co1, byte[] M, SpendSignature spendSignature) {
+
+    F f = new F(ki, pk, co, co1, M);
+
+    SubResult cf1 = SUB(f);
+
+    if(!Multisignature.verify(concat(spendSignature.sigma1.toBytes(spendSignature.decompositionBase, spendSignature.decompositionExponent), f.toBytes()), ki, spendSignature.sigma2)) {
+      System.out.println("Multisignature.verify failed");
+      return false;
+    }
+
+    if(!VALID2(spendSignature.decompositionBase, spendSignature.sigma1, cf1.c)) {
+      System.out.println("VALID2 failed");
+      return false;
+    }
+
+    return true;
+  }
+
+  public static class Output {
+    public SK sk;
+    public Ed25519GroupElement ki;
+    public PointPair pk;
+
+    public Scalar mask;
+    public Ed25519GroupElement co;
+    public BigInteger amount;
+    public static Output genRandomOutput(BigInteger amount) {
+      Output o = new Output();
+      KeyGenResult keyGenResult = KEYGEN();
+      o.sk = keyGenResult.sk;
+      o.pk = keyGenResult.pk;
+      o.ki = keyGenResult.ki;
+      o.amount = amount;
+      o.mask = randomScalar();
+      o.co = COMp(new Scalar(o.amount), o.mask);
+      return o;
+    }
+  }
+
+  public static Scalar[][] COEFS(Scalar[][] a, int iAsterisk) {
+    int decompositionBase = a[0].length; // n
+    int decompositionExponent = a.length; // m
+    int ringSize = (int) Math.pow(decompositionBase, decompositionExponent); // N = n^m
+
+    int[] iAsteriskSequence = nAryDecompose(decompositionBase, iAsterisk, decompositionExponent);
+
+    Scalar[][] coefList = new Scalar[ringSize][decompositionExponent];
+
+    for(int k=0; k<ringSize; k++) {
+      int[] kSequence = nAryDecompose(decompositionBase, k, decompositionExponent);
+      coefList[k] = new Scalar[]{
+        a[0][kSequence[0]],
+        Scalar.intToScalar(delta(iAsteriskSequence[0], kSequence[0]))
+      };
+
+      for(int j=1; j<decompositionExponent; j++) {
+        coefList[k] = COEFPROD(coefList[k], new Scalar[]{
+          a[j][kSequence[j]],
+          Scalar.intToScalar(delta(iAsteriskSequence[j], kSequence[j]))
+        });
+      }
+    }
+    for(int k=0; k<ringSize; k++) {
+     coefList[k] = trimScalarArray(coefList[k], decompositionExponent, decompositionExponent);
+    }
+    return coefList;
+  }
+
+  private static Scalar[] trimScalarArray(Scalar[] a, int len, int indexWhere1ValueCanBeTrimmed) {
+    Scalar[] r = new Scalar[len];
+    for(int i=0; i<a.length; i++) {
+      if(i<len) r[i] = a[i];
+      else {
+        if(i==indexWhere1ValueCanBeTrimmed) {
+          if(!(a[i].equals(Scalar.ZERO) || a[i].equals(Scalar.ONE))) throw new RuntimeException("Attempt to trim non-zero or non-one in column " + i + ": value: " + a[i].toBigInteger());
+        }
+        else {
+          if(!(a[i].equals(Scalar.ZERO))) throw new RuntimeException("Attempt to trim non-zero in column " + i + ": value: " + a[i].toBigInteger());
+        }
+      }
+    }
+    return r;
+  }
+
+  public static Scalar[] COEFPROD(Scalar[] c, Scalar[] d) {
+    int maxLen = Math.max(c.length, d.length);
+    int resultLen = 2*maxLen-1;
+    BigInteger[] result = new BigInteger[resultLen];
+
+    for (int i = 0; i<resultLen; i++) result[i] = BigInteger.ZERO;
+    for (int i=0; i<maxLen; i++)
+    {
+      for (int j=0; j<maxLen; j++) {
+        result[i+j] = result[i+j].add(getBigIntegerAtArrayIndex(c, i).multiply(getBigIntegerAtArrayIndex(d, j)));
+      }
+    }
+    return bigIntegerArrayToScalarArray(result);
+  }
+
+  private static BigInteger getBigIntegerAtArrayIndex(Scalar[] a, int index) {
+    if(index>=a.length) return BigInteger.ZERO;
+    else return a[index].toBigInteger();
+  }
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/Multisignature.java b/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/Multisignature.java
new file mode 100644
index 0000000..4c0c02f
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/Multisignature.java
@@ -0,0 +1,114 @@
+package how.monero.hodl.ringSignature;
+
+import how.monero.hodl.crypto.Scalar;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+import java.util.*;
+
+import static how.monero.hodl.crypto.Scalar.randomScalar;
+import static how.monero.hodl.util.ByteUtil.bytesToHex;
+import static how.monero.hodl.util.ByteUtil.concat;
+import static how.monero.hodl.crypto.CryptoUtil.*;
+
+public class Multisignature {
+
+  public static Ed25519GroupElement[] lexicographicalSort(Ed25519GroupElement[] X) {
+    SortedMap<String, Ed25519GroupElement> hexToPoint = new TreeMap<>();
+    for(Ed25519GroupElement Xi : X) hexToPoint.put(bytesToHex(Xi.encode().getRaw()), Xi);
+    return hexToPoint.values().stream().toArray(Ed25519GroupElement[]::new);
+  }
+
+  /*
+      VER*: Take as input a message M, public keys L' = X[1], ..., X[n], and a
+      signature sigma = (R,s).
+        1) Compute L* = H(L')
+        2) For each i=1,2,...,n, compute c[i] = Hs(X[i], R, L*, M)
+        3) Accept if and only if sG = R + c[1]*X[1] + ... + c[n]*X[n]
+   */
+  public static boolean verify(byte[] M, Ed25519GroupElement[] X, Signature signature) {
+    int n = X.length;
+
+    Scalar XAsterisk = hashToScalar(toBytes(lexicographicalSort(X)));
+
+    Scalar[] c = new Scalar[n];
+    for(int i=0; i<n; i++) {
+      c[i] = hashToScalar(concat(X[i].encode().getRaw(), signature.R.encode().getRaw(), XAsterisk.bytes, M));
+    }
+    Ed25519GroupElement sG = G.scalarMultiply(signature.s);
+    Ed25519GroupElement sG1 = signature.R;
+    for(int i=0; i<n; i++) sG1 = sG1.toP3().add(X[i].scalarMultiply(c[i]).toCached());
+    return sG.equals(sG1);
+  }
+
+  /*
+    SIG*: Take as input a message M and a list of private keys L = x[0], x[1],
+    ..., x[n-1]. Let L' be the associated list of public keys X[0], ..., X[n-1], and
+    assume L' is lexicographically ordered.
+      1) Compute L* = H(L').
+      2) For each i=0,1,...,n-1, select r[i] at random from Zq.
+      3) Compute r=r[0]+r[1]+...+r[n-1] and R=rG.
+      4) For each i=0,1,...,n-1:
+          i)  Compute c[i] := Hs(X[i], R, L*, M)
+          ii) Compute s[i] := r[i] + x[i]*c[i]
+      5) Compute s = s[1] + ... + s[n].
+      6) Output the signature sigma = (R, s)
+   */
+  public static Signature sign(byte[] M, Scalar[] x, Ed25519GroupElement[] X) {
+    int n = x.length;
+    if(X==null) {
+      X = new Ed25519GroupElement[n];
+      for(int i=0; i<n; i++) {
+        X[i] = G.scalarMultiply(x[i]);
+      }
+
+    }
+    Scalar XAsterisk = hashToScalar(toBytes(lexicographicalSort(X)));
+
+    Scalar[] rArray = new Scalar[n];
+    for(int i=0; i<n; i++) rArray[i] = randomScalar();
+    Scalar r = sumArray(rArray);
+
+    Ed25519GroupElement R = G.scalarMultiply(r);
+    Scalar[] c = new Scalar[n];
+    Scalar[] sArray = new Scalar[n];
+    for(int i=0; i<n; i++) {
+      c[i] = hashToScalar(concat(X[i].encode().getRaw(), R.encode().getRaw(), XAsterisk.bytes, M));
+      sArray[i] = rArray[i].add(x[i].mul(c[i]));
+    }
+    Scalar s = sumArray(sArray);
+    return new Signature(R, s);
+  }
+
+  public static class Signature {
+    Ed25519GroupElement R;
+    Scalar s;
+    public Signature(Ed25519GroupElement R, Scalar s) {
+      this.R = R; this.s = s;
+    }
+    public byte[] toBytes() {
+      return concat(R.encode().getRaw(), s.bytes);
+    }
+  }
+
+  /*
+      KEYGEN*: Each user selects x at random from Zq. The secret key is x. The
+      public key is X=xG. Output (sk,pk) = (x,X).
+   */
+  public static KeyPair keygen() {
+    Scalar x = randomScalar();
+    Ed25519GroupElement X = G.scalarMultiply(x);
+    return new KeyPair(x, X);
+  }
+  public static class KeyPair {
+    public Scalar x;
+    public Ed25519GroupElement X;
+    public KeyPair(Scalar x, Ed25519GroupElement X) {
+      this.x = x; this.X = X;
+    }
+  }
+
+
+
+
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/SpendParams.java b/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/SpendParams.java
new file mode 100644
index 0000000..2d40c94
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/ringSignature/SpendParams.java
@@ -0,0 +1,19 @@
+package how.monero.hodl.ringSignature;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+public class SpendParams {
+
+  public int iAsterisk;
+  public PointPair[][] pk;
+  public BootleRuffing.SK[] sk;
+  public Ed25519GroupElement[] ki;
+  public Ed25519GroupElement[] co;
+  public byte[] M;
+  public Scalar s;
+  public int decompositionBase;
+  public int decompositionExponent;
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/util/ByteUtil.java b/source-code/RuffCT-java/src/how/monero/hodl/util/ByteUtil.java
new file mode 100644
index 0000000..e3301ad
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/util/ByteUtil.java
@@ -0,0 +1,83 @@
+package how.monero.hodl.util;
+
+import how.monero.hodl.crypto.Scalar;
+
+public class ByteUtil {
+
+  public static String byteToHex(int v) {
+    byte[] array = new byte[1];
+    array[0] = (byte) v;
+    return bytesToHex(array);
+  }
+
+  final protected static char[] hexArray = "0123456789abcdef".toCharArray();
+  public static String bytesToHex(Scalar a) {
+    return bytesToHex(a.bytes);
+  }
+  public static String bytesToHex(byte[] bytes) {
+      char[] hexChars = new char[bytes.length * 2];
+      for ( int j = 0; j < bytes.length; j++ ) {
+          int v = bytes[j] & 0xFF;
+          hexChars[j * 2] = hexArray[v >>> 4];
+          hexChars[j * 2 + 1] = hexArray[v & 0x0F];
+      }
+      return new String(hexChars);
+  }
+
+   public static byte[] hexToBytes(String s) {
+       int len = s.length();
+       byte[] data = new byte[len / 2];
+       for (int i = 0; i < len; i += 2) {
+           data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+                                + Character.digit(s.charAt(i+1), 16));
+       }
+       return data;
+   }
+
+  public static void reverseByteArrayInPlace(byte[] array) {
+    for(int i = 0; i < array.length / 2; i++)
+    {
+      byte temp = array[i];
+      array[i] = array[array.length - i - 1];
+      array[array.length - i - 1] = temp;
+    }
+  }
+
+  public static byte[] concat(byte a, byte[] b) {
+    byte[] r = new byte[1+b.length];
+    r[0] = a;
+    System.arraycopy(b, 0, r, 1, b.length);
+    return r;
+  }
+  public static byte[] concat(byte[] a, byte[] b) {
+    byte[] r = new byte[a.length+b.length];
+    System.arraycopy(a, 0, r, 0, a.length);
+    System.arraycopy(b, 0, r, a.length, b.length);
+    return r;
+  }
+  public static byte[] concat(byte[] a, byte[] b, byte[] c) {
+    return concat(concat(a, b), c);
+  }
+  public static byte[] concat(byte[] a, byte[] b, byte[] c, byte[] d) {
+    return concat(concat(a, b), concat(c, d));
+  }
+
+  public static byte[] subarray(byte[] a, int start, int end) {
+    byte[] r = new byte[end-start];
+    System.arraycopy(a, start, r, 0, r.length);
+    return r;
+  }
+
+  public static byte[] xor(byte[] a, byte[] b) {
+    byte[] r = new byte[a.length];
+    for(int i=0; i<r.length; i++) r[i] = (byte) (a[i] ^ b[i]);
+    return r;
+  }
+
+  public static byte[] longToLittleEndianUint32ByteArray(long value) {
+    byte[] array = new byte[4];
+    for (int i=3; i>=0; i--) array[i] = (byte) (value >> i*8);
+    return array;
+  }
+
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/util/ExceptionAdapter.java b/source-code/RuffCT-java/src/how/monero/hodl/util/ExceptionAdapter.java
new file mode 100644
index 0000000..4628fdd
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/util/ExceptionAdapter.java
@@ -0,0 +1,8 @@
+package how.monero.hodl.util;
+
+public class ExceptionAdapter {
+  public static RuntimeException toRuntimeException(Exception e) {
+    if(RuntimeException.class.isInstance(e)) return (RuntimeException) e;
+    else return new RuntimeException(e);
+  }
+}
diff --git a/source-code/RuffCT-java/src/how/monero/hodl/util/VarInt.java b/source-code/RuffCT-java/src/how/monero/hodl/util/VarInt.java
new file mode 100644
index 0000000..ef21a50
--- /dev/null
+++ b/source-code/RuffCT-java/src/how/monero/hodl/util/VarInt.java
@@ -0,0 +1,45 @@
+package how.monero.hodl.util;
+
+public class VarInt {
+
+  public static byte[] writeVarInt(long value) {
+    byte[] data = new byte[8];
+    int pos = 0;
+
+    while ((value & 0xFFFFFF80) != 0L) {
+      data[pos] = (byte) ((value & 0x7F) | 0x80);
+      pos++;
+      value >>>= 7;
+    }
+    data[pos] = (byte) (value & 0x7F);
+    pos++;
+
+    byte[] result = new byte[pos];
+    System.arraycopy(data, 0, result, 0, pos);
+    return result;
+  }
+
+  public static long readVarInt(byte[] data) {
+
+    long result = 0;
+    int c = 0;
+    int pos = 0;
+
+    while(true) {
+      boolean isLastByteInVarInt = true;
+      int i = Byte.toUnsignedInt(data[pos]);
+      if(i>=128) {
+        isLastByteInVarInt = false;
+        i-=128;
+      }
+      result += Math.round(i * Math.pow(128, c));
+      c++;
+      pos++;
+      if(isLastByteInVarInt) break;
+    }
+
+    return result;
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/Curve.java b/source-code/RuffCT-java/src/org/nem/core/crypto/Curve.java
new file mode 100755
index 0000000..5c89399
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/Curve.java
@@ -0,0 +1,30 @@
+package org.nem.core.crypto;
+
+import java.math.BigInteger;
+
+/**
+ * Interface for getting information for a curve.
+ */
+public interface Curve {
+
+	/**
+	 * Gets the name of the curve.
+	 *
+	 * @return The name of the curve.
+	 */
+	String getName();
+
+	/**
+	 * Gets the group order.
+	 *
+	 * @return The group order.
+	 */
+	BigInteger getGroupOrder();
+
+	/**
+	 * Gets the group order / 2.
+	 *
+	 * @return The group order / 2.
+	 */
+	BigInteger getHalfGroupOrder();
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/Ed25519Curve.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/Ed25519Curve.java
new file mode 100755
index 0000000..f49a61f
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/Ed25519Curve.java
@@ -0,0 +1,41 @@
+package org.nem.core.crypto.ed25519;
+
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519Group;
+
+import java.math.BigInteger;
+
+/**
+ * Class that wraps the elliptic curve Ed25519.
+ */
+public class Ed25519Curve implements org.nem.core.crypto.Curve {
+
+	private static final Ed25519Curve ED25519;
+
+	static {
+		ED25519 = new Ed25519Curve();
+	}
+
+	@Override
+	public String getName() {
+		return "ed25519";
+	}
+
+	@Override
+	public BigInteger getGroupOrder() {
+		return Ed25519Group.GROUP_ORDER;
+	}
+
+	@Override
+	public BigInteger getHalfGroupOrder() {
+		return Ed25519Group.GROUP_ORDER.shiftRight(1);
+	}
+
+	/**
+	 * Gets the Ed25519 instance.
+	 *
+	 * @return The Ed25519 instance.
+	 */
+	public static Ed25519Curve ed25519() {
+		return ED25519;
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/CoordinateSystem.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/CoordinateSystem.java
new file mode 100755
index 0000000..29d6df1
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/CoordinateSystem.java
@@ -0,0 +1,37 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+/**
+ * Available coordinate systems for a group element.
+ */
+public enum CoordinateSystem {
+
+	/**
+	 * Affine coordinate system (x, y).
+	 */
+	AFFINE,
+
+	/**
+	 * Projective coordinate system (X:Y:Z) satisfying x=X/Z, y=Y/Z.
+	 */
+	P2,
+
+	/**
+	 * Extended projective coordinate system (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT.
+	 */
+	P3,
+
+	/**
+	 * Completed coordinate system ((X:Z), (Y:T)) satisfying x=X/Z, y=Y/T.
+	 */
+	P1xP1,
+
+	/**
+	 * Precomputed coordinate system (y+x, y-x, 2dxy).
+	 */
+	PRECOMPUTED,
+
+	/**
+	 * Cached coordinate system (Y+X, Y-X, Z, 2dT).
+	 */
+	CACHED
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedFieldElement.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedFieldElement.java
new file mode 100755
index 0000000..5acc2ef
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedFieldElement.java
@@ -0,0 +1,1005 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+import org.nem.core.utils.*;
+
+import java.util.Arrays;
+
+/**
+ * Represents a field element of the finite field with p=2^255-19 elements.
+ * The value of the field element is held in 2^8 bit representation, i.e. in a byte array.
+ * The length of the array must be 32 or 64.
+ */
+public class Ed25519EncodedFieldElement {
+	private final byte[] zero;
+	private final byte[] values;
+
+	/**
+	 * Creates a new encoded field element.
+	 *
+	 * @param values The byte array that holds the values.
+	 */
+	public Ed25519EncodedFieldElement(final byte[] values) {
+		switch (values.length) {
+			case 32:
+				this.zero = Ed25519Field.ZERO_SHORT;
+				break;
+			case 64:
+				this.zero = Ed25519Field.ZERO_LONG;
+				break;
+			default:
+				throw new IllegalArgumentException("Invalid 2^8 bit representation.");
+		}
+
+		this.values = values;
+	}
+
+	/**
+	 * Gets the underlying byte array.
+	 *
+	 * @return The byte array.
+	 */
+	public byte[] getRaw() {
+		return this.values;
+	}
+
+	/**
+	 * Return true if this is in {1,3,5,...,q-2}
+	 * Return false if this is in {0,2,4,...,q-1}
+	 * <br>
+	 * Preconditions:
+	 * |x| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+	 *
+	 * @return true if this is in {1,3,5,...,q-2}, false otherwise.
+	 */
+	public boolean isNegative() {
+		return (this.values[0] & 1) != 0;
+	}
+
+	/**
+	 * Gets a value indicating whether or not the field element is non-zero.
+	 *
+	 * @return 1 if it is non-zero, 0 otherwise.
+	 */
+	public boolean isNonZero() {
+		return 0 == ArrayUtils.isEqualConstantTime(this.values, this.zero);
+	}
+
+	/**
+	 * Decodes this encoded (32 byte) representation to a field element in its 10 byte 2^25.5 representation.
+	 * The most significant bit is discarded.
+	 *
+	 * @return The field element in its 2^25.5 bit representation.
+	 */
+	public Ed25519FieldElement decode() {
+		long h0 = fourBytesToLong(this.values, 0);
+		long h1 = threeBytesToLong(this.values, 4) << 6;
+		long h2 = threeBytesToLong(this.values, 7) << 5;
+		long h3 = threeBytesToLong(this.values, 10) << 3;
+		long h4 = threeBytesToLong(this.values, 13) << 2;
+		long h5 = fourBytesToLong(this.values, 16);
+		long h6 = threeBytesToLong(this.values, 20) << 7;
+		long h7 = threeBytesToLong(this.values, 23) << 5;
+		long h8 = threeBytesToLong(this.values, 26) << 4;
+		long h9 = (threeBytesToLong(this.values, 29) & 0x7FFFFF) << 2;
+		final long carry0;
+		final long carry1;
+		final long carry2;
+		final long carry3;
+		final long carry4;
+		final long carry5;
+		final long carry6;
+		final long carry7;
+		final long carry8;
+		final long carry9;
+
+		// Remember: 2^255 congruent 19 modulo p
+		carry9 = (h9 + (long)(1 << 24)) >> 25;
+		h0 += carry9 * 19;
+		h9 -= carry9 << 25;
+		carry1 = (h1 + (long)(1 << 24)) >> 25;
+		h2 += carry1;
+		h1 -= carry1 << 25;
+		carry3 = (h3 + (long)(1 << 24)) >> 25;
+		h4 += carry3;
+		h3 -= carry3 << 25;
+		carry5 = (h5 + (long)(1 << 24)) >> 25;
+		h6 += carry5;
+		h5 -= carry5 << 25;
+		carry7 = (h7 + (long)(1 << 24)) >> 25;
+		h8 += carry7;
+		h7 -= carry7 << 25;
+
+		carry0 = (h0 + (long)(1 << 25)) >> 26;
+		h1 += carry0;
+		h0 -= carry0 << 26;
+		carry2 = (h2 + (long)(1 << 25)) >> 26;
+		h3 += carry2;
+		h2 -= carry2 << 26;
+		carry4 = (h4 + (long)(1 << 25)) >> 26;
+		h5 += carry4;
+		h4 -= carry4 << 26;
+		carry6 = (h6 + (long)(1 << 25)) >> 26;
+		h7 += carry6;
+		h6 -= carry6 << 26;
+		carry8 = (h8 + (long)(1 << 25)) >> 26;
+		h9 += carry8;
+		h8 -= carry8 << 26;
+
+		final int[] h = new int[10];
+		h[0] = (int)h0;
+		h[1] = (int)h1;
+		h[2] = (int)h2;
+		h[3] = (int)h3;
+		h[4] = (int)h4;
+		h[5] = (int)h5;
+		h[6] = (int)h6;
+		h[7] = (int)h7;
+		h[8] = (int)h8;
+		h[9] = (int)h9;
+
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Reduces this encoded field element (64 bytes) modulo the group order q.
+	 *
+	 * @return Encoded field element (32 bytes).
+	 */
+	public Ed25519EncodedFieldElement modQ() {
+		// s0, ..., s22 have 21 bits, s23 has 29 bits
+		long s0 = 0x1FFFFF & threeBytesToLong(this.values, 0);
+		long s1 = 0x1FFFFF & (fourBytesToLong(this.values, 2) >> 5);
+		long s2 = 0x1FFFFF & (threeBytesToLong(this.values, 5) >> 2);
+		long s3 = 0x1FFFFF & (fourBytesToLong(this.values, 7) >> 7);
+		long s4 = 0x1FFFFF & (fourBytesToLong(this.values, 10) >> 4);
+		long s5 = 0x1FFFFF & (threeBytesToLong(this.values, 13) >> 1);
+		long s6 = 0x1FFFFF & (fourBytesToLong(this.values, 15) >> 6);
+		long s7 = 0x1FFFFF & (threeBytesToLong(this.values, 18) >> 3);
+		long s8 = 0x1FFFFF & threeBytesToLong(this.values, 21);
+		long s9 = 0x1FFFFF & (fourBytesToLong(this.values, 23) >> 5);
+		long s10 = 0x1FFFFF & (threeBytesToLong(this.values, 26) >> 2);
+		long s11 = 0x1FFFFF & (fourBytesToLong(this.values, 28) >> 7);
+		long s12 = 0x1FFFFF & (fourBytesToLong(this.values, 31) >> 4);
+		long s13 = 0x1FFFFF & (threeBytesToLong(this.values, 34) >> 1);
+		long s14 = 0x1FFFFF & (fourBytesToLong(this.values, 36) >> 6);
+		long s15 = 0x1FFFFF & (threeBytesToLong(this.values, 39) >> 3);
+		long s16 = 0x1FFFFF & threeBytesToLong(this.values, 42);
+		long s17 = 0x1FFFFF & (fourBytesToLong(this.values, 44) >> 5);
+		final long s18 = 0x1FFFFF & (threeBytesToLong(this.values, 47) >> 2);
+		final long s19 = 0x1FFFFF & (fourBytesToLong(this.values, 49) >> 7);
+		final long s20 = 0x1FFFFF & (fourBytesToLong(this.values, 52) >> 4);
+		final long s21 = 0x1FFFFF & (threeBytesToLong(this.values, 55) >> 1);
+		final long s22 = 0x1FFFFF & (fourBytesToLong(this.values, 57) >> 6);
+		final long s23 = (fourBytesToLong(this.values, 60) >> 3);
+		long carry0;
+		long carry1;
+		long carry2;
+		long carry3;
+		long carry4;
+		long carry5;
+		long carry6;
+		long carry7;
+		long carry8;
+		long carry9;
+		long carry10;
+		long carry11;
+		final long carry12;
+		final long carry13;
+		final long carry14;
+		final long carry15;
+		final long carry16;
+
+		/**
+		 * Lots of magic numbers :)
+		 * To understand what's going on below, note that
+		 *
+		 * (1) q = 2^252 + q0 where q0 = 27742317777372353535851937790883648493.
+		 * (2) s11 is the coefficient of 2^(11*21), s23 is the coefficient of 2^(^23*21) and 2^252 = 2^((23-11) * 21)).
+		 * (3) 2^252 congruent -q0 modulo q.
+		 * (4) -q0 = 666643 * 2^0 + 470296 * 2^21 + 654183 * 2^(2*21) - 997805 * 2^(3*21) + 136657 * 2^(4*21) - 683901 * 2^(5*21)
+		 *
+		 * Thus
+		 * s23 * 2^(23*11) = s23 * 2^(12*21) * 2^(11*21) = s3 * 2^252 * 2^(11*21) congruent
+		 * s23 * (666643 * 2^0 + 470296 * 2^21 + 654183 * 2^(2*21) - 997805 * 2^(3*21) + 136657 * 2^(4*21) - 683901 * 2^(5*21)) * 2^(11*21) modulo q =
+		 * s23 * (666643 * 2^(11*21) + 470296 * 2^(12*21) + 654183 * 2^(13*21) - 997805 * 2^(14*21) + 136657 * 2^(15*21) - 683901 * 2^(16*21)).
+		 *
+		 * The same procedure is then applied for s22,...,s18.
+		 */
+		s11 += s23 * 666643;
+		s12 += s23 * 470296;
+		s13 += s23 * 654183;
+		s14 -= s23 * 997805;
+		s15 += s23 * 136657;
+		s16 -= s23 * 683901;
+
+		s10 += s22 * 666643;
+		s11 += s22 * 470296;
+		s12 += s22 * 654183;
+		s13 -= s22 * 997805;
+		s14 += s22 * 136657;
+		s15 -= s22 * 683901;
+
+		s9 += s21 * 666643;
+		s10 += s21 * 470296;
+		s11 += s21 * 654183;
+		s12 -= s21 * 997805;
+		s13 += s21 * 136657;
+		s14 -= s21 * 683901;
+
+		s8 += s20 * 666643;
+		s9 += s20 * 470296;
+		s10 += s20 * 654183;
+		s11 -= s20 * 997805;
+		s12 += s20 * 136657;
+		s13 -= s20 * 683901;
+
+		s7 += s19 * 666643;
+		s8 += s19 * 470296;
+		s9 += s19 * 654183;
+		s10 -= s19 * 997805;
+		s11 += s19 * 136657;
+		s12 -= s19 * 683901;
+
+		s6 += s18 * 666643;
+		s7 += s18 * 470296;
+		s8 += s18 * 654183;
+		s9 -= s18 * 997805;
+		s10 += s18 * 136657;
+		s11 -= s18 * 683901;
+
+		/**
+		 * Time to reduce the coefficient in order not to get an overflow.
+		 */
+		carry6 = (s6 + (1 << 20)) >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry8 = (s8 + (1 << 20)) >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry10 = (s10 + (1 << 20)) >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+		carry12 = (s12 + (1 << 20)) >> 21;
+		s13 += carry12;
+		s12 -= carry12 << 21;
+		carry14 = (s14 + (1 << 20)) >> 21;
+		s15 += carry14;
+		s14 -= carry14 << 21;
+		carry16 = (s16 + (1 << 20)) >> 21;
+		s17 += carry16;
+		s16 -= carry16 << 21;
+
+		carry7 = (s7 + (1 << 20)) >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry9 = (s9 + (1 << 20)) >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry11 = (s11 + (1 << 20)) >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+		carry13 = (s13 + (1 << 20)) >> 21;
+		s14 += carry13;
+		s13 -= carry13 << 21;
+		carry15 = (s15 + (1 << 20)) >> 21;
+		s16 += carry15;
+		s15 -= carry15 << 21;
+
+		/**
+		 * Continue with above procedure.
+		 */
+		s5 += s17 * 666643;
+		s6 += s17 * 470296;
+		s7 += s17 * 654183;
+		s8 -= s17 * 997805;
+		s9 += s17 * 136657;
+		s10 -= s17 * 683901;
+
+		s4 += s16 * 666643;
+		s5 += s16 * 470296;
+		s6 += s16 * 654183;
+		s7 -= s16 * 997805;
+		s8 += s16 * 136657;
+		s9 -= s16 * 683901;
+
+		s3 += s15 * 666643;
+		s4 += s15 * 470296;
+		s5 += s15 * 654183;
+		s6 -= s15 * 997805;
+		s7 += s15 * 136657;
+		s8 -= s15 * 683901;
+
+		s2 += s14 * 666643;
+		s3 += s14 * 470296;
+		s4 += s14 * 654183;
+		s5 -= s14 * 997805;
+		s6 += s14 * 136657;
+		s7 -= s14 * 683901;
+
+		s1 += s13 * 666643;
+		s2 += s13 * 470296;
+		s3 += s13 * 654183;
+		s4 -= s13 * 997805;
+		s5 += s13 * 136657;
+		s6 -= s13 * 683901;
+
+		s0 += s12 * 666643;
+		s1 += s12 * 470296;
+		s2 += s12 * 654183;
+		s3 -= s12 * 997805;
+		s4 += s12 * 136657;
+		s5 -= s12 * 683901;
+		s12 = 0;
+
+		/**
+		 * Reduce coefficients again.
+		 */
+		carry0 = (s0 + (1 << 20)) >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry2 = (s2 + (1 << 20)) >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry4 = (s4 + (1 << 20)) >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry6 = (s6 + (1 << 20)) >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry8 = (s8 + (1 << 20)) >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry10 = (s10 + (1 << 20)) >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+
+		carry1 = (s1 + (1 << 20)) >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry3 = (s3 + (1 << 20)) >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry5 = (s5 + (1 << 20)) >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry7 = (s7 + (1 << 20)) >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry9 = (s9 + (1 << 20)) >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry11 = (s11 + (1 << 20)) >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+
+		s0 += s12 * 666643;
+		s1 += s12 * 470296;
+		s2 += s12 * 654183;
+		s3 -= s12 * 997805;
+		s4 += s12 * 136657;
+		s5 -= s12 * 683901;
+		s12 = 0;
+
+		carry0 = s0 >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry1 = s1 >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry2 = s2 >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry3 = s3 >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry4 = s4 >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry5 = s5 >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry6 = s6 >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry7 = s7 >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry8 = s8 >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry9 = s9 >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry10 = s10 >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+		carry11 = s11 >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+
+		s0 += s12 * 666643;
+		s1 += s12 * 470296;
+		s2 += s12 * 654183;
+		s3 -= s12 * 997805;
+		s4 += s12 * 136657;
+		s5 -= s12 * 683901;
+
+		carry0 = s0 >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry1 = s1 >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry2 = s2 >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry3 = s3 >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry4 = s4 >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry5 = s5 >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry6 = s6 >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry7 = s7 >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry8 = s8 >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry9 = s9 >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry10 = s10 >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+
+		// s0, ..., s11 got 21 bits each.
+		final byte[] result = new byte[32];
+		result[0] = (byte)(s0);
+		result[1] = (byte)(s0 >> 8);
+		result[2] = (byte)((s0 >> 16) | (s1 << 5));
+		result[3] = (byte)(s1 >> 3);
+		result[4] = (byte)(s1 >> 11);
+		result[5] = (byte)((s1 >> 19) | (s2 << 2));
+		result[6] = (byte)(s2 >> 6);
+		result[7] = (byte)((s2 >> 14) | (s3 << 7));
+		result[8] = (byte)(s3 >> 1);
+		result[9] = (byte)(s3 >> 9);
+		result[10] = (byte)((s3 >> 17) | (s4 << 4));
+		result[11] = (byte)(s4 >> 4);
+		result[12] = (byte)(s4 >> 12);
+		result[13] = (byte)((s4 >> 20) | (s5 << 1));
+		result[14] = (byte)(s5 >> 7);
+		result[15] = (byte)((s5 >> 15) | (s6 << 6));
+		result[16] = (byte)(s6 >> 2);
+		result[17] = (byte)(s6 >> 10);
+		result[18] = (byte)((s6 >> 18) | (s7 << 3));
+		result[19] = (byte)(s7 >> 5);
+		result[20] = (byte)(s7 >> 13);
+		result[21] = (byte)(s8);
+		result[22] = (byte)(s8 >> 8);
+		result[23] = (byte)((s8 >> 16) | (s9 << 5));
+		result[24] = (byte)(s9 >> 3);
+		result[25] = (byte)(s9 >> 11);
+		result[26] = (byte)((s9 >> 19) | (s10 << 2));
+		result[27] = (byte)(s10 >> 6);
+		result[28] = (byte)((s10 >> 14) | (s11 << 7));
+		result[29] = (byte)(s11 >> 1);
+		result[30] = (byte)(s11 >> 9);
+		result[31] = (byte)(s11 >> 17);
+
+		return new Ed25519EncodedFieldElement(result);
+	}
+
+	/**
+	 * Multiplies this encoded field element with another and adds a third.
+	 * The result is reduced modulo the group order.
+	 * <br>
+	 * See the comments in the method modQ() for an explanation of the algorithm.
+	 *
+	 * @param b The encoded field element which is multiplied with this.
+	 * @param c The third encoded field element which is added.
+	 * @return The encoded field element (32 bytes).
+	 */
+	public Ed25519EncodedFieldElement multiplyAndAddModQ(final Ed25519EncodedFieldElement b, final Ed25519EncodedFieldElement c) {
+		final long a0 = 0x1FFFFF & threeBytesToLong(this.values, 0);
+		final long a1 = 0x1FFFFF & (fourBytesToLong(this.values, 2) >> 5);
+		final long a2 = 0x1FFFFF & (threeBytesToLong(this.values, 5) >> 2);
+		final long a3 = 0x1FFFFF & (fourBytesToLong(this.values, 7) >> 7);
+		final long a4 = 0x1FFFFF & (fourBytesToLong(this.values, 10) >> 4);
+		final long a5 = 0x1FFFFF & (threeBytesToLong(this.values, 13) >> 1);
+		final long a6 = 0x1FFFFF & (fourBytesToLong(this.values, 15) >> 6);
+		final long a7 = 0x1FFFFF & (threeBytesToLong(this.values, 18) >> 3);
+		final long a8 = 0x1FFFFF & threeBytesToLong(this.values, 21);
+		final long a9 = 0x1FFFFF & (fourBytesToLong(this.values, 23) >> 5);
+		final long a10 = 0x1FFFFF & (threeBytesToLong(this.values, 26) >> 2);
+		final long a11 = (fourBytesToLong(this.values, 28) >> 7);
+		final long b0 = 0x1FFFFF & threeBytesToLong(b.values, 0);
+		final long b1 = 0x1FFFFF & (fourBytesToLong(b.values, 2) >> 5);
+		final long b2 = 0x1FFFFF & (threeBytesToLong(b.values, 5) >> 2);
+		final long b3 = 0x1FFFFF & (fourBytesToLong(b.values, 7) >> 7);
+		final long b4 = 0x1FFFFF & (fourBytesToLong(b.values, 10) >> 4);
+		final long b5 = 0x1FFFFF & (threeBytesToLong(b.values, 13) >> 1);
+		final long b6 = 0x1FFFFF & (fourBytesToLong(b.values, 15) >> 6);
+		final long b7 = 0x1FFFFF & (threeBytesToLong(b.values, 18) >> 3);
+		final long b8 = 0x1FFFFF & threeBytesToLong(b.values, 21);
+		final long b9 = 0x1FFFFF & (fourBytesToLong(b.values, 23) >> 5);
+		final long b10 = 0x1FFFFF & (threeBytesToLong(b.values, 26) >> 2);
+		final long b11 = (fourBytesToLong(b.values, 28) >> 7);
+		final long c0 = 0x1FFFFF & threeBytesToLong(c.values, 0);
+		final long c1 = 0x1FFFFF & (fourBytesToLong(c.values, 2) >> 5);
+		final long c2 = 0x1FFFFF & (threeBytesToLong(c.values, 5) >> 2);
+		final long c3 = 0x1FFFFF & (fourBytesToLong(c.values, 7) >> 7);
+		final long c4 = 0x1FFFFF & (fourBytesToLong(c.values, 10) >> 4);
+		final long c5 = 0x1FFFFF & (threeBytesToLong(c.values, 13) >> 1);
+		final long c6 = 0x1FFFFF & (fourBytesToLong(c.values, 15) >> 6);
+		final long c7 = 0x1FFFFF & (threeBytesToLong(c.values, 18) >> 3);
+		final long c8 = 0x1FFFFF & threeBytesToLong(c.values, 21);
+		final long c9 = 0x1FFFFF & (fourBytesToLong(c.values, 23) >> 5);
+		final long c10 = 0x1FFFFF & (threeBytesToLong(c.values, 26) >> 2);
+		final long c11 = (fourBytesToLong(c.values, 28) >> 7);
+		long s0;
+		long s1;
+		long s2;
+		long s3;
+		long s4;
+		long s5;
+		long s6;
+		long s7;
+		long s8;
+		long s9;
+		long s10;
+		long s11;
+		long s12;
+		long s13;
+		long s14;
+		long s15;
+		long s16;
+		long s17;
+		long s18;
+		long s19;
+		long s20;
+		long s21;
+		long s22;
+		long s23;
+		long carry0;
+		long carry1;
+		long carry2;
+		long carry3;
+		long carry4;
+		long carry5;
+		long carry6;
+		long carry7;
+		long carry8;
+		long carry9;
+		long carry10;
+		long carry11;
+		long carry12;
+		long carry13;
+		long carry14;
+		long carry15;
+		long carry16;
+		final long carry17;
+		final long carry18;
+		final long carry19;
+		final long carry20;
+		final long carry21;
+		final long carry22;
+
+		s0 = c0 + a0 * b0;
+		s1 = c1 + a0 * b1 + a1 * b0;
+		s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0;
+		s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0;
+		s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0;
+		s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0;
+		s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0;
+		s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + a6 * b1 + a7 * b0;
+		s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + a6 * b2 + a7 * b1 + a8 * b0;
+		s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0;
+		s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0;
+		s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0;
+		s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1;
+		s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2;
+		s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + a9 * b5 + a10 * b4 + a11 * b3;
+		s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + a10 * b5 + a11 * b4;
+		s16 = a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5;
+		s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6;
+		s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7;
+		s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8;
+		s20 = a9 * b11 + a10 * b10 + a11 * b9;
+		s21 = a10 * b11 + a11 * b10;
+		s22 = a11 * b11;
+		s23 = 0;
+
+		carry0 = (s0 + (1 << 20)) >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry2 = (s2 + (1 << 20)) >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry4 = (s4 + (1 << 20)) >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry6 = (s6 + (1 << 20)) >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry8 = (s8 + (1 << 20)) >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry10 = (s10 + (1 << 20)) >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+		carry12 = (s12 + (1 << 20)) >> 21;
+		s13 += carry12;
+		s12 -= carry12 << 21;
+		carry14 = (s14 + (1 << 20)) >> 21;
+		s15 += carry14;
+		s14 -= carry14 << 21;
+		carry16 = (s16 + (1 << 20)) >> 21;
+		s17 += carry16;
+		s16 -= carry16 << 21;
+		carry18 = (s18 + (1 << 20)) >> 21;
+		s19 += carry18;
+		s18 -= carry18 << 21;
+		carry20 = (s20 + (1 << 20)) >> 21;
+		s21 += carry20;
+		s20 -= carry20 << 21;
+		carry22 = (s22 + (1 << 20)) >> 21;
+		s23 += carry22;
+		s22 -= carry22 << 21;
+
+		carry1 = (s1 + (1 << 20)) >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry3 = (s3 + (1 << 20)) >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry5 = (s5 + (1 << 20)) >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry7 = (s7 + (1 << 20)) >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry9 = (s9 + (1 << 20)) >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry11 = (s11 + (1 << 20)) >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+		carry13 = (s13 + (1 << 20)) >> 21;
+		s14 += carry13;
+		s13 -= carry13 << 21;
+		carry15 = (s15 + (1 << 20)) >> 21;
+		s16 += carry15;
+		s15 -= carry15 << 21;
+		carry17 = (s17 + (1 << 20)) >> 21;
+		s18 += carry17;
+		s17 -= carry17 << 21;
+		carry19 = (s19 + (1 << 20)) >> 21;
+		s20 += carry19;
+		s19 -= carry19 << 21;
+		carry21 = (s21 + (1 << 20)) >> 21;
+		s22 += carry21;
+		s21 -= carry21 << 21;
+
+		s11 += s23 * 666643;
+		s12 += s23 * 470296;
+		s13 += s23 * 654183;
+		s14 -= s23 * 997805;
+		s15 += s23 * 136657;
+		s16 -= s23 * 683901;
+
+		s10 += s22 * 666643;
+		s11 += s22 * 470296;
+		s12 += s22 * 654183;
+		s13 -= s22 * 997805;
+		s14 += s22 * 136657;
+		s15 -= s22 * 683901;
+
+		s9 += s21 * 666643;
+		s10 += s21 * 470296;
+		s11 += s21 * 654183;
+		s12 -= s21 * 997805;
+		s13 += s21 * 136657;
+		s14 -= s21 * 683901;
+
+		s8 += s20 * 666643;
+		s9 += s20 * 470296;
+		s10 += s20 * 654183;
+		s11 -= s20 * 997805;
+		s12 += s20 * 136657;
+		s13 -= s20 * 683901;
+
+		s7 += s19 * 666643;
+		s8 += s19 * 470296;
+		s9 += s19 * 654183;
+		s10 -= s19 * 997805;
+		s11 += s19 * 136657;
+		s12 -= s19 * 683901;
+
+		s6 += s18 * 666643;
+		s7 += s18 * 470296;
+		s8 += s18 * 654183;
+		s9 -= s18 * 997805;
+		s10 += s18 * 136657;
+		s11 -= s18 * 683901;
+
+		carry6 = (s6 + (1 << 20)) >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry8 = (s8 + (1 << 20)) >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry10 = (s10 + (1 << 20)) >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+		carry12 = (s12 + (1 << 20)) >> 21;
+		s13 += carry12;
+		s12 -= carry12 << 21;
+		carry14 = (s14 + (1 << 20)) >> 21;
+		s15 += carry14;
+		s14 -= carry14 << 21;
+		carry16 = (s16 + (1 << 20)) >> 21;
+		s17 += carry16;
+		s16 -= carry16 << 21;
+
+		carry7 = (s7 + (1 << 20)) >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry9 = (s9 + (1 << 20)) >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry11 = (s11 + (1 << 20)) >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+		carry13 = (s13 + (1 << 20)) >> 21;
+		s14 += carry13;
+		s13 -= carry13 << 21;
+		carry15 = (s15 + (1 << 20)) >> 21;
+		s16 += carry15;
+		s15 -= carry15 << 21;
+
+		s5 += s17 * 666643;
+		s6 += s17 * 470296;
+		s7 += s17 * 654183;
+		s8 -= s17 * 997805;
+		s9 += s17 * 136657;
+		s10 -= s17 * 683901;
+
+		s4 += s16 * 666643;
+		s5 += s16 * 470296;
+		s6 += s16 * 654183;
+		s7 -= s16 * 997805;
+		s8 += s16 * 136657;
+		s9 -= s16 * 683901;
+
+		s3 += s15 * 666643;
+		s4 += s15 * 470296;
+		s5 += s15 * 654183;
+		s6 -= s15 * 997805;
+		s7 += s15 * 136657;
+		s8 -= s15 * 683901;
+
+		s2 += s14 * 666643;
+		s3 += s14 * 470296;
+		s4 += s14 * 654183;
+		s5 -= s14 * 997805;
+		s6 += s14 * 136657;
+		s7 -= s14 * 683901;
+
+		s1 += s13 * 666643;
+		s2 += s13 * 470296;
+		s3 += s13 * 654183;
+		s4 -= s13 * 997805;
+		s5 += s13 * 136657;
+		s6 -= s13 * 683901;
+
+		s0 += s12 * 666643;
+		s1 += s12 * 470296;
+		s2 += s12 * 654183;
+		s3 -= s12 * 997805;
+		s4 += s12 * 136657;
+		s5 -= s12 * 683901;
+		s12 = 0;
+
+		carry0 = (s0 + (1 << 20)) >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry2 = (s2 + (1 << 20)) >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry4 = (s4 + (1 << 20)) >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry6 = (s6 + (1 << 20)) >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry8 = (s8 + (1 << 20)) >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry10 = (s10 + (1 << 20)) >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+
+		carry1 = (s1 + (1 << 20)) >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry3 = (s3 + (1 << 20)) >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry5 = (s5 + (1 << 20)) >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry7 = (s7 + (1 << 20)) >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry9 = (s9 + (1 << 20)) >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry11 = (s11 + (1 << 20)) >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+
+		s0 += s12 * 666643;
+		s1 += s12 * 470296;
+		s2 += s12 * 654183;
+		s3 -= s12 * 997805;
+		s4 += s12 * 136657;
+		s5 -= s12 * 683901;
+		s12 = 0;
+
+		carry0 = s0 >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry1 = s1 >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry2 = s2 >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry3 = s3 >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry4 = s4 >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry5 = s5 >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry6 = s6 >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry7 = s7 >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry8 = s8 >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry9 = s9 >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry10 = s10 >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+		carry11 = s11 >> 21;
+		s12 += carry11;
+		s11 -= carry11 << 21;
+
+		s0 += s12 * 666643;
+		s1 += s12 * 470296;
+		s2 += s12 * 654183;
+		s3 -= s12 * 997805;
+		s4 += s12 * 136657;
+		s5 -= s12 * 683901;
+
+		carry0 = s0 >> 21;
+		s1 += carry0;
+		s0 -= carry0 << 21;
+		carry1 = s1 >> 21;
+		s2 += carry1;
+		s1 -= carry1 << 21;
+		carry2 = s2 >> 21;
+		s3 += carry2;
+		s2 -= carry2 << 21;
+		carry3 = s3 >> 21;
+		s4 += carry3;
+		s3 -= carry3 << 21;
+		carry4 = s4 >> 21;
+		s5 += carry4;
+		s4 -= carry4 << 21;
+		carry5 = s5 >> 21;
+		s6 += carry5;
+		s5 -= carry5 << 21;
+		carry6 = s6 >> 21;
+		s7 += carry6;
+		s6 -= carry6 << 21;
+		carry7 = s7 >> 21;
+		s8 += carry7;
+		s7 -= carry7 << 21;
+		carry8 = s8 >> 21;
+		s9 += carry8;
+		s8 -= carry8 << 21;
+		carry9 = s9 >> 21;
+		s10 += carry9;
+		s9 -= carry9 << 21;
+		carry10 = s10 >> 21;
+		s11 += carry10;
+		s10 -= carry10 << 21;
+
+		final byte[] result = new byte[32];
+		result[0] = (byte)(s0);
+		result[1] = (byte)(s0 >> 8);
+		result[2] = (byte)((s0 >> 16) | (s1 << 5));
+		result[3] = (byte)(s1 >> 3);
+		result[4] = (byte)(s1 >> 11);
+		result[5] = (byte)((s1 >> 19) | (s2 << 2));
+		result[6] = (byte)(s2 >> 6);
+		result[7] = (byte)((s2 >> 14) | (s3 << 7));
+		result[8] = (byte)(s3 >> 1);
+		result[9] = (byte)(s3 >> 9);
+		result[10] = (byte)((s3 >> 17) | (s4 << 4));
+		result[11] = (byte)(s4 >> 4);
+		result[12] = (byte)(s4 >> 12);
+		result[13] = (byte)((s4 >> 20) | (s5 << 1));
+		result[14] = (byte)(s5 >> 7);
+		result[15] = (byte)((s5 >> 15) | (s6 << 6));
+		result[16] = (byte)(s6 >> 2);
+		result[17] = (byte)(s6 >> 10);
+		result[18] = (byte)((s6 >> 18) | (s7 << 3));
+		result[19] = (byte)(s7 >> 5);
+		result[20] = (byte)(s7 >> 13);
+		result[21] = (byte)(s8);
+		result[22] = (byte)(s8 >> 8);
+		result[23] = (byte)((s8 >> 16) | (s9 << 5));
+		result[24] = (byte)(s9 >> 3);
+		result[25] = (byte)(s9 >> 11);
+		result[26] = (byte)((s9 >> 19) | (s10 << 2));
+		result[27] = (byte)(s10 >> 6);
+		result[28] = (byte)((s10 >> 14) | (s11 << 7));
+		result[29] = (byte)(s11 >> 1);
+		result[30] = (byte)(s11 >> 9);
+		result[31] = (byte)(s11 >> 17);
+
+		return new Ed25519EncodedFieldElement(result);
+	}
+
+	private static long threeBytesToLong(final byte[] in, int offset) {
+		int result = in[offset++] & 0xff;
+		result |= (in[offset++] & 0xff) << 8;
+		result |= (in[offset] & 0xff) << 16;
+		return result;
+	}
+
+	private static long fourBytesToLong(final byte[] in, int offset) {
+		int result = in[offset++] & 0xff;
+		result |= (in[offset++] & 0xff) << 8;
+		result |= (in[offset++] & 0xff) << 16;
+		result |= in[offset] << 24;
+		return ((long)result) & 0xffffffffL;
+	}
+
+	@Override
+	public int hashCode() {
+		return Arrays.hashCode(this.values);
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (!(obj instanceof Ed25519EncodedFieldElement)) {
+			return false;
+		}
+
+		final Ed25519EncodedFieldElement encoded = (Ed25519EncodedFieldElement)obj;
+		return 1 == ArrayUtils.isEqualConstantTime(this.values, encoded.values);
+	}
+
+	@Override
+	public String toString() {
+		return HexEncoder.getString(this.values);
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedGroupElement.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedGroupElement.java
new file mode 100755
index 0000000..b8cb4ec
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519EncodedGroupElement.java
@@ -0,0 +1,129 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+import org.nem.core.utils.ArrayUtils;
+
+import java.util.Arrays;
+
+public class Ed25519EncodedGroupElement {
+
+	private final byte[] values;
+
+	/**
+	 * Creates a new encoded group element.
+	 *
+	 * @param values The values.
+	 */
+	public Ed25519EncodedGroupElement(final byte[] values) {
+		if (32 != values.length) {
+			throw new IllegalArgumentException("Invalid encoded group element.");
+		}
+
+		this.values = values;
+	}
+
+	/**
+	 * Gets the underlying byte array.
+	 *
+	 * @return The byte array.
+	 */
+	public byte[] getRaw() {
+		return this.values;
+	}
+
+	/**
+	 * Decodes this encoded group element and returns a new group element in P3 coordinates.
+	 *
+	 * @return The group element.
+	 */
+	public Ed25519GroupElement decode() {
+		final Ed25519FieldElement x = this.getAffineX();
+		final Ed25519FieldElement y = this.getAffineY();
+		return Ed25519GroupElement.p3(x, y, Ed25519Field.ONE, x.multiply(y));
+	}
+
+	/**
+	 * Gets the affine x-coordinate.
+	 * x is recovered in the following way (p = field size):
+	 * <br>
+	 * x = sign(x) * sqrt((y^2 - 1) / (d * y^2 + 1)) = sign(x) * sqrt(u / v) with u = y^2 - 1 and v = d * y^2 + 1.
+	 * Setting β = (u * v^3) * (u * v^7)^((p - 5) / 8) one has β^2 = +-(u / v).
+	 * If v * β = -u multiply β with i=sqrt(-1).
+	 * Set x := β.
+	 * If sign(x) != bit 255 of s then negate x.
+	 *
+	 * @return the affine x-coordinate.
+	 */
+	public Ed25519FieldElement getAffineX() {
+		Ed25519FieldElement x;
+		final Ed25519FieldElement y;
+		final Ed25519FieldElement ySquare;
+		final Ed25519FieldElement u;
+		final Ed25519FieldElement v;
+		final Ed25519FieldElement vxSquare;
+		Ed25519FieldElement checkForZero;
+		y = this.getAffineY();
+		ySquare = y.square();
+
+		// u = y^2 - 1
+		u = ySquare.subtract(Ed25519Field.ONE);
+
+		// v = d * y^2 + 1
+		v = ySquare.multiply(Ed25519Field.D).add(Ed25519Field.ONE);
+
+		// x = sqrt(u / v)
+		x = Ed25519FieldElement.sqrt(u, v);
+
+		vxSquare = x.square().multiply(v);
+		checkForZero = vxSquare.subtract(u);
+		if (checkForZero.isNonZero()) {
+			checkForZero = vxSquare.add(u);
+			if (checkForZero.isNonZero()) {
+				throw new IllegalArgumentException("not a valid Ed25519EncodedGroupElement.");
+			}
+
+			x = x.multiply(Ed25519Field.I);
+		}
+
+		if ((x.isNegative() ? 1 : 0) != ArrayUtils.getBit(this.values, 255)) {
+			x = x.negate();
+		}
+
+		return x;
+	}
+
+	/**
+	 * Gets the affine y-coordinate.
+	 *
+	 * @return the affine y-coordinate.
+	 */
+	public Ed25519FieldElement getAffineY() {
+		// The affine y-coordinate is in bits 0 to 254.
+		// Since the decode() method of Ed25519EncodedFieldElement ignores bit 255,
+		// we can use that method without problems.
+		final Ed25519EncodedFieldElement encoded = new Ed25519EncodedFieldElement(this.values);
+		return encoded.decode();
+	}
+
+	@Override
+	public int hashCode() {
+		return Arrays.hashCode(this.values);
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (!(obj instanceof Ed25519EncodedGroupElement)) {
+			return false;
+		}
+
+		final Ed25519EncodedGroupElement encoded = (Ed25519EncodedGroupElement)obj;
+		return 1 == ArrayUtils.isEqualConstantTime(this.values, encoded.values);
+	}
+
+	@Override
+	public String toString() {
+		return String.format(
+				"x=%s\ny=%s\n",
+				this.getAffineX().toString(),
+				this.getAffineY().toString());
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Field.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Field.java
new file mode 100755
index 0000000..12ac16c
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Field.java
@@ -0,0 +1,43 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+import org.nem.core.utils.*;
+
+import java.math.BigInteger;
+
+/**
+ * Represents the underlying finite field for Ed25519.
+ * The field has p = 2^255 - 19 elements.
+ */
+public class Ed25519Field {
+
+	/**
+	 * P: 2^255 - 19
+	 */
+	public static final BigInteger P = new BigInteger(HexEncoder.getBytes("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"));
+	public static final Ed25519FieldElement ZERO = getFieldElement(0);
+	public static final Ed25519FieldElement ONE = getFieldElement(1);
+	public static final Ed25519FieldElement TWO = getFieldElement(2);
+	public static final Ed25519FieldElement D = getD();
+	public static final Ed25519FieldElement D_Times_TWO = D.multiply(TWO);
+	public static final byte[] ZERO_SHORT = new byte[32];
+	public static final byte[] ZERO_LONG = new byte[64];
+
+	/**
+	 * I ^ 2 = -1
+	 */
+	public static final Ed25519FieldElement I = new Ed25519EncodedFieldElement(HexEncoder.getBytes(
+			"b0a00e4a271beec478e42fad0618432fa7d7fb3d99004d2b0bdfc14f8024832b")).decode();
+
+	private static Ed25519FieldElement getFieldElement(final int value) {
+		final int[] f = new int[10];
+		f[0] = value;
+		return new Ed25519FieldElement(f);
+	}
+
+	private static Ed25519FieldElement getD() {
+		final BigInteger d = new BigInteger("-121665")
+				.multiply(new BigInteger("121666").modInverse(Ed25519Field.P))
+				.mod(Ed25519Field.P);
+		return new Ed25519EncodedFieldElement(ArrayUtils.toByteArray(d, 32)).decode();
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519FieldElement.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519FieldElement.java
new file mode 100755
index 0000000..b611c81
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519FieldElement.java
@@ -0,0 +1,1026 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+import java.util.Arrays;
+
+/**
+ * Represents a element of the finite field with p=2^255-19 elements.
+ * <p>
+ * values[0] ... values[9], represent the integer <br>
+ * values[0] + 2^26 * values[1] + 2^51 * values[2] + 2^77 * values[3] + 2^102 * values[4] + ... + 2^230 * values[9]. <br>
+ * Bounds on each values[i] vary depending on context.
+ * </p>
+ * This implementation is based on the ref10 implementation of SUPERCOP.
+ */
+public class Ed25519FieldElement {
+	private final int[] values;
+
+	/**
+	 * Creates a field element.
+	 *
+	 * @param values The 2^25.5 bit representation of the field element.
+	 */
+	public Ed25519FieldElement(final int[] values) {
+		if (values.length != 10) {
+			throw new IllegalArgumentException("Invalid 2^25.5 bit representation.");
+		}
+
+		this.values = values;
+	}
+
+	/**
+	 * Gets the underlying int array.
+	 *
+	 * @return The int array.
+	 */
+	public int[] getRaw() {
+		return this.values;
+	}
+
+	/**
+	 * Gets a value indicating whether or not the field element is non-zero.
+	 *
+	 * @return 1 if it is non-zero, 0 otherwise.
+	 */
+	public boolean isNonZero() {
+		return this.encode().isNonZero();
+	}
+
+	/**
+	 * Adds the given field element to this and returns the result.
+	 * <b>h = this + g</b>
+	 * <pre>
+	 * Preconditions:
+	 *     |this| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+	 *        |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+	 * </pre>
+	 *
+	 * @param g The field element to add.
+	 * @return The field element this + val.
+	 */
+	public Ed25519FieldElement add(final Ed25519FieldElement g) {
+		final int[] gValues = g.values;
+		final int[] h = new int[10];
+		for (int i = 0; i < 10; i++) {
+			h[i] = this.values[i] + gValues[i];
+		}
+
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Subtract the given field element from this and returns the result.
+	 * <b>h = this - g</b>
+	 * <pre>
+	 * Preconditions:
+	 *     |this| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+	 *        |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+	 * </pre>
+	 *
+	 * @param g The field element to subtract.
+	 * @return The field element this - val.
+	 */
+	public Ed25519FieldElement subtract(final Ed25519FieldElement g) {
+		final int[] gValues = g.values;
+		final int[] h = new int[10];
+		for (int i = 0; i < 10; i++) {
+			h[i] = this.values[i] - gValues[i];
+		}
+
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Negates this field element and return the result.
+	 * <b>h = -this</b>
+	 * <pre>
+	 * Preconditions:
+	 *     |this| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
+	 * </pre>
+	 *
+	 * @return The field element (-1) * this.
+	 */
+	public Ed25519FieldElement negate() {
+		final int[] h = new int[10];
+		for (int i = 0; i < 10; i++) {
+			h[i] = -this.values[i];
+		}
+
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Multiplies this field element with the given field element and returns the result.
+	 * <b>h = this * g</b>
+	 * Preconditions:
+	 * <pre>
+	 *     |this| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+	 *        |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+	 * </pre>
+	 * Notes on implementation strategy:
+	 * <br>
+	 * Using schoolbook multiplication. Karatsuba would save a little in some
+	 * cost models.
+	 * <br>
+	 * Most multiplications by 2 and 19 are 32-bit precomputations; cheaper than
+	 * 64-bit postcomputations.
+	 * <br>
+	 * There is one remaining multiplication by 19 in the carry chain; one *19
+	 * precomputation can be merged into this, but the resulting data flow is
+	 * considerably less clean.
+	 * <br>
+	 * There are 12 carries below. 10 of them are 2-way parallelizable and
+	 * vectorizable. Can get away with 11 carries, but then data flow is much
+	 * deeper.
+	 * <br>
+	 * With tighter constraints on inputs can squeeze carries into int32.
+	 *
+	 * @param g The field element to multiply.
+	 * @return The (reasonably reduced) field element this * val.
+	 */
+	public Ed25519FieldElement multiply(final Ed25519FieldElement g) {
+		final int[] gValues = g.values;
+		final int f0 = this.values[0];
+		final int f1 = this.values[1];
+		final int f2 = this.values[2];
+		final int f3 = this.values[3];
+		final int f4 = this.values[4];
+		final int f5 = this.values[5];
+		final int f6 = this.values[6];
+		final int f7 = this.values[7];
+		final int f8 = this.values[8];
+		final int f9 = this.values[9];
+		final int g0 = gValues[0];
+		final int g1 = gValues[1];
+		final int g2 = gValues[2];
+		final int g3 = gValues[3];
+		final int g4 = gValues[4];
+		final int g5 = gValues[5];
+		final int g6 = gValues[6];
+		final int g7 = gValues[7];
+		final int g8 = gValues[8];
+		final int g9 = gValues[9];
+		final int g1_19 = 19 * g1; /* 1.959375*2^29 */
+		final int g2_19 = 19 * g2; /* 1.959375*2^30; still ok */
+		final int g3_19 = 19 * g3;
+		final int g4_19 = 19 * g4;
+		final int g5_19 = 19 * g5;
+		final int g6_19 = 19 * g6;
+		final int g7_19 = 19 * g7;
+		final int g8_19 = 19 * g8;
+		final int g9_19 = 19 * g9;
+		final int f1_2 = 2 * f1;
+		final int f3_2 = 2 * f3;
+		final int f5_2 = 2 * f5;
+		final int f7_2 = 2 * f7;
+		final int f9_2 = 2 * f9;
+		final long f0g0 = f0 * (long)g0;
+		final long f0g1 = f0 * (long)g1;
+		final long f0g2 = f0 * (long)g2;
+		final long f0g3 = f0 * (long)g3;
+		final long f0g4 = f0 * (long)g4;
+		final long f0g5 = f0 * (long)g5;
+		final long f0g6 = f0 * (long)g6;
+		final long f0g7 = f0 * (long)g7;
+		final long f0g8 = f0 * (long)g8;
+		final long f0g9 = f0 * (long)g9;
+		final long f1g0 = f1 * (long)g0;
+		final long f1g1_2 = f1_2 * (long)g1;
+		final long f1g2 = f1 * (long)g2;
+		final long f1g3_2 = f1_2 * (long)g3;
+		final long f1g4 = f1 * (long)g4;
+		final long f1g5_2 = f1_2 * (long)g5;
+		final long f1g6 = f1 * (long)g6;
+		final long f1g7_2 = f1_2 * (long)g7;
+		final long f1g8 = f1 * (long)g8;
+		final long f1g9_38 = f1_2 * (long)g9_19;
+		final long f2g0 = f2 * (long)g0;
+		final long f2g1 = f2 * (long)g1;
+		final long f2g2 = f2 * (long)g2;
+		final long f2g3 = f2 * (long)g3;
+		final long f2g4 = f2 * (long)g4;
+		final long f2g5 = f2 * (long)g5;
+		final long f2g6 = f2 * (long)g6;
+		final long f2g7 = f2 * (long)g7;
+		final long f2g8_19 = f2 * (long)g8_19;
+		final long f2g9_19 = f2 * (long)g9_19;
+		final long f3g0 = f3 * (long)g0;
+		final long f3g1_2 = f3_2 * (long)g1;
+		final long f3g2 = f3 * (long)g2;
+		final long f3g3_2 = f3_2 * (long)g3;
+		final long f3g4 = f3 * (long)g4;
+		final long f3g5_2 = f3_2 * (long)g5;
+		final long f3g6 = f3 * (long)g6;
+		final long f3g7_38 = f3_2 * (long)g7_19;
+		final long f3g8_19 = f3 * (long)g8_19;
+		final long f3g9_38 = f3_2 * (long)g9_19;
+		final long f4g0 = f4 * (long)g0;
+		final long f4g1 = f4 * (long)g1;
+		final long f4g2 = f4 * (long)g2;
+		final long f4g3 = f4 * (long)g3;
+		final long f4g4 = f4 * (long)g4;
+		final long f4g5 = f4 * (long)g5;
+		final long f4g6_19 = f4 * (long)g6_19;
+		final long f4g7_19 = f4 * (long)g7_19;
+		final long f4g8_19 = f4 * (long)g8_19;
+		final long f4g9_19 = f4 * (long)g9_19;
+		final long f5g0 = f5 * (long)g0;
+		final long f5g1_2 = f5_2 * (long)g1;
+		final long f5g2 = f5 * (long)g2;
+		final long f5g3_2 = f5_2 * (long)g3;
+		final long f5g4 = f5 * (long)g4;
+		final long f5g5_38 = f5_2 * (long)g5_19;
+		final long f5g6_19 = f5 * (long)g6_19;
+		final long f5g7_38 = f5_2 * (long)g7_19;
+		final long f5g8_19 = f5 * (long)g8_19;
+		final long f5g9_38 = f5_2 * (long)g9_19;
+		final long f6g0 = f6 * (long)g0;
+		final long f6g1 = f6 * (long)g1;
+		final long f6g2 = f6 * (long)g2;
+		final long f6g3 = f6 * (long)g3;
+		final long f6g4_19 = f6 * (long)g4_19;
+		final long f6g5_19 = f6 * (long)g5_19;
+		final long f6g6_19 = f6 * (long)g6_19;
+		final long f6g7_19 = f6 * (long)g7_19;
+		final long f6g8_19 = f6 * (long)g8_19;
+		final long f6g9_19 = f6 * (long)g9_19;
+		final long f7g0 = f7 * (long)g0;
+		final long f7g1_2 = f7_2 * (long)g1;
+		final long f7g2 = f7 * (long)g2;
+		final long f7g3_38 = f7_2 * (long)g3_19;
+		final long f7g4_19 = f7 * (long)g4_19;
+		final long f7g5_38 = f7_2 * (long)g5_19;
+		final long f7g6_19 = f7 * (long)g6_19;
+		final long f7g7_38 = f7_2 * (long)g7_19;
+		final long f7g8_19 = f7 * (long)g8_19;
+		final long f7g9_38 = f7_2 * (long)g9_19;
+		final long f8g0 = f8 * (long)g0;
+		final long f8g1 = f8 * (long)g1;
+		final long f8g2_19 = f8 * (long)g2_19;
+		final long f8g3_19 = f8 * (long)g3_19;
+		final long f8g4_19 = f8 * (long)g4_19;
+		final long f8g5_19 = f8 * (long)g5_19;
+		final long f8g6_19 = f8 * (long)g6_19;
+		final long f8g7_19 = f8 * (long)g7_19;
+		final long f8g8_19 = f8 * (long)g8_19;
+		final long f8g9_19 = f8 * (long)g9_19;
+		final long f9g0 = f9 * (long)g0;
+		final long f9g1_38 = f9_2 * (long)g1_19;
+		final long f9g2_19 = f9 * (long)g2_19;
+		final long f9g3_38 = f9_2 * (long)g3_19;
+		final long f9g4_19 = f9 * (long)g4_19;
+		final long f9g5_38 = f9_2 * (long)g5_19;
+		final long f9g6_19 = f9 * (long)g6_19;
+		final long f9g7_38 = f9_2 * (long)g7_19;
+		final long f9g8_19 = f9 * (long)g8_19;
+		final long f9g9_38 = f9_2 * (long)g9_19;
+
+		/**
+		 * Remember: 2^255 congruent 19 modulo p.
+		 * h = h0 * 2^0 + h1 * 2^26 + h2 * 2^(26+25) + h3 * 2^(26+25+26) + ... + h9 * 2^(5*26+5*25).
+		 * So to get the real number we would have to multiply the coefficients with the corresponding powers of 2.
+		 * To get an idea what is going on below, look at the calculation of h0:
+		 * h0 is the coefficient to the power 2^0 so it collects (sums) all products that have the power 2^0.
+		 * f0 * g0 really is f0 * 2^0 * g0 * 2^0 = (f0 * g0) * 2^0.
+		 * f1 * g9 really is f1 * 2^26 * g9 * 2^230 = f1 * g9 * 2^256 = 2 * f1 * g9 * 2^255 congruent 2 * 19 * f1 * g9 * 2^0 modulo p.
+		 * f2 * g8 really is f2 * 2^51 * g8 * 2^204 = f2 * g8 * 2^255 congruent 19 * f2 * g8 * 2^0 modulo p.
+		 * and so on...
+		 */
+		long h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
+		long h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19;
+		long h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38;
+		long h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19;
+		long h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38;
+		long h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19;
+		long h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38;
+		long h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19;
+		long h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38;
+		long h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
+		long carry0;
+		final long carry1;
+		final long carry2;
+		final long carry3;
+		long carry4;
+		final long carry5;
+		final long carry6;
+		final long carry7;
+		final long carry8;
+		final long carry9;
+
+		/**
+		 * |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
+		 * i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8
+		 * |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
+		 * i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9
+		 */
+
+		carry0 = (h0 + (long)(1 << 25)) >> 26;
+		h1 += carry0;
+		h0 -= carry0 << 26;
+		carry4 = (h4 + (long)(1 << 25)) >> 26;
+		h5 += carry4;
+		h4 -= carry4 << 26;
+		/* |h0| <= 2^25 */
+		/* |h4| <= 2^25 */
+		/* |h1| <= 1.71*2^59 */
+		/* |h5| <= 1.71*2^59 */
+
+		carry1 = (h1 + (long)(1 << 24)) >> 25;
+		h2 += carry1;
+		h1 -= carry1 << 25;
+		carry5 = (h5 + (long)(1 << 24)) >> 25;
+		h6 += carry5;
+		h5 -= carry5 << 25;
+		/* |h1| <= 2^24; from now on fits into int32 */
+		/* |h5| <= 2^24; from now on fits into int32 */
+		/* |h2| <= 1.41*2^60 */
+		/* |h6| <= 1.41*2^60 */
+
+		carry2 = (h2 + (long)(1 << 25)) >> 26;
+		h3 += carry2;
+		h2 -= carry2 << 26;
+		carry6 = (h6 + (long)(1 << 25)) >> 26;
+		h7 += carry6;
+		h6 -= carry6 << 26;
+		/* |h2| <= 2^25; from now on fits into int32 unchanged */
+		/* |h6| <= 2^25; from now on fits into int32 unchanged */
+		/* |h3| <= 1.71*2^59 */
+		/* |h7| <= 1.71*2^59 */
+
+		carry3 = (h3 + (long)(1 << 24)) >> 25;
+		h4 += carry3;
+		h3 -= carry3 << 25;
+		carry7 = (h7 + (long)(1 << 24)) >> 25;
+		h8 += carry7;
+		h7 -= carry7 << 25;
+		/* |h3| <= 2^24; from now on fits into int32 unchanged */
+		/* |h7| <= 2^24; from now on fits into int32 unchanged */
+		/* |h4| <= 1.72*2^34 */
+		/* |h8| <= 1.41*2^60 */
+
+		carry4 = (h4 + (long)(1 << 25)) >> 26;
+		h5 += carry4;
+		h4 -= carry4 << 26;
+		carry8 = (h8 + (long)(1 << 25)) >> 26;
+		h9 += carry8;
+		h8 -= carry8 << 26;
+		/* |h4| <= 2^25; from now on fits into int32 unchanged */
+		/* |h8| <= 2^25; from now on fits into int32 unchanged */
+		/* |h5| <= 1.01*2^24 */
+		/* |h9| <= 1.71*2^59 */
+
+		carry9 = (h9 + (long)(1 << 24)) >> 25;
+		h0 += carry9 * 19;
+		h9 -= carry9 << 25;
+		/* |h9| <= 2^24; from now on fits into int32 unchanged */
+		/* |h0| <= 1.1*2^39 */
+
+		carry0 = (h0 + (long)(1 << 25)) >> 26;
+		h1 += carry0;
+		h0 -= carry0 << 26;
+		/* |h0| <= 2^25; from now on fits into int32 unchanged */
+		/* |h1| <= 1.01*2^24 */
+
+		final int[] h = new int[10];
+		h[0] = (int)h0;
+		h[1] = (int)h1;
+		h[2] = (int)h2;
+		h[3] = (int)h3;
+		h[4] = (int)h4;
+		h[5] = (int)h5;
+		h[6] = (int)h6;
+		h[7] = (int)h7;
+		h[8] = (int)h8;
+		h[9] = (int)h9;
+
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Squares this field element and returns the result.
+	 * <b>h = this * this</b>
+	 * <pre>
+	 * Preconditions:
+	 *     |this| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+	 * </pre>
+	 * See multiply for discussion of implementation strategy.
+	 *
+	 * @return The square of this field element.
+	 */
+	public Ed25519FieldElement square() {
+		return this.squareAndOptionalDouble(false);
+	}
+
+	/**
+	 * Squares this field element, multiplies by two and returns the result.
+	 * <b>h = 2 * this * this</b>
+	 * <pre>
+	 * Preconditions:
+	 *     |this| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+	 * </pre>
+	 * See multiply for discussion of implementation strategy.
+	 *
+	 * @return The square of this field element times 2.
+	 */
+	public Ed25519FieldElement squareAndDouble() {
+		return this.squareAndOptionalDouble(true);
+	}
+
+	/**
+	 * Squares this field element, optionally multiplies by two and returns the result.
+	 * <b>h = 2 * this * this</b> if dbl is true or
+	 * <b>h = this * this</b> if dbl is false.
+	 * <pre>
+	 * Preconditions:
+	 *     |this| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
+	 * Postconditions:
+	 *        |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
+	 * </pre>
+	 * See multiply for discussion of implementation strategy.
+	 *
+	 * @return The square of this field element times 2.
+	 */
+	private Ed25519FieldElement squareAndOptionalDouble(final boolean dbl) {
+		final int f0 = this.values[0];
+		final int f1 = this.values[1];
+		final int f2 = this.values[2];
+		final int f3 = this.values[3];
+		final int f4 = this.values[4];
+		final int f5 = this.values[5];
+		final int f6 = this.values[6];
+		final int f7 = this.values[7];
+		final int f8 = this.values[8];
+		final int f9 = this.values[9];
+		final int f0_2 = 2 * f0;
+		final int f1_2 = 2 * f1;
+		final int f2_2 = 2 * f2;
+		final int f3_2 = 2 * f3;
+		final int f4_2 = 2 * f4;
+		final int f5_2 = 2 * f5;
+		final int f6_2 = 2 * f6;
+		final int f7_2 = 2 * f7;
+		final int f5_38 = 38 * f5; /* 1.959375*2^30 */
+		final int f6_19 = 19 * f6; /* 1.959375*2^30 */
+		final int f7_38 = 38 * f7; /* 1.959375*2^30 */
+		final int f8_19 = 19 * f8; /* 1.959375*2^30 */
+		final int f9_38 = 38 * f9; /* 1.959375*2^30 */
+		final long f0f0 = f0 * (long)f0;
+		final long f0f1_2 = f0_2 * (long)f1;
+		final long f0f2_2 = f0_2 * (long)f2;
+		final long f0f3_2 = f0_2 * (long)f3;
+		final long f0f4_2 = f0_2 * (long)f4;
+		final long f0f5_2 = f0_2 * (long)f5;
+		final long f0f6_2 = f0_2 * (long)f6;
+		final long f0f7_2 = f0_2 * (long)f7;
+		final long f0f8_2 = f0_2 * (long)f8;
+		final long f0f9_2 = f0_2 * (long)f9;
+		final long f1f1_2 = f1_2 * (long)f1;
+		final long f1f2_2 = f1_2 * (long)f2;
+		final long f1f3_4 = f1_2 * (long)f3_2;
+		final long f1f4_2 = f1_2 * (long)f4;
+		final long f1f5_4 = f1_2 * (long)f5_2;
+		final long f1f6_2 = f1_2 * (long)f6;
+		final long f1f7_4 = f1_2 * (long)f7_2;
+		final long f1f8_2 = f1_2 * (long)f8;
+		final long f1f9_76 = f1_2 * (long)f9_38;
+		final long f2f2 = f2 * (long)f2;
+		final long f2f3_2 = f2_2 * (long)f3;
+		final long f2f4_2 = f2_2 * (long)f4;
+		final long f2f5_2 = f2_2 * (long)f5;
+		final long f2f6_2 = f2_2 * (long)f6;
+		final long f2f7_2 = f2_2 * (long)f7;
+		final long f2f8_38 = f2_2 * (long)f8_19;
+		final long f2f9_38 = f2 * (long)f9_38;
+		final long f3f3_2 = f3_2 * (long)f3;
+		final long f3f4_2 = f3_2 * (long)f4;
+		final long f3f5_4 = f3_2 * (long)f5_2;
+		final long f3f6_2 = f3_2 * (long)f6;
+		final long f3f7_76 = f3_2 * (long)f7_38;
+		final long f3f8_38 = f3_2 * (long)f8_19;
+		final long f3f9_76 = f3_2 * (long)f9_38;
+		final long f4f4 = f4 * (long)f4;
+		final long f4f5_2 = f4_2 * (long)f5;
+		final long f4f6_38 = f4_2 * (long)f6_19;
+		final long f4f7_38 = f4 * (long)f7_38;
+		final long f4f8_38 = f4_2 * (long)f8_19;
+		final long f4f9_38 = f4 * (long)f9_38;
+		final long f5f5_38 = f5 * (long)f5_38;
+		final long f5f6_38 = f5_2 * (long)f6_19;
+		final long f5f7_76 = f5_2 * (long)f7_38;
+		final long f5f8_38 = f5_2 * (long)f8_19;
+		final long f5f9_76 = f5_2 * (long)f9_38;
+		final long f6f6_19 = f6 * (long)f6_19;
+		final long f6f7_38 = f6 * (long)f7_38;
+		final long f6f8_38 = f6_2 * (long)f8_19;
+		final long f6f9_38 = f6 * (long)f9_38;
+		final long f7f7_38 = f7 * (long)f7_38;
+		final long f7f8_38 = f7_2 * (long)f8_19;
+		final long f7f9_76 = f7_2 * (long)f9_38;
+		final long f8f8_19 = f8 * (long)f8_19;
+		final long f8f9_38 = f8 * (long)f9_38;
+		final long f9f9_38 = f9 * (long)f9_38;
+		long h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
+		long h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
+		long h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
+		long h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38;
+		long h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38;
+		long h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38;
+		long h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19;
+		long h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38;
+		long h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38;
+		long h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2;
+		long carry0;
+		final long carry1;
+		final long carry2;
+		final long carry3;
+		long carry4;
+		final long carry5;
+		final long carry6;
+		final long carry7;
+		final long carry8;
+		final long carry9;
+
+		if (dbl) {
+			h0 += h0;
+			h1 += h1;
+			h2 += h2;
+			h3 += h3;
+			h4 += h4;
+			h5 += h5;
+			h6 += h6;
+			h7 += h7;
+			h8 += h8;
+			h9 += h9;
+		}
+
+		carry0 = (h0 + (long)(1 << 25)) >> 26;
+		h1 += carry0;
+		h0 -= carry0 << 26;
+		carry4 = (h4 + (long)(1 << 25)) >> 26;
+		h5 += carry4;
+		h4 -= carry4 << 26;
+
+		carry1 = (h1 + (long)(1 << 24)) >> 25;
+		h2 += carry1;
+		h1 -= carry1 << 25;
+		carry5 = (h5 + (long)(1 << 24)) >> 25;
+		h6 += carry5;
+		h5 -= carry5 << 25;
+
+		carry2 = (h2 + (long)(1 << 25)) >> 26;
+		h3 += carry2;
+		h2 -= carry2 << 26;
+		carry6 = (h6 + (long)(1 << 25)) >> 26;
+		h7 += carry6;
+		h6 -= carry6 << 26;
+
+		carry3 = (h3 + (long)(1 << 24)) >> 25;
+		h4 += carry3;
+		h3 -= carry3 << 25;
+		carry7 = (h7 + (long)(1 << 24)) >> 25;
+		h8 += carry7;
+		h7 -= carry7 << 25;
+
+		carry4 = (h4 + (long)(1 << 25)) >> 26;
+		h5 += carry4;
+		h4 -= carry4 << 26;
+		carry8 = (h8 + (long)(1 << 25)) >> 26;
+		h9 += carry8;
+		h8 -= carry8 << 26;
+
+		carry9 = (h9 + (long)(1 << 24)) >> 25;
+		h0 += carry9 * 19;
+		h9 -= carry9 << 25;
+
+		carry0 = (h0 + (long)(1 << 25)) >> 26;
+		h1 += carry0;
+		h0 -= carry0 << 26;
+
+		final int[] h = new int[10];
+		h[0] = (int)h0;
+		h[1] = (int)h1;
+		h[2] = (int)h2;
+		h[3] = (int)h3;
+		h[4] = (int)h4;
+		h[5] = (int)h5;
+		h[6] = (int)h6;
+		h[7] = (int)h7;
+		h[8] = (int)h8;
+		h[9] = (int)h9;
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Invert this field element and return the result.
+	 * The inverse is found via Fermat's little theorem:
+	 * a^p congruent a mod p and therefore a^(p-2) congruent a^-1 mod p
+	 *
+	 * @return The inverse of this field element.
+	 */
+	public Ed25519FieldElement invert() {
+		Ed25519FieldElement f0, f1;
+
+		// comments describe how exponent is created
+
+		// 2 == 2 * 1
+		f0 = this.square();
+
+		// 9 == 9
+		f1 = this.pow2to9();
+
+		// 11 == 9 + 2
+		f0 = f0.multiply(f1);
+
+		// 2^252 - 2^2
+		f1 = this.pow2to252sub4();
+
+		// 2^255 - 2^5
+		for (int i = 1; i < 4; ++i) {
+			f1 = f1.square();
+		}
+
+		// 2^255 - 21
+		return f1.multiply(f0);
+	}
+
+	/**
+	 * Computes this field element to the power of (2^9) and returns the result.
+	 *
+	 * @return This field element to the power of (2^9).
+	 */
+	private Ed25519FieldElement pow2to9() {
+		Ed25519FieldElement f;
+
+		// 2 == 2 * 1
+		f = this.square();
+
+		// 4 == 2 * 2
+		f = f.square();
+
+		// 8 == 2 * 4
+		f = f.square();
+
+		// 9 == 1 + 8
+		return this.multiply(f);
+	}
+
+	/**
+	 * Computes this field element to the power of (2^252 - 4) and returns the result.
+	 * This is a helper function for calculating the square root.
+	 *
+	 * @return This field element to the power of (2^252 - 4).
+	 */
+	private Ed25519FieldElement pow2to252sub4() {
+		Ed25519FieldElement f0, f1, f2;
+
+		// 2 == 2 * 1
+		f0 = this.square();
+
+		// 9
+		f1 = this.pow2to9();
+
+		// 11 == 9 + 2
+		f0 = f0.multiply(f1);
+
+		// 22 == 2 * 11
+		f0 = f0.square();
+
+		// 31 == 22 + 9
+		f0 = f1.multiply(f0);
+
+		// 2^6 - 2^1
+		f1 = f0.square();
+
+		// 2^10 - 2^5
+		for (int i = 1; i < 5; ++i) {
+			f1 = f1.square();
+		}
+
+		// 2^10 - 2^0
+		f0 = f1.multiply(f0);
+
+		// 2^11 - 2^1
+		f1 = f0.square();
+
+		// 2^20 - 2^10
+		for (int i = 1; i < 10; ++i) {
+			f1 = f1.square();
+		}
+
+		// 2^20 - 2^0
+		f1 = f1.multiply(f0);
+
+		// 2^21 - 2^1
+		f2 = f1.square();
+
+		// 2^40 - 2^20
+		for (int i = 1; i < 20; ++i) {
+			f2 = f2.square();
+		}
+
+		// 2^40 - 2^0
+		f1 = f2.multiply(f1);
+
+		// 2^41 - 2^1
+		f1 = f1.square();
+
+		// 2^50 - 2^10
+		for (int i = 1; i < 10; ++i) {
+			f1 = f1.square();
+		}
+
+		// 2^50 - 2^0
+		f0 = f1.multiply(f0);
+
+		// 2^51 - 2^1
+		f1 = f0.square();
+
+		// 2^100 - 2^50
+		for (int i = 1; i < 50; ++i) {
+			f1 = f1.square();
+		}
+
+		// 2^100 - 2^0
+		f1 = f1.multiply(f0);
+
+		// 2^101 - 2^1
+		f2 = f1.square();
+
+		// 2^200 - 2^100
+		for (int i = 1; i < 100; ++i) {
+			f2 = f2.square();
+		}
+
+		// 2^200 - 2^0
+		f1 = f2.multiply(f1);
+
+		// 2^201 - 2^1
+		f1 = f1.square();
+
+		// 2^250 - 2^50
+		for (int i = 1; i < 50; ++i) {
+			f1 = f1.square();
+		}
+
+		// 2^250 - 2^0
+		f0 = f1.multiply(f0);
+
+		// 2^251 - 2^1
+		f0 = f0.square();
+
+		// 2^252 - 2^2
+		return f0.square();
+	}
+
+	/**
+	 * Calculates and returns one of the square roots of u / v.
+	 * <pre>{@code
+	 * x = (u * v^3) * (u * v^7)^((p - 5) / 8) ==> x^2 = +-(u / v).
+	 * }</pre>
+	 * Note that this means x can be sqrt(u / v), -sqrt(u / v), +i * sqrt(u / v), -i * sqrt(u / v).
+	 *
+	 * @param u The nominator of the fraction.
+	 * @param v The denominator of the fraction.
+	 * @return The square root of u / v.
+	 */
+	public static Ed25519FieldElement sqrt(final Ed25519FieldElement u, final Ed25519FieldElement v) {
+		Ed25519FieldElement x;
+		final Ed25519FieldElement v3;
+
+		// v3 = v^3
+		v3 = v.square().multiply(v);
+
+		// x = (v3^2) * v * u = u * v^7
+		x = v3.square().multiply(v).multiply(u);
+
+		//  x = (u * v^7)^((q - 5) / 8)
+		x = x.pow2to252sub4().multiply(x); // 2^252 - 3
+
+		// x = u * v^3 * (u * v^7)^((q - 5) / 8)
+		x = v3.multiply(u).multiply(x);
+
+		return x;
+	}
+
+	/**
+	 * Reduce this field element modulo field size p = 2^255 - 19 and return the result.
+	 * The idea for the modulo p reduction algorithm is as follows:
+	 * <pre>
+	 * {@code
+	 * Assumption:
+	 * p = 2^255 - 19
+	 * h = h0 + 2^25 * h1 + 2^(26+25) * h2 + ... + 2^230 * h9 where 0 <= |hi| < 2^27 for all i=0,...,9.
+	 * h congruent r modulo p, i.e. h = r + q * p for some suitable 0 <= r < p and an integer q.
+	 * <br>
+	 * Then q = [2^-255 * (h + 19 * 2^-25 * h9 + 1/2)] where [x] = floor(x).
+	 * <br>
+	 * Proof:
+	 * We begin with some very raw estimation for the bounds of some expressions:
+	 *     |h| < 2^230 * 2^30 = 2^260 ==> |r + q * p| < 2^260 ==> |q| < 2^10.
+	 *         ==> -1/4 <= a := 19^2 * 2^-255 * q < 1/4.
+	 *     |h - 2^230 * h9| = |h0 + ... + 2^204 * h8| < 2^204 * 2^30 = 2^234.
+	 *         ==> -1/4 <= b := 19 * 2^-255 * (h - 2^230 * h9) < 1/4
+	 * Therefore 0 < 1/2 - a - b < 1.
+	 * Set x := r + 19 * 2^-255 * r + 1/2 - a - b then
+	 *     0 <= x < 255 - 20 + 19 + 1 = 2^255 ==> 0 <= 2^-255 * x < 1. Since q is an integer we have
+	 *     [q + 2^-255 * x] = q        (1)
+	 * Have a closer look at x:
+	 *     x = h - q * (2^255 - 19) + 19 * 2^-255 * (h - q * (2^255 - 19)) + 1/2 - 19^2 * 2^-255 * q - 19 * 2^-255 * (h - 2^230 * h9)
+	 *       = h - q * 2^255 + 19 * q + 19 * 2^-255 * h - 19 * q + 19^2 * 2^-255 * q + 1/2 - 19^2 * 2^-255 * q - 19 * 2^-255 * h + 19 * 2^-25 * h9
+	 *       = h + 19 * 2^-25 * h9 + 1/2 - q^255.
+	 * Inserting the expression for x into (1) we get the desired expression for q.
+	 * }
+	 * </pre>
+	 *
+	 * @return The mod p reduced field element;
+	 */
+	private Ed25519FieldElement modP() {
+		int h0 = this.values[0];
+		int h1 = this.values[1];
+		int h2 = this.values[2];
+		int h3 = this.values[3];
+		int h4 = this.values[4];
+		int h5 = this.values[5];
+		int h6 = this.values[6];
+		int h7 = this.values[7];
+		int h8 = this.values[8];
+		int h9 = this.values[9];
+		int q;
+		final int carry0;
+		final int carry1;
+		final int carry2;
+		final int carry3;
+		final int carry4;
+		final int carry5;
+		final int carry6;
+		final int carry7;
+		final int carry8;
+		final int carry9;
+
+		// Calculate q
+		q = (19 * h9 + (1 << 24)) >> 25;
+		q = (h0 + q) >> 26;
+		q = (h1 + q) >> 25;
+		q = (h2 + q) >> 26;
+		q = (h3 + q) >> 25;
+		q = (h4 + q) >> 26;
+		q = (h5 + q) >> 25;
+		q = (h6 + q) >> 26;
+		q = (h7 + q) >> 25;
+		q = (h8 + q) >> 26;
+		q = (h9 + q) >> 25;
+
+		// r = h - q * p = h - 2^255 * q + 19 * q
+		// First add 19 * q then discard the bit 255
+		h0 += 19 * q;
+
+		carry0 = h0 >> 26;
+		h1 += carry0;
+		h0 -= carry0 << 26;
+		carry1 = h1 >> 25;
+		h2 += carry1;
+		h1 -= carry1 << 25;
+		carry2 = h2 >> 26;
+		h3 += carry2;
+		h2 -= carry2 << 26;
+		carry3 = h3 >> 25;
+		h4 += carry3;
+		h3 -= carry3 << 25;
+		carry4 = h4 >> 26;
+		h5 += carry4;
+		h4 -= carry4 << 26;
+		carry5 = h5 >> 25;
+		h6 += carry5;
+		h5 -= carry5 << 25;
+		carry6 = h6 >> 26;
+		h7 += carry6;
+		h6 -= carry6 << 26;
+		carry7 = h7 >> 25;
+		h8 += carry7;
+		h7 -= carry7 << 25;
+		carry8 = h8 >> 26;
+		h9 += carry8;
+		h8 -= carry8 << 26;
+		carry9 = h9 >> 25;
+		h9 -= carry9 << 25;
+
+		final int[] h = new int[10];
+		h[0] = h0;
+		h[1] = h1;
+		h[2] = h2;
+		h[3] = h3;
+		h[4] = h4;
+		h[5] = h5;
+		h[6] = h6;
+		h[7] = h7;
+		h[8] = h8;
+		h[9] = h9;
+
+		return new Ed25519FieldElement(h);
+	}
+
+	/**
+	 * Encodes a given field element in its 32 byte 2^8 bit representation. This is done in two steps.
+	 * Step 1: Reduce the value of the field element modulo p.
+	 * Step 2: Convert the field element to the 32 byte representation.
+	 *
+	 * @return Encoded field element (32 bytes).
+	 */
+	public Ed25519EncodedFieldElement encode() {
+		// Step 1:
+		final Ed25519FieldElement g = this.modP();
+		final int[] gValues = g.getRaw();
+		final int h0 = gValues[0];
+		final int h1 = gValues[1];
+		final int h2 = gValues[2];
+		final int h3 = gValues[3];
+		final int h4 = gValues[4];
+		final int h5 = gValues[5];
+		final int h6 = gValues[6];
+		final int h7 = gValues[7];
+		final int h8 = gValues[8];
+		final int h9 = gValues[9];
+
+		// Step 2:
+		final byte[] s = new byte[32];
+		s[0] = (byte)(h0);
+		s[1] = (byte)(h0 >> 8);
+		s[2] = (byte)(h0 >> 16);
+		s[3] = (byte)((h0 >> 24) | (h1 << 2));
+		s[4] = (byte)(h1 >> 6);
+		s[5] = (byte)(h1 >> 14);
+		s[6] = (byte)((h1 >> 22) | (h2 << 3));
+		s[7] = (byte)(h2 >> 5);
+		s[8] = (byte)(h2 >> 13);
+		s[9] = (byte)((h2 >> 21) | (h3 << 5));
+		s[10] = (byte)(h3 >> 3);
+		s[11] = (byte)(h3 >> 11);
+		s[12] = (byte)((h3 >> 19) | (h4 << 6));
+		s[13] = (byte)(h4 >> 2);
+		s[14] = (byte)(h4 >> 10);
+		s[15] = (byte)(h4 >> 18);
+		s[16] = (byte)(h5);
+		s[17] = (byte)(h5 >> 8);
+		s[18] = (byte)(h5 >> 16);
+		s[19] = (byte)((h5 >> 24) | (h6 << 1));
+		s[20] = (byte)(h6 >> 7);
+		s[21] = (byte)(h6 >> 15);
+		s[22] = (byte)((h6 >> 23) | (h7 << 3));
+		s[23] = (byte)(h7 >> 5);
+		s[24] = (byte)(h7 >> 13);
+		s[25] = (byte)((h7 >> 21) | (h8 << 4));
+		s[26] = (byte)(h8 >> 4);
+		s[27] = (byte)(h8 >> 12);
+		s[28] = (byte)((h8 >> 20) | (h9 << 6));
+		s[29] = (byte)(h9 >> 2);
+		s[30] = (byte)(h9 >> 10);
+		s[31] = (byte)(h9 >> 18);
+
+		return new Ed25519EncodedFieldElement(s);
+	}
+
+	/**
+	 * Return true if this is in {1,3,5,...,q-2}
+	 * Return false if this is in {0,2,4,...,q-1}
+	 * <pre>
+	 * Preconditions:
+	 *     |x| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
+	 * </pre>
+	 *
+	 * @return true if this is in {1,3,5,...,q-2}, false otherwise.
+	 */
+	public boolean isNegative() {
+		return this.encode().isNegative();
+	}
+
+	@Override
+	public int hashCode() {
+		return Arrays.hashCode(this.values);
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (!(obj instanceof Ed25519FieldElement)) {
+			return false;
+		}
+
+		final Ed25519FieldElement f = (Ed25519FieldElement)obj;
+		return this.encode().equals(f.encode());
+	}
+
+	@Override
+	public String toString() {
+		return this.encode().toString();
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Group.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Group.java
new file mode 100755
index 0000000..ca222e0
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519Group.java
@@ -0,0 +1,36 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+import org.nem.core.utils.HexEncoder;
+
+import java.math.BigInteger;
+
+/**
+ * Represents the underlying group for Ed25519.
+ */
+public class Ed25519Group {
+
+	/**
+	 * 2^252 - 27742317777372353535851937790883648493
+	 */
+	public static final BigInteger GROUP_ORDER = BigInteger.ONE.shiftLeft(252).add(new BigInteger("27742317777372353535851937790883648493"));
+
+	/**
+	 * <pre>{@code
+	 * (x, 4/5); x > 0
+	 * }</pre>
+	 */
+	public static final Ed25519GroupElement BASE_POINT = getBasePoint();
+
+	// different representations of zero
+	public static final Ed25519GroupElement ZERO_P3 = Ed25519GroupElement.p3(Ed25519Field.ZERO, Ed25519Field.ONE, Ed25519Field.ONE, Ed25519Field.ZERO);
+	public static final Ed25519GroupElement ZERO_P2 = Ed25519GroupElement.p2(Ed25519Field.ZERO, Ed25519Field.ONE, Ed25519Field.ONE);
+	public static final Ed25519GroupElement ZERO_PRECOMPUTED = Ed25519GroupElement.precomputed(Ed25519Field.ONE, Ed25519Field.ONE, Ed25519Field.ZERO);
+
+	private static Ed25519GroupElement getBasePoint() {
+		final byte[] rawEncodedGroupElement = HexEncoder.getBytes("5866666666666666666666666666666666666666666666666666666666666666");
+		final Ed25519GroupElement basePoint = new Ed25519EncodedGroupElement(rawEncodedGroupElement).decode();
+		basePoint.precomputeForScalarMultiplication();
+		basePoint.precomputeForDoubleScalarMultiplication();
+		return basePoint;
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519GroupElement.java b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519GroupElement.java
new file mode 100755
index 0000000..19a7d58
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/crypto/ed25519/arithmetic/Ed25519GroupElement.java
@@ -0,0 +1,1012 @@
+package org.nem.core.crypto.ed25519.arithmetic;
+
+import how.monero.hodl.crypto.Scalar;
+import how.monero.hodl.jni.CryptoOpsUtil;
+import org.nem.core.utils.ByteUtils;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * A point on the ED25519 curve which represents a group element.
+ * This implementation is based on the ref10 implementation of SUPERCOP.
+ * <br>
+ * Literature:
+ * [1] Daniel J. Bernstein, Niels Duif, Tanja Lange, Peter Schwabe and Bo-Yin Yang : High-speed high-security signatures
+ * [2] Huseyin Hisil, Kenneth Koon-Ho Wong, Gary Carter, Ed Dawson: Twisted Edwards Curves Revisited
+ * [3] Daniel J. Bernsteina, Tanja Lange: A complete set of addition laws for incomplete Edwards curves
+ * [4] Daniel J. Bernstein, Peter Birkner, Marc Joye, Tanja Lange and Christiane Peters: Twisted Edwards Curves
+ * [5] Christiane Pascale Peters: Curves, Codes, and Cryptography (PhD thesis)
+ * [6] Daniel J. Bernstein, Peter Birkner, Tanja Lange and Christiane Peters: Optimizing double-base elliptic-curve single-scalar multiplication
+ */
+public class Ed25519GroupElement implements Serializable {
+
+	private final CoordinateSystem coordinateSystem;
+	@SuppressWarnings("NonConstantFieldWithUpperCaseName")
+	private final Ed25519FieldElement X;
+	@SuppressWarnings("NonConstantFieldWithUpperCaseName")
+	private final Ed25519FieldElement Y;
+	@SuppressWarnings("NonConstantFieldWithUpperCaseName")
+	private final Ed25519FieldElement Z;
+	@SuppressWarnings("NonConstantFieldWithUpperCaseName")
+	private final Ed25519FieldElement T;
+
+	/**
+	 * Precomputed table for a single scalar multiplication.
+	 */
+	private Ed25519GroupElement[][] precomputedForSingle;
+
+	/**
+	 * Precomputed table for a double scalar multiplication
+	 */
+	private Ed25519GroupElement[] precomputedForDouble;
+
+	//region constructors
+
+	/**
+	 * Creates a new group element using the AFFINE coordinate system.
+	 *
+	 * @param x The x coordinate.
+	 * @param y The y coordinate.
+	 * @param Z The Z coordinate.
+	 * @return The group element using the P2 coordinate system.
+	 */
+	public static Ed25519GroupElement affine(
+			final Ed25519FieldElement x,
+			final Ed25519FieldElement y,
+			final Ed25519FieldElement Z) {
+		return new Ed25519GroupElement(CoordinateSystem.AFFINE, x, y, Z, null);
+	}
+
+	/**
+	 * Creates a new group element using the P2 coordinate system.
+	 *
+	 * @param X The X coordinate.
+	 * @param Y The Y coordinate.
+	 * @param Z The Z coordinate.
+	 * @return The group element using the P2 coordinate system.
+	 */
+	public static Ed25519GroupElement p2(
+			final Ed25519FieldElement X,
+			final Ed25519FieldElement Y,
+			final Ed25519FieldElement Z) {
+		return new Ed25519GroupElement(CoordinateSystem.P2, X, Y, Z, null);
+	}
+
+	/**
+	 * Creates a new group element using the P3 coordinate system.
+	 *
+	 * @param X The X coordinate.
+	 * @param Y The Y coordinate.
+	 * @param Z The Z coordinate.
+	 * @param T The T coordinate.
+	 * @return The group element using the P3 coordinate system.
+	 */
+	public static Ed25519GroupElement p3(
+			final Ed25519FieldElement X,
+			final Ed25519FieldElement Y,
+			final Ed25519FieldElement Z,
+			final Ed25519FieldElement T) {
+		return new Ed25519GroupElement(CoordinateSystem.P3, X, Y, Z, T);
+	}
+
+	/**
+	 * Creates a new group element using the P1xP1 coordinate system.
+	 *
+	 * @param X The X coordinate.
+	 * @param Y The Y coordinate.
+	 * @param Z The Z coordinate.
+	 * @param T The T coordinate.
+	 * @return The group element using the P1xP1 coordinate system.
+	 */
+	public static Ed25519GroupElement p1xp1(
+			final Ed25519FieldElement X,
+			final Ed25519FieldElement Y,
+			final Ed25519FieldElement Z,
+			final Ed25519FieldElement T) {
+		return new Ed25519GroupElement(CoordinateSystem.P1xP1, X, Y, Z, T);
+	}
+
+	/**
+	 * Creates a new group element using the PRECOMPUTED coordinate system.
+	 *
+	 * @param yPlusx The y + x value.
+	 * @param yMinusx The y - x value.
+	 * @param xy2d The 2 * d * x * y value.
+	 * @return The group element using the PRECOMPUTED coordinate system.
+	 */
+	public static Ed25519GroupElement precomputed(
+			final Ed25519FieldElement yPlusx,
+			final Ed25519FieldElement yMinusx,
+			final Ed25519FieldElement xy2d) {
+		//noinspection SuspiciousNameCombination
+		return new Ed25519GroupElement(CoordinateSystem.PRECOMPUTED, yPlusx, yMinusx, xy2d, null);
+	}
+
+	/**
+	 * Creates a new group element using the CACHED coordinate system.
+	 *
+	 * @param YPlusX The Y + X value.
+	 * @param YMinusX The Y - X value.
+	 * @param Z The Z coordinate.
+	 * @param T2d The 2 * d * T value.
+	 * @return The group element using the CACHED coordinate system.
+	 */
+	public static Ed25519GroupElement cached(
+			final Ed25519FieldElement YPlusX,
+			final Ed25519FieldElement YMinusX,
+			final Ed25519FieldElement Z,
+			final Ed25519FieldElement T2d) {
+		return new Ed25519GroupElement(CoordinateSystem.CACHED, YPlusX, YMinusX, Z, T2d);
+	}
+
+	/**
+	 * Creates a group element for a curve.
+	 *
+	 * @param coordinateSystem The coordinate system used for the group element.
+	 * @param X The X coordinate.
+	 * @param Y The Y coordinate.
+	 * @param Z The Z coordinate.
+	 * @param T The T coordinate.
+	 */
+	public Ed25519GroupElement(
+			final CoordinateSystem coordinateSystem,
+			final Ed25519FieldElement X,
+			final Ed25519FieldElement Y,
+			final Ed25519FieldElement Z,
+			final Ed25519FieldElement T) {
+		this.coordinateSystem = coordinateSystem;
+		this.X = X;
+		this.Y = Y;
+		this.Z = Z;
+		this.T = T;
+	}
+
+	//endregion
+
+	//region accessors
+
+	/**
+	 * Gets the coordinate system for the group element.
+	 *
+	 * @return The coordinate system.
+	 */
+	public CoordinateSystem getCoordinateSystem() {
+		return this.coordinateSystem;
+	}
+
+	/**
+	 * Gets the X value of the group element.
+	 * This is for most coordinate systems the projective X coordinate.
+	 *
+	 * @return The X value.
+	 */
+	public Ed25519FieldElement getX() {
+		return this.X;
+	}
+
+	/**
+	 * Gets the Y value of the group element.
+	 * This is for most coordinate systems the projective Y coordinate.
+	 *
+	 * @return The Y value.
+	 */
+	public Ed25519FieldElement getY() {
+		return this.Y;
+	}
+
+	/**
+	 * Gets the Z value of the group element.
+	 * This is for most coordinate systems the projective Z coordinate.
+	 *
+	 * @return The Z value.
+	 */
+	public Ed25519FieldElement getZ() {
+		return this.Z;
+	}
+
+	/**
+	 * Gets the T value of the group element.
+	 * This is for most coordinate systems the projective T coordinate.
+	 *
+	 * @return The T value.
+	 */
+	public Ed25519FieldElement getT() {
+		return this.T;
+	}
+
+	/**
+	 * Gets a value indicating whether or not the group element has a
+	 * precomputed table for double scalar multiplication.
+	 *
+	 * @return true if it has the table, false otherwise.
+	 */
+	public boolean isPrecomputedForDoubleScalarMultiplication() {
+		return null != this.precomputedForDouble;
+	}
+
+	/**
+	 * Gets the table with the precomputed group elements for single scalar multiplication.
+	 *
+	 * @return The precomputed table.
+	 */
+	public Ed25519GroupElement[][] getPrecomputedForSingle() {
+		return this.precomputedForSingle;
+	}
+
+	/**
+	 * Gets the table with the precomputed group elements for double scalar multiplication.
+	 *
+	 * @return The precomputed table.
+	 */
+	public Ed25519GroupElement[] getPrecomputedForDouble() {
+		return this.precomputedForDouble;
+	}
+
+	//endregion
+
+	/**
+	 * Converts the group element to an encoded point on the curve.
+	 *
+	 * @return The encoded point as byte array.
+	 */
+	public Ed25519EncodedGroupElement encode() {
+		switch (this.coordinateSystem) {
+			case P2:
+			case P3:
+				final Ed25519FieldElement inverse = this.Z.invert();
+				final Ed25519FieldElement x = this.X.multiply(inverse);
+				final Ed25519FieldElement y = this.Y.multiply(inverse);
+				final byte[] s = y.encode().getRaw();
+				s[s.length - 1] |= (x.isNegative() ? (byte)0x80 : 0);
+
+				return new Ed25519EncodedGroupElement(s);
+			default:
+				return this.toP2().encode();
+		}
+	}
+
+	/**
+	 * Converts the group element to the P2 coordinate system.
+	 *
+	 * @return The group element in the P2 coordinate system.
+	 */
+	public Ed25519GroupElement toP2() {
+		return this.toCoordinateSystem(CoordinateSystem.P2);
+	}
+
+	/**
+	 * Converts the group element to the P3 coordinate system.
+	 *
+	 * @return The group element in the P3 coordinate system.
+	 */
+	public Ed25519GroupElement toP3() {
+		return this.toCoordinateSystem(CoordinateSystem.P3);
+	}
+
+	/**
+	 * Converts the group element to the CACHED coordinate system.
+	 *
+	 * @return The group element in the CACHED coordinate system.
+	 */
+	public Ed25519GroupElement toCached() {
+		return this.toCoordinateSystem(CoordinateSystem.CACHED);
+	}
+
+	/**
+	 * Convert a Ed25519GroupElement from one coordinate system to another.
+	 * <br>
+	 * Supported conversions:
+	 * - P3 -> P2
+	 * - P3 -> CACHED (1 multiply, 1 add, 1 subtract)
+	 * - P1xP1 -> P2 (3 multiply)
+	 * - P1xP1 -> P3 (4 multiply)
+	 *
+	 * @param newCoordinateSystem The coordinate system to convert to.
+	 * @return A new group element in the new coordinate system.
+	 */
+	private Ed25519GroupElement toCoordinateSystem(final CoordinateSystem newCoordinateSystem) {
+		switch (this.coordinateSystem) {
+			case P2:
+				switch (newCoordinateSystem) {
+					case P2:
+						return p2(this.X, this.Y, this.Z);
+					default:
+						throw new IllegalArgumentException();
+				}
+			case P3:
+				switch (newCoordinateSystem) {
+					case P2:
+						return p2(this.X, this.Y, this.Z);
+					case P3:
+						return p3(this.X, this.Y, this.Z, this.T);
+					case CACHED:
+						return cached(this.Y.add(this.X), this.Y.subtract(this.X), this.Z, this.T.multiply(Ed25519Field.D_Times_TWO));
+					default:
+						throw new IllegalArgumentException();
+				}
+			case P1xP1:
+				switch (newCoordinateSystem) {
+					case P2:
+						return p2(this.X.multiply(this.T), this.Y.multiply(this.Z), this.Z.multiply(this.T));
+					case P3:
+						return p3(this.X.multiply(this.T), this.Y.multiply(this.Z), this.Z.multiply(this.T), this.X.multiply(this.Y));
+					case P1xP1:
+						return p1xp1(this.X, this.Y, this.Z, this.T);
+					default:
+						throw new IllegalArgumentException();
+				}
+			case PRECOMPUTED:
+				switch (newCoordinateSystem) {
+					case PRECOMPUTED:
+						//noinspection SuspiciousNameCombination
+						return precomputed(this.X, this.Y, this.Z);
+					default:
+						throw new IllegalArgumentException();
+				}
+			case CACHED:
+				switch (newCoordinateSystem) {
+					case CACHED:
+						return cached(this.X, this.Y, this.Z, this.T);
+					default:
+						throw new IllegalArgumentException();
+				}
+			default:
+				throw new UnsupportedOperationException();
+		}
+	}
+
+	/**
+	 * Precomputes the group elements needed to speed up a scalar multiplication.
+	 */
+	public void precomputeForScalarMultiplication() {
+		if (null != this.precomputedForSingle) {
+			return;
+		}
+
+		Ed25519GroupElement Bi = this;
+		this.precomputedForSingle = new Ed25519GroupElement[32][8];
+
+		for (int i = 0; i < 32; i++) {
+			Ed25519GroupElement Bij = Bi;
+			for (int j = 0; j < 8; j++) {
+				final Ed25519FieldElement inverse = Bij.Z.invert();
+				final Ed25519FieldElement x = Bij.X.multiply(inverse);
+				final Ed25519FieldElement y = Bij.Y.multiply(inverse);
+				this.precomputedForSingle[i][j] = precomputed(y.add(x), y.subtract(x), x.multiply(y).multiply(Ed25519Field.D_Times_TWO));
+				Bij = Bij.add(Bi.toCached()).toP3();
+			}
+			// Only every second summand is precomputed (16^2 = 256).
+			for (int k = 0; k < 8; k++) {
+				Bi = Bi.add(Bi.toCached()).toP3();
+			}
+		}
+	}
+
+	/**
+	 * Precomputes the group elements used to speed up a double scalar multiplication.
+	 */
+	public void precomputeForDoubleScalarMultiplication() {
+		if (null != this.precomputedForDouble) {
+			return;
+		}
+		Ed25519GroupElement Bi = this;
+		this.precomputedForDouble = new Ed25519GroupElement[8];
+		for (int i = 0; i < 8; i++) {
+			final Ed25519FieldElement inverse = Bi.Z.invert();
+			final Ed25519FieldElement x = Bi.X.multiply(inverse);
+			final Ed25519FieldElement y = Bi.Y.multiply(inverse);
+			this.precomputedForDouble[i] = precomputed(y.add(x), y.subtract(x), x.multiply(y).multiply(Ed25519Field.D_Times_TWO));
+			Bi = this.add(this.add(Bi.toCached()).toP3().toCached()).toP3();
+		}
+	}
+
+	/**
+	 * Doubles a given group element p in P^2 or P^3 coordinate system and returns the result in P x P coordinate system.
+	 * r = 2 * p where p = (X : Y : Z) or p = (X : Y : Z : T)
+	 * <br>
+	 * r in P x P coordinate system:
+	 * <br>
+	 * r = ((X' : Z'), (Y' : T')) where
+	 * X' = (X + Y)^2 - (Y^2 + X^2)
+	 * Y' = Y^2 + X^2
+	 * Z' = y^2 - X^2
+	 * T' = 2 * Z^2 - (y^2 - X^2)
+	 * <br>
+	 * r converted from P x P to P^2 coordinate system:
+	 * <br>
+	 * r = (X'' : Y'' : Z'') where
+	 * X'' = X' * T' = ((X + Y)^2 - Y^2 - X^2) * (2 * Z^2 - (y^2 - X^2))
+	 * Y'' = Y' * Z' = (Y^2 + X^2) * (y^2 - X^2)
+	 * Z'' = Z' * T' = (y^2 - X^2) * (2 * Z^2 - (y^2 - X^2))
+	 * <br>
+	 * Formula for the P^2 coordinate system is in agreement with the formula given in [4] page 12 (with a = -1)
+	 * (up to a common factor -1 which does not matter):
+	 * <br>
+	 * B = (X + Y)^2; C = X^2; D = Y^2; E = -C = -X^2; F := E + D = Y^2 - X^2; H = Z^2; J = F − 2 * H;
+	 * X3 = (B − C − D) · J = X' * (-T');
+	 * Y3 = F · (E − D) = Z' * (-Y');
+	 * Z3 = F · J = Z' * (-T').
+	 *
+	 * @return The doubled group element in the P x P coordinate system.
+	 */
+	public Ed25519GroupElement dbl() {
+		switch (this.coordinateSystem) {
+			case P2:
+			case P3:
+				final Ed25519FieldElement XSquare;
+				final Ed25519FieldElement YSquare;
+				final Ed25519FieldElement B;
+				final Ed25519FieldElement A;
+				final Ed25519FieldElement ASquare;
+				final Ed25519FieldElement YSquarePlusXSquare;
+				final Ed25519FieldElement YSquareMinusXSquare;
+				XSquare = this.X.square();
+				YSquare = this.Y.square();
+				B = this.Z.squareAndDouble();
+				A = this.X.add(this.Y);
+				ASquare = A.square();
+				YSquarePlusXSquare = YSquare.add(XSquare);
+				YSquareMinusXSquare = YSquare.subtract(XSquare);
+				return p1xp1(ASquare.subtract(YSquarePlusXSquare), YSquarePlusXSquare, YSquareMinusXSquare, B.subtract(YSquareMinusXSquare));
+			default:
+				throw new UnsupportedOperationException();
+		}
+	}
+
+	/**
+	 * Ed25519GroupElement addition using the twisted Edwards addition law for extended coordinates.
+	 * this must be given in P^3 coordinate system and g in PRECOMPUTED coordinate system.
+	 * r = this + g where this = (X1 : Y1 : Z1 : T1), g = (g.X, g.Y, g.Z) = (Y2/Z2 + X2/Z2, Y2/Z2 - X2/Z2, 2 * d * X2/Z2 * Y2/Z2)
+	 * <br>
+	 * r in P x P coordinate system:
+	 * <br>
+	 * r = ((X' : Z'), (Y' : T')) where
+	 * X' = (Y1 + X1) * g.X - (Y1 - X1) * q.Y = ((Y1 + X1) * (Y2 + X2) - (Y1 - X1) * (Y2 - X2)) * 1/Z2
+	 * Y' = (Y1 + X1) * g.X + (Y1 - X1) * q.Y = ((Y1 + X1) * (Y2 + X2) + (Y1 - X1) * (Y2 - X2)) * 1/Z2
+	 * Z' = 2 * Z1 + T1 * g.Z = 2 * Z1 + T1 * 2 * d * X2 * Y2 * 1/Z2^2 = (2 * Z1 * Z2 + 2 * d * T1 * T2) * 1/Z2
+	 * T' = 2 * Z1 - T1 * g.Z = 2 * Z1 - T1 * 2 * d * X2 * Y2 * 1/Z2^2 = (2 * Z1 * Z2 - 2 * d * T1 * T2) * 1/Z2
+	 * <br>
+	 * Formula for the P x P coordinate system is in agreement with the formula given in
+	 * file ge25519.c method add_p1p1() in ref implementation.
+	 * Setting A = (Y1 - X1) * (Y2 - X2), B = (Y1 + X1) * (Y2 + X2), C = 2 * d * T1 * T2, D = 2 * Z1 * Z2 we get
+	 * X' = (B - A) * 1/Z2
+	 * Y' = (B + A) * 1/Z2
+	 * Z' = (D + C) * 1/Z2
+	 * T' = (D - C) * 1/Z2
+	 * <br>
+	 * r converted from P x P to P^2 coordinate system:
+	 * <br>
+	 * r = (X'' : Y'' : Z'' : T'') where
+	 * X'' = X' * T' = (B - A) * (D - C) * 1/Z2^2
+	 * Y'' = Y' * Z' = (B + A) * (D + C) * 1/Z2^2
+	 * Z'' = Z' * T' = (D + C) * (D - C) * 1/Z2^2
+	 * T'' = X' * Y' = (B - A) * (B + A) * 1/Z2^2
+	 * <br>
+	 * Formula above for the P^2 coordinate system is in agreement with the formula given in [2] page 6
+	 * (the common factor 1/Z2^2 does not matter)
+	 * E = B - A, F = D - C, G = D + C, H = B + A
+	 * X3 = E * F = (B - A) * (D - C);
+	 * Y3 = G * H = (D + C) * (B + A);
+	 * Z3 = F * G = (D - C) * (D + C);
+	 * T3 = E * H = (B - A) * (B + A);
+	 *
+	 * @param g The group element to add.
+	 * @return The resulting group element in the P x P coordinate system.
+	 */
+	private Ed25519GroupElement precomputedAdd(final Ed25519GroupElement g) {
+		if (this.coordinateSystem != CoordinateSystem.P3) {
+			throw new UnsupportedOperationException();
+		}
+		if (g.coordinateSystem != CoordinateSystem.PRECOMPUTED) {
+			throw new IllegalArgumentException();
+		}
+
+		final Ed25519FieldElement YPlusX;
+		final Ed25519FieldElement YMinusX;
+		final Ed25519FieldElement A;
+		final Ed25519FieldElement B;
+		final Ed25519FieldElement C;
+		final Ed25519FieldElement D;
+		YPlusX = this.Y.add(this.X);
+		YMinusX = this.Y.subtract(this.X);
+		A = YPlusX.multiply(g.X);
+		B = YMinusX.multiply(g.Y);
+		C = g.Z.multiply(this.T);
+		D = this.Z.add(this.Z);
+
+		return p1xp1(A.subtract(B), A.add(B), D.add(C), D.subtract(C));
+	}
+
+	/**
+	 * Ed25519GroupElement subtraction using the twisted Edwards addition law for extended coordinates.
+	 * this must be given in P^3 coordinate system and g in PRECOMPUTED coordinate system.
+	 * r = this - g where this = (X1 : Y1 : Z1 : T1), g = (g.X, g.Y, g.Z) = (Y2/Z2 + X2/Z2, Y2/Z2 - X2/Z2, 2 * d * X2/Z2 * Y2/Z2)
+	 * <br>
+	 * Negating g means negating the value of X2 and T2 (the latter is irrelevant here).
+	 * The formula is in accordance to the above addition.
+	 *
+	 * @param g he group element to subtract.
+	 * @return The result in the P x P coordinate system.
+	 */
+	private Ed25519GroupElement precomputedSubtract(final Ed25519GroupElement g) {
+		if (this.coordinateSystem != CoordinateSystem.P3) {
+			throw new UnsupportedOperationException();
+		}
+		if (g.coordinateSystem != CoordinateSystem.PRECOMPUTED) {
+			throw new IllegalArgumentException();
+		}
+
+		final Ed25519FieldElement YPlusX;
+		final Ed25519FieldElement YMinusX;
+		final Ed25519FieldElement A;
+		final Ed25519FieldElement B;
+		final Ed25519FieldElement C;
+		final Ed25519FieldElement D;
+		YPlusX = this.Y.add(this.X);
+		YMinusX = this.Y.subtract(this.X);
+		A = YPlusX.multiply(g.Y);
+		B = YMinusX.multiply(g.X);
+		C = g.Z.multiply(this.T);
+		D = this.Z.add(this.Z);
+
+		return p1xp1(A.subtract(B), A.add(B), D.subtract(C), D.add(C));
+	}
+
+	/**
+	 * Ed25519GroupElement addition using the twisted Edwards addition law for extended coordinates.
+	 * this must be given in P^3 coordinate system and g in CACHED coordinate system.
+	 * r = this + g where this = (X1 : Y1 : Z1 : T1), g = (g.X, g.Y, g.Z, g.T) = (Y2 + X2, Y2 - X2, Z2, 2 * d * T2)
+	 * <br>
+	 * r in P x P coordinate system.:
+	 * X' = (Y1 + X1) * (Y2 + X2) - (Y1 - X1) * (Y2 - X2)
+	 * Y' = (Y1 + X1) * (Y2 + X2) + (Y1 - X1) * (Y2 - X2)
+	 * Z' = 2 * Z1 * Z2 + 2 * d * T1 * T2
+	 * T' = 2 * Z1 * T2 - 2 * d * T1 * T2
+	 * <br>
+	 * Setting A = (Y1 - X1) * (Y2 - X2), B = (Y1 + X1) * (Y2 + X2), C = 2 * d * T1 * T2, D = 2 * Z1 * Z2 we get
+	 * X' = (B - A)
+	 * Y' = (B + A)
+	 * Z' = (D + C)
+	 * T' = (D - C)
+	 * <br>
+	 * Same result as in precomputedAdd() (up to a common factor which does not matter).
+	 *
+	 * @param g The group element to add.
+	 * @return The result in the P x P coordinate system.
+	 */
+	public Ed25519GroupElement add(final Ed25519GroupElement g) {
+		if (this.coordinateSystem != CoordinateSystem.P3) {
+			throw new UnsupportedOperationException();
+		}
+		if (g.coordinateSystem != CoordinateSystem.CACHED) {
+			throw new IllegalArgumentException();
+		}
+
+		final Ed25519FieldElement YPlusX;
+		final Ed25519FieldElement YMinusX;
+		final Ed25519FieldElement ZSquare;
+		final Ed25519FieldElement A;
+		final Ed25519FieldElement B;
+		final Ed25519FieldElement C;
+		final Ed25519FieldElement D;
+		YPlusX = this.Y.add(this.X);
+		YMinusX = this.Y.subtract(this.X);
+		A = YPlusX.multiply(g.X);
+		B = YMinusX.multiply(g.Y);
+		C = g.T.multiply(this.T);
+		ZSquare = this.Z.multiply(g.Z);
+		D = ZSquare.add(ZSquare);
+
+		return p1xp1(A.subtract(B), A.add(B), D.add(C), D.subtract(C));
+	}
+
+	/**
+	 * Ed25519GroupElement subtraction using the twisted Edwards addition law for extended coordinates.
+	 * <br>
+	 * Negating g means negating the value of the coordinate X2 and T2.
+	 * The formula is in accordance to the above addition.
+	 *
+	 * @param g The group element to subtract.
+	 * @return The result in the P x P coordinate system.
+	 */
+	public Ed25519GroupElement subtract(final Ed25519GroupElement g) {
+		if (this.coordinateSystem != CoordinateSystem.P3) {
+			throw new UnsupportedOperationException();
+		}
+		if (g.coordinateSystem != CoordinateSystem.CACHED) {
+			throw new IllegalArgumentException();
+		}
+
+		final Ed25519FieldElement YPlusX;
+		final Ed25519FieldElement YMinusX;
+		final Ed25519FieldElement ZSquare;
+		final Ed25519FieldElement A;
+		final Ed25519FieldElement B;
+		final Ed25519FieldElement C;
+		final Ed25519FieldElement D;
+		YPlusX = this.Y.add(this.X);
+		YMinusX = this.Y.subtract(this.X);
+		A = YPlusX.multiply(g.Y);
+		B = YMinusX.multiply(g.X);
+		C = g.T.multiply(this.T);
+		ZSquare = this.Z.multiply(g.Z);
+		D = ZSquare.add(ZSquare);
+
+		return p1xp1(A.subtract(B), A.add(B), D.subtract(C), D.add(C));
+	}
+
+	/**
+	 * Negates this group element by subtracting it from the neutral group element.
+	 * (only used in MathUtils so it doesn't have to be fast)
+	 *
+	 * @return The negative of this group element.
+	 */
+	public Ed25519GroupElement negate() {
+		if (this.coordinateSystem != CoordinateSystem.P3) {
+			throw new UnsupportedOperationException();
+		}
+
+		return Ed25519Group.ZERO_P3.subtract(this.toCached()).toP3();
+	}
+
+	@Override
+	public int hashCode() {
+		return this.encode().hashCode();
+	}
+
+	@Override
+	public boolean equals(final Object obj) {
+		if (!(obj instanceof Ed25519GroupElement)) {
+			return false;
+		}
+		Ed25519GroupElement ge = (Ed25519GroupElement)obj;
+		if (!this.coordinateSystem.equals(ge.coordinateSystem)) {
+			try {
+				ge = ge.toCoordinateSystem(this.coordinateSystem);
+			} catch (final Exception e) {
+				return false;
+			}
+		}
+		switch (this.coordinateSystem) {
+			case P2:
+			case P3:
+				if (this.Z.equals(ge.Z)) {
+					return this.X.equals(ge.X) && this.Y.equals(ge.Y);
+				}
+
+				final Ed25519FieldElement x1 = this.X.multiply(ge.Z);
+				final Ed25519FieldElement y1 = this.Y.multiply(ge.Z);
+				final Ed25519FieldElement x2 = ge.X.multiply(this.Z);
+				final Ed25519FieldElement y2 = ge.Y.multiply(this.Z);
+
+				return x1.equals(x2) && y1.equals(y2);
+			case P1xP1:
+				return this.toP2().equals(ge);
+			case PRECOMPUTED:
+				return this.X.equals(ge.X) && this.Y.equals(ge.Y) && this.Z.equals(ge.Z);
+			case CACHED:
+				if (this.Z.equals(ge.Z)) {
+					return this.X.equals(ge.X) && this.Y.equals(ge.Y) && this.T.equals(ge.T);
+				}
+
+				final Ed25519FieldElement x3 = this.X.multiply(ge.Z);
+				final Ed25519FieldElement y3 = this.Y.multiply(ge.Z);
+				final Ed25519FieldElement t3 = this.T.multiply(ge.Z);
+				final Ed25519FieldElement x4 = ge.X.multiply(this.Z);
+				final Ed25519FieldElement y4 = ge.Y.multiply(this.Z);
+				final Ed25519FieldElement t4 = ge.T.multiply(this.Z);
+
+				return x3.equals(x4) && y3.equals(y4) && t3.equals(t4);
+			default:
+				//return false;
+        throw new RuntimeException("Coordinate system problem");
+		}
+	}
+
+	/**
+	 * Convert a to 2^16 bit representation.
+	 *
+	 * @param encoded The encode field element.
+	 * @return 64 bytes, each between -8 and 7
+	 */
+	private static byte[] toRadix16(final Ed25519EncodedFieldElement encoded) {
+		final byte[] a = encoded.getRaw();
+		final byte[] e = new byte[64];
+		int i;
+		for (i = 0; i < 32; i++) {
+			e[2 * i] = (byte)(a[i] & 15);
+			e[2 * i + 1] = (byte)((a[i] >> 4) & 15);
+		}
+		/* each e[i] is between 0 and 15 */
+		/* e[63] is between 0 and 7 */
+		int carry = 0;
+		for (i = 0; i < 63; i++) {
+			e[i] += carry;
+			carry = e[i] + 8;
+			carry >>= 4;
+			e[i] -= carry << 4;
+		}
+		e[63] += carry;
+
+		return e;
+	}
+
+	/**
+	 * Constant-time conditional move.
+	 * Replaces this with u if b == 1.
+	 * Replaces this with this if b == 0.
+	 *
+	 * @param u The group element to return if b == 1.
+	 * @param b in {0, 1}
+	 * @return u if b == 1; this if b == 0; null otherwise.
+	 */
+	private Ed25519GroupElement cmov(final Ed25519GroupElement u, final int b) {
+		Ed25519GroupElement ret = null;
+		for (int i = 0; i < b; i++) {
+			// Only for b == 1
+			ret = u;
+		}
+		for (int i = 0; i < 1 - b; i++) {
+			// Only for b == 0
+			ret = this;
+		}
+		return ret;
+	}
+
+	/**
+	 * Look up 16^i r_i B in the precomputed table.
+	 * No secret array indices, no secret branching.
+	 * Constant time.
+	 * <br>
+	 * Must have previously precomputed.
+	 *
+	 * @param pos = i/2 for i in {0, 2, 4,..., 62}
+	 * @param b = r_i
+	 * @return The Ed25519GroupElement
+	 */
+	private Ed25519GroupElement select(final int pos, final int b) {
+		// Is r_i negative?
+		final int bNegative = ByteUtils.isNegativeConstantTime(b);
+		// |r_i|
+		final int bAbs = b - (((-bNegative) & b) << 1);
+
+		// 16^i |r_i| B
+		final Ed25519GroupElement t = Ed25519Group.ZERO_PRECOMPUTED
+				.cmov(this.precomputedForSingle[pos][0], ByteUtils.isEqualConstantTime(bAbs, 1))
+				.cmov(this.precomputedForSingle[pos][1], ByteUtils.isEqualConstantTime(bAbs, 2))
+				.cmov(this.precomputedForSingle[pos][2], ByteUtils.isEqualConstantTime(bAbs, 3))
+				.cmov(this.precomputedForSingle[pos][3], ByteUtils.isEqualConstantTime(bAbs, 4))
+				.cmov(this.precomputedForSingle[pos][4], ByteUtils.isEqualConstantTime(bAbs, 5))
+				.cmov(this.precomputedForSingle[pos][5], ByteUtils.isEqualConstantTime(bAbs, 6))
+				.cmov(this.precomputedForSingle[pos][6], ByteUtils.isEqualConstantTime(bAbs, 7))
+				.cmov(this.precomputedForSingle[pos][7], ByteUtils.isEqualConstantTime(bAbs, 8));
+		// -16^i |r_i| B
+		//noinspection SuspiciousNameCombination
+		final Ed25519GroupElement tMinus = precomputed(t.Y, t.X, t.Z.negate());
+		// 16^i r_i B
+		return t.cmov(tMinus, bNegative);
+	}
+
+	public static int precomps = 0;
+	public static int scalarMults = 0;
+	public static int scalarBaseMults = 0;
+
+  public Ed25519GroupElement scalarMultiply(final Ed25519EncodedFieldElement a) {
+    return scalarMultiply(a, true);
+  }
+	/**
+	 * h = a * B where a = a[0]+256*a[1]+...+256^31 a[31] and
+	 * B is this point. If its lookup table has not been precomputed, it
+	 * will be at the start of the method (and cached for later calls).
+	 * Constant time.
+	 *
+	 * @param a The encoded field element.
+	 * @return The resulting group element.
+	 */
+	public static String lineRecordingSourceFile = null;
+  public static boolean enableLineRecording = false;
+	private static boolean noNativeLibraryAvailable = false;
+	public static Map<Integer, Integer> lineNumberCallFrequencyMap = new TreeMap<>((a,b)->a.compareTo(b));
+	public Ed25519GroupElement scalarMultiply(final Ed25519EncodedFieldElement a, boolean useNativeImplementation) {
+
+	  if(enableLineRecording) {
+      Optional<StackTraceElement> optionalCaller = Arrays.stream(new Exception().getStackTrace()).filter(e -> e.getFileName().equals(lineRecordingSourceFile)).findFirst();
+      if (optionalCaller.isPresent()) {
+        StackTraceElement caller = optionalCaller.get();
+        lineNumberCallFrequencyMap.putIfAbsent(caller.getLineNumber(), 0);
+        lineNumberCallFrequencyMap.computeIfPresent(caller.getLineNumber(), (key, oldValue) -> oldValue + 1);
+      }
+    }
+
+    scalarMults++;
+
+    if(this==Ed25519Group.BASE_POINT) scalarBaseMults++;
+
+    try {
+      if(!noNativeLibraryAvailable && this==Ed25519Group.BASE_POINT) return new Ed25519EncodedGroupElement(CryptoOpsUtil.scalarMultBase(a.getRaw())).decode();
+    }
+    catch (java.lang.UnsatisfiedLinkError e) {
+      System.err.println("WARNING: No C library available for native Ed25519");
+      noNativeLibraryAvailable = true;
+    }
+
+
+    if(precomputedForSingle==null) {
+
+      // there is only a performance advantage to using native code if the element has not been precomputed
+      if(useNativeImplementation && !noNativeLibraryAvailable) {
+        try {
+          return new Ed25519EncodedGroupElement(CryptoOpsUtil.scalarMult(this.encode().getRaw(), a.getRaw())).decode();
+        }
+        catch (java.lang.UnsatisfiedLinkError e) {
+          System.err.println("WARNING: No C library available for native Ed25519");
+          noNativeLibraryAvailable = true;
+        }
+      }
+
+      precomps++;
+      precomputeForScalarMultiplication();
+    }
+
+		Ed25519GroupElement g;
+		int i;
+		final byte[] e = toRadix16(a);
+		Ed25519GroupElement h = Ed25519Group.ZERO_P3;
+		for (i = 1; i < 64; i += 2) {
+			g = this.select(i / 2, e[i]);
+			h = h.precomputedAdd(g).toP3();
+		}
+
+		h = h.dbl().toP2().dbl().toP2().dbl().toP2().dbl().toP3();
+
+		for (i = 0; i < 64; i += 2) {
+			g = this.select(i / 2, e[i]);
+			h = h.precomputedAdd(g).toP3();
+		}
+
+		return h;
+	}
+
+  public Ed25519GroupElement scalarMultiply(final Ed25519FieldElement a) {
+    return scalarMultiply(a.encode());
+  }
+  public Ed25519GroupElement scalarMultiply(final byte[] a) {
+    return scalarMultiply(new Ed25519EncodedFieldElement(a));
+  }
+  public Ed25519GroupElement scalarMultiply(final Scalar a) {
+	  return scalarMultiply(a, true);
+  }
+  public Ed25519GroupElement scalarMultiply(final Scalar a, boolean useNativeImplementation) {
+    return scalarMultiply(new Ed25519EncodedFieldElement(a.bytes), useNativeImplementation);
+  }
+
+	/**
+	 * Calculates a sliding-windows base 2 representation for a given encoded field element a.
+	 * To learn more about it see [6] page 8.
+	 * <br>
+	 * Output: r which satisfies
+	 * a = r0 * 2^0 + r1 * 2^1 + ... + r255 * 2^255 with ri in {-15, -13, -11, -9, -7, -5, -3, -1, 0, 1, 3, 5, 7, 9, 11, 13, 15}
+	 * <br>
+	 * Method is package private only so that tests run.
+	 *
+	 * @param encoded The encoded field element.
+	 * @return The byte array r in the above described form.
+	 */
+	private static byte[] slide(final Ed25519EncodedFieldElement encoded) {
+		final byte[] a = encoded.getRaw();
+		final byte[] r = new byte[256];
+
+		// Put each bit of 'a' into a separate byte, 0 or 1
+		for (int i = 0; i < 256; ++i) {
+			r[i] = (byte)(1 & (a[i >> 3] >> (i & 7)));
+		}
+
+		// Note: r[i] will always be odd.
+		for (int i = 0; i < 256; ++i) {
+			if (r[i] != 0) {
+				for (int b = 1; b <= 6 && i + b < 256; ++b) {
+					// Accumulate bits if possible
+					if (r[i + b] != 0) {
+						if (r[i] + (r[i + b] << b) <= 15) {
+							r[i] += r[i + b] << b;
+							r[i + b] = 0;
+						} else if (r[i] - (r[i + b] << b) >= -15) {
+							r[i] -= r[i + b] << b;
+							for (int k = i + b; k < 256; ++k) {
+								if (r[k] == 0) {
+									r[k] = 1;
+									break;
+								}
+								r[k] = 0;
+							}
+						} else {
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return r;
+	}
+
+	/**
+	 * r = b * B - a * A  where
+	 * a and b are encoded field elements and
+	 * B is this point.
+	 * A must have been previously precomputed for double scalar multiplication.
+	 *
+	 * @param A in P3 coordinate system.
+	 * @param a = The first encoded field element.
+	 * @param b = The second encoded field element.
+	 * @return The resulting group element.
+	 */
+	public Ed25519GroupElement doubleScalarMultiplyVariableTime(
+			final Ed25519GroupElement A,
+			final Ed25519EncodedFieldElement a,
+			final Ed25519EncodedFieldElement b) {
+		final byte[] aSlide = slide(a);
+		final byte[] bSlide = slide(b);
+		Ed25519GroupElement r = Ed25519Group.ZERO_P2;
+
+		int i;
+		for (i = 255; i >= 0; --i) {
+			if (aSlide[i] != 0 || bSlide[i] != 0) {
+				break;
+			}
+		}
+
+		for (; i >= 0; --i) {
+			Ed25519GroupElement t = r.dbl();
+
+			if (aSlide[i] > 0) {
+				t = t.toP3().precomputedSubtract(A.precomputedForDouble[aSlide[i] / 2]);
+			} else if (aSlide[i] < 0) {
+				t = t.toP3().precomputedAdd(A.precomputedForDouble[(-aSlide[i]) / 2]);
+			}
+
+			if (bSlide[i] > 0) {
+				t = t.toP3().precomputedAdd(this.precomputedForDouble[bSlide[i] / 2]);
+			} else if (bSlide[i] < 0) {
+				t = t.toP3().precomputedSubtract(this.precomputedForDouble[(-bSlide[i]) / 2]);
+			}
+
+			r = t.toP2();
+		}
+
+		return r;
+	}
+
+	/**
+	 * Verify that the group element satisfies the curve equation.
+	 *
+	 * @return true if the group element satisfies the curve equation, false otherwise.
+	 */
+	public boolean satisfiesCurveEquation() {
+		switch (this.coordinateSystem) {
+			case P2:
+			case P3:
+				final Ed25519FieldElement inverse = this.Z.invert();
+				final Ed25519FieldElement x = this.X.multiply(inverse);
+				final Ed25519FieldElement y = this.Y.multiply(inverse);
+				final Ed25519FieldElement xSquare = x.square();
+				final Ed25519FieldElement ySquare = y.square();
+				final Ed25519FieldElement dXSquareYSquare = Ed25519Field.D.multiply(xSquare).multiply(ySquare);
+				return Ed25519Field.ONE.add(dXSquareYSquare).add(xSquare).equals(ySquare);
+
+			default:
+				return this.toP2().satisfiesCurveEquation();
+		}
+	}
+
+	@Override
+	public String toString() {
+		return String.format(
+				"X=%s\nY=%s\nZ=%s\nT=%s\n",
+				this.X.toString(),
+				this.Y.toString(),
+				this.Z.toString(),
+				this.T.toString());
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/AbstractTwoLevelMap.java b/source-code/RuffCT-java/src/org/nem/core/utils/AbstractTwoLevelMap.java
new file mode 100755
index 0000000..30fdfea
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/AbstractTwoLevelMap.java
@@ -0,0 +1,74 @@
+package org.nem.core.utils;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * A two-level map of items.
+ * <br>
+ * Items are automatically created on access.
+ * Item associations are order-dependent.
+ */
+public abstract class AbstractTwoLevelMap<TKey, TValue> {
+	private final Map<TKey, Map<TKey, TValue>> impl = new ConcurrentHashMap<>();
+
+	/**
+	 * Gets the TValue associated with key1 and key2.
+	 *
+	 * @param key1 The first key.
+	 * @param key2 The second key.
+	 * @return The value associated with key and key2.
+	 */
+	public TValue getItem(final TKey key1, final TKey key2) {
+		final Map<TKey, TValue> keyOneValues = this.getItems(key1);
+
+		TValue value = keyOneValues.get(key2);
+		if (null == value) {
+			value = this.createValue();
+			keyOneValues.put(key2, value);
+		}
+
+		return value;
+	}
+
+	/**
+	 * Gets the (TKey, TValue) map associated with key.
+	 *
+	 * @param key The first key.
+	 * @return The map associated with key.
+	 */
+	public Map<TKey, TValue> getItems(final TKey key) {
+		Map<TKey, TValue> keyValues = this.impl.get(key);
+		if (null == keyValues) {
+			keyValues = new ConcurrentHashMap<>();
+			this.impl.put(key, keyValues);
+		}
+
+		return keyValues;
+	}
+
+	/**
+	 * Removes a key from the map.
+	 *
+	 * @param key The key to remove.
+	 */
+	public void remove(final TKey key) {
+		this.impl.remove(key);
+	}
+
+	/**
+	 * Gets the key set of this map.
+	 *
+	 * @return The key set.
+	 */
+	public Set<TKey> keySet() {
+		return this.impl.keySet();
+	}
+
+	/**
+	 * Creates a new blank value.
+	 *
+	 * @return A new value.
+	 */
+	protected abstract TValue createValue();
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/ArrayUtils.java b/source-code/RuffCT-java/src/org/nem/core/utils/ArrayUtils.java
new file mode 100755
index 0000000..5e9170c
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/ArrayUtils.java
@@ -0,0 +1,156 @@
+package org.nem.core.utils;
+
+import java.math.BigInteger;
+
+/**
+ * Static class that contains a handful of array helper functions.
+ */
+public class ArrayUtils {
+
+	/**
+	 * Creates duplicate of given array
+	 *
+	 * @param src The array to duplicate.
+	 * @return A copy of the array.
+	 */
+	public static byte[] duplicate(final byte[] src) {
+		final byte[] result = new byte[src.length];
+		System.arraycopy(src, 0, result, 0, src.length);
+		return result;
+	}
+
+	/**
+	 * Concatenates byte arrays and returns the result.
+	 *
+	 * @param arrays The arrays.
+	 * @return A single array containing all elements in all arrays.
+	 */
+	public static byte[] concat(final byte[]... arrays) {
+		int totalSize = 0;
+		for (final byte[] array : arrays) {
+			totalSize += array.length;
+		}
+
+		int startIndex = 0;
+		final byte[] result = new byte[totalSize];
+		for (final byte[] array : arrays) {
+			System.arraycopy(array, 0, result, startIndex, array.length);
+			startIndex += array.length;
+		}
+
+		return result;
+	}
+
+	/**
+	 * Splits a single array into two arrays.
+	 *
+	 * @param bytes The input array.
+	 * @param splitIndex The index at which the array should be split.
+	 * @return Two arrays split at the splitIndex.
+	 * The first array will contain the first splitIndex elements.
+	 * The second array will contain all trailing elements.
+	 */
+	public static byte[][] split(final byte[] bytes, final int splitIndex) {
+		if (splitIndex < 0 || bytes.length < splitIndex) {
+			throw new IllegalArgumentException("split index is out of range");
+		}
+
+		final byte[] lhs = new byte[splitIndex];
+		final byte[] rhs = new byte[bytes.length - splitIndex];
+
+		System.arraycopy(bytes, 0, lhs, 0, lhs.length);
+		System.arraycopy(bytes, splitIndex, rhs, 0, rhs.length);
+		return new byte[][] { lhs, rhs };
+	}
+
+	/**
+	 * Converts a BigInteger to a little endian byte array.
+	 *
+	 * @param value The value to convert.
+	 * @param numBytes The number of bytes in the destination array.
+	 * @return The resulting little endian byte array.
+	 */
+	public static byte[] toByteArray(final BigInteger value, final int numBytes) {
+		final byte[] outputBytes = new byte[numBytes];
+		final byte[] bigIntegerBytes = value.toByteArray();
+
+		int copyStartIndex = (0x00 == bigIntegerBytes[0]) ? 1 : 0;
+		int numBytesToCopy = bigIntegerBytes.length - copyStartIndex;
+		if (numBytesToCopy > numBytes) {
+			copyStartIndex += numBytesToCopy - numBytes;
+			numBytesToCopy = numBytes;
+		}
+
+		for (int i = 0; i < numBytesToCopy; ++i) {
+			outputBytes[i] = bigIntegerBytes[copyStartIndex + numBytesToCopy - i - 1];
+		}
+
+		return outputBytes;
+	}
+
+	/**
+	 * Converts a little endian byte array to a BigInteger.
+	 *
+	 * @param bytes The bytes to convert.
+	 * @return The resulting BigInteger.
+	 */
+	public static BigInteger toBigInteger(final byte[] bytes) {
+		final byte[] bigEndianBytes = new byte[bytes.length + 1];
+		for (int i = 0; i < bytes.length; ++i) {
+			bigEndianBytes[i + 1] = bytes[bytes.length - i - 1];
+		}
+
+		return new BigInteger(bigEndianBytes);
+	}
+
+	/**
+	 * Constant-time byte[] comparison. The constant time behavior eliminates side channel attacks.
+	 *
+	 * @param b An array.
+	 * @param c An array.
+	 * @return 1 if b and c are equal, 0 otherwise.
+	 */
+	public static int isEqualConstantTime(final byte[] b, final byte[] c) {
+		int result = 0;
+		result |= b.length - c.length;
+		for (int i = 0; i < b.length; i++) {
+			result |= b[i] ^ c[i];
+		}
+
+		return ByteUtils.isEqualConstantTime(result, 0);
+	}
+
+	/**
+	 * NON constant-time lexicographical byte[] comparison.
+	 *
+	 * @param b first of arrays to compare.
+	 * @param c second of arrays to compare.
+	 * @return 1, -1, or 0 depending on comparison result.
+	 */
+	public static int compare(final byte[] b, final byte[] c) {
+		int result = b.length - c.length;
+		if (0 != result) {
+			return result;
+		}
+
+		for (int i = 0; i < b.length; i++) {
+			result = b[i] - c[i];
+			if (0 != result) {
+				return result;
+			}
+		}
+
+		return 0;
+	}
+
+	/**
+	 * Gets the i'th bit of a byte array.
+	 *
+	 * @param h The byte array.
+	 * @param i The bit index.
+	 * @return The value of the i'th bit in h
+	 */
+	public static int getBit(final byte[] h, final int i) {
+		return (h[i >> 3] >> (i & 7)) & 1;
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/Base32Encoder.java b/source-code/RuffCT-java/src/org/nem/core/utils/Base32Encoder.java
new file mode 100755
index 0000000..74b33d6
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/Base32Encoder.java
@@ -0,0 +1,37 @@
+package org.nem.core.utils;
+
+import org.apache.commons.codec.binary.Base32;
+
+/**
+ * Static class that contains utility functions for converting Base32 strings to and from bytes.
+ */
+public class Base32Encoder {
+
+	/**
+	 * Converts a string to a byte array.
+	 *
+	 * @param base32String The input Base32 string.
+	 * @return The output byte array.
+	 */
+	public static byte[] getBytes(final String base32String) {
+		final Base32 codec = new Base32();
+		final byte[] encodedBytes = StringEncoder.getBytes(base32String);
+		if (!codec.isInAlphabet(encodedBytes, true)) {
+			throw new IllegalArgumentException("malformed base32 string passed to getBytes");
+		}
+
+		return codec.decode(encodedBytes);
+	}
+
+	/**
+	 * Converts a byte array to a Base32 string.
+	 *
+	 * @param bytes The input byte array.
+	 * @return The output Base32 string.
+	 */
+	public static String getString(final byte[] bytes) {
+		final Base32 codec = new Base32();
+		final byte[] decodedBytes = codec.encode(bytes);
+		return StringEncoder.getString(decodedBytes);
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/Base64Encoder.java b/source-code/RuffCT-java/src/org/nem/core/utils/Base64Encoder.java
new file mode 100755
index 0000000..e8aeaf1
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/Base64Encoder.java
@@ -0,0 +1,37 @@
+package org.nem.core.utils;
+
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * Static class that contains utility functions for converting Base64 strings to and from bytes.
+ */
+public class Base64Encoder {
+
+	/**
+	 * Converts a string to a byte array.
+	 *
+	 * @param base64String The input Base64 string.
+	 * @return The output byte array.
+	 */
+	public static byte[] getBytes(final String base64String) {
+		final Base64 codec = new Base64();
+		final byte[] encodedBytes = StringEncoder.getBytes(base64String);
+		if (!codec.isInAlphabet(encodedBytes, true)) {
+			throw new IllegalArgumentException("malformed base64 string passed to getBytes");
+		}
+
+		return codec.decode(encodedBytes);
+	}
+
+	/**
+	 * Converts a byte array to a Base64 string.
+	 *
+	 * @param bytes The input byte array.
+	 * @return The output Base64 string.
+	 */
+	public static String getString(final byte[] bytes) {
+		final Base64 codec = new Base64();
+		final byte[] decodedBytes = codec.encode(bytes);
+		return StringEncoder.getString(decodedBytes);
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/ByteUtils.java b/source-code/RuffCT-java/src/org/nem/core/utils/ByteUtils.java
new file mode 100755
index 0000000..b5087c7
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/ByteUtils.java
@@ -0,0 +1,100 @@
+package org.nem.core.utils;
+
+import java.nio.ByteBuffer;
+
+public class ByteUtils {
+
+	/**
+	 * Converts an array of 8 bytes into a long.
+	 *
+	 * @param bytes The bytes.
+	 * @return The long.
+	 */
+	public static long bytesToLong(final byte[] bytes) {
+		final ByteBuffer buffer = ByteBuffer.allocate(8);
+		buffer.put(bytes, 0, 8);
+		buffer.flip();
+		return buffer.getLong();
+	}
+
+	/**
+	 * Converts a long value into an array of 8 bytes.
+	 *
+	 * @param x The long.
+	 * @return The bytes.
+	 */
+	public static byte[] longToBytes(final long x) {
+		final ByteBuffer buffer = ByteBuffer.allocate(8);
+		buffer.putLong(x);
+		return buffer.array();
+	}
+
+	/**
+	 * Converts an array of 4 bytes into a int.
+	 *
+	 * @param bytes The bytes.
+	 * @return The int.
+	 */
+	public static int bytesToInt(final byte[] bytes) {
+		final ByteBuffer buffer = ByteBuffer.allocate(4);
+		buffer.put(bytes, 0, 4);
+		buffer.flip();
+		return buffer.getInt();
+	}
+
+	/**
+	 * Converts an int value into an array of 4 bytes.
+	 *
+	 * @param x The int.
+	 * @return The bytes.
+	 */
+	public static byte[] intToBytes(final int x) {
+		final ByteBuffer buffer = ByteBuffer.allocate(4);
+		buffer.putInt(x);
+		return buffer.array();
+	}
+
+	/**
+	 * Constant-time byte comparison. The constant time behavior eliminates side channel attacks.
+	 *
+	 * @param b One byte.
+	 * @param c Another byte.
+	 * @return 1 if b and c are equal, 0 otherwise.
+	 */
+	public static int isEqualConstantTime(final int b, final int c) {
+		int result = 0;
+		final int xor = b ^ c;
+		for (int i = 0; i < 8; i++) {
+			result |= xor >> i;
+		}
+
+		return (result ^ 0x01) & 0x01;
+	}
+
+	/**
+	 * Constant-time check if byte is negative. The constant time behavior eliminates side channel attacks.
+	 *
+	 * @param b The byte to check.
+	 * @return 1 if the byte is negative, 0 otherwise.
+	 */
+	public static int isNegativeConstantTime(final int b) {
+		return (b >> 8) & 1;
+	}
+
+	/**
+	 * Creates a human readable representation of an array of bytes.
+	 *
+	 * @param bytes The bytes.
+	 * @return An string representation of the bytes.
+	 */
+	public static String toString(final byte[] bytes) {
+		final StringBuilder builder = new StringBuilder();
+		builder.append("{ ");
+		for (final byte b : bytes) {
+			builder.append(String.format("%02X ", (byte)(0xFF & b)));
+		}
+
+		builder.append("}");
+		return builder.toString();
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/CircularStack.java b/source-code/RuffCT-java/src/org/nem/core/utils/CircularStack.java
new file mode 100755
index 0000000..19ff1b9
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/CircularStack.java
@@ -0,0 +1,88 @@
+package org.nem.core.utils;
+
+import java.util.*;
+
+/**
+ * Circular stack is a last in first out buffer with fixed size that replace its oldest element if full.
+ * The removal order is inverse of insertion order. The iteration order is the same as insertion order.
+ * <strong>Note that implementation is not synchronized.</strong>
+ *
+ * @param <E> Type of elements on the stack.
+ */
+public class CircularStack<E> implements Iterable<E> {
+	private final List<E> elements;
+	private final int limit;
+
+	/**
+	 * Creates circular stack with at most limit elements.
+	 *
+	 * @param limit Maximum number of elements on the stack.
+	 */
+	public CircularStack(final int limit) {
+		this.elements = new ArrayList<>(limit);
+		this.limit = limit;
+	}
+
+	/**
+	 * Creates shallow copy in destination.
+	 *
+	 * @param destination CircularStack to which elements should be copied.
+	 */
+	public void shallowCopyTo(final CircularStack<E> destination) {
+		destination.elements.clear();
+		destination.pushAll(this);
+	}
+
+	private void pushAll(final CircularStack<E> rhs) {
+		int i = 0;
+		for (final E element : rhs) {
+			if (i >= rhs.size() - this.limit) {
+				this.push(element);
+			}
+
+			++i;
+		}
+	}
+
+	/**
+	 * Adds element to the stack.
+	 *
+	 * @param element Element to be added.
+	 */
+	public void push(final E element) {
+		this.elements.add(element);
+		if (this.elements.size() > this.limit) {
+			this.elements.remove(0);
+		}
+	}
+
+	/**
+	 * Gets most recently added element.
+	 *
+	 * @return Most recently added element.
+	 */
+	public E peek() {
+		return this.elements.get(this.elements.size() - 1);
+	}
+
+	/**
+	 * Removes most recently added element.
+	 */
+	public void pop() {
+		this.elements.remove(this.elements.size() - 1);
+	}
+
+	/**
+	 * Returns size of a stack.
+	 *
+	 * @return Size of a stack (can be smaller than limit).
+	 */
+	public int size() {
+		return this.elements.size();
+	}
+
+	@Override
+	public Iterator<E> iterator() {
+		return this.elements.iterator();
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/ExceptionUtils.java b/source-code/RuffCT-java/src/org/nem/core/utils/ExceptionUtils.java
new file mode 100755
index 0000000..d1dac1a
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/ExceptionUtils.java
@@ -0,0 +1,102 @@
+package org.nem.core.utils;
+
+import java.util.concurrent.*;
+import java.util.function.Function;
+
+/**
+ * Static class that contains helper functions for dealing with exceptions.
+ */
+public class ExceptionUtils {
+
+	private ExceptionUtils() {
+	}
+
+	/**
+	 * Interface that mimics Runnable but can additionally throw checked exceptions.
+	 */
+	public interface CheckedRunnable {
+
+		/**
+		 * Executes the runnable.
+		 *
+		 * @throws Exception Any exception.
+		 */
+		void call() throws Exception;
+	}
+
+	/**
+	 * Propagates checked exceptions as a runtime exception.
+	 *
+	 * @param runnable The checked runnable.
+	 */
+	public static void propagateVoid(final CheckedRunnable runnable) {
+		propagateVoid(runnable, RuntimeException::new);
+	}
+
+	/**
+	 * Propagates checked exceptions as a specific runtime exception.
+	 *
+	 * @param runnable The checked runnable.
+	 * @param wrap A function that wraps an exception in a runtime exception.
+	 * @param <E> The specific exception type.
+	 */
+	public static <E extends RuntimeException> void propagateVoid(
+			final CheckedRunnable runnable,
+			final Function<Exception, E> wrap) {
+		propagate(new CheckedRuntimeToCallableAdapter(runnable), wrap);
+	}
+
+	/**
+	 * Propagates checked exceptions as a runtime exception.
+	 *
+	 * @param callable The function.
+	 * @param <T> The function return type.
+	 * @return The function result.
+	 */
+	public static <T> T propagate(final Callable<T> callable) {
+		return propagate(callable, RuntimeException::new);
+	}
+
+	/**
+	 * Propagates checked exceptions as a specific runtime exception.
+	 *
+	 * @param callable The function.
+	 * @param wrap A function that wraps an exception in a runtime exception.
+	 * @param <T> The function return type.
+	 * @param <E> The specific exception type.
+	 * @return The function result.
+	 */
+	public static <T, E extends RuntimeException> T propagate(
+			final Callable<T> callable,
+			final Function<Exception, E> wrap) {
+		try {
+			return callable.call();
+		} catch (final ExecutionException e) {
+			if (RuntimeException.class.isAssignableFrom(e.getCause().getClass())) {
+				throw (RuntimeException)e.getCause();
+			}
+			throw wrap.apply(e);
+		} catch (final RuntimeException e) {
+			throw e;
+		} catch (final InterruptedException e) {
+			Thread.currentThread().interrupt();
+			throw new IllegalStateException(e);
+		} catch (final Exception e) {
+			throw wrap.apply(e);
+		}
+	}
+
+	private static class CheckedRuntimeToCallableAdapter implements Callable<Void> {
+		private final CheckedRunnable runnable;
+
+		public CheckedRuntimeToCallableAdapter(final CheckedRunnable runnable) {
+			this.runnable = runnable;
+		}
+
+		@Override
+		public Void call() throws Exception {
+			this.runnable.call();
+			return null;
+		}
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/FormatUtils.java b/source-code/RuffCT-java/src/org/nem/core/utils/FormatUtils.java
new file mode 100755
index 0000000..5fc4383
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/FormatUtils.java
@@ -0,0 +1,63 @@
+package org.nem.core.utils;
+
+import java.text.*;
+import java.util.Arrays;
+
+/**
+ * Static class containing helper functions for formatting.
+ */
+public class FormatUtils {
+
+	/**
+	 * Gets a default decimal format that should be used for formatting decimal values.
+	 *
+	 * @return A default decimal format.
+	 */
+	public static DecimalFormat getDefaultDecimalFormat() {
+		final DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
+		decimalFormatSymbols.setDecimalSeparator('.');
+		final DecimalFormat format = new DecimalFormat("#0.000", decimalFormatSymbols);
+		format.setGroupingUsed(false);
+		return format;
+	}
+
+	/**
+	 * Gets a decimal format that with the desired number of decimal places.
+	 *
+	 * @param decimalPlaces The number of decimal places.
+	 * @return The desired decimal format.
+	 */
+	public static DecimalFormat getDecimalFormat(final int decimalPlaces) {
+		if (decimalPlaces < 0) {
+			throw new IllegalArgumentException("decimalPlaces must be non-negative");
+		}
+
+		final DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
+		decimalFormatSymbols.setDecimalSeparator('.');
+		final StringBuilder builder = new StringBuilder();
+		builder.append("#0");
+
+		if (decimalPlaces > 0) {
+			builder.append('.');
+			final char[] zeros = new char[decimalPlaces];
+			Arrays.fill(zeros, '0');
+			builder.append(zeros);
+		}
+
+		final DecimalFormat format = new DecimalFormat(builder.toString(), decimalFormatSymbols);
+		format.setGroupingUsed(false);
+		return format;
+	}
+
+	/**
+	 * Formats a double value with a given number of decimal places.
+	 *
+	 * @param value The value to format.
+	 * @param decimalPlaces The desired number of decimal places.
+	 * @return The formatted string.
+	 */
+	public static String format(final double value, final int decimalPlaces) {
+		final DecimalFormat formatter = getDecimalFormat(decimalPlaces);
+		return formatter.format(value);
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/HexEncoder.java b/source-code/RuffCT-java/src/org/nem/core/utils/HexEncoder.java
new file mode 100755
index 0000000..a8d380e
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/HexEncoder.java
@@ -0,0 +1,57 @@
+package org.nem.core.utils;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.binary.Hex;
+
+/**
+ * Static class that contains utility functions for converting hex strings to and from bytes.
+ */
+public class HexEncoder {
+
+	/**
+	 * Converts a hex string to a byte array.
+	 *
+	 * @param hexString The input hex string.
+	 * @return The output byte array.
+	 */
+	public static byte[] getBytes(final String hexString) {
+		try {
+			return getBytesInternal(hexString);
+		} catch (final DecoderException e) {
+			throw new IllegalArgumentException(e);
+		}
+	}
+
+	/**
+	 * Tries to convert a hex string to a byte array.
+	 *
+	 * @param hexString The input hex string.
+	 * @return The output byte array or null if the input string is malformed.
+	 */
+	public static byte[] tryGetBytes(final String hexString) {
+		try {
+			return getBytesInternal(hexString);
+		} catch (final DecoderException e) {
+			return null;
+		}
+	}
+
+	private static byte[] getBytesInternal(final String hexString) throws DecoderException {
+		final Hex codec = new Hex();
+		final String paddedHexString = 0 == hexString.length() % 2 ? hexString : "0" + hexString;
+		final byte[] encodedBytes = StringEncoder.getBytes(paddedHexString);
+		return codec.decode(encodedBytes);
+	}
+
+	/**
+	 * Converts a byte array to a hex string.
+	 *
+	 * @param bytes The input byte array.
+	 * @return The output hex string.
+	 */
+	public static String getString(final byte[] bytes) {
+		final Hex codec = new Hex();
+		final byte[] decodedBytes = codec.encode(bytes);
+		return StringEncoder.getString(decodedBytes);
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/HttpStatus.java b/source-code/RuffCT-java/src/org/nem/core/utils/HttpStatus.java
new file mode 100755
index 0000000..dc48d5c
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/HttpStatus.java
@@ -0,0 +1,494 @@
+package org.nem.core.utils;
+
+/* We don't want to get spring dependancy just to get this... */
+
+/*
+ * Copyright 2002-2014 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Java 5 enumeration of HTTP status codes.
+ *
+ * @author Arjen Poutsma
+ * @author Sebastien Deleuze
+ * @see <a href="http://www.iana.org/assignments/http-status-codes">HTTP Status Code Registry</a>
+ * @see <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">List of HTTP status codes - Wikipedia</a>
+ */
+public enum HttpStatus {
+
+	// 1xx Informational
+
+	/**
+	 * {@code 100 Continue}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.2.1">HTTP/1.1: Semantics and Content, section 6.2.1</a>
+	 */
+	CONTINUE(100, "Continue"),
+	/**
+	 * {@code 101 Switching Protocols}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.2.2">HTTP/1.1: Semantics and Content, section 6.2.2</a>
+	 */
+	SWITCHING_PROTOCOLS(101, "Switching Protocols"),
+	/**
+	 * {@code 102 Processing}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2518#section-10.1">WebDAV</a>
+	 */
+	PROCESSING(102, "Processing"),
+	/**
+	 * {@code 103 Checkpoint}.
+	 *
+	 * @see <a href="http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal">A proposal for supporting
+	 * resumable POST/PUT HTTP requests in HTTP/1.0</a>
+	 */
+	CHECKPOINT(103, "Checkpoint"),
+
+	// 2xx Success
+
+	/**
+	 * {@code 200 OK}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.1">HTTP/1.1: Semantics and Content, section 6.3.1</a>
+	 */
+	OK(200, "OK"),
+	/**
+	 * {@code 201 Created}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.2">HTTP/1.1: Semantics and Content, section 6.3.2</a>
+	 */
+	CREATED(201, "Created"),
+	/**
+	 * {@code 202 Accepted}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.3">HTTP/1.1: Semantics and Content, section 6.3.3</a>
+	 */
+	ACCEPTED(202, "Accepted"),
+	/**
+	 * {@code 203 Non-Authoritative Information}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.4">HTTP/1.1: Semantics and Content, section 6.3.4</a>
+	 */
+	NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information"),
+	/**
+	 * {@code 204 No Content}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.5">HTTP/1.1: Semantics and Content, section 6.3.5</a>
+	 */
+	NO_CONTENT(204, "No Content"),
+	/**
+	 * {@code 205 Reset Content}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.3.6">HTTP/1.1: Semantics and Content, section 6.3.6</a>
+	 */
+	RESET_CONTENT(205, "Reset Content"),
+	/**
+	 * {@code 206 Partial Content}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7233#section-4.1">HTTP/1.1: Range Requests, section 4.1</a>
+	 */
+	PARTIAL_CONTENT(206, "Partial Content"),
+	/**
+	 * {@code 207 Multi-Status}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc4918#section-13">WebDAV</a>
+	 */
+	MULTI_STATUS(207, "Multi-Status"),
+	/**
+	 * {@code 208 Already Reported}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc5842#section-7.1">WebDAV Binding Extensions</a>
+	 */
+	ALREADY_REPORTED(208, "Already Reported"),
+	/**
+	 * {@code 226 IM Used}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc3229#section-10.4.1">Delta encoding in HTTP</a>
+	 */
+	IM_USED(226, "IM Used"),
+
+	// 3xx Redirection
+
+	/**
+	 * {@code 300 Multiple Choices}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.1">HTTP/1.1: Semantics and Content, section 6.4.1</a>
+	 */
+	MULTIPLE_CHOICES(300, "Multiple Choices"),
+	/**
+	 * {@code 301 Moved Permanently}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.2">HTTP/1.1: Semantics and Content, section 6.4.2</a>
+	 */
+	MOVED_PERMANENTLY(301, "Moved Permanently"),
+	/**
+	 * {@code 302 Found}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.3">HTTP/1.1: Semantics and Content, section 6.4.3</a>
+	 */
+	FOUND(302, "Found"),
+	/**
+	 * {@code 302 Moved Temporarily}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc1945#section-9.3">HTTP/1.0, section 9.3</a>
+	 * @deprecated In favor of {@link #FOUND} which will be returned from {@code HttpStatus.valueOf(302)}
+	 */
+	@Deprecated
+	MOVED_TEMPORARILY(302, "Moved Temporarily"),
+	/**
+	 * {@code 303 See Other}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.4">HTTP/1.1: Semantics and Content, section 6.4.4</a>
+	 */
+	SEE_OTHER(303, "See Other"),
+	/**
+	 * {@code 304 Not Modified}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7232#section-4.1">HTTP/1.1: Conditional Requests, section 4.1</a>
+	 */
+	NOT_MODIFIED(304, "Not Modified"),
+	/**
+	 * {@code 305 Use Proxy}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.5">HTTP/1.1: Semantics and Content, section 6.4.5</a>
+	 * @deprecated due to security concerns regarding in-band configuration of a proxy
+	 */
+	@Deprecated
+	USE_PROXY(305, "Use Proxy"),
+	/**
+	 * {@code 307 Temporary Redirect}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.4.7">HTTP/1.1: Semantics and Content, section 6.4.7</a>
+	 */
+	TEMPORARY_REDIRECT(307, "Temporary Redirect"),
+	/**
+	 * {@code 308 Permanent Redirect}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7238">RFC 7238</a>
+	 */
+	PERMANENT_REDIRECT(308, "Permanent Redirect"),
+
+	// --- 4xx Client Error ---
+
+	/**
+	 * {@code 400 Bad Request}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.1">HTTP/1.1: Semantics and Content, section 6.5.1</a>
+	 */
+	BAD_REQUEST(400, "Bad Request"),
+	/**
+	 * {@code 401 Unauthorized}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7235#section-3.1">HTTP/1.1: Authentication, section 3.1</a>
+	 */
+	UNAUTHORIZED(401, "Unauthorized"),
+	/**
+	 * {@code 402 Payment Required}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.2">HTTP/1.1: Semantics and Content, section 6.5.2</a>
+	 */
+	PAYMENT_REQUIRED(402, "Payment Required"),
+	/**
+	 * {@code 403 Forbidden}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.3">HTTP/1.1: Semantics and Content, section 6.5.3</a>
+	 */
+	FORBIDDEN(403, "Forbidden"),
+	/**
+	 * {@code 404 Not Found}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.4">HTTP/1.1: Semantics and Content, section 6.5.4</a>
+	 */
+	NOT_FOUND(404, "Not Found"),
+	/**
+	 * {@code 405 Method Not Allowed}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.5">HTTP/1.1: Semantics and Content, section 6.5.5</a>
+	 */
+	METHOD_NOT_ALLOWED(405, "Method Not Allowed"),
+	/**
+	 * {@code 406 Not Acceptable}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.6">HTTP/1.1: Semantics and Content, section 6.5.6</a>
+	 */
+	NOT_ACCEPTABLE(406, "Not Acceptable"),
+	/**
+	 * {@code 407 Proxy Authentication Required}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7235#section-3.2">HTTP/1.1: Authentication, section 3.2</a>
+	 */
+	PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required"),
+	/**
+	 * {@code 408 Request Timeout}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.7">HTTP/1.1: Semantics and Content, section 6.5.7</a>
+	 */
+	REQUEST_TIMEOUT(408, "Request Timeout"),
+	/**
+	 * {@code 409 Conflict}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.8">HTTP/1.1: Semantics and Content, section 6.5.8</a>
+	 */
+	CONFLICT(409, "Conflict"),
+	/**
+	 * {@code 410 Gone}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.9">HTTP/1.1: Semantics and Content, section 6.5.9</a>
+	 */
+	GONE(410, "Gone"),
+	/**
+	 * {@code 411 Length Required}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.10">HTTP/1.1: Semantics and Content, section 6.5.10</a>
+	 */
+	LENGTH_REQUIRED(411, "Length Required"),
+	/**
+	 * {@code 412 Precondition failed}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7232#section-4.2">HTTP/1.1: Conditional Requests, section 4.2</a>
+	 */
+	PRECONDITION_FAILED(412, "Precondition Failed"),
+	/**
+	 * {@code 413 Payload Too Large}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.11">HTTP/1.1: Semantics and Content, section 6.5.11</a>
+	 * @since 4.1
+	 */
+	PAYLOAD_TOO_LARGE(413, "Payload Too Large"),
+	/**
+	 * {@code 413 Request Entity Too Large}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2616#section-10.4.14">HTTP/1.1, section 10.4.14</a>
+	 * @deprecated In favor of {@link #PAYLOAD_TOO_LARGE} which will be returned from {@code HttpStatus.valueOf(413)}
+	 */
+	@Deprecated
+	REQUEST_ENTITY_TOO_LARGE(413, "Request Entity Too Large"),
+	/**
+	 * {@code 414 URI Too Long}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.12">HTTP/1.1: Semantics and Content, section 6.5.12</a>
+	 * @since 4.1
+	 */
+	URI_TOO_LONG(414, "URI Too Long"),
+	/**
+	 * {@code 414 Request-URI Too Long}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2616#section-10.4.15">HTTP/1.1, section 10.4.15</a>
+	 * @deprecated In favor of {@link #URI_TOO_LONG} which will be returned from {@code HttpStatus.valueOf(414)}
+	 */
+	@Deprecated
+	REQUEST_URI_TOO_LONG(414, "Request-URI Too Long"),
+	/**
+	 * {@code 415 Unsupported Media Type}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.13">HTTP/1.1: Semantics and Content, section 6.5.13</a>
+	 */
+	UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),
+	/**
+	 * {@code 416 Requested Range Not Satisfiable}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7233#section-4.4">HTTP/1.1: Range Requests, section 4.4</a>
+	 */
+	REQUESTED_RANGE_NOT_SATISFIABLE(416, "Requested range not satisfiable"),
+	/**
+	 * {@code 417 Expectation Failed}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.5.14">HTTP/1.1: Semantics and Content, section 6.5.14</a>
+	 */
+	EXPECTATION_FAILED(417, "Expectation Failed"),
+	/**
+	 * {@code 418 I'm a teapot}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2324#section-2.3.2">HTCPCP/1.0</a>
+	 */
+	I_AM_A_TEAPOT(418, "I'm a teapot"),
+	/**
+	 * @deprecated See <a href="http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt">WebDAV Draft Changes</a>
+	 */
+	@Deprecated
+	INSUFFICIENT_SPACE_ON_RESOURCE(419, "Insufficient Space On Resource"),
+	/**
+	 * @deprecated See <a href="http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt">WebDAV Draft Changes</a>
+	 */
+	@Deprecated
+	METHOD_FAILURE(420, "Method Failure"),
+	/**
+	 * @deprecated See <a href="http://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt">WebDAV Draft Changes</a>
+	 */
+	@Deprecated
+	DESTINATION_LOCKED(421, "Destination Locked"),
+	/**
+	 * {@code 422 Unprocessable Entity}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc4918#section-11.2">WebDAV</a>
+	 */
+	UNPROCESSABLE_ENTITY(422, "Unprocessable Entity"),
+	/**
+	 * {@code 423 Locked}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc4918#section-11.3">WebDAV</a>
+	 */
+	LOCKED(423, "Locked"),
+	/**
+	 * {@code 424 Failed Dependency}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc4918#section-11.4">WebDAV</a>
+	 */
+	FAILED_DEPENDENCY(424, "Failed Dependency"),
+	/**
+	 * {@code 426 Upgrade Required}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2817#section-6">Upgrading to TLS Within HTTP/1.1</a>
+	 */
+	UPGRADE_REQUIRED(426, "Upgrade Required"),
+	/**
+	 * {@code 428 Precondition Required}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc6585#section-3">Additional HTTP Status Codes</a>
+	 */
+	PRECONDITION_REQUIRED(428, "Precondition Required"),
+	/**
+	 * {@code 429 Too Many Requests}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc6585#section-4">Additional HTTP Status Codes</a>
+	 */
+	TOO_MANY_REQUESTS(429, "Too Many Requests"),
+	/**
+	 * {@code 431 Request Header Fields Too Large}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc6585#section-5">Additional HTTP Status Codes</a>
+	 */
+	REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large"),
+
+	// --- 5xx Server Error ---
+
+	/**
+	 * {@code 500 Internal Server Error}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.1">HTTP/1.1: Semantics and Content, section 6.6.1</a>
+	 */
+	INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
+	/**
+	 * {@code 501 Not Implemented}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.2">HTTP/1.1: Semantics and Content, section 6.6.2</a>
+	 */
+	NOT_IMPLEMENTED(501, "Not Implemented"),
+	/**
+	 * {@code 502 Bad Gateway}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.3">HTTP/1.1: Semantics and Content, section 6.6.3</a>
+	 */
+	BAD_GATEWAY(502, "Bad Gateway"),
+	/**
+	 * {@code 503 Service Unavailable}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.4">HTTP/1.1: Semantics and Content, section 6.6.4</a>
+	 */
+	SERVICE_UNAVAILABLE(503, "Service Unavailable"),
+	/**
+	 * {@code 504 Gateway Timeout}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.5">HTTP/1.1: Semantics and Content, section 6.6.5</a>
+	 */
+	GATEWAY_TIMEOUT(504, "Gateway Timeout"),
+	/**
+	 * {@code 505 HTTP Version Not Supported}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc7231#section-6.6.6">HTTP/1.1: Semantics and Content, section 6.6.6</a>
+	 */
+	HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version not supported"),
+	/**
+	 * {@code 506 Variant Also Negotiates}
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2295#section-8.1">Transparent Content Negotiation</a>
+	 */
+	VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates"),
+	/**
+	 * {@code 507 Insufficient Storage}
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc4918#section-11.5">WebDAV</a>
+	 */
+	INSUFFICIENT_STORAGE(507, "Insufficient Storage"),
+	/**
+	 * {@code 508 Loop Detected}
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc5842#section-7.2">WebDAV Binding Extensions</a>
+	 */
+	LOOP_DETECTED(508, "Loop Detected"),
+	/**
+	 * {@code 509 Bandwidth Limit Exceeded}
+	 */
+	BANDWIDTH_LIMIT_EXCEEDED(509, "Bandwidth Limit Exceeded"),
+	/**
+	 * {@code 510 Not Extended}
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc2774#section-7">HTTP Extension Framework</a>
+	 */
+	NOT_EXTENDED(510, "Not Extended"),
+	/**
+	 * {@code 511 Network Authentication Required}.
+	 *
+	 * @see <a href="http://tools.ietf.org/html/rfc6585#section-6">Additional HTTP Status Codes</a>
+	 */
+	NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required");
+
+	private final int value;
+
+	private final String reasonPhrase;
+
+	HttpStatus(final int value, final String reasonPhrase) {
+		this.value = value;
+		this.reasonPhrase = reasonPhrase;
+	}
+
+	/**
+	 * Return the integer value of this status code.
+	 */
+	public int value() {
+		return this.value;
+	}
+
+	/**
+	 * Return the reason phrase of this status code.
+	 */
+	public String getReasonPhrase() {
+		return this.reasonPhrase;
+	}
+
+	/**
+	 * Return a string representation of this status code.
+	 */
+	@Override
+	public String toString() {
+		return Integer.toString(this.value);
+	}
+
+	/**
+	 * Return the enum constant of this type with the specified numeric value.
+	 *
+	 * @param statusCode the numeric value of the enum to be returned
+	 * @return the enum constant with the specified numeric value
+	 * @throws IllegalArgumentException if this enum has no constant for the specified numeric value
+	 */
+	public static HttpStatus valueOf(final int statusCode) {
+		for (final HttpStatus status : values()) {
+			if (status.value == statusCode) {
+				return status;
+			}
+		}
+		throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");
+	}
+}
\ No newline at end of file
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/LockFile.java b/source-code/RuffCT-java/src/org/nem/core/utils/LockFile.java
new file mode 100755
index 0000000..941d015
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/LockFile.java
@@ -0,0 +1,82 @@
+package org.nem.core.utils;
+
+import java.io.*;
+import java.nio.channels.*;
+
+/**
+ * Static class that exposes functions for interacting with lock files.
+ */
+public class LockFile {
+
+	/**
+	 * Tries to acquire a file lock for the specified file.
+	 *
+	 * @param lockFile The lock file.
+	 * @return A handle to the file lock if acquired, or null otherwise.
+	 */
+	public static Closeable tryAcquireLock(final File lockFile) {
+		FileLockHandle handle = null;
+		try {
+			handle = new FileLockHandle(lockFile);
+
+			// try to acquire the lock 5 times
+			for (int i = 0; i < 5; ++i) {
+				if (handle.tryLock()) {
+					return handle;
+				}
+
+				ExceptionUtils.propagateVoid(() -> Thread.sleep(10));
+			}
+
+			return null;
+		} catch (final IOException | OverlappingFileLockException e) {
+			return null;
+		} finally {
+			if (null != handle && null == handle.lock) {
+				try {
+					handle.close();
+				} catch (final IOException ignored) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * Determines whether or not the specified file is locked.
+	 *
+	 * @param lockFile The lock file.
+	 * @return true if the file is locked, false otherwise.
+	 */
+	public static boolean isLocked(final File lockFile) {
+		try (final FileLockHandle handle = new FileLockHandle(lockFile)) {
+			return !handle.tryLock();
+		} catch (final OverlappingFileLockException e) {
+			return true;
+		} catch (final IOException e) {
+			return false;
+		}
+	}
+
+	private static class FileLockHandle implements Closeable {
+		private final RandomAccessFile file;
+		private FileLock lock;
+
+		public FileLockHandle(final File lockFile) throws IOException {
+			this.file = new RandomAccessFile(lockFile, "rw");
+		}
+
+		private boolean tryLock() throws IOException {
+			this.lock = this.file.getChannel().tryLock();
+			return null != this.lock;
+		}
+
+		@Override
+		public void close() throws IOException {
+			if (null != this.lock) {
+				this.lock.close();
+			}
+
+			this.file.close();
+		}
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/MustBe.java b/source-code/RuffCT-java/src/org/nem/core/utils/MustBe.java
new file mode 100755
index 0000000..cd5e65d
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/MustBe.java
@@ -0,0 +1,118 @@
+package org.nem.core.utils;
+
+import java.util.Collection;
+import java.util.regex.Pattern;
+
+/**
+ * Helper class for validating parameters.
+ */
+public class MustBe {
+
+	/**
+	 * Throws an exception if the specified object is null.
+	 *
+	 * @param obj The object.
+	 * @param name The object name.
+	 */
+	public static void notNull(final Object obj, final String name) {
+		if (null == obj) {
+			final String message = String.format("%s cannot be null", name);
+			throw new IllegalArgumentException(message);
+		}
+	}
+
+	/**
+	 * Throws an exception if the specified string contains no non-whitespace characters.
+	 *
+	 * @param str The string.
+	 * @param name The string name.
+	 * @param maxLength The max length.
+	 */
+	public static void notWhitespace(final String str, final String name, final int maxLength) {
+		if (StringUtils.isNullOrWhitespace(str) || str.length() > maxLength) {
+			final String message = String.format("%s cannot be null, empty, or whitespace, or have length greater than %d", name, maxLength);
+			throw new IllegalArgumentException(message);
+		}
+	}
+
+	/**
+	 * Throws an exception if the specified string does not match the pattern, is empty, or longer than the max length.
+	 *
+	 * @param str The string.
+	 * @param name The string name.
+	 * @param pattern The pattern to match.
+	 * @param maxLength The max length.
+	 */
+	public static void match(final String str, final String name, final Pattern pattern, final int maxLength) {
+		if (null == str || str.isEmpty() || str.length() > maxLength || !pattern.matcher(str).matches()) {
+			final String message = String.format("%s does not match the desired pattern", name);
+			throw new IllegalArgumentException(message);
+		}
+	}
+
+	/**
+	 * Throws an exception if the specified integer value is not in the specified inclusive range.
+	 *
+	 * @param value The integer value.
+	 * @param name The value name.
+	 * @param minInclusive The min allowed value (inclusive).
+	 * @param maxInclusive The max allowed value (inclusive).
+	 */
+	public static void inRange(final int value, final String name, final int minInclusive, final int maxInclusive) {
+		inRange((long)value, name, minInclusive, maxInclusive);
+	}
+
+	/**
+	 * Throws an exception if the specified long value is not in the specified inclusive range.
+	 *
+	 * @param value The long value.
+	 * @param name The value name.
+	 * @param minInclusive The min allowed value (inclusive).
+	 * @param maxInclusive The max allowed value (inclusive).
+	 */
+	public static void inRange(final long value, final String name, final long minInclusive, final long maxInclusive) {
+		if (value < minInclusive || value > maxInclusive) {
+			final String message = String.format("%s must be between %d and %d inclusive", name, minInclusive, maxInclusive);
+			throw new IllegalArgumentException(message);
+		}
+	}
+
+	/**
+	 * Throws an exception if the specified collection is not empty.
+	 *
+	 * @param collection The collection.
+	 * @param name The collection name.
+	 */
+	public static void empty(final Collection<?> collection, final String name) {
+		if (!collection.isEmpty()) {
+			final String message = String.format("%s must be empty", name);
+			throw new IllegalArgumentException(message);
+		}
+	}
+
+	/**
+	 * Throws an exception if the specified value is not true.
+	 *
+	 * @param value The value.
+	 * @param name The value name.
+	 */
+	public static void trueValue(final boolean value, final String name) {
+		if (!value) {
+			final String message = String.format("%s must be true", name);
+			throw new IllegalArgumentException(message);
+		}
+	}
+
+	/**
+	 * Throws an exception if the specified value is not false.
+	 *
+	 * @param value The value.
+	 * @param name The value name.
+	 */
+	public static void falseValue(final boolean value, final String name) {
+		if (value) {
+			final String message = String.format("%s must be false", name);
+			throw new IllegalArgumentException(message);
+		}
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/SetOnce.java b/source-code/RuffCT-java/src/org/nem/core/utils/SetOnce.java
new file mode 100755
index 0000000..7704d02
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/SetOnce.java
@@ -0,0 +1,42 @@
+package org.nem.core.utils;
+
+/**
+ * Wrapper that allows an object to be set once (or reset and set again).
+ *
+ * @param <T> The inner type.
+ */
+public class SetOnce<T> {
+	private final T defaultValue;
+	private T value;
+
+	/**
+	 * Creates a wrapper.
+	 *
+	 * @param defaultValue The default value.
+	 */
+	public SetOnce(final T defaultValue) {
+		this.defaultValue = defaultValue;
+	}
+
+	/**
+	 * Gets the inner object.
+	 *
+	 * @return The inner object.
+	 */
+	public T get() {
+		return null == this.value ? this.defaultValue : this.value;
+	}
+
+	/**
+	 * Sets the inner object.
+	 *
+	 * @param value The inner object.
+	 */
+	public void set(final T value) {
+		if (null != this.value && null != value) {
+			throw new IllegalStateException("cannot change value because it is already set");
+		}
+
+		this.value = value;
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/StringEncoder.java b/source-code/RuffCT-java/src/org/nem/core/utils/StringEncoder.java
new file mode 100755
index 0000000..25bb127
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/StringEncoder.java
@@ -0,0 +1,31 @@
+package org.nem.core.utils;
+
+import java.nio.charset.Charset;
+
+/**
+ * Static class that contains utility functions for converting strings to and from UTF-8 bytes.
+ */
+public class StringEncoder {
+
+	private static final Charset ENCODING_CHARSET = Charset.forName("UTF-8");
+
+	/**
+	 * Converts a string to a UTF-8 byte array.
+	 *
+	 * @param s The input string.
+	 * @return The output byte array.
+	 */
+	public static byte[] getBytes(final String s) {
+		return s.getBytes(ENCODING_CHARSET);
+	}
+
+	/**
+	 * Converts a UTF-8 byte array to a string.
+	 *
+	 * @param bytes The input byte array.
+	 * @return The output string.
+	 */
+	public static String getString(final byte[] bytes) {
+		return new String(bytes, ENCODING_CHARSET);
+	}
+}
diff --git a/source-code/RuffCT-java/src/org/nem/core/utils/StringUtils.java b/source-code/RuffCT-java/src/org/nem/core/utils/StringUtils.java
new file mode 100755
index 0000000..b721bc7
--- /dev/null
+++ b/source-code/RuffCT-java/src/org/nem/core/utils/StringUtils.java
@@ -0,0 +1,50 @@
+package org.nem.core.utils;
+
+/**
+ * Static class that contains string utility functions.
+ */
+public class StringUtils {
+
+	/**
+	 * Determines if the specified string is null or empty.
+	 *
+	 * @param str The string.
+	 * @return true if the string is null or empty.
+	 */
+	public static boolean isNullOrEmpty(final String str) {
+		return null == str || str.isEmpty();
+	}
+
+	/**
+	 * Determines if the specified string is null or whitespace.
+	 *
+	 * @param str The string.
+	 * @return true if the string is null or whitespace.
+	 */
+	public static boolean isNullOrWhitespace(final String str) {
+		if (isNullOrEmpty(str)) {
+			return true;
+		}
+
+		for (int i = 0; i < str.length(); i++) {
+			if (!Character.isWhitespace(str.charAt(i))) {
+				return false;
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Replaces a variable contained in a string with a value. A variable is defined as ${variable}.
+	 * This pattern is replaced by the given value.
+	 *
+	 * @param string String that contains variables.
+	 * @param name Name of the variable to be replaced with its value.
+	 * @param value Value that will replace the variable.
+	 * @return string with value replacing the variable with the given name
+	 */
+	public static String replaceVariable(final String string, final String name, final String value) {
+		return string.replace(String.format("${%s}", name), value);
+	}
+}
diff --git a/source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingBenchmarks.java b/source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingBenchmarks.java
new file mode 100644
index 0000000..1db643d
--- /dev/null
+++ b/source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingBenchmarks.java
@@ -0,0 +1,126 @@
+package test.how.monero.hodl;
+
+import how.monero.hodl.ringSignature.SpendParams;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import static how.monero.hodl.ringSignature.BootleRuffing.*;
+import static test.how.monero.hodl.BootleRuffingSpendTest.createTestSpendParams;
+
+public class BootleRuffingBenchmarks {
+
+  public static void spendTest() throws IOException {
+
+    int[] inputsVariants = new int[]{1, 2, 3, 4, 5, 10, 20};
+    int[] decompositionExponentVariants = new int[]{2, 3, 4, 5, 6, 7, 8, 9, 10};
+
+    List<List<String>> sheet = new ArrayList<>();
+    List<String> sheetColTitles = new ArrayList<>();
+    sheetColTitles.add("Inputs");
+    sheetColTitles.add("Base");
+    sheetColTitles.add("Exponent");
+    sheetColTitles.add("Ring size");
+    sheetColTitles.add("Generation time (ms)");
+    sheetColTitles.add("Generation scalar mults");
+    sheetColTitles.add("Generation G scalar mults");
+    sheetColTitles.add("Verification time (ms)");
+    sheetColTitles.add("Verification scalar mults");
+    sheetColTitles.add("Verification G scalar mults");
+    sheetColTitles.add("Signature length excl. vins (bytes)");
+    sheetColTitles.add("MLSAG equiv. length excl. vins (bytes)");
+    sheet.add(sheetColTitles);
+
+    int testIterations = 1;
+    int decompositionBase = 2;
+
+    for(int inputs : inputsVariants) {
+      for(int decompositionExponent : decompositionExponentVariants) {
+
+        System.out.println("******* inputs: " + inputs + ", decompositionExponent: " + decompositionExponent);
+
+        long startMs = new Date().getTime();
+        SpendParams[] sp = new SpendParams[testIterations];
+        for (int i=0; i<testIterations; i++) sp[i] = createTestSpendParams(decompositionBase, decompositionExponent, inputs);
+        long spendParamsGenerationDuration = (new Date().getTime()-startMs);
+        System.out.println("Spend params generation duration: " + spendParamsGenerationDuration + " ms");
+
+        startMs = new Date().getTime();
+        // create a transaction to spend the outputs, resulting in a signature that proves the authority to send them
+        SpendSignature[] spendSignature = new SpendSignature[testIterations];
+        for (int i=0; i<testIterations; i++) {
+          Ed25519GroupElement.scalarMults = 0;
+          Ed25519GroupElement.scalarBaseMults = 0;
+          spendSignature[i] = SPEND(sp[i]);
+        }
+        int spendScalarMults = Ed25519GroupElement.scalarMults;
+        int spendScalarBaseMults = Ed25519GroupElement.scalarBaseMults;
+
+        long spendSignatureGenerationDuration = (new Date().getTime()-startMs);
+        System.out.println("Spend signature generation duration: " + spendSignatureGenerationDuration + " ms");
+
+        byte[][] spendSignatureBytes = new byte[testIterations][];
+        spendSignatureBytes[0] = spendSignature[0].toBytes();
+        System.out.println("Spend Signature length (bytes):" + spendSignatureBytes[0].length);
+
+        startMs = new Date().getTime();
+
+        // verify the spend transaction
+        for (int i=0; i<testIterations; i++) {
+          Ed25519GroupElement.scalarMults = 0;
+          Ed25519GroupElement.scalarBaseMults = 0;
+          boolean verified = VER(sp[i].ki, sp[i].pk, sp[i].co, spendSignature[i].co1, sp[i].M, spendSignature[i]);
+          System.out.println("verified: " + verified);
+        }
+        int verifyScalarMults = Ed25519GroupElement.scalarMults;
+        int verifyScalarBaseMults = Ed25519GroupElement.scalarBaseMults;
+
+
+        long spendSignatureVerificationDuration = (new Date().getTime()-startMs);
+        System.out.println("Signature verification duration: " + spendSignatureVerificationDuration + " ms");
+
+
+        List<String> sheetCols = new ArrayList<>();
+        sheetCols.add(inputs+"");
+        sheetCols.add(decompositionBase+"");
+        sheetCols.add(decompositionExponent+"");
+        sheetCols.add(((int)Math.pow(decompositionBase, decompositionExponent))+"");
+        sheetCols.add((spendSignatureGenerationDuration/testIterations)+"");
+        sheetCols.add((spendScalarMults)+"");
+        sheetCols.add((spendScalarBaseMults)+"");
+        sheetCols.add((spendSignatureVerificationDuration/testIterations)+"");
+        sheetCols.add((verifyScalarMults)+"");
+        sheetCols.add((verifyScalarBaseMults)+"");
+        sheetCols.add((spendSignatureBytes[0].length)+"");
+        sheetCols.add((inputs * (32 + 64 * ((int) Math.pow(decompositionBase, decompositionExponent))))+"");
+        sheet.add(sheetCols);
+
+      }
+    }
+
+    String csv = "";
+    for(List<String> row : sheet) {
+      for(int i=0; i<row.size(); i++) {
+        csv+=row.get(i);
+        if(i!=(row.size()-1)) csv+=",";
+        else csv+="\n";
+      }
+    }
+    System.out.println(csv);
+    Files.write(new File(System.getProperty("user.home"), "bootleruffing-benchmarks.csv").toPath(), csv.getBytes());
+
+  }
+
+
+  public static void main(String[] args) throws Exception {
+    long startTime = new Date().getTime();
+    spendTest();
+    System.out.println("\nTotal duration: " + (new Date().getTime()-startTime) + " ms");
+  }
+
+}
diff --git a/source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingSpendTest.java b/source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingSpendTest.java
new file mode 100644
index 0000000..d2ff27f
--- /dev/null
+++ b/source-code/RuffCT-java/src/test/how/monero/hodl/BootleRuffingSpendTest.java
@@ -0,0 +1,168 @@
+package test.how.monero.hodl;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+import how.monero.hodl.ringSignature.SpendParams;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+
+import static how.monero.hodl.crypto.CryptoUtil.*;
+import static how.monero.hodl.ringSignature.BootleRuffing.*;
+
+public class BootleRuffingSpendTest {
+
+  public static SpendParams createTestSpendParams(int decompositionBase, int decompositionExponent, int inputs) {
+
+    // ring size must be a power of the decomposition base
+    int ringSize = (int) Math.pow(decompositionBase, decompositionExponent);
+
+    SpendParams sp = new SpendParams();
+
+    sp.decompositionBase = decompositionBase;
+    sp.decompositionExponent = decompositionExponent;
+
+    // The owned inputs that are going to be spent
+    Output[] realInputs = new Output[inputs];
+    for(int i=0; i<inputs; i++) realInputs[i] = Output.genRandomOutput(BigInteger.valueOf((long)(Math.random()*1000+1000)));
+
+    // The new outputs to be created (typically one for the recipient one for change)
+    BigInteger fee = BigInteger.valueOf(0); //keep fee as zero for now, to avoid overcomplicating things
+    Output[] outputs = new Output[2];
+    outputs[0] = Output.genRandomOutput(realInputs[0].amount.divide(BigInteger.valueOf(2)));
+    outputs[1] = Output.genRandomOutput(BigInteger.valueOf(Arrays.stream(realInputs).mapToLong(i->i.amount.longValue()).sum()).subtract(fee).subtract(outputs[0].amount));
+
+    sp.iAsterisk = (int) Math.floor(Math.random()*ringSize); // the ring index of the sender's owned inputs
+
+    // input commitments
+    // commitments to the amounts of all inputs referenced in the transaction (real inputs and decoys)
+    Ed25519GroupElement[][] inputCommitments = new Ed25519GroupElement[inputs][ringSize];
+    for(int j=0; j<inputs; j++) {
+      for(int i=0; i<ringSize; i++) {
+        if(i==sp.iAsterisk) inputCommitments[j][i] = realInputs[j].co;
+        else inputCommitments[j][i] = randomPoint();
+      }
+    }
+
+    // there is a co commitment for each ring
+    // each member of co is sum(COMp(input amt i)) - sum(COMp(output amt i))
+    sp.co = new Ed25519GroupElement[ringSize];
+    for(int i=0; i<ringSize; i++) {
+      sp.co[i] = inputCommitments[0][i];
+      for(int j=1; j<inputs; j++) {
+        sp.co[i] = sp.co[i].toP3().add(inputCommitments[j][i].toP3().toCached());
+      }
+      for(int k=0; k<outputs.length; k++) {
+        sp.co[i] = sp.co[i].toP3().subtract(outputs[k].co.toP3().toCached());
+      }
+    }
+
+    // the public keys for every input referenced (including real inputs and decoys)
+    sp.pk = new PointPair[inputs][ringSize];
+
+    // the secret key for every real input referenced
+    sp.sk = new SK[inputs];
+
+    // the key image for every real input referenced
+    sp.ki = new Ed25519GroupElement[inputs];
+
+    for(int j=0; j<inputs; j++) {
+      for(int i=0; i<ringSize; i++) {
+        sp.pk[j][i] = (i==sp.iAsterisk) ? realInputs[j].pk : KEYGEN().pk;
+      }
+      sp.sk[j] = realInputs[j].sk;
+      sp.ki[j] = realInputs[j].ki;
+    }
+
+    // the message being signed is a hash of the transaction, as defined in the C codebase as get_pre_mlsag_hash
+    sp.M = fastHash(randomMessage(100));
+
+    sp.s = Scalar.ZERO;
+    for(int i=0; i<realInputs.length; i++) sp.s = sp.s.add(realInputs[i].mask);
+    for(int i=0; i<outputs.length; i++) sp.s = sp.s.sub(outputs[i].mask);
+
+    Ed25519GroupElement S = realInputs[0].co;
+    for(int i=1; i<realInputs.length; i++) S = S.toP3().add(realInputs[i].co.toP3().toCached());
+    S = S.toP3().subtract(G.scalarMultiply(new Scalar(fee)).toP3().toCached());
+    for(int i=0; i<outputs.length; i++) S = S.toP3().subtract(outputs[i].co.toP3().toCached());
+
+    Ed25519GroupElement S1 = getHpnGLookup(1).scalarMultiply(sp.s);
+
+    if(!S.toP3().equals(S1)) throw new RuntimeException("S != S'");
+
+    return sp;
+  }
+
+  public static void spendTest() {
+
+    boolean pauseAtEachStage = false;
+    int testIterations = 1;
+    int decompositionBase = 2;
+    int decompositionExponent = 8;
+    int inputs = 2;
+
+    System.out.println("Ring size: " + Math.pow(decompositionBase, decompositionExponent));
+    System.out.println("Inputs: " + inputs);
+
+    long startMs = new Date().getTime();
+    SpendParams[] sp = new SpendParams[testIterations];
+    for (int i=0; i<testIterations; i++) sp[i] = createTestSpendParams(decompositionBase, decompositionExponent, inputs);
+    System.out.println("Spend params generation duration: " + (new Date().getTime()-startMs) + " ms");
+
+    if(pauseAtEachStage) { System.out.println("Press enter to continue"); try { System.in.read(); } catch (Exception e) {}; System.out.println("Continuing..."); }
+
+    Ed25519GroupElement.scalarMults = 0;
+    Ed25519GroupElement.scalarBaseMults = 0;
+
+    startMs = new Date().getTime();
+    // create a transaction to spend the outputs, resulting in a signature that proves the authority to send them
+    SpendSignature[] spendSignature = new SpendSignature[testIterations];
+    for (int i=0; i<testIterations; i++) spendSignature[i] = SPEND(sp[i]);
+
+    System.out.println("Spend signature generation duration: " + (new Date().getTime()-startMs) + " ms");
+
+    byte[][] spendSignatureBytes = new byte[testIterations][];
+    for (int i=0; i<testIterations; i++) {
+      spendSignatureBytes[i] = spendSignature[i].toBytes();
+      System.out.println("Spend Signature length (bytes):" + spendSignatureBytes[i].length);
+    }
+
+    if(pauseAtEachStage) { System.out.println("Press enter to continue"); try { System.in.read(); } catch (Exception e) {}; System.out.println("Continuing..."); }
+    startMs = new Date().getTime();
+
+    System.out.println("Spend ScalarMults: " + Ed25519GroupElement.scalarMults);
+    System.out.println("Spend BaseScalarMults: " + Ed25519GroupElement.scalarBaseMults);
+    Ed25519GroupElement.scalarMults = 0;
+    Ed25519GroupElement.scalarBaseMults = 0;
+
+    //Ed25519GroupElement.enableLineRecording = true;
+    Ed25519GroupElement.lineRecordingSourceFile = "BootleRuffing.java";
+
+    // verify the spend transaction
+    for (int i=0; i<testIterations; i++) {
+
+      spendSignature[i] = SpendSignature.fromBytes(spendSignatureBytes[i]);
+
+      boolean verified = VER(sp[i].ki, sp[i].pk, sp[i].co, spendSignature[i].co1, sp[i].M, spendSignature[i]);
+      System.out.println("verified: " + verified);
+    }
+
+    System.out.println("Verify ScalarMults: " + Ed25519GroupElement.scalarMults);
+    System.out.println("Verify BaseScalarMults: " + Ed25519GroupElement.scalarBaseMults);
+
+    System.out.println("Signature verification duration: " + (new Date().getTime()-startMs) + " ms");
+
+    if(Ed25519GroupElement.enableLineRecording) Ed25519GroupElement.lineNumberCallFrequencyMap.entrySet().stream().forEach(e->{System.out.println("line: " + e.getKey() + ", calls: " + e.getValue());});
+
+  }
+
+  public static void main(String[] args) {
+    long startTime = new Date().getTime();
+    spendTest();
+    System.out.println("Total duration: " + (new Date().getTime()-startTime) + " ms");
+  }
+
+}
diff --git a/source-code/RuffCT-java/src/test/how/monero/hodl/Prove1Valid1Test1.java b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove1Valid1Test1.java
new file mode 100644
index 0000000..9427c18
--- /dev/null
+++ b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove1Valid1Test1.java
@@ -0,0 +1,29 @@
+package test.how.monero.hodl;
+
+import how.monero.hodl.crypto.Scalar;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+import static how.monero.hodl.crypto.CryptoUtil.COMb;
+import static how.monero.hodl.ringSignature.BootleRuffing.*;
+
+public class Prove1Valid1Test1 {
+
+  public static void main(String[] args) {
+
+    Scalar[][] b = new Scalar[][] {
+      new Scalar[]{Scalar.ONE, Scalar.ZERO},
+      new Scalar[]{Scalar.ZERO, Scalar.ONE}
+    };
+
+    Scalar r = Scalar.ONE;
+
+    Proof1 P = PROVE1(b, r);
+
+    Ed25519GroupElement B = COMb(b, r);
+
+    System.out.println("VALID1 returns " + VALID1(B, P));
+
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1.java b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1.java
new file mode 100644
index 0000000..a21b373
--- /dev/null
+++ b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1.java
@@ -0,0 +1,37 @@
+package test.how.monero.hodl;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+
+import static how.monero.hodl.crypto.CryptoUtil.COMeg;
+import static how.monero.hodl.ringSignature.BootleRuffing.*;
+
+public class Prove2Valid2Test1 {
+
+  public static void main(String[] args) {
+
+    System.out.println("Test: " + new Object(){}.getClass().getEnclosingClass().getName());
+
+    // [c[0], c[1]] = [ COMeg(0, r), COMeg(1, s) ] with secret index 0 should PASS
+    Scalar r = Scalar.ONE;
+    Scalar s = Scalar.ONE;
+
+    PointPair[] co = new PointPair[]{
+      COMeg(Scalar.ZERO, r),
+      COMeg(Scalar.ONE, s)
+    };
+
+    int iAsterisk = 0;
+
+    int inputs = 1;
+    int decompositionBase = 2;
+    int decompositionExponent = 1;
+
+    Proof2 P2 = PROVE2(co, iAsterisk, r, inputs, decompositionBase, decompositionExponent);
+
+    System.out.println("VALID2 result: " + VALID2(decompositionBase, P2, co));
+
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1a.java b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1a.java
new file mode 100644
index 0000000..9f0cee7
--- /dev/null
+++ b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1a.java
@@ -0,0 +1,42 @@
+package test.how.monero.hodl;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+
+import static how.monero.hodl.crypto.CryptoUtil.COMeg;
+import static how.monero.hodl.ringSignature.BootleRuffing.*;
+
+public class Prove2Valid2Test1a {
+
+  public static void main(String[] args) {
+
+    System.out.println("Test: " + new Object(){}.getClass().getEnclosingClass().getName());
+
+    Scalar r = Scalar.ONE;
+
+    PointPair[] co = new PointPair[]{
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ZERO, Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+      COMeg(Scalar.ONE,Scalar.ONE),
+    };
+
+    int iAsterisk = 5;
+
+    int inputs = 1;
+    int decompositionBase = 3;
+    int decompositionExponent = 2;
+
+    Proof2 P2 = PROVE2(co, iAsterisk, r, inputs, decompositionBase, decompositionExponent);
+
+    System.out.println("VALID2 result: " + VALID2(decompositionBase, P2, co));
+
+  }
+
+
+}
diff --git a/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1b.java b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1b.java
new file mode 100644
index 0000000..891b464
--- /dev/null
+++ b/source-code/RuffCT-java/src/test/how/monero/hodl/Prove2Valid2Test1b.java
@@ -0,0 +1,61 @@
+package test.how.monero.hodl;
+
+import how.monero.hodl.crypto.PointPair;
+import how.monero.hodl.crypto.Scalar;
+import org.nem.core.crypto.ed25519.arithmetic.Ed25519GroupElement;
+
+import java.util.Date;
+
+import static how.monero.hodl.crypto.CryptoUtil.COMeg;
+import static how.monero.hodl.ringSignature.BootleRuffing.*;
+
+public class Prove2Valid2Test1b {
+
+  public static void main(String[] args) {
+
+    System.out.println("Test: " + new Object(){}.getClass().getEnclosingClass().getName());
+
+    Scalar r = Scalar.ONE;
+
+    for(int k=1; k<=64; k++) {
+
+      System.out.println("---------------------------------------------------------------------------");
+      int len = (int) Math.pow(2, k);
+      PointPair[] co = new PointPair[len];
+      for (int i = 0; i < len; i++) co[i] = COMeg(Scalar.intToScalar(i), Scalar.ONE);
+
+      int iAsterisk = 0;
+
+      int inputs = 1;
+      int decompositionBase = 2;
+      int decompositionExponent = k;
+
+      System.out.println("k: " + k);
+      System.out.println("decompositionBase: " + decompositionBase);
+      System.out.println("decompositionExponent: " + decompositionExponent);
+
+      Ed25519GroupElement.scalarMults = 0;
+      Ed25519GroupElement.scalarBaseMults = 0;
+      long startMs = new Date().getTime();
+
+      Proof2 P2 = PROVE2(co, iAsterisk, r, inputs, decompositionBase, decompositionExponent);
+
+      System.out.println("PROVE2 duration: " + (new Date().getTime() - startMs) + " ms");
+      System.out.println("PROVE2 ScalarMults: " + Ed25519GroupElement.scalarMults);
+      System.out.println("PROVE2 BaseScalarMults: " + Ed25519GroupElement.scalarBaseMults);
+      Ed25519GroupElement.scalarMults = 0;
+      Ed25519GroupElement.scalarBaseMults = 0;
+      startMs = new Date().getTime();
+
+      System.out.println("VALID2 result: " + VALID2(decompositionBase, P2, co));
+
+      System.out.println("VALID2 ScalarMults: " + Ed25519GroupElement.scalarMults);
+      System.out.println("VALID2 BaseScalarMults: " + Ed25519GroupElement.scalarBaseMults);
+
+      System.out.println("VALID2 duration: " + (new Date().getTime() - startMs) + " ms");
+    }
+
+  }
+
+
+}