Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Safeheron/multi-party-sig-cpp
This project is a C++ implementation of {t,n}-Threshold Signature Scheme
https://github.com/Safeheron/multi-party-sig-cpp
Last synced: 3 months ago
JSON representation
This project is a C++ implementation of {t,n}-Threshold Signature Scheme
- Host: GitHub
- URL: https://github.com/Safeheron/multi-party-sig-cpp
- Owner: Safeheron
- License: other
- Created: 2023-04-08T16:40:04.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-22T07:00:15.000Z (6 months ago)
- Last Synced: 2024-06-12T06:37:43.934Z (5 months ago)
- Language: C++
- Homepage:
- Size: 6.01 MB
- Stars: 78
- Watchers: 8
- Forks: 18
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# multi-party-sig-cpp
This code repository has been renamed to "multi-party-sig-cpp" from "multi-party-ecdsa-cpp".
This project is a C++ implementation of {t,n}-Threshold Signature Scheme. It supports ECDSA (elliptic curve digital signature algorithm) now. Ed25519, Schnorr and BLS will be supported soon.
# Introduction
The library implements three different mpc protocols for threshold ECDSA now.
- GG18[\[1\]](#Reference): The GG18 protocol implements a {t,n}-threshold signature scheme according to Gennaro & Goldfeder's paper in 2018.
- Key Generation: Create a new ECDSA private key shared among all the given participants.
- Key Refresh: Refresh the secret shares while keeping the public key the same.
- Sign: Generates an ECDSA signature for specified message.
- GG20[\[2\]](#Reference): The GG20 protocol is an optimization of GG18, which reduced the MPC protocol of signature generation to 7 rounds.
- Key Generation: the same as GG18.
- Key Refresh: the same as GG18.
- Sign: Signing for using the secret shares to generate a signature.
- CMP[\[3\]](#Reference): A optimized threshold ECDSA protocol proposed built on the Gennaro & Goldfeder and Lindell's protocols (GG18).
- Minimal Key Generation: Create a new ECDSA private key shared among all the given participants. Note that only the key relevant to the asset is generated.
- Auxiliary info and key Refresh: Refresh of the auxiliary info and the secret shares while keeping the public key the same.
- Sign: Generates an ECDSA signature for specified message.More details about the protocols can be found in the papers.
We define structured data for each round via Protobuf for efficient message transfer.
The cryptographic primitives used in the mpc protocols are defined in our library [safeheron-crypto-suites-cpp](https://github.com/Safeheron/safeheron-crypto-suites-cpp) . You can follow the [Prerequisites](#Prerequisites) to acquire them.# Comparison of the protocols
| Protocol | Paper | Scheme | Number of Rounds |
|-------------------------------|-------|------------|------------------|
| Gennaro, Goldfeder 18 | [clicked here](https://eprint.iacr.org/2019/114.pdf) | {t - n} | 9 |
| Gennaro, Goldfeder 20 | [clicked here](https://eprint.iacr.org/2020/540.pdf) | {t - n} | 7 |
| Canetti, Makriyannis, Peled | [clicked here](https://eprint.iacr.org/2021/060.pdf) | {n - n} / {t - n} | 4 |- {t - n} means that the threshold is t and the number of participants is n. At least t participants are required to recover the private key and to sign a message.
- {n - n} means that the threshold is n and the number of participants is n.Hint: In order to make the description more concise, the [CMP paper](https://eprint.iacr.org/2021/060.pdf) describes the entire algorithm in the form of n-n signatures, and mentions that it can be adapted to t-n threshold signatures, but has not elaborated yet. We have supplemented the detailed description of how to modify CMP to the t-n threshold signature algorithm. Refer to ["Modify MPC-CMP as a Threshold Signature Scheme"](./Modify-MPC-CMP-as-a-Threshold-Signature-Scheme.pdf).
# Supported Curves
- Secp256k1
- Secp256r1 (P256)
- STARK CurveHint: The STARK Curve is a new curve used by STARK Ware. It is a 256-bit curve with a 128-bit security level. It is designed to be used in the STARK extension protocol. If you wish to use Stark curve, please follow the instructions below:
- Install the [OpenSSL extended by Safeheron](https://github.com/Safeheron/openssl/tree/stark_curve) (refer to the "stark_curve" branch). The StarkCurve is not supported by OpenSSL. We have extended OpenSSL to support the StarkCurve. Otherwise, you will get an error when you use the Stark curve.
- Set -DENABLE_STARK=ON and complile the library [safeheron-crypto-suites-cpp](https://github.com/Safeheron/safeheron-crypto-suites-cpp).
- Set -DTEST_STARK_CURVE=ON and complile current library.# Prerequisites
- [GoogleTest](https://github.com/google/googletest). You need it to compile and run test cases. See the [GoogleTest Installation Instructions](./GoogleTest-Installation.md)
- [OpenSSL](https://github.com/openssl/openssl#documentation). See the [OpenSSL Installation Instructions](./OpenSSL-Installation.md)
- [Protocol Buffers](https://github.com/protocolbuffers/protobuf.git). See the [Protocol Buffers Installation Instructions](./Protocol-Buffers-Installation.md)
- [safeheron-crypto-suites-cpp](https://github.com/safeheron/safeheron-crypto-suites-cpp). See [Install safeheron-crypto-suites-cpp](https://github.com/Safeheron/safeheron-crypto-suites-cpp/blob/main/README.md).# Build and Install
Linux and Mac are supported now. After obtaining the Source, have a look at the installation script.
```shell
git clone https://github.com/safeheron/multi-party-sig-cpp.git
cd multi-party-sig-cpp
git submodule update --recursive --init
mkdir build && cd build
# Run "cmake .. -DOPENSSL_ROOT_DIR=Your-Root-Directory-of-OPENSSL -DENABLE_TESTS=ON" instead of the command below on Mac OS.
# Use cmake .. -DENABLE_TESTS=ON -DTEST_STARK_CURVE=ON for stark curve.
cmake .. -DENABLE_TESTS=ON
# Add the path to the LD_LIBRARY_PATH environment variable on Mac OS; Ignore it on Linux
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib/
make
make test
sudo make install
```You can use the MACRO to exclude the specified mpc protocol like this:
```shell
# Run "cmake .. -DOPENSSL_ROOT_DIR=Your-Root-Directory-of-OPENSSL -DENABLE_TESTS=ON -DNO_MPC_GG18=ON" instead of the command below on Mac OS.
cmake .. -DENABLE_TESTS=ON -DNO_MPC_GG18=ON
```The macros are listed as follows:
```shell
option(NO_MPC_GG18 "NO_MPC_GG18" OFF)
option(NO_MPC_GG20 "NO_MPC_GG20" OFF)
option(NO_MPC_MPC_CMP "NO_MPC_CMP" OFF)
```More platforms such as Windows would be supported soon.
# Link the library with CMake
CMake is your best option. It supports building on Linux, MacOS and Windows (soon) but also has a good chance of working on other platforms (no promises!). cmake has good support for crosscompiling and can be used for targeting the Android platform.
To build multi-party-sig-cpp from source, follow the BUILDING guide.
The canonical way to discover dependencies in CMake is the find_package command.
```shell
project(XXXX)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE "Release")find_package(PkgConfig REQUIRED)
pkg_search_module(PROTOBUF REQUIRED protobuf) # this looks for *.pc file
#set(OPENSSL_USE_STATIC_LIBS TRUE)
find_package(OpenSSL REQUIRED)
find_package(MultiPartySig REQUIRED)add_executable(${PROJECT_NAME} XXXX.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC
${MultiPartySig_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME} PUBLIC
MultiPartySig
OpenSSL::Crypto
${PROTOBUF_LINK_LIBRARIES}
pthread )
```# Usage
## GG18
### Key Generation
Refer to the [test case](./test/gg18/key_gen_mt_test.cpp) for more details.At the end of the MPC Procedure, each signer will get the secret share:
- The secret share in base64 format:
```shell
"Cgt3b3Jrc3BhY2UgMBADGAUqrUYKCmNvX3NpZ25lcjIaAjAyMqckCoAEQTRCRDMxQkExN0EyMUYyOEExRjhBRkZEOEU0MUFBOTZEMjg0NDgzQkUwNzE0OEQ2MEUzN0I4RjI5RDQ3ODQ1N0I0MEY1RkZEQ0Y3MjBEMkUyQzExNEE1QjM3OUY5RUEwN0IxRkNEMjczMzgzMjU3RUM2Qzc2M0VEMzdENjRGMTZDQjgwNDk2NDJEQTdDNzI2RDMxOUFENTQ1RjkxQ0Q0RDNFOENGMjY2MUQyNTFBNUY4MjlBRkFCNUI0NERCQjZFNzZDRkY2N0E1NTE1NzRDN0ZDMDJCRDUwQUEzMDY3QUI4RUQ1RDhFOTRCOTgxNkU2REE2QzAzNDRCNDVERTRDMzFEMjNDMDc5Nzg2Q0VGOUJBOTJGQUQ3OUJFQTVGODdBMTYwRDFFOTJFNjNBQTM4MUU4QzEyMUVCOEUzM0VERThEMEYxNEY5MzNBOTI4QjBBQUE4OEM5RENDRjAwQ0QzMTgzMUY0RjUwNTVBQ0ZBNDQwMjAzNkI2MzcxMUUwNUJGMDlDQkI4MDUwMzU4NEE4NEYxRDYwRTJFQTM3RkJCOUVCQTBDMDg5RTQ1REE1NzExMTgyMTE4RjREQkMyOTRFMTBFNzZGNjVGMTdGNzE1NzMyMDY3QjI5OEE4NEZEQTZCRTA3MjVFQTdENUZFRkUwQzE5OEU1MDdEMTU5OTMyQzESgARBNEJEMzFCQTE3QTIxRjI4QTFGOEFGRkQ4RTQxQUE5NkQyODQ0ODNCRTA3MTQ4RDYwRTM3QjhGMjlENDc4NDU3QjQwRjVGRkRDRjcyMEQyRTJDMTE0QTVCMzc5RjlFQTA3QjFGQ0QyNzMzODMyNTdFQzZDNzYzRUQzN0Q2NEYxNkNCODA0OTY0MkRBN0M3MjZEMzE5QUQ1NDVGOTFDRDREM0U4Q0YyNjYxRDI1MUE1RjgyOUFGQUI1QjQ0REJCNkU3NkNGRjY3QTU1MTU3NEM3RkMwMkJENTBBQTMwNjdBQjhFRDVEOEU5NEI5ODE2RTZEQTZDMDM0NEI0NURFNEMxODIyRjQ0ODVDQzJCMkM5MzE2MTNGQkY3Mzk3MzhBMTE2MDAzQTM4RkUxQTFCMTJEMDczMzU5MzM0N0JDOTZFNkE3NUNCN0Y3QzU5MEUyODRFOURDOTMzRUYzQTIzNTVFNUQ2MDg2OEFGOTVFREQwMzkyOTFEM0M1QjY2NzM0NUU4NTE0MDdGMkI4NjMwODAyMzM0RkY4NTAzN0ZFNkE5MTI5RTE3RUE0MkQzNjBFNzhGRjI3NkUwM0E5QzI3RTNFREI5QjEyM0ExMERCOTI5OEQyNzA2RjAwNThBMjhDMDdDMjM0QzMwNjFFMTUxN0JBNkQ4RTNFMkRDM0Q1MDE4NBqABDlFNEEzRTlEQjJCOTc2RjFCN0UyNkYzRDI2MjI2QkUxRUFGRDQ2QUVGMUZDOTE4NzE5OTM3NjQxMjgzNDU4RjQ3MDM2MzlGNzAwNDlFRUUxMUVCNjU4NjZFQTU3MTU3N0FFRkQwREYzMjk4MjY2OEYzN0U5RjE5NjQxMjA3MUNDN0VBNjA4MUJCOUIyQjUyQzkxQjE2QzcyOURCRDA2NUFCOTAwOUJCMjk1QUQ2RDJGN0JGRDg4MEQ4QTRCNjk5NzUyNjkwM0QyRTFCMThGNTBDQTlFQ0YxMUE0QzgyQkQ0MzcxMkRFNjM5RDhCMDJGRDM1RTNGMTVBNzE2MkE2MDQ2MDc3Q0YzRkUwNTc3RDhCREQ0RTIxODg1ODlDQjZCRUY2OThFQjQwNzRCOERFQzcxQjc3NzlCRDgyOTlDOTMwMkQ1QTJEQTEyRDVDQzZFRUYxQzE5RTlEOTIwNEMzQUNDMzFGN0QyMjg2NDY1M0UxQzcwNzU0NDMzMDMwRDEyMUFDNTY1Q0MwNDRENUYwREI4ODg4RDMxRkU3REE0QkFFQjkzMDA3NEZCNTczRkY1M0EyRkM0NjJEQzQ3QUM2RUYzQzk2MDRCNDJGNEY5OTNBMTlFRTM3MzNFQjMwNDE4Q0I5NzE2NzRGMDhBNjk4OUM4N0IwM0NFQzBBREI0Q0I5IoACRDQ2NDYzM0FCNDhGQjQ4QURBMjZFRkRERjcyOTI2MUY4Mzc5N0IzRTZDMUY2QzE3M0QxRjFEODFEMjI1NTEzRTIwOEI0QkU5MzdDRTgxQjQ5MkNFMUJENDRGREMwQTEzMUEwNDcyN0Y4MDZCMjBCMDFFRjRFOTU0OEM0RDA1MzYzREYzMTM5RjI2MjFERTk4ODcwREFFMzI3OUZFMDAxN0Q5M0I2RDBFQzU1QUZERTJBNEZCMEZCQTg2RUEyQzZCRERGRDM0ODUxMDUwMUNBQ0IyNzlGRTIxRjRDN0QyQjc1Rjg3RTY5NURDNUZBM0EwQTc2NTU4MTc0MjFGNTc5RiqAAkM2OTAxOEI4RjdCMjBFN0RCOEY0QzFBNDhFMDk0ODQ5MzI4RkZGQzQ5ODc5ODYzREE0NkVBQjM2NzQ1MjA1QzQwOTA5NEJCMjNEMzMyNkQxMkRERTFBQzk4QjgyOERDMDBCQkE1NjQ1REJFMkZDOTA1MDdDQUU0OTJFNjlDQzJBNDZDNDlDNzMyNEQzNjNFQTM3Nzg2N0FCRjE4MzUwRjVCNkVGMUNFQjUzNDk0QUI1NzNGRTlCMzZBQjE1RUEzNjU0REVBRjlGRjZDQjY2MkQ5QjdENDU3NjVBRTU3QkFDQkVCNUI1MEJEQjhBNDJCMTA0OUFCQTM4MEZBNEQ5OUYygARCMDM2NkJCNkU3NjE4ODY4N0JFNjg1RTY3MzI5QTNFRTk3M0VBM0U2OTFERjZFNzhDNTZDRTU3QUNDMzVFMTBGQzEwNEZBQUQ1MTc3MDAzNjRFQkMxMTYzRDhCNUY5NTQzQjY1NjVEN0VCNzRDMzc0MEJEQkI5MTk2MTM2NzQ3QzgwQTMyRTA3RUU2NkQwNDdEQzBBQjhERjdBRjQ4ODYxNzU1NDE1RDc3RDNERDM2MzQ4REIxNjU4MTQzOUUwNTkxRDg3REE0MDA1NzhBRjdCOEY4NDBDMTlFOURBMUI1MTFFRTcxRUU5QzMwNkY1N0M3MTA0NDhCM0FFQkY3ODJDNURFN0IzMTIwMUI5QjZCNEEwNTI3NkRGMEVGNUZGMTgwQUZFQUE2N0ZCRjdGMjQwMzM0MDgxNUJCQ0Q5ODkzMzM0QTEzRjk1MDJDQjAyMERDNkM5MDUzRTUzRkNGMkYzOEVEQzM5QTZBRTU1RjM0RkI2RTRDQ0NBOTU4NURFNDAwNTBDREI3OUZGOTlERjc3MkE2Nzk1NDQwNTk0MDk5MzRFMTZEN0U0QzRFMzc3NUFDNkVCQzEwNEY5MzkxNkQ1QzAwNTE5MEYxMEUzNzQyOUZFOUMyRjgzNjEyN0RERTdDQUQ5QzE0NUQ5QjMxMTVGMTQ2OTNCOTY1MjdGNzRDMTqABDlBMDMzNzU5RjFBMTRBRDEyOUUwMkExQUVCOEFERDcyMzQzNDhENTc0NkE2NzVFQkQxQjEzMDM1M0E4MjI5NjgzQjcwRDA2NDU4Qzk4NkQxRDI5ODQwRjUxRUNFRTM0MTJCQTJCNUMzN0Y1NUVCNTlGRjRGQzU4MkFDRkU2RUQ1NDg0N0NERDExMDc4N0Y4RjFGMDFEOEFCQzE4MzUzRUM1Nzk2REQzM0YwMjlFNTE2Mzg2ODc0QTJDNzkzNEIwRTk5QjdFQkVDRTc3QzYwQzlENUM2MDBDNjQ2MkJEM0IwMTgxQTIxMEEzRTlFN0EwNUUwMjUzRDBERTQ0NTlFNkExMUNGN0IyRjYwQkEyNTBERUJEMDIxQzlCODVFMzc3RTI2NDkyQUY3RTY1MzI4NjFBRkIxODE1MUJCOTg2NzlGNjM4MjQwNzM1OUM3OEFCNDk2RUU5MEY5RjNFMkE4QTIzRTQ0OUJBNzY1QzIyMDg4OTIwQjAyMjZFNkJFNUYxNzQ5RTgzMzMyQzBBNTdEQkY3MEQyRjE4MkJFMjNGNkUxNTQzNUY4NzRGMTM1OEEzMDE2NUYyM0QxNTI4ODc1NDZBOTdCMjI3RkJBQkUzMjEwRjg1MjY4OTkyMjUwQzJGMDA4MDAxMEE3OUVGQzY2MDMzMDlBRkQzODJFQjZGMEMxQoACRDQ2NDYzM0FCNDhGQjQ4QURBMjZFRkRERjcyOTI2MUY4Mzc5N0IzRTZDMUY2QzE3M0QxRjFEODFEMjI1NTEzRTIwOEI0QkU5MzdDRTgxQjQ5MkNFMUJENDRGREMwQTEzMUEwNDcyN0Y4MDZCMjBCMDFFRjRFOTU0OEM0RDA1MzYzREYzMTM5RjI2MjFERTk4ODcwREFFMzI3OUZFMDAxN0Q5M0I2RDBFQzU1QUZERTJBNEZCMEZCQTg2RUEyQzZCRERGRDM0ODUxMDUwMUNBQ0IyNzlGRTIxRjRDN0QyQjc1Rjg3RTY5NURDNUZBM0EwQTc2NTU4MTc0MjFGNTc5RUqAAkM2OTAxOEI4RjdCMjBFN0RCOEY0QzFBNDhFMDk0ODQ5MzI4RkZGQzQ5ODc5ODYzREE0NkVBQjM2NzQ1MjA1QzQwOTA5NEJCMjNEMzMyNkQxMkRERTFBQzk4QjgyOERDMDBCQkE1NjQ1REJFMkZDOTA1MDdDQUU0OTJFNjlDQzJBNDZDNDlDNzMyNEQzNjNFQTM3Nzg2N0FCRjE4MzUwRjVCNkVGMUNFQjUzNDk0QUI1NzNGRTlCMzZBQjE1RUEzNjU0REVBRjlGRjZDQjY2MkQ5QjdENDU3NjVBRTU3QkFDQkVCNUI1MEJEQjhBNDJCMTA0OUFCQTM4MEZBNEQ5OUVSgAIyQ0YxQkQ2OTZDRkNGRkZBN0UzQzY0N0E3MjA5QUY3N0Y0ODczMTMzRjg3Qjk4OUJBM0Y0QTc3MUExODQ1MTUxQThGREMxMjhDMDVCN0RGQTEyREI4MDQ4MjM0MEU0MTM2RUJERUYyODU4QjMyREE5OUNCNDBENkE3NkQ4MUNBQUJGQkVBOEM0QjdCQTRBQjNGQTIyQjJDMDU0MkZDNDYxQTk5RjIzQkQ4RUQ0QkI0N0JENkY0QUIxMjUyRDRCNEZBOUQ5MUY1NjYxMDlEM0MyMDk1NDdDNEE2QzRDQjdCQzMzNUQzRDA2Q0JENEU0MzQxRDEyRDAzMUZGMjY4MUIyWoACOUM4Qjg0ODE4NTBDQkYwQjQ4RjJENkNENzM0QzJBQ0IyRjhGN0RGODIwNEE5MTFFQzk3QjI2MUIyNTVGNzVGQTU4RENEMDAzQkQ3MEI1NDM4MzIzRDlFRUQyMDhFQUZDNkUzM0QyM0NDMzIxMEY2M0QxQTIxM0FERDQ5RkYzRkMyRTM4MEJFRDgxOEIwM0VFRUNBOEIzQTgyMkY1RTRGQTYzMjEyMTYxQTQzRTA5QTk5NjEzMkE2RDg4NjJGMUQ4OUYzMkZDNDFBNjdGNTQxREFFQkE3REExRTQ3QTI4MUEyNzlGRDkxOUIwOENGQjQ3NUJBRUZENUE0OERGMzc4RWKAAkE3NzJBNUQxNDc5MkI0OTA1QkVBOEI2Mzg1MUY3NkE3OEVGMjRBMEE3M0EzRDM3Qjk5MkE3NjEwMzBBMEZGRUM3NzhEOEFDMDc3NzMwM0JBN0ZGMjlCOEMyQzlCMjVGRkFCNDY4MzU3MjdCN0YzMDY4MjQwREJFQTE1NzRFODhCN0UzNDZBREE2RTY3OTNFNDhDRUFGQjcyMjVDRTNCQjYyRjlDNDk1MTM2ODY0MjlBRTc4QkM1MDk2MUJDRTExQzM0MjQxNTJFQUY0NjQ4RUFBOTI1ODFENzg4N0IxQUZCMkMyQUE5OEYxMDhBQkY2QzhBNTI4N0U1NDJGOEQ1RURqgAIyQTA0OTQzNzcyQTU0RjcyNzAwMUVBRDcxQUJEMUQ3RTAzMDA4MUNDNzgyRUY1MUVEQUYzODUxQjRFRjI4RkM5QjAyQzdCQUU3RkMyNzE4REFBQkE0MERBQjk3OUEyQzM5RDg2ODQwOTE4QzFFRDJDN0VEQTlBOUI1OUM5RDgyRTE4OEM5MDg1QTM0ODVGRkI0QUNGQjQwM0NFOEQ2QkZCNTNDREZCODlBRjBCNDEwQkRERUI3MEM5MjJCMkY4NURCNUFCQjM1RTUwNEMxMjBGRUNDMkM3RDQ3NjZCNTM5Mjk3MTVEQkYyMkFGRDQ3NjlBOEVCQkNEREM2QzVBMjExOoYICoAEQTRCRDMxQkExN0EyMUYyOEExRjhBRkZEOEU0MUFBOTZEMjg0NDgzQkUwNzE0OEQ2MEUzN0I4RjI5RDQ3ODQ1N0I0MEY1RkZEQ0Y3MjBEMkUyQzExNEE1QjM3OUY5RUEwN0IxRkNEMjczMzgzMjU3RUM2Qzc2M0VEMzdENjRGMTZDQjgwNDk2NDJEQTdDNzI2RDMxOUFENTQ1RjkxQ0Q0RDNFOENGMjY2MUQyNTFBNUY4MjlBRkFCNUI0NERCQjZFNzZDRkY2N0E1NTE1NzRDN0ZDMDJCRDUwQUEzMDY3QUI4RUQ1RDhFOTRCOTgxNkU2REE2QzAzNDRCNDVERTRDMzFEMjNDMDc5Nzg2Q0VGOUJBOTJGQUQ3OUJFQTVGODdBMTYwRDFFOTJFNjNBQTM4MUU4QzEyMUVCOEUzM0VERThEMEYxNEY5MzNBOTI4QjBBQUE4OEM5RENDRjAwQ0QzMTgzMUY0RjUwNTVBQ0ZBNDQwMjAzNkI2MzcxMUUwNUJGMDlDQkI4MDUwMzU4NEE4NEYxRDYwRTJFQTM3RkJCOUVCQTBDMDg5RTQ1REE1NzExMTgyMTE4RjREQkMyOTRFMTBFNzZGNjVGMTdGNzE1NzMyMDY3QjI5OEE4NEZEQTZCRTA3MjVFQTdENUZFRkUwQzE5OEU1MDdEMTU5OTMyQzESgARBNEJEMzFCQTE3QTIxRjI4QTFGOEFGRkQ4RTQxQUE5NkQyODQ0ODNCRTA3MTQ4RDYwRTM3QjhGMjlENDc4NDU3QjQwRjVGRkRDRjcyMEQyRTJDMTE0QTVCMzc5RjlFQTA3QjFGQ0QyNzMzODMyNTdFQzZDNzYzRUQzN0Q2NEYxNkNCODA0OTY0MkRBN0M3MjZEMzE5QUQ1NDVGOTFDRDREM0U4Q0YyNjYxRDI1MUE1RjgyOUFGQUI1QjQ0REJCNkU3NkNGRjY3QTU1MTU3NEM3RkMwMkJENTBBQTMwNjdBQjhFRDVEOEU5NEI5ODE2RTZEQTZDMDM0NEI0NURFNEMzMUQyM0MwNzk3ODZDRUY5QkE5MkZBRDc5QkVBNUY4N0ExNjBEMUU5MkU2M0FBMzgxRThDMTIxRUI4RTMzRURFOEQwRjE0RjkzM0E5MjhCMEFBQTg4QzlEQ0NGMDBDRDMxODMxRjRGNTA1NUFDRkE0NDAyMDM2QjYzNzExRTA1QkYwOUNCQjgwNTAzNTg0QTg0RjFENjBFMkVBMzdGQkI5RUJBMEMwODlFNDVEQTU3MTExODIxMThGNERCQzI5NEUxMEU3NkY2NUYxN0Y3MTU3MzIwNjdCMjk4QTg0RkRBNkJFMDcyNUVBN0Q1RkVGRTBDMTk4RTUwN0QxNTk5MzJDMkJARDE5ODYxQjRFNEZERjhBMUZGQzUwMzAwM0ZGMDJGOTE0QTUwQjRCNENDN0QxODg4RkIxNUNERUVDODc4NUQwM0qPAQpANDdEODMwOEZEQzI3QzUyNEE0NDVBQTM2RDFFN0RGRTQzNDVCRDdFNzYyNEQ1NzBEQjkzM0U4MzE0MUZBMTM0OBJANzAxNTI4NDAwODEyRTU1MzEwRDNERjM5QzVEMkY2NDMxODFFRUQ4OTU3REQ4OTYyMzdGM0RFQjMyQUUyOUFGRBoJc2VjcDI1NmsxUoAEQkE2RkI3MTNGM0E4MEU4QkZCRkM0NEE4RkE4MEYzMDA3NTQ3NkJDODk3NTI4MTM5MkRDOEM2OEFFMEFFRUE0NkM4NDZFRDg1MUUwRUE2NTY5RjU0MjYwOTIxODQ4Q0ZFMkZBODRGNjhCNDg4QzZFRkEzMjczMzZGN0RDQ0MyMTI1OUJDMThGQkU0MjNDODE1QkFDRTA2OTA1MkQ1MUMwRkRGMTg2MDAwQ0EwQkYyRjE2QjlFQkUyMUI5MjYwMzhFRjZCNTk4OUYwQjU5Q0IwNDZDMDFGOUJCNEQ5OTZGQzg5RDhCQTc0NjAxQjY5QzlBNEZGM0REMjMzNUI4MDI1NUM3OTYzNEVCMzU0OEUwNkZBREJGOTJGQzNCMDgxMjYwM0REMUY1QjM3NjA5MzYwQjVDQ0I1MDM4RUEwNjQ0NzUyRDYxRDU3QjFDMjhGOTdFOTg2RjNGRjQ4QjVFMEJBMkVCNEQwMDlFREFENzc4NjQ0OEQ5Mjc0MzhFNEMyMTgwMjdFRkY4Q0I4M0YyMzg5RDdGOTUyQkY5M0I2QzE5RTk1NTk5QkUzNUMyRTRCQUE5MjQyMzhDN0E0NTFENDlEN0M5MDZCRkJEQzMzQkI1MzBGRTgwNUI3MkRGN0VFMEZGNTM1QTgwM0IzRjAwNDU3RUIyQ0ZEREVBN0UzNDRDOTFagAI2RjIxNjJCNDQ5RjM3MTY1Qzg2NEI5NDNFMzMxRjE4NTUwRDI1NDI2NDZGRUQ1N0EwODdGN0FFQzVDMzE2RjBCMkE1NUUzNjE2QjIyQTlBQUM0MDE0QzcxOEZFNkZERUI4RkVDQ0Q0OEFEQTg5RjI5MzVCOTBGQzhBQ0VDMUU0MTRGQTUwM0Q5QjdFQzNCQTNDRUM2MjQ4M0JGNkRDQTg4QTEzM0QxNjEyQUQ0QkRDQjRCRTcyMzY2RUYzRDhDNzY4MTE2MEY1RUE4NEQ5QTdFQzVDMjEzRTcyMTNCM0EyNjUwM0U0REQ1NThFOTE3MDYxMzhGQ0Q2QUYzRUFCOTU3YoACNkI1RTYzQTRBOEJCMjg4NzI0NjZFRjhDODU4QjUwOTczOTQzNzFEMTE1QTRDQzc5MzBBODEyMTQyNkVBNUE5QTdFQkFEQzczMzdCRkQwNkIxRTg4NjA1NkJGNDFBQUUyQzhCQkYyRkIwNzNBMDk2RUM0N0Y3MzZBQzc3QTgwMENGNTYxOEZENjhFNEM4NTQzODk0MjZCRjU5ODkwOTQwRjM3Njc1MjZBMzVBMzQzNjlGQzFBNDBGNzc5RkQ4MEUzM0NEQTEwNDhDMDY0QThGMTU0RUMyRERGQzVDRDdEREY3NENGREJDQkJFRjY0NEFDNTFDMDYwREM1MDUzODI1RmqABEE3QjY0M0JDRTkyNzJBNjFGQkM0M0NDN0I4MkQ5NkI3Q0FEMkI3REIyODE1RUI4RkQ0NjMyODlFRTQ4OUYyMUIzQkQ1N0Q2NkI3QzVEMDI5NzE4MEQ3NkM0NjczNDc1RDRGRURCRTVDNTM1NzI4REYwMUI0QjgyMDk2RjRGQzU3QTM2RUQyNDc0QjIyNjREQjQ4RjdBQzI4NTEwNEM3MjhGRkE3MEM0Q0M4NkE1RDM0NDkzRDU3MjQ3RTcwRjY2RUFEODVEQTVBNjFGRERGMUQ0Mzc4ODQ0QkJFOUY3MjdGQzc0MzM1NDAwMjQxMzZERDZCNDdBMzkxQTkzOThBODEzNTY1NzE3Mjc4NjE3MEI3RURFMTcxNTkwQjM3Q0ZERjU2Q0Q5Q0E3REQ3NjRCOEI5NTg4QjFGMDJEMkM2OTFGMzg1MkY4NkVFNzZDNDI0REM5ODIwRUI1MTdEOTc2NUIxRkIyQ0EwQjFCMjk3QjRBMEMyNjM5OTNDMTNENjBERUUxOEYxRkEyMkRBMTEyN0YyQURDNEMzMzE5OTEyNjc5QTM3M0FCRjdFOTY4MTJEQjEyQzUxMEM4QjhBQzMzQ0FCMTE1OTRBQUJENkFBQ0RDQkREQ0I3NDdDNUIxRDRBRTM5MEMzQkIxMDQ3RjQ2QTY0N0NBNEFFRjE0RTMyRDRCcoAEMUUzM0UyNjY5N0MyMjNCRjI3RTUyQkVFREM4MTFCNUU3Qjk1ODQ4OUNBNUM4OEE1QTg1MEY1OUZGMjIwRjFDQkFFMURFMjczRkQ4RkFEOUFERTEwQjBDNDU4MTc3RDEwQjk4RDdCREE2MDFDRDIzQTUwMERENjRBMzg4MjUyNUY2M0ZEMEI4MjA3M0M5QjEwMDVGNTMzQ0VERkU2RDk1QjBENTg1QkZCOTEwNEE0QjdGM0ZCMUI1RTE0NEEzRTAyMjcxMzc5MkQzQ0YyNzNBODU1NkFFRjk5RDQ2NDFFMkY4NTEzMDE1MDJBMzI1NkEzQjMxNEU4NTVBRkIwRDg5NEUxNTA1QjE2NUZGODU0MzY4RDYxNjg0NzhDNURFN0QwMjBGOTIwMUM2OTg2RjM1RDA0MDFDQ0I5QjE5OUIzOUZDNTgxNTY0M0UwQzZGODQ4QzVFODFGNTFGMTk0QzBFMTc2N0Y4NTFBNUEwMUMwNTVBMTI5REIxRDZGOTMwRDdBMTcxMTg2MTY5Qzk2NzNCREY0NzFEREEzNzFCNDJDQTIzQTMxNDVFQjYwNEI1QUU3QTc4NjRDMDQ1M0Q3QTMwQTRBOTZCN0RDQkFENzU5RDFCNUQ4MDAzRTFCOTRGRTVGMjAyQzAyQjExNjFBNDA1MTY5OENEMERBOUYyOTAyMDN6gAQyM0MyNjkxREE2ODU3ODc1MkI5NDhENDk2NTY4QzIwOUQwMjhCQzkwRTMxNjEzQkU3NTMzQzkwODg2NjM0M0Y3QUQxNDhDRDM3MUU2MjQwNTQyMEFBMTcxMzRGMDJFOUM1QkE2MTMzNjY0M0Y0RjYyOTc0OEZEOTNFQ0Q0NDVBQzg0Mjk5NUQ5MDI4NEEzQUIyMTUxQTgxMzE2MzU2RUY1ODcwOTYwNjFEMzA3QzQ5MzdFNUE0NjFCMDlEOTA3RDdFMDY2RjRFREEzRTBCN0YzREE5NTUwOEQ3QjgzQUU1MTcwMDQyNkRERTI2QUJENEU0MUZBNTBBNENCMzQ4NUVFRkM2RjE0NUQwQkMzNzM3REFGRTExQTBBODJENTRGQTZCQTM0NTc5OUEyNDJFRUI4NEYwQzQ5Qjg4NDMwQjE5NjYwQTFEMzVBQjI0NDIwMEMzREZEREFGRUUxQzhBM0M2NTRDRDY0RTUwMTc5M0MyQjFFRTVGOTEwRDk1OEY2RjdGMzIyOTAzRDEwRTc1MTUxQjZFMzcxRjVDMDM1MUVEQTNBMUIzQzJCQTAzMjkyMjlFRDI1MEMxRjE2N0I5OUY1ODRCNzdGRjhGNUMzM0Q0RTU3MzNDRTE3QTJBMzNGQTQ4NUM3Mzg5ODlCODlBNUNFQkU3NDk4Q0M5QkNGRkJFRYIBgAQyNDkxRDczQjkwQTRBQkIzQzc0QkU1QzY5OUJGQjZGQ0Y0QUVGRDE4NkFBMTM0Q0MwRkZCQjk4NjEwMDcxOEY3ODVDMTREOTRDQjBFOTlBMjhCRThCQzI3N0QyOENBMjZCMDY5MUZFNDVGNjBFNjUwOTcxQzkwMTg1QzI1NEMyOUI1OUY2QjRCNzQwQkNBNzhCMTZBOERENzNGOTg5NENERkE1QUMwODg0RUVFQkM2MzIzODQwRTJCMTg0MUJFMkJFNDc2OEJFQUQ4MjBCREZGMTc2NUEzQkY2NjE4MUVGQ0M5MjgyRjA5QjI1Q0EwRUUxQzcxN0ExQzc3RTlEOEIzQUU5MjkzQTJCNTJFOTQwMTZGNkU2MTVFRjY5OTY5MDQ3QzlFNTJDNjlDNUYxM0I0RjFFNTlDRkI4MjMyQ0M1OEI4QTJDRjI4M0RBODRDNzhGQUE5ODY2QkU0MUUzQTNCQkQ2MTI4ODE4ODBCNkZERTYzREREQkEwNzc5NjBFRkMwRjE0MUI2RDczMEYwOENDRjU5RUJGQjMyRkVEN0FEMTI2RkU5NkREQTlBRjQ2REY2REY2MzgzOUUyNDRDMjczODM0NzZDRENFMDg3MjY2Q0Q5RDQ5MTBCNUREMkYzRUU0QzhDRjkxMEVERkY3QTM1RTdCMDM3QUZEMDZCN0ZGNDK0FQoKY29fc2lnbmVyMRoCMDE6hggKgAREQzNGRTgxRDREN0Q5MkVFMDFFNjhDNDBDMEIyMTJBQjgxRTgwMEMzNjMyM0RENjY3QjA5ODQ2NjkwREYyQTg5MUU0RUY3RDhDMzYzRkI1ODJDQTU0QzFENzdCNzQzNjI1M0I1RjhERTMzMzk0OEYxNkYxREY1MTlENjhGNTE4QzU0ODcxMkU4QTk0QTBCNUU0QUQzMjREMjA2RjVBQUJEQ0FENkE4RUI5QTVGRTQxMjY5MzVDRjZEODcwMERGMzZDRDU0OTYwOERBNjU0NjlGMzFDRUZFRTI5QUY2MTEyRTI2QjM0QUJCMENBOTZDQ0JDNDFDODQ4NTU0MUNCRkEyMkExMjhCQUM2MDBFMThCN0I0OUEyMjVFQTk5NkFCOTMzMkU3MkE2NjAxRTIzRjFBRTJFQzQyMkEwRDRFMUUyMTAyMUQ3RDEwQzkzQzE1REY4MzRGRDIwMDVFMzc2MUU3NjAyNkQyQzg5MDA4REI2RDk0RjI4NDM0OTdDQUM0M0NBQ0U0QkM1NzZGREEyN0ZEOTNGRTZFRkREOTE3NzA2MjUyNDlDNTJCRTM4OTk3MEM3QjdDRUQyNUI4OTZFMjVCQ0I4N0VGMTU5MUY3Qzg4QzU0QjUwMTMzOTNCMTM4ODE0QUVFMDY4MjlGNzcwOUI5MTI0RTIwNTE3RTM3QUQ4NRKABERDM0ZFODFENEQ3RDkyRUUwMUU2OEM0MEMwQjIxMkFCODFFODAwQzM2MzIzREQ2NjdCMDk4NDY2OTBERjJBODkxRTRFRjdEOEMzNjNGQjU4MkNBNTRDMUQ3N0I3NDM2MjUzQjVGOERFMzMzOTQ4RjE2RjFERjUxOUQ2OEY1MThDNTQ4NzEyRThBOTRBMEI1RTRBRDMyNEQyMDZGNUFBQkRDQUQ2QThFQjlBNUZFNDEyNjkzNUNGNkQ4NzAwREYzNkNENTQ5NjA4REE2NTQ2OUYzMUNFRkVFMjlBRjYxMTJFMjZCMzRBQkIwQ0E5NkNDQkM0MUM4NDg1NTQxQ0JGQTIyQTEyOEJBQzYwMEUxOEI3QjQ5QTIyNUVBOTk2QUI5MzMyRTcyQTY2MDFFMjNGMUFFMkVDNDIyQTBENEUxRTIxMDIxRDdEMTBDOTNDMTVERjgzNEZEMjAwNUUzNzYxRTc2MDI2RDJDODkwMDhEQjZEOTRGMjg0MzQ5N0NBQzQzQ0FDRTRCQzU3NkZEQTI3RkQ5M0ZFNkVGREQ5MTc3MDYyNTI0OUM1MkJFMzg5OTcwQzdCN0NFRDI1Qjg5NkUyNUJDQjg3RUYxNTkxRjdDODhDNTRCNTAxMzM5M0IxMzg4MTRBRUUwNjgyOUY3NzA5QjkxMjRFMjA1MTdFMzdBRDg2So8BCkA4QkZEMDlGQjc3MjMxMjFGNkEyMEJFQjk3RDI3QTE5MjczOUE4MDY3NUI4NjdENEY0Qjk2RDdDRUFCQTIzNEQwEkBFQzAyNkIyQUM1NTQxNUJERjMyQ0JFNzM5NEMwMUY3QjNGREE3REVBQUIwM0Q2RTZDMDNBNzdGRTBGRDA5MDhFGglzZWNwMjU2azFSgARCNzcxQTJBQ0QyNUU4OTdENzdDNkY3MjI2NjBEQUZGMjI5NDNGQzRFQjE3RDZEQTYyODc5REVEOEJBNTZCOTY1NkE3Q0RGOUVGRjNFRUUwNTYyREE4NzZENDhEODEwOEU5MUY3MzFDNTM5RTFGNTc4MERDMzUzRDY2QjdCNjg1MDM2OTc2ODBCN0Y1OEIwQTVDODZERkE5RUI2QkQ5NkQyMTNBOTlEN0E0Q0ZERjYyRkI3RDBFNzMxMEVERTFEODBDQjc1RkI4Qjg1MDNCMThFODg2REI1NkVGNzMyMkJDNTI5MTFBMjc1MDVFRkYxNzI3MEJEQjI5MzRGNTZDN0M5RkFFNTI0QjA2QzExRjgzQTkwNDczNUJFRUU0RDE3NUVDNDQzQjVFOUY0QTNDMUZDNTcxMzBEOEFENzIxOEJBMjkyODdCNEVDRDZFQzNBOTlEQjEzRjlDNEU0QjM3QzMwMENGQkM3MjFEMTNBMUM3MDU2RDRERjNCNEE2NTdDRTA1MjZGREUzODk1OTM0M0NCNDdGMUNCQTlDMUI2NDhFQjE3ODk5QTRBMDFDOURGMzZGNDg1QUVGMEI3NjRDOUFCODMxNkJCNzVGQ0Q5MUI3QjIzN0Q1NTBFNThFQzFFM0Y4QTIyMUU5RDUwQjI3NkY5M0I2REJCNTE1RDNFQzVENWqABDRFOUIwRUFCQ0JENUQzQ0YxM0ZCQUIxMUExRTAxRUQ2NzJEQTVFNDE5MDgyOUNGRTdFMzRCQUFERTE3MUY0NkNCMzk1NzBCMUQ5QjJGMEIwRjU2NEQ1NjVFNTA3QkIzRTkwMDZDMEYxRTY1ODYzOTg5NUJCRjU0NkNFMjJGRkM2MkJCNEUwQUY0QUI5NDY5MDlEN0EzNEVCMjM0RTEzQUEzMTI2OUQ5RDMxQjY5RkFDMkQ4OUYxNkRGRkQyMEIxRjI4QkE0ODhBRTJDNzg3QUIxNTREQjg2MEY3M0YzOTc2M0NFMjhBRjI1MTRDNzVDRjA5MDE3NzE2REY5QTcxNzFBODUyMDdDRUE2MTQxODQ3M0E3QkM4ODU0REI0RjNGNEIyMjgwRjM2QTA0RDVDRDlGNzAyMzI1RDI1QTAyMThGQTA4NDFEMTQwREU3MUZBNUY3MkRFNjZCMzVBMTQ4OTU4QzM1RkVCODM4MTZENEJCMkZDOTg2MEU3M0YxMDFBMDA3RDdDODI4NzI1RDUyRjhBQjczMTIzNzNCQTA0Qjc4NUNDRkVFNjNDRjMzODRBNzcwNEJCQkZGOTY1NkY5OTI1M0Y4QkIzODJCQkM5NkUzRjRFNDY5N0Q5RkQ4MTlFOEQ5RDIwQTBDNTQ0ODhBQjFFNDZEMEIxMjI2MjdCMjEycoAENTM3QjQ5RjgzRjU2QTUzN0JBM0UxNzlBRjk2NTgwOTM4NkFBMEZDQzFCOUFDMzMyOEZCMDBGMTE5QTZENzVBQjQ0NzBBOTQyQzA0ODEzRDUzM0E4NTA5MkFDRDE4RURFNDczMzlFMjYwNDM3QTJFMDc1MEQzRkM5QjcwRkVGMDE4RTA5RENENDI3OEFCMjY0MkQxNzhBMkE5RjRCNDFGMjQxRTI3QTRBM0FEQjhERjcyQ0ZCMUYzOTk1RUZEQjU0NjE0NzlGNEE3QTIzQTc2MzExODJBRUFCNEFCMzk0NzEwMkRCRUFGRjFCRTRBRjFDRDM5NTY0NDhDNzQ5NjcxRDk1MUMyNTU5QjI2QUY0RkZEMTQyRDUxODRGRDI0RjI2QjlEQjVBRjgxRTE2RTJCNDQ4RDMxMTc5NTdFNUNCNDZFMjEzRTlGMEM2NzhGQTJGQ0YwMTc4RTNFQjZGN0ZCNkEwOTkyM0NDRTE2QUVGOThGNjkxQkMwQ0I1MEUwODhCODI4MEFEQzI0NDdFRUYwOUQ2MjJERERCNUUwNTEzQzFCRjhCREYxQUMzMjA3RUI0NDUwRUJGRUNEMUJEODUzOTcwMzNCQkRDMjQyNTU4NDkyNjU0RUJBQTlEQjA1NjU1MkUzRTAwNjE3NTYzMEEyNDg0RUI3MjAyRjI4RTFBRTYytBUKCmNvX3NpZ25lcjMaAjAzOoYICoAEQUQ0MjUwODRCMDI4QzIyNTYxQTJDQkVEMTQ0OUNCOTQ5NEI1QUY0NDBGNjg3RkU3NkM0RUUwMzJCOTM5Q0Q4NzY5MzBBOEJBNTI1N0Y1MjEwREQ4RUVBOTUwODI3RTIxQzg3NUY4MzU1NEUxMDhCNTUwQjc2NTdERTA2MzlDMDhGMjdFMzlDMzExRUQ4NkZBQjc4QkY4RTQ3N0M1MjU5MzQwREY3NEVCRDA3MEY2ODQxMTc0MkMxRDIyMzFFNUFBRkRFQUY4RTM2RkU1MEJEODAyOTlFQTQ2MzNFMjg0NDdGQjU1RUM5MDk1QkNBMDkzOUMzOEZDMDQwQUE5QzNGMTQ5NkNDREUxMDM4NjlGNjlDOThBMkEyOUZBRUU4ODYwQjIyNTEzNTU3RjRCMTVDMDBCMTZBQURGRDc5MERDN0JGNkE0MDZDRUUxQjVEQjhERDE1QUNEMThBMEJGQUJCQjk1MDY4QjJEMjIwODgxNDI4RjkyMjYzMTY4M0NFOEExNUM1RTE1RjNDMkYyRDY0NDQxNzIwRkMzOTA0NkE1NEZGMjdENjlCMjIxOUI1MDUzQzU5MUFGN0M2ODk0OTkxNDA5QzM4MjFBQUE4OTlBN0QzODg5ODMyQ0I0RUQ4NjY5MzU3RTg3Mjk0NjNBODI2MjlDNjVEQUZDQzM1NjQwNEQSgARBRDQyNTA4NEIwMjhDMjI1NjFBMkNCRUQxNDQ5Q0I5NDk0QjVBRjQ0MEY2ODdGRTc2QzRFRTAzMkI5MzlDRDg3NjkzMEE4QkE1MjU3RjUyMTBERDhFRUE5NTA4MjdFMjFDODc1RjgzNTU0RTEwOEI1NTBCNzY1N0RFMDYzOUMwOEYyN0UzOUMzMTFFRDg2RkFCNzhCRjhFNDc3QzUyNTkzNDBERjc0RUJEMDcwRjY4NDExNzQyQzFEMjIzMUU1QUFGREVBRjhFMzZGRTUwQkQ4MDI5OUVBNDYzM0UyODQ0N0ZCNTVFQzkwOTVCQ0EwOTM5QzM4RkMwNDBBQTlDM0YxNDk2Q0NERTEwMzg2OUY2OUM5OEEyQTI5RkFFRTg4NjBCMjI1MTM1NTdGNEIxNUMwMEIxNkFBREZENzkwREM3QkY2QTQwNkNFRTFCNURCOEREMTVBQ0QxOEEwQkZBQkJCOTUwNjhCMkQyMjA4ODE0MjhGOTIyNjMxNjgzQ0U4QTE1QzVFMTVGM0MyRjJENjQ0NDE3MjBGQzM5MDQ2QTU0RkYyN0Q2OUIyMjE5QjUwNTNDNTkxQUY3QzY4OTQ5OTE0MDlDMzgyMUFBQTg5OUE3RDM4ODk4MzJDQjRFRDg2NjkzNTdFODcyOTQ2M0E4MjYyOUM2NURBRkNDMzU2NDA0RUqPAQpANkZGRjQ0NTgwREI2MUJBMDJEQzg2REY4ODU4NDhCREIyNTkyMDBENzUyNEU4QjhGREQxQjhGQkFCMUZBQzczORJAM0ExOUM0QzhFNEE3Q0I4Q0VCOTUwNTA1RDREQTg5OEM0RjlEQzU4NjVEQ0RFMEUyOEMzMTY0NjkzNUE1NzQ3RRoJc2VjcDI1NmsxUoAEQjA3MEU5ODA5MjA2Q0REM0NCOUQyOEEwQjhCRUFCMDJCMjc4RThEQjk4M0JGM0I1M0ExQjdEM0FDMTIxREQ4MDgzNkM5M0NDMUZDRkQyNkZCRUI4MTI5QzA1NDRDMUEwMjU0OTA0MjZENTVFRDE5ODA3RDAwQzBEQTczMEI0M0I1MzU1MDA1MjQyQkFEQzI4MkNCN0QyRjE5OUY3NkI0QzMzMUVCRDA2NTExMkJFQkM2M0ZEQUYxQzcyNzkyNkEyNjIxM0IyQUYzMjY3QjQ2QUFBNTFGRTFDNTE2MEFGNjc0QkFEMkJCM0FEQTJBMDdCNjc4MTcwQTJDMTM4MDdFNDA3NkRDOEFDQzVBM0Q3NUFDNDBENkQ1NEZCMTE5NjNBNDYzOTdGMjQ1NUNFRkYwMjU3RDBGQTMxOTkxNUVEQzczNTM0MUIyMEVCNDhDMUJGODM2RUMyQ0UwQjI4MEFEQUYxRUY4NjIzMkE0Rjg5QkE2MTUxMzE4REM4RjgwODg2Q0UzMEYyRDFBQzVGMTM0RTRBOTBBQjc3MjVEODc0OTQxRDJDRkNBNTcxRjk0Q0MwOTdDMzZBRjdBREZGMUQ1NjM0Mzk2MThCNjE5M0ExMkUwMUYyNjJBOERFOEYyRTAxRDNBRTk3MUEwOUVGMzVEMkZCMTcwRDE3QkU5QjM4MzFqgAQ5RTJENDE3Rjk1M0RBQzE5QkIzNUNGN0Q4MDM1NzcyMDlFRDg5ODc4QzI5MzlFMTRFREZCQjQ2RDMxMUU0OURDRTE2QjE2REI5N0E2RTgxQTQyOEI0M0VCQkI3NUJEMjNFNkJDNTNFM0I4MzkwNjUzRkFCN0NBQUE0MjRFQ0Y4MTQ4RDIyNTc4NUZBNTBCQkNBRjNBREE1MDQ1QTBERTc0Q0JDOUEyQjU3MkIyMkRGNkU1QzFGOTIzQjJCRkNBRjgwNjhCMjE2RUMzRUMyOERBNDJCMTUxQzc2OTdEMDQ0NzYyRkJDOTAzQ0QyNDQ1NUU1NjBDQzA3MDZFRUVCMUU4MDZBRDFGN0E3QzI2MUJEQjExRTA2NkMxOEUyNTREMjE0Q0MxNkNCNDNCQTkwMjY0MUE5NUI1OEI0RkQ1QkMwOTlGOEVDOTQ5MDVFQjk5Q0Y1QTUxNTE3ODQxMjg1OUJBMjRCNEUyNDAwQkZBNDczQTEwNDMwMzZDMTQzQ0RDQTlBMjk1NzExQjA1NzIyNkM2NTIwRjQ1MDFERDkzMkFCNDBFNjIxRDg2MUZGMThEOUVCMEVFRkIyNzY1RTZEMUIzMzEyNDIzNTFDOEM0RkUzRjk4MDc2NDYyRTJGMTRGQUY1MjZFQTY2OTAwMzI1RTEyNjY5OTkxOEQ4NzFBMDE0OHKABDVDQTlDQzRCMTJEQThGNzc4MDUzRDNGQTJGMTY1NTBERUU1NDFGNjBCRDJDMkM0RDRFQTQxQUY0NjZBMDMyOTgwNTU4RUVFQzBFQTVCMkQyQkZCQjE0QUE1QUMyQTg1Qzc0RkU2MDQ5MDFCM0I1OUREMzE4OTNGODE2OTMzMEU2MzJDQUQxQzIzQzhCODFEMDE0QzE2NTIyRjMyMTJGMEZCNERFQkY1RUJGNzEzQ0NEMzBDQjQ3RkEyRTBDMERGRUNEOEI5RDE4OEU2RDA4RDVEMkFFNjZFMTM2QzAwREY5RDM4RjE2MTlCNzNDQzI4NDYzNzhGQTgxMEU1NkQzRjUxQ0M5Q0Q5QzA0N0RENzU4QUExQ0Q5NDE0RjRENTMyODkzMkYwQkNCRTQ5N0QyRjEyM0U3QjI0OUE5MzA3OTkwRTg0MUVFOTkzRjMzRTUzQTFFOEM3ODE2RUNDODRBQkYzRDJFNEI4RDM4RTUzOTdGMzU3MEJFNjYxNEFCQjQxOEFCRjg1MjhBNkVBRDQ5Mjc0QTA5NzA0NzBCNjY1NjFBNUMyQjhEOTVENUY2OENFNzVCQUQ1ODBCODI2RTU2RkY4Mzk2NzVERTdEREFBNUU1RjMyQjgzMjAyRDhCMTE4RDlCOTczRDEwMDc2RjU0OTU4QjkxRjMzQTYyOTBFMjQ5MrQVCgpjb19zaWduZXI0GgIwNDqGCAqABEZCMTY4RTNENTRERDk4RDFDN0YyMkRCNDBBQUEzNkY3N0JBMENCNEQ1Mjk5QjVDRTNCODYzQTIwQjRDODhBMDNCRjYyOUU1REZGMDAxRURBOTQzMzg5NjhEREEyQTY1MzMxODc2MTRCQjcyNTg4NUY2RkM3RTYyQjI4NzhBNDk1OUU0OTgxOTZDOEQ5MTEyREM4NUU0NkUzM0E3RERCMzRDNjlCQzk2NDcyOUQ2RTBCOURDMkYzRDgwNEQ1QTY2QjVBQUI4MkJBQUZFRTREN0E5NkY2QUIzMUEwN0U2NUU1NDZERUUyMUFGMTVFMTlEMEY5NDJDRTQ2MThDQUFENThCRDYwRUExRTM4NTAzNkU4QTQyNkIwNTY4QTU3NkI1Q0NFMTczNEMxMTcwRDg1NjQ3QjIzMTYxN0NFMDdCODc0RTk5MTYxODFDMEZBNTZDREQ5ODg1QjYwNDcyMEFDRkE4QzBDNzM0ODVERTcxQ0RBMkEzNzZDMjJCQkQ3QTRENjRGQzcxQkVCNjE4NEM5QTk2Mzc3RUQ3NEUzN0NCRTFFOENBNkY1NkE2OTBGMjhFNjU3RTBDMUQ2OTYxQkMyNDQ3M0QzODIyRjNCMkMwMTA1REExODk3OEUwQzQ3MUUxRTk3Mjk3MEIxQjg3NkE2Qjc1MjI0M0I5NEMyQTc4MDU1EoAERkIxNjhFM0Q1NEREOThEMUM3RjIyREI0MEFBQTM2Rjc3QkEwQ0I0RDUyOTlCNUNFM0I4NjNBMjBCNEM4OEEwM0JGNjI5RTVERkYwMDFFREE5NDMzODk2OEREQTJBNjUzMzE4NzYxNEJCNzI1ODg1RjZGQzdFNjJCMjg3OEE0OTU5RTQ5ODE5NkM4RDkxMTJEQzg1RTQ2RTMzQTdEREIzNEM2OUJDOTY0NzI5RDZFMEI5REMyRjNEODA0RDVBNjZCNUFBQjgyQkFBRkVFNEQ3QTk2RjZBQjMxQTA3RTY1RTU0NkRFRTIxQUYxNUUxOUQwRjk0MkNFNDYxOENBQUQ1OEJENjBFQTFFMzg1MDM2RThBNDI2QjA1NjhBNTc2QjVDQ0UxNzM0QzExNzBEODU2NDdCMjMxNjE3Q0UwN0I4NzRFOTkxNjE4MUMwRkE1NkNERDk4ODVCNjA0NzIwQUNGQThDMEM3MzQ4NURFNzFDREEyQTM3NkMyMkJCRDdBNEQ2NEZDNzFCRUI2MTg0QzlBOTYzNzdFRDc0RTM3Q0JFMUU4Q0E2RjU2QTY5MEYyOEU2NTdFMEMxRDY5NjFCQzI0NDczRDM4MjJGM0IyQzAxMDVEQTE4OTc4RTBDNDcxRTFFOTcyOTcwQjFCODc2QTZCNzUyMjQzQjk0QzJBNzgwNTZKjwEKQDZBMEM5RDc1RUVDOUFBRUQxNzUxNzhBQjRFMzk2RjlCQUU4MzEzOUYxOTIzMkU5NzZEOTdGNDAyNUQ5MjFFMEISQDU5QUFGMjM2Q0I2NzRDQUIyQkNBMDQzNkEzRjI2QTNERkUxNzVGQTY3MTFGOEYzOUY3RTYzMUQ1QUQwOEY2MDEaCXNlY3AyNTZrMVKABEIxRDQ3NUREMTA4MjRCODY3Q0FFNzUyQjQyMDk0OUM4NkMyQkVBQzhCQjFEQTg4Nzk5Q0UzNTA3RjM1RThBODk1QzJEREYyNTI3RDA4NkQ2NzBCRUYxOUZGODgxMDg3RjBENDQ3MEE1MTZFM0Q0OTNBNDRERDJGQ0YzMTdFMUExOTNGRTc5ODc5MzJENjk2N0ExNzc2NTNCQTgxNEQwNkYyNzZBODkzRUZBNjAyOENEODlBNzVCQTY3NjNERTRGNkZGQTQxOURFQ0VBMkRENThFN0Y1M0VGRkQzQjYyMzBEN0IxRkQ1MEU4N0IxODMxNjFCMTU4REE4QUUzMjI2REU1MUY0RTBDQzMzM0E2NjM4RTNGRDk3M0Q3REIyQTgzRDFGNTQxQUM1RDQyQ0MzNDQ0ODhEMTE5OUYxMzdFRURCMjJCQ0RGQkNFMkE5NDVFODBBOTc2RTQxMTkyOEU0MDJBOTNENTNEOTAzQ0Y3RjJBMUFBNEU5RDg4NjZENjlDRDdERDBFMTNCOTA2M0YzQzQxQUE5QjQyOTE0NzE2OUQxQTRDNDgzMjc1MTJENEFDQjJFQkZDMzhENzgwRTg4RTcxNTYxQUMyQUY2NDhENjVBN0ZEMDlGOUREQTE5NUEzREEzOTUwQkNCOUJEMjhBMjhDQTM5Q0Y2QkQyMkJDMEVEaoAENEU3OTZBQTlCRkQwQTU1RjcyRDc1MUM3RUE5M0ZFRTE4Rjc3NTdEMThEMjlBNzM0NDkwNDlGNjBEQzY5RkQxQjI4MDA0Nzg3MEZENTZCN0ZFNTJBREM3OUFGQ0QzRjlFMjE0NERBQ0FCRTUwMjcxMUY2RDVEMkNBRDUyMThDQjYzQzhGNkRBMjE3MDdEOTUzQzk1MTFFREFDODRCREFDNEJDNzExRUM4NkZBMjVCOUMxMkZDMzZGQTk0RDgzRjg4MjEyNEMyNEQ0MzRGRkM4NjJGNTVGQjRFMkMzRUJBNTRFNTYyMzdGNDRENzM5NDM5NEFDOUU3RDVBMjIzRkM5MUEwQ0VCQkIwRkE4ODM3MzAwRUJBOTEwMzkxNDNDMTZEMkI0QUM3QzA5RDQ4REE1OTdEN0Y1OEM4QjI4NTVDMEQ4MDhGRjdBM0M5QzEwMjczNDk2MDAxRTEzQkEyNzkzRDdFNzM3NjY5MEI0Q0RFMDE1Mzk5OTBDNDMyNDQzOEM2NzBBQzE5NzU5QUYyMzNFMTEzRTAwQzgzRThFRDUwRjVGN0Y3MDIxQzc2NkE2RUFGNDVGODc4Mzc3OTkyN0UxRjAyRDg5MDA0NTJDREI1MkM5OUREOUM3Qjg3RTBDM0MzNDgxQTZDMDg0NTZFQkM4OEE2OTgyMzYyRUNGODNCMEZygAQ2MkI2ODA2MkZBOEQxOEJFOUFBODEzN0E2MjYwN0MxNjRFMUYzNzg3NEQwODBCODU4NzZEMDI5NzE5RDAyMDFCODY1RTY5QzM3QUM4RDc3NDU0RTFFMkFDMUVFNjg4MEY0RTYxMTI2NkM4MDIyMTNDQkY1MDVBOEFBRkRCRTBCMzYxOUIzM0I2OTU3N0VDOTUzQzdBRkNEMjFFNDhCNzdCQjNDMzgxODk0NjU1MjcxNTgwQjE4RTcxMkQ5Qzk1QzkyRURBRUY3NDcwQzc2QzgzNkY5ODg5RDExNzM5QzYxNDMxQ0Y4RDVDOTFEOTZDNzgzNTA1MUUzQTg1NDU3NzQ5OUI0NkE2MDEyMDNCRTA5NTVEODAxMzRFQjcxQzhBRjkwNjdBRjI1OUM4Q0EyMkQ0NTRCQzFCQjU1RTNEQjUwNjFDMDUxREQwRkI4MjA4M0U1MjQyQzBEMTkzNjAyNTMyQjY5MEY1NTBBQkVCRDhGQTBDQjQ2NjAzNzBFNTA5RDdFNTA2OEI4NTlEOTQzMDY3Q0QwNzIzQzEyRTA5MDcyRUMzRDgyMzMxRDRCNzI5NDdFRTBDQTlEREQzMUI4OEQ4Q0RDQzgxRUQzMzhDQkEzMzhCMjdCMDg0RTEyMjI1RUMxRjAwOUM2RDBEM0M3RDBCRUZDNzY5NUZCMjMwNUQwMDK0FQoKY29fc2lnbmVyNRoCMDU6hggKgARCQUEwOUJEREMyRkJEMzlCMzAzMzNCMERCNEYyNDRDNERGNzMwMDI1M0Y5MEJDQ0U4MTM0MTFENDkzQUE5MDgwRjRGQkVCOURDMERCM0UxM0RENjQwM0UwMjA0REVCRkQ4QTU2NDc5NDE0OEY4RkExRDE5MzkwMEIzN0UyQkZEQUY1Mjk3QzFGNDJGQTdGNjQxN0E2N0I1M0ZCRTNEMUYyNUNENDc4RDI1MkVFNjQwREY3QjMwQUU0NTA4MkFDQzZCQjA1QjE3ODcxRDhFOEQ3QjhFQjE4RTI5MjAyQjEwRkE2MDc1MEFEQzk3QkJFMDk3RTg4NUJDMzI4NTI2OEM2OTVDQzNDODZFNEZFN0I4QTZEMjE4NEUzRTRCMERDNTc5QUU4MDVCNkFCMUE2RDRFMzI0MkM0RjNGRTVGQ0Y0OTUzNEVCMkNFQzM0N0YzMUYzQzQyQjMwMkU5N0UyRUYyQ0EzQzQ0MUIwRjJGMTk2RjFBOTAzQTBEQjcyNzJGODExMEVCN0ZEQUI0OUIwNEQwRkZCQ0VFNURBQTkxRTJENzczMUQ5Mjg1QjFCMUUxMkY3NTM1QUEyMjVBMUEyOTAxOUIzNDhDNTBEOTYzQ0U0NjA4QUVDMjNERkEyM0RCNUJDRkNFNDI1ODk1QTEwRkJCNkQzMzBCN0JBRTk3NDM1RBKABEJBQTA5QkREQzJGQkQzOUIzMDMzM0IwREI0RjI0NEM0REY3MzAwMjUzRjkwQkNDRTgxMzQxMUQ0OTNBQTkwODBGNEZCRUI5REMwREIzRTEzREQ2NDAzRTAyMDRERUJGRDhBNTY0Nzk0MTQ4RjhGQTFEMTkzOTAwQjM3RTJCRkRBRjUyOTdDMUY0MkZBN0Y2NDE3QTY3QjUzRkJFM0QxRjI1Q0Q0NzhEMjUyRUU2NDBERjdCMzBBRTQ1MDgyQUNDNkJCMDVCMTc4NzFEOEU4RDdCOEVCMThFMjkyMDJCMTBGQTYwNzUwQURDOTdCQkUwOTdFODg1QkMzMjg1MjY4QzY5NUNDM0M4NkU0RkU3QjhBNkQyMTg0RTNFNEIwREM1NzlBRTgwNUI2QUIxQTZENEUzMjQyQzRGM0ZFNUZDRjQ5NTM0RUIyQ0VDMzQ3RjMxRjNDNDJCMzAyRTk3RTJFRjJDQTNDNDQxQjBGMkYxOTZGMUE5MDNBMERCNzI3MkY4MTEwRUI3RkRBQjQ5QjA0RDBGRkJDRUU1REFBOTFFMkQ3NzMxRDkyODVCMUIxRTEyRjc1MzVBQTIyNUExQTI5MDE5QjM0OEM1MEQ5NjNDRTQ2MDhBRUMyM0RGQTIzREI1QkNGQ0U0MjU4OTVBMTBGQkI2RDMzMEI3QkFFOTc0MzVFSo8BCkAzMDdCRTEyNEE2MjI4NkRBRDlCMDAzQURBREMwQUYyRUI3NTE2NzU3Q0UxNzA5OEYwRjMxNDBBMTkzRUQ1MDNEEkAxMDdCRkIxQUI1MkU2RjFDN0UyRjUzNDIwQUNGMjBBMDUwMzE1MTNFNDVGNTY1M0I3MTUzMTUxNzAyNzZFRjJCGglzZWNwMjU2azFSgARDODMxMkM5MUNDQzM5MTI0REY5RDkxQUZCRjk5QkMxQ0EyNDY5RTUzQjNCRjlGQTE3REZBQjEwNDUxQkE1OTNEREZDOUU0RTlFQzA1MzAwREQ5QjREOTgzOUU0QUU4NzgyQ0E1RkYzQUY5RDY3QjE3RDlGMEQ5MjY4MEI3RDcxMDBDMzFFOTE3QjQxREIxNUMwRDY0MTYyRkZGODlGMzg0NkFGNThBQjI1MTk2RTNGNjIxNkE3MjFEQTc0NERCRjczNjBDOTFFQUJCNUZDMzMwODYyMUZBMzQ2RkU3RDE1MDJDOTU2MDk4QTAxOTNDRTYxNzNCQzNDNTA5ODA5QzUxMkJENzYyMkUyNDAwRjFDNDlDNkNCOTUxQ0MwMTgyMzM5NkNFNkVGMDMyNDFDQTBBNURCOEU0NzU4QTJDOEMwQUQzNDE4N0Y1MjRGM0ZGRTlEMEMzNkE1RDQwNTU2QTBBNDBBRjk2OEE5MEVCNkQyQ0JBQzNGQTEwRTk1NkIzNjk3NjlDM0QxRUM4ODBBMzAwQkQ5RTIyRTEzMzlCNTQwMEM0RUU4NTJGMTYwODYyMjI3MjFCMkZCNEFGNjRFQUJFQ0U5Rjc1NDgxQTg2QzEyREMwRkYxRkFDOUFGQUI3NTY5RTVFQUE3QTlEOTdDMjg0MDNGMUQ3RUUyRTg4NjFCNWqABDg5NjBCOEJEOUNFN0MzRTY5QzA4M0ZEOEVCRkI0RDU1NDhGMzlBRjlFMkM3MDI3Q0EzRjJBQ0UxREI5MzY1NENCODBBQjVEQTM4MjUwODU0RjUyMDAxN0MxMDQ4Q0U1MzI4MEUxRDlBNTRCOEUzMjY3NzJEODZFMUU1NzlBNTY2MjJCNURBMTRDQTQxRTdGNUE3RjQ3OUQyQUMxNTI0MDk5REQzQUM5RUIzQjE2MjY0OTI3MTVGMkRFOUY5NDhFNDNFNkM1NTJBNjhFNzY0RjRBQ0U1MEY1OUI4MDA5RDMyMDg3MDAzNjlGNkUxMkUwM0RDOTY1N0VDOTZBMDlBMDQ2QkM1QjNFQ0NBQzVEQzY4MUVDRDk4QkZEMEY2QTY0RTkyQjRBMUE5ODk2NzcwRTYwMUI3MkFFRkVBQjQ5MzVGMTc4RkE3OThEODhGQzA3OUVCQzVEOTA2RjI3NEYxNEFDMkM1RkVDRjQ3MjRDNzYwNkMxMUU1QjcwOENDREJGNDI4QUU0NUVGQTVBMzNDMUZGQ0VCNDY3M0JCRkEwREVBOEI5OEJFMDY1NTc3MTAxRjg0NkExNTVFN0Y0Mjk1NURBNUFENzg3N0EyMkI2MjFBOTQxQ0I1QjRBQUYzQjRGRkY3MjRFRkNFRkYxMzlCMjhCMTI0NjgyRURFRkEwNkRBcoAEMzYyMkUzRjY2QjVGMDhDMThCNzU3MjdENDZFNEQ5NkRFRTY3NTg2RUNENjdFRkRGRTQzQTc2NzA4MDU1OUI1Q0FDNDE5NEIxMzg0MzFDOEIyNEFCODY4RUREMDBDNTM1MDIwODNGQ0Q2ODQ0ODYyMUU1OThBOEYxODUwQUU1ODg4NTJBMTMxODlBMzcwNDkwRjZGQjExNEZENUM3RjdBOUU5QjUyNUExMDIyQTA5MjYxQjE5QjY2NDYxQ0FGREQ0QURBNEMwNTRGOUI4MjMyRDc0NkZFRkI3NDExREU3RjVCM0U3NUU2NTcxMDQ5NkVCM0M5RUI1NDU0RkQyNzY5NjQwQkExNzU5MzE2OUM5NUI0RTAzMEExODBDNDFDRjU4NDgxMDU0NkRCRURDNzI3OEY1RDdFNzg2Q0EzREYwQjIzMEE3OUM3RDY3NkVCOUQ1RTNFMDZCQUJEODhGODE3QkQ0NjYzMDczNTlBOUVCRDkyMkIyQ0U4NDkzNkVENEIxMDMxNTkzNzJGRUZCQUU1MDRENDBDNERCNEU4REJGRTVFNTA4QzI5RjA0OTE2RTZDODM0REVEM0JFNDMwRjczQjg2NzU5REI5MjJBNzgxQzk0MUZFQUZBNDNFRTQ2MjJEMUREMjZDN0QxMjQ2MTM5M0QxOENCOTc2QUZCRDg2NDQ6jwEKQDY2MDgwRTAyRjgzNjI1OUU0M0UzREE3MkYyOTFENjY5ODBERkQ0NTc3Q0JEQjVFQ0UzMUQ3M0M5ODU1REYyMDkSQDU5NDNBRUYzMkM5MjYwRUE0Q0U2ODc0NjM0QzY3NkI1Q0Y3RUEzOUEwRUNEMEUxRUNBMzNGQUQxNTg0N0JGOUQaCXNlY3AyNTZrMQ.."
```
- The secret share in json format:
```json
{
"workspaceId": "workspace 0",
"threshold": 3,
"nParties": 5,
"localParty": {
"partyId": "co_signer2",
"index": "02",
"pailPriv": {
"n": "A4BD31BA17A21F28A1F8AFFD8E41AA96D284483BE07148D60E37B8F29D478457B40F5FFDCF720D2E2C114A5B379F9EA07B1FCD273383257EC6C763ED37D64F16CB8049642DA7C726D319AD545F91CD4D3E8CF2661D251A5F829AFAB5B44DBB6E76CFF67A551574C7FC02BD50AA3067AB8ED5D8E94B9816E6DA6C0344B45DE4C31D23C079786CEF9BA92FAD79BEA5F87A160D1E92E63AA381E8C121EB8E33EDE8D0F14F933A928B0AAA88C9DCCF00CD31831F4F5055ACFA4402036B63711E05BF09CBB80503584A84F1D60E2EA37FBB9EBA0C089E45DA5711182118F4DBC294E10E76F65F17F715732067B298A84FDA6BE0725EA7D5FEFE0C198E507D159932C1",
"lambda": "A4BD31BA17A21F28A1F8AFFD8E41AA96D284483BE07148D60E37B8F29D478457B40F5FFDCF720D2E2C114A5B379F9EA07B1FCD273383257EC6C763ED37D64F16CB8049642DA7C726D319AD545F91CD4D3E8CF2661D251A5F829AFAB5B44DBB6E76CFF67A551574C7FC02BD50AA3067AB8ED5D8E94B9816E6DA6C0344B45DE4C1822F4485CC2B2C931613FBF739738A116003A38FE1A1B12D0733593347BC96E6A75CB7F7C590E284E9DC933EF3A2355E5D60868AF95EDD039291D3C5B667345E851407F2B8630802334FF85037FE6A9129E17EA42D360E78FF276E03A9C27E3EDB9B123A10DB9298D2706F0058A28C07C234C3061E1517BA6D8E3E2DC3D50184",
"mu": "9E4A3E9DB2B976F1B7E26F3D26226BE1EAFD46AEF1FC918719937641283458F4703639F70049EEE11EB65866EA571577AEFD0DF32982668F37E9F196412071CC7EA6081BB9B2B52C91B16C729DBD065AB9009BB295AD6D2F7BFD880D8A4B6997526903D2E1B18F50CA9ECF11A4C82BD43712DE639D8B02FD35E3F15A7162A6046077CF3FE0577D8BDD4E2188589CB6BEF698EB4074B8DEC71B7779BD8299C9302D5A2DA12D5CC6EEF1C19E9D9204C3ACC31F7D22864653E1C70754433030D121AC565CC044D5F0DB8888D31FE7DA4BAEB930074FB573FF53A2FC462DC47AC6EF3C9604B42F4F993A19EE3733EB30418CB971674F08A6989C87B03CEC0ADB4CB9",
"p": "D464633AB48FB48ADA26EFDDF729261F83797B3E6C1F6C173D1F1D81D225513E208B4BE937CE81B492CE1BD44FDC0A131A04727F806B20B01EF4E9548C4D05363DF3139F2621DE98870DAE3279FE0017D93B6D0EC55AFDE2A4FB0FBA86EA2C6BDDFD348510501CACB279FE21F4C7D2B75F87E695DC5FA3A0A7655817421F579F",
"q": "C69018B8F7B20E7DB8F4C1A48E094849328FFFC49879863DA46EAB36745205C409094BB23D3326D12DDE1AC98B828DC00BBA5645DBE2FC90507CAE492E69CC2A46C49C7324D363EA377867ABF18350F5B6EF1CEB53494AB573FE9B36AB15EA3654DEAF9FF6CB662D9B7D45765AE57BACBEB5B50BDB8A42B1049ABA380FA4D99F",
"pSqr": "B0366BB6E76188687BE685E67329A3EE973EA3E691DF6E78C56CE57ACC35E10FC104FAAD517700364EBC1163D8B5F9543B6565D7EB74C3740BDBB9196136747C80A32E07EE66D047DC0AB8DF7AF48861755415D77D3DD36348DB16581439E0591D87DA400578AF7B8F840C19E9DA1B511EE71EE9C306F57C710448B3AEBF782C5DE7B31201B9B6B4A05276DF0EF5FF180AFEAA67FBF7F2403340815BBCD9893334A13F9502CB020DC6C9053E53FCF2F38EDC39A6AE55F34FB6E4CCCA9585DE40050CDB79FF99DF772A679544059409934E16D7E4C4E3775AC6EBC104F93916D5C005190F10E37429FE9C2F836127DDE7CAD9C145D9B3115F14693B96527F74C1",
"qSqr": "9A033759F1A14AD129E02A1AEB8ADD7234348D5746A675EBD1B130353A8229683B70D06458C986D1D29840F51ECEE3412BA2B5C37F55EB59FF4FC582ACFE6ED54847CDD110787F8F1F01D8ABC18353EC5796DD33F029E516386874A2C7934B0E99B7EBECE77C60C9D5C600C6462BD3B0181A210A3E9E7A05E0253D0DE4459E6A11CF7B2F60BA250DEBD021C9B85E377E26492AF7E6532861AFB18151BB98679F6382407359C78AB496EE90F9F3E2A8A23E449BA765C22088920B0226E6BE5F1749E83332C0A57DBF70D2F182BE23F6E15435F874F1358A30165F23D152887546A97B227FBABE3210F85268992250C2F0080010A79EFC6603309AFD382EB6F0C1",
"pMinus1": "D464633AB48FB48ADA26EFDDF729261F83797B3E6C1F6C173D1F1D81D225513E208B4BE937CE81B492CE1BD44FDC0A131A04727F806B20B01EF4E9548C4D05363DF3139F2621DE98870DAE3279FE0017D93B6D0EC55AFDE2A4FB0FBA86EA2C6BDDFD348510501CACB279FE21F4C7D2B75F87E695DC5FA3A0A7655817421F579E",
"qMinus1": "C69018B8F7B20E7DB8F4C1A48E094849328FFFC49879863DA46EAB36745205C409094BB23D3326D12DDE1AC98B828DC00BBA5645DBE2FC90507CAE492E69CC2A46C49C7324D363EA377867ABF18350F5B6EF1CEB53494AB573FE9B36AB15EA3654DEAF9FF6CB662D9B7D45765AE57BACBEB5B50BDB8A42B1049ABA380FA4D99E",
"hp": "2CF1BD696CFCFFFA7E3C647A7209AF77F4873133F87B989BA3F4A771A1845151A8FDC128C05B7DFA12DB80482340E4136EBDEF2858B32DA99CB40D6A76D81CAABFBEA8C4B7BA4AB3FA22B2C0542FC461A99F23BD8ED4BB47BD6F4AB1252D4B4FA9D91F566109D3C209547C4A6C4CB7BC335D3D06CBD4E4341D12D031FF2681B2",
"hq": "9C8B8481850CBF0B48F2D6CD734C2ACB2F8F7DF8204A911EC97B261B255F75FA58DCD003BD70B5438323D9EED208EAFC6E33D23CC3210F63D1A213ADD49FF3FC2E380BED818B03EEECA8B3A822F5E4FA63212161A43E09A996132A6D8862F1D89F32FC41A67F541DAEBA7DA1E47A281A279FD919B08CFB475BAEFD5A48DF378E",
"qInvP": "A772A5D14792B4905BEA8B63851F76A78EF24A0A73A3D37B992A761030A0FFEC778D8AC0777303BA7FF29B8C2C9B25FFAB46835727B7F3068240DBEA1574E88B7E346ADA6E6793E48CEAFB7225CE3BB62F9C49513686429AE78BC50961BCE11C3424152EAF4648EAA92581D7887B1AFB2C2AA98F108ABF6C8A5287E542F8D5ED",
"pInvQ": "2A04943772A54F727001EAD71ABD1D7E030081CC782EF51EDAF3851B4EF28FC9B02C7BAE7FC2718DAABA40DAB979A2C39D86840918C1ED2C7EDA9A9B59C9D82E188C9085A3485FFB4ACFB403CE8D6BFB53CDFB89AF0B410BDDEB70C922B2F85DB5ABB35E504C120FECC2C7D4766B53929715DBF22AFD4769A8EBBCDDC6C5A211"
},
"pailPub": {
"n": "A4BD31BA17A21F28A1F8AFFD8E41AA96D284483BE07148D60E37B8F29D478457B40F5FFDCF720D2E2C114A5B379F9EA07B1FCD273383257EC6C763ED37D64F16CB8049642DA7C726D319AD545F91CD4D3E8CF2661D251A5F829AFAB5B44DBB6E76CFF67A551574C7FC02BD50AA3067AB8ED5D8E94B9816E6DA6C0344B45DE4C31D23C079786CEF9BA92FAD79BEA5F87A160D1E92E63AA381E8C121EB8E33EDE8D0F14F933A928B0AAA88C9DCCF00CD31831F4F5055ACFA4402036B63711E05BF09CBB80503584A84F1D60E2EA37FBB9EBA0C089E45DA5711182118F4DBC294E10E76F65F17F715732067B298A84FDA6BE0725EA7D5FEFE0C198E507D159932C1",
"g": "A4BD31BA17A21F28A1F8AFFD8E41AA96D284483BE07148D60E37B8F29D478457B40F5FFDCF720D2E2C114A5B379F9EA07B1FCD273383257EC6C763ED37D64F16CB8049642DA7C726D319AD545F91CD4D3E8CF2661D251A5F829AFAB5B44DBB6E76CFF67A551574C7FC02BD50AA3067AB8ED5D8E94B9816E6DA6C0344B45DE4C31D23C079786CEF9BA92FAD79BEA5F87A160D1E92E63AA381E8C121EB8E33EDE8D0F14F933A928B0AAA88C9DCCF00CD31831F4F5055ACFA4402036B63711E05BF09CBB80503584A84F1D60E2EA37FBB9EBA0C089E45DA5711182118F4DBC294E10E76F65F17F715732067B298A84FDA6BE0725EA7D5FEFE0C198E507D159932C2"
},
"x": "D19861B4E4FDF8A1FFC503003FF02F914A50B4B4CC7D1888FB15CDEEC8785D03",
"gX": {
"x": "47D8308FDC27C524A445AA36D1E7DFE4345BD7E7624D570DB933E83141FA1348",
"y": "701528400812E55310D3DF39C5D2F643181EED8957DD896237F3DEB32AE29AFD",
"curve": "secp256k1"
},
"NTilde": "BA6FB713F3A80E8BFBFC44A8FA80F30075476BC8975281392DC8C68AE0AEEA46C846ED851E0EA6569F54260921848CFE2FA84F68B488C6EFA327336F7DCCC21259BC18FBE423C815BACE069052D51C0FDF186000CA0BF2F16B9EBE21B926038EF6B5989F0B59CB046C01F9BB4D996FC89D8BA74601B69C9A4FF3DD2335B80255C79634EB3548E06FADBF92FC3B0812603DD1F5B37609360B5CCB5038EA0644752D61D57B1C28F97E986F3FF48B5E0BA2EB4D009EDAD7786448D927438E4C218027EFF8CB83F2389D7F952BF93B6C19E95599BE35C2E4BAA924238C7A451D49D7C906BFBDC33BB530FE805B72DF7EE0FF535A803B3F00457EB2CFDDEA7E344C91",
"p": "6F2162B449F37165C864B943E331F18550D2542646FED57A087F7AEC5C316F0B2A55E3616B22A9AAC4014C718FE6FDEB8FECCD48ADA89F2935B90FC8ACEC1E414FA503D9B7EC3BA3CEC62483BF6DCA88A133D1612AD4BDCB4BE72366EF3D8C7681160F5EA84D9A7EC5C213E7213B3A26503E4DD558E91706138FCD6AF3EAB957",
"q": "6B5E63A4A8BB28872466EF8C858B5097394371D115A4CC7930A8121426EA5A9A7EBADC7337BFD06B1E886056BF41AAE2C8BBF2FB073A096EC47F736AC77A800CF5618FD68E4C854389426BF59890940F3767526A35A34369FC1A40F779FD80E33CDA1048C064A8F154EC2DDFC5CD7DDF74CFDBCBBEF644AC51C060DC5053825F",
"h1": "A7B643BCE9272A61FBC43CC7B82D96B7CAD2B7DB2815EB8FD463289EE489F21B3BD57D66B7C5D0297180D76C4673475D4FEDBE5C535728DF01B4B82096F4FC57A36ED2474B2264DB48F7AC285104C728FFA70C4CC86A5D34493D57247E70F66EAD85DA5A61FDDF1D4378844BBE9F727FC7433540024136DD6B47A391A9398A8135657172786170B7EDE171590B37CFDF56CD9CA7DD764B8B9588B1F02D2C691F3852F86EE76C424DC9820EB517D9765B1FB2CA0B1B297B4A0C263993C13D60DEE18F1FA22DA1127F2ADC4C3319912679A373ABF7E96812DB12C510C8B8AC33CAB11594AABD6AACDCBDDCB747C5B1D4AE390C3BB1047F46A647CA4AEF14E32D4B",
"h2": "1E33E26697C223BF27E52BEEDC811B5E7B958489CA5C88A5A850F59FF220F1CBAE1DE273FD8FAD9ADE10B0C458177D10B98D7BDA601CD23A500DD64A3882525F63FD0B82073C9B1005F533CEDFE6D95B0D585BFB9104A4B7F3FB1B5E144A3E022713792D3CF273A8556AEF99D4641E2F851301502A3256A3B314E855AFB0D894E1505B165FF854368D6168478C5DE7D020F9201C6986F35D0401CCB9B199B39FC5815643E0C6F848C5E81F51F194C0E1767F851A5A01C055A129DB1D6F930D7A171186169C9673BDF471DDA371B42CA23A3145EB604B5AE7A7864C0453D7A30A4A96B7DCBAD759D1B5D8003E1B94FE5F202C02B1161A4051698CD0DA9F290203",
"alpha": "23C2691DA68578752B948D496568C209D028BC90E31613BE7533C908866343F7AD148CD371E62405420AA17134F02E9C5BA61336643F4F629748FD93ECD445AC842995D90284A3AB2151A81316356EF587096061D307C4937E5A461B09D907D7E066F4EDA3E0B7F3DA95508D7B83AE51700426DDE26ABD4E41FA50A4CB3485EEFC6F145D0BC3737DAFE11A0A82D54FA6BA345799A242EEB84F0C49B88430B19660A1D35AB244200C3DFDDAFEE1C8A3C654CD64E501793C2B1EE5F910D958F6F7F322903D10E75151B6E371F5C0351EDA3A1B3C2BA0329229ED250C1F167B99F584B77FF8F5C33D4E5733CE17A2A33FA485C738989B89A5CEBE7498CC9BCFFBEE",
"beta": "2491D73B90A4ABB3C74BE5C699BFB6FCF4AEFD186AA134CC0FFBB986100718F785C14D94CB0E99A28BE8BC277D28CA26B0691FE45F60E650971C90185C254C29B59F6B4B740BCA78B16A8DD73F9894CDFA5AC0884EEEBC6323840E2B1841BE2BE4768BEAD820BDFF1765A3BF66181EFCC9282F09B25CA0EE1C717A1C77E9D8B3AE9293A2B52E94016F6E615EF69969047C9E52C69C5F13B4F1E59CFB8232CC58B8A2CF283DA84C78FAA9866BE41E3A3BBD612881880B6FDE63DDDBA077960EFC0F141B6D730F08CCF59EBFB32FED7AD126FE96DDA9AF46DF6DF63839E244C27383476CDCE087266CD9D4910B5DD2F3EE4C8CF910EDFF7A35E7B037AFD06B7FF4"
},
"remoteParties": [
{
"partyId": "co_signer1",
"index": "01",
"pailPub": {
"n": "DC3FE81D4D7D92EE01E68C40C0B212AB81E800C36323DD667B09846690DF2A891E4EF7D8C363FB582CA54C1D77B7436253B5F8DE333948F16F1DF519D68F518C548712E8A94A0B5E4AD324D206F5AABDCAD6A8EB9A5FE4126935CF6D8700DF36CD549608DA65469F31CEFEE29AF6112E26B34ABB0CA96CCBC41C8485541CBFA22A128BAC600E18B7B49A225EA996AB9332E72A6601E23F1AE2EC422A0D4E1E21021D7D10C93C15DF834FD2005E3761E76026D2C89008DB6D94F2843497CAC43CACE4BC576FDA27FD93FE6EFDD91770625249C52BE389970C7B7CED25B896E25BCB87EF1591F7C88C54B5013393B138814AEE06829F7709B9124E20517E37AD85",
"g": "DC3FE81D4D7D92EE01E68C40C0B212AB81E800C36323DD667B09846690DF2A891E4EF7D8C363FB582CA54C1D77B7436253B5F8DE333948F16F1DF519D68F518C548712E8A94A0B5E4AD324D206F5AABDCAD6A8EB9A5FE4126935CF6D8700DF36CD549608DA65469F31CEFEE29AF6112E26B34ABB0CA96CCBC41C8485541CBFA22A128BAC600E18B7B49A225EA996AB9332E72A6601E23F1AE2EC422A0D4E1E21021D7D10C93C15DF834FD2005E3761E76026D2C89008DB6D94F2843497CAC43CACE4BC576FDA27FD93FE6EFDD91770625249C52BE389970C7B7CED25B896E25BCB87EF1591F7C88C54B5013393B138814AEE06829F7709B9124E20517E37AD86"
},
"gX": {
"x": "8BFD09FB7723121F6A20BEB97D27A192739A80675B867D4F4B96D7CEABA234D0",
"y": "EC026B2AC55415BDF32CBE7394C01F7B3FDA7DEAAB03D6E6C03A77FE0FD0908E",
"curve": "secp256k1"
},
"NTilde": "B771A2ACD25E897D77C6F722660DAFF22943FC4EB17D6DA62879DED8BA56B9656A7CDF9EFF3EEE0562DA876D48D8108E91F731C539E1F5780DC353D66B7B68503697680B7F58B0A5C86DFA9EB6BD96D213A99D7A4CFDF62FB7D0E7310EDE1D80CB75FB8B8503B18E886DB56EF7322BC52911A27505EFF17270BDB2934F56C7C9FAE524B06C11F83A904735BEEE4D175EC443B5E9F4A3C1FC57130D8AD7218BA29287B4ECD6EC3A99DB13F9C4E4B37C300CFBC721D13A1C7056D4DF3B4A657CE0526FDE38959343CB47F1CBA9C1B648EB17899A4A01C9DF36F485AEF0B764C9AB8316BB75FCD91B7B237D550E58EC1E3F8A221E9D50B276F93B6DBB515D3EC5D5",
"h1": "4E9B0EABCBD5D3CF13FBAB11A1E01ED672DA5E4190829CFE7E34BAADE171F46CB39570B1D9B2F0B0F564D565E507BB3E9006C0F1E658639895BBF546CE22FFC62BB4E0AF4AB946909D7A34EB234E13AA31269D9D31B69FAC2D89F16DFFD20B1F28BA488AE2C787AB154DB860F73F39763CE28AF2514C75CF09017716DF9A7171A85207CEA61418473A7BC8854DB4F3F4B2280F36A04D5CD9F702325D25A0218FA0841D140DE71FA5F72DE66B35A148958C35FEB83816D4BB2FC9860E73F101A007D7C828725D52F8AB7312373BA04B785CCFEE63CF3384A7704BBBFF9656F99253F8BB382BBC96E3F4E4697D9FD819E8D9D20A0C54488AB1E46D0B122627B212",
"h2": "537B49F83F56A537BA3E179AF965809386AA0FCC1B9AC3328FB00F119A6D75AB4470A942C04813D533A85092ACD18EDE47339E260437A2E0750D3FC9B70FEF018E09DCD4278AB2642D178A2A9F4B41F241E27A4A3ADB8DF72CFB1F3995EFDB5461479F4A7A23A7631182AEAB4AB3947102DBEAFF1BE4AF1CD3956448C749671D951C2559B26AF4FFD142D5184FD24F26B9DB5AF81E16E2B448D3117957E5CB46E213E9F0C678FA2FCF0178E3EB6F7FB6A09923CCE16AEF98F691BC0CB50E088B8280ADC2447EEF09D622DDDB5E0513C1BF8BDF1AC3207EB4450EBFECD1BD85397033BBDC242558492654EBAA9DB056552E3E006175630A2484EB7202F28E1AE6"
},
{
"partyId": "co_signer3",
"index": "03",
"pailPub": {
"n": "AD425084B028C22561A2CBED1449CB9494B5AF440F687FE76C4EE032B939CD876930A8BA5257F5210DD8EEA950827E21C875F83554E108B550B7657DE0639C08F27E39C311ED86FAB78BF8E477C5259340DF74EBD070F68411742C1D2231E5AAFDEAF8E36FE50BD80299EA4633E28447FB55EC9095BCA0939C38FC040AA9C3F1496CCDE103869F69C98A2A29FAEE8860B22513557F4B15C00B16AADFD790DC7BF6A406CEE1B5DB8DD15ACD18A0BFABBB95068B2D220881428F922631683CE8A15C5E15F3C2F2D64441720FC39046A54FF27D69B2219B5053C591AF7C6894991409C3821AAA899A7D3889832CB4ED8669357E8729463A82629C65DAFCC356404D",
"g": "AD425084B028C22561A2CBED1449CB9494B5AF440F687FE76C4EE032B939CD876930A8BA5257F5210DD8EEA950827E21C875F83554E108B550B7657DE0639C08F27E39C311ED86FAB78BF8E477C5259340DF74EBD070F68411742C1D2231E5AAFDEAF8E36FE50BD80299EA4633E28447FB55EC9095BCA0939C38FC040AA9C3F1496CCDE103869F69C98A2A29FAEE8860B22513557F4B15C00B16AADFD790DC7BF6A406CEE1B5DB8DD15ACD18A0BFABBB95068B2D220881428F922631683CE8A15C5E15F3C2F2D64441720FC39046A54FF27D69B2219B5053C591AF7C6894991409C3821AAA899A7D3889832CB4ED8669357E8729463A82629C65DAFCC356404E"
},
"gX": {
"x": "6FFF44580DB61BA02DC86DF885848BDB259200D7524E8B8FDD1B8FBAB1FAC739",
"y": "3A19C4C8E4A7CB8CEB950505D4DA898C4F9DC5865DCDE0E28C31646935A5747E",
"curve": "secp256k1"
},
"NTilde": "B070E9809206CDD3CB9D28A0B8BEAB02B278E8DB983BF3B53A1B7D3AC121DD80836C93CC1FCFD26FBEB8129C0544C1A025490426D55ED19807D00C0DA730B43B5355005242BADC282CB7D2F199F76B4C331EBD065112BEBC63FDAF1C727926A26213B2AF3267B46AAA51FE1C5160AF674BAD2BB3ADA2A07B678170A2C13807E4076DC8ACC5A3D75AC40D6D54FB11963A46397F2455CEFF0257D0FA319915EDC735341B20EB48C1BF836EC2CE0B280ADAF1EF86232A4F89BA6151318DC8F80886CE30F2D1AC5F134E4A90AB7725D874941D2CFCA571F94CC097C36AF7ADFF1D563439618B6193A12E01F262A8DE8F2E01D3AE971A09EF35D2FB170D17BE9B3831",
"h1": "9E2D417F953DAC19BB35CF7D803577209ED89878C2939E14EDFBB46D311E49DCE16B16DB97A6E81A428B43EBBB75BD23E6BC53E3B8390653FAB7CAAA424ECF8148D225785FA50BBCAF3ADA5045A0DE74CBC9A2B572B22DF6E5C1F923B2BFCAF8068B216EC3EC28DA42B151C7697D044762FBC903CD24455E560CC0706EEEB1E806AD1F7A7C261BDB11E066C18E254D214CC16CB43BA902641A95B58B4FD5BC099F8EC94905EB99CF5A515178412859BA24B4E2400BFA473A1043036C143CDCA9A295711B057226C6520F4501DD932AB40E621D861FF18D9EB0EEFB2765E6D1B331242351C8C4FE3F98076462E2F14FAF526EA66900325E126699918D871A0148",
"h2": "5CA9CC4B12DA8F778053D3FA2F16550DEE541F60BD2C2C4D4EA41AF466A032980558EEEC0EA5B2D2BFBB14AA5AC2A85C74FE604901B3B59DD31893F8169330E632CAD1C23C8B81D014C16522F3212F0FB4DEBF5EBF713CCD30CB47FA2E0C0DFECD8B9D188E6D08D5D2AE66E136C00DF9D38F1619B73CC2846378FA810E56D3F51CC9CD9C047DD758AA1CD9414F4D5328932F0BCBE497D2F123E7B249A9307990E841EE993F33E53A1E8C7816ECC84ABF3D2E4B8D38E5397F3570BE6614ABB418ABF8528A6EAD49274A0970470B66561A5C2B8D95D5F68CE75BAD580B826E56FF839675DE7DDAA5E5F32B83202D8B118D9B973D10076F54958B91F33A6290E249"
},
{
"partyId": "co_signer4",
"index": "04",
"pailPub": {
"n": "FB168E3D54DD98D1C7F22DB40AAA36F77BA0CB4D5299B5CE3B863A20B4C88A03BF629E5DFF001EDA94338968DDA2A6533187614BB725885F6FC7E62B2878A4959E498196C8D9112DC85E46E33A7DDB34C69BC964729D6E0B9DC2F3D804D5A66B5AAB82BAAFEE4D7A96F6AB31A07E65E546DEE21AF15E19D0F942CE4618CAAD58BD60EA1E385036E8A426B0568A576B5CCE1734C1170D85647B231617CE07B874E9916181C0FA56CDD9885B604720ACFA8C0C73485DE71CDA2A376C22BBD7A4D64FC71BEB6184C9A96377ED74E37CBE1E8CA6F56A690F28E657E0C1D6961BC24473D3822F3B2C0105DA18978E0C471E1E972970B1B876A6B752243B94C2A78055",
"g": "FB168E3D54DD98D1C7F22DB40AAA36F77BA0CB4D5299B5CE3B863A20B4C88A03BF629E5DFF001EDA94338968DDA2A6533187614BB725885F6FC7E62B2878A4959E498196C8D9112DC85E46E33A7DDB34C69BC964729D6E0B9DC2F3D804D5A66B5AAB82BAAFEE4D7A96F6AB31A07E65E546DEE21AF15E19D0F942CE4618CAAD58BD60EA1E385036E8A426B0568A576B5CCE1734C1170D85647B231617CE07B874E9916181C0FA56CDD9885B604720ACFA8C0C73485DE71CDA2A376C22BBD7A4D64FC71BEB6184C9A96377ED74E37CBE1E8CA6F56A690F28E657E0C1D6961BC24473D3822F3B2C0105DA18978E0C471E1E972970B1B876A6B752243B94C2A78056"
},
"gX": {
"x": "6A0C9D75EEC9AAED175178AB4E396F9BAE83139F19232E976D97F4025D921E0B",
"y": "59AAF236CB674CAB2BCA0436A3F26A3DFE175FA6711F8F39F7E631D5AD08F601",
"curve": "secp256k1"
},
"NTilde": "B1D475DD10824B867CAE752B420949C86C2BEAC8BB1DA88799CE3507F35E8A895C2DDF2527D086D670BEF19FF881087F0D4470A516E3D493A44DD2FCF317E1A193FE7987932D6967A177653BA814D06F276A893EFA6028CD89A75BA6763DE4F6FFA419DECEA2DD58E7F53EFFD3B6230D7B1FD50E87B183161B158DA8AE3226DE51F4E0CC333A6638E3FD973D7DB2A83D1F541AC5D42CC344488D1199F137EEDB22BCDFBCE2A945E80A976E411928E402A93D53D903CF7F2A1AA4E9D8866D69CD7DD0E13B9063F3C41AA9B429147169D1A4C48327512D4ACB2EBFC38D780E88E71561AC2AF648D65A7FD09F9DDA195A3DA3950BCB9BD28A28CA39CF6BD22BC0ED",
"h1": "4E796AA9BFD0A55F72D751C7EA93FEE18F7757D18D29A73449049F60DC69FD1B280047870FD56B7FE52ADC79AFCD3F9E2144DACABE502711F6D5D2CAD5218CB63C8F6DA21707D953C9511EDAC84BDAC4BC711EC86FA25B9C12FC36FA94D83F882124C24D434FFC862F55FB4E2C3EBA54E56237F44D7394394AC9E7D5A223FC91A0CEBBB0FA8837300EBA91039143C16D2B4AC7C09D48DA597D7F58C8B2855C0D808FF7A3C9C10273496001E13BA2793D7E7376690B4CDE01539990C4324438C670AC19759AF233E113E00C83E8ED50F5F7F7021C766A6EAF45F8783779927E1F02D8900452CDB52C99DD9C7B87E0C3C3481A6C08456EBC88A6982362ECF83B0F",
"h2": "62B68062FA8D18BE9AA8137A62607C164E1F37874D080B85876D029719D0201B865E69C37AC8D77454E1E2AC1EE6880F4E611266C802213CBF505A8AAFDBE0B3619B33B69577EC953C7AFCD21E48B77BB3C381894655271580B18E712D9C95C92EDAEF7470C76C836F9889D11739C61431CF8D5C91D96C7835051E3A854577499B46A601203BE0955D80134EB71C8AF9067AF259C8CA22D454BC1BB55E3DB5061C051DD0FB82083E5242C0D193602532B690F550ABEBD8FA0CB4660370E509D7E5068B859D943067CD0723C12E09072EC3D82331D4B72947EE0CA9DDD31B88D8CDCC81ED338CBA338B27B084E12225EC1F009C6D0D3C7D0BEFC7695FB2305D00"
},
{
"partyId": "co_signer5",
"index": "05",
"pailPub": {
"n": "BAA09BDDC2FBD39B30333B0DB4F244C4DF7300253F90BCCE813411D493AA9080F4FBEB9DC0DB3E13DD6403E0204DEBFD8A564794148F8FA1D193900B37E2BFDAF5297C1F42FA7F6417A67B53FBE3D1F25CD478D252EE640DF7B30AE45082ACC6BB05B17871D8E8D7B8EB18E29202B10FA60750ADC97BBE097E885BC3285268C695CC3C86E4FE7B8A6D2184E3E4B0DC579AE805B6AB1A6D4E3242C4F3FE5FCF49534EB2CEC347F31F3C42B302E97E2EF2CA3C441B0F2F196F1A903A0DB7272F8110EB7FDAB49B04D0FFBCEE5DAA91E2D7731D9285B1B1E12F7535AA225A1A29019B348C50D963CE4608AEC23DFA23DB5BCFCE425895A10FBB6D330B7BAE97435D",
"g": "BAA09BDDC2FBD39B30333B0DB4F244C4DF7300253F90BCCE813411D493AA9080F4FBEB9DC0DB3E13DD6403E0204DEBFD8A564794148F8FA1D193900B37E2BFDAF5297C1F42FA7F6417A67B53FBE3D1F25CD478D252EE640DF7B30AE45082ACC6BB05B17871D8E8D7B8EB18E29202B10FA60750ADC97BBE097E885BC3285268C695CC3C86E4FE7B8A6D2184E3E4B0DC579AE805B6AB1A6D4E3242C4F3FE5FCF49534EB2CEC347F31F3C42B302E97E2EF2CA3C441B0F2F196F1A903A0DB7272F8110EB7FDAB49B04D0FFBCEE5DAA91E2D7731D9285B1B1E12F7535AA225A1A29019B348C50D963CE4608AEC23DFA23DB5BCFCE425895A10FBB6D330B7BAE97435E"
},
"gX": {
"x": "307BE124A62286DAD9B003ADADC0AF2EB7516757CE17098F0F3140A193ED503D",
"y": "107BFB1AB52E6F1C7E2F53420ACF20A05031513E45F5653B715315170276EF2B",
"curve": "secp256k1"
},
"NTilde": "C8312C91CCC39124DF9D91AFBF99BC1CA2469E53B3BF9FA17DFAB10451BA593DDFC9E4E9EC05300DD9B4D9839E4AE8782CA5FF3AF9D67B17D9F0D92680B7D7100C31E917B41DB15C0D64162FFF89F3846AF58AB25196E3F6216A721DA744DBF7360C91EABB5FC3308621FA346FE7D1502C956098A0193CE6173BC3C509809C512BD7622E2400F1C49C6CB951CC01823396CE6EF03241CA0A5DB8E4758A2C8C0AD34187F524F3FFE9D0C36A5D40556A0A40AF968A90EB6D2CBAC3FA10E956B369769C3D1EC880A300BD9E22E1339B5400C4EE852F16086222721B2FB4AF64EABECE9F75481A86C12DC0FF1FAC9AFAB7569E5EAA7A9D97C28403F1D7EE2E8861B5",
"h1": "8960B8BD9CE7C3E69C083FD8EBFB4D5548F39AF9E2C7027CA3F2ACE1DB93654CB80AB5DA38250854F520017C1048CE53280E1D9A54B8E326772D86E1E579A56622B5DA14CA41E7F5A7F479D2AC1524099DD3AC9EB3B1626492715F2DE9F948E43E6C552A68E764F4ACE50F59B8009D3208700369F6E12E03DC9657EC96A09A046BC5B3ECCAC5DC681ECD98BFD0F6A64E92B4A1A9896770E601B72AEFEAB4935F178FA798D88FC079EBC5D906F274F14AC2C5FECF4724C7606C11E5B708CCDBF428AE45EFA5A33C1FFCEB4673BBFA0DEA8B98BE065577101F846A155E7F42955DA5AD7877A22B621A941CB5B4AAF3B4FFF724EFCEFF139B28B124682EDEFA06DA",
"h2": "3622E3F66B5F08C18B75727D46E4D96DEE67586ECD67EFDFE43A767080559B5CAC4194B138431C8B24AB868EDD00C53502083FCD68448621E598A8F1850AE588852A13189A370490F6FB114FD5C7F7A9E9B525A1022A09261B19B66461CAFDD4ADA4C054F9B8232D746FEFB7411DE7F5B3E75E65710496EB3C9EB5454FD2769640BA17593169C95B4E030A180C41CF584810546DBEDC7278F5D7E786CA3DF0B230A79C7D676EB9D5E3E06BABD88F817BD466307359A9EBD922B2CE84936ED4B103159372FEFBAE504D40C4DB4E8DBFE5E508C29F04916E6C834DED3BE430F73B86759DB922A781C941FEAFA43EE4622D1DD26C7D12461393D18CB976AFBD8644"
}
],
"gX": {
"x": "66080E02F836259E43E3DA72F291D66980DFD4577CBDB5ECE31D73C9855DF209",
"y": "5943AEF32C9260EA4CE6874634C676B5CF7EA39A0ECD0E1ECA33FAD15847BF9D",
"curve": "secp256k1"
}
}
```### Key Refresh
Refer to the [test case](./test/gg18/key_refresh_mt_test.cpp) for more details.### Sign
Refer to the [test case](./test/gg18/sign_t_n_mt_test.cpp) for more details.## GG20
### Sign
Refer to the [test case](./test/gg20/sign_t_n_mt_test.cpp) for more details.## CMP
### Minimal Key Genaeration
Refer to the [test case](./test/gg18/key_gen_mt_test.cpp) for more details.
At the end of the MPC Procedure, each signer will get the secret share:
- The secret share in base64 format:
```c++
"EAMYAyLkAQoKY29fc2lnbmVyMRICMDEaQDRGRDA5RjJBRTYzQkZCOTk1QUJFMUJBOTE2M0Q4MzYyM0JCRTkxNjI5RDlCRTAyMDRBNThBNTE4MTExNDFFODAijwEKQDFEQ0QxMUM1RDkwOTlCNzA3MDBDRkNDRkM2REFGNDgyMzk2NEU2NzcyQTlBOThENDQzRTlBRDc2MkRBQTQ4M0QSQDI5QkFDMkExOTYxQjFBNkE0ODYzQjdGMTU1RkZCMzlBRkFFMTI3QzJDRkE5OTg5RDAyNURCNEI2QTZDNDZGQUUaCXNlY3AyNTZrMSqiAQoKY29fc2lnbmVyMhICMDIijwEKQERFMTNFOTJENTgyQUQ2MzVGNDVFQTlENEFDNDVDOEJCQTU4OTE2NkY2RTZGRUIwMkEyNjQ0N0VFRUMyRUIwM0ESQDY5RkZFNzc3N0QyOEUyOEE0MjI5REQzRUUwRUE3RDI0OUNBRTg1NkQ4QjVEMjU4NTMzQ0ZENTAxOTA2OTc4QTMaCXNlY3AyNTZrMSqiAQoKY29fc2lnbmVyMxICMDMijwEKQDA5RTA1QjM4RTkzOUEzODk0REJEMEQzN0IxREM5MUJERTdDQTM1MDY0OTY1NTgwRTY2OTg5NDU2NEJFNDU0OEYSQEVBQzlFNkM0NjAyRDY1OEVDMUZDMDhDQ0EyNEJDRUJBRTAxMDdCNEE1NkFFNDg5NEQ0MTMwQ0FCQkZFMEE4MjQaCXNlY3AyNTZrMTKPAQpAREZFQTI2QTBCMTM5OERGNTJEODAyOTEzREIxMkMxRDA2OTJGMDUwMDQ3RTdCM0JDQTJEMzREQ0ZDMzY2OUYxNBJAQjI3RjI2QTBDMzhFOEU5QjA0QjJEN0U2RDYwMkQ0QzBCM0M1RENFRkNCQUE1MEFCRTdDRkIwMTkxQURDMkJGRBoJc2VjcDI1Nmsx"
```- The secret share in json format:
```json
{
"threshold": 3,
"nParties": 3,
"localParty": {
"partyId": "co_signer1",
"index": "01",
"x": "4FD09F2AE63BFB995ABE1BA9163D83623BBE91629D9BE0204A58A51811141E80",
"gX": {
"x": "1DCD11C5D9099B70700CFCCFC6DAF4823964E6772A9A98D443E9AD762DAA483D",
"y": "29BAC2A1961B1A6A4863B7F155FFB39AFAE127C2CFA9989D025DB4B6A6C46FAE",
"curve": "secp256k1"
}
},
"remoteParties": [
{
"partyId": "co_signer2",
"index": "02",
"gX": {
"x": "DE13E92D582AD635F45EA9D4AC45C8BBA589166F6E6FEB02A26447EEEC2EB03A",
"y": "69FFE7777D28E28A4229DD3EE0EA7D249CAE856D8B5D258533CFD501906978A3",
"curve": "secp256k1"
}
},
{
"partyId": "co_signer3",
"index": "03",
"gX": {
"x": "09E05B38E939A3894DBD0D37B1DC91BDE7CA35064965580E669894564BE4548F",
"y": "EAC9E6C4602D658EC1FC08CCA24BCEBAE0107B4A56AE4894D4130CABBFE0A824",
"curve": "secp256k1"
}
}
],
"gX": {
"x": "DFEA26A0B1398DF52D802913DB12C1D0692F050047E7B3BCA2D34DCFC3669F14",
"y": "B27F26A0C38E8E9B04B2D7E6D602D4C0B3C5DCEFCBAA50ABE7CFB0191ADC2BFD",
"curve": "secp256k1"
}
}
```
Note that the minimal sign key couldn't be used as the input of protocol "Sign".### Auxiliary Info and Key Refresh
Refer to the [test case](./test/cmp/aux_info_key_refresh_mt_test.cpp) for more details.
Note that the minimal sign key, the output of protocol "Minimal Key Generation" should be used as the input of protocol "Auxiliary Info and Key Refresh".
At the end of the MPC Procedure, each signer will get the secret share which could be used to execute the mpc protocol "Sign".:
- The secret share in base64 format:
```c++
"EAIYAyKFEwoKY29fc2lnbmVyMRICMDEaQEQ0MjdEOUZGRTNBOTQ4RUJBNUFFMkVENUZCQ0QzRkFERjBDMzlEODM3N0Y0REExMThFNUQzNDlEMDcwQ0JDQzUijwEKQDk2M0VDNzkxRjhBQTJFMTlEQjRCMDMyQThBNkUzNTgxQ0E3NUEyRTA1NTY4MzVFMUM1QjJEMjNEOTcxM0NEOUMSQEIzNDdFNDI0NzFBODFCMDY3QzNCRkE3OENCRkUyNzZGN0FFMzgxQURCNzQyNzY5RTFFQTQxODE4RUU5RDgzQTQaCXNlY3AyNTZrMSqPAQpAMzUyOTVGQjFCNERDM0ZCRkEwQzVGQURFRTM3Q0U4ODcwNkIwMDlDQTRDNDRDMjY5MTM5QTZGREYwQUEzNTE5QxJANEExOTVBMkMxREZENUUzQ0YwMjM4RjZERkE5RTBFQUU4ODA5ODYwOEQzN0I1OUJCMTE4MTE5ODA3OEJBRjFCOBoJc2VjcDI1NmsxUoAEQ0M0MTQzNzExRUI5RDQ3MDNFMTQ5MzJDMDRBNkZBRDAzQTFENEZFODM2NTcwNTgwNTE5MkVDOUExNUEwQjE3RDU1OUEwOUQ0RUVDMDE0MDBENThGRkQyMzJFNzA5OTM4MTIwOThCQzlDNjc4NEI3MEJDQTA3MTk5Q0JDQTAxODRFOEY0REY0Mzk5RDNDNTRENTdEODNFMDk1N0FEOEQxRDUxNTlCQ0IxOTdERkYzNDM4QzBDNjk4NTIyNUYwQjM2MTUwMEI5RENDQTMxMUM3NjAyNEIwOEY1QjlDQTk0MzE2NEVDQkMzOTFDMDQzQzU3NEUwMTFGODlGNEFCNjI1RkI4MURBMkQ3NkZGMEZEN0ZEOTFGMDc2M0Q4OUZERDEyNUQxQjM0RDA1ODQ0M0NEMTk3QTU0ODg0MUE4RTJFMzYxNzQzOTYzQzg4QzNEQ0YyM0JBODlGNzFFNTY4QkRGOUM1RkJGNkQ5Njk1RkI0QjZEMjNFQzNEN0FFOUY2QkE2ODdCNDY3QzBERDNERTEwMTYxODBDQjIzNzFBMENBNkU0OTI3QkEwMzRBMTI0MDY4RTRFNzUwODAwQkVEQTAxREM4QTk0RjM1ODZEN0UzNDUxNzZCMEQ1QjE4RTY1RjdFQkM3NTY5MTAwRjc2REI5QzlBNUI3MkUzN0MwNEE3MDFagAQ0MTEwRkMyN0I3MkIwRkIyODE4REQxRUU4RDZENkQxOTY2MkIyOUY3OUI4MTQ2Q0YxMzkyOEJFNzJEOUE1QjNGMTU5MDc4RkFEMTNFN0YzNjQ5QThGRkEyOTQ0NkFENzI1RDBDNzE5MTQ0MjY0OTJGRjA2ODcxMkQ3RkYxRUEyNTVBMzE0Q0RBMDc4MUUyMjM2MjYwRTk4MTBGQzBFOTVCQUE3QzM3QzAwNTNGNEQxRUZDMEE0MkIzQ0FBOTI2MkFEMzU3OTRBQUM1Q0RGRDU2RTIwNjlBMjI2NTg4ODJCMzNGRDBDODE4MUQyNUEyNEMyNDU1ODYzNTQyODNEQUI3NjBGMzkxMEJENDAwRjZBQzE0NEQ4NUJFNTgyODczN0Q2QTBCRUNDMTNENDZERjUzM0IyQUUwRDE4M0Y2QTJCMTg3NUUyRUEyNERBQkJCQkExOTQ4M0U1NjMwNkE3QzJEMTBCNTVFRkJDN0YyQTFBMUVDRjNBREVCNDkxMDYzMkU4NkFENjA2NDBBRDM3QTYxN0E3MzEyQUQ2RUZFOTk0NjAwQjM0MzREODlDRjFBNTQ1MzkyMjFEOUQxNzczMTU5QUI5N0Y0REJEMjdCMUM4MTg0RTIyRjA0NEMxQkU5RTI2RDNCMTJGMDc1REZDQ0UzMjQ1OUU3OEVBQjJFODE1MmKABDk3MTZDOUU4QUEwNDUyREQ2NkE3RDc1Mjc5MDEwODVBMDMwODk4Qzg3OEM1RENDQ0UxNDk4MDlGRjk3MjVBODFENEQxRjIxMjJCMTBCNjk0QjU4M0RGMjBGNzgwRDIzNDUzMTlDRUQzNzZERTdENDQwRDNFNEVFODhEQzIzRDU4QTVDMjhEOTg2QTY5MjkyMzQzQTE2QjhENDBDNDgxNDI5RDQ3QkI4QkQ4MEVDMDY0OTVCQzY5QjhCMTdEMjFFRTA5NDg2OTFGOTA2N0ZDMkQ3NjZGRDgwRUI1MTUzM0U4NkUwQ0Q4OTgzRkJDMkE1QzhBRERDNTYyQTY4Mzg5QTU3MUJDMDBFOURDOUM3NzhFOEIwRkREMDg5NzI2MjU1M0MyRTM3MUQwRjRCMkI1QzUxQ0U3RkM4OTRFNEUzQjk0QzkzNzdENEI5OEFBQjA5QzhBRjhDNDcyMzM1REIxQkI5MTVBNTUwN0UzQ0JDQ0UxN0MzQkRGNDIyRTY4QzJGRDE0OTgzOTg0OEYwQjJCREFGNjQ2ODYzQkM3MUFCRUMwMjhFNTZCQkMwODUxOUYyQ0JCQzQ4NzU1NUEzNzE0NzFBNTRFMTcwREUwMTNDRDkyQzZEQkVDNERCN0VCNTc4MjRBNENEM0Q3NjYyMUJDREIwQzhCMDg3N0YwMjVDQzIyaoACREYxQzFDN0ZFNTU1NTA3QkM1MTQ0MTNENzhBRkFDMTIxNEM4NkZCMDM5NTY2NEVGQkMyRTQ0REQxMUVBMzg5Mjg3NzJGMjRENzkyRkQxMEIxMjY0NDFFRkQ1RkQxQUIwQUQwRDdGMTNBQzgwNkRGQzZBNEYzNDJGMTNCMDIxOTI1MUQwRDRBRDdBRDQzQUFDMDU1NTU4NjU4N0VFNTcxODZGMUM0MzYzODNCMjBDMkZFODUxN0Y1RTQ5NDQ4QjJFMDJFQUNBMTlBNTVDQjRGRTI1MDc5OUU5QUQxREEyQkZERThEMzJGQkUzNjEwMDM0REZDOTQxQ0E5NDg5ODUyQnKAAkVBNUQ5N0FBMjNDMTI0M0U1NzdGNjEwN0VGQUREMTAxMzc3QzJFNTJFOUY4OEIzRTI4MzQ0RkU4NEYwOTg1NjI2NDZCNTgxMjMxMDNDNUI1NkEwMkNCNDA2N0ZDNjNFMzcxRkIyMzVFMTk0Qzg0MzdEMkQ5MzU5RDhFQzUwMjVEODI5NzBBNDA2MzAwNEJDMjMxM0NDMzNERUFCNDk4OUY4N0YxMkYyMUE2REZDMjEwNzMzNUJEQzVFMzg1NkIzNDU4OTQ2RTM1NDk5QjA0RDkzNzhGM0ZFNjJCQjY5M0EyREJERjYyNTYxREIwOEExRTY0NDcxNkIzNzM1Mzg2ODMqvQ4KCmNvX3NpZ25lcjISAjAyIo8BCkAxMDVCQzI3QzU0MDIzQTUxNDNDRDk2QUUxMUU0MURCNjhCODMwMjRCOTVGOEUzQTlGRjhBMTVCQ0U1QzU0N0RDEkAwMjBDMzFDM0E2RkI4NTlDMzk5QjIxRTMyMjBDNjM4Q0M1NjYxOEUxNTM5MURBMjk4NjE5NDc5Q0QzRkU3OTY2GglzZWNwMjU2azEqjwEKQDE3NEI3QTM2OEY5MzlBOTkxQUI4OUUxMzQzQUNFNDFBNTNCMzM2QjcyMDlGQjg3NERGOThBNDlFNzYwRDlDMTASQERDMDEyNjM2N0Y5RjU1RDdERjExRUY2NTI0RDM0Qzg3QkNCNjU5NzZBREEyOENFREFBMDBBNERDNTIzNTQwNTAaCXNlY3AyNTZrMVKABENGNDlEODdCNEFDMEE2QzU0MzE4QjY5QUZBQ0EwM0I3QkVBNjlBRUQzRDE3MDlCODE0RUI0Qjg0NzY3OUJBQzJDRjNDRENENDc4NkU5M0Y4MzE3MDcxQjBDQzk0RTZERjQ1MDQ5RDZENzFGRTgzQzk2NkZDQjQ1RjQ4NDFCQjc4QzBCNDY5NjA5M0ZGRERCMDY4OUE2OEVGODdGQTg5MDI2MkMwMkJEMUQ4M0I3RTEwQjlFOTVDQkJDQ0UzNkYyOTM3QTFDOUNBN0Y2OTlEMUJGQUZCNDYxNDMxNURDQjEwMDNCNDc1MDIzRTM4NzdCRjU2MTIwMjBGQ0RERjQ4Qjg5NTA1NEI3RkE4MzdBNTVGQTU0QkQ0NTVGMkQ3MDg1MEY5MzU3RTQ0RjAwRTMzOUU1NTBDNTY5OERGMTlBNjdGODIwNUY3QUYyODE0ODY0MjA0MTE5QUE3MTk5QzgxMjNCMUY2OTc4QjI1NEI3ODQ4N0VGMzA3MTBGNzdBRkU4QTQxQjY5NzZGRDQzNDBCQTE4NDUwQzYzRUVGQjIyNjNDODM1RDdFMjVCMzg1RDI0RjI1NUY5QTNENUU4NDJEQjlBRUU0QzQzREFFNTExQUY0QjBDQkE4OTI1RUNCMDhFQzUwRTJCRkY5MUYyRkYxRkIyQkJEMTA0QTAzQzU3RkY5WoAENjAzMTZCMDNCMDRFOTA5QkM3NjU2MjVGODk5NDkwQTU1RkEyNDE1NUYxMjFBMjE4OURFODlBRDVBNjFBMDNGOTNDQ0RDQUFENDIyNDExNjJFNjVEQUM5RDcxRTU0OUQxMzUzMDkxRDNGNzQxNzIwNjNBNkQ0OTIwQzU5M0E5MjQ3MjU1OEEzN0MzNkQwQkE3NzZBQjdDODM3MjhCNDY5OTMzM0IxMDc1NTdBNDBGQTg3NTkxNzMzQjZBOTJCREIyQzQxMDE2NzEzMjk2MkRCRTMzQUU3MTcwQjVCMTc4MDA0MDIzNjFCMkZDNDJENEQ5RTQ4ODEzMkQ5NUMzRkFENjREOTc2NUVEMzVFMUJDODk4QTFFNkU2MUY1QTJFNDM2Qjk3OUQ2NEUxRTY2QkEyQUJFQzUzREI3NkI2RkFCMDUxMzc1RUVCMjY5NkRBQTU0REM0MTg0MDM1NkFBRkFGNDU5NTQ3MEExNTAyRDNGMjc1Njc2OEE3NTc5M0FCQTlEOTVDRTdFNDlGNkQwMjdENDY2N0E0QUQ4NjI1NjFDRjQzNENGRUNDNzRCN0VEQzhFRDNDQjI5REZDMTgzRTVCRUM2OUQ0NEI2RTIzQUEzMjVFRkZDNTFBMTUwQjU4RkU2NzU5NDYzRUYzOUJENTZFRUNCODRGQjIwQUYxQjFCNUNigARDQjlDMDUzQ0Q1M0I4M0Y5OEYwQzhDNkQ2NzZGNUM4RTQ4NTBBNzdDRDNFNkY0MEJGOTkxNUNGRTNBM0I1MTI3MEM1QUJEQkEyREM3Q0I3N0FFQzJBRTdGNDlEMkQ0M0Y0Mjg2MUUwRTU4NTAzNDU4MEZEOTlGNkVCMkNDMzY0ODg1MTkyNjM2MDY0OEFGQjlEODJGODI3MTA4OTg3MkExMzE5MjcxNDdGMTEwRTlDRTVEODFFMUQ2NEI2RjE3ODdEQjhCMzlCOUU3QTJDNUEzM0Q3MjY0OEU1RTg1QkE2OUZFNUY3MzE4OTU2M0FFQTEwNDA0MjNFNEU5NTg5OEI4NjIwQjMwNjIyOTY5NkFCODVBMTA2MTFEQzREMjE3QTRERkMxRDRGNTFDNEM2NEZCNjFDOTcyMUU1NzhFRDJFNjY0OUE5MjNCQjY1MEIyQTU5NTdEQjk1Qjg0QzMzNzE3NjAyMjg5RkFCRjJBRTkyNzQwQjlGNkQyMTk2NUU2OUMzRTY4QkU2QjI1MEI0NkFCQjY1NDkwOEE1NUM2RjZGNUI0OTgxREUwODRGNkI4RkVFMEJBRUJDMTJFMzlGNDUyNERFQUVEOTZFQTJEN0M3QjdFMzdGNjc2Mzg5M0U3Nzc4MzAyNTQxODg2RUY5QUQ2OTNGRTkxQUFBNjIwQzZEMSq9DgoKY29fc2lnbmVyMxICMDMijwEKQEE1MjhGODYwNUY1QkRDQTZCOTJDQzVBRDY0NjQ5RjE3MUYwMDRENjk1MjczNjRGNTJCMDQzQkFGMkQwRURDMTkSQDJGNUI4NzU5RTFBMDE3NzFFQjMxRDM0OUIxNkU1OTA3MTM2MzE3MkVEMkIyRDFCMzA4QTU2MTE3Qjc5M0M4QzEaCXNlY3AyNTZrMSqPAQpAMEUyQTdCNkM3NUJGMDREREE2MjA2MjE2QTkxMDcyMjZCQkM0QzU1QkRCOThFNTE2M0I4RDk5MEYzQTU5RDFGQhJAMzAzNkU0QjgyODNFMTA3NzYyMDlFQjlEQjkwMEMxRDkzRUNFNTUwREMwQzU4QjgwN0EyRTU1RkMyRjMzRkI3MRoJc2VjcDI1NmsxUoAEQzJCMjk1OEZFRjM2REM3NkVDQkQwOUYyRThFMzEzMDU3NDQwOTQ1NkQwREE1MzRCRURGN0JFQjEzNkQwQ0ZGOTc4NkQ0NkEzMEJDOEUwMTA4MDc1QzE2QzMwNDE2NkY3NTA4RTY0RjlFOTNCNDY4OTFCRjNFMEVDMTNCRDRFRDRBRkM0MTY0RDhGNENFRDBGQkFGRjBCNDQxMkNGMTRGOUEzRDc0Qzg5NjdBMTk4Qzg5ODFGM0UyNDNBQTQxRUJENUMwREZENUYyMDcwMjgxMjhGMUFBQzc0MkQzMUUzMTI2QjA1RkJEODdDREVFRTIyMDE3QjQxQ0E2QjMxMjREMTA0RTVBRDU5N0VBQjI0NzJGNTQ3NTk0OURDQzYzMUY2RDBDMzYyQjM0MDY5MjY5OEJGMEJBOTcxQzNERDE3NjkwNTFFRjcxMjZFMDgyMjY2MUZDMTEwRTg4REM0ODA0Q0I1MEI3MDdBQzM4MTkxQzNBMEU3RTQ4RTIzQ0I2ODM0QkE3OUM3QzIzMTYzOTM0QjUwNEVFOEYwNzQ4MDhDMEMzQzM2ODAyNDZGNTA4QzgzNjM5QjI1OENDNjE4RTY5MUUzRjNGMUE1Njg4NDFCODhFMDBBQ0IzOUVDRTFBOTI3QTY5NUQ3NEQ4RkUyMUFCNTZEMTZEQTVERTk5RjZDMTlagARBQzI0RjM3NjEyNjA3NUVFQzNDMDFGODkxMjk3RUM1OTVCMzI2NEM2OTc4NDM3RkE2QjMyNkMwNTU0RUE4QTA4RjMyN0VCMjk3NTZGNEM1NjI0NTMzNUUyODBEMzI3QkVDQTE0QkUyN0M4MTJBQjIzNzcwNjc2MTM2Qjg5M0MzODg5OTc1RjVCNUU1QzdBODUwNkE1N0FCMDU3N0ZDNjRDOTA2N0UxNjVBQkIxRTdEOTM0MTVBN0E3NUVGNkY3NEFCMUEyNEM3OUVCRkI1Q0QxREYxQ0JEQjE2M0VGMjNCRkJCODVEQjVDNzFFMDZDQkY1RDQ0MjU4RkRCQTFCRDM1MTMxNEUyRkFDN0I5QjY3MTJBQTQ5RjQ2QjBCQjZDMzk5NkFCOURCNEQ2NzAwNzlEMkUzMzYwRjgzQjBFMTU1MkI4M0UyNDY3NEFGMEFCREJERjM3RjMyRTZENzIwMDNEOEEyMUM0QUUzNUMzMzQ2OTFGN0Q0QkI3RUJFOTI2NUI5RDg0ODVEQkM0RjEwNEMxRDkxNThGRUM2N0VFRjk2OENDM0FBRDQxNjgxNjJCMkM5NzI5QjY2RUQxNDkzODA2Q0U0QkY3RUJFMERCQzEwQTM0NzQ5MzY2RDgxQzg2REE2MTIzNDBGNkRCRTA5RDBEOTgwMkY2RTI4QTZERDAxQWKABDNGOEUyNUJFNkY5MkNBODIwRDg1Q0YzQTk0ODlCRkU5QTk5MkQyMUQxRjI3RTYyNUMyNTBCRDUyOEQwMkY5RENDQzU1NDM4QkQzOTAyQTU4NTc5MjZDMEEzRENBQ0MyMjkxMTc5NkYyNkQ4OTcwRkZBN0Y3RDhCNDlENjVENkUyODhGQkIwNUU0ODE3MzdFRkI2NzdGMTU2QkMyNjRBNTA0RTcxQkE3QUJCQTAyRjI2OTcwOEVFQjgxMEVBREY3Q0Q1QzI2MUQ0Mzc4NkYyQkVCREFDMUU4OTczQzc3MTE0RDQyRDhDRDYzQzM2Q0FGOTVFNUFFNjkwNUE1QTczRjA0QTY4OUNEM0M3M0ZERTI3MjJGODFENDMxOTIxQzc1RUY2N0ZBRjcxQjFBMDhGMTYzMDBDOTNEMDZERjYyNzUzMTlGNkY0MDAxQ0ZGQ0Y5MUVGRDhFMDg2NzI2NEFEMDVEOUVGNTgzNDQxNjlDMDU2MzdCQkEyNzk4MDk4MTRGOUM3QTk2MEY4QjE0MjU3NEIxMEU4MEM2ODJGMDY5RUU1RDMxNTI1QjY1Q0NFMDQzRjc5MjU1QzdEQUU4RkFBNzI3QzUzQkVCMTVGNDE2RjVGMENGOEU5Rjk5ODgxMkNDMDg4MjJENjExRkU4MUZENDYzMjNBNjYwMjRFMTVFNkQ0Mo8BCkBBMkE0QzZEOEE0N0E2ODg5RDVBMTg4OTIzQzc3MDFENDc3NkFCNTc0ODkyMEQwNzdDOUQ3NDdDNTNBRkVEMzNCEkA3NDdBRTVERjU5MzZCM0RDQkYyRjZGNkFERDdCMkIyRjE3MTU5QkM4Q0NBM0EzQjBEQkY0RUQ5Q0RGMkQxOTAyGglzZWNwMjU2azE."
```- The secret share in json format:
```json
{
"threshold": 2,
"nParties": 3,
"localParty": {
"partyId": "co_signer1",
"index": "01",
"x": "D427D9FFE3A948EBA5AE2ED5FBCD3FADF0C39D8377F4DA118E5D349D070CBCC5",
"gX": {
"x": "963EC791F8AA2E19DB4B032A8A6E3581CA75A2E0556835E1C5B2D23D9713CD9C",
"y": "B347E42471A81B067C3BFA78CBFE276F7AE381ADB742769E1EA41818EE9D83A4",
"curve": "secp256k1"
},
"gY": {
"x": "35295FB1B4DC3FBFA0C5FADEE37CE88706B009CA4C44C269139A6FDF0AA3519C",
"y": "4A195A2C1DFD5E3CF0238F6DFA9E0EAE88098608D37B59BB1181198078BAF1B8",
"curve": "secp256k1"
},
"N": "CC4143711EB9D4703E14932C04A6FAD03A1D4FE8365705805192EC9A15A0B17D559A09D4EEC01400D58FFD232E70993812098BC9C6784B70BCA07199CBCA0184E8F4DF4399D3C54D57D83E0957AD8D1D5159BCB197DFF3438C0C6985225F0B361500B9DCCA311C76024B08F5B9CA943164ECBC391C043C574E011F89F4AB625FB81DA2D76FF0FD7FD91F0763D89FDD125D1B34D058443CD197A548841A8E2E361743963C88C3DCF23BA89F71E568BDF9C5FBF6D9695FB4B6D23EC3D7AE9F6BA687B467C0DD3DE1016180CB2371A0CA6E4927BA034A124068E4E750800BEDA01DC8A94F3586D7E345176B0D5B18E65F7EBC7569100F76DB9C9A5B72E37C04A701",
"s": "4110FC27B72B0FB2818DD1EE8D6D6D19662B29F79B8146CF13928BE72D9A5B3F159078FAD13E7F3649A8FFA29446AD725D0C71914426492FF068712D7FF1EA255A314CDA0781E2236260E9810FC0E95BAA7C37C0053F4D1EFC0A42B3CAA9262AD35794AAC5CDFD56E2069A22658882B33FD0C8181D25A24C245586354283DAB760F3910BD400F6AC144D85BE5828737D6A0BECC13D46DF533B2AE0D183F6A2B1875E2EA24DABBBBA19483E56306A7C2D10B55EFBC7F2A1A1ECF3ADEB4910632E86AD60640AD37A617A7312AD6EFE994600B3434D89CF1A54539221D9D1773159AB97F4DBD27B1C8184E22F044C1BE9E26D3B12F075DFCCE32459E78EAB2E8152",
"t": "9716C9E8AA0452DD66A7D7527901085A030898C878C5DCCCE149809FF9725A81D4D1F2122B10B694B583DF20F780D2345319CED376DE7D440D3E4EE88DC23D58A5C28D986A69292343A16B8D40C481429D47BB8BD80EC06495BC69B8B17D21EE0948691F9067FC2D766FD80EB51533E86E0CD8983FBC2A5C8ADDC562A68389A571BC00E9DC9C778E8B0FDD0897262553C2E371D0F4B2B5C51CE7FC894E4E3B94C9377D4B98AAB09C8AF8C472335DB1BB915A5507E3CBCCE17C3BDF422E68C2FD149839848F0B2BDAF646863BC71ABEC028E56BBC08519F2CBBC487555A371471A54E170DE013CD92C6DBEC4DB7EB57824A4CD3D76621BCDB0C8B0877F025CC22",
"p": "DF1C1C7FE555507BC514413D78AFAC1214C86FB0395664EFBC2E44DD11EA38928772F24D792FD10B126441EFD5FD1AB0AD0D7F13AC806DFC6A4F342F13B0219251D0D4AD7AD43AAC0555586587EE57186F1C436383B20C2FE8517F5E49448B2E02EACA19A55CB4FE250799E9AD1DA2BFDE8D32FBE3610034DFC941CA9489852B",
"q": "EA5D97AA23C1243E577F6107EFADD101377C2E52E9F88B3E28344FE84F098562646B58123103C5B56A02CB4067FC63E371FB235E194C8437D2D9359D8EC5025D82970A4063004BC2313CC33DEAB4989F87F12F21A6DFC2107335BDC5E3856B3458946E35499B04D9378F3FE62BB693A2DBDF62561DB08A1E644716B373538683"
},
"remoteParties": [
{
"partyId": "co_signer2",
"index": "02",
"gX": {
"x": "105BC27C54023A5143CD96AE11E41DB68B83024B95F8E3A9FF8A15BCE5C547DC",
"y": "020C31C3A6FB859C399B21E3220C638CC56618E15391DA298619479CD3FE7966",
"curve": "secp256k1"
},
"gY": {
"x": "174B7A368F939A991AB89E1343ACE41A53B336B7209FB874DF98A49E760D9C10",
"y": "DC0126367F9F55D7DF11EF6524D34C87BCB65976ADA28CEDAA00A4DC52354050",
"curve": "secp256k1"
},
"N": "CF49D87B4AC0A6C54318B69AFACA03B7BEA69AED3D1709B814EB4B847679BAC2CF3CDCD4786E93F8317071B0CC94E6DF45049D6D71FE83C966FCB45F4841BB78C0B4696093FFDDB0689A68EF87FA890262C02BD1D83B7E10B9E95CBBCCE36F2937A1C9CA7F699D1BFAFB4614315DCB1003B475023E3877BF5612020FCDDF48B895054B7FA837A55FA54BD455F2D70850F9357E44F00E339E550C5698DF19A67F8205F7AF2814864204119AA7199C8123B1F6978B254B78487EF30710F77AFE8A41B6976FD4340BA18450C63EEFB2263C835D7E25B385D24F255F9A3D5E842DB9AEE4C43DAE511AF4B0CBA8925ECB08EC50E2BFF91F2FF1FB2BBD104A03C57FF9",
"s": "60316B03B04E909BC765625F899490A55FA24155F121A2189DE89AD5A61A03F93CCDCAAD42241162E65DAC9D71E549D1353091D3F74172063A6D4920C593A92472558A37C36D0BA776AB7C83728B4699333B107557A40FA87591733B6A92BDB2C410167132962DBE33AE7170B5B17800402361B2FC42D4D9E488132D95C3FAD64D9765ED35E1BC898A1E6E61F5A2E436B979D64E1E66BA2ABEC53DB76B6FAB051375EEB2696DAA54DC41840356AAFAF4595470A1502D3F2756768A75793ABA9D95CE7E49F6D027D4667A4AD862561CF434CFECC74B7EDC8ED3CB29DFC183E5BEC69D44B6E23AA325EFFC51A150B58FE6759463EF39BD56EECB84FB20AF1B1B5C",
"t": "CB9C053CD53B83F98F0C8C6D676F5C8E4850A77CD3E6F40BF9915CFE3A3B51270C5ABDBA2DC7CB77AEC2AE7F49D2D43F42861E0E585034580FD99F6EB2CC3648851926360648AFB9D82F8271089872A131927147F110E9CE5D81E1D64B6F1787DB8B39B9E7A2C5A33D72648E5E85BA69FE5F73189563AEA1040423E4E95898B8620B306229696AB85A10611DC4D217A4DFC1D4F51C4C64FB61C9721E578ED2E6649A923BB650B2A5957DB95B84C33717602289FABF2AE92740B9F6D21965E69C3E68BE6B250B46ABB654908A55C6F6F5B4981DE084F6B8FEE0BAEBC12E39F4524DEAED96EA2D7C7B7E37F6763893E7778302541886EF9AD693FE91AAA620C6D1"
},
{
"partyId": "co_signer3",
"index": "03",
"gX": {
"x": "A528F8605F5BDCA6B92CC5AD64649F171F004D69527364F52B043BAF2D0EDC19",
"y": "2F5B8759E1A01771EB31D349B16E59071363172ED2B2D1B308A56117B793C8C1",
"curve": "secp256k1"
},
"gY": {
"x": "0E2A7B6C75BF04DDA6206216A9107226BBC4C55BDB98E5163B8D990F3A59D1FB",
"y": "3036E4B8283E10776209EB9DB900C1D93ECE550DC0C58B807A2E55FC2F33FB71",
"curve": "secp256k1"
},
"N": "C2B2958FEF36DC76ECBD09F2E8E3130574409456D0DA534BEDF7BEB136D0CFF9786D46A30BC8E0108075C16C304166F7508E64F9E93B46891BF3E0EC13BD4ED4AFC4164D8F4CED0FBAFF0B4412CF14F9A3D74C8967A198C8981F3E243AA41EBD5C0DFD5F207028128F1AAC742D31E3126B05FBD87CDEEE22017B41CA6B3124D104E5AD597EAB2472F5475949DCC631F6D0C362B340692698BF0BA971C3DD1769051EF7126E0822661FC110E88DC4804CB50B707AC38191C3A0E7E48E23CB6834BA79C7C23163934B504EE8F074808C0C3C3680246F508C83639B258CC618E691E3F3F1A568841B88E00ACB39ECE1A927A695D74D8FE21AB56D16DA5DE99F6C19",
"s": "AC24F376126075EEC3C01F891297EC595B3264C6978437FA6B326C0554EA8A08F327EB29756F4C56245335E280D327BECA14BE27C812AB23770676136B893C3889975F5B5E5C7A8506A57AB0577FC64C9067E165ABB1E7D93415A7A75EF6F74AB1A24C79EBFB5CD1DF1CBDB163EF23BFBB85DB5C71E06CBF5D44258FDBA1BD351314E2FAC7B9B6712AA49F46B0BB6C3996AB9DB4D670079D2E3360F83B0E1552B83E24674AF0ABDBDF37F32E6D72003D8A21C4AE35C334691F7D4BB7EBE9265B9D8485DBC4F104C1D9158FEC67EEF968CC3AAD4168162B2C9729B66ED1493806CE4BF7EBE0DBC10A34749366D81C86DA612340F6DBE09D0D9802F6E28A6DD01A",
"t": "3F8E25BE6F92CA820D85CF3A9489BFE9A992D21D1F27E625C250BD528D02F9DCCC55438BD3902A5857926C0A3DCACC22911796F26D8970FFA7F7D8B49D65D6E288FBB05E481737EFB677F156BC264A504E71BA7ABBA02F269708EEB810EADF7CD5C261D43786F2BEBDAC1E8973C77114D42D8CD63C36CAF95E5AE6905A5A73F04A689CD3C73FDE2722F81D431921C75EF67FAF71B1A08F16300C93D06DF6275319F6F4001CFFCF91EFD8E0867264AD05D9EF58344169C05637BBA279809814F9C7A960F8B142574B10E80C682F069EE5D31525B65CCE043F79255C7DAE8FAA727C53BEB15F416F5F0CF8E9F998812CC08822D611FE81FD46323A66024E15E6D4"
}
],
"gX": {
"x": "A2A4C6D8A47A6889D5A188923C7701D4776AB5748920D077C9D747C53AFED33B",
"y": "747AE5DF5936B3DCBF2F6F6ADD7B2B2F17159BC8CCA3A3B0DBF4ED9CDF2D1902",
"curve": "secp256k1"
}
}
```### Sign
Refer to the [test case](./test/cmp/sign_t_n_mt_test.cpp) for more details.# Important Tips
- A reliable broadcasting channel is needed. Messaging is left to the application layer, which is not provided by this library. There should be a mechanism in your transport that allows "reliable broadcasting", which means that parties can broadcast messages to other parties so that everyone is guaranteed to receive the same message. This can be done, for example, by sharing and comparing hashes of received messages.
- Refer to the revised version of GG18 but not the old one. This revised version of GG18 fixes some crucial details in the protocol. The proof of the protocol described in the previous version is not correct, though no attack has been shown that exploits the bug in the proof.
- The ZK proof of GG20 refers to the revised GG18 and CMP.
- There some typos in the CMP[\[3\]](#Reference). More details in ["Modify MPC-CMP as a Threshold Signature Scheme"](./Modify-MPC-CMP-as-a-Threshold-Signature-Scheme.pdf)# Security Audit
The GG18 protocol originates from a previous repository developed by Safeheron and audited by Kudelski Security. There are some updates after the audit due to the attacks on the protocol[\[4\]](#Reference) [\[5\]](#Reference) [\[6\]](#Reference).
The CMP protocols has been audited by LeastAuthority in 2023 and we have upgrade the protocol according to the opinions of the LeastAuthority, and this is [the audit report](doc/Safeheron_Crypto_Suites__Multiparty_ECDSA_Updated_Final_Audit_Report_Least_Authority.pdf) which can be found in [LeastAuthority website](https://leastauthority.com/wp-content/uploads/2024/02/Safeheron_Crypto_Suites__Multiparty_ECDSA_Updated_Final_Audit_Report_Least_Authority.pdf).
# Reference
##### [1] [GG18: Fast Multiparty Threshold ECDSA with Fast Trustless Setup](https://eprint.iacr.org/2019/114.pdf)
##### [2] [GG20: One Round Threshold ECDSA with Identifiable Abort](https://eprint.iacr.org/2020/540.pdf)
##### [3] [CMP: UC Non-Interactive, Proactive, Threshold ECDSA with Identifiable Aborts](https://eprint.iacr.org/2021/060.pdf)
##### [4] [A Note on the Security of GG18](https://info.fireblocks.com/hubfs/A_Note_on_the_Security_of_GG.pdf)
##### [5] [Alpha-Rays: Key Extraction Attacks on Threshold ECDSA Implementations](https://eprint.iacr.org/2021/1621.pdf)
##### [6] [Attacking Threshold Wallets](https://eprint.iacr.org/2020/1052.pdf)# Development Process & Contact
This library is maintained by Safeheron. Contributions are highly welcomed! Besides GitHub issues and PRs, feel free to reach out by mail.